Créer un module

Avant de créer votre premier module, il est nécessaire de créer un projet Odoo.sh et de connaître l’URL du dépôt GitHub.

Glossaire

  • ~/src est le répertoire où se trouvent les dépôts Git liés à vos projets Odoo.

  • odoo est l’utilisateur GitHub.

  • odoo-addons est le dépôt GitHub.

  • feature-1 est le nom d’une branche de développement.

  • main est le nom de la branche de production.

  • my_module est le nom du module.

Remplacer ceux-ci si nécessaire.

Créer la branche de développement

Depuis la vue Branches :

  • Dans le panneau de navigation des branches, cliquer sur le bouton + (Nouvelle branche de développement) à côté de Développement.

  • Sous Fourche, sélectionner la branche main.

  • Sous Vers, saisir feature-1.

Bifurquer la branche de production pour créer une branche de développement sur Odoo.sh

Une fois la compilation prête, accéder à l”éditeur et au code de votre branche de développement depuis le dossier ~/src/user.

Créer la structure du module

Échafaudage

Bien que cela ne soit pas obligatoire, l’échafaudage évite la corvée de configurer la structure de base d’un module Odoo. Échafauder un nouveau module en utilisant l’exécutable odoo-bin.

Depuis le terminal de l”éditeur, exécuter :

odoo-bin scaffold my_module ~/src/user/

Astuce

Si vous ne souhaitez pas installer Odoo sur votre ordinateur, vous pouvez également télécharger ce modèle de structure de module. Remplacer chaque occurrence de my_module par le nom de votre choix.

La structure ci-dessous sera générée :

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

Avertissement

Utiliser uniquement des caractères alphanumériques (a-z, 0-9) ou des tirets bas (_) lors du nommage de votre module, car son nom est utilisé pour les classes Python, et les noms de classe contenant des caractères spéciaux autres que des tirets bas ne sont pas valides en Python.

Décommenter les fichiers suivants :

  • models/models.py un exemple de modèle avec ses champs

  • views/views.xml une vue arborescente et un formulaire, avec les menus qui les ouvrent

  • demo/demo.xml enregistrements de démonstration pour le modèle d’exemple

  • controllers/controllers.py un exemple de contrôleur implémentant certaines routes

  • views/templates.xml deux exemples de vues qweb utilisées par les routes du contrôleur

  • __manifest__.py le manifeste de votre module, incluant son titre, sa description et les fichiers de données à charger. Décommenter le fichier de données de la liste de contrôle d’accès :

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

Manuellement

Pour créer manuellement la structure de votre module, suivre le tutoriel Server framework 101 pour comprendre la structure d’un module et le contenu de chaque fichier.

Pousser sur la branche de développement

  1. Indexer les modifications à valider en exécutant :

    git add my_module
    
  2. Valider vos modifications en exécutant :

    git commit -m "My first module"
    
  3. Pousser vos modifications vers votre dépôt distant en exécutant :

    Depuis le terminal de l”éditeur, exécuter :

    git push https HEAD:feature-1
    

Tester le module

La branche devrait apparaître dans la section Développement du panneau de navigation Vue Branches.

Exemple d'une branche de développement

Cliquer sur le nom de la branche pour voir son historique, y compris les modifications que vous venez de pousser. Une fois la base de données prête, cliquer sur Connecter pour y accéder.

Le bouton de connexion pour accéder à une base de données

Si votre projet Odoo.sh est configuré pour installer automatiquement le module, il apparaîtra directement sur le tableau de bord de la base de données. Sinon, il sera disponible pour installation sous l’application Apps.

Le nouveau module sur le tableau de bord de la base de données

Tester avec les données de production

Note

Une base de données de production est requise pour cette étape. Si vous n’en avez pas encore, en créer une.

Une fois que vous avez testé le module dans une version de développement avec les données de démonstration et que vous pensez qu’il est prêt, vous pouvez le tester avec les données de production en utilisant une branche de préproduction.

Vous pouvez :

  • Convertir votre branche de développement en branche de préproduction en la faisant glisser et en la déposant dans la section Préproduction.

  • La fusionner dans une branche de préproduction existante en la faisant glisser et en la déposant sur cette branche.

  • Utiliser la commande git merge pour fusionner vos branches.

Cela crée une nouvelle build de préproduction qui duplique la base de données de production et l’exécute sur un serveur mis à jour avec les dernières modifications de votre branche.

Une fois la base de données prête, cliquer sur Connecter pour y accéder.

Installer le module

Installer le module depuis l’application Apps. Comme le module peut ne pas apparaître directement dans la liste des applications, mettre à jour la liste des applications en activant le mode développeur et en cliquant sur Mettre à jour la liste des Apps ‣ Mettre à jour.

