facturation: générer un avoir à la clôture d'une facture, si elle est négative (#89810) #188

Merged
lguerin merged 11 commits from wip/89810-invoicing-credit into main 2024-04-30 09:05:00 +02:00
Owner
No description provided.
lguerin added 11 commits 2024-04-23 13:35:30 +02:00
lguerin changed title from WIP: facturation: générer un avoir à la clôture d'une facture, si elle est négative (#89810) to facturation: générer un avoir à la clôture d'une facture, si elle est négative (#89810) 2024-04-23 13:41:26 +02:00
pmarillonnet requested review from pmarillonnet 2024-04-23 14:35:18 +02:00
Owner

Je commence à relire.

Je commence à relire.
pmarillonnet reviewed 2024-04-24 16:33:52 +02:00
pmarillonnet left a comment
Owner

Quelques trucs vus au passage et une interrogation de ma part.

Du détail, mais je changerais le message de 0007 (73f2cafd40) pour

invoicing: add credit cancellation fields (#89810)

ce qui ferait que ce ne serait plus le seul message de commit sans verbe de la série (d’autant plus que “credit” c’est aussi un verbe et donc ça porte un peu à confusion en l’état).

Quelques trucs vus au passage et une interrogation de ma part. Du détail, mais je changerais le message de 0007 (73f2cafd407) pour ``` invoicing: add credit cancellation fields (#89810) ``` ce qui ferait que ce ne serait plus le seul message de commit sans verbe de la série (d’autant plus que “credit” c’est aussi un verbe et donc ça porte un peu à confusion en l’état).
@ -404,2 +405,3 @@
try:
credit = Credit.objects.get(uuid=value, regie=self.regie)
credit = Credit.objects.get(
Q(pool__isnull=True) | Q(pool__campaign__finalized=True),
Owner

J’ai du mal à me représenter ce qui signifie cette contrainte de ne chercher que parmi les crédits soit rattachés à aucun pool, soit les crédits rattachés à un pool dont la campagne de paiement est terminée.

J’ai du mal à me représenter ce qui signifie cette contrainte de ne chercher que parmi les crédits soit rattachés à aucun pool, soit les crédits rattachés à un pool dont la campagne de paiement est terminée.
Author
Owner

On a trois types d'avoirs:

  • ceux qui seront générés lors de campagne (cette PR rend ce cas possible, mais ça sera systématisé avec un prochain ticket, campagne de type post-facturation, avec remboursement de réservations payées par panier mais l'enfant était absent pour un motif valable nécessitant un remboursement)
  • ceux qui sont générés via le panier
  • ceux qui sont générés via API, en clôture d'une facture négative (nouveauté de cette PR)

Pour les cas 2 et 3, les avoirs sont détachés des campagnes, autonomes, et sont consommables dès leur émission.

Pour le cas 1, les avoirs sont générés à une étape "finalisation" de la campagne, comme les factures définitives, mais sont encore annulables, par annulation du pool définitif. Puis le régisseur peut re-finaliser la campagne et re-générer factures et avoirs.
Il ne faut pas que les avoirs soient consommés, ni publiés, alors qu'ils sont dans cet état transitoire: attachés à une campagne non terminée.

On a trois types d'avoirs: - ceux qui seront générés lors de campagne (cette PR rend ce cas possible, mais ça sera systématisé avec un prochain ticket, campagne de type post-facturation, avec remboursement de réservations payées par panier mais l'enfant était absent pour un motif valable nécessitant un remboursement) - ceux qui sont générés via le panier - ceux qui sont générés via API, en clôture d'une facture négative (nouveauté de cette PR) Pour les cas 2 et 3, les avoirs sont détachés des campagnes, autonomes, et sont consommables dès leur émission. Pour le cas 1, les avoirs sont générés à une étape "finalisation" de la campagne, comme les factures définitives, mais sont encore annulables, par annulation du pool définitif. Puis le régisseur peut re-finaliser la campagne et re-générer factures et avoirs. Il ne faut pas que les avoirs soient consommés, ni publiés, alors qu'ils sont dans cet état transitoire: attachés à une campagne non terminée.
Owner

Hmm ok c’est plus clair pour moi, merci pour l’explication.

Hmm ok c’est plus clair pour moi, merci pour l’explication.
@ -2259,0 +2277,4 @@
assert credit.payer_address == invoice.payer_address
assert credit.total_amount == -invoice.total_amount == 3
assert credit.number == 1
assert credit.formatted_number == 'A%02d-%s-0000001' % (regie.pk, today.strftime('%y-%m'))
Owner

Hmm, il n’y a pas des cas où la différence de tz-awareness entre datetime et django.utils.timezonefait que la comparaison du jour risque de casser dans les tests ?

Hmm, il n’y a pas des cas où la différence de tz-awareness entre `datetime` et `django.utils.timezone`fait que la comparaison du jour risque de casser dans les tests ?
Author
Owner

yes, sans doute, mais il y a du datetime.date.today déjà un peu partout dans les tests, je vais faire un ticket pour corriger ça de manière plus globale, ok ?

yes, sans doute, mais il y a du datetime.date.today déjà un peu partout dans les tests, je vais faire un ticket pour corriger ça de manière plus globale, ok ?
Owner

Ouai peut-être à l’occasion si ça casse des tests (?)

Ouai peut-être à l’occasion si ça casse des tests (?)
Owner

(Ah, c’est #90048, déjà codé et déjà validé par ailleurs, top !)

(Ah, c’est #90048, déjà codé et déjà validé par ailleurs, top !)
@ -329,2 +350,4 @@
unit_amount=1,
)
other_credit = Credit.objects.create(
date_publication=datetime.date.today() + datetime.timedelta(days=1), # not publicated
Owner

(Du détail mais si tu as le courage de s/not publicated/not published/ sur les quatre occurrences dans cette PR, ce premier étant une forme archaïque dont on risque de ne pas se rappeler si on recherche ce commentaire dans les tests.)

(Du détail mais si tu as le courage de `s/not publicated/not published/` sur les quatre occurrences dans cette PR, ce premier étant une forme archaïque dont on risque de ne pas se rappeler si on recherche ce commentaire dans les tests.)
Author
Owner

ok :)

ok :)
Author
Owner

(corrigé sans fixup)

(corrigé sans fixup)
Owner

Yes, merci !

Yes, merci !
lguerin force-pushed wip/89810-invoicing-credit from 3b3dcf1c7f to 363c2bade0 2024-04-25 17:53:15 +02:00 Compare
Author
Owner

Du détail, mais je changerais le message de 0007 (73f2cafd40) pour

Fait

> Du détail, mais je changerais le message de 0007 (73f2cafd40) pour Fait
Owner

Du détail, mais je changerais le message de 0007 (73f2cafd40) pour

Fait

Vu, merci.

> > Du détail, mais je changerais le message de 0007 (73f2cafd40) pour > > Fait Vu, merci.
pmarillonnet approved these changes 2024-04-29 15:16:13 +02:00
pmarillonnet left a comment
Owner

Ack.

Ack.
lguerin changed target branch from wip/89732-invoicing-delete-pool to main 2024-04-30 08:53:44 +02:00
lguerin force-pushed wip/89810-invoicing-credit from 363c2bade0 to 976a33a5ef 2024-04-30 08:55:20 +02:00 Compare
lguerin merged commit 976a33a5ef into main 2024-04-30 09:05:00 +02:00
lguerin deleted branch wip/89810-invoicing-credit 2024-04-30 09:05:00 +02:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: entrouvert/lingo#188
No description provided.