Odoo, Tout savoir sur les modĂšles et les vues
Bonjour ! Aujourdâhui, nous allons passer aux choses sĂ©rieuses. Il sâagit ici dâun article trĂšs important qui fera de vous une personne capable de tout modifier sur Odoo. Oui, oui ! Jâai bien dit tout modifier car mettez bien dans votre tĂȘte quâavec Odoo, on peut tout faire (Yvan Yelizariev) ! Je vous prie de vous concentrer et de faire les manipulations que je vais vous montrer ! En ce moment, ce que vous allez faire, câest crĂ©er un module Odoo puis dĂ©marrer votre instance. Ensuite, installez le module point_of_sale et cliquez sur le menu Products. Le reste, on le fera ensemble !
Passons Ă la manipulation des modĂšles
Les modĂšles reprĂ©sentent une abstraction de votre base de donnĂ©es Ă travers lâORM dâOdoo. Dans un article prĂ©cĂ©dent, je vous ai expliquĂ© comment fonctionnent les modĂšles. Ici, je vais mâattarder sur leurs manipulations.
Comment cibler un modĂšle sur Odoo ?
Le principe est simple :
Regardez au niveau de lâURL dans la barre dâadresse. En jetant un coup dâĆil Ă cet URL (localhost:8069/web?debug#id=334&view_type=form&model=product.product&menu_id=564&action=806), on se rend compte que nous sommes sur le modĂšle product.product. Maintenant, considĂ©rons que vous voulez avoir le nom dâun champ dans le modĂšle.
Comment faites-vous ?
Il suffit dâactiver le mode dĂ©veloppeur et mettre le curseur sur le champ que vous dĂ©sirez. Dans mon cas, je viens de mettre mon curseur sur le champ Sale Price, et les informations que je peux tirer de ce champ sont :
- Field: lst_price
- Object: product.product
- Type: float
- Widget: monetary
- Modifiers: Readonly, etcâŠ
Je vous prĂ©sente lâaperçu sur cette image :
En dâautres termes, le champ Sale Price (lst_price) est un champ de la table product_product de type rĂ©el, donc le formatage est de type devise. Une autre information que je retiens est que ce champ est accessible en lecture seule. Dans un prochain article, nous reviendrons plus en dĂ©tail sur lâaccessibilitĂ© des champs.
OK, jâai ciblĂ© mon champ Sale Price et jâaimerais ajouter un tout nouveau champ que jâappelle Earnings, câest-Ă -dire bĂ©nĂ©fice. Comment je fais ?
On va utiliser le principe dâhĂ©ritage des classes. Notez trĂšs bien que sur Odoo, il y a 3 mĂ©canismes que lâon peut utiliser pour lâhĂ©ritage des classes. Pour en savoir plus, je vous renvoie sur cet article. Passons maintenant Ă la rĂ©daction de notre code pour ajouter notre champ personnalisĂ©.
Vous allez commencer par crĂ©er votre module dans les rĂšgles de lâart avec un fichier __manifest__
et des packages Python.
Créez le fichier product_product.py et insérez-y le code suivant :
from odoo import fields, models
class ProductProduct(models.Model):
_inherit = "product.product"
earnings = fields.Float(string="Earnings")
AprĂšs avoir enregistrĂ© votre fichier et redĂ©marrĂ© votre serveur Odoo, le champ que vous venez de crĂ©er sera bel et bien prĂ©sent dans votre BD. Pour vĂ©rifier, allez sur Settings â> Technical â> Database Structure â> Models. Tapez dans la barre de recherche product.product, sĂ©lectionnez votre modĂšle et dĂ©roulez un peu, vous verrez le champ âearningsâ.
Nous pouvons alors passer Ă la manipulation de la vue pour positionner notre champ
Nous allons rester sur la mĂȘme vue et allons positionner notre champ âearningsâ aprĂšs le champ Sale Price. Pour cela, vous devez rester en mode dĂ©veloppeur, puis vous allez ouvrir votre vue et cliquer sur lâicĂŽne reprĂ©sentant un petit âscarabĂ©â.
En dĂ©roulant, vous verrez le bouton âEdit form viewâ sur lequel vous cliquerez. La fenĂȘtre suivante sâaffichera.
Regardez trĂšs bien les champs qui ont Ă©tĂ© surlignĂ©s en jaune : ces champs nous permettront de positionner notre champ personnalisĂ© via lâhĂ©ritage des vues. Oui, oui, vous avez trĂšs bien lu, il sâagit de lâhĂ©ritage des vues. Tout Ă lâheure, nous avons parlĂ© de lâhĂ©ritage des classes.
Il sâagit de quoi concrĂštement ?
En effet, lâhĂ©ritage des vues consiste Ă surcharger une vue dans le but dâajouter, modifier, cacher ou changer le comportement dâun champ. Les Ă©lĂ©ments principaux qui entrent dans lâhĂ©ritage dâune vue sont lâexternal ID qui reprĂ©sente lâID de la balise XML oĂč sera placĂ© le nouveau champ et un champ cible Ă partir duquel notre champ personnalisĂ© sera positionnĂ©. Dans notre cas, jâai surlignĂ© ces Ă©lĂ©ments en jaune.
Pour la suite, créez un document XML et ajoutez-y ce bout de code :
<record id="your_new_view_id" model="ir.ui.view">
<field name="name">your_new_view_id.form</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="arch" type="xml">
<field name="lst_price" position="after">
<field name="earnings"/>
</field>
</field>
</record>
Je vous propose ici un petit commentaire de ce code
- ligne 1 : on déclare notre balise (record) et on lui affecte un ID unique
- ligne 2 : on donne un nom Ă notre record
- ligne 3 : on définit le nom du modÚle sur lequel pointe notre record
- ligne 4 : on dĂ©finit lâID de la vue qui sera surchargĂ©e.
- ligne 6 : on indique oĂč sera placĂ© notre champ personnalisĂ©. Dans notre cas, aprĂšs (after) le champ lst_price
- ligne 7 : on place notre champ proprement dit.
Mettez Ă jour votre module et admirez le fruit des efforts que vous avez fournis. Pendant ce temps, je vais aller bidouiller quelques packages sur Odoo !
Sur ce, Ă plus !