Development #84855
facturation: ajout de nouveaux champs sur les lignes de facturation
0%
Description
Pour simplifier des parties du code, et simplifier la génération des factures, j'aimerais ajouter plusieurs champs sur les models de ligne de facturation:
- event_slug
- agenda_slug
- activity_label
- description
1/ event_slug contiendra un slug de type "<agenda_slug>@<event_slug>", avec dans event_slug l'event primaire s'il s'agit d'un event récurrent.
Ceci pour éviter d'avoir du code comme:
slug = ( '%s@%s' % (line.details['agenda'], line.details['primary_event']) if line.details.get('agenda') else line.slug )
dans https://git.entrouvert.org/entrouvert/lingo/src/commit/df44321d038d1a493560763a69c5c4e6aabeb7ab/lingo/invoicing/models.py#L858, pour l'ordering des lignes
ou comme:
slug = ( '%s@%s' % (line['details__agenda'], line['details__primary_event']) if line['details__agenda'] else line['slug'] )
et
agenda_slug, event_slug = value.split('@') lines = line_model.objects.filter( Q(details__agenda=agenda_slug, details__primary_event=event_slug) | Q(slug=value) ).values('invoice')
dans https://git.entrouvert.org/entrouvert/lingo/src/commit/25b347439ea27011ce5f7323dbf388c4a5b03406/lingo/invoicing/forms.py#L211 et https://git.entrouvert.org/entrouvert/lingo/src/commit/25b347439ea27011ce5f7323dbf388c4a5b03406/lingo/invoicing/forms.py#L253, pour filtrer la liste des factures et en extraire les factures qui mentionnent un event en particulier.
dans line.slug, on peut avoir un slug de type "<agenda_slug>@<event_slug>" si on est sur un event non récurrent, dans une campagne de facturation.
L'idée de est de toujours avoir la bonne valeur dans event_slug pour éviter d'aller voir dans un champ ou dans un autre.
(et ça pourrait être utilisé par les stats, pourquoi pas)
2/ agenda_slug, sans surprise, on y met le slug de l'agenda, ça permet de simplifier pas mal de code, et d'avoir des stats plus précises:
dans https://git.entrouvert.org/entrouvert/lingo/src/commit/df44321d038d1a493560763a69c5c4e6aabeb7ab/lingo/invoicing/models.py#L866 par exemple on récupère le slug de l'agenda depuis le slug buildé ou le slug de la ligne, mais dans les stats on filtre sur les agendas de la régie: https://git.entrouvert.org/entrouvert/lingo/src/commit/e0b9091c10e109a8964403566e74c8f1bd8641c8/lingo/api/views/statistics.py#L115 ce qui est faux: il faut filtrer les factures en fonction des lignes de facturation et de l'agenda concerné par chaque ligne.
3/ activity_label contiendra, dans le cadre d'une campagne de facturation, le label de l'agenda, pour éviter du code comme:
if '@' in slug: agenda_slug = slug.split('@')[0] line.agenda = agendas_by_slug.get(agenda_slug)
utilisé après dans la génération de la facture:
{% if line.agenda %} <i>{{ line.agenda.label }}</i> <br /> {% endif %}
Mais on pourra aussi y mettre ce qu'on veut, dans le cadre d'une facture créée par api, ou via un panier, pour pouvoir générer à la fin une jolie facture avec mention du lieu d'accueil ou tout autre label.
(exemple sur https://dev.entrouvert.org/attachments/77109, "Elem Victor Hugo", c'est le label de l'agenda dans le cadre d'une campagne de facturation)
4/ description, c'est pour y mettre du détail comme par exemple les jours concernés par une ligne de facturation (cf la colonne détails sur https://dev.entrouvert.org/attachments/77109)
Actuellement c'est géré comme ceci:
<td class="details"> {% for d in line.details.dates %}{{ d|parse_date|date:"Dd" }}{% if not forloop.last %}, {% endif %}{% endfor %} </td>
Mais on pourrait stocker directement le bon détail des jours sur la ligne de facturation, qui serait par la même occasion renseignable dans le cadre d'une facture créée par api, ou via un panier.
Actuellement pour une facture de panier, je rajoute le détail des jours dans le label de la ligne, mais au niveau du rendu de la facture ça fait trop d'information dans la première colonne, l'affichage est moche (cf copie d'écran).
Fichiers
Révisions associées
invoicing: add agenda_slug field on line models (#84855)
api: use agenda_slug for statistics (#84855)
invoicing: add activity_label field on line models (#84855)
invoicing: add description field on line models (#84855)
api: use description field for line from basket (#84855)
invoicing: add description field to credit line model (#84855)
invoicing: add description field on journal line models (#84855)
invoicing: add event_label field to line models (#84855)
Historique
Mis à jour par Robot Gitea il y a 5 mois
- Statut changé de Nouveau à En cours
Lauréline Guérin (lguerin) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/lingo/pulls/150
- Titre : WIP: facturation: ajout de nouveaux champs sur les lignes de facturation (#84855)
- Modifications : https://git.entrouvert.org/entrouvert/lingo/pulls/150/files
Mis à jour par Robot Gitea il y a 4 mois
- Statut changé de Solution proposée à En cours
Lauréline Guérin (lguerin) a commencé à travailler sur une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/lingo/pulls/150
- Titre : WIP: facturation: ajout de nouveaux champs sur les lignes de facturation (#84855)
- Modifications : https://git.entrouvert.org/entrouvert/lingo/pulls/150/files
Mis à jour par Robot Gitea il y a 4 mois
- Statut changé de Solution proposée à Solution validée
Paul Marillonnet (pmarillonnet) a approuvé une pull request sur Gitea concernant cette demande :
Mis à jour par Robot Gitea il y a 4 mois
- Statut changé de Solution validée à Résolu (à déployer)
Lauréline Guérin (lguerin) a mergé une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/lingo/pulls/150
- Titre : facturation: ajout de nouveaux champs sur les lignes de facturation (#84855)
- Modifications : https://git.entrouvert.org/entrouvert/lingo/pulls/150/files
Mis à jour par Transition automatique il y a 3 mois
- Statut changé de Résolu (à déployer) à Solution déployée
invoicing: add event_slug field on line models (#84855)