Publié le : 06/07/2022

Odoo 14 : héritage de rapports

Dans une entreprise, les rapports sont les éléments principaux que les dirigeants et les responsables. Et ces derniers les utilisent pour prendre des décisions, d’une part. Et d’autre part, les rapports sont fournis à de tierce personne ou entité pour leurs donner les informations dont ils ont besoin. De ce fait, les rapports peuvent être de différentes natures et peuvent contenir des informations diverses et variées.

Si vous avez besoin de connaître les principaux rapports qui existe dans Odoo afin de les hériter, vous pouvez les voir ici.

Afin de fournir les rapports dont les différentes entités ont besoin, Odoo offre la possibilité de les créer facilement et rapidement. De plus, nous devons parfois apporter des modifications au rapport existant. Et ces créations et modifications sont rendus possible grâce à la notion d’héritage. Et cette héritage n’est pas cantonné au code python seulement, mais elle peut aussi être utilisée au niveau des vues (qweb).

Dans ce qui suit, nous allons utiliser la notion d’héritage de rapports pour créer ou modifier des rapports existants dans Odoo.

Les avantages de l’héritage dans Odoo

Mais avant d’entrer dans le vif du sujet parlons un peut de l’intérêt de l’utilisation de l’héritage dans Odoo. Comme Odoo possède déjà plusieurs fonctionnalités, il est préférable d’utiliser ces fonctionnalités au lieu de les recréer. Et cette utilisation des fonctionnalités existantes se fait par l’utilisation de l’héritage. Les avantages de l’utilisation de l’héritage sont :

  • on ne recrée pas la fonctionnalité, mais on utilise ce qui existe et on ajoute ou modifie ce que l’on a besoin. Ainsi la création de la fonctionnalité est rapide.
  • comme les fonctionnalités existantes sont déjà stable, c’est plus facile de produire des codes stable et sans bugs grâce à l’héritage.
  • s’il y a une mise à jour de certaine fonctionnalité, la fonctionnalité qui a été héritée, dans la majorité des cas, ne va pas en pâtir. C’est à dire qu’il n’y aura pas de changement à faire sur la fonctionnalité enfant. Et s’il y en a ce sera minime.

Création de nouveau module

La première étape est la crétion d’une module Odoo. Dans Odoo, pour créer un nouveau module, nous allons utiliser la commande scaffold. La commande est indiquée ci-dessous :

$ ./odoo.py scaffold nomDeModule addons/

Pour exécuter cette commande, il faut s’assurer que l’on soit dans le répertoire où il y a le fichier exécutable odoo.py.

Comment connaître les rapports que l’on veut hériter dans Odoo

Si on veut faire d’ajouter des informations dans les rapports qweb de Odoo, nous avons besoin de les hériter. Ainsi, nous devons connaître l’External ID du rapport en question, et dans quel module ce rapport se trouve. Cet External ID est toujours de la forme : nom_module.template. Pour connaître cet External ID, nous devons aller dans Configuration > Technique > Rapports.

Les différents rapports dans Odoo

Ensuite, on choisit un rapport et on a la figure ci-dessous. Ensuite, il faut cliquer sur Vue QWeb comme indiqué ci-dessous.

Voir la vue qweb

Et enfin, nous avons l’External ID (ici c’est ID Externe).

External ID dans la vue QWeb

Création du fichier xml qui va hériter notre vue

Comme nous avons déjà créé notre module, nous pouvons ajouter le fichier xml dans notre module. Et ensuite, nous allons utiliser l’External ID pour l’hériter. Le code correspondant du QWeb du fichier xml sera alors :

<?xml version="1.0" encoding="utf-8"?>
 <odoo>
 <data> 
<template id="invoice_customised_report"  inherit_id="invoice_format_editor.report_invoice_with_payments_inherit">
<xpath expr="//div[hasclass('nom_class_css')]" position="after/before/replace">
   <!--
      Mettre les informations que l'on veut ici
   -->
</xpath>
</template>
 </data>
 </odoo>

Ici, pour que l’héritage des rapports dans Odoo soit effectif, nous avons spécifié l’attribut inherit_id. Cet attribut va contenir l’External ID qui a été trouvé un peu plus haut. Dans notre exemple, nous avons comme External ID invoice_format_editor.report_invoice_with_payments_inherit. En d’autres termes, notre rapport qui a comme ID invoice_customised_report hérite du rapport invoice_format_editor.report_invoice_with_payments_inherit.

Ensuite, nous avons la balise xpath. Dans cette balise, nous allons spécifier une balise qui va, soit :

  • subir des changements si on utiliser comme valeur de l’attribut position est replace ;
  • avoir une balise avant la balise sélectionnée si la valeur de l’attribut position est before ;
  • avoir une balise après la balise sélectionnée si la valeur de l’attribut position est after.

Et la balise qui est sélectionnée ici est défini par l’attribut expr. Ici on a expr="//div[hasclass('nom_class_css')]" qui veut dire que l’on veut sélectionner le premier div qui aura la valeur nom_class_css dans l’attribut class.

Pour que le rapport fonctionne correctement, n’oublier pas de l’insérer dans le fichier __manifest__.py.

Les mots clés rattachés à cet article : Odoo

Nos clients

Une vingtaine de clients nationaux et internationaux