Como instalar módulos en Odoo

28 de junio de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Debemos instalar módulos de terceros si Odoo es tan completo?

No nos engañemos. Si bien Odoo tiene muchas funcionalidades, no puede cubrir todos los requerimientos de todos los clientes en todas las industrias (más si debemos integrar Odoo con terceros, por ejemplo con los servicios de factura electrónica que por razones misteriosas se están popularizando en Latinoamérica). 

Por eso debemos instalar módulos de terceros, los que brindan una solución a las necesidades antes listadas. Que se puede hacer con estos módulos? Muchísimas cosas (la lista es bastante larga). 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. Si uno necesita utilizar las funcionalidades de Contabilidad solo tiene que instalar el módulo om_account_accountant de OdooMates. Como pueden ver es una lista muy larga.

Esta extensibilidad con módulos de terceros se logra debido a que Odoo posee una arquitectura modular, la cual es muy simple de extender por parte de los desarrolladores (es lo primero que aprendemos a hacer cuando desarrollamos con Odoo, como extenderlo).

Ahora sepamos esto: si bien los módulos de terceros resuelven muchos problemas no resuelven todos los problemas. Y todos estos módulos de alguna manera necesitan ser integrados con Odoo (debido a que no todas las instalaciones de Odoo son iguales). Y para esto muchas veces se requiere customización de terceros. Tuve la oportunidad de conocer a mas de un "experto en Odoo" que lo único que hacía era googlear módulos. No le iba precisamente bien en las implementaciones.


Donde encontrar los módulos


Gracias a Google es facil encontrar módulos de Odoo. Lo que no te indica Odoo es cuan confiable es dicho módulo (igual un consultor experimentado lo puede decir). Los lugares más confiables son (según la opinión del que escribe):

  • repositorio de OCA en github: es el repositorio de la comunidad por excelencia. Es el que más antiguedad tiene y ademas cuenta con una organización que lo soporta (detalle no menor). Muchos de sus módulos son de calidad. Algunos ejemplos son contract, WMS, purchase_request, o helpdesk (el cual fue utilizado por Odoo como base para su módulo de Helpdesk). Lo que observé a lo largo del tiempo es que muchas de sus funcionalidades terminan en el core de Odoo, por ejemplo la funcionalidad de ejecutar manualmente el cron de Odoo. Pese a que en mi opinión sufren del problema de sobre-configuración (por ejemplo el módulo de comisión) los módulos de OCA son recomendables.
  • repositorio de OdooMates: es un repositorio con muchos módulos para Odoo Community (por lo general módulos que en su momento dejaron de ser Community y pasaron a ser Enterprise). Algunos módulos son interesantes; como om_account_accountant, om_account_followup entre otros. Muy recomendable, personalmente el módulo om_account_accountant lo instalo en todos nuestros clientes.
  • Odoo Apps Store: dicen las malas lenguas que la idea de este repositorio la sacaron de una respuesta en una lista de mails de Odoo, donde un argentino decía "no pueden aprender algo de Drupal y copiar su directorio de módulos"? Chismes para la comunidad. Lamentablemente para la comunidad de Odoo, las ideas de Drupal que copió Odoo fueron pocas, pero eso es para otro post. Es un directorio que te guía a los diferentes módulos diferentes para la comunidad. 

La importancia del archivo de configuración de Odoo

Instalar módulos puede ser una experiencia frustrante para el consultor poco experimentado. Requiere cierto conocimiento del funcionamiento interno de Odoo. Así que vamos a explicar eso en los siguientes párrafos. Primero Odoo disponibiliza los módulos que encuentra en la sección addons_path del archivo de configuración (el cual suele ser /etc/odoo.conf o /etc/odoo-server.conf). Si un módulo no está en alguno de los directorios indicados en la sección addons_path, Odoo no sabrá que existe. No intentará leer y por eso no lo vamos a ver nunca en la lista de aplicaciones que podemos ver en nuestra base de datos de Odoo.


Como pueden ver en la sección de addons_path, tenemos muchos items. Frecuentemente hay un item del estilo odoo/addons que apunta a los módulos que se encuentran instalados por default con Odoo (deben encontrar ese directorio, lo pueden hacer con el comando find). Una preferencia mía es crear un directorio propio (llamado sources) y ahí creo otro directorio llamado others (sources/others) donde tengo mis módulos personalizados. Me ayuda a organizarme esta práctica. Despues por cada repositorio de OCA que descargo tengo su propio directorio. Y cada uno de estos directorios los agrego a la sección addons_path. La organización de la sección addons_path es muy arbitraria, dependiendo de los gustos y necesidades del desarrollador. Aca solo acabamos de dar algunos lineamientos.

Ejemplo de instalacion paso a paso de un módulo

