SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
Développement de modules pour Odoo:
exemples et exercices corrigés
Abdelouahed Sabri
abdelouahed.sabri@gmail.com
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences Dhar El Mahraz Fès
Plan
 Introduction
 Structure d’un module Odoo
 Objets (tables) Odoo
 Les types de champs d’un objets
 Les interfaces
 Les menus
 Les actions
 Les vues (views)
 Internationalisation
Introduction
 Odoo utilise une architecture trois tiers qui est une
architecture client-serveur.
 On trouve 3 couches :
1- couche présentation (interface utilisateur),
2- couche métier (business ou aussi fonctionnelle) responsable de la mise
en œuvre de l’ensemble des règles de gestion et de la logique applicative
et
3- couche d’accès aux données
 Ces 3 couches sont développées et maintenues sous forme de
modules indépendants
 Le noyau d’Odoo et de ses différents modules sont écrits en
Python.
 La fonctionnalité d’un module est gérée par le protocole XML-RPC
(et/ou NET-RPC)
 Les modules en Odoo sont aussi appelés extensions ou plugins
(addons) et sont open-source.
Introduction
 ORM OpenERP
 Les modules Odoo font usage de l’ORM (Object-Relational
Mapping) de Odoo pour rendre persistantes leurs données
dans une base de données relationnelle (PostgreSQL).
 Les données peuvent être insérées en utilisant le module ou lors de
l’installation utilisant des fichiers XML, CSV ouYML
 On peut écrire (développer) de nouveaux modules on
utilisant Python, des fichiers XML et utiliser l’ORM de
Odoo
Modules Odoo
 Tout les modules sont localisés dans le dossier
«serveropenerpaddons »
 Un module Odoo doit vérifier les conditions suivantes :
 Le nom du dossier contenant les fichiers du module doit être le même
que le nom du module lui même
 Trois fichiers Python sont obligatoires :
 __init__.py : fichier d’initialisation du module
 __openerp__.py : fichier de description du module
 NomDuModule.py : fichier des objets
 Les vues (formulaires, listes, ...), les menus et les actions sont définies
dans un Fichier XML
 Il est possible d’ajouter des données de démonstration lors de
l’installation. Ces données sont dans un fichier XML.
 Il est possible de créer des rapports, des Wizard (assistants) et/ou
desWorkflow (flux de travail)
NB: L’encodage des fichiers doit être en format UTF8
Modules Odoo
 Le fichier d’initialisation du module __init__.py
 Comme pour tous les modules Python, ce fichier est exécuté
au début du programme.
 Il a besoin d'importer les fichiers Python qui doivent être
chargés en mémoire.
 NB:
 Si vous créez un fichier "NomDuModule.py" contenant la
description des objets du module, il faut écrire dans le fichier
__init__.py la ligne suivante :
import NomduModule
Modules Odoo
 Le fichier de description du module __openerp__.py
 C’est un fichier Python permettant la description du module et
aussi responsable de :
 Spécifier les fichiers XML qui seront analysés (parsed) lors de
l'initialisation du serveur,
 Spécifier les dépendances du module créé
Modules Odoo
 Le fichier de description du module __openerp__.py
 Ce fichier doit contenir un dictionnaire Pyhton avec les
valeurs suivantes :
name Le nom du module
version La version du module, sur deux chiffres (exp. 1.1 ou 2.3)
description La description du module y compris la documentation sur l'utilisation du
module
author L'auteur du module
website Le site Web du module
licence La licence du module (par défaut: GPL-2).
installable True ou False. Indique si le module est installable ou non
active True ou False (False défaut).
category La catégorie dans laquelle le module va être placée
application True ou False. Pour que le module soit identifié comme application. Seul
Odoo délivre les certificats qualifiant un module d’application.
data Liste de fichiers xml contenant les interfaces
Modules Odoo
 Exemple
 Créer un dossier (module) vide « gestion_sigl» dans le
répertoire «serveropenerpaddons »
 Créer les deux fichiers Python (obligatoire) :
 __init__.py et __openerp__.py
 Redémarrer le serveur ou bien dans le menu d’Odoo
« Configuration »  « Modules »  « Mettre à jour la liste
des modules »
 Chercher le module
Objets (tables) Odoo
 Le fichier NomduModule.py
 Ce fichier va contenir les classes (objets Odoo) de la couche
model permettant de persister les données dans la base de
données via la couche ORM de Odoo
 Les objets métiers sont déclarés comme des classes Python
héritant de la classe osv.osv qui utilise le Framework
ObjectSerVice (OSV).
Objets (tables) Odoo
 Objets
 Pour définir un nouvel objet, il faut définir une nouvelle classe
Python puis l’instancier. Cette classe doit hériter de la classe
osv du module osv.
 Le canevas est le suivant:
# -*-coding: utf-8 -*-
from openerp.osv import fields, osv
class nom_de_l_objet(osv.osv):
# définition des champs (attributs) de la classe
nom_de_l_objet()
Objets (tables) Odoo
 Objets
 Un objet est défini par la déclaration dans la classe de quelques champs
(attributs) avec des noms prédéfinis.
 Deux attributs sont obligatoires : « _name et _columns », le reste est
optionnel.
_name (required) Nom de l’objet
_columns (required) Les champs de l’objet
_constraints Contraintes sur l’objet
_table Nom de la table SQL. Par défaut c’est la valeur du champs _name où
les points ( . ) sont remplacés par underscores ( _ )
_sql_constraints Les contraintes SQL
...
# -*-coding: utf-8 -*-
from openerp.osv import fields, osv
class nom_de_l_objet(osv.osv):
_name= 'nom.delobjet' # _table= 'nom_delobjet'
_columns= { … }
nom_de_l_objet()
Objets (tables) Odoo
 Les types de champs d’un objet
 Les objets Python peuvent contenir différents types de champs.
Ces types sont divisés en trois catégories;
1. Simple: ce sont les types simples à savoir boolean, integer, date,
float, char, text, selection, binary..
2. Relationnel : Représente les types de relations entre les objets :
many2one, one2many, many2many
3. Fonctionnel : des champs calculés
 NB: Les types de champs sont déclarés dans la classe « fields ».
Objets (tables) Odoo
 Les types de champs d’un objet
 Les types simples
