Mise en place des fonctions d'acquisition de livres
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 :
- 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.
- 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.
- 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 :
- Permettre lâinstallation des modules Achats (purchase) et Inventaire (stock) lors de lâinstallation du module de gestion de librairie (oo_library).
- 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.
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.
- Activer le mode développeur.
- Cliquer sur le menu en question (Menu Articles dans le module Achats).
- 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).
- 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).
Maintenant, nous allons rĂ©cupĂ©rer le xml_id de la vue (lâID de la vue formulaire du menu Articles).
- Cliquer sur le bouton create.
- Cliquer sur Ouvrir les outils de développement.
- Cliquer sur Modifier la vue formulaire et noter la valeur de lâID externe (product.product_template_only_form_view).
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+!