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.
