Mise en place des fonctions d'acquisition de livres: gestion des dépendances, des variantes de produits et établissement de liens entre deux modèles

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!

Si vous êtes débutant et venez tous juste de nous rejoindre, je vous invite plutôt à commencer ici!

OK! Aujourd'hui nous allons commencer la mise en place des fonctions d'acquisitions des livres. Pour vous permettre de comprendre, mettez-vous à la place d'un libraire qui, après avoir enregistrer 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 passez 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 personnalité 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 personalisation. 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é 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 verez 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épends notre module personnalisé. Par conséquent, tous ces modules sont installés lors de l'installation du module oo_library. Ici, vous verez les modules suivant:
  • 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 la 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éer 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 celà, nous allons faire un héritage de vues.

Comment hériter d'une vue sur Odoo?


Il faut tout d'abord être capable 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 la 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 modules 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_puchased)


Maintenant on va 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



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)



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 champs Catégorie




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 pour aujourd'hui. Prenez la peine de mieux assimiler tout ce qui a été dis jusqu’à aujourd'hui et la prochaine fois nous allons continuez sur la gestion du processus d'achat et l'entrée des produits en stocks.

Découvrez le code source de ce module ainsi que d'autres modules ici

Sur ce, 
A+!

Commentaires