Facturation: paramétrage des dates d'une campagne (#75561) #44

Merged
lguerin merged 6 commits from wip/75561-campaign-dates into main 2023-04-13 10:22:07 +02:00
Owner
No description provided.
Author
Owner

0001: du nettoyage, la commande était là début pour tester des trucs avant d'avoir une UI
0002: ajout des nouvelles dates dans les models
0003: suppression de date_issue du form "de base" (== configuration de base de la campagne)
0004: ajout d'un form pour les dates, et affichage des dates dans un onglet dédié
0005: à l'update des dates, mettre à jour les dates sur les factures
0006: invalidation de la campagne si update via le form "de base" (parce que si modification des dates de début/fin, des agendas etc, le dernier pool n'est peut-être plus cohérent)

0001: du nettoyage, la commande était là début pour tester des trucs avant d'avoir une UI 0002: ajout des nouvelles dates dans les models 0003: suppression de date_issue du form "de base" (== configuration de base de la campagne) 0004: ajout d'un form pour les dates, et affichage des dates dans un onglet dédié 0005: à l'update des dates, mettre à jour les dates sur les factures 0006: invalidation de la campagne si update via le form "de base" (parce que si modification des dates de début/fin, des agendas etc, le dernier pool n'est peut-être plus cohérent)
lguerin force-pushed wip/75561-campaign-dates from eed9c4b354 to f0456833fa 2023-03-30 15:15:29 +02:00 Compare
lguerin force-pushed wip/75561-campaign-dates from f0456833fa to 205b6d78ca 2023-03-30 15:59:46 +02:00 Compare
Owner

Je commence à relire.

Je commence à relire.
lguerin changed target branch from wip/75558-delete-final-pool to main 2023-04-11 16:09:14 +02:00
pmarillonnet reviewed 2023-04-12 13:57:03 +02:00
pmarillonnet left a comment
Owner

Quelques mini remarques attrapées en relisant, dis-moi ce que tu en penses. De mon coté je vais tester en local en copiant dans mon devinst les données d’initialisation de ton test_edit_campaign_dates pour voir à quoi ressemble cet écran d’édition de dates.

Quelques mini remarques attrapées en relisant, dis-moi ce que tu en penses. De mon coté je vais tester en local en copiant dans mon devinst les données d’initialisation de ton `test_edit_campaign_dates` pour voir à quoi ressemble cet écran d’édition de dates.
@ -68,0 +96,4 @@
def clean(self):
cleaned_data = super().clean()
if (
Owner

Intuitivement on pourrait se dire qu’il faut le même genre de vérification de la cohérence / prévention anachronique sur date_debit en plus de ces trois autres champs, non ?

Intuitivement on pourrait se dire qu’il faut le même genre de vérification de la cohérence / prévention anachronique sur date_debit en plus de ces trois autres champs, non ?
Author
Owner

peut-être, je ne sais pas, ça n'a pas été précisé lors du dernier eoday, contrairement à ces trois dates là. On pourra toujours ajouter une vérif plus tard ?

peut-être, je ne sais pas, ça n'a pas été précisé lors du dernier eoday, contrairement à ces trois dates là. On pourra toujours ajouter une vérif plus tard ?
Owner

Ok, on pourra demander lors du prochain eoday oui.

Ok, on pourra demander lors du prochain eoday oui.
pmarillonnet marked this conversation as resolved
@ -68,0 +116,4 @@
invoice_qs = Invoice.objects.filter(pool__campaign=self.instance)
for qs in [draft_invoice_qs, invoice_qs]:
qs.update(
Owner

Pareil ici, pourquoi on exclut date_debit de la mise à jour des queryset ?

Pareil ici, pourquoi on exclut date_debit de la mise à jour des queryset ?
Author
Owner

c'est fait juste en dessous, uniquement pour les factures en prélèvement auto (pas de date de prélèvement pour une facture qui n'est pas en prélèvement auto)

c'est fait juste en dessous, uniquement pour les factures en prélèvement auto (pas de date de prélèvement pour une facture qui n'est pas en prélèvement auto)
Owner

Oulà oui pardon, fatigue :)

Oulà oui pardon, fatigue :)
pmarillonnet marked this conversation as resolved
@ -333,1 +337,4 @@
date_publication = models.DateField(_('Publication date'))
date_payment_deadline = models.DateField(_('Payment deadline'))
date_issue = models.DateField(_('Issue date'))
date_debit = models.DateField(_('Debit date'), null=True)
Owner

Pas compris dans le code ce qui justifie que seul ce champ de date de débit, et pour le modèle AbstractInvoice seulement, est nullable :(

Pas compris dans le code ce qui justifie que seul ce champ de date de débit, et pour le modèle AbstractInvoice seulement, est nullable :(
Author
Owner

parce que pas de date de prélèvement si direct_debit = False :)

parce que pas de date de prélèvement si direct_debit = False :)
Owner

Ok mais je ne comprends pas fonctionnellement ce que ça veut dire que ce champ est nullable alors que le champ similaire date_debit sur une campagne ne l’est pas, et est en default=now à la place.

