Comment traduire un module de Odoo 12.0 à Odoo 13.0 ?

Guide simplifié

Fabricio Costa
- 20/04/2020 - 3 min. de lectura

Aclaro nuevamente que esta guía es básica pero sirve para los módulos menos complejos, y por ahora han sido suficiente para migrar varios módulos propios.

Cabe destacar que la mejora fundamental de Odoo 13 es en el rendimiento del motor ORM, reduciendo la cantidad de accesos a la base de datos, así como el largo de esas consultas, con un sistema de cache mejorado y alcanzando una optimización en la respuesta del sistema mayor al 450% en todos los casos.

Empecemos por los tips más sencillos a la hora de portar módulos de Odoo 12 a Odoo 13:

Paso 1, @api.multi y @api.one no existen más, gracias a Odoo:

El @api.multi es el nuevo comportamiento por omisión, por ende se eliminará de todos los decoradores de nuestras funciones. Esto nos llena de alegría, no más preguntas esotéricas sobre que esperamos que contendrá el bendito (self). De la misma manera se deberá proceder con la eliminación del @api.one.  Eso se resuelve sencillamente con un "replace" en todo el código en nuestro editor favorito.

Esto sin embargo nos obliga a su vez a modificar el código de aquellas funciones dónde usábamos @api.one, iterando sobre el objeto self, lo que a su vez es una práctiva que recomiendo replicar incluso en los módulos de Odoo 12.0, y ya que estamos mantenemos ambos módulos en sintonía:

def mifuncion(self):
    for obj in self:
        obj.write(.....)
        ....etc...

Paso 2, Contabilidad, todo lo relativo a "account.invoice" fue absorbido en el "account.move":

Bueno aquí se verá campo por campo como migrar los modelos de datos que el módulo tenga heredado. Sin embargo es probable que no tengan grandes diferencias. Moldeo Interactive ya tiene un port de la localización Argentina para Odoo 13 funcional, pueden descargarlo de nuestros repositorios, están basados en la versión de Adhoc, pero para Odoo 13 Community.

Resumiendo asi se convierten estos modelos:
account.invoice > account.move
acount.invoice.line > account.move.line
account.invoice.tax > account.tax

Paso 3, Seguridad y grupos:

Algunos ids de referencia cambian como por ejemplo: "base.module_category_sales_management" a "base.module_category_sales_sales"
lo que no tiene porque justificarse... en fin, ejemplos como estos siempre veremos cuando pasamos de una versión de Odoo a la siguiente.

Paso 4, Vistas, <record/> y <act_window/> ya no llevan view_type ni src_model:

Dentro de los registros <record/> los campos <field name="src_model" ....../> o <field name="view_type" ....../> son obsoletos, lo que significa que se deben eliminar de esos registros.

Lo mismo en los registros <act_window/> dónde solíamos utilizar el atributo src_model="sale.order" por ejemplo, se traduce directamente ese atributo a binding_model="sale.order", y luego por ejemplo cualquier referencia a un atributo view_type="form" se traduce a binding_views="form".

ATENCIÓN: el binding_views no toma el parámetro tree, si quieren que una acción aparezca en todas las vistas de Arbol y Formularios, deben usar:

binding_views="list,form" que es el valor por omisión.

Paso 5, en las funciones de los modelos de wizards no se pasa el context como parámetro:

Bien, esto se resuelve de forma muy sencilla, migrando de:

def mifuncion(self, context):
    active_ids = context["active_ids"]
def mifunction( self, context=None):    
    context = context or self.env.context
    active_ids = context["active_ids"]

Paso 6, no más .image, ni .image_medium, ahora es .image_1920, image_1024, etc..:

Bien, es bastante claro: el .image paso a ser el .image_1920 tanto para los modelos product.product, product.template o incluso el mismo product.image.

Acto seguido el .image_medium sería el .image_1024. Luego podremos comentar al respecto. Por ahora les sugiero migrar de esta manera.

Aquí les dejo otras referencias que puede ser útiles:

  • https://github.com/OCA/maintainer-tools/wiki/Migration-to-version-13.0

  • https://www.cybrosys.com/blog/odoo-13-migration

Nuestros módulos de Mercado Libre y Mercado Pago ya se encuentran en fase funcional para Odoo 13.

Mantendré esta entrada de blog actualizada con más detalles a medida que vayan surgiendo.

Última actualización: 09 de mayo 2020.

Acerca de:

Fabricio Costa