Réduction prépayé

Moyen de paiment

Un prépayé est considéré comme une moyen de paiement mais à pour effet une réduction sur les lignes de cinéma uniquement (line.lineType=show).
A chaque utilisation d’un prépayé pour un panier, on ajout un moyen de paiment qui a une valeur de zéro au paiement.
Ce moyen de paiement est un cas particulier.

{
    "paymentMethod": "prepaid",
    "amount": 0,
    "totalPaid": 0,
    "entryPaid": true,
    ...
    "prepaidEntry": {
        "prepaidId": "7bc8fcf3-45fd-4b10-817a-b347500e79d4", // id du prépayé utilisé pour se panier
        "amountHT": "1194" // montant HT théorique du prépayé
    }
}

A l’ajout d’un nouveau prépayé, il faut vérifier que sur toutes les lignes du panier de type show (même si un prépayé est déjà liéé) :

  • line.attachItem soit null
  • line.discountAmount égale à 0
  • line.amountRealHT égale à line.amountHT

Afin de repositionner les prépayés à des lignes de type show qui conviennent le mieux.

Calcul de la réduction

Pour le calcul de la réduction avec un prépayé, cette réduction se décompose en deux étapes :

  1. Lier les prépayés au ligne de panier de type show
  2. Applique la réduction

Etape 1 : Lier les prépayés au ligne de panier de type show

Pour affecter les prépayés aux lignes de panier de type show, on parcours un par un les prépayés et on selectionne la ligne qui génère le moins de reste à payer.

Deux étapes :

Match exacte

SI le montant théorique du prépayé corresponds exactement à un montant d’une ligne de type show
ALORS on attache le prépayé à cette ligne
SINON on trouve le meilleur show pour appliquer le prépayé selon le plus petit montant à payer

Trouver le meilleur show pour appliquer le prépayé

Calcul du montant du reste à payer entre les places show du panier et le montant théorique du prépayé courant.

  1. On récupère tous les montants positives (le client ne perd pas d’argent)
    On selectionne la ligne de type show qui génère le montant à payer le plus petit.
    Et on attache le prépayé courant à ligne.

Si il n’y a aucun montant positives, on récupère tous les montant negatives.

  1. On récupère tous les montants negatives (le client perd de l’argent)
    On selectionne la ligne de type show qui génère le montant à payer le plus petit.
    Et on attache le prépayé courant à ligne.

Au matching du prépayé à la ligne

Lors d’un matching, on renseigne à la ligne de panier, le champ line.attachItem. Par défaut, elle est null.

AttachItem :

{
    "itemType": "prepaid", // Item attaché à la ligne (prepaid ou card)
    "itemId": "abc25f84", // id de l'item
    "paymentEntryId": "abc25f84" //
}

On alimente, avec le prix théorique du prépayé, le montant de réduction de la ligne (line.discountAmount) pour le calcul de prix HT avec réduction.

line.discountAmount = preapid.amountTheoric

Etape 2 : Calcule de ligne de vente

Calculer le montant HT d’une ligne de panier, si un prépayé / carte est lié.

line.amountRealHT = line.amountRealHT - line.discountAmount

Si le montant de réduction est égale/supérieur au montant HT de la ligne, le montant de ligne HT remisé vaut 0.

Remarque : montant théoric est hors taxe