Afficher les composants d'une nomenclature dans un devis

Dans Odoo
21 juin 2024 par
Nexelans, Emmanuel Chaumery
| Aucun commentaire pour l'instant

Introduction

Lorsque l'on vend des produits composés, des kits ou des produits finis, il peut être important pour le client d'afficher les composants de notre nomenclature.

Ce n'est pas disponible par défaut dans Odoo et cela nécessite un petit bout de code avec Studio. On vous explique tout de suite comment faire.

Méthodologie

Il va nous falloir indiquer à notre rapport PDF que l'on veut afficher les composants sous le nom du produit sans forcément remplir les autres colonnes (prix unitaire ou TVA). 
Cette opération ne sera réalisée que si l'article dispose d'une nomenclature.

Pour cela, on va d'abord, comme d'habitude prendre les précautions d'usage :

  • Se mettre en base de test en dupliquant la base de production 
  • Dupliquer le modèle de devis actuel
  • Activer le mode développeur

Si vous ne savez pas faire ce genre d'opérations, contactez nous, nous vous accompagnerons dans les opérations ou les feront pour vous.

  1. Aller dans le module ventes
  2. Aller dans Studio
  3. Sélectionner Rapport
  4. Dupliquer le modèle de base dupliquer modele de base
  5. Cliquer sur modifier les sources
  6. Repérer la ligne d'affichage du produit qui ressemble à 
                                   <td name="td_name">
                                        <span t-field="line.name">Bacon Burger</span>
                                    </td>
  7. Se positionner avant le <td> qui ressemble à :
                                    <td t-if="not line.is_downpayment" name="td_subtotal" class="text-end o_price_total">
                                        <span t-field="line.price_subtotal">27.00</span>
                                    </td>
                                </t> 


Maintenant, nous allons insérer ici une ligne de plus qui ne devra apparaître que si le produit est une nomenclature : 

                            <t t-if="line.product_id.bom_ids">
                                <t t-set="bom" t-value="line.product_id.bom_ids[0]"/>
                                <t t-foreach="bom.bom_line_ids" t-as="bom_line">
                                    <tr>
                                        <td style="padding-left: 20px;">
                                            <span t-field="bom_line.product_id.display_name"/>
                                        </td>
                                        <td/>
                                        <td/>
                                         <td/>
                                    </tr>
                                </t>
                            </t>

Attention à bien respecter les imbrications de balises XML, Odoo vous rappellera à l'ordre si ce n'est pas le cas.

La première ligne teste si le produit a des composants puis pour chaque composant, il va afficher son nom. La dernière colonne indique la classe CSS permettant de conserver le même style que les autres lignes. Dans notre cas, le modèle de rapport grise la dernière colonne "montant". Et voilà...

Code et pdf

Améliorations possibles

Dans le code ci-dessus, nous avons limité les informations affichées. Mais on peut parfaitement indiquer la quantité de composants nécessaires en remplissant les <td> </td> (ou <td/>) vides avec le nom du champ correspondant. Dans ce cas, ce sera t-field="bom_line.product_qty" par exemple.

On pourrait aussi ajouter un champ calculé qui multiplie la quantité commandée du produit fini par la quantité définie dans la nomenclature... Nous avons en fait autant de champs disponibles que de colonnes dans le pdf d'origine. 

On pourrait aussi afficher le tout sur une ligne fusionnée etc...

Voilà, si ce tuto vous plaît, n'hésitez pas à partager votre expérience et vos améliorations dans les commentaires.

A très vite pour un nouveau tuto

Se connecter pour laisser un commentaire.