diff --git a/Apps/WEI.md b/Apps/WEI.md new file mode 100644 index 0000000..811e7fe --- /dev/null +++ b/Apps/WEI.md @@ -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) \ No newline at end of file