Está en la página 1de 11

Creación de módulos en Odoo.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A grandes rasgos, con Odoo hay 3 modalidades para crear módulos:

• Crearlo desde cero.


• Añadido a uno ya existente, dándole más funciones.
• Modificar un modulo de forma visual.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Hay que diferenciar en cargar un módulo ya totalmente desarrollado y listo para producción, que crear uno,
para esto último es conveniente loguearse como usuario administrador y después desde el menú principal [] ir a ajustes
y activar el modo desarrollador (sale un icono en forma de `bicho´ en la barra superior), con esto se tiene acceso a
opciones técnicas y además si todavía no estan definidos los permisos se debería subir de privilegios desde el menú del
`bicho´ a superusuario, así se podrá acceder a tablas y menús en desarrollo.

Observación:
En Odoo hay una jerarquía de privilegios de acceso y usabilidad para controlar la seguridad dentro del ERP
Odoo.
Hay 2 grupos principales de usuarios…
1º TIPO:
a) Al loguearse como usuario con privilegios en PostgreSQL y Odoo, se convierte en administrador.
b) Después desde Ajustes, puedes activar en “modo desarrollador”.
c) Desde el menú del `bicho´ a superusuario.
2º TIPO:
a) Usuario básico sin privilegios.
b) Usuario básico con privilegios para un uso concreto de un módulo concreto.
c) Usuario básico con privilegios de administrador de un módulo concreto.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Hay 4 elementos a tener en cuenta, en todo desarrollo de un módulo:


1. Los menús y submenús, menús hijos.
2. Las vistas, hay varios tipos entre los típicos tenemos:
◦ Árbol o Tree.
◦ Formulario o form.
◦ Vista kanban.
3. Las acciones.
Con ellas se definen todas las acciones a los diferentes eventos desde como tiene debe desplegarse un submenú
hasta lanzar formularios.
4. Los modelos.
Dentro de Odoo, es donde se definen las tablas que usará la base de datos.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Un módulo en Odoo ¿qué es?

Básicamente en una carpeta dentro de la carpeta Addons que cumpla con una estructura de subdirectorios y ficheros
que Odoo espera encontrar.

Básicamente hay dos tipos de ficheros tipo python (xxx.py) que define la lógica y el resto que define las características
del módulo.
Nota: reglas para sincronizar los cambios, dentro de la estructura compleja del ERP Odoo, no se actualiza de forma
inmediata. Por ello hay que tener darle una ayudita al sistema, y si se ha añadido algún fichero python o un módulo
completo mejor reiniciar el sistema
(como superusuario root)

systemctl start/stop/restart odoo

para lanzar/parar/reiniciar a Odoo.

Ver los servicios, en general.

En particular.

Observación:
Después activar el “modo desarrollador”, y de reiniciar a Odoo.
Desde Aplicaciones → “actualizar lista de aplicaciones”.
Se ve:
El nombre de la carpeta es el nombre del módulo (en rojo)
El nombre de verdad del modulo (el bonito), definido 'name': 'xxx',

Nota:
dentro de las carpetas hay ficheros xxx.pyc son unos ficheros compilados de los scripts de python, estos de
pueden borrar que los reconstruye Odoo. Así lanza más rápido los módulos en las sucesivos reinicios. Además de usar
mucha cache.

Las modificaciones del resto, al menos, si la aplicación ya está instalado, se deberá actualizarla como desarrollador del
menú de tres puntos de la aplicación.
Construyendo un módulo desde cero:

Usado el siguiente comando


odoo scaffold (nombre del módulo) ./(ruta hasta la carpeta de instalación de Odoo)/addons/

Se crea, en este ejemplo, un módulo de nombre modulo_sencillo y su estructura básica de pondrá en una carpeta con
ese nombre dentro de addons.

Obligatorios __init__.py y __manifest__.py

__init__.py
se llama a otros .py con la lógica del programa y sobre todo a models que define las clases que
define las tablas que usará PostgreSQL.

(lo que no deseas usa lo comentas, o lo borras)


Esto llamará a lo que hay dentro de la carpeta models.

__manifest__.py
donde se adorna el módulo con información de sus creadores e información de su estructura.

Adorna:
‘name’ : su nombre bonito y como aparecerá en el menú Padre (Principal [])
‘secuencia ‘: el orden de aparición entre las aplicaciones.
‘versión’ : lo mira cuando se actualiza.
‘depends’ : lo que depende, mínimo el módulo base (conversación)
‘categorias’ : para filtrar en las búsquedas de aplicaciones, o agruparlo en menus
En aplicaciones cuando filtras lo puedes buscar por la categoría al que pertenece
ojo, en las búsquedas lo hace por la versión castellanizada de nuestro módulo.

‘sumario’ : breve descripción.


‘description’ : Una descripción más detallada de que va el módulo, con el formato de triple comilla ''' ( texto ) '''

Importante:

‘data’ : donde se pone "la ruta" de los ficheros que describen los elementos de Odoo: menús, vistas y acciones,
seguridad, y algún css para adornar el look (no obligatorio).
En las vistas las acciones y los menús pueden describirse en varios XML por separado.

‘demo’ : un fichero csv, con datos de demostración.


‘application’ : si es una aplicación (por defecto, sin no se pone nada, es False), útil a la hora de filtrar por
aplicación, (cuando la buscas para instalarla, o actualizarla cuando haces cambios si ya estaba actualizada).
‘installable’ : si es instalable (cuando no lo es, son módulos que se instalan cuando instalo otro módulo, por si
mismo no es instalables, son requeridos en la instalación de otro módulo)
En la carpeta models:
Es donde se describen una clases en python: los modelos que es como Odoo define a las tablas.

Como en cada carpeta con ficheros de python, siempre se repite la misma estructura …
__init__.py El script principal, te indica que otros .py carga
en muestro ejemplo modelo1.py → las tablas,

En nuestro caso de los dos ficheros models.py y modulo1.py


sólo usaré el segundo, por ello lo comento en el __init__.py

Sus tablas están definidas como clases.

Estas tablas, como en cualquier base de datos, se pueden usar programas externos para verlas o analizarlas como psql,
Pgadmin4 , para verlas, se busca en la ruta donde las guarde Odoo.
--> bbdd -> schemas-> public-> tablas

Nota:
Se aconseja un convenio para nombrar las tablas, como: nombre del modulo al que pertenece punto nombre indicativo
de los campos que quiero que tenga la tabla.
Ej: ‘tools.averia’

modelo1.py

Cada clase de python


hereda de models, para definir
las tablas …

_name : nombre de la tabla ‘modulito.quehace’ , después los demás campos que quieras.
name : obligatorio el campo, que será campo clave, aconsejable required (lo fuerza como requerido)
se usa para relacionar las tablas entre ellas, como campo clave `required=True´
dentro de () se toma como la etiqueta.
Ojo: el orden de las tablas importa, al menos en la versión actual de Odoo.

