mardi 24 février 2015

Développement d'un module sous Odoo (v7)

Pour créer un module il faut passe nécessairement par ces étapes :
• Créer un package python dans le répertoire /addons portant le nom de votre module
• Créer un fichier de description du module : __openerp__.py
• Créer le fichier Python contenant les models (Classes + Méthodes)
• Créer des fichiers .XML pour représenter les menus, les vues et les actions
• 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).

Fichier obligatoire:
__init__.py : Initialisation du package Python
 __openerp__.py : La fiche descriptive du module
 model.py : Les classes Python, les objets du module
 model_view.xml  : Les vues (Formulaires, listes, graph,…), menus et actions
les fichiers optionnels : 
demo :  Données de test et de démonstration
i18n :  Internationalisation  Fichiers de traduction
report : Définition des rapports
security : Déclaration des groupes et des droits d’accès
workflow : Définition des workflow
wizard : Les workflow
 
__init__.py : 
C'est le fichier permet de charger notre module. Le contenu de ce fichier est très simple :
import nom_module

Exemple : import travaux
__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 fera apparaître 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 modules dont votre module dépend ;
• 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.
__openerp__.py  [exemple]  :
# -*- coding: utf-8 -*-

{
    "name": u"Formation- Gestion des travaux",
    'complexity': "level 1",
    "version": "1.0",
    "depends": ["base","mail"],
    "author": "Ait-MLouk Addi",
    "sequence":1,
    "website" : "http://freelance-it.esy.es/",
    'icon': '/formation_travaux/static/src/img/icon.png',
    "category": "Vertical functionality",
    'summary' : 'Travaux, Taches',
    'description' : """
Traveaux, Taches
==================================
Ce module, vous permet de gérer tous les travaux, taches, incidants ,
et de nombreuses autres fonctionnalités nécessaires à la gestion
de maintenance.

Fonctionnalités principales
-------------
* Gestion Travaux
""",
    "init_xml": [],
    'update_xml': [
                    'security/ir.model.access.csv',
                    'travaux_view.xml',
                    'travaux_menu.xml',
                   ],
    'demo_xml': [],
    'application': False,
    'installable': True,
    'active': False,

}
L’architecture d’une classe (Model) : [traveau.py]
from openerp.osv import osv, fields
import time, datetime

class formation_work(osv.osv):

    _name = 'formation.work'
    _description = u'travaux'
    _inherit = ['mail.thread','ir.needaction_mixin']
 
    _columns = {
            'name' : fields.char(u'Numéro',size=100,required=True),
            'responsable' : fields.many2one('hr.employee',u'Responsable',required=True),
            'user' : fields.many2one('res.users',u'De qui',required=True),
            'date' : fields.datetime(u'Date',required=True),
            'description' : fields.text(u'Détail de l\'intervention'),
            'amount' : fields.float(u'Montant'),
            'line_ids' : fields.one2many('formation.work.line','maintenance',u'Détails'),
            'incident_ids' : fields.one2many('formation.work.incident','maintenance',u'Incidents'),
        }
 
    _defaults = {
        'user' : lambda x, y, z, c: z,
        'date': lambda *a : time.strftime('%Y-%m-%d'),
        }
formation_work()

class formation_work_line(osv.osv):

    _name = 'formation.work.line'
    _description = u'tache'
    _order = 'maintenance desc, date_start desc'
 
    _columns = {
            'name' : fields.char(u'Référence',size=100,required=True),
            'maintenance' : fields.many2one('formation.work',u'Travaux',required=True),
            'responsable' : fields.many2one('hr.employee',u'Responsable',required=True),
            'user' : fields.many2one('res.users',u'utilisateur',required=True),
            'description' : fields.text(u'Détail'),
            'amount' : fields.float(u'Montant',required=True),
            'date_start' : fields.datetime(u'Date début',required=True),
            'date_end' : fields.datetime(u'Date fin',required=True),
        }
 
    _defaults = {
        'user' : lambda x, y, z, c: z,
        'date_start': lambda *a : time.strftime('%Y-%m-%d %H:%M:%S'),
        }
formation_work_line()

class formation_work_incident(osv.osv):

    _name = 'formation.work.incident'
    _description = u'Incidents'
    _order = 'maintenance desc, date desc'

    _columns = {
            'name' : fields.char(u'Référence',size=100,required=True),
            'maintenance' : fields.many2one('formation.work',u'Travaux',required=True),
            'responsable' : fields.many2one('hr.employee',u'Responsable',required=True),
            'user' : fields.many2one('res.users',u'utilisateur',required=True),
            'description' : fields.text(u'Incident'),
            'date' : fields.datetime(u'Date',required=True),
        }
 
    _defaults = {
        'user' : lambda x, y, z, c: z,
        'date': lambda *a : time.strftime('%Y-%m-%d %H:%M:%S'),
        }
