Files
AzureAD\SylvainDUVERNAY 9e33a577e8 Project organisation
2026-05-08 08:56:26 +02:00

2.9 KiB

BR-PT-001 - Ajustement de la quantite theorique apres creation du contrat

Intent

Conserver la coherence entre la quantite theorique de la ligne d'achat, le lot virtuel associe et les quantites ouvertes stockees dans lot.qt.

Scope

  • Domaine: purchase_trade
  • Flux: modification de purchase.line.quantity_theorical apres creation du contrat
  • Priorite: bloquante

Inputs

  • Une purchase.line existe deja.
  • Son champ quantity_theorical est modifie via write.
  • Un lot unique de type virtual est rattache a la ligne.

Expected Behavior

Quand purchase.line.quantity_theorical est modifiee apres creation du contrat, le systeme doit recalculer le delta entre l'ancienne et la nouvelle valeur.

La regle s'applique au lot unique de type virtual rattache a la purchase.line.

Si delta > 0:

  • augmenter la quantite courante du lot virtual via set_current_quantity pour conserver l'historique lot.qt.hist
  • augmenter le lot.qt ouvert existant
  • si aucun lot.qt ouvert n'existe, en creer un nouveau avec le delta

Si delta < 0:

  • diminuer le lot.qt ouvert uniquement si la quantite ouverte disponible est suffisante
  • diminuer la quantite courante du lot virtual du meme delta
  • si aucun lot.qt ouvert n'existe ou si sa quantite est insuffisante, bloquer avec l'erreur Please unlink or unmatch lot

Definition du lot.qt ouvert:

  • lot_p = virtual lot
  • lot_s = None
  • lot_shipment_in = None
  • lot_shipment_internal = None
  • lot_shipment_out = None

Edge Cases

  • Si aucun lot virtual n'est trouve sur la ligne, la regle ne fait rien.

Examples

Exemple E1 - Augmentation simple

  • Donnees:
    • ancienne quantity_theorical = 100
    • nouvelle quantity_theorical = 120
    • lot.qt ouvert = 40
  • Attendu:
    • lot virtual augmente de 20
    • lot.qt ouvert passe de 40 a 60

Exemple E2 - Augmentation sans lot.qt ouvert

  • Donnees:
    • ancienne quantity_theorical = 100
    • nouvelle quantity_theorical = 110
    • aucun lot.qt ouvert
  • Attendu:
    • lot virtual augmente de 10
    • creation d'un lot.qt ouvert a 10

Exemple E3 - Diminution possible

  • Donnees:
    • ancienne quantity_theorical = 100
    • nouvelle quantity_theorical = 90
    • lot.qt ouvert = 25
  • Attendu:
    • lot virtual diminue de 10
    • lot.qt ouvert passe de 25 a 15

Exemple E4 - Diminution impossible

  • Donnees:
    • ancienne quantity_theorical = 100
    • nouvelle quantity_theorical = 80
    • lot.qt ouvert = 5
  • Attendu:
    • blocage avec Please unlink or unmatch lot

Impacted Files

  • modules/purchase_trade/purchase.py
  • modules/purchase_trade/lot.py

Tests

Couvrir au minimum:

  • augmentation avec lot.qt ouvert existant
  • augmentation sans lot.qt ouvert
  • diminution possible
  • diminution impossible avec erreur

Source

  • Decision metier documentee dans les commentaires de purchase_trade.purchase.Line.write.