Syntaxe
boolean fields.boolean('Field Name' [, Optional Parameters])
integer fields.boolean('Field Name' [, Optional Parameters])
float fields.float('Field Name' , digits=(12,6), [, Optional Parameters])
char fields.char('Field Name', size=n [,Optional Parameters])
Text fields.text('Field Name' [, Optional Parameters])
date fields.date('Field Name' [, Optional Parameters])
....
Optionnal Parameters peut être par exemple
required=True pour un champ obligatoire
Objets (tables) Odoo
 Les types de champs d’un objet
 Les types simples
 Exemple:
 Un premier exemple d’application est de créer un objet permettant
le mapping de la table ELEVE suivante:
ELEVE (numE (char de taille 16), nomE (char de taille 32), nomC (char de taille 32))
# -*-coding: utf-8 -*-
from openerp.osv import fields, osv
class gestion_eleve(osv.osv):
_name= 'gestion.eleve'
_description = u"Table des éléves"
_columns= {
'nume' : fields.char(u'Numéro de l étudiant', size=16, required=True),
'nome': fields.char(u'Nom de l étudiant', size=32, required=True),
'nomc': fields.char(u'Nom de la classe', size=32, required=True)
}
gestion_eleve()
Objets (tables) Odoo
 Les types de champs d’un objet
 Les types simples
 Exercice:
Créer un module pour la gestion d’une école. Le module consiste en
la création des tables suivantes :
 gestion.eleve (numE (char de taille 16), nomE (char de taille 32),
nomC (char de taille 32))
 gestion.classe (nomC (char de taille 16))
 gestion.professeur (numP (char de taille 16), nomP (char de taille
32))
 gestion.service (numP (number de taille 9), nomC (char de taille
16), nbh(float de taille 16))
# -*-coding: utf-8 -*-
from openerp.osv import fields, osv
class gestion_eleve(osv.osv):
_name= 'gestion.eleve'
_description = u"Table des éléves"
_columns= {
'nume' : fields.char(u'Numéro de l étudiant', size=16, required=True),
'nome': fields.char(u'Nom de l étudiant', size=32, required=True),
'nomc': fields.char(u'Nom de la classe', size=32, required=True)
}
gestion_eleve()
class gestion_classe(osv.osv):
_name= 'gestion.classe'
_description = u"Table des classe"
_columns= {
'nomc': fields.char(u'Nom de la classe', size=32, required=True)
}
gestion_classe()
class gestion_professeur(osv.osv):
_name= 'gestion.professeur'
_description = u"Table des professeur"
_columns= {
'nump' : fields.char(u'Numéro du prof', size=16, required=True),
'nomp': fields.char(u'Nom de du prof', size=32, required=True),
}
gestion_professeur()
class gestion_service(osv.osv):
_name= 'gestion.service'
_description = u"Table des services"
_columns= {
'nump' : fields.integer(u'Numéro du prof', size=9, required=True),
'nomc': fields.char(u'Nom de la classe', size=32, required=True),
'nbh': fields.float(u'Nombre d heures assurés par un prof', digits=(9,4), required=True)
}
gestion_service()
Objets (tables) Odoo
 Les types de champs d’un objet
 Les types relationnels
Syntaxe
one2one fields.one2one('other.object.name', 'Field Name')
many2one fields.many2one('other.object.name', 'Field Name', optional
parameters)
one2many fields.one2many('other.object.name', 'Field relation id',
'Fieldname', optional parameter)
Paramètres optionnels:
invisible: True/False
states: ?
readonly: True/False
many2many fields.many2many('other.object.name', 'relation object',
'actual.object.id', 'other.object.id', 'FieldName')
Les interfaces
 Le mécanisme principal pour insérer les données est de
le faire utilisant les composants d'interface du module.
 Pour créer une interface d’un module, il faut créer ; les
menus, les vues, les actions, les rôles, les droits d'accès,
etc.
 Sous Odoo, les interfaces sont crées et configurées
utilisant des fichiers XML.
 Le fichier contenant la définition des éléments de l’interface
doit être référencé dans l’attribut « data » du fichier
« __openerp__.py ».
 Ainsi, si le fichier « projet_view.xml » contient la description
de l’interface du projet, dans le fichier il faut ajouter la ligne
"data" : ['projet_view.xml']
Les interfaces
 Canevas du fichier XML
<?xml version="1.0" ?>
<openerp>
<data>
Déclaration des éléments de l’interface
</data>
</openerp>
Les interfaces
 Les menus
<?xml version="1.0" ?>
<openerp>
<data>
Déclaration des éléments de l’interface
</data>
</openerp>
 Le menu principal est déclaré comme suit :
<menuitem id="idMenuPrincipal" name="Nom affiché dans la barre des menus" />
 1ér sous menu (non cliquable)
<menuitem id="idSousMenu" parent="idMenuPrincipal" name="Nom du menu" />
 2éme sous menu (cliquable)
<menuitem id="idSousSousMenu" parent="idSousMenu" name="Nom affiché" action="[ACTION_ID]"/>
 Où action est l’événement déclenché après clique sur le menu. Ainsi, il faut définir une
action à exécuter. Il faut qu’elle soit implémentée
Les interfaces
 Les menus
 Exercice: Ajouter un menu « Gestion d'école » au module « Gestion
d’école » déjà crée. Et ajouter trois sous-menus « Etudiants »,
« Professeur » et « Classe », « Service » et «Classe ».
On cherche à avoir la hiérarchie suivante :
 Gestion d'école
 Gestion d'école/Gestion d'ecole
 Gestion d'école/Gestion d'ecole/Classes
 Gestion d'école/Gestion d'ecole/Etudiants
 Gestion d'école/Gestion d'ecole/Professeurs
 Gestion d'école/Gestion d'ecole/Service
 NB: Pour vérifier les menus crées cliquer « Local Modules / Module
de gestion d'école » et cliquer l’onglet « Installed features » et
« Menus crées »
Les interfaces
 Les menus
 Exercice (suite)
<?xml version="1.0" ?>
<openerp>
<data>
<menuitem id="menuecole" name="Gestion d'école"/>
<menuitem name="Gestion d'ecole" id="main_menu" parent="menuecole"/>
<menuitem name="Etudiants" id="gest_etud" parent="main_menu"/>
<menuitem name="Professeurs" id="gest_prof" parent="main_menu" />
<menuitem name="Classes" id="gest_classe" parent="main_menu"/>
</data>
</openerp>
Les interfaces
 Les actions
 Une action est un événement déclenché suite à un click.
 Pour déclarer une action, il faut utiliser le modèle
"ir.actions.act_window"
 Syntaxe:
