Como instalar módulos en Odoo
Por que instalar módulos de terceros
Si bien Odoo out-of-the box tiene muchas funcionalidades, es imposible que cubra todas nuestras necesidades (sobre todo si necesitamos integrar Odoo con terceros, por ejemplo en Argentina hay que integrar la facturación con los webservices de AFIP). Es por ello que debemos recurrir a la instalación de módulos de terceros que brindan una solución a dichas necesidades. Que pueden llegar a hacer esos módulos de terceros? Muchas cosas. Por ejemplo en Argentina la localizacíón argentina cubre muchas necesidades: factura electrónica, recibos, cheques, percepciones, retenciones... etc. Tambien como módulo de terceros es la integración con MercadoLibre y MercadoPago. Lo mismo si uno necesita habilitar las funcionalidades de Contabilidad solo tiene que instalar el módulo om_account_accountant de OdooMates. Y la lista es larga debido a que la cantidad de problemas que los modulos de terceros solucionan, es muy extensa. Tecnicamente esto es posible debido a que Odoo posee una arquitectura modular, la cual es muy sencilla de extender por parte de los desarrolladores.
Algo a tener en cuenta es; si bien los módulos de terceros resuelven muchos problemas... no resuelven todos los problemas. Y dichos módulos por más perfectos que sean, necesitan ser integrados con su implementación de Odoo. Y esto muchas veces requiere customización de terceros. Conocí a mas de un "experto en Odoo" que lo único que hacía era googlear módulos, así le iba en las implementaciones.
Donde encontrarlos
Hay muchas formas de encontrar módulos de terceros, ahora tres lugares por donde pueden empezar (y honestamente son muy recomendables) son:
repositorio de OCA en github: es el repositorio de la comunidad por excelencia. Muchos de sus módulos son de alta calidad; por ejemplo contract, WMS, o helpdesk (el cual fue utilizado por Odoo como base para su módulo de Helpdesk). Muchas de sus funcionalidades terminan en el core de Odoo, por ejemplo la funcionalidad de ejecutar manualmente el cron de Odoo. Sus módulos son recomendables (en mi opinión sufren el problema de sobre-configuración para resolver problemas pequeños). Tengan en cuenta que la localización argentina no se encuentra en dicho repositorio.
repositorio de OdooMates: es un repositorio donde tienen muchos módulos para Odoo Community (dichos módulos en su momento dejaron de ser Community y pasaron a ser Enterprise). Tienen módulos muy interesantes; como om_account_accountant, om_account_followup entre otros. Muy recomendable.
Odoo Apps Store: inspirado en la página de Apps de Drupal (una de las pocas ideas tomadas de Drupal, lamentablemente para la comunidad de Odoo). Es un directorio con gran cantidad de módulos. Esta bien organizado y documentado.
Importancia del archivo de configuración de Odoo
Intentar instalar módulos puede ser una experiencia muy frustrante. Por un sencillo motivo, Odoo disponibiliza los módulos que encuentra en la sección addons_path del archivo de configuración. Si un módulo no se encuentra almacenado en alguno de los directorios indicados en addons_path, Odoo no sabrá que existe.
Como verán la sección addons_path contiene varios items. Por lo general hay uno del estilo odoo/addons que apunta a los módulos que se encuentran instalados por default con Odoo. Luego personalmente me gusta crear mi propio directorio (llamado sources) y ahí creo otro directorio llamado others (sources/others) donde tendré mis módulos personalizados. Luego tengo un directorio por cada repositorio de OCA que descargo. La organización de la sección addons_path es muy arbitraria, dependiendo de los gustos y necesidades del desarrollador.
Ejemplo de instalacion paso a paso de un módulo
Supongamos que queremos instalar el módulo contract que se encuentra en el repositorio contract de OCA. Lo primero que vamos a hacer es en nuestro directorio home descargar el branch 15.0 de dicho repositorio:
cd
git clone -b 15.0 https://github.com/OCA/contract
Esto creará el directorio contract con los contenidos del branch 15.0 del repositorio correspondiente de OCA. Si queremos ver sus contenidos, solo necesitamos hacer un ls:
En este punto nos encontramos con dos opciones. O copiamos el módulo que necesitamos a un directorio ya disponibilizado en el archivo de configuración (por ejemplo /opt/odoo15/others); o creamos un nuevo directorio con el repositorio descargado y lo disponibilizamos en el archivo de configuración. Optamos por la primera opción. El primer paso es copiar el contract donde se encuentra el módulo, al directorio /opt/odoo15/sources/others que ya se encuentra disponibilizado en el archivo de configuración.
cd contract
cp -r contract /opt/odoo15/sources/others
Una vez copiado, debemos ir (con el modo desarrollador activado) a Apps y clickear en Update Apps List. Este item de menú lee todos los módulos que se encuentran en los diferentes directorios disponibilizados en los directorios indicados en el archivo de configuración (basicamente por cada módulo que se encuentra en los directorios disponibilizados, agrega un registro en el módelo ir.module.module).
Seguidamente buscamos el módulo contract y veremos que está listo para instalarse
Solo tenemos que clickear en Install para instalar el módulo
Y si no hubo problemas, el módulo será instalado
Manejo de dependencias
El archivo de manifiesto del módulo (__manifest__.py) indica cuales son las dependencias que deben instalarse al momento de instalación del módulo. Por una parte la clave depends, indica los módulos que deben ser instalados. Estos módulos ya deben estar instalados en el sistema cuando se instala el nuevo módulo. Si estas dependencias no estan instaladas, automaticamente el sistema procederá a instalarlas. Puede ocurrir que dichas dependencias no se encuentren disponibles para instalar, en cuyo caso el sistema emitirá un mensaje de error.
Por otra parte el archivo de manifiesto cuenta con la sección external_dependencies. Estos son las librerías (o paquetes) de Python que deben ser instaladas previas a la instalación del módulo. El sistema no intentará instalarlas, se debe hacer manualmente desde la línea de comandos. Por lo general, las mismas se pueden instalar con pip3. Por ejemplo, supongamos que necesitemos instalar la librería xlsxwriter:
pip3 install xlsxwriter
Errores comunes
Los siguientes son los errores más comunes al momento de instalación de los módulos:
El módulo no se encuentra en la lista de módulos a instalar. Esto se puede deber por dos motivos:
Ausencia del archivo __manifest__.py en el módulo (por ende el sistema no puede disponibilizarlo)
El módulo no se encuentra en uno de los directorios indicados en el archivo de configuración de Odoo
El módulo no cuenta con los permisos necesarios, por ende Odoo no puede leer dicho módulo ni disponibilizarlo
Errores en las dependencias
Las mismas pueden no estar disponibles para la instalación. Por lo general, me gusta instalar las dependencias manualmente debido a que si surge un error, me resulta más facil diagnosticar el problema.
No estan instaladas las librerías de Python. Las mismas deben ser instaladas manualmente
Versión incorrecta de las dependencias. Esto es algo común. Odoo es un sistema que lanza una nueva versión por año. Por ende, es muy factible cometer errores de versión durante la instalación de las dependencias. Se debe prestar atención en la descarga de las mismas para su correcta instalación
Error en la lógica de las dependencias. A veces el código de las dependencias tiene errores que impiden la normal ejecución del sistema
Errores en el módulo a instalar. Es algo común, muchas veces los módulos no se encuentran actualizados con respecto a las últimas versiones de Odoo, y se presentan errores. En este caso lo más sano es subsanar dichos errores y comunicarle los mismos al desarrollador del módulo instalado.
Estructura del módulo. La estructura del módulo es un directorio que posee un archivo de manifiesto más los archivos con código y XML. Si la estructura del módulo es de un directorio dentro de otro directorio (como sucede muchas veces cuando se descarga incorrectamente un módulo), Odoo no podrá encontrar el módulo ni disponibilizarlo. La solución a esto es, corregir la estructura del módulo.
Acerca de:
Gustavo Orrillo
Apasionado de la programación, implementa Odoo para distintos tipos de negocios desde el año 2010. En Moldeo Interactive es Socio fundador y Programador; además de escribir en el Blog sobre distintos temas relacionados a los desarrollos que realiza.