facturation: attacher les paiements aux lignes de facturation (#81190) #99
No reviewers
Labels
No Label
No Milestone
No Assignees
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: entrouvert/lingo#99
Loading…
Reference in New Issue
There is no content yet.
Delete Branch "wip/81190-invoicing-invoice-line-payment"
Deleting a branch is permanent. Although the deleted branch may exist for a short time before cleaning up, in most cases it CANNOT be undone. Continue?
9951cee1b4
toe379914e8c
WIP: facturation: attacher les paiements aux lignes de facturation (#81190)to facturation: attacher les paiements aux lignes de facturation (#81190)0001: tout ce qu'il faut pour passer de paiements attachés à des factures, à des paiements attachés à des lignes de facturation
0002: avec le commit précédent, on a dans l'UI et dans les pdf, une ligne par par ligne de facturation. Si un parent a une facture avec 10 lignes de facturation mais qu'il a fait un seul paiement, c'est moche. Donc rétropédalage et mécanique pour aggréger les lignes par paiement et facture. (vu avec Cédric)
0003: demande de Cédric, pour chaque ligne de facturation, dans l'UI, avoir le détail des lignes de paiement associées, repliées par défaut (cf screenshot)
0004: wording, vu avec Cédric
@pducroquet je te mets en relecteur car réécriture des triggers :)
(un autre relecteur pour la partie python est requis)
9560f20435
toaa4ae99695
facturation: attacher les paiements aux lignes de facturation (#81190)to facturation: attacher les paiements aux lignes de facturation (#81190)aa4ae99695
to26610ad551
Je prends la relecture de la partie python.
26610ad551
to51f20f4c0f
51f20f4c0f
to0bfcc762ac
Côté python juste une petite chose que je n’ai pas comprise, le reste est clair pour moi.
Aussi juste des lignes de debug introduites dans du JS dans 0003 et qui sont retirées dans 0004 (les deux
console.log()
), il faudrait que ça n’apparaisse pas du tout.@ -0,0 +16,4 @@
) # trigger not played yet, remaining_amount is not up to date
if not line.remaining_amount:
continue
paid_amount = decimal.Decimal(min(line.remaining_amount, remaining_amount))
Du point de vue fonctionnel ici je n’ai pas capté en quoi le rattachement aux lignes implique ce re-calcul des montants payés, ni en quoi c’est le minimum des deux valeurs trouvées qui nous intéresse ici.
On avait une ligne de paiement globale pour toute la facture: exemple 42€ affectés à une facture pour laquelle il restait 50€ à payer.
On veut attacher les lignes de paiement aux lignes de facturation (pour les stats, et d'autres besoins comptables, mais surtout pour ne pas permettre de payer un ligne de repas en cesu).
Imaginons qu'on ait dans cette facture 2 lignes à 20€ et 30€.
Première ligne, il faut y affecter seulement 20€, et non la totalité des 42€. Donc min(20, 42)
remaining_amount passe à 42-20 = 22€
Deuxième ligne, on peut y affecter la totalité du reste à affecter, 22€, soit min(30, 22)
(note: les triggers s'occupent de calculer remaining_amount à partir de total_amount et paid_amount, et garantissent que paid_amount ne dépasse pas total_amoun)
Peut-être que les noms de variable sont mal choisis, je vais revoir ça (même logique dans la migration et dans la méthode make_payment)
Ah oui ok, je comprends mieux, merci.
0bfcc762ac
toa3c24913c9
a3c24913c9
to7cfe867138
7cfe867138
toe67a2df8ce
Vu avec @pducroquet, une contrainte exprimée dans un trigger transformée en contrainte au niveau du modèle:
(j'ai aussi ajouté des tests avec des lignes de facturation négatives et des paiements dessus, ajusté la contrainte pour les montants négatifs)
Ack de mon côté, partie python donc.
C'est bon pour moi côté SQL