From 25bfa575edce6faab7375634181f4efd2cd086d8 Mon Sep 17 00:00:00 2001 From: quark Date: Thu, 13 Mar 2025 23:56:10 +0100 Subject: [PATCH] Another tables and doc --- .../wrapped/1/wrapped_view_club.html | 4 +- apps/wrapped/views.py | 6 +- docs/_static/img/graphs/wrapped.svg | 118 ++++++++++++++++++ docs/apps/index.rst | 3 + docs/apps/wrapped.rst | 108 ++++++++++++++++ 5 files changed, 234 insertions(+), 5 deletions(-) create mode 100644 docs/_static/img/graphs/wrapped.svg create mode 100644 docs/apps/wrapped.rst diff --git a/apps/wrapped/templates/wrapped/1/wrapped_view_club.html b/apps/wrapped/templates/wrapped/1/wrapped_view_club.html index 6d295e9e..35eca18e 100644 --- a/apps/wrapped/templates/wrapped/1/wrapped_view_club.html +++ b/apps/wrapped/templates/wrapped/1/wrapped_view_club.html @@ -23,9 +23,9 @@ SPDX-License-Identifier: GPL-3.0-or-later let d1 = document.getElementById("consumer"); let d2 = document.getElementById("creditor"); if (con) { d1.textContent = {{ big_consumer | safe }}[0] + " " + gettext("with") + " " + {{ big_consumer | safe}}[1] + "€";} - else { d1.textContent = gettext({% trans "Infortunately, you doesn't have consumer this year" %});}; + else { d1.textContent = gettext("{% trans "Infortunately, you doesn't have consumer this year" %}");}; if (cre) { d2.textContent = {{ big_creancier | safe}}[0] + " " + gettext("with") + " " + {{ big_creancier | safe}}[1] + "€";} - else { d2.textContent = gettext({% trans "Congratulations you are a real rat !" %}); }; + else { d2.textContent = gettext("{% trans "Congratulations you are a real rat !" %}"); }; {% endblock %} diff --git a/apps/wrapped/views.py b/apps/wrapped/views.py index c787fd96..1300e1bc 100644 --- a/apps/wrapped/views.py +++ b/apps/wrapped/views.py @@ -20,9 +20,9 @@ class WrappedListView(ProtectQuerysetMixin, LoginRequiredMixin, MultiTableMixin, Display all Wrapped, and classify by year """ model = Wrapped - tables =[ - lambda data: WrappedTable(data, prefix="public-"), - lambda data: WrappedTable(data, prefix="personnal-"), + tables = [ + lambda data: WrappedTable(data, prefix="public-"), + lambda data: WrappedTable(data, prefix="personnal-"), ] template_name = 'wrapped/wrapped_list.html' extra_context = {'title': _("List of wrapped")} diff --git a/docs/_static/img/graphs/wrapped.svg b/docs/_static/img/graphs/wrapped.svg new file mode 100644 index 00000000..e76497dc --- /dev/null +++ b/docs/_static/img/graphs/wrapped.svg @@ -0,0 +1,118 @@ + + + + + + +model_graph + + + +wrapped_models_Bde + + +     +    Bde     +     +id +     +     +AutoField +     +     +date_end +     +     +DateTimeField +     +     +date_start +     +     +DateTimeField +     +     +name +     +     +CharField +     + + + + +wrapped_models_Wrapped + + +     +    Wrapped     +     +id +     +     +AutoField +     +     +bde +     +     +ForeignKey (id) +     +     +note +     +     +ForeignKey (id) +     +     +data_json +     +     +TextField +     +     +generated +     +     +BooleanField +     +     +public +     +     +BooleanField +     + + + + +wrapped_models_Wrapped->wrapped_models_Bde + + + bde (+) + + + +note_models_notes_Note + + +   +Note +   + + + +wrapped_models_Wrapped->note_models_notes_Note + + + note (+) + + + +\n\n\n + + + diff --git a/docs/apps/index.rst b/docs/apps/index.rst index e16f5196..95315eb8 100644 --- a/docs/apps/index.rst +++ b/docs/apps/index.rst @@ -14,6 +14,7 @@ Applications de la Note Kfet 2020 logs treasury wei + wrapped La Note Kfet 2020 est un projet Django, décomposé en applications. Certaines applications sont développées uniquement pour ce projet, et sont indispensables, @@ -69,4 +70,6 @@ Applications facultatives Interface de gestion pour les trésorièr⋅es, émission de factures, remises de chèque, statistiques... * `WEI `_ : Interface de gestion du WEI. +* `Wrapped `_ : + Récapitulatif personnalisé annuel de statitiques globales et personnelles. diff --git a/docs/apps/wrapped.rst b/docs/apps/wrapped.rst new file mode 100644 index 00000000..199572dc --- /dev/null +++ b/docs/apps/wrapped.rst @@ -0,0 +1,108 @@ +Wrapped +======= + +Cette application montre les statistiques annuelles des utilisateur·ice·s et/ou des clubs. + +Modèles +------- + +Bde +~~~ + +Le modèle ``Bde`` contient des informations relatifs à un BDE : + +* ``name`` : ``CharField``, nom du BDE. +* ``date_start`` : ``DateField``, date de prise de fonction du bureau BDE considéré. +* ``date_end`` : ``DateField``, date de démission du bureau BDE considéré. + +Wrapped +~~~~~~~ + +Contient les informations sur un wrapped : + +* ``generated`` : ``BooleanField``, indique si le wrapped a été généré ou non. +* ``public`` : ``BooleanField``, indique si le wrapped est visible de tous les utilisateur·ice·s ou non. +* ``bde`` : ``ForeignKey(Bde)``, BDE auquel le wrapped correspond. +* ``note`` : ``ForeignKey(Note)``, note à laquelle le wrapped correspond. +* ``data_json`` : ``TextField``, diverses statistique concernant les notes durant le mandat BDE + considéré ou sur la NoteKfet dans sa globalité. + +Graphe des modèles +~~~~~~~~~~~~~~~~~~ + +.. image:: ../_static/img/graphs/wrapped.svg + :width: 960 + :alt: Graphe des modèles de l'application Wrapped + +Fonctionnement +-------------- + +Création d'un BDE +~~~~~~~~~~~~~~~~~ + +Seul un⋅e respo info peut créer un BDE. Pour cela, se rendre dans l'onglet « Admin »., puis « BDE » et +enfin « + Ajouter BDE ». Iel doit renseigner, les dates de début et de fin du bureau BDE ainsi que le +nom de la liste. + +Génération des wrappeds +~~~~~~~~~~~~~~~~~~~~~~~ + +Seul un·e respo info peut générer des wrappeds. Pour une utilisation annuelle classique, iel exécute la +commande : + +``./manage.py generate_wrapped -b "bde_name" -u adh -c active`` + +Pour une utilisation plus technique de cette commande se référer à sa documentation + +``./manage.py help generate_wrapped`` + +Le script prend une dizaine de minutes pour générer tous les wrappeds. + +Créer ses propres wrappeds +-------------------------- + +Cette section est plus technique et s'addresse plutôt à des respos infos en cours de mandat qui voudrai +faire les wrappeds de leur propre BDE. + +Contenu +~~~~~~~ + +Il est fortement conseillé de bien réfléchir à ce que l'on souhaite mettre sur un wrapped, plusieurs +critères sont à prendre compte : + +* compréhension, est-ce que la donnée fait sens auprès des utilisateur·ice·s. +* pertinence, est-ce que la donnée fonctionne pour un grand nombre d'utilisateur. +* faisabilité, est-ce que le temps de calcul est suffisament rapide. +* complexité, est-ce que c'est trop compliqué à coder. + +Script +~~~~~~ + +Le script *generate_wrapped* fonctionne de la manière suivante : + +* ``convert_to_note`` : en fonction des arguments d'entrée, il récupére toutes les notes dont le·s + wrapped·s va/vont être généré·s + ou regénéré·s. +* ``global_data`` : le script génére ensuite des statistiques globales qui concernent pas qu'une seule + note (nombre de soirée, classement, etc). +* ``unique_data`` : le script génére les statitiques uniques à chaque note, et rajoute des données + globales si nécessaire, pour chaque note on souhaite avoir un json avec toutes les données qui + seront dans le wrapped. +* ``make_wrapped`` : enfin, le cas échéant, pour chaque bde, et pour chaque note, le wrapped est crée + ou modifié, et enregistré, s'il est crée il est par défault non public. + +Seules les fonctions ``global_data`` et ``unique_data`` sont à modifier, pour implementer un nouveau +BDE. + +Template +~~~~~~~~ + +Il y a au moins deux templates a écrire pour chaque bde : + +* ``templates/wrapped/{bde_id}/wrapped_view_club.html``: le template pour les wrappeds des clubs +* ``templates/wrapped/{bde_id}/wrapped_view_user.html``: le template pour les wrappeds des + utilisateur·ice·s + +Il est conseillé de suivre la même arborescence pour les fichiers statics (fonts personnalisées, +images, css, etc). De même, il est conseillé de créé un fichier +``templates/wrapped/{bde_id}/wrapped_base.html`` et d'étendre cette template.