Tout savoir sur les modèles et les vues

Hello! 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 model sur Odoo?


Le principe est simple:

Regarder au niveau de l'URL dans la barre d'adresse. En jettant un coup d'oeil à cet URL (odoo.com/web?debug#id=334&view_type=form&model=product.product&menu_id=564&action=806)
on se rend compte que nous somme 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 champs que vous désirez. Dans mon cas, je viens de mettre mon curseur sur le champs Sale Price, et les informations que je peux tirer de ce champs 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 champs Sale Price (lst_price) est un champs 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 champs est accessible en  lecture seule. Dans un prochain article, nous reviendrons plus en détail sur l'accéssibilité des champs.

OK, j'ai ciblé mon champs Sale Price et j'aimerais ajouter un tout nouveau champs 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 champs 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 champs 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 champs "earnings".


Nous pouvons alors passer à la manipulation de la vue pour positionner notre champs


Nous allons rester sur la même vue et allons positionner notre champs "earnings" après le champs Sale Price. Pour celà, vous devez rester en mode développeur, puis vous allez ouvrir votre vue et cliquer sur l'icone 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é en jaune: ces champs nous permettrons de positionner notre champs 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 champs. 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 champs et un champs cible à partir duquel notre champs 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

1. <record id="your_new_view_id" model="ir.ui.view">
2.     <field name="name">your_new_view_id.form</field>
3.     <field name="model">product.product</field>
4.     <field name="inherit_id" ref="product.product_normal_form_view"/>
5.     <field name="arch" type="xml">
6.         <field name="lst_price" position="after">
7.             <field name="earnings"/>
8.         </field>
9.     </field>
10. </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 model 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 champs personnalisé. Dans notre cas, après (after) le champs lst_price
ligne 7: on place notre champs proprement dit.


Mettez à jour votre module et admirez le fruit des efforts que vous avez fourni. Pendant ce temps, je vais aller bidouiller quelques packages sur Odoo!

Sur ce, A+

Commentaires

  1. svp j'ai une préoccupation, pour ce qui travaille sur l'environnement Windows,dans quel fichier doit t'ont créé le nouveau module? merci.

    RépondreSupprimer
  2. Dans le dossier addons situé dans le repertoire où tu as installé Odoo si tu as fait l'installation via le .exe

    Je propose également une méthode pour installer Odoo sans utiliser le .exe: dans ce cas, tu pourra mettre tes modules dans n'importe quel repertoire de ta machine. Pour en savoir plus, tu peux suivre ce lien: https://www.nasserzone.com/2018/11/installez-odoo-sur-windows-sans.html

    RépondreSupprimer
  3. Bonsoir, merci pour toutes ces informations.
    Je suis en train de travailler sur Odoo depuis 3 semaines et souhaite avoir votre aide pour adapter Odoo aux besoins envisagés.
    Merci par avance

    RépondreSupprimer
    Réponses
    1. Pouvez-vous me contacter ib pour plus d'éclaircissement? Je réponds à abdounasser202[@t]gmail[dot]com

      Supprimer

Enregistrer un commentaire