Bonjour et bienvenue !

DerniĂšrement, je vous prĂ©sentais comment implĂ©menter les fonctionnalitĂ©s de consultation des livres. En gros, il s’agissait d’écrire un modĂšle qui enregistre des livres et sur lequel on peut faire des Ă©ditions et des suppressions. Vous pouvez consulter l’article en question ici !

Aujourd’hui, nous allons commencer la mise en place des fonctions d’acquisition des livres. Pour vous permettre de comprendre, mettez-vous Ă  la place d’un libraire qui, aprĂšs avoir enregistrĂ© les livres qu’il va vendre dans sa bibliothĂšque, dĂ©cide maintenant de les acquĂ©rir. Pour ce faire, il doit enregistrer ses produits ou articles (livres), puis ses fournisseurs. Ensuite, il devra passer par un bon de commande pour passer sa commande auprĂšs du fournisseur avant de les recevoir dans son stock.

Maintenant, et si je vous disais qu’actuellement, Odoo me permet de faire cette opĂ©ration, sans aucune difficultĂ©, comme ça de maniĂšre native ? Et oui ! c’est vrai. Rien qu’en installant les modules Achats (purchase) et Inventaire (stock), je peux le faire.

Vous allez me demander : mais pourquoi dois-je alors développer une telle fonctionnalité ?

Et à moi de vous répondre :

  1. Vous faites un module personnalisé de gestion de bibliothÚque, votre client ne doit faire aucune autre action. Il doit ouvrir son logiciel, aller sur son module et faire ses manipulations.
  2. Vous faites une intĂ©gration ERP ; et qui dit intĂ©gration ERP dit respect des procĂ©dures clients. Votre client vous demande de l’aider Ă  exĂ©cuter les tĂąches qu’il fait tous les jours via son poste de travail.
  3. L’ergonomie et la personnalisation. Odoo fait tout et vous devrez le personnaliser selon les besoins de votre client, rien de plus !

J’en profite alors pour vous dire ce qu’on fera dans ce tutoriel :

  1. Permettre l’installation des modules Achats (purchase) et Inventaire (stock) lors de l’installation du module de gestion de librairie (oo_library).
  2. Joindre les livres qui ont Ă©tĂ© enregistrĂ©s aux articles (product.product). J’en profiterai pour vous expliquer la diffĂ©rence qu’il y a entre les modĂšles product.product et product.template.

Passons maintenant aux choses sérieuses.

1. Comment installer les modules Achats (purchase) et Inventaire (stock) lors de l’installation de notre module ?

C’est simple. Ouvrez le fichier __manifest__.py qui prĂ©sente les caractĂ©ristiques du module (dans un dictionnaire Python). Vous verrez qu’au niveau de la clĂ© depends, il y a une liste comme ceci :

'depends': ['base', 'sale_management', 'purchase', 'stock'],

Cette liste est la liste des modules dont dĂ©pend notre module personnalisĂ©. Par consĂ©quent, tous ces modules sont installĂ©s lors de l’installation du module oo_library. Ici, vous verrez les modules suivants :

  • base : le noyau d’Odoo comportant les modĂšles avec res (res.users, res.partners, etc
), ainsi que plusieurs autres fonctionnalitĂ©s (suppression, crĂ©ation, modification, import, export, impression, etc
) et l’affichage.
  • sale_management : pour la gestion des ventes.
  • purchase : gestion des achats.
  • stock : gestion de stock.

2. Nous allons maintenant établir un lien entre les articles et les livres qui ont été enregistrés

Avant de continuer, notez d’abord cette diffĂ©rence entre les modĂšles product.product et product.template :

  • Le modĂšle product.product contient tous les articles stockables qu’on peut manipuler. Ces articles peuvent ĂȘtre attribuĂ©s Ă  des variantes : on dit qu’il liste les variantes du produit.
  • Le modĂšle product.template, lui, permet de contenir les informations qui sont identiques aux variantes.

