Chapitre 5 : Exploration de la structure d’une application Odoo

1- Application multi-niveaux

Odoo suit une architecture multi-niveaux, ce qui signifie que la présentation, la logique métiers et le stockage des données sont séparés. Il utilise une architecture à trois niveaux (image tirée de Wikipedia) :Three-tier architecture

Le niveau de présentation est une combinaison de HTML5, JavaScript et CSS. La partie logique est exclusivement écrite en Python, tandis que la partie données ne prend en charge que PostgreSQL en tant que SGBDR.

En fonction de la portée de votre module, le développement d’Odoo peut être effectué dans n’importe lequel de ces niveaux. Par conséquent, avant d’aller plus loin, il peut être judicieux de vous rafraîchir la mémoire si vous n’avez pas un niveau intermédiaire dans ces domaines..

Pour suivre ce tutoriel, vous aurez besoin de connaissances de base en HTML et d’un niveau intermédiaire en Python.

2- Modules d’Odoo

Les extensions serveur et client sont présentées sous forme de modules qui sont éventuellement chargés dans une base de données. Un module est un ensemble de fonctions et de données qui visent un objectif unique.

Les modules Odoo peuvent soit ajouter une toute nouvelle logique d’entreprise à un système Odoo, soit modifier et étendre la logique d’entreprise existante. Un module peut être créé pour ajouter les règles comptables de votre pays au support comptable générique d’Odoo, tandis qu’un autre module peut ajouter un support pour la visualisation en temps réel d’une flotte de bus.

Dans Odoo, tout commence et se termine par des modules.

Terminologie : les développeurs regroupent leurs fonctionnalités commerciales dans des modules Odoo. Les principaux modules orientés vers l’utilisateur sont signalés et exposés en tant qu’applications, mais la majorité des modules ne sont pas des applications. Les modules peuvent également être appelés addons et les répertoires dans lesquels le serveur Odoo les trouve forment le addons_path.

3- Composition d’un module

Un module Odoo peut contenir un certain nombre d’éléments : Business objects

  • Business objects (par exemple une facture) est déclaré comme une classe Python. Les champs définis dans ces classes sont automatiquement mis en correspondance avec les colonnes de la base de données grâce à la couche ORM. Object views

Définir les fichiers de données d’affichage de l’interface utilisateur : Data files

Fichiers XML ou CSV déclarant les données du modèle :

Contrôleurs web : Web controllers

  • Traiter les demandes des navigateurs web

Données web statiques

  • Images, fichiers CSS ou JavaScript utilisés par l’interface web ou le site web

Aucun de ces éléments n’est obligatoire. Certains modules peuvent n’ajouter que des fichiers de données (par exemple, une configuration comptable spécifique à un pays), tandis que d’autres peuvent n’ajouter que des objets de gestion. Au cours de cette formation, nous créerons des objets de traitement(Controllers), des vues(views) d’objets et des fichiers de données(models).

4- Structure du module

  • Chaque module est un répertoire dans un répertoire de modules. Les répertoires de modules sont spécifiés à l’aide de l’option  --addons-path.
  • Un module Odoo est déclaré par son manifest.
  • Lorsqu’un module Odoo comprend des objets métier (c’est-à-dire des fichiers Python), ils sont organisés comme un paquetage Python(Python package ) avec un fichier__init__.py. Ce fichier contient des instructions d’importation pour les différents fichiers Python du module.

Voici un répertoire de modules simplifié :

module
├── models
│   ├── *.py
│   └── __init__.py
├── data
│   └── *.xml
├── __init__.py
└── __manifest__.py

Un module Odoo suit une structure bien définie qui organise les fichiers et les dossiers de manière cohérente. Voici une explication de la structure d’un module Odoo :

  1. manifest.py : Ce fichier est obligatoire et joue un rôle central dans un module Odoo. Il contient les métadonnées du module, telles que le nom, la version, l’auteur, la description, les dépendances, etc. Il indique également les fichiers à inclure dans le module.
  2. models.py : Ce fichier contient la définition des modèles de données du module. Les modèles de données sont des classes Python qui définissent la structure des enregistrements et des champs de la base de données. C’est dans ce fichier que vous définissez les champs, les relations, les méthodes et les contraintes pour les modèles de données.
  3. views.xml : Ce fichier contient les vues de l’interface utilisateur du module. Les vues définissent comment les données sont présentées et interagissent avec l’utilisateur. Les vues sont généralement écrites en utilisant le langage de balisage XML spécifique à Odoo. Vous pouvez définir des vues de formulaire, des vues de liste, des vues de tableau de bord, etc.
  4. security.xml : Ce fichier est utilisé pour définir les règles de sécurité du module. Il permet de spécifier les droits d’accès aux différentes fonctionnalités et données du module pour les utilisateurs et les groupes. Vous pouvez définir des règles de lecture, d’écriture, de suppression, etc., pour chaque modèle de données du module.
  5. static/ : Ce répertoire contient les fichiers statiques tels que les images, les fichiers CSS et JavaScript. Vous pouvez placer les ressources nécessaires à l’interface utilisateur dans ce répertoire pour les utiliser dans les vues.
  6. data/ : Ce répertoire est utilisé pour charger des données initiales dans le module. Vous pouvez y inclure des fichiers CSV, XML ou d’autres formats pour importer des enregistrements pré-définis dans la base de données lors de l’installation du module.
  7. controllers/ : Ce répertoire est utilisé pour stocker les contrôleurs personnalisés du module. Les contrôleurs sont responsables de la gestion des requêtes HTTP et des réponses correspondantes. Vous pouvez y définir des actions spécifiques, gérer les formulaires, les soumissions, etc.
  8. reports/ : Ce répertoire est utilisé pour stocker les modèles de rapport personnalisés du module. Vous pouvez y définir des modèles de rapport utilisant le langage de modèle QWeb, spécifier les données sources et les formats de sortie des rapports.

La structure d’un module Odoo peut également inclure d’autres fichiers et répertoires selon les besoins spécifiques du module. L’organisation des fichiers et des dossiers est essentielle pour maintenir un code propre et facilement compréhensible. Une bonne structure facilite également la réutilisation et la collaboration entre développeurs travaillant sur le même module.