Projet

Général

Profil

Development #84855

facturation: ajout de nouveaux champs sur les lignes de facturation

Ajouté par Lauréline Guérin il y a 5 mois. Mis à jour il y a 3 mois.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
18 décembre 2023
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

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

ligne-facture-panier.png (11,5 ko) ligne-facture-panier.png Lauréline Guérin, 18 décembre 2023 15:49

Révisions associées

Révision d492107e (diff)
Ajouté par Lauréline Guérin il y a 4 mois

invoicing: add event_slug field on line models (#84855)

Révision 302b9438 (diff)
Ajouté par Lauréline Guérin il y a 4 mois

invoicing: add agenda_slug field on line models (#84855)

Révision 7e085980 (diff)
Ajouté par Lauréline Guérin il y a 4 mois

api: use agenda_slug for statistics (#84855)

Révision 796c6770 (diff)
Ajouté par Lauréline Guérin il y a 4 mois

invoicing: add activity_label field on line models (#84855)

Révision 25a50132 (diff)
Ajouté par Lauréline Guérin il y a 4 mois

invoicing: add description field on line models (#84855)

Révision b7daa2dc (diff)
Ajouté par Lauréline Guérin il y a 4 mois

api: use description field for line from basket (#84855)

Révision 6e92b68b (diff)
Ajouté par Lauréline Guérin il y a 4 mois

invoicing: add description field to credit line model (#84855)

Révision 6d7f7110 (diff)
Ajouté par Lauréline Guérin il y a 4 mois

invoicing: add description field on journal line models (#84855)

Révision 96cae5a9 (diff)
Ajouté par Lauréline Guérin il y a 4 mois

invoicing: add event_label field to line models (#84855)

Historique

#1

Mis à jour par Lauréline Guérin il y a 5 mois

  • Description mis à jour (diff)
#2

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 :

#3

Mis à jour par Robot Gitea il y a 4 mois

  • Statut changé de En cours à Solution proposée
#4

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 :

#5

Mis à jour par Robot Gitea il y a 4 mois

  • Statut changé de En cours à Solution proposée
#6

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 :

#7

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 :

#8

Mis à jour par Transition automatique il y a 3 mois

  • Statut changé de Résolu (à déployer) à Solution déployée
#9

Mis à jour par Transition automatique il y a environ un mois

Automatic expiration

Formats disponibles : Atom PDF