0% encontró este documento útil (0 votos)
17 vistas18 páginas

Personalización de Odoo

El documento describe la personalización de Odoo a través de diferentes niveles, incluyendo el uso de add-ons, la arquitectura de la aplicación y la estructura de los módulos. Se detallan aspectos técnicos como la configuración de la base de datos, la creación de modelos y campos, así como la definición de la interfaz de usuario mediante XML. Además, se abordan herramientas de desarrollo y procedimientos para reiniciar Odoo y gestionar permisos de acceso.

Cargado por

L Íñigo Gimeno
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
17 vistas18 páginas

Personalización de Odoo

El documento describe la personalización de Odoo a través de diferentes niveles, incluyendo el uso de add-ons, la arquitectura de la aplicación y la estructura de los módulos. Se detallan aspectos técnicos como la configuración de la base de datos, la creación de modelos y campos, así como la definición de la interfaz de usuario mediante XML. Además, se abordan herramientas de desarrollo y procedimientos para reiniciar Odoo y gestionar permisos de acceso.

Cargado por

L Íñigo Gimeno
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 18

Personalización de Odoo (3 niveles):

1.​ “Con el ratón” (T3, T4)


2.​ Con ficheros de marcas: módulos, consultas (T4)
3.​ Con Odoo Studio (T4)
4.​ Plugins con Python (T5)
¿Qué son addons?
Los add-ons en Odoo, también conocidos como módulos, son
extensiones que añaden funcionalidades específicas a la
plataforma (principalmente módulos). Estos módulos permiten
personalizar y ampliar las capacidades de Odoo para adaptarse
a las necesidades particulares de cada empresa.
Rutas en Odoo 18 (Ubuntu 22.04 LTS):
●​Configuración Odoo: /etc/odoo/odoo.conf
●​Base de datos: /var/lib/postgresql/<versión>/main
●​Addons: /usr/lib/python3/dist-packages/odoo/addons

#Orden para buscar las carpetas addons del sistema


find / -name addons

En Odoo.conf
●​addons_path = rutas de los módulos separadas por comas
para los addons personalizados (es opcional)

Módulo de ventas
/usr/lib/python3/dist-packages/odoo/addons/sale
ARQUITECTURA DE LA APLICACIÓN ODOO
Odoo sigue una arquitectura de 3 capas, lo que quiere decir que la
presentación (HTML5/JS/CSS), la lógica de negocio (Python) y el
almacenamiento de datos (PostgreSQL) están separados:
ARQUITECTURA DE LA APLICACIÓN ODOO
En Odoo todo empieza y acaba con módulos (=caso de negocio).

Según el alcance del módulo, este puede estar escrito en cualquiera


de esas capas. Es suficiente con tener un nivel moderado de
conocimiento de HTML e intermedio de Python, y no muy alto de
PostgreSQL.

Las extensiones de lado de cliente y de servidor son empaquetadas


juntas en un módulo que será cargado en una base de datos. Un
módulo es un conjunto de funciones y datos con un único propósito.
Los módulos orientados al usuario final están expuestos como
“Apps”, pero la mayoría de los módulos no son apps.
ARQUITECTURA DE UN MÓDULO ODOO
Un módulo puede contener: objetos de negocio (presupuestos,
facturas…), vistas de objetos (UI), archivos de datos (declaración
XML/CSV del modelo de datos) y controladores web (imágenes y
archivos JS/CSS). Ninguno de estos elementos es obligatorio.

Cada módulo es un directorio dentro de un directorio de módulos.


Un módulo es declarado por su manifiesto.

Cuando un módulo incluye ficheros python (objetos de negocio),


estos se organizan en un paquete python, que contiene instrucciones
de importación para los archivos python en el módulo.
ALGUNOS ELEMENTOS DE UN MÓDULO ODOO
●​Archivo README.md tiene texto explicativo de la finalidad del
módulo.
●​Archivo __manifest__.py, del que ya hemos hablado. Lleva datos
descriptivos del módulo, indica dependencias y ficheros de
precarga de datos.
●​El archivo __init__.py que indica que el directorio es un paquete
python.
MODELOS
Capa ORM: Componente clave de Odoo (Object-Relational Mapping,
mapeo relacional de objetos). Esta capa evita escribir la mayoría del
SQL al personalizar Odoo.

