Notre entreprise paie des commissions sur la base de la remise accordée ligne par ligne. J'essaie de montrer ce montant de commission sur la copie de la facture que nous envoyons au représentant des ventes.

J'utilise Odoo studio dans la version 12.0 et j'ai créé un champ x_studio_field_dakHb intitulé "Commission Amount" qui apparaît dans le modèle account.invoice.line.

J'ai coché les cases "Lecture seule" et "Stocké". Dans le champ "Dépendances" j'ai "discount, price_subtotal".

Dans la section "Propriétés avancées", j'ai:

def compute_commission_amount(self):
  for record in self:
    if (discount >= 55.0):
      x_studio_field_dakHb = (price_subtotal * .05)
    elif (discount >= 45.0):
      x_studio_field_dakHb = (price_subtotal * .10)
    elif (discount >= 30.0):
      x_studio_field_dakHb = (price_subtotal * .15)
    elif (discount >= 25.0):
      x_studio_field_dakHb = (price_subtotal * .20)
    elif (discount >= 0.0):
      x_studio_field_dakHb = (price_subtotal * .25)

Je ne reçois aucune erreur, mais le champ ne calcule pas comme je l'avais prévu.

Un exemple de ce que j'attends serait le suivant:

Tableau de facturation

Y a-t-il quelque chose qui manque dans mon code pour le faire calculer correctement?

2
Cameron Wolfe 14 mars 2019 à 17:21

2 réponses

Meilleure réponse

Vous devez utiliser record pour attribuer vos valeurs. Sur un champ, vous trouverez l'astuce suivante sur les méthodes de calcul :

Le champ Compute est le code Python pour calculer la valeur du champ sur un ensemble d'enregistrements. La valeur du champ doit être affectée à chaque enregistrement avec une affectation de type dictionnaire.

for record in self:
    record['size'] = len(record.name)

Votre code devrait donc être comme:

def compute_commission_amount(self):
    for record in self:
        if (record.discount >= 55.0):
            record['x_studio_field_dakHb'] = (record.price_subtotal * .05)
        elif (record.discount >= 45.0):
            record['x_studio_field_dakHb'] = (record.price_subtotal * .10)
        elif (record.discount >= 30.0):
            record['x_studio_field_dakHb'] = (record.price_subtotal * .15)
        elif (record.discount >= 25.0):
            record['x_studio_field_dakHb'] = (record.price_subtotal * .20)
        elif (record.discount >= 0.0):
            record['x_studio_field_dakHb'] = (record.price_subtotal * .25)

Edit : et il y a eu une autre erreur pour price_subtotal qui devrait être obtenue à partir de record. Edit2 : et idem avec discount

1
CZoellner 14 mars 2019 à 15:40

En fait, vous devez utiliser @ api.depends ('champs1', 'champs2', ..) tous les champs1 ou champs2 ont changé, votre valeur de commision va changer. pour l'exemple de code, vous pouvez trouver comment le système modifie le sous-total en fonction du prix du produit, de la quantité, de la remise et de la taxe.

0
Rinaldi 14 mars 2019 à 15:10