Un desarrollador que se inicia en el mundo de Odoo seguramente encuentre un framework estable para un ERP muy potente que empezará a ofrecer. Pero al cabo de 1 o 2 años pondrá el grito en el cielo al intentar migrar la versión de Odoo: no será tarea fácil.
Odoo tiene un sistema de actualización anual, y teniendo en cuenta que una implementación se suele demorar varios meses, es muy probable que al salir a producción ya nos encontremos en una versión vieja. Para subsanarlo, Odoo ofrece la migración de versión 100% gratuita de su lado, siempre y cuando sea versión Enterprise (por ende, no es gratuita, es "sin cargo"). Para todos los Community nos tocará buscar alternativas, la más popular es el OpenUpgrade de OCA, el cual nos permitirá ir migrando entre versiones hasta llegar a la deseada, teniendo que migrar el código de cada módulo de tercero en cada versión. Hace pocos días me solicitaron la migración de un Odoo 10 (instalado en 2017) a un Odoo 15, y claramente hacer 5 migraciones para llegar ahi con OpenUpgrade es inviable. Por lo tanto, es momento de migrar mediante script.
Identificar los módulos de terceros
Lo primero es observar y rescatar los módulos de terceros que pueda llegar a tener el Odoo, algo que descubriremos al ver el archivo odoo.conf. Si son módulos con repositorios (como los de OCA) es probable que su migración ya halla sido efectuada, ahorrándonos algo de tiempo. Si son módulos que no se mantuvieron, nos tocará migrarlo en un Odoo local; lo mismo si son módulos de terceros hechos para esa implementación particular. El tiempo acá varía en relación a que tan personalizado está el sistema; en mi caso los desarrollos personalizados eran simples, un campo llamado "Caja" en los productos para identificar donde se almacena cada uno (cosa que desestimé para utilizar las Ubicaciones de inventario nativas de Odoo) y un par de PDFs que se migraron sin dificultades.
Configuración Inicial - Cosas que no se migran
La configuración inicial de Odoo debe estar a punto antes de migrar los datos, mismo la instalación de módulos de reemplazo para módulos que ya no existen. Lo ideal es instalar todo lo que es Localización y hacer pruebas contables, a fin de estar seguros que clase de métodos ejecutar una vez migrado los datos.
Importar datos mediante XMLRPC
La migración de módulos puede ser más o menos compleja, pero donde está lo verdaderamente complejo es en migrar los datos de cada módulo mediante script. Y acá no hay forma de armar algo estandarizado porque entre versiones de Odoo pueden cambiar los nombres de algunos campos o directamente reemplazarse funciones. Por lo tanto cada script de migración se debe hacer a medida; si sirve como un muy pequeño aporte, estos son los modelos "genéricos" que solemos emplear para construir dichos script: odoo-migration-scripts
Con esto como referencia pueden armarse modelos de migración muy buenos, aunque como consejo recomiendo armar una importación corta (de pocos elementos) en una base destinada a demo; luego de varias pruebas y de resolver algunos errores (como campos por defecto que nos estamos olvidando y demás) iniciamos con la migración completa de cada modelo, empezando por aquellos que no llevan relaciones. Por ejemplo, lo ideal es primero migrar contactos y productos, y con eso generado armar un backup y empezar a hacer pruebas de migración de ordenes de ventas y compras. Finalmente, pasamos a la migración de información relacional más compleja, como puede ser facturas, pagos, proyectos y demás. Como bien digo, con cada migración exitosa de cada modelo es aconsejable armar un backup de la base para poder regresar en cualquier momento. Y si, es cierto que este método demanda bastante tiempo de scripting, pero a cambio nos permite migrar saltandonos muchísimas versiones como pasó en este caso.