<record model="ir.actions.act_window" id="actionId">
<field name="name">NomDAction</field>
<field name="res_model">TableBDD</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
Où :
 id : identifiant de l’action (unique)
 model: type d’élément, ici c’est une action
 name : le nom de l’action (obligatoire)
 res_model : le model (objet) python sur lequel pointe l’action (obligatoire)
 view_mode : lise des vues autorisées.
 view_type : type de vue utilisée par défaut
Les interfaces
 Les actions
 Exemple: Action clique sur le menu Etudiants
<record model="ir.actions.act_window" id="action_etudiants">
<field name="name">Etudiants</field>
<field name="res_model">gestion.eleve</field>
<field name="view_type">form</field>
<field name="view_mode">form,tree</field>
</record>
<menuitem name="Etudiants" id="gest_etud"
parent="main_menu" action="action_etudiants"/>
Exercice: Ajouter des actions aux autres menus vus
précédemment (Professeurs, Classe, ....)
Les interfaces
 Les vues (views)
 Les vues sont un moyen pour représenter les objets sur le
navigateur du client.
 Plusieurs vues peuvent être déclarées pour le même objet et
peuvent être utilisées suivant leur priorités.
 On peut distinguer plusieurs types de vues :
 Formulaire (form views)
 Arbre (tree views et list views)
 graph
 Kanban
 Calendar
 Gantt
Les interfaces
 Les vues (views)
 Pour déclarer une vue il faut utiliser le modèle "ir.ui.view"
<record model="ir.ui.view" id="ID_Vue">
<field name="name">Nom.Vue</field>
<field name="model">TableBDD</field>
<field name="type">form</field>
<field name="arch" type="xml">
<!--contenu de la vue: <form>, <tree>, <graph>, … -->
</field>
</record>
Où:
type: type de vue (par défaut form)
arch: l’architecture de la vue et qui est de type XML
Les interfaces
 Vue formulaire
<form string="Etudiant">
<field name="nomChamp1"/>
<field name="nomChamp2"/>
</form>
 Où
 form: pour dire que c’est une vue de type formulaire
 field : pour déclarer les champs. Autant de champs que
nécessaire
<?xml version="1.0" ?>
<openerp>
<data>
<record model="ir.ui.view" id="etudFormID">
<field name="name">etudiant.vue</field>
<field name="model">gestion.eleve</field>
<field name="arch" type="xml">
<form string="Etudiant">
<label string="Numero de l'etudiant" /> <field name="nume"/>
<label string="Nom de l'etudiant" /> <field name="nome"/>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_etudiants">
<field name="name">Etudiants</field> <field name="res_model">gestion.eleve</field>
<field name="view_type">form</field> <field name="view_mode">form,tree</field>
</record>
<menuitem id="menuecole" name="Gestion d'école"/>
<menuitem name="Gestion d'ecole" id="main_menu" parent="menuecole"/>
<menuitem name="Etudiants" id="gest_etud" parent="main_menu" action="action_etudiants"/>
<menuitem name="Professeurs" id="gest_prof" parent="main_menu" />
<menuitem name="Classes" id="gest_classe" parent="main_menu"/>
</data> </openerp>
Les interfaces
 Les attributs du formulaire (form)
 Attributs communs:
 string: étiquette de l’élément
 nolabel: 1 pour masquer l’élément
 colspan: : Nombre de colonnes sur laquelle le champ doit s’étendre
 rowspan: Nombre de lignes sur laquelle le champ doit s’étendre
 col: Nombre de colonnes à allouer à ses éléments enfants
 invisible: 1 pour cacher complètement l’élément
 …
Les interfaces
 Les attributs du formulaire (form)
 Attributs de field:
 required: “True” un champ obligatoire
 readonly:True..Champ en lecture seul
 password:True.
 on_change: Méthode Python à appeler quand la valeur du champ
change
 ...
Les interfaces
 Les attributs du formulaire (form)
 Propriétés des boutons
 type: type du bouton: workflow (par défaut), objet, ou action
 name: signal workflow, nom d’une fonction (sans parenthèses) ou
action à appeler (dépendant du type)
 confirm:message de confirmation si cliqué
 states: liste d’états d’affichage du bouton, utilisant un séparateur
comma
Les interfaces
 Vue liste (list ou arbre)
<record model="ir.ui.view" id="etudTreeID">
<field name="name">etudiant.tree</field>
<field name="model">gestion.eleve</field>
<field name="arch" type="xml">
<tree string="Etudiant" >
<field name="nume"/>
<field name="nome"/>
</tree>
</field>
</record>
 NB: il faut définir dans le champ « view_mode » dans Action la vue
«tree »
Les interfaces
 Exercice:
 Compléter le module « Gestion d’école » pour permettre
l’ajout, l’affichage et la modification des enregistrements des
tables Etudiants, Classes, et Professeurs
Internationalisation
 Chaque module peut fournir plusieurs traductions pour
adapter l’interface du module aux préférences de
l’utilisateur et spécialement a à la langue choisie.
 Les traductions sont à créer dans un dossier nommé i18n
où chaque traduction doit être dans un fichier nommé
«LANG.po » où LANG est le code locale de la langue.
 Par défaut, chaque module à un modèle de traduction
qu’on peut télécharger à partir de Odoo et qu’on peut
utiliser pour créer des traduction (internationaliser le
module)
Internationalisation
 Téléchargement du modèle de traduction
 En mode administrateur, cliquer le menu « Configuration 
Traductions  Importer / exporter  Export de la
traduction»
 Sélectionner dans:
 langue : New language
 Format du fichier: Fichier PO
 Modules à exporter: le nom du module: Module de Gestion d’école
 Cliquer le bouton « Exporter »
 Et télécharger le fichier sur votre machine
Internationalisation
 I18n
 Créer un répertoire nommé «i18n » dans le dossier du
module
 Coller le fichier de localisation téléchargé précédemment
«gestion_ecole.pot »
 Créer une traduction en Arabe
 Créer une copie de localisation fichier et renommer la copie en
«ar.po ». Le code la langue peut être récupérer en cliquant le menu
Configuration  Traductions  Langues  Code locale
 Traduire les étiquettes et messages en utilisant soit un éditeur de
texte simple ou un éditeur dédié de traduction (par exemple: PoEdit)
 Utilisant un éditeur de texte simple, il faut ajouter la traduction de chaque
identifiant « msgid » dans «msgstr »
msgid "Classes«
msgstr " ‫أقسام‬ "
Internationalisation
 Appliquer la traduction
 Il faut:
 Redémarrer le serveur Odoo
 Mettre à jour le module
 Et vérifier la traduction en changeant les préférences de la langue.
 Réflexion:
 Créer une traduction en anglais

