Calculer le prix total d’un bloc de champs#

Il existe plusieurs méthodes en fonction du type de champ utilisé.

Méthode simple#

Dans un champ, dans le pré-remplissage, faites :

{{ form_var_IDENTIFIANT_DU_BLOC_DE_CHAMPS|getlist:"IDENTIFIANT_DU_CHAMP_DANS_LE_BDC"|sum }}

Champ liste alimenté par un modèle de fiche#

La procédure ci-dessous est à faire sur une autre page que celle où se trouve le bloc de champs.

Si votre prix est stocké dans un modèle de fiche, le récuperer va être un peu compliqué, voici la méthode.

Obtenir le “nom” des champs#

Premièrement, je vous conseille de poster une demande test et d’aller dans votre inspect, là dans la partie gabarit vous taperez :

{{ form_var_IDENTIFIANT_DU_BLOC_DE_CHAMPS|get:"data" }}

Cela vous permettra d’obtenir les “noms” des champs.

Exemple :

[
  {
    "bf2606c445-2a1f-4a71-a1bd-c5842207c9a1": "6",
    "bf9f805b18-b939-4a25-a645-74f233b88750": "11",
    "bf9f805b18-b939-4a25-a645-74f233b88750_display": "Barrière Nadar",
    "bf9f805b18-b939-4a25-a645-74f233b88750_structured": {
      "id": 11,
      "nom": "Barrière Nadar",
      "text": "Barrière Nadar",
      "price": "1,5",
      "prix_unitaire": "1",
      "caution_unitaire": "0.50"
    }
  },
  {
    "bf2606c445-2a1f-4a71-a1bd-c5842207c9a1": "2",
    "bf9f805b18-b939-4a25-a645-74f233b88750": "4",
    "bf9f805b18-b939-4a25-a645-74f233b88750_display": "Bornier électrique",
    "bf9f805b18-b939-4a25-a645-74f233b88750_structured": {
      "id": 4,
      "nom": "Bornier électrique",
      "text": "Bornier électrique",
      "price": "85",
      "prix_unitaire": "60",
      "caution_unitaire": "25"
    }
  }
]

Comme vous pouvez l’observer sur l’exemple ci-dessus, le nom des champs est changé par un identifiant assez barbare qu’il va falloir utiliser. Ils sont différents pour chaque bloc de champs.

Obtenir le champ prix_unitaire#

Le champ prix unitaire est ici accessible de cette façon :

Exemple :

{{ form_var_IDENTIFIANT_DU_BLOC_DE_CHAMPS|get:"data"|get:ligne|get:"bf9f805b18-b939-4a25-a645-74f233b88750_structured"|get:"prix_unitaire" }}

Ligne est ici un numéro de ligne (début 0).

Bien sûr, remplacer :

  • bf9f805b18-b939-4a25-a645-74f233b88750 par le “nom” du champ que vous avez obtenu précédemment

  • prix_unitaire par l’identifiant du champ que vous souhaitez obtenir.

Lister les prix unitaires#

Dans une donnée calculée, vous allez pouvoir lister les prix unitaires de cette façon :

{% for ligne in form_var_IDENTIFIANT_DU_BLOC_DE_CHAMPS|get:"data" %}
{{ ligne|get:"bf9f805b18-b939-4a25-a645-74f233b88750_structured"|get:"prix_unitaire" }}{% if not forloop.last %}|{% endif %}
{% endfor %}

Ce code va lister les prix unitaires de chaque ligne séparée par un |. Le not forloop.last permet de ne pas mettre de | à la fin de la liste.

Cas où il faut multiplier le prix unitaire par une quantité#

Ici le champ quantité est représenté par bf9f805b18-b939-4a25-a645-74f233b88750

{% for ligne in form_var_IDENTIFIANT_DU_BLOC_DE_CHAMPS|get:"data" %}
{% with ligne|get:"bf2606c445-2a1f-4a71-a1bd-c5842207c9a1"|decimal as quantite %}
{{ ligne|get:"bf9f805b18-b939-4a25-a645-74f233b88750_structured"|get:"prix_unitaire"|multiply:quantite }}{% if not forloop.last %}|{% endif %}
{% endwith %}
{% endfor %}

On stocke la quantité dans une variable temporaire quantite avec with, ce qui permet de multiplier le prix unitaire par la quantité.

Calculer le prix total#

Dans un champ texte, dans le préremplissage Django

{{ form_var_IDENTIFIANT_DONNEE_CALUCULEE|split:"|"|sum }}