En effet, il est possible sur Odoo de crĂ©er des variantes de produits. Par exemple, le produit stylo contient des variantes stylo rouge et stylo bleu. Du coup, si vous crĂ©ez un produit (Stylo) en utilisant le modĂšle product.template, le mĂȘme produit (Stylo) sera créé au niveau du modĂšle product.product, vous permettant ainsi d’enregistrer les variantes rouges et bleues.

Comment activer les variantes de produits sur Odoo ?

C’est simple : vous pouvez utiliser les variantes de produit dans Odoo en activant “Attributs et variantes” dans le menu Ventes / Configuration.

Activer les variantes de produits

Ainsi, comme on peut avoir plusieurs versions (tome) d’un mĂȘme livre, nous allons plutĂŽt crĂ©er un product.template.

Dans le dossier views, créez le fichier oo_product_template.xml. Ici, oo représente les initiales de mon module et product_template représente le modÚle sur lequel je vais travailler.

Pour que votre code soit propre et facile à maintenir, optez toujours pour la méthode un modÚle pour un fichier.

Le but de cette section est de faire apparaßtre le menu Articles présent dans Achats au niveau de MaLibrairie. Pour cela, nous allons faire un héritage de vues.

Comment hĂ©riter d’une vue sur Odoo ?

Il faut tout d’abord ĂȘtre capable de repĂ©rer le xml_id

En effet, le xml_id est l’élĂ©ment qui identifie un composant (action, menu, vue, etc
) sur Odoo. Par exemple, pour repĂ©rer le xml_id de l’action qui va ouvrir le formulaire des Articles, voici la procĂ©dure Ă  suivre et il en est de mĂȘme ou presque pour tous les autres composants.

  1. Activer le mode développeur.
  2. Cliquer sur le menu en question (Menu Articles dans le module Achats).
  3. Cliquer sur Ouvrir les outils de dĂ©veloppement (il s’agit du petit insecte situĂ© tout juste Ă  cĂŽtĂ© de votre nom de profil Ă  l’extrĂȘme droite).
  4. Cliquer sur modifier l’action et noter la valeur de ID Externe (c’est le xml_id de l’action : purchase.product_normal_action_purchased).

XML ID

Maintenant, nous allons rĂ©cupĂ©rer le xml_id de la vue (l’ID de la vue formulaire du menu Articles).

  1. Cliquer sur le bouton create.
  2. Cliquer sur Ouvrir les outils de développement.
  3. Cliquer sur Modifier la vue formulaire et noter la valeur de l’ID externe (product.product_template_only_form_view).

View Form XML ID

On peut alors passer au code.

Nous allons surcharger le modÚle product.template (par héritage) et faire le lien avec nos livres présents dans le modÚle oo.consultation

from odoo import models, fields, api

class ProductTemplate(models.Model):
    _inherit = 'product.template'

    oo_consultation_id = fields.Many2one(
        'oo.consultation',
        string="Livre",
        required=False,
    )

N’oubliez pas d’importer ce nouveau fichier dans le dossier models/__init__.py.

from . import oo_product_template

Ensuite, nous allons surcharger la vue proprement dite et afficher le livre aprÚs le champ Catégorie.

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <record id="product_template_only_form_view_inherit" model="ir.ui.view">
        <field name="name">product.template.only.form.view.inherit</field>
        <field name="model">product.template</field>
        <field name="inherit_id" ref="product.product_template_only_form_view"/>
        <field name="arch" type="xml">
            <xpath expr="//field[@name='categ_id']" position="after">
                <field name="oo_consultation_id"/>
            </xpath>
        </field>
    </record>
</odoo>

N’oubliez pas d’inclure le fichier dans __manifest__.py.

'data': [
    'data/menu.xml',
    'views/oo_consultation_view.xml',
    'views/oo_product_template.xml'
],

Je vais m’arrĂȘter ici. Prenez la peine de mieux assimiler tout ce qui a Ă©tĂ© dit jusqu’à aujourd’hui.

Sur ce, A+!