Ok mais je ne comprends pas fonctionnellement ce que ça veut dire que ce champ est nullable alors que le champ similaire `date_debit` sur une campagne ne l’est pas, et est en `default=now` à la place.
Author
Owner

Le default sur Campaign c'était surtout pour gérer la migration; dans le formulaire de création d'une campagne, on initialise ces dates à date_end (la date de fin de la campagne qui vient d'être saisie).
date_debit n'est pas nullable sur une campagne car il nous faut définir une valeur à reporter sur les factures en prélèvement auto.

Pour une facture donnée, cette date de débit est vraiment nulle si payer_direct_debit est False: pas de prélèvement auto, donc pas de date de prélèvement.

Je m'étais posée la question de ne pas reporter ces dates sur les factures et plutôt aller les chercher sur la campagne liée. Mais je dois ajouter plus tard de quoi créer des factures hors campagne (cas du parent qui vient au guichet pour réserver le séjour au ski, le paie toute de suite, et repart avec une facture acquittée), donc dans le doute j'ai laissé le report des dates de campagne à facture. En me disant que du code, ça peut se refactorer.

Le default sur Campaign c'était surtout pour gérer la migration; dans le formulaire de création d'une campagne, on initialise ces dates à date_end (la date de fin de la campagne qui vient d'être saisie). date_debit n'est pas nullable sur une campagne car il nous faut définir une valeur à reporter sur les factures en prélèvement auto. Pour une facture donnée, cette date de débit est vraiment nulle si payer_direct_debit est False: pas de prélèvement auto, donc pas de date de prélèvement. Je m'étais posée la question de ne pas reporter ces dates sur les factures et plutôt aller les chercher sur la campagne liée. Mais je dois ajouter plus tard de quoi créer des factures hors campagne (cas du parent qui vient au guichet pour réserver le séjour au ski, le paie toute de suite, et repart avec une facture acquittée), donc dans le doute j'ai laissé le report des dates de campagne à facture. En me disant que du code, ça peut se refactorer.
Owner

Ok, ça fait sens, je comprends mieux, merci pour l’explication.

Ok, ça fait sens, je comprends mieux, merci pour l’explication.
pmarillonnet marked this conversation as resolved
@ -0,0 +13,4 @@
{% block breadcrumb %}
{{ block.super }}
<a href="{% url 'lingo-manager-invoicing-campaign-detail' regie.pk object.pk %}">{{ object }}</a>
Owner

Niveau UI, sur cette page où on édite des dates, avoir un lien vers la campagne juste présenté avec {{ object }} ça va faire label (date de début - date de fin). J’ai peur que ça fasse trop de dates et qu’on perde des gens en cours de route. Peut-être qu’on pourrait simplement mettre {{ object.label }} ?

Niveau UI, sur cette page où on édite des dates, avoir un lien vers la campagne juste présenté avec `{{ object }}` ça va faire `label (date de début - date de fin)`. J’ai peur que ça fasse trop de dates et qu’on perde des gens en cours de route. Peut-être qu’on pourrait simplement mettre `{{ object.label }}` ?
Author
Owner

c'est dans une popup, donc on ne voit pas le breadcrumb (sauf si validation du form+errors), mais tu as raison, je vais modifier ça

c'est dans une popup, donc on ne voit pas le breadcrumb (sauf si validation du form+errors), mais tu as raison, je vais modifier ça
Owner

D’ac, merci.

D’ac, merci.
pmarillonnet marked this conversation as resolved
lguerin added 6 commits 2023-04-12 15:24:27 +02:00
Owner

De mon coté je vais tester en local en copiant dans mon devinst les données d’initialisation de ton test_edit_campaign_dates pour voir à quoi ressemble cet écran d’édition de dates.

Étrange, de mon coté, dans mon shell django je dois rajouter une date_issue et une date_payment_deadline explicites à l’initialisation de l’objet Campaign de ce test (sans quoi ça me claque une erreur de valeur NULL viole la contrainte NOT NULL de la colonne […]). Pourtant dans tox le test passe nickel, pas compris.

Sinon pour l’écran en lui même c’est bon pour moi, j’ai pu tester, c’est top.

> De mon coté je vais tester en local en copiant dans mon devinst les données d’initialisation de ton `test_edit_campaign_dates` pour voir à quoi ressemble cet écran d’édition de dates. Étrange, de mon coté, dans mon shell django je dois rajouter une `date_issue` et une `date_payment_deadline` explicites à l’initialisation de l’objet Campaign de ce test (sans quoi ça me claque une erreur de `valeur NULL viole la contrainte NOT NULL de la colonne […]`). Pourtant dans tox le test passe nickel, pas compris. Sinon pour l’écran en lui même c’est bon pour moi, j’ai pu tester, c’est top.
pmarillonnet approved these changes 2023-04-13 09:48:35 +02:00
pmarillonnet left a comment
Owner

C’est bon pour moi. Merci pour tes explications sur les trucs qui restaient flous pour moi à la relecture.

C’est bon pour moi. Merci pour tes explications sur les trucs qui restaient flous pour moi à la relecture.
lguerin merged commit 21240748e7 into main 2023-04-13 10:22:07 +02:00
lguerin deleted branch wip/75561-campaign-dates 2023-04-13 10:22:08 +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#44
No description provided.