Su primer módulo

Información general

Este capítulo le ayuda a crear su primer módulo de Odoo desplegarlo en su proyecto de Odoo.sh.

Este tutorial requiere que haya creado un proyecto en Odoo.sh y conozca su URL de repositorio en Github.

Se explica el uso básico de Git y Github.

Se hacen las siguientes suposiciones:

  • ~/src es el directorio en donde se ubican los repositorios relacionados a sus proyectos de Odoo.

  • odoo es el usuario de Github,

  • odoo-addons es el repositorio de Github,

  • feature-1 es el nombre de la rama de desarrollo,

  • master es el nombre de la rama de producción,

  • my_module es el nombre del módulo.

Reemplácelos con los valores de su elección.

Cree la rama de desarrollo

Desde Odoo.sh

En la vista de ramas:

  • haga clic en el botón + a lado de la etapa de desarrollo,

  • escoja la rama maestra en la selección bifurcación,

  • tipo feature-1 en la entrada To.

    pic1 pic2

Una vez que haya creado la compilación puede acceder al editor y buscar en la carpeta ~/src/user el código de su rama de desarrollo.

../../../_images/firstmodule-development-editor.png ../../../_images/firstmodule-development-editor-interface.png

Desde su computadora

Clone su repositorio de Github en su computadora:

$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/odoo/odoo-addons.git
$ cd ~/src/odoo-addons

Cree una nueva rama:

$ git checkout -b feature-1 master

Cree una estructura de modelo

Andamiaje del módulo

Aunque no es necesario, el andamiaje evita la tarea de establecer la estructura básica de los módulos de Odoo. Puede usar el andamiaje para crear un nuevo módulo utilizando odoo-bin.

Desde el editor de Odoo.sh, en una terminal:

$ odoo-bin scaffold my_module ~/src/user/

O, desde su computadora, si cuenta con una instalación de Odoo:

$ ./odoo-bin scaffold my_module ~/src/odoo-addons/

If you do not want to bother installing Odoo on your computer, you can also download this module structure template in which you replace every occurrences of my_module to the name of your choice.

Se generará la siguiente estructura:

my_module
├── __init__.py
├── __manifest__.py
├── controllers
│   ├── __init__.py
│   └── controllers.py
├── demo
│   └── demo.xml
├── models
│   ├── __init__.py
│   └── models.py
├── security
│   └── ir.model.access.csv
└── views
    ├── templates.xml
    └── views.xml

Advertencia

No utilice caracteres especiales que no sean el guion bajo ( _ ) para el nombre de su módulo, ni siquiera un guion ( - ). Este nombre se utiliza para las clases de Python de su módulo, y tener nombres de clases con caracteres especiales que no sean el guion bajo no es válido en Python.

Descomente el contenido de los archivos:

  • models/models.py, un ejemplo de modelo con sus campos,

  • views/views.xml, un árbol y una vista de formulario, con los menús que los abren,

  • demo/demo.xml, registros de demostración para el modelo del ejemplo anterior,

  • controllers/controllers.py, un ejemplo de controlador que implementa algunas rutas,

  • views/templates.xml, dos ejemplos de vistas qweb utilizadas en las rutas de los controladores anteriores,

  • __manifest__.py, el archivo manifest de su módulo, incluyendo por ejemplo su título, descripción y archivos de datos a cargar. Solo debe descomentar el archivo de datos de la lista de control de acceso:

    # 'security/ir.model.access.csv',
    

Manualmente

Si desea crear la estructura de su módulo de forma manual, siga Crear un módulo de Odoo para entender la estructura de los módulos y el contenido de cada archivo.

Haga cambios en la rama de desarrollo

Indique los cambios que se van a realizar

$ git add my_module

Confirme los cambios

$ git commit -m "My first module"

Envíe los cambios a su repositorio remoto

Desde una terminal del editor de Odoo.sh:

$ git push https HEAD:feature-1

El comando anterior se explica en la sección Confirmar y enviar cambios del capítulo Editor en línea. Incluye la explicación sobre por qué se le pedirá que escriba su nombre de usuario y contraseña, y qué hacer si utiliza la autenticación de dos factores.

O, desde la terminal de la computadora:

$ git push -u origin feature-1

Es necesario especificar -u origin feature-1 primera vez. Después, para enviar los futuros cambios desde su computadora, puede utilizar simplemente

$ git push

Pruebe su módulo

Su rama debería aparecer en las ramas de desarrollo de su proyecto.

../../../_images/firstmodule-test-branch.png

Desde la vista de ramas de su proyecto, puede hacer clic en el nombre de su rama en el panel de navegación izquierdo para acceder a su historial.

../../../_images/firstmodule-test-branch-history.png

Ahí podrá ver los nuevos cambios, incluido el comentario establecido. Una vez que la base de datos esté lista, puede acceder a ella haciendo clic en el botón Conectar.

../../../_images/firstmodule-test-database.png

Si su proyecto de Odoo.sh está configurado para instalar su módulo de forma automática, lo verá directamente entre las aplicaciones de la base de datos. De lo contrario, estará disponible en las aplicaciones a instalar.

A continuación, puede explorar su módulo, crear nuevos registros y probar sus funciones y botones.

Probar con los datos de producción

Para este paso necesita tener una base de datos de producción. Puede crearla si aún no la tiene.

