Section 2 : Création de module Odoo Section 2 : Création de module Création de

Section 2 : Création de module Odoo Section 2 : Création de module Création de module Odoo Qu’est ce qu’un module ? Le module est l’entité de base d’Odoo, il est constitué de 4 fichiers principaux, qu’on va détailler par la suite. Les modules odoo sont placés dans un répertoire nommé « addons ». Ce dernier contient, en plus des modules créés, des modules dits « standards », qui sont intrinsèques à odoo, et que nous pouvons utiliser et hériter (voir chapitre « Relation entre les modèles »). Création d’un module : On couvre ici les éléments importants pour la création d’un module. On aura besoin de 4 fichiers :  __init__.py  __manifest__.py  Model.py (On peut le nommer ce qu’on veut, sans changer l’extension .py)  View.xml (On peut le nommer ce qu’on veut, sans changer l’extension .xml) __init__.py : Ceci est un fichier d’initialisation, il permet à Python de traiter le répertoire comme contenant des packages. Ce fichier contient des instructions d’importation de divers fichiers Python dans notre module (comme les modèles). Structure : from .import Model __manifest__.py : Le fichier __manifest__.py déclare un package Python comme module Odoo, en précisant les métadonnées du module. Section 2 : Création de module Structure: { 'name': " Module", 'version': '1.0', 'depends': ['base'], 'author': "Author Name", 'category': 'Category', 'description': """ Description text """, 'data': [ 'views/mymodule_view.xml', ], } Explication des champs : Champs Explication 'name' Le nom affiché du module 'version' Version du module 'depends' On précise ici les modules à charger pour le fonctionnement de notre module, si celui-ci dépend d’autres modules. 'author' Le nom de l’auteur du module. 'category' La catégorie dans laquelle le module est classé, ceci permet de le retrouver plus facilement parmi les autres modules. 'description' La description textuelle du module. 'data' Liste des données qui doivent être installées et mise à jour avec le module, c’est une liste de chemins depuis le répertoire racine de notre module. Section 2 : Création de module Remarque : Les champs qui sont obligatoires à préciser sont le nom du module et ‘data’ pour le bon fonctionnement du module, il est tout de même conseillé de préciser les détails des autres champs. On peut également ajouter plusieurs autres champs au __manifest__ pour plus de détails. Model.py : Ceci sera le fichier ou on définit notre modèle. Le modèle définit les structures de données. Notion importante : La couche ORM (Object-Relational Mapping) : Ceci est une couche importante et clé d’Odoo, du fait qu’elle nous évite d’écrire des requêtes SQL et permet l’extensibilité d’objets prédéfinis. Le modèle de données est décrit par des objets et des classes Python. Et l’objectif de l’ORM est de faciliter le plus possible le travail pour le développeur, et de combler le fossé entre Python et la base de données relationnelle sous-jacente(PostgreSQL). Les Business Objects sont déclarés comme des classes qui étendent Model. L’attribut le plus important de modèle est _name qui est requis et définit le nom du modèle dans le système d’Odoo. Model Fields sont utilisés pour définit ce que le modèle peut stocker et l’emplacement du stockage, ils représentent des attributs de la classe Model. Structure: From odoo import models, fields, api Class Document(models.Model): _name = ‘nom du modèle’ #les differentes variables à créer View.xml : Ceci est un fichier xml définissant la vue et l’interface avec laquelle interagit l’utilisateur. Section 2 : Création de module Exemple d’application : On travaillera étape par étape sur un exemple simple, expliquant les différentes parties importantes. L’exemple sur lequel on travaillera concerne la gestion d’une bibliothèque, et spécifiquement la tache de l’ajout d’un nouvel ouvrage au système de gestion de cette bibliothèque. Dans Eclipse, on ouvre le dossier « addons », on crée un nouveau dossier qu’on nomme « Bibliotheque de test », et dans ce dossier on crée 4 fichiers : __init__.py __manifest__.py bib.py view.xml __init__.py Dans notre exemple, on importera le fichier bib.py qui définit notre modèle : from .import bib __manifest__ .py : { 'name': ' Exemple de gestion de bibliotheque', 'version':"1.0", Section 2 : Création de module 'author': "HORIYASOFT", 'category': 'test', 'website': 'http://www.horiyasoft.com', 'summary':'Module pour gestion de bibliotheque', 'data': [ 'view.xml'], 'installable': True, } On précise dans notre exemple qu’on peut installer notre module avec :'installable':True bib.py : from odoo import models, fields, api class Document(models.Model): _name = 'biblioth.livre' name = fields.Char(string="Titre", required=True) description = fields.Text() author_name = fields.Char(string='NomAuteur', required=True) book_id = fields.Integer(string='ID dulivre', required=True) book_release_date = fields.Date(string="Date sortiedulivre") is_bestseller = fields.Boolean('Bestseller?') book_genre = fields.Selection([('h', 'Horreur'), ('s', 'Science'), ('a', 'Aventure'), ('r', 'Romance'), ('p', 'Policier'), ('au', 'Autre')], 'Genre dulivre') On travaille sur une multitude de type de champs ici, on met « required = True » pour noter que le champ est nécessaire à remplir lors de la création de l’objet. Lors de la création de l’ouvrage, on est requis à donner le nom du livre, de l’auteur et son id. Les autres champs sont optionnels : Description du livre, sa date de sortie, s’il est un bestseller ou pas, et son genre. view.xml : Voici notre fichier xml. Ce fichier donne une organisation par défaut aux champs créés, ce qu’on va améliorer au fur et à mesure : <?xml version="1.0" encoding="UTF-8"?> <odoo> Section 2 : Création de module <data> <record model="ir.actions.act_window" id="livre_action"> <field name="name">Document</field> <field name="res_model">biblioth.livre</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="help" type="html"> <p class="oe_view_nocontent_create">Créer le premier ouvrage de cette bibliothèque </p> </field> </record> <menuitem id="main_menu" name="Bibliotheque exemple"/> <menuitem id="livre_menu" name="Livres" parent="main_menu"/> <menuitem id="ouvrage_menu" name="Infos Livres" parent="livre_menu" action="livre_action"/> </data> </odoo> Explication des différents éléments : Les actions dans Odoo définissent le comportement du système aux actions de l’utilisateur : login, boutons … ir.actions.act_window: Windows action (fenêtred’action):C’est le type d’action le plus commun et permet de visualiser le modèle sous des vues (views). Une fenêtre d’action définit un ensemble de types de vues pour un modèle (ou un enregistrement du modèle). Elle regroupe plusieurs champs notamment : Champs Explication res_model Le modèle auquel on attribue les vues. view_type C’est un champ de sélection, et on y met le type de vue qui sera chargé. view_mode On y présente les modes de vue autorisés oe_view_nocontent_create Cette classe définit le message affiché lors de la non-existence d’un objet dans le modèle La séquence des menus item est importante, donc il faut garder le bon ordre. Ceux-ci définissent les menus et la hiérarchie entre eux. <menuitem id="main_menu" name="Bibliotheque exemple"/> Ce menu figure dans la barre d’en haut : Section 2 : Création de module <menuitem id="Livre_menu"name="Livres" parent="main_menu"/> <menuitemid="ouvrage_menu"name="Infos Livres" parent="livre _menu" action="livre_action"/> parent="main_menu" veut dire que le menu avec l’id livre_menu est un sous-menu du menu ayant l’id main_menu. Résultat : On voit les éléments visuels définis dans notre fichier xml. On crée notre premier ouvrage, et on le sauvegarde. Section 2 : Création de module Maintenant on manipulera les vues, on verra pour l’instant 3 vues : FormView, TreeView et SearchView et ce, pour une meilleure organisation des champs : FormView : On ajoutera le code suivant à notre fichier xml, il permettera de mieux organiser les éléments qui s’affichent. <record id="library_book_view_form" model="ir.ui.view"> <field name="name">Library Book Form</field> <field name="model">biblioth.livre</field> <field name="arch" type="xml"> <form> <group> <field name="name"/> <field name="description"/> <field name="author_name"/> <field name="book_id"/> </group> <group> <field name="book_release_date"/> <field name="is_bestseller"/> <field name="book_genre"/> </group> </form> </field> </record> On organisera notre forme en deux groupes : Un qui contient les champs : titre, description, nom de l’auteur et l’id du livre, et un autre groupe qui contient les autres éléments. Section 2 : Création de module <field name="model">biblio.livre</field> Ici on spécifie le nom du model sur lequel on travaille. On voit qu’on a la bonne hiérarchie qu’on a définie dans le fichier xml, ainsi que les deux groupes d’éléments qu’on a créés. TreeView : On s’intéresse maintenant à une vue arborescente de certains éléments, on prend en guise d’exemple les champs : Titre, description et date de sortie du livre. <record id="library_book_view_tree" model="ir.ui.view"> <field name="name">Library Book List</field> <field name="model">biblioth.livre</field> <field name="arch" type="xml"> <tree> <field name="name"/> <field name="description"/> <field name="book_release_date"/> </tree> </field> </record> On obtient le résultat suivant : On voit que les champs qu’on a choisis sont organisés de manière arborescente. Section 2 : Création de module SearchView : On s’intéresse maintenant à l’ajout d’une option de recherche sur les enregistrements qu’on a faits, en incluant un filtre s’il est requis. Dans notre cas, on ajoutera une vue de recherche et un filtre pour les livres auxquels on n’a pas spécifié de date de parution. <record id="library_book_view_search" model="ir.ui.view"> <field name="name">Library Book Search</field> <field name="model">biblioth.livre</field> <field name="arch" type="xml"> <search> <field name="name"/> <field name="author_name"/> <field name="book_release_date"/> <filter string="Livres sans date sortie" domain="[('book_release_date','=',False)]"/> </search> </field> </record> On peut faire des recherches sur un des champs désignés : Titre, nom d’auteur et date de sortie du livre. Filtre : <filter string="Livres sans date sortie" domain="[('book_release_date','=',False)]"/> Lorsqu’on active le filtre, la recherche affiche le domaine où la date de sortie n’a pas été spécifiée, qui veut dire :'book_release_date','=',False On crée un enregistrement (livre) sans date de sortie. On obtient une recherche sur les différents champs spécifiés avant selon le type du champ. uploads/s3/ chap-2-cr-ation-de-module-odoo 1 .pdf

  • 16
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager