paramétrage et développement spécifique des modules odoo(openerp) partie 1
DESCRIPTION
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1 •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écifiqueTRANSCRIPT
Paramétrage et développement spécifique
des modules odoo (OpenERP) Partie 1
Réalisé par : Ait-Mlouk Addi
Blog : http://aitmlouk-addi.blogspot.comSite web : http://www.odoo-services.esy.es/Laboratoire ETRI
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 OdooPartie 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 classesPartie 2
Développement spécifique d’un moduleLes 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 moduleLes 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 moduleLes classes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Ch
amp
s simp
le
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')
Ch
amp
s relation
nel
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 moduleLes 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 moduleLes 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 moduleLes 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 moduleLes 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 moduleLes 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 moduleLes 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 moduleLes classes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
vues, actions et MenusPartie 2
Développement spécifique d’un moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, Actions et Menus
Actions et menus
Pour les bonnes pratique il est préférer de séparer les menus dansun 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleVues, 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 moduleSé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 dansOpenERP.
• 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 lesemployés d'une entreprise ne sont pas nécessairement les utilisateurs OpenERP, unutilisateur est une personne qui accède à l'application.
• Groupe: un groupe d'utilisateurs qui a des droits d'accès. Un groupe donne ses droitsd'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 moduleSé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 moduleSé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 moduleSécurité
Groupes
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Les états de sortiereport
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 moduleinternationalisation
• 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 moduleinternationalisation
• 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 moduleinternationalisation
• Le parseur
import timefrom openerp.report import report_sxwclass 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
Internationalisationi18n
Développement spécifique d’un moduleinternationalisation
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 moduleinternationalisation
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.odoo-services.esy.es/
Laboratoire ETRI
Paramétrage et développement spécifique
des modules odoo (OpenERP) Partie 1
Réalisé par : Ait-Mlouk Addi
Site web : http://www.odoo-services.esy.es/
Blog : http://aitmlouk-addi.blogspot.com
Twiter: https://twitter.com/aitmlouk
Facebook: https://www.facebook.com/iminoika
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/
Prise en main complet d’odoo Configuration complète Module personnalisé Module spécifique Conclusion
Conclusion
Laboratoire ETRI