Desarrollo de módulos personalizados en Odoo
La siguiente entrada será la primera parte de un curso donde se explicara como desarrollar un módulo desde cero. Esta publicación da por sentado que se tiene conocimientos básicos en Python, así como también de un dominio básico del ERP Odoo.
El ejemplo a desarrollar será un módulo que permite a los empleados la solicitud de insumos internos al departamento de compras. Este módulo estará compuesto por su propio modelo, vistas y permisos. Posteriormente, crearemos un reporte interno, sobrescribiremos el módulo de compras y por último añadiremos un pequeño flujo de aprobación.
Estructura de un módulo en Odoo.
Lo primero que debemos hacer es crear la estructura base del módulo. Para ello iniciaremos con la creación de la carpeta que albergará el contenido del módulo. En este ejemplo el módulo lleva el nombre de purchase_request y le pondremos este nombre a la carpeta, estará compuesta por los archivos __manifest__.py, __init__.py, así como también por las carpetas models, security y views. En Odoo existe la opción de crear el módulo desde la terminal utilizando la propiedad Scaffold, pero esta opción la veremos en una próxima publicación. A continuación se detalla la estructura que debe tener el módulo
purchase_request
|--__manifest__.py
|--__init__.py
|--models
|--__init__.py
|--views
|--security
Esta carpeta la debemos ubicar en la carpeta que contendrá todos nuestro módulos de terceros. Aquí se tendrá que validar el tipo de instalación que tengamos.
Si se esta utilizando Windows, deberemos buscar la carpeta server dentro de la carpeta principal donde esta instalado Odoo. En esta carpeta encontraremos el archivo odoo.conf. En ese archivo deberemos buscar la línea que contenga el parámetro addons_path = y agregar en el mismo la carpeta. En caso de tener mas de una carpeta podemos utilizar el símbolo de coma para separar las diferentes ubicaciones.
Para contenedores de imágenes, ejemplo Docker, la ubicación de la carpeta debió ser asignada al momento de crear el contenedor. Recomendamos en este caso la documentación de Odoo en la página de docker. Un ejemplo en docker de como agregar la carpeta si se esta creando un nuevo contenedor seria el siguiente:
-v /ubicacion/modulos/terceros:/mnt/extra-addons
Archivo Manifest
El archivo manifest (__manifest__.py) es la identificación del módulo. En él encontraremos un json que albergara las propiedades que son necesarias para el correcto funcionamiento. Para este ejemplo utilizaremos las siguientes: name, es el nombre visual del módulo, en nuestro caso Solicitudes de Compras. version, el sistema de versión que utilizaremos, en nuestro ejemplo 16.0.1.0.1. depends, cuáles son los módulos necesarios para que nuestro módulo funcione correctamente, base y product son los que necesitaremos. El primero es donde se guardan los contactos y el segundo los productos. Por el momento serán estos tres valores, en posteriores artículos agregaremos más propiedades. Nuestro archivo manifest debe tener el siguiente aspecto
{
'name': 'Solicitudes de Compras',
'version': '16.0.1.0.1',
'depends': ['base', 'products']
}
Carpeta Models
En este carpeta almacenaremos todos los modelos que necesitaremos para interactuar con los datos de Odoo, por el momento solo estaremos creando uno. Los archivos Python a crear deberán llamarse igual que el modelo con la excepción del punto que sera reemplazado por un guión bajo, por ejemplo, purchase_request.py
Carpeta Views
Dentro de la carpeta views encontraremos todas las vistas, acciones, menú y plantillas. Al igual que los archivos creados en la carpeta models, en esta carpeta deberemos crear el archivo xml con el nombre del modelo excepto que nuestro archivo deberá terminar en _views, ejemplo: purchase_request_views.xml
En la carpeta views, ademas de los archivos que terminarán en _views.xml también tendremos los archivos que terminaran en _templates.xml. Estos archivos almacenaran plantillas que serán utilizados principalmente por reportes y páginas web cuando hacemos uso del portal o de website.
Carpeta Security
En esta carpeta encontraremos dos tipos de archivos: ir.model.access.csv y un xml donde crearemos usuarios y grupos. El archivo csv sera el encargado de asignar los permisos a los grupos correspondiente. En el archivo xml crearemos usuarios y grupos, a diferencia de las carpetas models y views, este archivo no debe respetar un formato pero podemos utilizar el nombre del modulo, ejemplo, purchase_request_groups.xml o también el nombre del modelo de grupos: res_groups.xml
Con esto hemos finalizado la primera parte de este curso, en la siguiente publicación veremos el apartado de models.