Memberships

ynerant 2020-04-02 03:37:54 +02:00
parent 50cca60266
commit d87f64cb99
1 changed files with 22 additions and 0 deletions

@ -75,3 +75,25 @@ Si le modèle `MembershipTransaction` appartient à l'application `note`, il est
## Adhésions
La Note Kfet offre la possibilité aux clubs de gérer l'adhésion de leurs membres. En plus de réguler les cotisations des adhérents, des permissions sont octroyées sur la note en fonction des rôles au sein des clubs. Un rôle est une fonction occupée au sein d'un club (Trésorier de club, président de club, GCKfet, Res[pot], respo info, ...). Une adhésion attribue à un adhérent ses rôles. Les rôles fournissent les permissions. Par exemple, le trésorier d'un club a le droit de faire des transferts de et vers la note du club, tant que la source reste au-dessus de -50 €. Une adhésion est considérée comme valide si la date du jour est comprise (au sens large) entre les dates de début et de fin d'adhésion.
On peut ajouter une adhésion à un utilisateur dans un club à tout non adhérent de ce club. La personne en charge d'adhérer quelqu'un choisit l'utilisateur, les rôles au sein du club et la date de début d'adhésion. Cette date de début d'adhésion doit se situer entre les champs `club`.`membership_start` et `club`.membership_end`, si ces champs sont non nuls. Si `club`.`parent_club` n'est pas nul, l'utilisateur doit être membre de ce club. Le montant de la cotisation est fixé en fonction du statut normalien de l'utilisateur (`club`.`membership_fee_paid` centimes pour les élèves et `club`.`membership_fee_unpaid` centimes pour les étudiants). La date de fin est calculée comme ce qui suit :
* Si `club`.`membership_duration` est non nul, alors `date_end` = `date_start` + `club.membership_duration`
* Sinon `club`, `date_end` = `date_start` + 424242 jours (suffisant pour tenir au moins une vie)
* Si `club`.`membership_end` est non nul, alors `date_end` = min(`date_end`, `club`.`membership_end`)
Si l'utilisateur n'est pas membre du club `Kfet`, l'adhésion n'est pas possible si le solde disponible sur sa note est insuffisant. Une fois toute ces contraintes vérifiées, l'adhésion est créée. Une transaction de type `MembershipTransaction` est automatiquement créée de la note de l'utilisateur vers la note du club, finalisant l'adhésion.
### Réadhésions
Pour les clubs nécessitant des adhésions (de durée limitée), il est possible de réadhérer au bout d'un an. Dès lors que le jour actuel est après `club`.`membership_start` + 1 an, `club`.`membership_start` et `club`.membership_end` sont incrémentés d'un an.
Il est possible de réadhérer si :
* `membership`.`date_start` <= `today` <= `membership`.`date_end` (l'adhésion en cours est valide)
* `membership`.`date_start` < `club`.`membership_start` (si la date de début d'adhésion du club est postérieure à la date de début d'adhésion, qui a donc été mise à jour, on a changé d'année)
* Il n'y a pas encore de réadhésion (pas d'adhésion au même club vérifiant `new_membership`.`date_start` >= `club`.`membership_start`)
Un bouton `Réadhérer` apparaît dans la liste des adhésions si le droit est permis et si ces contraintes sont vérifiées. En réadhérant, une nouvelle adhésion est créée pour l'utilisateur avec les mêmes rôles, commençant le lendemain de la date d'expiration de la précédente adhésion. Si on réadhère le 16 août pour une adhésion finissant le 30 septembre, la nouvelle adhésion commencera le 1er octobre).
Pour supprimer une adhésion (en cas d'erreur), se rendre dans django admin et changer la date de fin d'adhésion, sans oublier d'invalider la transaction d'adhésion.