Los objetos de negocio son escritos como descendientes de la clase


Model, de Python.

Los modelos se pueden configurar mediante la asignación de


atributos en su definición. El más importante es _name, que indica el
nombre del modelo en el sistema Odoo. La creación de un modelo
conlleva la creación automática de una tabla con su nombre.
CAMPOS
Los campos se usan para definir lo que el modelo puede almacenar y
dónde lo hace. Los atributos se definen como campos en la clase del
modelo.
Base de datos (PostgreSQL)
●​Entrar (suponemos que se llama bdOdoo): psql -d bdOdoo
●​Ver todas las tablas de la BD: \dt
●​Ver la info de una tabla: \d una_tabla
●​Una consulta cualquiera sobre la tabla:​
SELECT * FROM una_tabla ORDER BY 1 LIMIT 10;
Herramientas de desarrollo
Para completar y comprender mejor nuestro análisis de ingeniería
inversa, nos podemos ayudar de las siguientes herramientas:
●​Modo desarrollador de Odoo: podrás ver los metadatos de los
modelos, incluyendo los campos y las relaciones entre ellos.
●​pgAdmin: es una herramienta de administración de bases de
datos PostgreSQL muy popular. Te permite visualizar la estructura
de la base de datos, ejecutar consultas SQL y realizar otras tareas
de administración.
●​Modo debug: Añade a cualquier URL de tu aplicación Odoo el
parámetro ?debug=1. Te permite ver información adicional (info
de depuración), editar sobre la marcha y desbloquea opciones
de desarrollador.
Cómo reiniciar Odoo
Reiniciar el servidor a mano (shutdown) o a máquina (con el ratón). Sin embargo, es una
solución un poco drástica si sólo queremos reiniciar Odoo. Veremos que reiniciar Odoo es una
operación muy frecuente. Para ello, ejecutaremos los siguientes pasos:
1.​Paramos el servicio (la orden service es obsoleta):​
sudo systemctl stop odoo
2.​Arrancamos Odoo a mano, indicando la base de datos con la que trabajamos (-d
database) y el módulo que hemos modificado y queremos que el sistema actualice (ORM
cree sus tablas, etc.). ¡OJO! No hacemos sudo:​
/usr/bin/odoo -d database -u módulo
(aquí suelen ser de interés los mensajes de error y de configuración)
3.​El arrancado a mano (paso 2) nos deja inoperativo el terminal o, si lo cerramos, se cierra
Odoo. Lo interrumpimos con CTRL+C para arrancarlo como servicio. Suele ser útil ver
mensajes de error.
4.​Lo arrancamos como servicio:​
sudo systemctl start odoo
5.​Comprobamos que todo ha ido bien:​
sudo systemctl status odoo.
Inicializar un módulo con datos
Esto puede resultar útil para tablas de look-up por ejemplo (países,
provincias, etc.), o para definir permisos de acceso (ver siguiente
apartado).
1)​ Crear en el módulo una carpeta data y un fichero CSV con la
estructura de la tabla (ver en psql) y los datos. No olvidar campo
id. Debe llevar el nombre del modelo que rellena con datos.
2)​ Añadir el fichero y su ruta relativa al fichero manifest (si son
varios, es una lista separada por comas:​
‘data’: [‘data/model.csv’]
Permisos de acceso
Los permisos de acceso del módulo deben definirse en el fichero
security/ir.model.access.csv, y debe declararse en la lista ‘data’ del
fichero manifest:
‘data’: [
‘data/model.csv’,
‘security/ir.model.access.csv’]
Crear un fichero CSV con la siguiente estructura de campos:
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
Actualizar el módulo desde la interfaz de usuario de Odoo (menú
Aplicaciones).
Interfaz de usuario - Archivos XML
Los archivos XML deben ir en el directorio data y deben ser declarados en el fichero
manifest. Son considerados ficheros de datos, y se cargan secuencialmente, en el
orden indicado en el manifiesto.
Si los ficheros van asociados a vistas, deberán ir en el directorio views. Estos ficheros
nos valdrán para hacer también menús y crear acciones asociadas (ambos serán
registros de la base de datos).
En Odoo, la interfaz de usuario (acciones, menús y vistas) se define en gran medida
mediante la creación y composición de registros definidos en un archivo XML. Un
patrón común es Menú > Acción > Vista. Para acceder a los registros, el usuario
navega por varios niveles de menú; el nivel más profundo es una acción que activa la
apertura de una lista de registros.
Interfaz de usuario - Acciones
Las acciones definen el comportamiento del sistema en respuesta a las acciones del
usuario (inicio de sesión, botón de acción, etc.). Se pueden almacenar en la base de
datos o devolver directamente como diccionarios. Tienen dos campos obligatorios:
tipo (categoría de la acción) y nombre (breve descripción que puede visualizar en la
interfaz de usuario). Las acciones son el vínculo entre menúes y modelos.
La acción más sencilla es la que se activa haciendo clic en un elemento de menú. Un
ejemplo de acción de este tipo sería:
<record id="test_model_action" model="ir.actions.act_window"> ●​ id es un identificador externo. Se puede utilizar para
hacer referencia al registro (sin conocer su
<field name="name">Test action</field>
identificador en la base de datos).
<field name="res_model">test_model</field> ●​ model tiene un valor fijo de ir.actions.act_window
(Window Actions (ir.actions.act_window)).
<field name="view_mode">list,form</field> ●​ name es el nombre de la acción.
</record> ●​ res_model es el modelo al que se aplica la acción.
●​ view_mode son las vistas que estarán disponibles; en
este caso son las vistas de lista y formulario. Veremos
más adelante que puede haber otros modos de vista.

Ve el siguiente archivo de ejemplo. Presta atención a las etiquetas <?xml> y <odoo>.


Interfaz de usuario - Menúes
Objetivo: crear menúes y la vista por defecto.
Para reducir la complejidad al declarar un menú (ir.ui.menu) y conectarlo a la acción correspondiente, usamos el
atajo <menuitem>:
​ <menuitem id="test_model_menu_action" action="test_model_action"/>
El menú test_model_menu_action está vinculado a la acción test_model_action, y la acción está vinculada al
modelo test_model (ver ejemplo del apartado anterior). Como ya se mencionó, la acción es el vínculo entre el
menú y el modelo.
Sin embargo, los menús siempre siguen una arquitectura y en la práctica hay tres niveles de menús: menú raíz
(el que aparece en Aplicaciones), menú de primer nivel (en la barra superior) y menú de acción.
La forma más sencilla de definir la estructura es crearla en el archivo XML. Una estructura básica para nuestro
ejemplo (test_model_action) es:
<menuitem id="test_menu_root" name="Test">​
<menuitem id="test_first_level_menu" name="First Level">​
<menuitem id="test_model_menu_action" action="test_model_action"/>​
</menuitem>​
</menuitem>

El nombre del tercer menú se toma del nombre de la acción.

No olvides reiniciar el servicio, cerrar sesión y volver a entrar.


Interfaz de usuario - Campos, atributos y vistas
Hay muchas posibilidades de ajuste en Odoo, pero normalmente el primer paso es asegurarse de que:

●​ Algunos campos tienen un valor predeterminado.


●​ Algunos campos son de sólo lectura.
●​ Algunos campos no se arrastran al duplicar un registro (no se duplica el valor).

Esto se hace modificando la clase del directorio models. Es decir, modificamos el modelo. Debemos reiniciar
Odoo para que actualice el módulo (odoo -u). Esto actualizará la base de datos, y la vista, si corresponde.

Valores predeterminados

●​ Pueden ser un valor concreto:


name = fields.Char('Nombre', required=True, default=”Desconocido”)

●​ Pueden contener una función (ver también otros métodos de la clase Fields)
last_seen = fields.Datetime("Last Seen", default=fields.Datetime.now)

Campos reservados

Algunos nombres de campos están reservados para comportamientos predefinidos. Deben definirse en un
modelo cuando se desea el comportamiento relacionado (ver la documentación de Odoo 18).

También podría gustarte