Openerp Technical Training v6 Exercises FR

Embed Size (px)

DESCRIPTION

Openerp Technical Training v6 Exercises

Citation preview

  • Technical Training - ExercisesRelease 6.0.2

    OpenERP

    2011-10-14

    Contents

    1 Configuration 31.1 Open Source RAD avec OpenObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Installer OpenERP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    Architecture dOpenERP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Installation par les paquets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4 Installation partir des sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    Procdure typique de rcupration des sources (sur Linux bas sur Debian) . . . . . . . . . . . . 41.5 Cration de la base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    2 Crer un module OpenERP 52.1 Composition dun module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2 Structure dun module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.3 Objet de service - ORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    Attributs osv.osv prdfinis pour les objets mtiers . . . . . . . . . . . . . . . . . . . . . . . . . 62.4 Types de champs de lORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    Attributs communs supports par tous les champs (optionnels sauf indication) . . . . . . . . . . . 6Champs simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    2.5 Noms de champs rservs/spciaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.6 Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.7 Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    Dclaration dune action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    3 Crer des vues : bases 83.1 Dclaration gnrique dune vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.2 Les vues Formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    lments des vues formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    4 Relations entre objets 104.1 Champs relationnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    5 Hritage 115.1 Mcanismes dhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    Attributs pr-dfinis pour les objets mtiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115.2 Hritage des vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

  • 26 Mthodes de lORM 126.1 Champs fonctionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126.2 Attributs osv.osv pr-dfinis pour les objets mtier . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    7 Vues avances 147.1 Liste & Arbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147.2 Calendriers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147.3 Vues de Recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157.4 Diagrammes de Gantt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157.5 Graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    8 Workflows 16

    9 Scurit 179.1 Mcanismes de contrle daccs bass sur les groupes . . . . . . . . . . . . . . . . . . . . . . . . 17

    ir.model.access.csv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    10 Assistants 1810.1 Objets wizard (osv_memory) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1810.2 Vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1810.3 Excution dun assistant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    11 Internationalisation 19

    12 Rapports 1912.1 Rapports imprims . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    Expressions utilises dans OpenERP dans les modles de rapport . . . . . . . . . . . . . . . . . . 2012.2 Tableaux de bord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    13 WebServices 2113.1 Exemple Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

  • 3Based on a real case, this chapter covers: building an OpenERP module and its interface, Views,Reports, Workflows, Security aspects, Wizards, WebServices, Internationalization, Rapid Ap-plication 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 fonctionnal-its CRM, Ressources Humaines, Ventes, Comptabilit, Production, Inventaires, Gestion de Projet, ... Il est bassur OpenObject, un framework modulaire, volutif et intuitif de RAD (Rapid Application Development) crit enPython.

    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-Vue-Contrleur), 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 etsyntaxe 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

    1.2 Installer OpenERP

    OpenERP est distribu sous la forme de paquets/dinstalleurs pour la plupart des plateformes, mais peut bienentendu tre install depuis le code source sur nimporte quelle plateforme.

    Architecture dOpenERP

    OpenERP utilise le paradigme bien connu client-serveur, avec diffrentes pices logicielles agissant en tant queclient et serveur dpendant de la configuration dsire.

    OpenERP fournit un client lourd (GTK+) pour toutes les plateformes et une interface web accessible en utilisantnimporte quel navigateur Web rcent.

    Tip: Procdure dinstallationLa procdure dinstallation dOpenERP est susceptible dvoluer (dpendances et autres), assurez-vous alors detoujours vrifier la documentation spcifique (package et sur le site Web) pour les dernires procdures. Voirhttp://doc.openerp.com/install.

  • 41.3 Installation par les paquets

    Windows Installeur tout-en-un et installeurs spars pour le serveur, le client, le serveur web sont sur lesite web

    Linux 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/trunkpour la version trunk) une fois identifi sur Launchpad, ensuite, cd openerp (cd trunk dans laversion trunk) et ./bzr_set.py

    Mac Regardez en ligne pour un paquet dinstallation pour le client GTK, ainsi que des tutoriels pourinstaller le serveur (e.g. devteam.taktik.be)

    1.4 Installation partir des sources

    Il y a deux alternatives :

    1. utiliser une archive fournie sur le site web,

    2. ou obtenir directement les sources en utilisant Bazaar (gestionnaire de contrle de source distribu).

    Vous aurez galement besoin dinstaller les dpendances requises (PostgreSQL et quelques librairies Python - voirla documentation sur doc.openerp.com).

    Note: OpenERP tant bas sur Python, aucune compilation nest ncessaire.

    Procdure typique de rcupration des sources (sur Linux bas sur Debian)

    $ sudo apt-get install bzr # installation de bazaar$ bzr branch lp:openerp # rcupration des sources$ cd openerp && python ./bzr_set.py # chercher le code et lancer linstallation

    1.5 Cration de la base de donnes

    Aprs linstallation, lancer le serveur et le client. Depuis le client GTK, utilisez le menu Fichier > Base de donnes> Nouvelle base de donnes pour crer une nouvelle base de donnes (le mot de passe super-admin par dfaut estadmin). Chaque base de donnes a ses propres modules et sa propre configuration.

    Note: Des donnes de dmonstration peuvent aussi tre installes.

  • 52 Crer un module OpenERP

    2.1 Composition dun module

    Un module peut contenir les lments suivants :

    Objet Mtier : dclars en tant que classes Python hritants de la classe OpenObject osv.osv, la persistancede ces ressources est compltement gre par OpenObject,

    Donnes : fichiers XML/CSV contenant des mta-donnes (dclaration de vues et de workflow), des don-nes de configuration (paramtrage des modules) et des donnes de dmonstration (optionnelles mais rec-ommendes pour tester),

    Assistants : formulaire interactif tats utiliss pour aider les utilisateurs, souvent disponibles commeaction contextuelle sur les ressources du systme,

    Rapports : RML (format XML). Modles de rapports MAKO ou OpenOffice, dans lesquels sont intgresles donnes du systme de nimporte quel objet mtier et gnre des rapports aux formats HTML, ODT ouPDF.

    2.2 Structure dun module

    Chaque module est contenu dans son propre rpertoire dans le rpertoire server/bin/addons ou dans unautre rpertoire daddons, configur lors de linstallation du serveur.

    Note: Configurer les emplacements des addonsPar dfaut, le seul rpertoire daddons connu par le serveur est server/bin/addons. Il est possibe dajouterde nouveaux addons en 1) les copiant dans server/bin/addons, ou en crant des liens symboliques verschacun deux dans ce rpertoire, ou 2) spcifier un autre rpertoire contenant des addons au serveur. Cettedernire mthode peut tre effectue soit en lanant le serveur avec loption addons-path= option, ou en con-figurant cette option dans le fichier openerp_serverrc, gnr automatiquement sour Linux dans votre rpertoirepersonnel lorsque le serveur est lanc avec loption save. Vous pouvez fournir plusieurs rpertoires loptionaddons_path en les sparant par des virgules.

    Le fichier __init__.py est la dclaration en Python du module, car OpenERP est aussi un module Python. Ilcontient toutes les instructions dimportation de tous les fichiers Python, sans lextension .py. Par exemple, si lemodule contient un unique fichier Python nomm mymodule.py :

    import mymodule

    Le fichier __openerp__.py est rellement le fichier qui dclare le module OpenERP. Il est obligatoire dans chaquemodule. Il contient uniquement un dictionnaire Python avec de nombreuses informations importantes, comme lenom du module, sa description, la liste des autres modules OpenERP dont linstallation est requise pour que lemodule courant fonctionne correctement Il contient aussi, entre autres, une rfrence tous les fichiers de donnes

  • 6(xml, csv, yml, ...) du module. Sa structure gnrale est la suivante (voir la documentation officielle pour unedescription 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 tests

    ],demo: [

    #fichiers contenant les donnes de dmonstration],test: [

    #fichiers contenant les donnes de test],installable: True,active: False,

    # certificate: certificate,}

    Exercice 1 - Cration dun module

    Crez le module vide Open Academy, avec un fichier __openerp__.py. Installez-le dans OpenERP.

    2.3 Objet de service - ORM

    Composant cl de OpenObject, lobjet de service (OSV) implmente une couche complte de mapping objet-relationnel, librant ainsi les dveloppeurs davoir crire du SQL basique. Les objets mtier sont dclars dansdes classes Python hritants de la classe osv.osv, leur permettant de faire partie du modle OpenObject, et commepar magie persistant grce la couche ORM.

    Attributs osv.osv prdfinis pour les objets mtiers

    2.4 Types de champs de lORM

    Les objets peuvent contenir 3 types de champs : simple, relationnel et fonctionnel. Les types simples sont integer,float, boolean, string, etc. Les champs relationnels reprsentent les relations entre objets (one2many, many2one,many2many). Les champs fonctionnels ne sont pas stocks dans la base de donnes mais sont calculs la voleavec des fonctions Python.

    Attributs communs supports par tous les champs (optionnels sauf indication)

    string : Libell du champ (requis)

    required : True si obligatoire

    readonly : True si non ditable

    help : Bulle daide

  • 7 select : 1 pour inclure le champ dans la vue de recherche et optimiser le filtre des listes (avec un index enbase 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 typedecimal.

    2.5 Noms de champs rservs/spciaux

    Quelques noms de champs sont rservs un comportement prdfinis dans OpenObject. Certains dentre euxsont crs automatiquement par le systme, et dans ce cas, nimporte quel champ qui portera ce nom sera ignor.

    id identifiant unique dans le systme pour lobjet (cr par lORM, ne pas lajouter)name 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 cebut

    ... ...

    Exercice 2 - Dfinir une classe

    Dfinir une nouvelle classe Course dans le module openacademy.

    2.6 Menus

    Llment menuitem est un raccourci pour dclarer un enregistrement ir.ui.menu et le connecter avec lactioncorrespondante via un enregistrement ir.model.data.

    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

  • 8Dclaration dune action

    action.name

    [list of 3-tuples (max 250 characters)]{context dictionary (max 250 characters)}object.model.nameform|treeform,tree,calendar,graphnew

    Exercice 3 - Dfinir de nouvelles entres de menu

    Dfinissez de nouvelles entres de menu pour accder aux cours et aux sessions sous lentre de menuOpenAcademy; on devrait tre en mesure de 1) afficher la liste de tous les cours et 2) crer/modifier descours.

    3 Crer des vues : bases

    Exercice 1 - Personnaliser une vue depuis lditeur de vues de linterface web

    Crez une vue liste pour lobjet Course , affichant le nom du cours ainsi que sa description.

    Les vues forment une hirarchie. Plusieurs vues du mme type peuvent tre dclares sur le mme objet, etseront affiches selon leurs priorits. En dclarant une vue hrite, il est possible dajouter ou de supprimer desfonctionnalits dans une vue.

    3.1 Dclaration gnrique dune vue

    view.nameobject_nameform # tree,form,calendar,search,graph,gantt

    3.2 Les vues Formulaires

    Les vues Formulaires permettent la cration et la modification des ressources, et correspondent aux lments.

    lments des vues formulaires

    Attributs communs tous les lments :

    string: libell de llment

    nolabel: 1 pour cacher le libell du champ

  • 9 colspan: nombre de colonnes sur lesquelles le champ doit staler

    rowspan: nombre de lignes sur lesquelles le champ doit staler

    col: nombre de colonnes que cet lment doit allouer ses lments fils

    invisible: 1 pour cacher compltement cet lment

    eval: evalue ce code Python en tant que contenu de llment (le contenu est une chane de caractres pardfaut)

    attrs: dictionnaire Python dfinissant des conditions dynamiques sur ces attributs : readonly, invisible,required bass sur des tuples de recherche sur les valeurs dautres champs

    Field Widgets automatiques dpendants du type de champ correspondant. Attributs : string: libell du champ, aussi pour la recherche (surcharge le nom du champ) select: 1 pour afficher le champ en recherche normale, 2 pour la recherche

    avance seulement nolabel: 1 pour cacher le libell du champ required: surcharge lattribut required du champ readonly: surcharge lattribut readonly du champ password: 1 pour cacher les caractres saisis dans ce champ context: code Python dclarant un dictionnaire de contexte domain: code Python dclarant une liste de tuples pour restreindre les valeurs on_change: appel dune mthode Python dclencher quand une valeur est

    change completion: 1 pour activer lauto-completion des valeurs lorsque cela est pos-

    sible groups: liste des groupes (spars par des virgules) autoriss voir ce champ widget: selectionne un widget alternatif (one2many_list, many2many, url,

    email, image, float_time, reference, text_wiki, text_html, progressbar)

    properties widget dynamique affichant toutes les proprits disponibles (pas dattributs)button

    widget cliquable associ des actions. Attributs spcifiques : type: type de button : workflow (dfaut), object ou action name: signal du workflow, nom de la fonction (sans les parenthses) ou

    action appeler (selon le type) confirm: message texte de confirmation lorsque le bouton est cliqu states: liste des tats (spars par des virgules) pour lesquels le bouton est

    visible icon: icone optionnelle (toutes les icnes GTK STOCK e.g. gtk-ok)

    separator ligne horizontale de sparation pour structurer les vues, avec un libell optionnelnewline paramtre virtuel pour complter la ligne courante de la vuelabel libell ou lgende libre dans le formulairegroup 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 2 - Personnaliser les vues liste et formulaire via XML

    Crez vos propres vues liste et formulaire pour lobjet Course. Les donnes affiches doivent tre : Dans la vue liste, le nom du cours; Dans la vue formulaire, le nom et la description du cours.

  • 10

    Exercice 3 - Onglets

    Dans la vue formulaire des cours, affichez la description dans un onglet, de cette manire, il sera faciledajouter dautres onglets par la suite, contenant des informations additionnelles.

    4 Relations entre objets

    Exercice 1 - Crer des classes

    Crez les classes Session et Attendee et ajoutez un menu et une action pour afficher les sessions. Une sessiona un nom, une date de dbut, une dure (en jours) et un nombre de siges. Un stagiaire a un nom, qui nestpas requis.

    4.1 Champs relationnels

    Attributs commun supports par les champs relationnels

    domain: restriction optionnelle sous la forme darguments pour la mthode search (voir search())

    many2one(obj, ondelete=set null,...) (50) : Relation vers un objet parent (en utilisant une cl trangre)

    obj: _name de lobjet de destination (requis)

    ondelete: gestion de la suppression, e.g. set null, cascade, restrict voir la documentationde PostgreSQL

    one2many(obj, field_id, ...) (55) : Relation virtuelle vers de multiples objets (inverse du many2one)

    obj: _name de lobjet de destination (requis)

    field_id: nom du champ du many2one inverse, i.e. la cl trangre correspondante (requis)

    many2many(obj, rel, field1, field2, ...) (56) : Relation multiple bi-directionnelle entre des objets

    obj: _name de lobjet de destination (requis)

    rel: table de relation utiliser (requis)

    field1: nom du champ dans la table de relation enregistrant lid de lobjet courant (requis)

    field2: nom du champ dans la table de relation enregistrant lid de lobjet cible (requis)

  • 11

    Exercice 2 - Relations many2one, one2many

    En utilisant les types de champs de lORM (one2many, many2one), modifiez les classes Course, Session etAttendee afin de reflter leurs relations avec dautres objets, dfinies comme suit :

    Exercice 3 - Modifiez les vues

    Modifiez les vues liste et formulaire de lobjet Course et crez les vues pour lobjet Session. Les donnesaffiches pour lobjet Course :

    Dans la vue liste, le nom du cours et le responsable de ce cours; Dans la vue formulaire, le nom et le responsable en haut, ainsi que la description du cours dans un

    onglet et les sessions lies dans un deuxime onglet.Pour lobjet Session :

    Dans la vue liste, le nom de la session et les cours lis; Dans la vue formulaire, tous les champs de lobjet Session.

    Le nombre de donnes afficher tant important, essayez dorganiser les vues formulaires de telle sorte quelinformation quelles contiennent parasse claire.

    5 Hritage

    5.1 Mcanismes dhritage

    Attributs pr-dfinis pour les objets mtiers

    _inherit _name de lobjet mtier parent (pour lhritage simple)_inherits pour lhritage multiple / : dictionnaire faisant correspondre le _name de lobjet

    mtier parent au nom des champs correspondant aux cls trangres utiliser

  • 12

    5.2 Hritage des vues

    Les vues existantes doivent tre modifies travers des vues hrites, jamais directement. Une vue hriterfrence sa vue parente en utilisant le champ inherit_id, et doit ajouter ou modifier des lments existants danscette vue en les rfrenant par des expressions XPath, en spcifiant la position approprie.

    position inside: plac dans la partie corre-

    spondante (dfaut) before: plac avant la partie cor-

    respondante

    replace: remplace la partie corre-spondante

    after: plac aprs la partie corre-spondante

    Tip: La rfrence XPath peut tre trouve www.w3.org/TR/xpath

    id.category.list2ir.ui.view

    Exercice 1 - Ajouter un mcanisme dhritage

    En utilisant lhritage de classe, crez une classe Partner qui modifie la classe Partner existante, ajoutantun champ boolen is_instructor, et la liste des sessions o ce partenaire sera prsent. En utilisant lhritagedes vues, modifiez la vue formulaire existante afin dafficher les nouveaux champs.

    Exercice 2 - domain

    Ajoutez un mcanisme la vue formulaire des Session afin de permettre lutilisateur de choisir linstructeurseulement 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 1and 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 thanstored

    fnct [fonction pour calculer la valeur du champ (requis)]

  • 13

    def fnct(self, cr, uid, ids, field_name, arg, context) retourne un dictionnaire { idsvaleurs } avecdes 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 droitsdaccs 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 unesession. Affichez ce pourcentage dans les vues liste et formulaire des sessions. Une fois ceci fait, essayez delafficher sous la forme dune barre de progression.

    Exercice 2 - Mthodes Onchange

    Modifiez la vue formulaire ainsi que la classe reprsentant les sessions de telle sorte que le pourcentage deplaces restantes se rafrachisse lorsque le nombre de places ou le nombre de stagiaires change, sans avoir enregistrer les modifications.

    Exercice 3 - warning

    Modifiez cette mthode onchange pour lever un avertissement lorsque le nombre de places est infrieur 0.

    6.2 Attributs osv.osv pr-dfinis pour les objets mtier

    _constraints liste de tuples dfinissant les contraintes Python, de la forme (fonc_name, message,champs).

    _sql_constraints liste de tuples dfinissant les contraintes SQL, de la forme (nom, sql_def, message).

    Exercice 4 - Ajouter des contraintes

    Ajoutez une containte qui contrle que la description et lintitul dun cours ne sont pas les mmes.

  • 14

    Exercice 5 - Ajouter une contrainte SQL

    Ajoutez une contrainte SQL pour contrler quun cours a un nom unique.

    Exercice 6 - Ajouter une option de duplication

    Depuis que nous avons ajout une contrainte afin que le nom dun cours soit unique, il nest plus possibledutiliser la fonction dupliquer (Formulaire > Dupliquer). R-implmenter votre propre mthode copyqui permet de dupliquer un objet Cours, en changeant le nom original en Copie de [nom original].

    Exercice 7 - Objets actifs Valeurs par dfaut

    Dfinissez la valeur par dfaut du champ start_date la date du jour. Ajoutez un champ active dans la classeSession et fixez la session comme tant active par dfaut.

    7 Vues avances

    7.1 Liste & Arbre

    Les vues Liste contiennent des lments field, sont cres avec le type tree et ont un lment parent.

    Exercice 1 - Coloration de liste

    Modifiez la vue liste des Sessions de telle manire que les sessions qui ont dur moins de 5 jours soient enbleu et celles qui ont dur plus de 15 jours soient en rouge.

    Note: duration champ Attention ! Si le champ duration nest pas dclar dans la vue, le client naura pasconscience de son existence. Cela produira une erreur.

    7.2 Calendriers

    Vues utilises pour afficher des champs date en tant quvnements dans un calendrier (lment parent ).

    Attributs color: nom du champ pour la segmentation par couleurs date_start: nom du champ contenant la date de dbut de lvnement day_length: longueur en heures dune journe du calendrier (dfaut: 8) date_stop: nom du champ contenant la date de fin de lvnement OU date_delay: nom du champ contenant la dure de lvnement

    lments autoriss field (pour dfinir le libell de chaque vnement du calendrier)

  • 15

    Exercice 2 - Vue Calendrier

    Ajoutez une vue Calendrier lobjet Session autorisant lutilisateur voir les vnements associs lOpen Academy.

    7.3 Vues de Recherche

    Les vues de Recherche sont utilises pour personnaliser le bandeau de recherche situ en haut des vues Listes,sont dclares avec le type search et ont un lment parent . Aprs avoir dfini la vue de recherche avecun id unique, ajoutez-la laction ouvrant la vue liste en utilisant le champ search_view_id de laction.

    lments autoriss field, group, separator, label, search, filter, newline, properties filter : permet de dfinir des boutons pour filtrer dans le domaine ajouter un attribut contextuel aux champs cre des widgets qui modifient le

    contexte de recherche (utile pour des champs sensibles au contexte, e.g. prixdpendants de listes de prix)

    Exercice 3 - Vues de recherche

    Ajoutez une vue de recherche contenant : 1) un champ pour rechercher des cours bas sur leur nom et2) un bouton pour filter les cours pour lesquels lutilisateur courant est le respondable. Mettre ce dernierslectionn par dfaut.

    7.4 Diagrammes de Gantt

    Graphique en barres typiquement utilis pour afficher le planning dun projet (lment parent ).

    Attributs same as lments autoriss

    field, level level : utilis pour dfinir les niveaux dans le diagramme de Gantt avec le

    champ utilis comme libell pour le sous-niveau

    Exercice 4 - Diagramme de Gantt

    Ajouter un diagramme de Gantt permettant lutilisateur de voir les sessions planifies lies au module OpenAcademy. Les sessions devront tre groupes par formateur.

    7.5 Graphiques

    Vues utilises pour afficher des graphiques statistiques (lment parent ).

  • 16

    Attributs type: type de graphique : bar, pie (par dfaut) orientation: horizontal, vertical

    lments autorissfield, avec un comportement spcifique :

    le premier champ de la vue sera laxe X, le deuxime laxe Y, le troisimelaxe Z

    2 champs sont requis, le troisime est optionnel lattribut group dfinit le champ GROUP BY (affect 1) lattribut operator permet de dfinir quel oprateur daggrgation utiliser

    sur les autres champs lorsquun champ est group (+,*,**,min,max)

    Exercice 5 - Vue graphique

    Ajoutez un graphique qui affiche, pour chaque cours, le nombre de participants sous la forme dun graphique barres. Vous pouvez le crer soit pour lobjet Course, soit pour lobjet Session.

    8 Workflows

    Les workflows sont des modles associs aux objets mtiers dcrivant la dynamique de la socit. Les workflowssont 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 peutavoir trois tats : Draft (dfaut), Confirmed et Done. Ajoutez un champ (en lecture seule) afin de visualiserltat 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. Lesworkflows sont utiliss pour structurer et grer les cycles de vies des objets mtiers ou des documents, et dfinir

  • 17

    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 quinaviguent 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 lobjetSession. Transformez la vue formulaire des Sessions de telle sorte que les boutons changent ltat dans leworkflow.

    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 londfinisse le workflow.

    Exercice 3 - Server actions

    Crez des server actions et modifiez le prcdent workflow pour re-crer le mme comportement queprcdemment, mais sans utiliser les mthodes Python de la classe Session.

    Exercice 4 - Workflows en XML

    Installez le module base_module_record. Utilisez-le pour exporter le workflow cr dans lditeur de work-flow dans un fichier XML que vous pouvez incorporer dans votre module.

    9 Scurit

    Les mcanismes de contrle daccs doivent tre combins pour atteindre une politique de scurit cohrente.

    9.1 Mcanismes de contrle daccs bass sur les groupes

    Les groupes sont crs comme des enregistrements normaux sur le modle res.groups et laccs aux menus via ladfinition de ces derniers. Cependant mme sans menu, les objets peuvent rester accessible indirectement, cestpourquoi des vritables permissions par objet (create,read,write,unlink) doivent tre dfinies pour les groupes.Elles sont gnralement insres via des fichiers CSV prsents dans les modules. Il est galement possible derestreindre les accs certains champs ou objets en utilisant lattribut groups sur les champs.

    ir.model.access.csv

    "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"

    "access_idea_idea","idea.idea","model_idea_idea","base.group_user",1,1,1,0"access_idea_vote","idea.vote","model_idea_vote","base.group_user",1,1,1,0

    Exercice 1 - Ajouter des contrles daccs depuis linterface de OpenERP

    Crez un nouvel utilisateur John Smith. Crez ensuite un groupe OpenAcademy / SessionRead avec lesaccs en lecture sur les objets Session et Attendee.

  • 18

    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 droitsdaccs 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 objetsCourse, Session et Attendees au groupe OpenAcademy / Manager. Vous pouvez aussi crer des droitsassocis 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 depuisdes objets mtiers et des vues normales, sans les enregistrer dans la base de donnes. Les objets en mmoire sontcrs 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 partic-ulire, ou pour une liste de sessions en une seule fois. Tout dabord, cet assistant fonctionnera uniquementpour 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 cre-ate_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 defermer la fentre de lassistant lorsquil est cliqu.

    10.3 Excution dun assistant

    De tels assistants sont lancs par le biais denregistrements action normaux, avec une cible spciale utilise pourouvrir lassistant dans une nouvelle fentre.

    Exercice 2 - Rendre lassistant disponible depuis un lment du menu

    Crez un lment de menu et laction ncessaire pour utiliser lassistant.

    Exercice 3 - Personnaliser la vue formulaire

    Personnalisez la vue formulaire pour afficher tous les champs de la classe.

  • 19

    Exercice 4 - Crer les mthodes

    Crez la mthode action_add_attendee dans la classe create_attendee_wizard et ajouter un bouton dans lavue formulaire pour lappeler. Ajoutez galement un bouton Annuler qui ferme la fentre de lassistant.

    Exercice 6 - Lier lassistant la barre contextuelle

    Liez lassistant la barre contextuelle du modle des sessions.

    Exercice Supplmentaire - Assistant sur de multiples enregistrements

    Rendez lassistant capable dajouter des stagiaires dans plusieurs sessions la fois.

    11 Internationalisation

    Chaque module peut fournir ses propres traductions dans le dossier i18n, en ayant des fichiers nommsLANGUE.po o LANGUE est le code de ce langage, ou une combinaison de la langue et le pays dans lecas o ils diffrent (e.g. pt.po or pt_BR.po). Les traductions seront automatiquement charges par OpenERPpour toutes les langues actives. Les dveloppeurs utiliseront toujours lAnglais en crant un module, puis ex-porteront les termes du modules en utilisant la fonctionnalit dexport de POT gettext de OpenERP (Administra-tion>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 desmodes 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 uneplateforme collaborative de traduction.

    |- idea/ # La racine du module|- i18n/ # Fichiers de traduction| - idea.pot # Fichier Template (export depuis OpenERP)| - fr.po # Traduction Franaise| - pt_BR.po # Traduction Portuguaise du Brsil| (...)

    Tip: Par dfaut, lexport POT dOpenERP extrait seulement les libells dans les fichiers XML ou dans la dfini-tion des champs dans le code Python, mais nimporte quelle chane Python peut tre traduite de cette manire enlencadrant par la mthode tools.translate._ method (e.g. _(Label) )

    Exercice 1 - Traduire un module

    Slectionnez une seconde langue pour votre installation dOpenERP. Traduisez votre module en utilisant lesfonctionnalits fournies par OpenERP.

    12 Rapports

    12.1 Rapports imprims

    Les rapports dans OpenERP peuvent tre rendus de diffrentes manires :

  • 20

    Rapports personnaliss: ces rapports peuvent tre directement crs depuis linterface client, pas de pro-grammation 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 fautcrire 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 diffrentessources et dans plusieurs formats.

    Expressions utilises dans OpenERP dans les modles de rapport

    Predefined expressions :

    objects contient la liste des enregistrements imprimer

    data vient de lassistant lanant le rapport

    user contient lutilisateur courant (comme un browse())

    time donne accs au module Python time

    repeatIn(list,var,tag) repte llment parent nomm tag pour chaque objet dans la liste, rendant lobjetdisponible en tant que variable dans chaque boucle

    setTag(tag1,tag2) remplace la balise RML tag1 par tag2

    removeParentNode(tag) supprime llment RML parent tag

    formatLang(value, digits=2, date=False, date_time=False, grouping=True, monetary=False) peut tre util-is pour formater une date, un temps ou un montant selon la locale

    setLang(lang_code) fixe la langue et la locale courante pour les traductions

    Exercice 1 - Installer le plugin OpenOffice

    Installez le module report designer et ajouter le plugin OpenERP dans OpenOffice.

    Exercice 2 - Crer un nouveau rapport

    Crez un rapport pour lobjet Session, affichant pour chaque session, son nom, sa date de dbut, sa dure, lepourcentage de remplissage, le responsable ainsi que la liste des stagiaires.

  • 21

    Exercice 3 - RML

    Exportez le rapport OpenOffice en un fichier RML, ajoutez-le votre module et ajoutez une action lobjetSession afin dimprimer le rapport.

    Exercice 4 - RML

    Amliorez votre rapport. Empchez la ligne start date dapparatre dans le rapport si aucune valeur ne luiest associe, et afficher le pourcentage de siges restants en rouge si celui-ci est infrieur 10.

    12.2 Tableaux de bord

    Exercice 5 - Dfinir un tableau de bord

    Dfinissez un tableau de bord contenant la vue graphique que vous avez cre, le calendrier des sessions etla liste des cours (commutable en vue formulaire). Ce tableau de bord doit tre disponible depuis un menu,et automatiquement affich dans le client web quand le menu principal OpenAcademy est slectionn.

    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 modifispar les interfaces clients avec les vues contextuelles.

    OpenERP est accessible depuis des interfaces XML-RPC, pour lesquelles des librairies existent dans de nombreuxlangages.

    13.1 Exemple Python

    import xmlrpclib# ... define HOST, PORT, DB, USER, PASSurl = http://%s:%d/xmlrpc/common % (HOST,PORT)sock = xmlrpclib.ServerProxy(url)uid = sock.login(DB,USER,PASS)print "Logged in as %s (uid:%d)" % (USER,uid)

    # Create a new ideaurl = http://%s:%d/xmlrpc/object % (HOST,PORT)sock = xmlrpclib.ServerProxy(url)args = {

    name : Another idea,description : This is another idea of mine,inventor_id: uid,

    }idea_id = sock.execute(DB,uid,PASS,idea.idea,create,args)

  • 22

    Exercice 1 - Ajouter un nouveau service au client

    crivez un programme Python capable denvoyer des requtes XML-RPC un PC ayant lanc OpenERP (levotre ou celui de votre formateur). Ce programme doit permettre dafficher toutes les sessions existantes, lenombre de siges correspondants et de crer une nouvelle session pour un des cours. Dans ce cas, demandezau serveur de crer les objet Session.

    ConfigurationOpen Source RAD avec OpenObjectInstaller OpenERPArchitecture d'OpenERP

    Installation par les paquetsInstallation partir des sourcesProcdure typique de rcupration des sources (sur Linux bas sur Debian)

    Cration de la base de donnes

    Crer un module OpenERPComposition d'un moduleStructure d'un moduleObjet de service - ORMAttributs osv.osv prdfinis pour les objets mtiers

    Types de champs de l'ORMAttributs communs supports par tous les champs (optionnels sauf indication)Champs simples

    Noms de champs rservs/spciauxMenusActionsDclaration d'une action

    Crer des vues : basesDclaration gnrique d'une vueLes vues Formulaireslments des vues formulaires

    Relations entre objetsChamps relationnels

    HritageMcanismes d'hritageAttributs pr-dfinis pour les objets mtiers

    Hritage des vues

    Mthodes de l'ORMChamps fonctionnelsAttributs osv.osv pr-dfinis pour les objets mtier

    Vues avancesListe & ArbreCalendriersVues de RechercheDiagrammes de GanttGraphiques

    WorkflowsScuritMcanismes de contrle d'accs bass sur les groupesir.model.access.csv

    AssistantsObjets wizard (osv_memory)VuesExcution d'un assistant

    InternationalisationRapportsRapports imprimsExpressions utilises dans OpenERP dans les modles de rapport

    Tableaux de bord

    WebServicesExemple Python