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
~/srcest le répertoire où se trouvent les dépôts Git liés à vos projets Odoo.odooest l’utilisateur GitHub.odoo-addonsest le dépôt GitHub.feature-1est le nom d’une branche de développement.mainest le nom de la branche de production.my_moduleest 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.
Une fois la compilation prête, accéder à l”éditeur et au code de votre branche de développement depuis le dossier ~/src/user.
Cloner votre dépôt GitHub sur votre ordinateur en exécutant les commandes suivantes :
mkdir ~/src cd ~/src git clone https://github.com/odoo/odoo-addons.git cd ~/src/odoo-addons
Créer une nouvelle branche en exécutant :
git checkout -b feature-1 main
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/
Avec Odoo installé sur votre ordinateur, exécuter :
./odoo-bin scaffold my_module ~/src/odoo-addons/
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.pyun exemple de modèle avec ses champsviews/views.xmlune vue arborescente et un formulaire, avec les menus qui les ouvrentdemo/demo.xmlenregistrements de démonstration pour le modèle d’exemplecontrollers/controllers.pyun exemple de contrôleur implémentant certaines routesviews/templates.xmldeux exemples de vues qweb utilisées par les routes du contrôleur__manifest__.pyle 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¶
Indexer les modifications à valider en exécutant :
git add my_module
Valider vos modifications en exécutant :
git commit -m "My first module"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
Exécuter :
git push -u origin feature-1
Il n’est nécessaire de spécifier
-u origin feature-1que la première fois que vous poussez. Après cela, exécuter :git push
Tester le module¶
La branche devrait apparaître dans la section Développement du panneau de navigation Vue Branches.
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.
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.
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 mergepour 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 .
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 mergepour 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 .
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.
Depuis lӎditeur ou depuis votre ordinateur, ouvrir le dossier du module
~/src/odoo-addons/my_module, puis ouvrir le fichiermodels/models.pypour 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())
Ouvrir le fichier
views/views.xmlet après :<field name="value2"/>
ajouter :
<field name="start_datetime"/>
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__.pyet 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.
Ensuite, pousser les modifications.
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 :
Créer un fichier
requirements.txtdans 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.
Ajouter au fichier :
unidecode
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.pyet avant :from odoo import models, fields, api
ajouter :
from unidecode import unidecode
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)
Augmenter la version du module pour installer la dépendance Python en modifiant le manifeste du module
__manifest__.py.Ensuite, pousser les modifications.
Astuce
Indexer le fichier
requirements.txten exécutantgit add requirements.txt.