Weitere ähnliche Inhalte

Was ist angesagt?

Rapport PFE - Mise en place d'OpenERP pour IT-Consulting
Rapport PFE - Mise en place d'OpenERP pour IT-ConsultingRapport PFE - Mise en place d'OpenERP pour IT-Consulting
Rapport PFE - Mise en place d'OpenERP pour IT-ConsultingMohamed Cherkaoui
 
Inventaires dans odoo
Inventaires dans odooInventaires dans odoo
Inventaires dans odooAkretion
 
Rapport Projet ERP - Plateforme Odoo 12 (PFE Licence)
Rapport Projet ERP - Plateforme Odoo 12 (PFE Licence)Rapport Projet ERP - Plateforme Odoo 12 (PFE Licence)
Rapport Projet ERP - Plateforme Odoo 12 (PFE Licence)Yasmine Tounsi
 
Conception et réalisation d'une application de gestion intégrée au sein de la...
Conception et réalisation d'une application de gestion intégrée au sein de la...Conception et réalisation d'une application de gestion intégrée au sein de la...
Conception et réalisation d'une application de gestion intégrée au sein de la...Addi Ait-Mlouk
 
Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...
Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...
Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...Abdelouahed Abdou
 
Conception d'un module de gestion de la paie adapté au contexte marocain pour...
Conception d'un module de gestion de la paie adapté au contexte marocain pour...Conception d'un module de gestion de la paie adapté au contexte marocain pour...
Conception d'un module de gestion de la paie adapté au contexte marocain pour...HORIYASOFT
 
Alphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm.com Formation Odoo Technique : Installer et ConfigurerAlphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm.com Formation Odoo Technique : Installer et ConfigurerAlphorm
 
Chp1 - Introduction aux ERP
Chp1 - Introduction aux ERPChp1 - Introduction aux ERP
Chp1 - Introduction aux ERPLilia Sfaxi
 
Rapport de PFE du Diplôme de Mastère pro en Modélisation, Bases de Données et...
Rapport de PFE du Diplôme de Mastère pro en Modélisation, Bases de Données et...Rapport de PFE du Diplôme de Mastère pro en Modélisation, Bases de Données et...
Rapport de PFE du Diplôme de Mastère pro en Modélisation, Bases de Données et...Sarra LAOUINI
 
Conception et mise en place d'un Workflow du département VAS
Conception et mise en place d'un Workflow du département VASConception et mise en place d'un Workflow du département VAS
Conception et mise en place d'un Workflow du département VASAhmed MAALEJ
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UMLAmir Souissi
 
PFE :Conception, développement et mise en ligne d’une plateforme Odoo destiné...
PFE :Conception, développement et mise en ligne d’une plateforme Odoo destiné...PFE :Conception, développement et mise en ligne d’une plateforme Odoo destiné...
PFE :Conception, développement et mise en ligne d’une plateforme Odoo destiné...Nabil EL Moudden
 
Gestion des Projets des Fin d'etudes ( Version Alpha )
Gestion des Projets des Fin d'etudes ( Version Alpha )Gestion des Projets des Fin d'etudes ( Version Alpha )
Gestion des Projets des Fin d'etudes ( Version Alpha )Ayed CHOKRI
 
Module rh de l'ERP Odoo (ex OpenERP)
Module rh de l'ERP Odoo (ex OpenERP)Module rh de l'ERP Odoo (ex OpenERP)
Module rh de l'ERP Odoo (ex OpenERP)Hassan WAHSISS
 
Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...Ilyas CHAOUA
 
PFE :: Application de gestion des dus d'enseignement
PFE :: Application de gestion des dus d'enseignementPFE :: Application de gestion des dus d'enseignement
PFE :: Application de gestion des dus d'enseignementNassim Bahri
 

Was ist angesagt? (20)

Rapport PFE - Mise en place d'OpenERP pour IT-Consulting
Rapport PFE - Mise en place d'OpenERP pour IT-ConsultingRapport PFE - Mise en place d'OpenERP pour IT-Consulting
Rapport PFE - Mise en place d'OpenERP pour IT-Consulting
 
Inventaires dans odoo
Inventaires dans odooInventaires dans odoo
Inventaires dans odoo
 
Rapport Projet ERP - Plateforme Odoo 12 (PFE Licence)
Rapport Projet ERP - Plateforme Odoo 12 (PFE Licence)Rapport Projet ERP - Plateforme Odoo 12 (PFE Licence)
Rapport Projet ERP - Plateforme Odoo 12 (PFE Licence)
 