Una vez que haya probado su módulo en una compilación de desarrollo con los datos de demostración y considere que está listo, puede probarlo con los datos de producción utilizando una rama de prueba.

Puede:

  • Convierta su rama de desarrollo en una rama de prueba, arrastrándola y soltándola en el título de la sección de prueba.

    ../../../_images/firstmodule-test-devtostaging.png
  • Merge it in an existing staging branch, by drag and dropping it onto the given staging branch.

    ../../../_images/firstmodule-test-devinstaging.png

You can also use the git merge command to merge your branches.

This will create a new staging build, which will duplicate the production database and make it run using a server updated with your latest changes of your branch.

../../../_images/firstmodule-test-mergedinstaging.png

Once the database ready, you can access it using the Connect button.

Instale su módulo

Your module will not be installed automatically, you have to install it from the apps menu. Indeed, the purpose of the staging build is to test the behavior of your changes as it would be on your production, and on your production you would not like your module to be installed automatically, but on demand.

Your module may not appear directly in your apps to install either, you need to update your apps list first:

  • Activate the developer mode

  • in the apps menu, click the Update Apps List button,

  • in the dialog that appears, click the Update button.

    ../../../_images/firstmodule-test-updateappslist.png

Your module will then appear in the list of available apps.

../../../_images/firstmodule-test-mymoduleinapps.png

Deploy in production

Once you tested your module in a staging branch with your production data, and believe it is ready for production, you can merge your branch in the production branch.

Drag and drop your staging branch on the production branch.

../../../_images/firstmodule-test-mergeinproduction.png

You can also use the git merge command to merge your branches.

This will merge the latest changes of your staging branch in the production branch, and update your production server with these latest changes.

../../../_images/firstmodule-test-mergedinproduction.png

Once the database ready, you can access it using the Connect button.

Instale su módulo

Your module will not be installed automatically, you have to install it manually as explained in the above section about installing your module in staging databases.

Añadir un cambio

This section explains how to add a change in your module by adding a new field in a model and deploy it.

From the Odoo.sh editor,
  • browse to your module folder ~/src/user/my_module,

  • then, open the file models/models.py.

Or, from your computer,
  • use the file browser of your choice to browse to your module folder ~/src/odoo-addons/my_module,

  • then, open the file models/models.py using the editor of your choice, such as Atom, Sublime Text, PyCharm, vim, …

Then, after the description field

description = fields.Text()

Add a datetime field

start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())

Then, open the file views/views.xml.

Después de

<field name="value2"/>

Añadir

<field name="start_datetime"/>

These changes alter the database structure by adding a column in a table, and modify a view stored in database.

In order to be applied in existing databases, such as your production database, these changes requires the module to be updated.

If you would like the update to be performed automatically by the Odoo.sh platform when you push your changes, increase your module version in its manifest.

Open the module manifest __manifest__.py.

Reemplace

'version': '0.1',

con

'version': '0.2',

The platform will detect the change of version and trigger the update of the module upon the new revision deployment.

Browse to your Git folder.

Then, from an Odoo.sh terminal:

$ cd ~/src/user/

O, desde la terminal de la computadora:

$ cd ~/src/odoo-addons/

Then, stage your changes to be committed

$ git add my_module

Confirme los cambios

$ git commit -m "[ADD] my_module: add the start_datetime field to the model my_module.my_module"

Push your changes:

From an Odoo.sh terminal:

$ git push https HEAD:feature-1

O, desde la terminal de la computadora:

$ git push

The platform will then create a new build for the branch feature-1.

../../../_images/firstmodule-test-addachange-build.png

Once you tested your changes, you can merge your changes in the production branch, for instance by drag-and-dropping the branch on the production branch in the Odoo.sh interface. As you increased the module version in the manifest, the platform will update the module automatically and your new field will be directly available. Otherwise you can manually update the module within the apps list.

Usar una librería externa de Python

If you would like to use an external Python library which is not installed by default, you can define a requirements.txt file listing the external libraries your modules depends on.

The platform will use this file to automatically install the Python libraries your project needs.

The feature is explained in this section by using the Unidecode library in your module.

Create a file requirements.txt in the root folder of your repository

From the Odoo.sh editor, create and open the file ~/src/user/requirements.txt.

Or, from your computer, create and open the file ~/src/odoo-addons/requirements.txt.

Añadir

unidecode

Then use the library in your module, for instance to remove accents from characters in the name field of your model.

Open the file models/models.py.

Antes

from odoo import models, fields, api

Añadir

from unidecode import unidecode

Después de

start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())

Añadir

@api.model
def create(self, values):
    if 'name' in values:
        values['name'] = unidecode(values['name'])
    return super(my_module, self).create(values)

def write(self, values):
    if 'name' in values:
        values['name'] = unidecode(values['name'])
    return super(my_module, self).write(values)

Adding a Python dependency requires a module version increase for the platform to install it.

Edit the module manifest __manifest__.py

Reemplace

'version': '0.2',

con

'version': '0.3',

Stage and commit your changes:

$ git add requirements.txt
$ git add my_module
$ git commit -m "[IMP] my_module: automatically remove special chars in my_module.my_module name field"

Then, push your changes:

In an Odoo.sh terminal:

$ git push https HEAD:feature-1

In your computer terminal:

$ git push