Note

Le module n’est pas installé automatiquement, car l’objectif de la build de préproduction est de tester le comportement de vos modifications comme elles le seraient sur la base de données de production, vous ne voudriez donc pas qu’un module soit installé automatiquement.

Déployer en production

Une fois que vous avez testé le module dans une branche de préproduction avec les données de production et que vous pensez qu’il est prêt pour la production, vous pouvez fusionner votre branche dans la branche de production en :

  • Faisant glisser et en déposant la branche de préproduction sur la branche de production.

  • Utilisant la commande git merge pour fusionner vos branches.

Cela fusionne les dernières modifications de la branche de préproduction dans la branche de production et met à jour le serveur de production avec elles.

Une fois la base de données prête, cliquer sur Connecter pour y accéder.

Installer le module

Installer le module depuis l’application Apps. Comme le module peut ne pas apparaître directement dans la liste des applications, mettre à jour la liste des applications en activant le mode développeur et en cliquant sur Mettre à jour la liste des Apps ‣ Mettre à jour.

Ajouter un changement

Cette section explique comment ajouter une modification dans votre module en ajoutant un nouveau champ dans un modèle et en le déployant.

  1. Depuis l”éditeur ou depuis votre ordinateur, ouvrir le dossier du module ~/src/odoo-addons/my_module, puis ouvrir le fichier models/models.py pour le modifier. Après le champ description :

    description = fields.Text()
    

    ajouter un champ datetime :

    start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
    
  2. Ouvrir le fichier views/views.xml et après :

    <field name="value2"/>
    

    ajouter :

    <field name="start_datetime"/>
    
  3. Ces modifications altèrent la structure de la base de données en ajoutant une colonne à une table et en modifiant une vue. Pour être appliquées à une base de données existante, telle que votre base de données de production, ces modifications nécessitent que le module soit mis à jour. Si vous souhaitez que la mise à jour soit effectuée automatiquement par la plateforme Odoo.sh lorsque vous poussez vos modifications, augmenter la version du module dans son manifeste en ouvrant __manifest__.py et en remplaçant :

    'version': '0.1',
    

    avec :

    'version': '0.2',
    

    La plateforme détectera un changement de version et déclenchera la mise à jour du module lors du déploiement de la nouvelle révision.

  4. Ensuite, pousser les modifications.

  5. Une fois que vous avez testé vos modifications, vous pouvez les fusionner dans la branche de production, par exemple en glissant-déposant la branche sur la branche de production dans l’interface Odoo.sh. Puisque vous avez augmenté la version du module dans le manifeste, la plateforme mettra automatiquement à jour le module, et votre nouveau champ sera immédiatement disponible. Sinon, vous pouvez mettre à jour le module manuellement dans la liste des applications.

Utiliser une bibliothèque Python externe

Si vous souhaitez utiliser une bibliothèque Python externe qui n’est pas installée par défaut, vous pouvez définir un fichier requirements.txt listant les bibliothèques externes dont vos modules dépendent. La plateforme utilisera ce fichier pour installer automatiquement les bibliothèques Python dont votre projet a besoin.

Note

  • Il n’est pas possible d’installer ou de mettre à niveau des paquets système sur les bases de données Odoo.sh (par exemple, des paquets apt). Cependant, sous certaines conditions, des paquets peuvent être considérés pour installation. Cela s’applique également aux modules Python qui nécessitent des paquets système pour la compilation et aux modules Odoo tiers.

  • Les extensions PostgreSQL ne sont pas prises en charge sur Odoo.sh, il n’est donc pas possible d’installer des extensions (telles que PostGIS, ltree, …) dans les bases de données Odoo.sh.

Par exemple, pour utiliser la bibliothèque Unidecode dans votre module :

  1. Créer un fichier requirements.txt dans le dossier racine de votre dépôt :

    • Depuis l’éditeur Odoo.sh, créer et ouvrir le fichier ~/src/user/requirements.txt.

    • Depuis votre ordinateur, créer et ouvrir le fichier ~/src/odoo-addons/requirements.txt.

  2. Ajouter au fichier :

    unidecode
    
  3. Vous pouvez maintenant utiliser la bibliothèque dans votre module, par exemple pour supprimer les accents des caractères dans le champ nom de votre modèle. Pour ce faire, ouvrir le fichier models/models.py et avant :

    from odoo import models, fields, api
    

    ajouter :

    from unidecode import unidecode
    
  4. Après :

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

    ajouter :

    @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)
    
  5. Augmenter la version du module pour installer la dépendance Python en modifiant le manifeste du module __manifest__.py.

  6. Ensuite, pousser les modifications.

    Astuce

    Indexer le fichier requirements.txt en exécutant git add requirements.txt.