Create Apps/WEI

ynerant 2020-04-24 00:31:24 +02:00
parent d65685ff7e
commit 683ef43ddb
1 changed files with 91 additions and 0 deletions

91
Apps/WEI.md Normal file

@ -0,0 +1,91 @@
# WEI
Cette application gère toute la phase d'inscription au WEI.
# Modèles
## WEIClub
Le modèle `WEIClub` hérite de `Club` et contient toutes les informations d'un WEI.
* `year` : `PositiveIntegerField` unique, année du WEI.
* `date_start` : `DateField`, date de début du WEI.
* `date_end` : `DateField`, date de fin du WEI.
Champs hérités de `Club` de l'application `member` :
* `parent_club` : `ForeignKey(Club)`. Ce champ baut toujours `Kfet` dans le cas d'un WEI : on doit être membre du club Kfet pour participer au WEI.
* `email` : `EmailField`, adresse e-mail sur laquelle contacter les gérants du WEI.
* `membership_start` : `DateField`, date à partir de laquelle il est possible de s'inscrire au WEI.
* `membership_end` : `DateField`, date de fin d'adhésion possible au WEI.
* `membership_duration` : `PositiveIntegerField`, inutilisé dans le cas d'un WEI, vaut `None`.
* `membership_fee_paid` : `PositiveIntegerField`, montant de la cotisation (en centimes) pour qu'un élève normalien (donc rémunéré) puisse adhérer.
* `membership_fee_unpaid` : `PositiveIntegerField`, montant de la cotisation (en centimes) pour qu'un étudiant normalien (donc non rémunéré) puisse adhérer.
* `name` : `CharField`, nom du WEI.
* `require_memberships` : `BooleanField`, vaut toujours `True`.
## Bus
Contient les informations sur un bus allant au WEI.
* `wei` : `ForeignKey(WEIClub)`, WEI auquel ce bus est rattaché.
* `name` : `CharField`, nom du bus. Le champ est unique pour le WEI attaché.
* `description` : `TextField`, description textuelle de l'ambiance du bus.
* `information_json` : `TextField`, diverses informations non publiques qui permettent d'indiquer divers paramètres pouvant varier selon les années permettant l'attribution des bus aux 1A.
Il est souhaitable de créer chaque année un bus "Staff" (non accessible aux 1A bien évidemment) pour les GC WEI qui ne monteraient pas dans un bus.
## BusTeam
Contient les informations d'une équipe WEI.
* `wei` : `ForeignKey(WEIClub)`, WEI auquel cette équipe est rattachée.
* `name` : `CharField`, nom de l'équipe.
* `color` : `PositiveIntegerField`, entier entre 0 et 16777215 = 0xFFFFFF représentant la couleur du T-Shirt. La donnée se rentre en hexadécimal via un sélecteur de couleur. Cette information est purement cosmétique et n'est utilisée nulle part.
* `description` : `TextField`, description de l'équipe.
## WEIRole
Ce modèle étend de `Role`, qui ne contient qu'un champ `name` (`CharField`), le nom du rôle. Ce modèle ne permet que de dissocier les rôles propres au WEI des rôles s'appliquant pour n'importe quel club.
## WEIRegistration
Inscription au WEI, contenant les informations avant validation. Ce modèle est créé dès lors que quelqu'un se pré-inscrit au WEI.
* `user` : `ForeignKey(User)`, utilisateur qui s'est pré-inscrit. Ce champ est unique avec `wei`.
* `wei` : `ForeignKey(WEIClub)`, le WEI auquel l'utilisateur s'est pré-inscrit. Ce champ est unique avec `user`.
* `soge_credit` : `BooleanField`, indique si l'utilisateur a déclaré vouloir ouvrir un compte à la Société générale.
* `caution_check` : `BooleanField`, indique si l'utilisateur (en 2ème année ou plus) a bien remis son chèque de caution auprès de la trésorerie.
* `birth_date` : `DateField`, date de naissance de l'utilisateur.
* `gender` : `CharField` parmi `male` (Homme), `female` (Femme), `non binary` (Non binaire), genre de la personne.
* `health_issues` : `TextField`, problèmes de santé déclarés par l'utilisateur.
* `emergency_contact_name` : `CharField`, nom du contact en cas d'urgence.
* `emergency_contact_phone` : `CharField`, numéro de téléphone du contact en cas d'urgence.
* `ml_events_registration` : `BooleanField`, déclare si l'utilisateur veut s'inscrire à la liste de diffusion des événements du BDE (1A uniquement)
* `ml_art_registration` : `BooleanField`, déclare si l'utilisateur veut s'inscrire à la liste de diffusion des actualités du BDA (1A uniquement)
* `ml_sport_registration` : `BooleanField`, déclare si l'utilisateur veut s'inscrire à la liste de diffusion des actualités du BDS (1A uniquement)
* `first_year` : `BooleanField`, indique si l'inscription est d'un 1A ou non. Non modifiable par n'importe qui.
* `information_json` : `TextField` non modifiable manuellement par n'importe qui stockant les informations du questionnaire d'inscription au WEI pour les 1A, et stocke les demandes faites par un 2A+ concerant bus, équipes et rôles. On utilise un `TextField` contenant des données au format JSON pour permettre de la modularité au fil des années, sans avoir à tout casser à chaque fois.
## WEIMembership
Ce modèle hérite de `Membership` et contient les informations d'une adhésion au WEI.
* `bus` : `ForeignKey(Bus)`, bus dans lequel se trouve l'utilisateur.
* `team` : `ForeignKey(BusTeam)` pouvant être nulle (pour les chefs de bus et électrons libres), équipe dans laquelle se trouve l'utilisateur.
* `registration` : `OneToOneField(WEIRegistration)`, informations de la pré-inscription.
Champs hérités du modèle `Membership` :
* `club` : `ForeignKey(Club)`, club lié à l'adhésion. Doit être un `WEIClub`.
* `user` : `ForeignKey(User)`, utilisateur adhéré.
* `date_start` : `DateField`, date de début d'adhésion.
* `date_end` : `DateField`, date de fin d'adhésion.
* `fee` : `PositiveIntegerField`, montant de la cotisation payée.
* `roles` : `ManyToManyField(Role)`, liste des rôles endossés par l'adhérent. Les rôles doivent être des `WEIRole`.
# Graphe des modèles
Pour une meilleure compréhension, le graphe des modèles de l'application `member` ont été ajoutés au schéma.
![wei_member.svg](uploads/b6fea18ff3d845687c5ac915ca0b95af/wei_member.svg)