Vamos a instalar el módulo contract de OCA, el cual nos permite administrar contratos dentro de Odoo (muy recomendable si uno trabaja con empresas de servicios). Lo primero debemos a hacer es en nuestro directorio home (es mas que obvio que estamos trabajando con Linux) descargar el branch 16.0 de dicho repositorio:


cd
git clone -b 16.0 https://github.com/OCA/contract

Esto va a crear el directorio contract con los contenidos de la rama 16.0 del repositorio contract de OCA. Podemos ver sus contenidos haciendo un ls:



Aca tenemos al menos dos opciones. O se copia el módulo de contracts 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. Para simplificarlo elegimos la primera opción. 

Entonces debemos copiar el directorio contract donde está el módulo que necesitamos, al directorio /opt/odoo15/sources/others que ya se está disponibilizado en el archivo de configuración odoo.conf (por ejemplo).


cd contract
cp -r contract /opt/odoo15/sources/others


Una vez copiado el módulo, debemos ir en Odoo (con el modo desarrollador activado) a Apps (o Aplicaciones) y clickear en el menú Update Apps List. Este item de menú hace que Odoo lea todos los módulos que se encuentran en los diferentes directorios que se encuentran disponibilizados (como esta indicado en la sección addons_path del archivo de configuración de Odoo). En otras palabras, por cada módulo que encuentra en los directorios disponibilizados, agrega un registro en el módelo ir.module.module (siempre y cuando dicho módulo sea un módulo válido).



A continuación buscamos el módulo contract y veremos que está listo para instalarse



A continuación clickeamos en "Install" para instalar el módulo.



Y si no hubo problemas, el módulo será instalado. Si hubieron problemas, hablaremos de ello debajo.

Manejo de dependencias

El manejo de dependencias puede ser problemático para un recien iniciado en Odoo. Vamos a explicar un poco al respecto en estas líneas. El archivo de manifiesto del módulo (__manifest__.py) indica que dependencias que deben instalarse al momento que se instala el módulo. Primero tenemos la sección depends, que indica los módulos que necesita el módulo para su normal funcionamiento. Estos módulos ya deben estar instalados en el sistema cuando se instala el nuevo módulo. Si no es así, el sistema procederá a instalarlos. Es posible (es muy común con los módulos de OCA) que dichas dependencias no esten disponibles para instalar, en cuyo caso el sistema emitirá un mensaje de error.

El archivo __manifest__.py tambien tiene una sección llamada external_dependencies. Estas son las librerías (o paquetes) de Python que tienen que estar instaladas previas a la instalación del módulo (por ejemplo, el módulo de la factura electrónica argentina necesita de la librería pyafipws). El sistema no va a intentar de instalarlas. Esto se debe hacer manualmente desde la línea de comandos. Ahora generalmente estas librerías se pueden instalar con pip3. Por ejemplo, si necesitamos instalar la librería xlsxwriter debemos hacer:


pip3 install xlsxwriter


Errores comunes


Estos son algunos errores comunes al momento de instalación de los módulos:


  • El módulo no está en la lista de módulos a instalar. Esto podría deberse por dos razones:
    • El módulo no tiene el archivo __manifest__.py(por ende el sistema no puede disponibilizarlo)
    • El módulo no está en uno de los directorios indicados en la sección del archivo de configuración de Odoo
  • El módulo no tiene los permisos necesarios de lectura (a nivel sistema operativo), por eso Odoo no puede leer dicho módulo ni disponibilizarlo (le resulta invisible)
  • Errores en las dependencias del módulo
    • Las dependencias pueden no estar disponibles al momento de instalarse el módulo. Prefiero instalar las dependencias manualmente previos a la instalación del módulo debido a que si surge un error, me resulta sencillo identificar el problema.
    • No estan instaladas las librerías de Python. Estas deben ser instaladas manualmente previa instalación del módulo
    • Versión incorrecta de las dependencias. Esto es algo común gracias a que Odoo es un sistema que lanza una nueva versión por año. Es por eso que es posible cometer errores de versión durante la instalación de las dependencias. Una forma de mitigar este riesgo es prestando atención a la versión de la dependencia que se está instalando.
    • Errores en el módulo a instalar. Es algo común. Muchas veces los módulos se desarrollaron para una versión diferente al Odoo con el que se desea trabajar y se presentan errores (por ejemplo el modelo product.uom no existe más porque fue reemplazado por el modelo uom.uom). Lo que más conviene es comunicarle los errores al desarrollador del módulo y esperar. O en su caso solucionar los errores.
    • Estructura del módulo. La estructura del módulo de Odoo es un paquete de Python. Es decir es un directorio con un archivo __init__.py y además tiene un archivo de manifiesto (__manifest__.py),  más los archivos con código Python (para modelos y controllers) y XML (para agregar datos y vistas). Si la estructura del módulo en cuestión 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.
Gustavo Orrillo 28 de junio de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario