Estructura de un módulo de Odoo

14 de noviembre de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Un módulo de Odoo es un módulo de Python empaquetado gracias a un archivo de manifiesto llamado __manifest__.py (los detalles de este archivo estan detallados en otro post). Honestamente... la estructura de un módulo de Odoo puede ser cualquier cosa, siempre y cuando sepamos declararlo correctamente en el archivo __manifest__.py y los archivos __init__.py puedan leer los módulos de Python correspondientes.

Pero existe una convención no escrita sobre como se estructura un módulo de la que vamos a hablar ahora. Es una convención de-facto que uno observa en los diferentes módulos de OCA y Odoo, y vale la pena respetar. Si uno respeta esta convención de la estructura le hace más facil la vida al resto de los desarrolladores.

Veamos un caso práctico, el módulo contract de OCA. El cual en github se ve como la siguiente imagen:


Como pueden ver, tenemos dos archivos en el directorio principal del módulo. Y los vamos a encontrar siempre (a menos que el módulo no tenga funcionalidad Python). Estos archivos son __manifest__.py (del cual hablamos en otro post) e __init__.py. El primer archivo es el manifiesto y empaqueta el módulo en un módulo de Odoo (el cual puede ser persistido en el modelo ir.module.module). El segundo archivo basicamente importa los contenidos de los directorios models y wizards.

Veamos ahora cada uno de los directorios

  • controllers: el directorio controllers lo encontramos en los módulos web. Ahí encontraremos la declaración de las rutas web y la lógica que el sistema ejecutará cada vez que visitamos una URL o procesamos un formulario web (por lo general, los desarrolladores senior trabajan con esta clase de funcionalidades)
  • data: en este directorio encontramos archivos xml o csv que se persisten en la base de datos de Odoo. Por ejemplo datos iniciales (algo que sucede cuando uno debe actualizar la configuración de un sistema de producción), secuencias, etc
  • i18n: directorio con las traducciones (si desarrolla en ingles y espera que su módulo sea usado en otro lenguage)
  • models: este directorio es super crítico, debido a que la lógica de los diferentes modelos y su definición se encuentra en los archivos Python de este directorio. Lo ideal es tener un archivo diferente por cada modelo (por ejemplo account_move.py para el modelo account.move, account_journal.py para account.journal y así sucesivamente)
  • report: a veces almacena la definición de los reportes q-web (definidos como archivos XML) o los modelos con vistas de SQL utilizados para realizar reportes dinámicos (algo que describimos en este otro post)
  • security: almacena las definiciones de seguridad; grupos, reglas de acceso, reglas de registro
  • static: directorio donde se almacenan los diferentes assets (por ejemplo Javascript, css, fonts) que se utilizan con los módulos web (sobre todo)
  • tests: a veces se lo encuentra o no, pero contiene los tests automaticos que se aplican al módulo de Odoo
  • views: aquí se definen los archivos de XML con las definiciones de vistas, menúes y acciones que utilizan los sistemas
  • wizards: directorio donde se definen los objetos utilizados para los wizard (los objetos tipo transient que nos despliegan los pop-up que hacen tan divertida la vida del desarrollador) y las vistas que muestran los mismos


Gustavo Orrillo 14 de noviembre de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario