Vues

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. 




Empêcher qu'une vue soit écrasée lors d'une mise à jour

Certains objets dans Odoo sont modifiables mais pas pérennes, c'est-à-dire qu'une mise à jour peut supprimer les modifications faites.

Pour empêhcer les mises à jour au niveau des vues (ce qui concerne principalement les rapports PDF), il faut être en mode débug puis

2.png

Image collée à 2022-3-30 15-575.png

Image collée à 2022-3-30 15-57.png

Ajouter un champs - Odoo v16

Odoo permet d’ajouter des nouveaux champs par l’interface.


Attention que
- les changements peuvent être invisibles pour les programmeurs, car les éléments personnalisés ne figurent nulle part dans le code. Le débogage devient plus difficile en conséquence
- les migrations deviennent beaucoup plus difficiles car il faut retrouver toutes les modifications personnalisées et les prendre en compte
- former les gens à l'utiliser correctement est plutôt difficile.
- les modifications personnalisées peuvent être remplacées par des mises à jour de modules, ce qui annule le travail.

Activer le mode développeur et aller dans le menu de configuration<technique<Structure de la base de données>champs

1.png

Créer ensuite un nouveau champs et entrer les paramètres adéquats. Un champ ajouté doit avoir un nom précédé d'un x_

2.png

Aller ensuite dans le menu configuration<technique<Interface utilisateur<vues

3.png

Créer une nouvelle vue qui héritera d'une vue existante. Cela permet de s'assurer que les modifications soient pérennes.

4.png

Dans l'exemple ci-dessus, le champs "x_profil", champs texte libre a été rajouté à la vue contact, après le champs "email".

<field name="email" position = "after">
<field name = "x_profil"/>
</field>