Académique Documents
Professionnel Documents
Culture Documents
Release 6.0.2
OpenERP
2011-10-14
Contents
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
3
4
4
4
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
6
6
6
6
7
7
7
7
8
8
8
8
8
10
10
Hritage
5.1 Mcanismes dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Attributs pr-dfinis pour les objets mtiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Hritage des vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
11
11
12
Configuration
1.1 Open Source RAD avec OpenObject . . . . . . . . . . . . . . . . . . . . .
1.2 Installer OpenERP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Architecture dOpenERP . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Installation par les paquets . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4 Installation partir des sources . . . . . . . . . . . . . . . . . . . . . . . .
Procdure typique de rcupration des sources (sur Linux bas sur Debian)
1.5 Cration de la base de donnes . . . . . . . . . . . . . . . . . . . . . . . .
Mthodes de lORM
6.1 Champs fonctionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Attributs osv.osv pr-dfinis pour les objets mtier . . . . . . . . . . . . . . . . . . . . . . . . . .
12
12
13
Vues avances
7.1 Liste & Arbre . . . .
7.2 Calendriers . . . . .
7.3 Vues de Recherche .
7.4 Diagrammes de Gantt
7.5 Graphiques . . . . .
14
14
14
15
15
15
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Workflows
16
Scurit
9.1 Mcanismes de contrle daccs bass sur les groupes . . . . . . . . . . . . . . . . . . . . . . . .
ir.model.access.csv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
17
17
10 Assistants
10.1 Objets wizard (osv_memory) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2 Vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3 Excution dun assistant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
18
18
18
11 Internationalisation
19
12 Rapports
12.1 Rapports imprims . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Expressions utilises dans OpenERP dans les modles de rapport . . . . . . . . . . . . . . . . . .
12.2 Tableaux de bord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
19
20
21
13 WebServices
13.1 Exemple Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
21
Based on a real case, this chapter covers: building an OpenERP module and its interface, Views,
Reports, Workflows, Security aspects, Wizards, WebServices, Internationalization, Rapid Application Development (RAD) and Performance Optimization.
1 Configuration
1.1 Open Source RAD avec OpenObject
OpenERP est un Outil de Gestion dEntreprise moderne, publi sous license AGPL, et fournissant les fonctionnalits CRM, Ressources Humaines, Ventes, Comptabilit, Production, Inventaires, Gestion de Projet, ... Il est bas
sur OpenObject, un framework modulaire, volutif et intuitif de RAD (Rapid Application Development) crit en
Python.
OpenObject fournit une bote outils complte et modulaire pour rapidement crer des fonctionnalits
: support de lORM (mapping objet-relationnel), interfaces bases sur des templates MVC (Modle-VueContrleur), un systme de gnration de rapport, internationnalisation automatise et bien plus.
Python est un langage de programmation de haut-niveau, idal pour du RAD, combinant puissance et
syntaxe claire et un noyau de taille rduite par sa conception.
Tip:
Liens utiles
Site principal avec les tlchargements dOpenERP : www.openerp.com
Documentation fonctionnelle et technique : doc.openerp.com
Ressources de la communaut : www.launchpad.net/open-object
Serveur dintgration : test,openobject.com
Apprendre Python: doc.python.org
Plateforme dE-Learning OpenERP : edu.openerp.com
Mac
Installeur tout-en-un et installeurs spars pour le serveur, le client, le serveur web sont sur le
site web
Les paquets openerp-server et openerp-client sont disponibles via le gestionnaire de paquets
(e.g. Synaptic sur Ubuntu) OU en utilisant BaZaar bzr branch lp:openerp (ou openerp/trunk
pour la version trunk) une fois identifi sur Launchpad, ensuite, cd openerp (cd trunk dans la
version trunk) et ./bzr_set.py
Regardez en ligne pour un paquet dinstallation pour le client GTK, ainsi que des tutoriels pour
installer le serveur (e.g. devteam.taktik.be)
Procdure typique de rcupration des sources (sur Linux bas sur Debian)
$ sudo apt-get install bzr
$ bzr branch lp:openerp
$ cd openerp && python ./bzr_set.py
# installation de bazaar
# rcupration des sources
# chercher le code et lancer linstallation
Le fichier __openerp__.py est rellement le fichier qui dclare le module OpenERP. Il est obligatoire dans chaque
module. Il contient uniquement un dictionnaire Python avec de nombreuses informations importantes, comme le
nom du module, sa description, la liste des autres modules OpenERP dont linstallation est requise pour que le
module courant fonctionne correctement Il contient aussi, entre autres, une rfrence tous les fichiers de donnes
(xml, csv, yml, ...) du module. Sa structure gnrale est la suivante (voir la documentation officielle pour une
description complte du fichier) :
{
"name": "MyModule",
"version": "1.0",
"depends": ["base"],
"author": "Author Name",
"category": "Category",
"description": """
Description text
""",
data: [
mymodule_view.xml,
#tous les autres fichiers de donnes, lexception des donnes de dmonstration et de
],
demo: [
#fichiers contenant les donnes de dmonstration
],
test: [
#fichiers contenant les donnes de test
],
installable: True,
active: False,
certificate: certificate,
select : 1 pour inclure le champ dans la vue de recherche et optimiser le filtre des listes (avec un index en
base de donnes)
context : Dictionnaire contenant des paramtres contextuels (pour les champs relationnels)
Champs simples
boolean(...) integer(...) date(...) datetime(...) time(...)
start_date: fields.date(Start Date)
active: fields.boolean(Active)
priority: fields.integer(Priority)
char(string,size,translate=False,..) text(string, translate=False,...) [Champs bass sur du texte]
translate: True si la valeur du champ peut tre traduite par les utilisateurs
size: taille maximale pour les champs char (41,45)
float(string, digits=None, ...) [valeur flottante avec prcision arbitraire et ratio]
digits: tuple (precision, scale) (58) . Si digits nest pas spcifi, cest un float, pas un type
decimal.
...
identifiant unique dans le systme pour lobjet (cr par lORM, ne pas lajouter)
dfinit la valeur utilise par dfaut pour afficher les enregistrements dans les listes,
etc. si manquant, utilisez _rec_name pour spcifier un autre champ utiliser dans ce
but
...
2.6 Menus
Llment menuitem est un raccourci pour dclarer un enregistrement ir.ui.menu et le connecter avec laction
correspondante via un enregistrement ir.model.data.
<menuitem id="menu_id" parent="parent_menu_id" name="label" icon="icon-code"
action="action_id" groups="groupname1,groupname2" sequence="10"/>
2.7 Actions
Les actions sont dclares comme des enregistrements normaux et peuvent tre dclenches de 3 faons :
1. en cliquant sur les lments de menu lis une action spcifique
2. en cliquant sur des boutons dans des vues, si ces boutons sont connects des actions
3. en tant quactions contextuelles sur un objet
properties
button
separator
newline
label
group
ligne horizontale de sparation pour structurer les vues, avec un libell optionnel
paramtre virtuel pour complter la ligne courante de la vue
libell ou lgende libre dans le formulaire
utilis pour organiser les champs en groupes avec un libell optionnel (ajoute un
cadre)
notebook, page
les lments notebook sont des gestionnaires donglets pour les lments page. Attributs :
name: libell de longlet
position: position de longlet dans son container (inside, top, bottom, left,
right)
Exercice 3 - Onglets
Dans la vue formulaire des cours, affichez la description dans un onglet, de cette manire, il sera facile
dajouter dautres onglets par la suite, contenant des informations additionnelles.
10
5 Hritage
5.1 Mcanismes dhritage
11
Exercice 2 - domain
Ajoutez un mcanisme la vue formulaire des Session afin de permettre lutilisateur de choisir linstructeur
seulement parmi les partenaires dont le champ Instructeur est Vrai.
Exercice 3 - domain
Nous dcidons maintenant de crer de nouvelles catgories de partenaires : Professeur/Professeur Niveau 1
and Professeur/Professeur Niveau 2. Modifiez le domaine dfini prcdemment pour autoriser lutilisateur
choisir linstructeur parmi les partenaires dont le champ Instructeur est Vrai ou ceux qui appartiennent
lune des catgories que nous avons dfinies.
6 Mthodes de lORM
6.1 Champs fonctionnels
function(fnct, arg=None, fnct_inv=None, fnct_inv_arg=None, type=float, fnct_search=None, obj=None,
method=False, store=False, multi=False, ...) : Functional field simulating a real field, computed rather than
stored
fnct [fonction pour calculer la valeur du champ (requis)]
12
def fnct(self, cr, uid, ids, field_name, arg, context) retourne un dictionnaire { idsvaleurs } avec
des valeurs du type type
fnct_inv [fonction utilise pour crire une valeur dans ce champ]
def fnct_inv(obj, cr, uid, id, name, value, fnct_inv_arg, context)
type : type du champ simul (nimporte quel type part function)
fnct_search [fonction utilise pour effectuer une recherche sur ce champ]
def fnct_search(obj, cr, uid, obj, name, args) retourne une liste de tuples pour le search(), e.g.
[(id,in,[1,3,5])]
obj : _name model du champ simul si cest un champ relation
store, multi : mcanismes doptimisation (voir usage dans la section Performances)
related(f1, f2, ..., type=float, ...) [Champ raccourci quivalent parcourir des relations chaines]
f1,f2,... : champs lis pour atteindre la cible (f1 requis) (51)
type : type du champ cible
property(obj, type=float, view_load=None, group_name=None, ...) [Attribut dynamique avec des droits
daccs spcifiques]
obj : objet (requis)
type : type du champ quivalent
Exercice 1 - Champs fonctionnels
Ajoutez un champ fonctionnel la class Session, qui contient le pourcentage de places restantes dans une
session. Affichez ce pourcentage dans les vues liste et formulaire des sessions. Une fois ceci fait, essayez de
lafficher sous la forme dune barre de progression.
Exercice 3 - warning
Modifiez cette mthode onchange pour lever un avertissement lorsque le nombre de places est infrieur 0.
13
7 Vues avances
7.1 Liste & Arbre
Les vues Liste contiennent des lments field, sont cres avec le type tree et ont un lment <tree> parent.
<tree string="Idea Categories" toolbar="1" colors="blue:state==draft">
<field name="name"/>
<field name="state"/>
</tree>
7.2 Calendriers
Vues utilises pour afficher des champs date en tant quvnements dans un calendrier (lment parent <calendar>).
Attributs
lments autoriss
14
same as <calendar>
field, level
level : utilis pour dfinir les niveaux dans le diagramme de Gantt avec le
champ utilis comme libell pour le sous-niveau
7.5 Graphiques
Vues utilises pour afficher des graphiques statistiques (lment parent <graph>).
15
Attributs
lments autoriss
8 Workflows
Les workflows sont des modles associs aux objets mtiers dcrivant la dynamique de la socit. Les workflows
sont aussi utiliss pour suivre des processus qui voluent avec le temps.
Exercice 1 - Workflow statique
Crez un attribut state qui sera utilis pour dfinir un workflow pour lobjet Session. Une session peut
avoir trois tats : Draft (dfaut), Confirmed et Done. Ajoutez un champ (en lecture seule) afin de visualiser
ltat et des boutons pour changer dtat dans la vue formulaire des Sessions. Les transitions valides sont :
Draft -> Confirmed
Confirmed -> Draft
Confirmed -> Done
Done -> Draft
Une commande gnrant une facture et un bon dexpdition est un exemple de workflow utilis dans OpenERP.
Les workflows peuvent tre associs nimporte quel objet dans OpenERP et sont entirement paramtrables. Les
workflows sont utiliss pour structurer et grer les cycles de vies des objets mtiers ou des documents, et dfinir
16
des transitions, des dclencheurs, etc. avec des outils graphiques. Les workflows, les activits (noeuds ou actions)
et les transitions (conditions) sont dclars, comme dhabitude, dans des enregistrements XML. Les jetons qui
naviguent dans les workflows sont nomms workitems.
Exercice 2 - diteur dynamique de workflow
En utilisant lditeur de workflow, crez le mme workflow que celui dfini prcdemment pour lobjet
Session. Transformez la vue formulaire des Sessions de telle sorte que les boutons changent ltat dans le
workflow.
Note: Workflow on create Un workflow associ une session est cr pendant la cration de cette session.
Par consquent, il ny a pas dinstances du workflow associes aux instances des sessions cres avant que lon
dfinisse le workflow.
9 Scurit
Les mcanismes de contrle daccs doivent tre combins pour atteindre une politique de scurit cohrente.
17
Exercice 2 - Ajouter des contrles daccs depuis des fichiers de donnes dans votre module
En utilisant un fichier de donnes XML, crez un groupe OpenAcademy / Manager, sans y dfinir de droits
daccs pour le moment (crez simplement un groupe vide).
Exercice 3 - Ajouter des contrles daccs depuis des fichiers de donnes dans votre module
Utilisez un fichier CSV pour ajouter les droits de lecture, criture, cration et suppression sur les objets
Course, Session et Attendees au groupe OpenAcademy / Manager. Vous pouvez aussi crer des droits
associs aucun groupe, comme un accs en lecture seule sur les objets Course et Session.
10 Assistants
10.1 Objets wizard (osv_memory)
Les assistants dcrivent des sessions interactives tats avec lutilisateur par le biais de formulaires dynamiques.
Les assistants utilisent la persistance en mmoire osv_memory pour permettre de construires des assistants depuis
des objets mtiers et des vues normales, sans les enregistrer dans la base de donnes. Les objets en mmoire sont
crs en hritant de la classe osv.osv_memory.
Exercice 1 - Dfinir la classe de lassistant
Nous voulons crer un assistant qui permettra lutilisateur de crer des stagiaires pour une session particulire, ou pour une liste de sessions en une seule fois. Tout dabord, cet assistant fonctionnera uniquement
pour une session la fois. Pour faire cela, nous crons un objet assistant (hritant de osv.osv_memory)
avec une relation many2one sur lobjet Session et une relation one2many avec un nouvel objet Attendee
(en mmoire) avec un champ name et une relation many2one vers lobjet Partner. Dfinissez la classe create_attendee_wizard et implmentez sa structure.
10.2 Vues
Les assistants utilisent des vues normales et leurs boutons peuvent utiliser un attribut special=cancel afin de
fermer la fentre de lassistant lorsquil est cliqu.
18
11 Internationalisation
Chaque module peut fournir ses propres traductions dans le dossier i18n, en ayant des fichiers nomms
LANGUE.po o LANGUE est le code de ce langage, ou une combinaison de la langue et le pays dans le
cas o ils diffrent (e.g. pt.po or pt_BR.po). Les traductions seront automatiquement charges par OpenERP
pour toutes les langues actives. Les dveloppeurs utiliseront toujours lAnglais en crant un module, puis exporteront les termes du modules en utilisant la fonctionnalit dexport de POT gettext de OpenERP (Administration>Traductions>Exporter une traduction sans spcifier de langue ) pour crer le fichier template POT du module,
et ensuite en driver les fichiers PO traduits. La plupart des environnements intgrs de dveloppement ont des
modes ou des plugins pour diter et merger les fichiers PO/POT.
Tip: Le format GNU gettext (Portable Object) utilis par OpenERP est intgr LaunchPad, devenant ainsi une
plateforme collaborative de traduction.
|- idea/
|- i18n/
| - idea.pot
| - fr.po
| - pt_BR.po
| (...)
#
#
#
#
#
La racine du module
Fichiers de traduction
Fichier Template (export depuis OpenERP)
Traduction Franaise
Traduction Portuguaise du Brsil
Tip: Par dfaut, lexport POT dOpenERP extrait seulement les libells dans les fichiers XML ou dans la dfinition des champs dans le code Python, mais nimporte quelle chane Python peut tre traduite de cette manire en
lencadrant par la mthode tools.translate._ method (e.g. _(Label) )
12 Rapports
12.1 Rapports imprims
Les rapports dans OpenERP peuvent tre rendus de diffrentes manires :
19
Rapports personnaliss: ces rapports peuvent tre directement crs depuis linterface client, pas de programmation requise. Ces rapports sont reprsents par des objets mtiers (ir.report.custom)
Rapport personnaliss de haute qualit utilisant openreport: pas de programmation requise mais il faut
crire 2 petits fichiers XML :
un template qui indique les donnes sur lesquelles portera le rapport
un fichier XSL : feuille de style RML
Rapports cods en dur
Modles OpenOffice Writer
Il existe plusieurs moteurs de rendu de rapports dans OpenERP pour produire des rapports depuis diffrentes
sources et dans plusieurs formats.
20
Exercice 3 - RML
Exportez le rapport OpenOffice en un fichier RML, ajoutez-le votre module et ajoutez une action lobjet
Session afin dimprimer le rapport.
Exercice 4 - RML
Amliorez votre rapport. Empchez la ligne start date dapparatre dans le rapport si aucune valeur ne lui
est associe, et afficher le pourcentage de siges restants en rouge si celui-ci est infrieur 10.
13 WebServices
Le module de web-service offre une interface commune pour tous les web-services :
SOAP
XML-RPC
NET-RPC
Les objets mtiers peuvent aussi tre accds depuis le mcanisme dobjets distribus. Il peuvent tous tre modifis
par les interfaces clients avec les vues contextuelles.
OpenERP est accessible depuis des interfaces XML-RPC, pour lesquelles des librairies existent dans de nombreux
langages.
21
22