SlideShare une entreprise Scribd logo
1  sur  75
Télécharger pour lire hors ligne
Paramétrage et développement spécifique
des modules odoo (OpenERP)
Réalisé par : Ait Mlouk Addi
Blog : http://aitmlouk-addi.blogspot.comSite web : http://www.aitmlouk-addi.infoaitmlouk@gmail.com
Plan
Prise en main
Configuration et paramétrage
Modules personnalisé
Introduction
Conclusion
Développement spécifique
Prise en main et paramétrage d’odoo
(OpenERP)
• Prise en main complet d’odoo
• Configuration complète
• Caractéristiques techniques complète
• Savoir crée un module personnalisé
• Savoir développer un module spécifique
2
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Prise en main et paramétrage d’OpenERP
Configuration Odoo
Partie 1: Prise en main
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Prise en main et paramétrage d’OpenERP
• Démarrer le serveur
• Créer une nouvelle base de données formation, mot de passe admin
• Se connecter à la nouvelle base
de donnée
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Prise en main et paramétrage d’OpenERP
• Activer les menus de la configuration avancée :
• Configuration -> Utilisateurs -> Modifier l’utilisateur -> Onglet droits d’accès
• Cocher Caractéristiques techniques
• Administration -> sélectionner l’option Configuration
• Actualiser la page
• Installer des modules
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Prise en main et paramétrage d’OpenERP
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Prise en main et paramétrage d’OpenERP
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Prise en main et paramétrage d’OpenERP
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Prise en main et paramétrage d’OpenERP
Pour une simple modification au niveau d’un module sous odoo on peut passez tous simplement par Des objets
et vues personnaliser et en crée les objets comme suite :
• Configuration -> structure de la base de donnée -> Modèle puis crée un objet
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Prise en main et paramétrage d’OpenERP
Apres la définition de l’objet il reste a définir les champs comme suite :
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Prise en main et paramétrage d’OpenERP
Et les menus comme suite :
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Prise en main et paramétrage d’OpenERP
Apres que nous terminons notre module personnalisé on enregistre le module en question et on rafraichir la page pour
que les modification soit apparaitre comme suite :
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Prise en main et paramétrage d’OpenERP
Le mode développeur
Le mode développeur permet de debugger les modules afin d’identifier les objet , champs, vues, menus …
techniquement Il est utiliser par un développeur pour identifier plus de détailles sur les objets … qui servira a
paramétrer et a modifier les modules stocker dans la base de donnée et pas dans le code source. Pour activer le
mode développeur on procède comme suite :
Administrator -> Apropos de l’OpenERP
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Prise en main et paramétrage d’OpenERP
Pour debugger un module ou un objet on passe par le menu Déboguer et en choisie l’action qui convient.
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
Les différents phase d’un ERP
Un ERP possède généralement trois phases de travail :
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Architecture modulaire sous odoo (openerp)
• Tous les modules d’OpenERP sont créés au-dessous du répertoire
openerp7/openerp/addons
Développement spécifique d’un module
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Architecture modulaire sous odoo
• Structure standard d’un module sous odoo
Développement spécifique d’un module
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Structure d’un module Odoo
• Les étapes suivantes sont nécessaires pour créer un nouveau module :
• Créer un package python dans le répertoire /addons portant le nom de votre module (required)
• Créer un fichier de description du module : __openerp__.py (required)
• Créer le fichier Python contenant les modèles (Classes + Méthodes) (required)
• Créer des fichiers .XML pour définir les menus, les vues et les actions (required)
• Créer des fichiers .XML qui téléchargent des données de démonstration
• Créer éventuellement des rapports, des assistants (Wizard) ou des flux de travail (Workflow).
Développement spécifique d’un module
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Obligatoires
__init__.py Initialisation du package Python
__openerp__.py La fiche descriptive du module
module.py Les classes Python, les objets du module
module_view.xml Les vues (Formulaires, listes, graph,…), menus et actions
Optionnels
demo Données de test et de démonstration
i18n Fichiers de traduction – Internationalisation
report Définition des rapports
security Déclaration des groupes et des droits d’accès
workflow Définition des workflow
wizard Définition des assistants
Structure d’un module Odoo
Développement spécifique d’un module
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
__init__.py
• C'est le fichier qui permet a OpenERP de charger notre module.
Le contenu de ce fichier est très simple :
import nom_module
Développement spécifique d’un module
Structure d’un module Odoo
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
__openerp__.py
• name : le nom de votre module ;
• version : la version du module ;
• category : la catégorie dans laquelle vous classez votre module ;
• sequence : c'est un nombre qui permet de définir l’ordre de votre module dans la liste des modules. 1, il sera en haut, 100 il sera en bas
• author : l'auteur du module ;
• description : la description complète du module ;
• depends : les dépendances votre module ;
• data : les fichiers à charger ;
• installable : si votre module est installable ou non ;
• application : laissez à False. Votre module ne sera pas reconnu comme une application. C'est OpenERP qui délivre les certificats qui qualifient
votre module d'application ;
• auto_install : laissez à False, nous l'installerons à la main.
Développement spécifique d’un module
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
# -*- coding: utf-8 -*-
{
'name' : "nom de module",
'author' : "auteur",
'version' : "0.1",
'description' : "description…",
'website' : "site web ou blog si il existe …",
'category' : "catégorie de module",
'summary' : "les mots clef de description",
'sequence' : 0,
'depends' : ['base'],
'update_xml' : [
#'travaux_view.xml',
],
'demo_xml' : []
'installable' : True,
'application' : False,
'auto_install' : False,
}
Exemple de fichier de description du module
__openerp__.py (Squelette)
Développement spécifique d’un module
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Exercice 1 :Exemple de création de module
• Créer un module vide formation_travaux
• Créer les fichiers obligatoires __init__.py et __openerp__.py
• Redémarrer le serveur
• Installer le module à partir du menu
• Configuration -> Modules -> Modules installés
• Lancer l’installation du module on cliquant sur installé
Développement spécifique d’un module
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
# -*- coding: utf-8 -*-
{
'name' : "Formation Gestion des travaux",
'author' : "Ait-Mlouk Addi",
'version' : "0.1",
'description' : "Module de gestion des travaux sous odoo",
'website' : "www.aitmlouk.esy.es",
'category' : "Maintenance",
'summary' : "Travaux, Taches, Incidents",
'sequence' : 0,
'depends' : ['base'],
'update_xml' : [
#'travaux_view.xml',
],
'demo_xml' : []
'installable' : True,
'application' : False,
'auto_install' : False,
}
Réponse
__openerp__.py
Développement spécifique d’un module
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Les classes
Partie 2
Développement spécifique d’un module
Les classes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La couche Model
• Le Framework Object Service (OSV) met en œuvre une couche complète de Mapping Objet Relationnel.
• Il permet aux développeurs de mettre en place l’architecture SQL de base.
• Les objets métier sont déclarés comme des classes Python qui héritent de la classe osv.osv, ce qui les rend
une partie du modèle OpenObject modèle, et qui seront automatiquement persistés par la couche ORM.
Développement spécifique d’un module
Les classes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Les types des champs de l’ORM
• Un objet peut avoir 3 types de champs
• Simple : Integers, Floats, Date, Booleans, Char, Text, Binary…
• Relationnel : Représente les relations entre les objets (one2many, many2one, many2many)
• Fonctionnel : Des champs stocké ou non-stockés à la base de donnée, il sont calculés à la
volé comme des fonctions Python
Développement spécifique d’un module
Les classes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Champssimple
boolean(...), integer(...), date(...), datetime(...)
time(...), float(…)
Exemple :
'active': fields.boolean('Active'),
'priority': fields.integer('Priority'),
'start_date': fields.date('Start Date'),
char(string,size,translate=False,..)
text(string,size,translate=False,..)
• translate: True si le champs peut être traduit par l’utilisateur
• size: la taille maximum d’un champs caractère (→41,45)
selection(values, string, ...) ‘status' :fields.selection([('open','Open'),('closed','Closed')],'Status',
required=True, translate=True),
binary(string, filters=None, ...)
Un champs pour stocker des fichiers ou des images
• filters: Filtres optionnels sur le nom du fichier
'picture':fields.binary('Picture',filters='*.png,*.gif')
Champsrelationnel
many2one(obj, ondelete='set null', …)
Relation vers l’objet courant
• obj: Le nom _name de l’objet destination (requis)
• ondelete: e.g. 'set null', 'cascade', Voir la documentation PostgreSQL
one2many(obj, field_id, …)
L’inverse de many2one
• obj: Le nom _name de l’objet destination (requis)
• field_id: field name of inverse many2one
many2many(obj, rel, field1, field2, …)
Relation bidirectionnel multiple entre deux classes
• obj: Le nom _name de l’objet destination (requis)
• rel: Le nom SQL de la table associative (requis)
• field1: Le nom du champs de l’objet actuel dans la table associative (requis)
• field2: Le nom du champs de l’objet destination dans la table associative (requis)
Développement spécifique d’un module
Les classes
• Un champ de type fonction est un champ qui est calcule par une fonction ( a l’opposition d’un champ
récupéré de la base de données).
Syntaxe : fields.function(fnct [, Parameters]),
• Les paramètres principales sont :
• fnct : le nom de la fonction qui calcule la valeur du champ
• type : est le type de retour de la fonction
• store: indique si on veut enregistrer le champ dans la base de données
• method: indique si le champ est calcule par une méthode d’objet ou une méthode statique de classe
• fnct_inv : le nom de la fonction qui permet d’ecrire la valeur du champ dans la base au cas ou store=true
définition des attributs de l’objet : les types ‘fonctions’
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
Les classes
• Tous les ressources d’OpenERP sont des objets (menus, rapport, factures, partenaires, …)
• OpenERP contrôle les données de ces objets a travers un ORM
• Le nom des objets est par convention hiérarchique
définition des objets
class account_invoice():
class account_invoice_line():
class account_trensfer():
Nom du module Nom de l’objet
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
Les classes
• Pour définir un nouveau objet il suffit de définir une nouvelle classe python et de l’instancier. La classe doit
hériter de la classe osv se trouvant dans le module osv,
• Un objet est définie a travers la déclaration de certains attribut statique prédéfini, dont deux sont obligatoires
:_name, et _columns
définition des objets
class object_name(osv.osv):
_name = 'object.name'
_description = u"object description"
_inherit ='inherit.object.name'
_columns ={…}
_constraints =
_sql_constraints =
_order =
Object_name()
Héritage de l’objet osv
Description python statique
Instanciation de l’objet
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
Les classes
• _name = nom de l’objet
• _columns = les attributs de l’objets
• _inherit = le nom de l’objet dont hérite l’objet en cours
• _constraints = les contraintes de l’objet
• _sql_constraints = sql contraintes sur l’objet
• _order = le nom des attributs de l’objet utilise pour ordonner les résultats de recherche
• _defauts = valeurs par défaut des attributs de l’objet
• _sql = code sql exécute lors de la création de l’objet
• _table = nom de la table sql, la valeur par défaut étant la valeur de ‘_name’ ou les points «.» remplace par
un underscor « _ »
définition des objets
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
Les classes
Create: permet de créer une nouvelle ressource, et retourner son identifiant.
Signature : def create(cr, uid, vals, context={}), ou
vals : est un dictionnaire {nom_du_champ : valeur}, Cette fonction retourne l’identifiant de la
ressource qu’on vient de créer.
create(cr, uid,
{’name’: ’Email sent through mass mailing’,
’partner_id’: partner.id,
’description’: ’The Description for Partner Event’}
)
35
les méthodes d’ORM : create
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
Les classes
read: permet de lire les valeurs des attributs d’une ressource des identifiant passes en paramètres
Signature : def read(self, cr, uid, ids, fields=None, context={}), ou
ids : est la liste des identifiants a lire
fields : la liste des champs a lire
Cette fonction retourne un tableau sous la forme [{‘name_of_the_field’: value, ...}, ...]
read(cr, uid, ids, [’name’,’category_id’], context=context)
les méthodes d’ORM : read
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
Les classes
search: permet de chercher des ressources selon des criteres passes en parametres
Signature:
def search(self, cr, uid, args, offset=0, limit=2000, order=None, context=None, count=False), Ou
args : est une liste de critères de recherche sous la forme [(‘name_of_the_field’, ‘operator’, value),
Les operateurs possibles sont : [ =, >, <, <=, >=, IN, LIKE, ILIKE, child_of ]
Cette fonction retourne la liste des identifiants des ressources correspondants aux critères
search(cr, uid, [(’category_id’, ’=’, ’Customer’)])
37
les méthodes d’ORM : search
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
Les classes
browse: permet de récupérer les ressources a travers leurs identifiants
Signature: def browse(self, cr, uid, select, offset=0, limit=2000) , Ou select est soit :
Entier : représentant l’identifiant de la ressource
Liste d’entier : représentant la liste des ressources
Cette fonction retourne l’objet ou la liste des objets correspondants aux identifiants passe en paramètre
browse(cr, uid, contact_id)
38
les méthodes d’ORM : browse
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
Les classes
write: permet de modifier les valeurs des champs d’une ressource
Signature : def write(self, cr, uid, ids, vals, context={}), Ou
ids : est la liste des identifiants d’objet a modifier
vals : un tableau des champs a modifier et leurs valeurs sous la forme :
{‘name_of_the_field’: value, ..}
Cette fonction retourne true si l’opération est réussi
write(cr, uid, ids, {’state’:’cancel’})
39
les méthodes d’ORM : browse
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
Les classes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La couche Model
L’architecture d’une classe (Model) vide
class classe_name(osv.osv):
_name = 'object.name'
_description = u"object description"
_columns = {
'field1' : fields.char(u'Numéro', size=32, required=True),
'field2' : fields.many2one('object.name', u'Responsable', required=True),
…
}
_defaults = {
'field': lambda self, cr, uid, context: '/',
}
Classe_name()
# -*- coding: utf-8 -*-
from openerp.osv import fields, osv
Les packages et el éléments nécessaires pour créer un model
Développement spécifique d’un module
Les classes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Exercice 2 : Exemple de création des classes
• Créer un nouveau fichier travaux.py dans le module formation_travaux
• Importer les packages du framework osv
• Créer une classe formation_work dans le fichier travaux.py
• Redémarrer le serveur
• Mettre à jour le module à partir du menu
• Configuration -> Modules -> Modules installés
• Lancer la mise à jour du module on cliquant sur Mettre à jour
• Ouvrer le gestionnaire PgAdmin et vérifier dans votre base de données si la table
formation_work a été bien créée.
Développement spécifique d’un module
Les classes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Réponse
L’architecture d’une classe (Model) vide
travaux.py
class formation_work(osv.osv):
_name = 'formation.work'
_description = u"This is for managing works"
_columns = {
'name' : fields.char(u'Numéro', size=32, required=True),
'responsable': fields.many2one('hr.employee', u'Responsable', required=True),
'user' : fields.many2one('res.users',u'Note', translate=True),
'line_ids' : fields.many2one('formation.work.line', u'maintenance', required=True)
}
_defaults = {
'name': lambda self, cr, uid, context: '/',
}
formation_work()
# -*- coding: utf-8 -*-
from openerp.osv import fields, osv
Les packages nécessaires pour créer un model
Développement spécifique d’un module
Les classes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Exercice 3
• Créer une nouvelle classe formation_work_line dans le fichier travaux.py
• Ajouter des champs relationnels dans les deux classes (formation_work et
formation_work_line) pour représenter la relation suivante,
formation_work
name (char)
responsable (many2one)
user(many2one)
line_ids (many2one)
formation_work_line
name (char)
maintenance (one2many)
description (text)
* 1
many2one
one2many
Développement spécifique d’un module
Les classes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Réponse 1 :
L’architecture d’une classe formation_work
travaux.py
class formation_work(osv.osv):
_name = 'formation.work'
_description = u"This is for managing works"
_columns = {
'name' : fields.char(u'Numéro', size=32, required=True),
'responsable': fields.many2one('hr.employee', u'Responsable', required=True),
'user' : fields.many2one('res.users',u'Note', translate=True),
'line_ids' : fields.many2one('formation.work.line', u'maintenance', required=True)
}
_defaults = {
'name': lambda self, cr, uid, context: '/',
}
formation_work()
# -*- coding: utf-8 -*-
from openerp.osv import fields, osv
Les packages nécessaires pour créer un model
Développement spécifique d’un module
Les classes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Réponse 2 :
L’architecture d’une classe formation_work_line
travaux.py
class formation_work_line(osv.osv):
_name = 'formation.work.line'
_description = u"This is for managing works line"
_columns = {
'name' : fields.char(u'Nom', size=32, required=True),
'maintenance' : fields.one2many('formation.work', u'Maintenance', required=True),
'description' : fields.text(u'Description', translate=True),
}
_defaults = {
'name': lambda self, cr, uid, context: '/',
}
formation_work_line()
# -*- coding: utf-8 -*-
from openerp.osv import fields, osv
Les packages nécessaires pour créer un model
Développement spécifique d’un module
Les classes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
vues, actions et Menus
Partie 2
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Structure des modules Odoo
• Structure standard d’un module sous OpenERP
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Les Vues
• Déclaration générique d’une vue :
<record model="ir.ui.view" id="VIEW_ID">
<field name="name">VIEW.NAME</field>
<field name="model">PYTHON.CLASS.NAME</field>
<field name="arch" type="xml">
<!-- contenu de la vue: <form>, <tree>, <graph>, … -->
</field>
</record>
• name nom de la vue (nomination séparée par des point)
• model modèle d'objet sur lequel la vue est définie (comme res_model dans les actions)
• type form, tree, graph, calendar, search, gantt, kanban
• arch architecture de la vue
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La vue Formulaire (Form)
• Exemple de la vue formulaire
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La vue Formulaire (Form)
• Déclaration XML
<!-- Form view example -->
<record model="ir.ui.view" id="formation_work_form">
<field name="name">formation.work.form</field>
<field name="model">formation.work</field>
<field name="arch" type="xml">
<form string="Travaux">
<field name="name" />
<field name="responsable" />
<field name="user" />
<field name="line_ids" />
</form>
</field>
</record>
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La vue Formulaire (Form)
• Déclaration XML ( API Version 7)
<record model="ir.ui.view" id="formation_work_form">
<field name="name">formation.work.form</field>
<field name="model">formation.work</field>
<field name="arch" type="xml">
<form string="Tables" version="7.0">
<sheet>
<h1>
<label for="name" string="Numéro" />
<field name="name" />
</h1>
<label for="user" string="Utilisateur" />
<field name="user" />
<field name="responsable" />
<field name="description" />
</sheet>
</form>
</field>
</record>
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La vue Formulaire (Form)
• Les attributs communs à tous les éléments :
• string : label de l'élément ;
• nolabel : mettre à 1 pour cacher l'étiquette du champ ;
• colspan : nombre de colonnes sur lesquelles le champ doit s'étendre ;
• rowspan : nombre de lignes sur lesquelles le champ doit s'étendre ;
• col: nombre de colonnes que cet élément doit allouer à ses éléments enfants ;
• invisible : mettre à 1 pour cacher cet élément complètement ;
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La vue Formulaire (Form)
• Déclaration XML (Sheet, h1 + Group + Notebook)
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La vue Liste (Tree)
• Exemple de la vue liste (Tree)
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La vue Liste (Tree)
• Déclaration XML
<!-- Tree view example -->
<record model="ir.ui.view" id="formation_work_tree">
<field name="name">formation.work.tree</field>
<field name="model">formation.work</field>
<field name="arch" type="xml">
<tree string= "Travaux">
<field name="name" />
<field name="user" />
<field name="responsable" />
<field name="description" />
</tree>
</field>
</record>
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La vue Liste (Tree)
• Déclaration XML
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La vue Kanban (Vignette)
• Cette vue représente les données sous forme de colonnes / petite vignette regroupées par un critère.
• Les vue Kanban sont personnalisable avec des balises HTML ou QWeb
• Qweb : Un langage de Template HTML développé par OpenERP qui permet de définir une structure portable
des composantes HTML.
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La vue Kanban (Vignette)
<record model="ir.ui.view" id="formation_work_tree">
<field name="name">formation.work.kanban</field>
<field name="model">formation.work</field>
<field name="arch" type="xml">
<kanban>
<templates>
<t t-name="kanban-box">
<div class="oe_module_vignette" style="background:#EEE">
<div class="oe_module_desc">
<h2><a type="edit"><field name="name"/></a></h2>
<ul>
<li><strong><field name="description"/></strong></li>
</ul>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
La vue Kanban (Colonnes)
Développement spécifique d’un module
Vues, Actions et Menus
Menus et actions
• Les menus principales permette à l’utilisateur d’accéder au module
• Chaque module est dispose d’un menu principale et d’autres sous menus
• Les menus et leurs actions sont déclarés à l’intérieur d’un fichier xml : ( travaux_view.xml)
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Menus et actions
Menu sans action
Menu 1 avec action
Menu principal
Menu 2 avec action
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
• Structure de la vue travaux_view.xml vide
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
[views definitions]
[actions definitions]
[menus definitions]
</data>
</openerp>
Développement spécifique d’un module
Vues, Actions et Menus
Actions et menus
Pour les bonnes pratique il est préférer de séparer les menus dans
un fichier xml (menu_views.xml) a fin de facilité la maintenance.
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Actions
• La déclaration XML d’une action est la suivante
• model : la table (base de données) pour stocker des actions
• id : Identifiant de l’action dans la table ir.action.act_windows, il doit être unique
• name : Le nom de l’action (requis)
• res_model : Le model (classe python) objet de la vue (requis)
• view_mode : La liste des modes alloués pour visualiser les enregistrements
<record model="ir.actions.act_window" id="work_action_work">
<field name="name">Works</field>
<field name="res_model">formation.work</field>
<field name="view_mode">tree,form</field>
</record>
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Menus
• La déclaration XML d’un menu principal, niveau 1
• La déclaration d’un menu niveau 1.1 (Sans action = non cliquable)
• La déclaration d’un menu niveau 1.1.1 (menu cliquable avec action)
• REMARQUE : Avant d’utiliser les menus cliquables, il faut définir l’action action="[ACTION_ID]" qui va être déclenchée.
<menuitem id="work_menu_root" name="Traveaux" />
<menuitem id="work_menu" parent="work_menu_root" name="Traveaux" />
<menuitem id="works_work_menu" parent="work_menu" name="Traveaux" action="[ACTION_ID]" />
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Exercice 3 (Création des menus)
Travaux
Travaux
Tache
Travaux
formation.work.line
formation.work
Développement spécifique d’un module
Vues, Actions et Menus
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Réponse :
Développement spécifique d’un module
Vues, Actions et Menus
<menuitem id="work_menu_root" name="Traveaux" />
<menuitem id="work_menu" parent="work_menu_root" name="Traveaux" />
<menuitem id="works_work_menu" parent="work_menu" name="Traveaux" action="[ACTION_ID]" />
<menuitem id="works_task_menu" parent="work_menu" name="Tache" action="[ACTION_ID_TASK]" />
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Sécurité
Partie 3
Développement spécifique d’un module
Sécurité
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Sécurité
• Les utilisateurs et les rôles sont des points critiques en matière de sécurité interne dans
OpenERP.
• OpenERP propose plusieurs concepts de sécurité concernant les rôles des utilisateurs :
• Utilisateur: une personne identifiée par son login et mot de passe. Notez que tous les
employés d'une entreprise ne sont pas nécessairement les utilisateurs OpenERP, un
utilisateur est une personne qui accède à l'application.
• Groupe: un groupe d'utilisateurs qui a des droits d'accès. Un groupe donne ses droits
d'accès à ses utilisateurs. Ex: responsable des ventes, comptable, etc
• Règles de sécurité: une règle qui définit les droits d'accès d'un groupe donné. Les règles
de sécurité sont fixées à une ressource donnée, par exemple le modèle de facturation.
Développement spécifique d’un module
Sécurité
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Groupes
• La création des groupes peut se faire d’une manière graphique (Configuration ->
Utilisateurs -> Groupes) ou avec des fichiers de données XML
Développement spécifique d’un module
Sécurité
Méthode graphique
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
• Exemple de fichier XML de groups
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="group_work_manager" model="res.groups">
<field name="name">work/ Manager</field>
<field name="comment">Manager of works</field>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
</record>
<record id="group_work_user" model="res.groups">
<field name="name">Restaurant / user</field>
<field name="comment">userof restaurant</field>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
</record>
</data>
</openerp>
Développement spécifique d’un module
Sécurité
Groupes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Les états de sortie
report
Développement spécifique d’un module
états de sortie
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
internationalisation
• Odoo (Openerp) possède deux types de rapport:
• Rapports et statistiques: ce sont des données calculées, souvent représentés sous la forme
graphiques.
• Etat de sortie: ils sont utilisés pour imprimer des documents du système. Le résultat est
généralement un PDF généré par une sélection effectuée sur l'écran. En outre, OpenERP
vous permet d'ouvrir ces rapports dans OpenOffice.org.
reports
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
internationalisation
• Pour la représentation des menus d’impression on définie un fichier xml comme suite :
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<report auto ="False" id="report_formation_travaux" model="formation.work" name="formation.work"
rml="formation_travaux/report/travaux.rml" string="Fiche de Travau" usage="default"/>
<report auto ="False" id="report_formation_travaux" model="formation.work" name="formation.work"
rml="formation_travaux/report/travaux.rml" string="Fiche de Travau" usage="default"/>
<report auto ="False" id="report_formation_travaux" model="formation.work" name="formation.work"
rml="formation_travaux/report/travaux.rml" string="Fiche de Travau" usage="default"/>
</data>
</openerp>
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Développement spécifique d’un module
internationalisation
• Le parseur
import timefrom openerp.report import report_sxw
class madrassa_travaux(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context=None):
super(madrassa_travaux, self).__init__(cr, uid, name, context=context)
self.line_no = 0
self.localcontext.update({
'time': time,
'line_no':self._line_no,
})
report_sxw.report_sxw('report.formation.work', 'formation.work',
'addons/formation_travaux/report/travaux.rml', parser=madrassa_travaux, header="external")
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Internationalisation
i18n
Développement spécifique d’un module
internationalisation
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Exercice 5 (Internationalisation)
• Exporter la Template de traduction du module formation_travaux
• Configuration -> Importer / Exporter -> Exporter une traduction
• Sélectionner le module formation_travaux
• Cliquer sur Exporter
• Télécharger le fichier formation_travaux.po
• Créer un sous répertoire i18n à l’intérieur le dossier du module
• Coller le fichier formation_travaux.po dedans
• Créer une copie du fichier avec le nom fr.po
• Ouvrer l’éditeur Poedit et traduire les messages du fichier fr.po en français
• Enregistrer et redémarrer le serveur, puis lancer un mise à jour du module.
• Si la base de données est installée en français, le module va prendre en
considération le fichier fr.po
Développement spécifique d’un module
internationalisation
Paramétrage et développement spécifique
des modules odoo (OpenERP) Partie 1
Réalisé par : Ait-Mlouk Addi
Site web : http://www.aitmlouk-addi.info/
Blog : http://aitmlouk-addi.blogspot.com
Twiter: https://twitter.com/aitmlouk
Viadeo: http://ma.viadeo.com/fr/profile/addi.mlk
Linkedin: https://www.linkedin.com/pub/addi-ait-mlouk/56/850/32a
Youtube: https://www.youtube.com/user/mloukaddi/videos
Github: https://github.com/aitmlouk
Slidshare: http://fr.slideshare.net/mloukaddi/
aitmlouk@gmail.com
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Conclusion
Laboratoire GIESI

Contenu connexe

Tendances

Rapport de projet odoo
Rapport de projet odooRapport de projet odoo
Rapport de projet odooayoub damir
 
Tp1 - OpenERP (1)
Tp1 - OpenERP (1)Tp1 - OpenERP (1)
Tp1 - OpenERP (1)Lilia Sfaxi
 
Présentation PFE (Conception et développement d'une application web && mobile...
Présentation PFE (Conception et développement d'une application web && mobile...Présentation PFE (Conception et développement d'une application web && mobile...
Présentation PFE (Conception et développement d'une application web && mobile...Ramzi Noumairi
 
Chp1 - Introduction aux ERP
Chp1 - Introduction aux ERPChp1 - Introduction aux ERP
Chp1 - Introduction aux ERPLilia Sfaxi
 
Pfe conception et réalisation d'une application de gestion des processus d'ac...
Pfe conception et réalisation d'une application de gestion des processus d'ac...Pfe conception et réalisation d'une application de gestion des processus d'ac...
Pfe conception et réalisation d'une application de gestion des processus d'ac...Ahmed Makni
 
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Riadh K.
 
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open SourcePrésentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open SourceAfrica Performances
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec OdooHassan WAHSISS
 
Atelier1 mise en place d’odoo
Atelier1   mise en place d’odooAtelier1   mise en place d’odoo
Atelier1 mise en place d’odooAbdelouahed Abdou
 
Conception et Réalisation d’une application de Gestion SCOLAIRE
Conception et Réalisation d’une application de Gestion SCOLAIREConception et Réalisation d’une application de Gestion SCOLAIRE
Conception et Réalisation d’une application de Gestion SCOLAIREGhizlane ALOZADE
 
Ecole ESMA : Rapport de projet - Application de gestion d'une bibliotheque
Ecole ESMA : Rapport de projet - Application de gestion d'une bibliothequeEcole ESMA : Rapport de projet - Application de gestion d'une bibliotheque
Ecole ESMA : Rapport de projet - Application de gestion d'une bibliothequeMehdi Hamime
 
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
 
Android-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsAndroid-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsLilia Sfaxi
 
Rapport Projet Gestion des Etudiants avec C++
Rapport Projet Gestion des Etudiants avec C++Rapport Projet Gestion des Etudiants avec C++
Rapport Projet Gestion des Etudiants avec C++Saâd Zerhouni
 
Ma présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebMa présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebHarrathi Mohamed
 
Odoo installation et configuration avancée
Odoo installation et configuration avancéeOdoo installation et configuration avancée
Odoo installation et configuration avancéeYasine LAKHDARI
 
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
 

Tendances (20)

Rapport de projet odoo
Rapport de projet odooRapport de projet odoo
Rapport de projet odoo
 
Tp1 - OpenERP (1)
Tp1 - OpenERP (1)Tp1 - OpenERP (1)
Tp1 - OpenERP (1)
 
Présentation PFE (Conception et développement d'une application web && mobile...
Présentation PFE (Conception et développement d'une application web && mobile...Présentation PFE (Conception et développement d'une application web && mobile...
Présentation PFE (Conception et développement d'une application web && mobile...
 
Chp1 - Introduction aux ERP
Chp1 - Introduction aux ERPChp1 - Introduction aux ERP
Chp1 - Introduction aux ERP
 
PROJET JAVA BD MySQL
PROJET JAVA BD MySQLPROJET JAVA BD MySQL
PROJET JAVA BD MySQL
 
Pfe conception et réalisation d'une application de gestion des processus d'ac...
Pfe conception et réalisation d'une application de gestion des processus d'ac...Pfe conception et réalisation d'une application de gestion des processus d'ac...
Pfe conception et réalisation d'une application de gestion des processus d'ac...
 
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
 
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open SourcePrésentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec Odoo
 
Atelier1 mise en place d’odoo
Atelier1   mise en place d’odooAtelier1   mise en place d’odoo
Atelier1 mise en place d’odoo
 
Conception et Réalisation d’une application de Gestion SCOLAIRE
Conception et Réalisation d’une application de Gestion SCOLAIREConception et Réalisation d’une application de Gestion SCOLAIRE
Conception et Réalisation d’une application de Gestion SCOLAIRE
 
Ecole ESMA : Rapport de projet - Application de gestion d'une bibliotheque
Ecole ESMA : Rapport de projet - Application de gestion d'une bibliothequeEcole ESMA : Rapport de projet - Application de gestion d'une bibliotheque
Ecole ESMA : Rapport de projet - Application de gestion d'une bibliotheque
 
Formation VBA Excel
Formation VBA ExcelFormation VBA Excel
Formation VBA Excel
 
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
 
Android-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsAndroid-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intents
 
Rapport Projet Gestion des Etudiants avec C++
Rapport Projet Gestion des Etudiants avec C++Rapport Projet Gestion des Etudiants avec C++
Rapport Projet Gestion des Etudiants avec C++
 
Ma présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebMa présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site Web
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Odoo installation et configuration avancée
Odoo installation et configuration avancéeOdoo installation et configuration avancée
Odoo installation et configuration avancée
 
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
 

Similaire à Paramétrage et développement spécifique des modules odoo (OpenERP) Partie 1

Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
 
Cas integration open_erp
Cas integration open_erpCas integration open_erp
Cas integration open_erpJoubi Aaziz
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienNicolas Carlo
 
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
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2Hugo Hamon
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Martin Latrille
 
DEVASC_Module_7 - Infrastructure & automatisation.pptx
DEVASC_Module_7 - Infrastructure & automatisation.pptxDEVASC_Module_7 - Infrastructure & automatisation.pptx
DEVASC_Module_7 - Infrastructure & automatisation.pptxTasnimBenAmmar
 
Joomla! Platform - Pourquoi l’API Joomla!
Joomla! Platform - Pourquoi l’API Joomla!Joomla! Platform - Pourquoi l’API Joomla!
Joomla! Platform - Pourquoi l’API Joomla!Bilel McSam
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravoSoumia Brabije
 
Plan de la formation technique de Odoo
Plan de la formation technique de OdooPlan de la formation technique de Odoo
Plan de la formation technique de OdooIsmail BAKKALI
 
CodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxCodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxThomasParaiso1
 
Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Firas Kouẞàa
 
Florence Labord Moodle
Florence Labord  MoodleFlorence Labord  Moodle
Florence Labord MoodleWalibi
 
Liferay france symposium 2012 - montée de version d’une instance liferay
Liferay france symposium 2012 - montée de version d’une instance liferayLiferay france symposium 2012 - montée de version d’une instance liferay
Liferay france symposium 2012 - montée de version d’une instance liferaySébastien Le Marchand
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
09 - creez-propres-modules-ansible-autimatisation
09 - creez-propres-modules-ansible-autimatisation09 - creez-propres-modules-ansible-autimatisation
09 - creez-propres-modules-ansible-autimatisationbibouechristian
 

Similaire à Paramétrage et développement spécifique des modules odoo (OpenERP) Partie 1 (20)

Kick starting OpenERP
Kick starting OpenERPKick starting OpenERP
Kick starting OpenERP
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
 
Cas integration open_erp
Cas integration open_erpCas integration open_erp
Cas integration open_erp
 
Installation open erp
Installation open erpInstallation open erp
Installation open erp
 
Les générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidienLes générateurs de code, pour se simplifier la vie au quotidien
Les générateurs de code, pour se simplifier la vie au quotidien
 
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
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)
 
DEVASC_Module_7 - Infrastructure & automatisation.pptx
DEVASC_Module_7 - Infrastructure & automatisation.pptxDEVASC_Module_7 - Infrastructure & automatisation.pptx
DEVASC_Module_7 - Infrastructure & automatisation.pptx
 
J platform
J platformJ platform
J platform
 
Joomla! Platform - Pourquoi l’API Joomla!
Joomla! Platform - Pourquoi l’API Joomla!Joomla! Platform - Pourquoi l’API Joomla!
Joomla! Platform - Pourquoi l’API Joomla!
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravo
 
Plan de la formation technique de Odoo
Plan de la formation technique de OdooPlan de la formation technique de Odoo
Plan de la formation technique de Odoo
 
CodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptxCodeBuilder_DevOpsCenter.pptx
CodeBuilder_DevOpsCenter.pptx
 
Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances
 
Rapport open erp
Rapport open erpRapport open erp
Rapport open erp
 
Florence Labord Moodle
Florence Labord  MoodleFlorence Labord  Moodle
Florence Labord Moodle
 
Liferay france symposium 2012 - montée de version d’une instance liferay
Liferay france symposium 2012 - montée de version d’une instance liferayLiferay france symposium 2012 - montée de version d’une instance liferay
Liferay france symposium 2012 - montée de version d’une instance liferay
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
09 - creez-propres-modules-ansible-autimatisation
09 - creez-propres-modules-ansible-autimatisation09 - creez-propres-modules-ansible-autimatisation
09 - creez-propres-modules-ansible-autimatisation
 

Paramétrage et développement spécifique des modules odoo (OpenERP) Partie 1

  • 1. Paramétrage et développement spécifique des modules odoo (OpenERP) Réalisé par : Ait Mlouk Addi Blog : http://aitmlouk-addi.blogspot.comSite web : http://www.aitmlouk-addi.infoaitmlouk@gmail.com
  • 2. Plan Prise en main Configuration et paramétrage Modules personnalisé Introduction Conclusion Développement spécifique Prise en main et paramétrage d’odoo (OpenERP)
  • 3. • Prise en main complet d’odoo • Configuration complète • Caractéristiques techniques complète • Savoir crée un module personnalisé • Savoir développer un module spécifique 2 Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Prise en main et paramétrage d’OpenERP
  • 4. Configuration Odoo Partie 1: Prise en main Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Prise en main et paramétrage d’OpenERP
  • 5. • Démarrer le serveur • Créer une nouvelle base de données formation, mot de passe admin • Se connecter à la nouvelle base de donnée Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Prise en main et paramétrage d’OpenERP
  • 6. • Activer les menus de la configuration avancée : • Configuration -> Utilisateurs -> Modifier l’utilisateur -> Onglet droits d’accès • Cocher Caractéristiques techniques • Administration -> sélectionner l’option Configuration • Actualiser la page • Installer des modules Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Prise en main et paramétrage d’OpenERP
  • 7. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Prise en main et paramétrage d’OpenERP
  • 8. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Prise en main et paramétrage d’OpenERP
  • 9. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Prise en main et paramétrage d’OpenERP Pour une simple modification au niveau d’un module sous odoo on peut passez tous simplement par Des objets et vues personnaliser et en crée les objets comme suite : • Configuration -> structure de la base de donnée -> Modèle puis crée un objet
  • 10. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Prise en main et paramétrage d’OpenERP Apres la définition de l’objet il reste a définir les champs comme suite :
  • 11. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Prise en main et paramétrage d’OpenERP Et les menus comme suite :
  • 12. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Prise en main et paramétrage d’OpenERP Apres que nous terminons notre module personnalisé on enregistre le module en question et on rafraichir la page pour que les modification soit apparaitre comme suite :
  • 13. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Prise en main et paramétrage d’OpenERP Le mode développeur Le mode développeur permet de debugger les modules afin d’identifier les objet , champs, vues, menus … techniquement Il est utiliser par un développeur pour identifier plus de détailles sur les objets … qui servira a paramétrer et a modifier les modules stocker dans la base de donnée et pas dans le code source. Pour activer le mode développeur on procède comme suite : Administrator -> Apropos de l’OpenERP
  • 14. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Prise en main et paramétrage d’OpenERP Pour debugger un module ou un objet on passe par le menu Déboguer et en choisie l’action qui convient.
  • 15. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module Les différents phase d’un ERP Un ERP possède généralement trois phases de travail :
  • 16. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Architecture modulaire sous odoo (openerp) • Tous les modules d’OpenERP sont créés au-dessous du répertoire openerp7/openerp/addons Développement spécifique d’un module
  • 17. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Architecture modulaire sous odoo • Structure standard d’un module sous odoo Développement spécifique d’un module
  • 18. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Structure d’un module Odoo • Les étapes suivantes sont nécessaires pour créer un nouveau module : • Créer un package python dans le répertoire /addons portant le nom de votre module (required) • Créer un fichier de description du module : __openerp__.py (required) • Créer le fichier Python contenant les modèles (Classes + Méthodes) (required) • Créer des fichiers .XML pour définir les menus, les vues et les actions (required) • Créer des fichiers .XML qui téléchargent des données de démonstration • Créer éventuellement des rapports, des assistants (Wizard) ou des flux de travail (Workflow). Développement spécifique d’un module
  • 19. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Obligatoires __init__.py Initialisation du package Python __openerp__.py La fiche descriptive du module module.py Les classes Python, les objets du module module_view.xml Les vues (Formulaires, listes, graph,…), menus et actions Optionnels demo Données de test et de démonstration i18n Fichiers de traduction – Internationalisation report Définition des rapports security Déclaration des groupes et des droits d’accès workflow Définition des workflow wizard Définition des assistants Structure d’un module Odoo Développement spécifique d’un module
  • 20. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion __init__.py • C'est le fichier qui permet a OpenERP de charger notre module. Le contenu de ce fichier est très simple : import nom_module Développement spécifique d’un module Structure d’un module Odoo
  • 21. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion __openerp__.py • name : le nom de votre module ; • version : la version du module ; • category : la catégorie dans laquelle vous classez votre module ; • sequence : c'est un nombre qui permet de définir l’ordre de votre module dans la liste des modules. 1, il sera en haut, 100 il sera en bas • author : l'auteur du module ; • description : la description complète du module ; • depends : les dépendances votre module ; • data : les fichiers à charger ; • installable : si votre module est installable ou non ; • application : laissez à False. Votre module ne sera pas reconnu comme une application. C'est OpenERP qui délivre les certificats qui qualifient votre module d'application ; • auto_install : laissez à False, nous l'installerons à la main. Développement spécifique d’un module
  • 22. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion # -*- coding: utf-8 -*- { 'name' : "nom de module", 'author' : "auteur", 'version' : "0.1", 'description' : "description…", 'website' : "site web ou blog si il existe …", 'category' : "catégorie de module", 'summary' : "les mots clef de description", 'sequence' : 0, 'depends' : ['base'], 'update_xml' : [ #'travaux_view.xml', ], 'demo_xml' : [] 'installable' : True, 'application' : False, 'auto_install' : False, } Exemple de fichier de description du module __openerp__.py (Squelette) Développement spécifique d’un module
  • 23. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Exercice 1 :Exemple de création de module • Créer un module vide formation_travaux • Créer les fichiers obligatoires __init__.py et __openerp__.py • Redémarrer le serveur • Installer le module à partir du menu • Configuration -> Modules -> Modules installés • Lancer l’installation du module on cliquant sur installé Développement spécifique d’un module
  • 24. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion # -*- coding: utf-8 -*- { 'name' : "Formation Gestion des travaux", 'author' : "Ait-Mlouk Addi", 'version' : "0.1", 'description' : "Module de gestion des travaux sous odoo", 'website' : "www.aitmlouk.esy.es", 'category' : "Maintenance", 'summary' : "Travaux, Taches, Incidents", 'sequence' : 0, 'depends' : ['base'], 'update_xml' : [ #'travaux_view.xml', ], 'demo_xml' : [] 'installable' : True, 'application' : False, 'auto_install' : False, } Réponse __openerp__.py Développement spécifique d’un module
  • 25. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Les classes Partie 2 Développement spécifique d’un module Les classes
  • 26. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La couche Model • Le Framework Object Service (OSV) met en œuvre une couche complète de Mapping Objet Relationnel. • Il permet aux développeurs de mettre en place l’architecture SQL de base. • Les objets métier sont déclarés comme des classes Python qui héritent de la classe osv.osv, ce qui les rend une partie du modèle OpenObject modèle, et qui seront automatiquement persistés par la couche ORM. Développement spécifique d’un module Les classes
  • 27. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Les types des champs de l’ORM • Un objet peut avoir 3 types de champs • Simple : Integers, Floats, Date, Booleans, Char, Text, Binary… • Relationnel : Représente les relations entre les objets (one2many, many2one, many2many) • Fonctionnel : Des champs stocké ou non-stockés à la base de donnée, il sont calculés à la volé comme des fonctions Python Développement spécifique d’un module Les classes
  • 28. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Champssimple boolean(...), integer(...), date(...), datetime(...) time(...), float(…) Exemple : 'active': fields.boolean('Active'), 'priority': fields.integer('Priority'), 'start_date': fields.date('Start Date'), char(string,size,translate=False,..) text(string,size,translate=False,..) • translate: True si le champs peut être traduit par l’utilisateur • size: la taille maximum d’un champs caractère (→41,45) selection(values, string, ...) ‘status' :fields.selection([('open','Open'),('closed','Closed')],'Status', required=True, translate=True), binary(string, filters=None, ...) Un champs pour stocker des fichiers ou des images • filters: Filtres optionnels sur le nom du fichier 'picture':fields.binary('Picture',filters='*.png,*.gif') Champsrelationnel many2one(obj, ondelete='set null', …) Relation vers l’objet courant • obj: Le nom _name de l’objet destination (requis) • ondelete: e.g. 'set null', 'cascade', Voir la documentation PostgreSQL one2many(obj, field_id, …) L’inverse de many2one • obj: Le nom _name de l’objet destination (requis) • field_id: field name of inverse many2one many2many(obj, rel, field1, field2, …) Relation bidirectionnel multiple entre deux classes • obj: Le nom _name de l’objet destination (requis) • rel: Le nom SQL de la table associative (requis) • field1: Le nom du champs de l’objet actuel dans la table associative (requis) • field2: Le nom du champs de l’objet destination dans la table associative (requis) Développement spécifique d’un module Les classes
  • 29. • Un champ de type fonction est un champ qui est calcule par une fonction ( a l’opposition d’un champ récupéré de la base de données). Syntaxe : fields.function(fnct [, Parameters]), • Les paramètres principales sont : • fnct : le nom de la fonction qui calcule la valeur du champ • type : est le type de retour de la fonction • store: indique si on veut enregistrer le champ dans la base de données • method: indique si le champ est calcule par une méthode d’objet ou une méthode statique de classe • fnct_inv : le nom de la fonction qui permet d’ecrire la valeur du champ dans la base au cas ou store=true définition des attributs de l’objet : les types ‘fonctions’ Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module Les classes
  • 30. • Tous les ressources d’OpenERP sont des objets (menus, rapport, factures, partenaires, …) • OpenERP contrôle les données de ces objets a travers un ORM • Le nom des objets est par convention hiérarchique définition des objets class account_invoice(): class account_invoice_line(): class account_trensfer(): Nom du module Nom de l’objet Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module Les classes
  • 31. • Pour définir un nouveau objet il suffit de définir une nouvelle classe python et de l’instancier. La classe doit hériter de la classe osv se trouvant dans le module osv, • Un objet est définie a travers la déclaration de certains attribut statique prédéfini, dont deux sont obligatoires :_name, et _columns définition des objets class object_name(osv.osv): _name = 'object.name' _description = u"object description" _inherit ='inherit.object.name' _columns ={…} _constraints = _sql_constraints = _order = Object_name() Héritage de l’objet osv Description python statique Instanciation de l’objet Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module Les classes
  • 32. • _name = nom de l’objet • _columns = les attributs de l’objets • _inherit = le nom de l’objet dont hérite l’objet en cours • _constraints = les contraintes de l’objet • _sql_constraints = sql contraintes sur l’objet • _order = le nom des attributs de l’objet utilise pour ordonner les résultats de recherche • _defauts = valeurs par défaut des attributs de l’objet • _sql = code sql exécute lors de la création de l’objet • _table = nom de la table sql, la valeur par défaut étant la valeur de ‘_name’ ou les points «.» remplace par un underscor « _ » définition des objets Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module Les classes
  • 33. Create: permet de créer une nouvelle ressource, et retourner son identifiant. Signature : def create(cr, uid, vals, context={}), ou vals : est un dictionnaire {nom_du_champ : valeur}, Cette fonction retourne l’identifiant de la ressource qu’on vient de créer. create(cr, uid, {’name’: ’Email sent through mass mailing’, ’partner_id’: partner.id, ’description’: ’The Description for Partner Event’} ) 35 les méthodes d’ORM : create Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module Les classes
  • 34. read: permet de lire les valeurs des attributs d’une ressource des identifiant passes en paramètres Signature : def read(self, cr, uid, ids, fields=None, context={}), ou ids : est la liste des identifiants a lire fields : la liste des champs a lire Cette fonction retourne un tableau sous la forme [{‘name_of_the_field’: value, ...}, ...] read(cr, uid, ids, [’name’,’category_id’], context=context) les méthodes d’ORM : read Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module Les classes
  • 35. search: permet de chercher des ressources selon des criteres passes en parametres Signature: def search(self, cr, uid, args, offset=0, limit=2000, order=None, context=None, count=False), Ou args : est une liste de critères de recherche sous la forme [(‘name_of_the_field’, ‘operator’, value), Les operateurs possibles sont : [ =, >, <, <=, >=, IN, LIKE, ILIKE, child_of ] Cette fonction retourne la liste des identifiants des ressources correspondants aux critères search(cr, uid, [(’category_id’, ’=’, ’Customer’)]) 37 les méthodes d’ORM : search Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module Les classes
  • 36. browse: permet de récupérer les ressources a travers leurs identifiants Signature: def browse(self, cr, uid, select, offset=0, limit=2000) , Ou select est soit : Entier : représentant l’identifiant de la ressource Liste d’entier : représentant la liste des ressources Cette fonction retourne l’objet ou la liste des objets correspondants aux identifiants passe en paramètre browse(cr, uid, contact_id) 38 les méthodes d’ORM : browse Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module Les classes
  • 37. write: permet de modifier les valeurs des champs d’une ressource Signature : def write(self, cr, uid, ids, vals, context={}), Ou ids : est la liste des identifiants d’objet a modifier vals : un tableau des champs a modifier et leurs valeurs sous la forme : {‘name_of_the_field’: value, ..} Cette fonction retourne true si l’opération est réussi write(cr, uid, ids, {’state’:’cancel’}) 39 les méthodes d’ORM : browse Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module Les classes
  • 38. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La couche Model L’architecture d’une classe (Model) vide class classe_name(osv.osv): _name = 'object.name' _description = u"object description" _columns = { 'field1' : fields.char(u'Numéro', size=32, required=True), 'field2' : fields.many2one('object.name', u'Responsable', required=True), … } _defaults = { 'field': lambda self, cr, uid, context: '/', } Classe_name() # -*- coding: utf-8 -*- from openerp.osv import fields, osv Les packages et el éléments nécessaires pour créer un model Développement spécifique d’un module Les classes
  • 39. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Exercice 2 : Exemple de création des classes • Créer un nouveau fichier travaux.py dans le module formation_travaux • Importer les packages du framework osv • Créer une classe formation_work dans le fichier travaux.py • Redémarrer le serveur • Mettre à jour le module à partir du menu • Configuration -> Modules -> Modules installés • Lancer la mise à jour du module on cliquant sur Mettre à jour • Ouvrer le gestionnaire PgAdmin et vérifier dans votre base de données si la table formation_work a été bien créée. Développement spécifique d’un module Les classes
  • 40. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Réponse L’architecture d’une classe (Model) vide travaux.py class formation_work(osv.osv): _name = 'formation.work' _description = u"This is for managing works" _columns = { 'name' : fields.char(u'Numéro', size=32, required=True), 'responsable': fields.many2one('hr.employee', u'Responsable', required=True), 'user' : fields.many2one('res.users',u'Note', translate=True), 'line_ids' : fields.many2one('formation.work.line', u'maintenance', required=True) } _defaults = { 'name': lambda self, cr, uid, context: '/', } formation_work() # -*- coding: utf-8 -*- from openerp.osv import fields, osv Les packages nécessaires pour créer un model Développement spécifique d’un module Les classes
  • 41. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Exercice 3 • Créer une nouvelle classe formation_work_line dans le fichier travaux.py • Ajouter des champs relationnels dans les deux classes (formation_work et formation_work_line) pour représenter la relation suivante, formation_work name (char) responsable (many2one) user(many2one) line_ids (many2one) formation_work_line name (char) maintenance (one2many) description (text) * 1 many2one one2many Développement spécifique d’un module Les classes
  • 42. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Réponse 1 : L’architecture d’une classe formation_work travaux.py class formation_work(osv.osv): _name = 'formation.work' _description = u"This is for managing works" _columns = { 'name' : fields.char(u'Numéro', size=32, required=True), 'responsable': fields.many2one('hr.employee', u'Responsable', required=True), 'user' : fields.many2one('res.users',u'Note', translate=True), 'line_ids' : fields.many2one('formation.work.line', u'maintenance', required=True) } _defaults = { 'name': lambda self, cr, uid, context: '/', } formation_work() # -*- coding: utf-8 -*- from openerp.osv import fields, osv Les packages nécessaires pour créer un model Développement spécifique d’un module Les classes
  • 43. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Réponse 2 : L’architecture d’une classe formation_work_line travaux.py class formation_work_line(osv.osv): _name = 'formation.work.line' _description = u"This is for managing works line" _columns = { 'name' : fields.char(u'Nom', size=32, required=True), 'maintenance' : fields.one2many('formation.work', u'Maintenance', required=True), 'description' : fields.text(u'Description', translate=True), } _defaults = { 'name': lambda self, cr, uid, context: '/', } formation_work_line() # -*- coding: utf-8 -*- from openerp.osv import fields, osv Les packages nécessaires pour créer un model Développement spécifique d’un module Les classes
  • 44. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion vues, actions et Menus Partie 2 Développement spécifique d’un module Vues, Actions et Menus
  • 45. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Structure des modules Odoo • Structure standard d’un module sous OpenERP Développement spécifique d’un module Vues, Actions et Menus
  • 46. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Les Vues • Déclaration générique d’une vue : <record model="ir.ui.view" id="VIEW_ID"> <field name="name">VIEW.NAME</field> <field name="model">PYTHON.CLASS.NAME</field> <field name="arch" type="xml"> <!-- contenu de la vue: <form>, <tree>, <graph>, … --> </field> </record> • name nom de la vue (nomination séparée par des point) • model modèle d'objet sur lequel la vue est définie (comme res_model dans les actions) • type form, tree, graph, calendar, search, gantt, kanban • arch architecture de la vue Développement spécifique d’un module Vues, Actions et Menus
  • 47. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La vue Formulaire (Form) • Exemple de la vue formulaire Développement spécifique d’un module Vues, Actions et Menus
  • 48. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La vue Formulaire (Form) • Déclaration XML <!-- Form view example --> <record model="ir.ui.view" id="formation_work_form"> <field name="name">formation.work.form</field> <field name="model">formation.work</field> <field name="arch" type="xml"> <form string="Travaux"> <field name="name" /> <field name="responsable" /> <field name="user" /> <field name="line_ids" /> </form> </field> </record> Développement spécifique d’un module Vues, Actions et Menus
  • 49. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La vue Formulaire (Form) • Déclaration XML ( API Version 7) <record model="ir.ui.view" id="formation_work_form"> <field name="name">formation.work.form</field> <field name="model">formation.work</field> <field name="arch" type="xml"> <form string="Tables" version="7.0"> <sheet> <h1> <label for="name" string="Numéro" /> <field name="name" /> </h1> <label for="user" string="Utilisateur" /> <field name="user" /> <field name="responsable" /> <field name="description" /> </sheet> </form> </field> </record> Développement spécifique d’un module Vues, Actions et Menus
  • 50. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La vue Formulaire (Form) • Les attributs communs à tous les éléments : • string : label de l'élément ; • nolabel : mettre à 1 pour cacher l'étiquette du champ ; • colspan : nombre de colonnes sur lesquelles le champ doit s'étendre ; • rowspan : nombre de lignes sur lesquelles le champ doit s'étendre ; • col: nombre de colonnes que cet élément doit allouer à ses éléments enfants ; • invisible : mettre à 1 pour cacher cet élément complètement ; Développement spécifique d’un module Vues, Actions et Menus
  • 51. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La vue Formulaire (Form) • Déclaration XML (Sheet, h1 + Group + Notebook) Développement spécifique d’un module Vues, Actions et Menus
  • 52. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La vue Liste (Tree) • Exemple de la vue liste (Tree) Développement spécifique d’un module Vues, Actions et Menus
  • 53. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La vue Liste (Tree) • Déclaration XML <!-- Tree view example --> <record model="ir.ui.view" id="formation_work_tree"> <field name="name">formation.work.tree</field> <field name="model">formation.work</field> <field name="arch" type="xml"> <tree string= "Travaux"> <field name="name" /> <field name="user" /> <field name="responsable" /> <field name="description" /> </tree> </field> </record> Développement spécifique d’un module Vues, Actions et Menus
  • 54. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La vue Liste (Tree) • Déclaration XML Développement spécifique d’un module Vues, Actions et Menus
  • 55. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La vue Kanban (Vignette) • Cette vue représente les données sous forme de colonnes / petite vignette regroupées par un critère. • Les vue Kanban sont personnalisable avec des balises HTML ou QWeb • Qweb : Un langage de Template HTML développé par OpenERP qui permet de définir une structure portable des composantes HTML. Développement spécifique d’un module Vues, Actions et Menus
  • 56. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La vue Kanban (Vignette) <record model="ir.ui.view" id="formation_work_tree"> <field name="name">formation.work.kanban</field> <field name="model">formation.work</field> <field name="arch" type="xml"> <kanban> <templates> <t t-name="kanban-box"> <div class="oe_module_vignette" style="background:#EEE"> <div class="oe_module_desc"> <h2><a type="edit"><field name="name"/></a></h2> <ul> <li><strong><field name="description"/></strong></li> </ul> </div> </div> </t> </templates> </kanban> </field> </record> Développement spécifique d’un module Vues, Actions et Menus
  • 57. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion La vue Kanban (Colonnes) Développement spécifique d’un module Vues, Actions et Menus
  • 58. Menus et actions • Les menus principales permette à l’utilisateur d’accéder au module • Chaque module est dispose d’un menu principale et d’autres sous menus • Les menus et leurs actions sont déclarés à l’intérieur d’un fichier xml : ( travaux_view.xml) Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module Vues, Actions et Menus
  • 59. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Menus et actions Menu sans action Menu 1 avec action Menu principal Menu 2 avec action Développement spécifique d’un module Vues, Actions et Menus
  • 60. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion • Structure de la vue travaux_view.xml vide <?xml version="1.0" encoding="UTF-8"?> <openerp> <data> [views definitions] [actions definitions] [menus definitions] </data> </openerp> Développement spécifique d’un module Vues, Actions et Menus Actions et menus Pour les bonnes pratique il est préférer de séparer les menus dans un fichier xml (menu_views.xml) a fin de facilité la maintenance.
  • 61. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Actions • La déclaration XML d’une action est la suivante • model : la table (base de données) pour stocker des actions • id : Identifiant de l’action dans la table ir.action.act_windows, il doit être unique • name : Le nom de l’action (requis) • res_model : Le model (classe python) objet de la vue (requis) • view_mode : La liste des modes alloués pour visualiser les enregistrements <record model="ir.actions.act_window" id="work_action_work"> <field name="name">Works</field> <field name="res_model">formation.work</field> <field name="view_mode">tree,form</field> </record> Développement spécifique d’un module Vues, Actions et Menus
  • 62. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Menus • La déclaration XML d’un menu principal, niveau 1 • La déclaration d’un menu niveau 1.1 (Sans action = non cliquable) • La déclaration d’un menu niveau 1.1.1 (menu cliquable avec action) • REMARQUE : Avant d’utiliser les menus cliquables, il faut définir l’action action="[ACTION_ID]" qui va être déclenchée. <menuitem id="work_menu_root" name="Traveaux" /> <menuitem id="work_menu" parent="work_menu_root" name="Traveaux" /> <menuitem id="works_work_menu" parent="work_menu" name="Traveaux" action="[ACTION_ID]" /> Développement spécifique d’un module Vues, Actions et Menus
  • 63. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Exercice 3 (Création des menus) Travaux Travaux Tache Travaux formation.work.line formation.work Développement spécifique d’un module Vues, Actions et Menus
  • 64. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Réponse : Développement spécifique d’un module Vues, Actions et Menus <menuitem id="work_menu_root" name="Traveaux" /> <menuitem id="work_menu" parent="work_menu_root" name="Traveaux" /> <menuitem id="works_work_menu" parent="work_menu" name="Traveaux" action="[ACTION_ID]" /> <menuitem id="works_task_menu" parent="work_menu" name="Tache" action="[ACTION_ID_TASK]" />
  • 65. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Sécurité Partie 3 Développement spécifique d’un module Sécurité
  • 66. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Sécurité • Les utilisateurs et les rôles sont des points critiques en matière de sécurité interne dans OpenERP. • OpenERP propose plusieurs concepts de sécurité concernant les rôles des utilisateurs : • Utilisateur: une personne identifiée par son login et mot de passe. Notez que tous les employés d'une entreprise ne sont pas nécessairement les utilisateurs OpenERP, un utilisateur est une personne qui accède à l'application. • Groupe: un groupe d'utilisateurs qui a des droits d'accès. Un groupe donne ses droits d'accès à ses utilisateurs. Ex: responsable des ventes, comptable, etc • Règles de sécurité: une règle qui définit les droits d'accès d'un groupe donné. Les règles de sécurité sont fixées à une ressource donnée, par exemple le modèle de facturation. Développement spécifique d’un module Sécurité
  • 67. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Groupes • La création des groupes peut se faire d’une manière graphique (Configuration -> Utilisateurs -> Groupes) ou avec des fichiers de données XML Développement spécifique d’un module Sécurité Méthode graphique
  • 68. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion • Exemple de fichier XML de groups <?xml version="1.0" encoding="utf-8"?> <openerp> <data noupdate="1"> <record id="group_work_manager" model="res.groups"> <field name="name">work/ Manager</field> <field name="comment">Manager of works</field> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> </record> <record id="group_work_user" model="res.groups"> <field name="name">Restaurant / user</field> <field name="comment">userof restaurant</field> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> </record> </data> </openerp> Développement spécifique d’un module Sécurité Groupes
  • 69. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Les états de sortie report Développement spécifique d’un module états de sortie
  • 70. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module internationalisation • Odoo (Openerp) possède deux types de rapport: • Rapports et statistiques: ce sont des données calculées, souvent représentés sous la forme graphiques. • Etat de sortie: ils sont utilisés pour imprimer des documents du système. Le résultat est généralement un PDF généré par une sélection effectuée sur l'écran. En outre, OpenERP vous permet d'ouvrir ces rapports dans OpenOffice.org. reports
  • 71. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module internationalisation • Pour la représentation des menus d’impression on définie un fichier xml comme suite : <?xml version="1.0" encoding="utf-8"?> <openerp> <data> <report auto ="False" id="report_formation_travaux" model="formation.work" name="formation.work" rml="formation_travaux/report/travaux.rml" string="Fiche de Travau" usage="default"/> <report auto ="False" id="report_formation_travaux" model="formation.work" name="formation.work" rml="formation_travaux/report/travaux.rml" string="Fiche de Travau" usage="default"/> <report auto ="False" id="report_formation_travaux" model="formation.work" name="formation.work" rml="formation_travaux/report/travaux.rml" string="Fiche de Travau" usage="default"/> </data> </openerp>
  • 72. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Développement spécifique d’un module internationalisation • Le parseur import timefrom openerp.report import report_sxw class madrassa_travaux(report_sxw.rml_parse): def __init__(self, cr, uid, name, context=None): super(madrassa_travaux, self).__init__(cr, uid, name, context=context) self.line_no = 0 self.localcontext.update({ 'time': time, 'line_no':self._line_no, }) report_sxw.report_sxw('report.formation.work', 'formation.work', 'addons/formation_travaux/report/travaux.rml', parser=madrassa_travaux, header="external")
  • 73. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Internationalisation i18n Développement spécifique d’un module internationalisation
  • 74. Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Exercice 5 (Internationalisation) • Exporter la Template de traduction du module formation_travaux • Configuration -> Importer / Exporter -> Exporter une traduction • Sélectionner le module formation_travaux • Cliquer sur Exporter • Télécharger le fichier formation_travaux.po • Créer un sous répertoire i18n à l’intérieur le dossier du module • Coller le fichier formation_travaux.po dedans • Créer une copie du fichier avec le nom fr.po • Ouvrer l’éditeur Poedit et traduire les messages du fichier fr.po en français • Enregistrer et redémarrer le serveur, puis lancer un mise à jour du module. • Si la base de données est installée en français, le module va prendre en considération le fichier fr.po Développement spécifique d’un module internationalisation
  • 75. Paramétrage et développement spécifique des modules odoo (OpenERP) Partie 1 Réalisé par : Ait-Mlouk Addi Site web : http://www.aitmlouk-addi.info/ Blog : http://aitmlouk-addi.blogspot.com Twiter: https://twitter.com/aitmlouk Viadeo: http://ma.viadeo.com/fr/profile/addi.mlk Linkedin: https://www.linkedin.com/pub/addi-ait-mlouk/56/850/32a Youtube: https://www.youtube.com/user/mloukaddi/videos Github: https://github.com/aitmlouk Slidshare: http://fr.slideshare.net/mloukaddi/ aitmlouk@gmail.com Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion Conclusion Laboratoire GIESI