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 :

Odoo Sale Price Field

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Ă©â€.

Odoo Edit View

En dĂ©roulant, vous verrez le bouton “Edit form view” sur lequel vous cliquerez. La fenĂȘtre suivante s’affichera.

Odoo Form View

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 !