Vamos a explicar paso a paso como se crea un módulo en Odoo. Es un módulo sencillo. Lo que necesitamos es que se extienda el módulo product.template para agregarle dos campos: old_system_code (del tipo char) y old_system_id (del tipo integer). Los mismos deben mostrarse en un tab propio de título "Sistema Viejo" en el formulario de productos.
Así que manos a la obra, vamos a crear el módulo. En un directorio que se encuentra disponibilizado por Odoo para los módulos, vamos a crear un directorio llamado módulo_migración.
mkdir modulo_migracion
cd modulo_migracion
Seguidamente con nuestro editor favorito (en mi caso, el vim) vamos a crear un archivo llamado __manifest__.py en donde vamos a declarar las características del módulo. En este caso:
{
"name": "modulo_migracion",
"version": "15.0.1.0.0",
"license": "AGPL-3",
"depends": ["product"],
"category": "Accounting",
"data": [
],
}
En este archivo declaramos las características del módulo. Si no contamos con este módulo, Odoo no tratará de instalarlo ni leerlo para su ejecución. Bien, vamos a instalarlo. Para ello nos podemos guiar por el post "Como instalar módulos en Odoo". Después de clickear en "Actualizar Lista de Módulos" podemos ver el módulo creado
Bueno, instalemos el módulo y sigamos. Al fin y al cabo lo que acabamos de hacer es decirle a Odoo que existe un módulo y actualizamos los contenidos del modelo ir.module_module.
Paso siguiente, extender el modelo product.template y agregarle los campos que necesitamos. Para ello primero vamos a crear un archivo llamado __init__.py y agregar la siguiente línea:
from . import models
Lo que el archivo __init__.py es marcar un directorio como un paquete de Python. En este archivo le decimos que vamos a importar el archivo models.py (podría ser un directorio, pero para simplificar este tutorial vamos a hacer un archivo).
Paso seguido, vamos a crear un archivo llamado models.py (el cual va a ser inicializado debido a que así fue indicado por el archivo __init__.py) en el cual vamos a tener los siguientes contenidos:
from odoo import tools, models, fields, api, _
class ProductTemplate(models.Model):
_inherit = 'product.template'
old_system_code = fields.Char('Old System Code')
old_system_id = fields.Integer('Old System ID')
En estas líneas lo que hacemos es definir una clase que hereda del modelo product.template. Y le agregamos dos campos nuevos: old_system_code y old_system_id. Ahora vamos a actualizar el módulo y luego vamos a comprobar que se efectuaron los cambios. Para ello vamos a chequear la estructura del modelo product.template
Bien, una vez que tenemos los campos definidos podemos pasar a extender la vista del formulario de productos para agregar el tab y los campos recien creados. Primero tenemos que determinar cual es la vista a extender. Para ello usamos el modo desarrollador y clickeamos en la edición del formulario
En este caso el external ID de la vista a extender es product.product_template_form_view. Ahora vamos a extender la vista. Para eso creamos un archivo llamado product_view.xml con los contenidos indicados a continuación
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="migracion_product_tempalte_form" model="ir.ui.view">
<field name="name">migracion.product.template.form</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"></field>
<field name="arch" type="xml">
<xpath expr="//notebook" position="inside" >
<page string="Migracion" >
<group>
<field name="old_system_code" />
<field name="old_system_id" />
</group>
</page>
</xpath>
</field>
</record>
</odoo>
Y luego debemos modificar el archivo del manifiesto para indicarle que cargue también el archivo product_view.xml. El archivo __manifest__.py debe quedar así
{
"name": "modulo_migracion",
"version": "15.0.1.0.0",
"license": "AGPL-3",
"depends": ["product"],
"category": "Accounting",
"data": [
"product_view.xml"
],
}
Ahora actualizamos el módulo y si chequeamos el formulario de productos, podemos apreciar la existencia del nuevo tab con los campos que acaban de ser agregados.
Y ya está. Este es un ejemplo de un módulo muy básico, en otros posts detallaremos módulos más complejos. Los contenidos del módulo desarrollado lo pueden descargar de nuestro repositorio en github.