Conception et réalisation d'une application de gestion intégrée au sein de la...
Conception et réalisation d'une application de gestion intégrée au sein de la...Conception et réalisation d'une application de gestion intégrée au sein de la...
Conception et réalisation d'une application de gestion intégrée au sein de la...
 
Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...
Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...
Atelier2 Odoo: Gestion des Ressources Humaines (installation, employés, contr...
 
Conception d'un module de gestion de la paie adapté au contexte marocain pour...
Conception d'un module de gestion de la paie adapté au contexte marocain pour...Conception d'un module de gestion de la paie adapté au contexte marocain pour...
Conception d'un module de gestion de la paie adapté au contexte marocain pour...
 
Introduction à Odoo
Introduction à OdooIntroduction à Odoo
Introduction à Odoo
 
Alphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm.com Formation Odoo Technique : Installer et ConfigurerAlphorm.com Formation Odoo Technique : Installer et Configurer
Alphorm.com Formation Odoo Technique : Installer et Configurer
 
PROJET ERP
PROJET ERPPROJET ERP
PROJET ERP
 
Chp1 - Introduction aux ERP
Chp1 - Introduction aux ERPChp1 - Introduction aux ERP
Chp1 - Introduction aux ERP
 
Rapport de PFE du Diplôme de Mastère pro en Modélisation, Bases de Données et...
Rapport de PFE du Diplôme de Mastère pro en Modélisation, Bases de Données et...Rapport de PFE du Diplôme de Mastère pro en Modélisation, Bases de Données et...
Rapport de PFE du Diplôme de Mastère pro en Modélisation, Bases de Données et...
 
Conception et mise en place d'un Workflow du département VAS
Conception et mise en place d'un Workflow du département VASConception et mise en place d'un Workflow du département VAS
Conception et mise en place d'un Workflow du département VAS
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
PFE :Conception, développement et mise en ligne d’une plateforme Odoo destiné...
PFE :Conception, développement et mise en ligne d’une plateforme Odoo destiné...PFE :Conception, développement et mise en ligne d’une plateforme Odoo destiné...
PFE :Conception, développement et mise en ligne d’une plateforme Odoo destiné...
 
OpenERP/Odoo: Fiche Technique
OpenERP/Odoo: Fiche TechniqueOpenERP/Odoo: Fiche Technique
OpenERP/Odoo: Fiche Technique
 
Rapport Projet de fin d&rsquo;études
Rapport Projet de fin d&rsquo;étudesRapport Projet de fin d&rsquo;études
Rapport Projet de fin d&rsquo;études
 
Gestion des Projets des Fin d'etudes ( Version Alpha )
Gestion des Projets des Fin d'etudes ( Version Alpha )Gestion des Projets des Fin d'etudes ( Version Alpha )
Gestion des Projets des Fin d'etudes ( Version Alpha )
 
Module rh de l'ERP Odoo (ex OpenERP)
Module rh de l'ERP Odoo (ex OpenERP)Module rh de l'ERP Odoo (ex OpenERP)
Module rh de l'ERP Odoo (ex OpenERP)
 
Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...
 
PFE :: Application de gestion des dus d'enseignement
PFE :: Application de gestion des dus d'enseignementPFE :: Application de gestion des dus d'enseignement
PFE :: Application de gestion des dus d'enseignement
 

Ähnlich wie Développement de modules pour odoo (anciennement OpenERP): exemples et exercices corrigés

Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
mis
mismis
misISIG
 
Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Laurent BUNIET
 
Cours java smi_2011_2012_partie_i_29_octobre_2011
Cours java smi_2011_2012_partie_i_29_octobre_2011Cours java smi_2011_2012_partie_i_29_octobre_2011
Cours java smi_2011_2012_partie_i_29_octobre_2011yassine kchiri
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generaleAmir Souissi
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptxLamissGhoul1
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db firstZineb ELGARRAI
 
Visual studio
Visual studioVisual studio
Visual studioISIG
 
05 visual basic .net - variables, procedures, arguments et structures de cont...
05 visual basic .net - variables, procedures, arguments et structures de cont...05 visual basic .net - variables, procedures, arguments et structures de cont...
05 visual basic .net - variables, procedures, arguments et structures de cont...Hamza SAID
 
Drupal 7 - Fondamentaux et ateliers
Drupal 7 - Fondamentaux et ateliersDrupal 7 - Fondamentaux et ateliers
Drupal 7 - Fondamentaux et ateliersFrédéric Simonet
 
Cours C Avancé chapitre 2 et chapitre.pdf
Cours C Avancé  chapitre 2 et chapitre.pdfCours C Avancé  chapitre 2 et chapitre.pdf
Cours C Avancé chapitre 2 et chapitre.pdfc79024186
 
Cours partie1 elgarrai zineb
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zinebZineb ELGARRAI
 

Ähnlich wie Développement de modules pour odoo (anciennement OpenERP): exemples et exercices corrigés (20)

Rapport open erp
Rapport open erpRapport open erp
Rapport open erp
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Python.pptx
Python.pptxPython.pptx
Python.pptx
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
mis
mismis
mis
 
Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4
 
Cours java smi_2011_2012_partie_i_29_octobre_2011
Cours java smi_2011_2012_partie_i_29_octobre_2011Cours java smi_2011_2012_partie_i_29_octobre_2011
Cours java smi_2011_2012_partie_i_29_octobre_2011
 
Chapitre 1 introduction generale
Chapitre 1   introduction generaleChapitre 1   introduction generale
Chapitre 1 introduction generale
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
 
ORM
ORMORM
ORM
 
Visual studio
Visual studioVisual studio
Visual studio
 
05 visual basic .net - variables, procedures, arguments et structures de cont...
05 visual basic .net - variables, procedures, arguments et structures de cont...05 visual basic .net - variables, procedures, arguments et structures de cont...
05 visual basic .net - variables, procedures, arguments et structures de cont...
 
Drupal 7 - Fondamentaux et ateliers
Drupal 7 - Fondamentaux et ateliersDrupal 7 - Fondamentaux et ateliers
Drupal 7 - Fondamentaux et ateliers
 
Cours C Avancé chapitre 2 et chapitre.pdf
Cours C Avancé  chapitre 2 et chapitre.pdfCours C Avancé  chapitre 2 et chapitre.pdf
Cours C Avancé chapitre 2 et chapitre.pdf
 
Cours partie1 elgarrai zineb
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zineb
 
JAVA-IO.pdf
JAVA-IO.pdfJAVA-IO.pdf
JAVA-IO.pdf
 
JAVA-IO.pdf
JAVA-IO.pdfJAVA-IO.pdf
JAVA-IO.pdf
 
4711538.pptx
4711538.pptx4711538.pptx
4711538.pptx
 

Mehr von Abdelouahed Abdou

Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CAbdelouahed Abdou
 
Introduction au traitement d'images
Introduction au traitement d'imagesIntroduction au traitement d'images
Introduction au traitement d'imagesAbdelouahed Abdou
 
Tp Sql Server Integration Services 2008
Tp  Sql Server Integration Services  2008Tp  Sql Server Integration Services  2008
Tp Sql Server Integration Services 2008Abdelouahed Abdou
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratiqueAbdelouahed Abdou
 
Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôleAbdelouahed Abdou
 
Bases de données réparties
Bases de données répartiesBases de données réparties
Bases de données répartiesAbdelouahed Abdou
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Abdelouahed Abdou
 
Document Object Model ( DOM)
Document Object Model ( DOM)Document Object Model ( DOM)
Document Object Model ( DOM)Abdelouahed Abdou
 

Mehr von Abdelouahed Abdou (12)

Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en C
 
Tutoriel web service
Tutoriel  web serviceTutoriel  web service
Tutoriel web service
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 
Introduction au traitement d'images
Introduction au traitement d'imagesIntroduction au traitement d'images
Introduction au traitement d'images
 
Tp Sql Server Integration Services 2008
Tp  Sql Server Integration Services  2008Tp  Sql Server Integration Services  2008
Tp Sql Server Integration Services 2008
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratique
 
Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôle
 
Introduction à pl/sql
Introduction à pl/sqlIntroduction à pl/sql
Introduction à pl/sql
 
Bases de données réparties
Bases de données répartiesBases de données réparties
Bases de données réparties
 
Introduction à ASP.NET
Introduction à ASP.NETIntroduction à ASP.NET
Introduction à ASP.NET
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)
 
Document Object Model ( DOM)
Document Object Model ( DOM)Document Object Model ( DOM)
Document Object Model ( DOM)
 