Además, como en toda base de datos relacional, tenemos …


y los campos relacionados con otras tablas como one2many uno a muchos
y los campos calculados, indicado con el parámetro compute='_nombre_funcion', son a través de funciones
para hacer alguna operación.
El parámetro self , hacer referencia a los valores de la propia tabla.

Recordemos nuestra estructura…

Seguridad
Recordemos que en el __manifest__.py, se hace referencia a la carpeta security donde puede haber varios
ficheros que definen la seguridad, pero como mínimo:
security/ir.model.access.csv

siempre tiene la misma cabecera (la estructura de los datos a meter)


y después van una linea por cada modelo tabla que queremos dar permisos (como mínimo, ya que a una misma tabla
puedes indicar como se comportan los usuarios de un determinado grupo, una línea por grupo al que se aplica)

-identificador único (nombre que le das a la regla)


-identificador de grupo (nombre que le das a la regla)
-el modelo donde aplico la seguridad, con la notación model_(nombre de la tabla)
en nuestro ej. de la tabla tools.averia se escribiría como model_tools_averia
-grupo al que hace referencia la regla
base.group_user, así llama Odoo al grupo base ( Usuario interno)

Si necesitas definir un grupo o grupos para el acceso a tu modulo, seria el otro fichero ej: tools_security.xml
(que deberías indicarlo en el __manifest__.py ) también en la carpeta security.
Views, Vistas:
en la carpeta views se colocan los ficheros que van a definir los menús, las vista y las acciones.
En nuestro ej:

Es un típico fichero XML (el xml no necesita fabulaciones como python pero queda bonito),
donde se puede observar que los menús se referencian con menuitem, que para indicar los submenús debe llevar el
parámetro parent (que hace referencia de su menú padre).

Además, las acciones se definen en los record donde se declaran desde la acción más simple que sería el
despliegue un submenú cuando haces clic, hasta acciones más complejas que lanzan vistas tipo tree (árbol que desplega
la información como una lista) o tipo form (de formulario, para introducir datos. )

Los datos necesarios para describir:


id identificador único
name nombre

Los demás datos, nos definen que tablas se usarán, como se verán y como se desplegarán (no voy a quedarme con los
detalles).

Nota: el menú padre será el que no hace referencia a otro con `parent´
Desde la óptica de la sesión remota:

Login:

Como administrador, activo el modo desarrollador.


Para indicar a Odoo, que has creado (o puesto) un módulo nuevo, es aconsejable actualizar la lista de
aplicaciones, por ello para a modo desarrollador.

Desde Aplicaciones,
haces clic en “Actualizar
lista de Aplicaciones”

Como se activo el atributo en el


__manifest__.py

‘application’ : True,

aparece con el filtro de


Aplicaciones, y a su vez
poniendo “sencillo” como otro
filtro aparece muestro módulo.

Sólo queda dar a Activar


Una vez instalada, ya sale en el menú Principal []

Recuerda que se puso name="Menú Padre" como menuitem Padre

Sólo quedaría la gestión de la seguridad y que usuarios acceden.

También podría gustarte