Création de Votre Première Application Sous Odoo 14 –Partie 01
Introduction
Dans Odoo, toutes les applications sont des modules, interconnectées dans une même base de données, et suivent une structure bien définie, qu’on peut consulter à travers un IDE comme Pycharm.
Dans cet article, nous allons découvrir les étapes à suivre pour créer une application personnalisée de base, puis graduellement nous y ajoutons d’autres fonctionnalités dans les autres articles à venir, de tel sorte à couvrir les concepts de base reliés au développement d’une application Odoo.
L’exemple et l’IDE utilisé pour créer notre application :
Pour illustrer les concepts durant cet article, et les articles qui viennent, nous utilisons l’exemple d’une application de gestion d’une agence de location de véhicule ( Agence LV), et nous utilisons l’IDE Pycharm pour la création et l’édition du code de l’application .
Application vs Module :
Un module Odoo, est un répertoire structuré, composé par des sous répertoires et des fichiers, de tel façon à suive le Modèle MVC, (Model View Controller).
Toute application est un module et doit apparaitre dans le menu principal d’Odoo, et souvent lorsqu’on parle de module on désigne une application.
Un module n’est pas obligatoirement une application, Il ne doit pas apparaitre dans le menu principal ou les sous menus d’Odoo, il peut être une extension qui ajoutes des fonctionnalités tel que des états de sorties, des champs à un formulaire, ou des simples améliorations des fonctionnalités d’une application.
Une application est représentée comme une option du menu principal des applications Odoo, comme le CRM, Vente, Inventaire, et peut être composée par plusieurs modules.
Créer et installer notre première application de gestion d’une agence de location de véhicules :
Dans le chapitre préparer l’environnement de développement, nous avons préparé et ajouté le répertoire des modules spécifiques, à notre fichier de configuration d’Odoo.
Pour créer une application Odoo, il faut créer un répertoire qui portera le nom technique de l’application, dans le répertoire préconfiguré dans le fichier de configuration Odoo.
Pour cela, créez dans le répertoire Odoo, un répertoire qui va contenir nos applications de formation, appelez le form_addons par exemple, puis ajoutez le dans le fichier de configuration d’Odoo :
addons_path=/home/stadev/odoo/addons, /home/stadev/odoo/form_addons
, puis redémarrez le service Odoo 14 .
Le répertoire de notre application, peut contenir plusieurs fichiers et dossiers respectant le modèle MVC, et doit obligatoirement contenir deux fichiers python, __manifest__.py et __init__.py.
Le fichier __manifet__.py comporte un dictionnaire décrivant toute les partie nécessaires au module en question (les données, les états de sorties, les vues,…) .
Le fichier __init__.py est le point d’entrée lors de compilation et comporte les noms des répertoires qui vont contenir les fichiers pythons de l’application, ou les fichiers python à importer.
(Vous pouvez consulter l’article bien comprendre l’architecture technique d' Odoo)
Dans notre cas, créez donc le répertoire de notre application agence_lv, dedans créez ces deux fichiers, __manifest__.py et __init__.py.
Editer le fichier __manifest__.py et mettez le code :
{'name': 'Agence de Location de Véhicules'},
Redémarrer votre instance Odoo, puis reconnectez à Odoo, puis activer le mode développeur, (Configuration – activer le mode développeur).
Allez ensuite sur la menu- applications et cliquez l’option sur Mise à jour de la liste des applications, puis enlever le filtre Applications qui se trouve dans la barre de recherche des applications.
Tapez ensuite dans la barre de recherche le mot : agence, sur le résultat qui s’affiche vous trouvez le nom technique qui porte le nom du répertoire qu’on vient de créer (agence_lv) le titre qu’on a indiqué dans le fichier __manifest__.py.
A présent, cette application ne comporte rien, donc rien ne va s’ajouter à Odoo, mains on peut l’installer en cliquant sur le bouton installer.
Organisation de notre module :
Un module Odoo suit une structure bien définie, pour permettre une meilleure lisibilité et clarté, de tel façon que n’importe quel développeur Odoo, comprenne rapidement les différentes parties de ce module.
Pour créer un module Odoo qui respecte le model MVC , on peut soit :
- Copier/coller un module Odoo existant, puis nous éditons les fichiers de ce module
- Utiliser la commande scaffold à partir du terminal
- Ou bien créer nous même les différentes parties du module.
Créer la structure du module en s’inspirant d’un module Odoo de base :
Cette méthode consiste à réutiliser les modèles Odoo existants, et les personnaliser à notre besoin. Par exemple, nous pouvons consulter le répertoire addons d’Odoo, spécialement le module CRM, qui contient les fichiers et répertoires standard composant un module Odoo.
Vous n’avez qu’à copier la structure puis la personnaliser selon votre besoin.
Créer la structure du module en utilisant la commande scaffold :
Cette méthode consiste à exécuter depuis le répertoire odoo-bin d’Odoo, la commande scaffold , qui va donner comme résultat un répertoire prêt avec tous les fichiers et sous dossiers d’un module Odoo standard.
Pour se faire, exécuter dans le terminal ces deux commandes :
cd home/stadev/odoo/form_addons
# brancher sur votre répertoire addons spécifique, dont nous avons défini dans le fichier de configuration odoo
~/odoo/odoo-bin scaffold sta_module
# mettez le nom de votre module dans cette section
Personnaliser ensuite le contenu, selon votre besoin, particulièrement le fichier __manifest__.py .
Créer la structure du module en créant manuellement les fichiers et répertoire nécessaires :
Cette méthode consiste à créer la structure de notre module manuellement.
Nous avons déjà précédemment deux fichiers de base (__init__.py et __manifest__.py), de même façon on crée les autres fichiers et répertoires, en cliquant, dans Pycharm, sur le bouton droit de la souris à côté de notre dossier addons personnalisé, puis pointez vers Nouveau (File ou Directory).
On peut également utiliser les commandes linux ( mkdir pour créer un dossier et touch pour créer un fichier :
mkdir models
# création du dossier models
touch models/__init__.py
# création du fichier __init__.py
La structure généralement utilisée doit ressembler la réer un dossier et touche pour créer un fichier :
location_lv
├── __init__.py
├── __manifest__.py
├── controllers
│ └── __init__.py
├── data
├── demo
├── i18n
├── models
│ └── __init__.py
├── security
├── static
│ ├── description
│ └── src
│ ├─ js
│ ├─ scss
│ ├─ css
│ └ xml
├── report
├── wizard
│ └── __init__.py
└──views
└── __init__.py
Compléter notre application Gestion d’une agence de location de véhicules :
La structure de base est maintenant créée, nous continuons la création des autres parties de notre application.
Ci-joint les étapes à suivre pour compléter notre application de base :
1. Editer le fichier __init__.py
Editer le fichier d’entrée de notre module __init_.py et y ajouter :
from . import models
from . import controllers
from . wizard
Dans cette partie de code, on indique au compilateur d’importer dossiers qui vont contenir du code python (models, controllers et wizard) , et à l’intérieur de chaque répertoire on trouve également un autre fichier __init__.py, qui comporte à son tour la déclaration des fichiers python internes à ce dossier.
2. Compléter le fichier __manifest__.py
Editer le fichier __manifest__.py avec le code suivant :
{
'name': 'Agence de Location de Véhicules',
'summary': "Gestion d’une agence de location de Véhicules",
'description': """
Gestion d’une agence de location de véhicules
==============
Description relative à la gestion d’une agence de véhicule .
""",
'author': "BENHAMIDA Mustapha",
'website': "https://odooskills.com",
'category': 'Uncategorized',
'version': '14.0.1',
'depends': ['base'],
'data': ['views/views.xml'],
'demo': ['demo.xml'],
}
Comme vous pouvez le constater, le fichier __manifest__.py comporte un dictionnaire python, dont chaque clé corresponde aux informations relatives à notre module.
Par exemple ‘depends’ signifie la lise des modules qui doivent être liés à notre module, dans notre cas le module est [’base ‘] qui est nécessaire pour tous les autres applications Odoo.
Autres informations sont aussi précisées, comme la version du module (‘version’), les fichiers de données (‘data’, les fichiers de démonstration (‘demo’), le site web (‘website’, une description (‘description’), l’auteur (‘author’) et bien d’autres informations qui peuvent être ajoutées à ce fichier de base.
3. Ajouter un fichier .png
Pour mieux représenter notre module, nous lui ajoutons une image sous forme .png, dans le dossier static/description/icon.png
4. Création d'un modèle:
Un modèle représente la structure des données de notre module. Nous commençons par la création du modèle véhicule.
On souhaite initialement renseigner pour chaque véhicule, la marque, le modèle la date d’achat et les chauffeurs associés à ce véhicule.
Pour se faire nous allons créer dans le répertoire models, le fichier python agence_vehicule.py, puis mettez le code suivant dans le fichier créé :
from odoo import models, fields
class AgenceVehicule(models.Model):
_name = 'agence.vehicule'
# Les caractéristiques des véhicules
marque = fields.Char('Marque', required=True)
modele = fields.Char('Modèle', required=True)
date_achat = fields.Date('Date d Achat’)
chaffeur_ids = fields.Many2many(
'res.partner',
string='Chaffeurs'
)
Le code précédent représente une classe python, avec la définition des champs (fields) relatifs à un véhicule (marque, modèle, date d’achat, les chauffeurs associés).
Chaque champ a un type, dans cet exemple nous avons utilisé (date : Date, caractère : Char, et Many2many : relation modèle Plusieurs à Plusieurs)
Chafeur_ids : représente une relation ManyTomany, qui se traduit par chaque véhicule peut être conduit par plusieurs chauffeurs, et que chaque chauffeur peut conduire plusieurs véhicules.
Nous avons utilisé un modèle de base d’Odoo qui est ‘res.partner’ pour représenter les chauffeurs.
Nous reviendrons prochainement au sujet des Modèles et leurs relations avec plus de détails.
Il faut donc respecter les règles de codification python (la nomination, l’indentation, les mots clés,
Remarque importante : Odoo a son propre ORM (Object Relational Mapping), qui est a pour objectif principal la traduction de nos classes python vers le SGBD PostgreSQL.
Particulièrement, en écrivant dans notre classe l’attribut _name=’agence.vehicule’, l’ORM va générer une table qui sera nommé ‘agence_vehicule’ dans le SGBD PostgreSQL (remarquer le remplacement du ‘.’ Par ‘_’).
Nous pouvons trouvons le nouveau modèles créé en allant vers : Configuration|Technique|Modèle {Catégorie structure de la base de données}
Tapez ensuite ,le mot agence dans la liste de modèle, vous trouvez le modèle agence.vehicule ajouté avec d’autres champs qui sont ajoutés automatiquement par Odoo (last_update, creat_date, create_uid,…).
5. Déclarer le modèle créer dans le fichier __intit__.py
Afin que le modèle créé sera pris en compte, lors de compilation de notre module, il faut l’importer dans le fichier __init__.py, pour se faire il suffit d’ajouter le code suivant :
from . import agence_vehicule
6. Ajouter un menu d’accès à l’application
Nous avons créé notre modèle agence.vehicule, qui a été bin ajouté à notre base de données.
Pour introduire, rechercher et visualiser les données de notre application, il faut préparer les vues correspondantes, qui auront comme sources de données les modèles de notre base de données.
7. Création du fichier xml qui va contenir les vues de l’application :
Créez un fichier xml, dans le répertoire views/agence_vehicule.xml , et mettez le code de la structure de base d’un fichier xml odoo :
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--on met les enregistrement ici dans la balise odoo -->
</odoo>
8. Déclarer le fichier agence_xml dans le fichier de base __manifest__.py
Pour que le fichier agence_xml sera pris en compte, il faut le déclarer dans le fichier de base __manifest__.py, ajouter donc la ligne suivante :
'data': [
'views/agence_vehicule.xml'
],
9. Ajoutez l’action qui ouvre les vues dans le fichier agence_vehicule.xml
Pour définir l’action qui va permettre d’ouvrir les Vues (formulaire, liste, recherceh,…) mettez le code suivant dans le fichier agence_vehicule à l’intégrieur de la balise odoo
<record id='agence_vehicule_action' model='ir.actions.act_window'>
<field name="name"> Gestion des Véhicules </field>
<field name="res_model">agence.vehicule</field>
<field name="view_mode">tree,form</field>
</record>
L’action créée va pointer vers les vues relatives au modèle agence.vihicule avec l’ordre indiquée (tree,form donc Vue liste puis Formulaire, on peut faire l’inverse, en écriavant <field name="view_mode">form,tree</field>
10. Ajoutez le menu de l’application dans le fichier agence_vehicule.xml
Afin de visualiser le menu de notre application et ses options, nous devons le déclarer dans notre fichier xml des vues (agence_vihicule.xml) :
Mettez donc le code suivant dans le fichier agence_vehicule après le ‘enregistrement précédent :
< menuitem name="Mon Agence de Location" id="agence_base_menu" />
<menuitem name="Vehicules" id="agence_vehicule_menu"
parent="agence_base_menu" action="agence_vehicule_action"/>
Le premier ‘menuitem’ dont l’identifiant unique est agence_base_menu représente le menu principale de l’application, tandis que deuxième ‘menuitem’ dont l’id est agence_vehicule_menu est un sous menu qui a le menu parent ‘agence_base_menu’, et qui a comme action dont l’id est agence_vehicule_action et qui pour résultat l’affichage des vues de l’application.
Redémarrer votre instance Odoo pour que les changements seront pris en compte, puis allez dans la liste des applications et effectuer une mise à jour de notre application agence_lv.
Vous remarquez que rien ne sera affiché, par ce que tout simplement vous n’avez pas les droits nécessaires, malgré vous entrez dans l’application comme administrateur.
En fait, à partir de la version 12 d’Odoo , et afin de limiter les risques liés aux droit d’administrateurs, une couche a été ajouté( mode super-utilisateur qui a tous les droits ) avec l’affichage d’une bande en jaune, pour vous alerter sur les opérations que vous effectuez sur la base de données en cours.
Vous devez soit définir les droits d’accès, une chose qu’on va faire dans le prochain article, soit activer le mode super-utilisateur
11. Activez le mode super-utilisateur
Pour Activez le mode super-utilisateur, vous devez tout d’abord activer le mode développeur en se rendant compte sur la partie Configuration | Activer le mode développeur.
Puis cliquer sur l’icone (petite insecte !) et dans le menu qui s’afficher, choisissez l’option devenez un supe-utilisateur, une bande jaune sera ajoutée en haut à droite à côté du nom d’utilisateur.
12. Visualiser le contenu de notre première application
En activant le mode super-utilisateur, vous pouvez remarquer l’ajout de notre application au menu principale (Mon application de location), et si on clique nous aurons comme résultat la vue liste des Véhicules avec la vue Recherche.
En plus, vous pouvez cliquer sur le bouton créer pour afficher le formulaire correspondant à notre modèle agence.vihucule .
Ces vues sont créées automatiquement par l’ORM(Object Relational Mapping) Odoo, vous pouvez remarquer que ces Vues ne sont pas bien structurées, il faut donc les définir nous même, pour avoir le résultat souhaité, une chose qu’on va faire dans le prochain article.
Conclusion
Nous avons vu ensemble, l’architecture basique d’un module Odoo, et la manière de créer une application spécifique de base en utilisant le Framework technique d’Odoo, en respectant le modèle MVC.
Nous avons ajouté à notre application un modèle nommé agence.vehicule, une action qui affiche les vues et un menu principale et Pour afficher le résultat nous avons activer le mode super-utilisateur .
Dans le prochain article, nous allons découvrir comment définir les droits d’accès dans une application Odoo, et comment personnaliser les Vues de Base (Recherche, Liste et Formulaire).
Télécharger gratuitement votre guide odoo !
Découvrez comment , Odoo est une vraie opportunité pour les entreprises et les développeurs !