Si ya tienes Odoo instalado mediante Docker en Ubuntu, es probable que estés listo para comenzar a desarrollar tus propios módulos personalizados. Si aún no lo has hecho o tienes dudas al respecto, puedes consultar nuestro tutorial aquí.
Una de las primeras cosas que necesitas es entender cómo estructurar tu módulo correctamente para que sea reconocido por Odoo.
En este artículo te mostraremos paso a paso cómo crear la estructura mínima necesaria para que tu módulo funcione sin errores.
¿Qué deberías tener en este momento?
Asumiendo que seguiste buenas prácticas y centralizaste todo en una carpeta de proyecto (como odoo-docker), la estructura de carpetas que deberías llevar hasta ahora es la siguiente:
1. Creación del directorio addons
Para poder crear módulos nuevos en Odoo, es necesario contar con una carpeta especial que contenga la estructura de los módulos personalizados. Por convención, esta carpeta se llama addons/ y debe ser creada manualmente dentro del directorio principal de tu proyecto (odoo-docker). Dentro de esa carpeta se crean los directorios para los módulos personalizados que quieras realizar, quedando de la siguiente manera:
En este ejemplo hicimos un directorio de un módulo llamada mi_modulo_personalizado. A continuación veremos la estructura básica para un módulo.
2. Estructura básica de un módulo Odoo
Para que Odoo logre cargar un módulo correctamente, este espera una estructura de archivos específica mínima, la cual se ve así:
2.1 __init__.py (archivo raíz)
Este archivo inicializa el módulo como paquete Python. Aquí se importan los submódulos como models, controllers, etc., para que Odoo los cargue. En este ejemplo, como tenemos el submódulo models, debemos llamarlo en el __init__.py principal para que funcione correctamente.
En caso de no colocar el submódulo aquí, no funcionará, ya que no se está llamado.
2.2 __manifest__.py
Este es el archivo de manifiesto del módulo, el cual define la información principal del módulo, como: nombre, versión, descripción, dependencias (depends), archivos XML a cargar, si es instalable o no, entre otros.
Ejemplo básico:
2.3 Carpeta models/ y su contenido
La carpeta models/ contiene los archivos Python que definen la estructura y comportamiento de los datos de tu módulo. Aquí es donde defines:
-
Nuevas tablas o modelos (models.Model)
-
Campos (fields.Char, fields.Integer, etc.)
-
Métodos (acciones personalizadas, restricciones, cálculos, etc.)
-
Relaciones entre modelos (One2many, Many2one...)
En pocas palabras, todo lo que hace funcionar tu módulo a nivel de lógica y base de datos vive en models/.
__init__.py
Dentro de esta carpeta, agregaremos su propio archivo de inicialización __init__.py, el cual se encargará de importar los archivos .py que se encuentren dentro de la carpeta models/, permitiendo que Odoo los reconozca y cargue correctamente al iniciar el módulo.
En este ejemplo, tenemos un archivo llamado modelo.py, por lo tanto el __init__.py de models deberá contener lo siguiente:
modelo.py
El archivo modelo.py contiene la definición de un modelo en Odoo. En este ejemplo, se crea una clase con un único campo de texto que servirá para almacenar el nombre de un registro.
En este caso, el archivo modelo.py define un modelo personalizado en Odoo llamado mi.modelo, que representa una tabla en la base de datos con dos campos: nombre (de tipo texto) y edad (de tipo entero).
2.4 Carpeta views/ y su contenido
La carpeta views/ contiene los archivos XML que definen la forma en la que se muestran los datos de tu módulo en la interfaz de Odoo. Aquí es donde defines:
-
Formularios para crear o editar registros (<form>)
-
Vistas en forma de lista (<tree>)
-
Búsquedas (<search>) y filtros
-
Acciones que abren vistas (ir.actions.act_window)
-
Menús y submenús de navegación (<menuitem>)
En pocas palabras, todo lo que ve y usa el usuario para interactuar con los datos de tu modelo vive en views/.
vista.xml
Este archivo XML define la interfaz visual del modelo ejemplo.modelo en Odoo. Incluye todo lo necesario para que el usuario pueda interactuar con los datos desde la interfaz web.
- Vista tipo formulario (<form>):
Crea un formulario con un campo llamado name, donde el usuario podrá escribir un nombre.
- Acción (ir.actions.act_window):
Define una acción que abre el formulario del modelo cuando se hace clic en el menú correspondiente.
- Menús (<menuitem>):
Crea una entrada principal en el menú llamada "Ejemplo" y una subopción llamada "Modelos", que al hacer clic abrirá la vista del modelo ejemplo.modelo.
3. Activa tu módulo
Una vez teniendo todos los archivos esenciales para un módulo, ya podemos activarlo. Para ello:
- Reinicia tu contenedor de Odoo.
- Ve al backend de Odoo > Apps.
- Haz clic en el ícono de Actualizar Apps List (puede que necesites activar el modo desarrollador).
-
Busca tu módulo y haz clic en Instalar.
Crear un módulo personalizado en Odoo no es complicado una vez que comprendes la estructura básica de archivos. Si trabajas con Docker y Ubuntu, es importante asegurarte de montar bien los volúmenes y configurar correctamente las rutas de los addons.
¡Y listo! Ahora puedes comenzar a desarrollar funcionalidades personalizadas que se adapten a tu negocio.
En Asimov desarrollamos módulos personalizados para Odoo que se ajustan exactamente a tu flujo de trabajo. ¡Contáctanos y empieza a optimizar tu gestión hoy mismo!