Modifier une vue

Ce guide explique comment modifier un rapport ou une vue backend via l’interface de Odoo.

Pour comprendre le mécanisme plus en profondeur, je vous invite à lire la section “Extending Views” du chapître 4 du livre de dev Odoo.

Petite clarification du vocabulaire:

Cas utilisé

Nous allons prendre un exemple lié à une tâche récente pour foodhub. 

La demande était de rajouter une ligne dans les notes de crédits avec la phrase ci-dessous. 



Trouver le rapport à modifier

La première chose à faire dans ce cas-là est d’aller voir le code du rapport en question. Pour faire cela : 



On voit que le template ci-dessus est trop court, ce n’est pas celui là qu’on veut. Dans ce cas-ci, il n’y a pas de vue infante ni parente. On voit par contre un appel ‘t-call’ (voir flèche rouge). 

On cherche donc quel template est appelé via ‘t-call’. Pour cela on va dans les vues (Settings>Technical>Views) et on cherche le nom du template appelé (on prend le nom du template, donc ce qui est après le point : report_invoice_document_with_payments). 

On trouve un résultat. On l’ouvre:



On observe ici que le template est toujours très court, ce ne doit pas être le bon. On constate qu’il y a une vue parente. On clique dessus et tada ! Un bon template bien long ! En parcourant le code on voit des champs qui semblent correspondre à ce qu’on voit dans le pdf de la facture. Parfait, on a trouvé le bon rapport, c’est report_invoice_document !



Modifier le rapport

Pour modifier le rapport, on ne modifie pas le code du template lui-même, mais on crée un template qui hérite de lui et le modifie.  Cela permet que le changement ne disparaisse pas lors d’une mise à jour du module.


On crée donc une nouvelle vue en appuyant sur Create.


On remplit le formulaire. Seuls les champs suivants sont importants:


Ensuite, il faut écrire le code xml qui va modifier la vue parente. Voici le code qui a été écrit dans notre exemple:


<?xml version="1.0"?>

<data inherit_id="account.report_invoice_document">

<xpath expr="//div[@id='total']/.." position="after">

<p t-if="o.type == 'out_refund'">Please deduct this credit note from a future invoice or ask a refund.</p>        

</xpath>

</data>


Explication du code :


On a un élément ‘Total’, qui est imbriqué dans plusieurs balises “td”, “tr”, “table” (qui sont des balises liées au tableau), et </div> (le slash “/” veut dire que c’est des balises de fermeture). 


On décide d’intervenir au-dessus du “<p>” qui a un “name=comment”, mais après la dernière balise “div”, voir la flèche bleue. 


On veut donc placer l’élément après toute la grosse balise “div” qui a “class=clearfix”. On remplit donc l’attribut “expr” de xpath avec : "//div[@id='total']/..". Ce qui se traduit en : la balise parente (“/..") de la balise div qui a pour id ‘total’ (//div[@id='total']"). 

Dans l’attribut “position”, on précise qu’on veut ajouter quelque chose après l’élément qu’on a sélectionné (position="after").

Note : il peut y avoir plusieurs manières de sélectionner un élément avec xpath. Les principaux critères de choix sont:

Par exemple on aurait aussi pu avoir <xpath expr="//p[@name=’comment']"   

position="before"></xpath>. Ça aurait été plus simple, même si on préfère “id” plutôt que “name” car il y a un contrôle sur l’unicité des id, pas sur le name. 



Documenter le changement

On va ensuite documenter le changement dans le module custom existant (s’il existe, sinon que faire ?). Par exemple, on va dans le repo cie_custom, puis dans le module foodhub_custom. On ouvre le fichier readme/DESCRIPTION.rst, on l’édite (en cliquant sur le crayon en haut à droite). On édite le fichier et on écrit un message de commit (par exemple : “[ADD] report modification doc”). On choisit l’option “Create a new branch” pour ouvrir une pull request. On renseigne ensuite la pull request en taggant des développeurs pour qu’ils valident le changement. 





Revision #3
Created 14 March 2024 08:50:02 by Victor
Updated 2 June 2025 08:24:45 by Victor