formation_work_incident()

 
Déclaration XML
 
<record model="ir.ui.view" id="formation_work_tree">
            <field name="name">formation.work.tree</field>
            <field name="model">formation.work</field>
            <field name="type">tree</field>
            <field name="arch" type="xml">
                <tree string="Travaux" >
                <field name="name" />
                <field name="responsable" />
                <field name="user" />
                <field name="date"/>
                <field name="description" />
                <field name="amount" sum="Total montant" />
                </tree>
            </field>
    </record>
 
<record model="ir.ui.view" id="formation_work_calendar">
            <field name="name">formation.work.calendar</field>
            <field name="model">formation.work</field>
            <field name="type">calendar</field>
            <field name="arch" type="xml">
                <calendar string="Travaux"  date_start="date" color="responsable" >
                <field name="name" />
                <field name="amount" sum="Total montant" />
                </calendar>
            </field>
    </record>
 
<record model="ir.ui.view" id="formation_work_graph">
           <field name="name">formation.work.graph</field>
           <field name="model">formation.work</field>
           <field name="arch" type="xml">
                <graph string="Cout Traveaux par Moi">
                    <field name="name" />
                    <field name="amount" operator="+"/>
                    <field name="user" group="True"/>
                </graph>
            </field>
        </record>
 
<record model="ir.ui.view" id="formation_work_form">
            <field name="name">formation.work.form</field>
            <field name="model">formation.work</field>
            <field name="type">form</field>
            <field name="arch" type="xml">
                <form string="Travaux" version="7.0" >
                <sheet>
                <group >
                <group>
               
                <field name="name" />
                <field name="user" />
                <field name="amount"/>
                </group>
                <group>
                <field name="responsable" />
                <field name="date"/>
                </group>
                </group>
                <newline/>
                <notebook colspan="4" >
                <page string="Description" >
                <group colspan="4" >
                <field name="description" nolabel="1"  />
                </group>
                </page>
                <page string="Tâches" >
                <group colspan="4" >
                <field name="line_ids" nolabel="1"  >
                <tree editable="bottom">
                <field name="name" readonly="True" />
                <field name="description"  />
                <field name="date_start" />
                <field name="date_end"  />
                <field name="amount"  sum="Total montant"  />
                <field name="responsable"  />
                <field name="user" readonly="True" />
                </tree>
                </field>
                </group>
                </page>
                <page string="Incidents" >
                <group colspan="4" >
                <field name="incident_ids" nolabel="1" >
                <tree editable="bottom" >
                <field name="name" readonly="True" />
                <field name="description"  />
                <field name="date" />
                <field name="responsable"  />
                <field name="user" readonly="True" />
                </tree>
                </field>
                </group>
                </page>
                </notebook>
                </sheet>
                <div class="oe_chatter">
                   <field name="message_follower_ids" widget="mail_followers"/>
                   <field name="message_ids" widget="mail_thread"/>
                </div>
                </form>
            </field>
    </record>
action
<record id="action_formation_work" model="ir.actions.act_window">
            <field name="name">Gestion des travaux</field>
            <field name="res_model">formation.work</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form,calendar,graph</field>
            <field name="search_view_id" ref="formation_work_search"/>
    </record>
les Menus :
 
<openerp>
    <data>
    <!-- formation maintenance menus -->
    <menuitem id="base.menu_formation_maintenance_parent" name="Travaux" web_icon="images/maintenance.png" web_icon_hover="images/maintenance-hover.jpg"
     sequence="18" />
   
    <menuitem id="menu_maintenance" name="Travaux" parent="base.menu_formation_maintenance_parent" sequence="1" />
    <menuitem id="menu_maintenance_list" name="Travaux" parent="menu_maintenance" sequence="1" action="action_formation_work"  />
    <menuitem id="menu_maintenance_task_list" name="Tâches" parent="menu_maintenance" sequence="2" action="action_formation_work_line"  />
    <menuitem id="menu_maintenance_incident_list" name="Incidents" parent="menu_maintenance" sequence="3" action="action_formation_work_incident"  />
 
    </data>
</openerp>
 
 

Aucun commentaire:

Enregistrer un commentaire