Kürzlich hochgeladen

Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxssusercbaa22
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxssuserbd075f
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptxMalikaIdseaid1
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptxSAID MASHATE
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...M2i Formation
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptssusercbaa22
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptssusercbaa22
 

Kürzlich hochgeladen (16)

Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptx
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.ppt
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 

Développement de modules pour odoo (anciennement OpenERP): exemples et exercices corrigés

  • 1. Développement de modules pour Odoo: exemples et exercices corrigés Abdelouahed Sabri abdelouahed.sabri@gmail.com Université Sidi Mohamed Ben Abdellah Faculté des Sciences Dhar El Mahraz Fès
  • 2. Plan  Introduction  Structure d’un module Odoo  Objets (tables) Odoo  Les types de champs d’un objets  Les interfaces  Les menus  Les actions  Les vues (views)  Internationalisation
  • 3. Introduction  Odoo utilise une architecture trois tiers qui est une architecture client-serveur.  On trouve 3 couches : 1- couche présentation (interface utilisateur), 2- couche métier (business ou aussi fonctionnelle) responsable de la mise en œuvre de l’ensemble des règles de gestion et de la logique applicative et 3- couche d’accès aux données  Ces 3 couches sont développées et maintenues sous forme de modules indépendants  Le noyau d’Odoo et de ses différents modules sont écrits en Python.  La fonctionnalité d’un module est gérée par le protocole XML-RPC (et/ou NET-RPC)  Les modules en Odoo sont aussi appelés extensions ou plugins (addons) et sont open-source.
  • 4. Introduction  ORM OpenERP  Les modules Odoo font usage de l’ORM (Object-Relational Mapping) de Odoo pour rendre persistantes leurs données dans une base de données relationnelle (PostgreSQL).  Les données peuvent être insérées en utilisant le module ou lors de l’installation utilisant des fichiers XML, CSV ouYML  On peut écrire (développer) de nouveaux modules on utilisant Python, des fichiers XML et utiliser l’ORM de Odoo
  • 5. Modules Odoo  Tout les modules sont localisés dans le dossier «serveropenerpaddons »  Un module Odoo doit vérifier les conditions suivantes :  Le nom du dossier contenant les fichiers du module doit être le même que le nom du module lui même  Trois fichiers Python sont obligatoires :  __init__.py : fichier d’initialisation du module  __openerp__.py : fichier de description du module  NomDuModule.py : fichier des objets  Les vues (formulaires, listes, ...), les menus et les actions sont définies dans un Fichier XML  Il est possible d’ajouter des données de démonstration lors de l’installation. Ces données sont dans un fichier XML.  Il est possible de créer des rapports, des Wizard (assistants) et/ou desWorkflow (flux de travail) NB: L’encodage des fichiers doit être en format UTF8
  • 6. Modules Odoo  Le fichier d’initialisation du module __init__.py  Comme pour tous les modules Python, ce fichier est exécuté au début du programme.  Il a besoin d'importer les fichiers Python qui doivent être chargés en mémoire.  NB:  Si vous créez un fichier "NomDuModule.py" contenant la description des objets du module, il faut écrire dans le fichier __init__.py la ligne suivante : import NomduModule
  • 7. Modules Odoo  Le fichier de description du module __openerp__.py  C’est un fichier Python permettant la description du module et aussi responsable de :  Spécifier les fichiers XML qui seront analysés (parsed) lors de l'initialisation du serveur,  Spécifier les dépendances du module créé
  • 8. Modules Odoo  Le fichier de description du module __openerp__.py  Ce fichier doit contenir un dictionnaire Pyhton avec les valeurs suivantes : name Le nom du module version La version du module, sur deux chiffres (exp. 1.1 ou 2.3) description La description du module y compris la documentation sur l'utilisation du module author L'auteur du module website Le site Web du module licence La licence du module (par défaut: GPL-2). installable True ou False. Indique si le module est installable ou non active True ou False (False défaut). category La catégorie dans laquelle le module va être placée application True ou False. Pour que le module soit identifié comme application. Seul Odoo délivre les certificats qualifiant un module d’application. data Liste de fichiers xml contenant les interfaces
  • 9. Modules Odoo  Exemple  Créer un dossier (module) vide « gestion_sigl» dans le répertoire «serveropenerpaddons »  Créer les deux fichiers Python (obligatoire) :  __init__.py et __openerp__.py  Redémarrer le serveur ou bien dans le menu d’Odoo « Configuration »  « Modules »  « Mettre à jour la liste des modules »  Chercher le module
  • 10. Objets (tables) Odoo  Le fichier NomduModule.py  Ce fichier va contenir les classes (objets Odoo) de la couche model permettant de persister les données dans la base de données via la couche ORM de Odoo  Les objets métiers sont déclarés comme des classes Python héritant de la classe osv.osv qui utilise le Framework ObjectSerVice (OSV).
  • 11. Objets (tables) Odoo  Objets  Pour définir un nouvel objet, il faut définir une nouvelle classe Python puis l’instancier. Cette classe doit hériter de la classe osv du module osv.  Le canevas est le suivant: # -*-coding: utf-8 -*- from openerp.osv import fields, osv class nom_de_l_objet(osv.osv): # définition des champs (attributs) de la classe nom_de_l_objet()
  • 12. Objets (tables) Odoo  Objets  Un objet est défini par la déclaration dans la classe de quelques champs (attributs) avec des noms prédéfinis.  Deux attributs sont obligatoires : « _name et _columns », le reste est optionnel. _name (required) Nom de l’objet _columns (required) Les champs de l’objet _constraints Contraintes sur l’objet _table Nom de la table SQL. Par défaut c’est la valeur du champs _name où les points ( . ) sont remplacés par underscores ( _ ) _sql_constraints Les contraintes SQL ... # -*-coding: utf-8 -*- from openerp.osv import fields, osv class nom_de_l_objet(osv.osv): _name= 'nom.delobjet' # _table= 'nom_delobjet' _columns= { … } nom_de_l_objet()
  • 13. Objets (tables) Odoo  Les types de champs d’un objet  Les objets Python peuvent contenir différents types de champs. Ces types sont divisés en trois catégories; 1. Simple: ce sont les types simples à savoir boolean, integer, date, float, char, text, selection, binary.. 2. Relationnel : Représente les types de relations entre les objets : many2one, one2many, many2many 3. Fonctionnel : des champs calculés  NB: Les types de champs sont déclarés dans la classe « fields ».
  • 14. Objets (tables) Odoo  Les types de champs d’un objet  Les types simples Syntaxe boolean fields.boolean('Field Name' [, Optional Parameters]) integer fields.boolean('Field Name' [, Optional Parameters]) float fields.float('Field Name' , digits=(12,6), [, Optional Parameters]) char fields.char('Field Name', size=n [,Optional Parameters]) Text fields.text('Field Name' [, Optional Parameters]) date fields.date('Field Name' [, Optional Parameters]) .... Optionnal Parameters peut être par exemple required=True pour un champ obligatoire
  • 15. Objets (tables) Odoo  Les types de champs d’un objet  Les types simples  Exemple:  Un premier exemple d’application est de créer un objet permettant le mapping de la table ELEVE suivante: ELEVE (numE (char de taille 16), nomE (char de taille 32), nomC (char de taille 32)) # -*-coding: utf-8 -*- from openerp.osv import fields, osv class gestion_eleve(osv.osv): _name= 'gestion.eleve' _description = u"Table des éléves" _columns= { 'nume' : fields.char(u'Numéro de l étudiant', size=16, required=True), 'nome': fields.char(u'Nom de l étudiant', size=32, required=True), 'nomc': fields.char(u'Nom de la classe', size=32, required=True) } gestion_eleve()
  • 16. Objets (tables) Odoo  Les types de champs d’un objet  Les types simples  Exercice: Créer un module pour la gestion d’une école. Le module consiste en la création des tables suivantes :  gestion.eleve (numE (char de taille 16), nomE (char de taille 32), nomC (char de taille 32))  gestion.classe (nomC (char de taille 16))  gestion.professeur (numP (char de taille 16), nomP (char de taille 32))  gestion.service (numP (number de taille 9), nomC (char de taille 16), nbh(float de taille 16))
  • 17. # -*-coding: utf-8 -*- from openerp.osv import fields, osv class gestion_eleve(osv.osv): _name= 'gestion.eleve' _description = u"Table des éléves" _columns= { 'nume' : fields.char(u'Numéro de l étudiant', size=16, required=True), 'nome': fields.char(u'Nom de l étudiant', size=32, required=True), 'nomc': fields.char(u'Nom de la classe', size=32, required=True) } gestion_eleve() class gestion_classe(osv.osv): _name= 'gestion.classe' _description = u"Table des classe" _columns= { 'nomc': fields.char(u'Nom de la classe', size=32, required=True) } gestion_classe() class gestion_professeur(osv.osv): _name= 'gestion.professeur' _description = u"Table des professeur" _columns= { 'nump' : fields.char(u'Numéro du prof', size=16, required=True), 'nomp': fields.char(u'Nom de du prof', size=32, required=True), } gestion_professeur() class gestion_service(osv.osv): _name= 'gestion.service' _description = u"Table des services" _columns= { 'nump' : fields.integer(u'Numéro du prof', size=9, required=True), 'nomc': fields.char(u'Nom de la classe', size=32, required=True), 'nbh': fields.float(u'Nombre d heures assurés par un prof', digits=(9,4), required=True) } gestion_service()
  • 18. Objets (tables) Odoo  Les types de champs d’un objet  Les types relationnels Syntaxe one2one fields.one2one('other.object.name', 'Field Name') many2one fields.many2one('other.object.name', 'Field Name', optional parameters) one2many fields.one2many('other.object.name', 'Field relation id', 'Fieldname', optional parameter) Paramètres optionnels: invisible: True/False states: ? readonly: True/False many2many fields.many2many('other.object.name', 'relation object', 'actual.object.id', 'other.object.id', 'FieldName')
  • 19. Les interfaces  Le mécanisme principal pour insérer les données est de le faire utilisant les composants d'interface du module.  Pour créer une interface d’un module, il faut créer ; les menus, les vues, les actions, les rôles, les droits d'accès, etc.  Sous Odoo, les interfaces sont crées et configurées utilisant des fichiers XML.  Le fichier contenant la définition des éléments de l’interface doit être référencé dans l’attribut « data » du fichier « __openerp__.py ».  Ainsi, si le fichier « projet_view.xml » contient la description de l’interface du projet, dans le fichier il faut ajouter la ligne "data" : ['projet_view.xml']
  • 20. Les interfaces  Canevas du fichier XML <?xml version="1.0" ?> <openerp> <data> Déclaration des éléments de l’interface </data> </openerp>
  • 21. Les interfaces  Les menus <?xml version="1.0" ?> <openerp> <data> Déclaration des éléments de l’interface </data> </openerp>  Le menu principal est déclaré comme suit : <menuitem id="idMenuPrincipal" name="Nom affiché dans la barre des menus" />  1ér sous menu (non cliquable) <menuitem id="idSousMenu" parent="idMenuPrincipal" name="Nom du menu" />  2éme sous menu (cliquable) <menuitem id="idSousSousMenu" parent="idSousMenu" name="Nom affiché" action="[ACTION_ID]"/>  Où action est l’événement déclenché après clique sur le menu. Ainsi, il faut définir une action à exécuter. Il faut qu’elle soit implémentée
  • 22. Les interfaces  Les menus  Exercice: Ajouter un menu « Gestion d'école » au module « Gestion d’école » déjà crée. Et ajouter trois sous-menus « Etudiants », « Professeur » et « Classe », « Service » et «Classe ». On cherche à avoir la hiérarchie suivante :  Gestion d'école  Gestion d'école/Gestion d'ecole  Gestion d'école/Gestion d'ecole/Classes  Gestion d'école/Gestion d'ecole/Etudiants  Gestion d'école/Gestion d'ecole/Professeurs  Gestion d'école/Gestion d'ecole/Service  NB: Pour vérifier les menus crées cliquer « Local Modules / Module de gestion d'école » et cliquer l’onglet « Installed features » et « Menus crées »
  • 23. Les interfaces  Les menus  Exercice (suite) <?xml version="1.0" ?> <openerp> <data> <menuitem id="menuecole" name="Gestion d'école"/> <menuitem name="Gestion d'ecole" id="main_menu" parent="menuecole"/> <menuitem name="Etudiants" id="gest_etud" parent="main_menu"/> <menuitem name="Professeurs" id="gest_prof" parent="main_menu" /> <menuitem name="Classes" id="gest_classe" parent="main_menu"/> </data> </openerp>
  • 24. Les interfaces  Les actions  Une action est un événement déclenché suite à un click.  Pour déclarer une action, il faut utiliser le modèle "ir.actions.act_window"  Syntaxe: <record model="ir.actions.act_window" id="actionId"> <field name="name">NomDAction</field> <field name="res_model">TableBDD</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> </record> Où :  id : identifiant de l’action (unique)  model: type d’élément, ici c’est une action  name : le nom de l’action (obligatoire)  res_model : le model (objet) python sur lequel pointe l’action (obligatoire)  view_mode : lise des vues autorisées.  view_type : type de vue utilisée par défaut
  • 25. Les interfaces  Les actions  Exemple: Action clique sur le menu Etudiants <record model="ir.actions.act_window" id="action_etudiants"> <field name="name">Etudiants</field> <field name="res_model">gestion.eleve</field> <field name="view_type">form</field> <field name="view_mode">form,tree</field> </record> <menuitem name="Etudiants" id="gest_etud" parent="main_menu" action="action_etudiants"/> Exercice: Ajouter des actions aux autres menus vus précédemment (Professeurs, Classe, ....)
  • 26. Les interfaces  Les vues (views)  Les vues sont un moyen pour représenter les objets sur le navigateur du client.  Plusieurs vues peuvent être déclarées pour le même objet et peuvent être utilisées suivant leur priorités.  On peut distinguer plusieurs types de vues :  Formulaire (form views)  Arbre (tree views et list views)  graph  Kanban  Calendar  Gantt
  • 27. Les interfaces  Les vues (views)  Pour déclarer une vue il faut utiliser le modèle "ir.ui.view" <record model="ir.ui.view" id="ID_Vue"> <field name="name">Nom.Vue</field> <field name="model">TableBDD</field> <field name="type">form</field> <field name="arch" type="xml"> <!--contenu de la vue: <form>, <tree>, <graph>, … --> </field> </record> Où: type: type de vue (par défaut form) arch: l’architecture de la vue et qui est de type XML
  • 28. Les interfaces  Vue formulaire <form string="Etudiant"> <field name="nomChamp1"/> <field name="nomChamp2"/> </form>  Où  form: pour dire que c’est une vue de type formulaire  field : pour déclarer les champs. Autant de champs que nécessaire
  • 29. <?xml version="1.0" ?> <openerp> <data> <record model="ir.ui.view" id="etudFormID"> <field name="name">etudiant.vue</field> <field name="model">gestion.eleve</field> <field name="arch" type="xml"> <form string="Etudiant"> <label string="Numero de l'etudiant" /> <field name="nume"/> <label string="Nom de l'etudiant" /> <field name="nome"/> </form> </field> </record> <record model="ir.actions.act_window" id="action_etudiants"> <field name="name">Etudiants</field> <field name="res_model">gestion.eleve</field> <field name="view_type">form</field> <field name="view_mode">form,tree</field> </record> <menuitem id="menuecole" name="Gestion d'école"/> <menuitem name="Gestion d'ecole" id="main_menu" parent="menuecole"/> <menuitem name="Etudiants" id="gest_etud" parent="main_menu" action="action_etudiants"/> <menuitem name="Professeurs" id="gest_prof" parent="main_menu" /> <menuitem name="Classes" id="gest_classe" parent="main_menu"/> </data> </openerp>
  • 30. Les interfaces  Les attributs du formulaire (form)  Attributs communs:  string: étiquette de l’élément  nolabel: 1 pour masquer l’élément  colspan: : Nombre de colonnes sur laquelle le champ doit s’étendre  rowspan: Nombre de lignes sur laquelle le champ doit s’étendre  col: Nombre de colonnes à allouer à ses éléments enfants  invisible: 1 pour cacher complètement l’élément  …
  • 31. Les interfaces  Les attributs du formulaire (form)  Attributs de field:  required: “True” un champ obligatoire  readonly:True..Champ en lecture seul  password:True.  on_change: Méthode Python à appeler quand la valeur du champ change  ...
  • 32. Les interfaces  Les attributs du formulaire (form)  Propriétés des boutons  type: type du bouton: workflow (par défaut), objet, ou action  name: signal workflow, nom d’une fonction (sans parenthèses) ou action à appeler (dépendant du type)  confirm:message de confirmation si cliqué  states: liste d’états d’affichage du bouton, utilisant un séparateur comma
  • 33. Les interfaces  Vue liste (list ou arbre) <record model="ir.ui.view" id="etudTreeID"> <field name="name">etudiant.tree</field> <field name="model">gestion.eleve</field> <field name="arch" type="xml"> <tree string="Etudiant" > <field name="nume"/> <field name="nome"/> </tree> </field> </record>  NB: il faut définir dans le champ « view_mode » dans Action la vue «tree »
  • 34. Les interfaces  Exercice:  Compléter le module « Gestion d’école » pour permettre l’ajout, l’affichage et la modification des enregistrements des tables Etudiants, Classes, et Professeurs
  • 35. Internationalisation  Chaque module peut fournir plusieurs traductions pour adapter l’interface du module aux préférences de l’utilisateur et spécialement a à la langue choisie.  Les traductions sont à créer dans un dossier nommé i18n où chaque traduction doit être dans un fichier nommé «LANG.po » où LANG est le code locale de la langue.  Par défaut, chaque module à un modèle de traduction qu’on peut télécharger à partir de Odoo et qu’on peut utiliser pour créer des traduction (internationaliser le module)
  • 36. Internationalisation  Téléchargement du modèle de traduction  En mode administrateur, cliquer le menu « Configuration  Traductions  Importer / exporter  Export de la traduction»  Sélectionner dans:  langue : New language  Format du fichier: Fichier PO  Modules à exporter: le nom du module: Module de Gestion d’école  Cliquer le bouton « Exporter »  Et télécharger le fichier sur votre machine
  • 37. Internationalisation  I18n  Créer un répertoire nommé «i18n » dans le dossier du module  Coller le fichier de localisation téléchargé précédemment «gestion_ecole.pot »  Créer une traduction en Arabe  Créer une copie de localisation fichier et renommer la copie en «ar.po ». Le code la langue peut être récupérer en cliquant le menu Configuration  Traductions  Langues  Code locale  Traduire les étiquettes et messages en utilisant soit un éditeur de texte simple ou un éditeur dédié de traduction (par exemple: PoEdit)  Utilisant un éditeur de texte simple, il faut ajouter la traduction de chaque identifiant « msgid » dans «msgstr » msgid "Classes« msgstr " ‫أقسام‬ "
  • 38. Internationalisation  Appliquer la traduction  Il faut:  Redémarrer le serveur Odoo  Mettre à jour le module  Et vérifier la traduction en changeant les préférences de la langue.  Réflexion:  Créer une traduction en anglais