Créer un module
Exemple: ajouter un paramêtre 'pharmacode' au produit
Tout les modules de OpenERP se trouvent dans le répertoire bin/addons/
Pour commencer, créer un répertoire (par exemple 'monmodule') afin de mettre les fichiers du code de votre module OpenERP, puis commencer par fichier __init__.py qui qui va appeller les fonctions nécessaires
import monmodule
Ensuite un fichier __terp__.py qui va permettre de déclarer le module.
{
"name" : "Mon module",
"version" : "1.0",
"author" : "Open Net Sarl",
"category" : "Perso/Mon module",
"depends" : ["product"],
"init_xml" : [],
"demo_xml" : [],
"update_xml" : ["monmodule_view.xml"],
"active" : False,
"installable": True
} Il faut maintenant écrire le fichier de la classe pharmacode, monmodule.py qui va étendre la classe product
from osv import osv,fields
class product_product(osv.osv):
_name = "product.product"
_inherit = "product.product"
'pharma_code': fields.char('Pharma Code', size=9),
}
product_product()Il est possible de créer un template spécifique pour ce nouveau champ et de l'importer avec le module ou de simplement modifier le template par l'interface de OpenERP.
Dans le premier cas, voici un fichier générique.
<terp>
<data>
<!-- on s'occupe de la tree_view -->
<record model="ir.ui.view" id="monmodule_tree_view">
<field name="name">monmodule.tree</field>
<field name="model">monmodule</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Mon module">
<field name="name"/>
</tree>
</field>
</record>
<!-- on s'occupe de la form_view -->
<record model="ir.ui.view" id="monmodule_form_view">
<field name="name">monmodule.form</field>
<field name="model">monmodule</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Mon module">
<field name="name"/>
</form>
</field>
</record>
<!-- les actions -->
<record model="ir.actions.act_window" id="action_monmodule_form">
<field name="name">monmodule</field>
<field name="res_model">monmodule</field>
</record>
<!-- menu -->
<menuitem name="Repertoire perso/Mon module"
id="menu_action_monmodule" action="action_monmodule_form"/>
</data>
</terp>Et voici le fichier de l'exemple
?xml version="1.0" ?>
<terp>
<data>
<record model="ir.ui.view" id="view_product_form_expiry">
<field name="name">product.normal.form</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view" />
<field name="type">form</field>
<field name="arch" type="xml">
<notebook position="inside">
<page string="Pharmacode">
<separator string="Pharmacode"/>
<field name="pharmacode" select="1"/>
<separator/>
</page>
</notebook>
</field>
</record>
</data>
</terp>Reste encore à aller dans l'interface d'administration et choisir Administration > Module Management > Update Module List
Le nouveau module doit alors être visible dans la liste des modules installable.
Modification d'un module
En cas de modification d'un module (modification du code source du fichier .rml) il faut lancer la commande
./tinyerp-server.py --database=<mabase> --update=product
Rendre un attribut obligatoire et non null
Si un attribut ne doit pas être null, il faut le définir comme 'required=True' ET indiquer sa valeur par défaut.
_columns = {
'special_price': fields.float('Prix spécial', required=True),
}
_defaults = {
'special_price': lambda *a: 1,
} 