Update WEI models

This commit is contained in:
Yohann D'ANELLO 2020-04-11 17:42:08 +02:00
parent 154ea64b9f
commit a186ccbb26
2 changed files with 84 additions and 98 deletions

View File

@ -171,6 +171,7 @@ class Club(models.Model):
self.membership_start.month, self.membership_start.day) self.membership_start.month, self.membership_start.day)
self.membership_end = datetime.date(self.membership_end.year + 1, self.membership_end = datetime.date(self.membership_end.year + 1,
self.membership_end.month, self.membership_end.day) self.membership_end.month, self.membership_end.day)
self._force_save = True
self.save(force_update=True) self.save(force_update=True)
def save(self, force_insert=False, force_update=False, using=None, def save(self, force_insert=False, force_update=False, using=None,

View File

@ -1,58 +1,28 @@
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import json
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from member.models import Role, Club, Membership
from note.models import NoteSpecial from note.models import NoteSpecial
class WEI(models.Model): class WEIClub(Club):
""" """
Store WEI information
""" """
name = models.CharField(
max_length=255,
unique=True,
verbose_name=_("name"),
)
year = models.PositiveIntegerField( year = models.PositiveIntegerField(
unique=True, unique=True,
verbose_name=_("year"), verbose_name=_("year"),
) )
start = models.DateField( def update_membership_dates(self):
verbose_name=_("start date"), """
) We can't join the WEI next years.
"""
end = models.DateField( return
verbose_name=_("end date"),
)
price_paid = models.PositiveIntegerField(
verbose_name=_("Price for paid students"),
)
price_unpaid = models.PositiveIntegerField(
verbose_name=_("Price for unpaid students"),
)
email = models.EmailField(
verbose_name=_("contact email"),
)
registrations_open = models.BooleanField(
verbose_name=_("registrations open"),
)
def __str__(self):
return self.name
class Meta:
verbose_name = _("WEI")
verbose_name_plural = _("WEI")
class Bus(models.Model): class Bus(models.Model):
@ -60,7 +30,7 @@ class Bus(models.Model):
The best bus for the best WEI The best bus for the best WEI
""" """
wei = models.ForeignKey( wei = models.ForeignKey(
WEI, WEIClub,
on_delete=models.PROTECT, on_delete=models.PROTECT,
related_name="buses", related_name="buses",
verbose_name=_("WEI"), verbose_name=_("WEI"),
@ -107,17 +77,19 @@ class BusTeam(models.Model):
verbose_name_plural = _("Bus teams") verbose_name_plural = _("Bus teams")
class WEIRole(models.Model): class WEIRole(Role):
""" """
A Role for the WEI can be bus chief, team chief, free electron, ... A Role for the WEI can be bus chief, team chief, free electron, ...
""" """
name = models.CharField( bus = models.ForeignKey(
max_length=255, Bus,
unique=True, on_delete=models.CASCADE,
related_name="roles",
verbose_name=_("bus"),
) )
class WEIUser(models.Model): class WEIRegistration(models.Model):
""" """
Store personal data that can be useful for the WEI. Store personal data that can be useful for the WEI.
""" """
@ -130,16 +102,22 @@ class WEIUser(models.Model):
) )
wei = models.ForeignKey( wei = models.ForeignKey(
WEI, WEIClub,
on_delete=models.PROTECT, on_delete=models.PROTECT,
related_name="users", related_name="users",
verbose_name=_("WEI"), verbose_name=_("WEI"),
) )
role = models.ForeignKey( payment_method = models.ForeignKey(
WEIRole, NoteSpecial,
on_delete=models.PROTECT, on_delete=models.PROTECT,
verbose_name=_("role"), null=True, # null = no credit, paid with note
related_name="+",
verbose_name=_("payment method"),
)
soge_credit = models.BooleanField(
verbose_name=_("Credit from Société générale"),
) )
birth_date = models.DateField( birth_date = models.DateField(
@ -170,69 +148,45 @@ class WEIUser(models.Model):
verbose_name=_("emergency contact phone"), verbose_name=_("emergency contact phone"),
) )
payment_method = models.ForeignKey( ml_events_registration = models.BooleanField(
NoteSpecial,
on_delete=models.PROTECT,
null=True, # null = no credit, paid with note
related_name="+",
verbose_name=_("payment method"),
)
soge_credit = models.BooleanField(
verbose_name=_("Credit from Société générale"),
)
ml_events_registation = models.BooleanField(
verbose_name=_("Register on the mailing list to stay informed of the events of the campus (1 mail/week)"), verbose_name=_("Register on the mailing list to stay informed of the events of the campus (1 mail/week)"),
) )
ml_sport_registation = models.BooleanField( ml_sport_registration = models.BooleanField(
verbose_name=_("Register on the mailing list to stay informed of the sport events of the campus (1 mail/week)"), verbose_name=_("Register on the mailing list to stay informed of the sport events of the campus (1 mail/week)"),
) )
ml_art_registation = models.BooleanField( ml_art_registration = models.BooleanField(
verbose_name=_("Register on the mailing list to stay informed of the art events of the campus (1 mail/week)"), verbose_name=_("Register on the mailing list to stay informed of the art events of the campus (1 mail/week)"),
) )
team = models.ForeignKey( information_json = models.TextField(
BusTeam, verbose_name=_("registration information"),
on_delete=models.PROTECT, help_text=_("Information about the registration (buses for old members, survey fot the new members), "
related_name="users", "encoded in JSON"),
null=True,
blank=True,
verbose_name=_("team"),
) )
bus_choice1 = models.ForeignKey( @property
Bus, def information(self):
on_delete=models.PROTECT, """
related_name="+", The information about the registration (the survey for the new members, the bus for the older members, ...)
verbose_name=_("bus choice 1"), are stored in a dictionary that can evolve following the years. The dictionary is stored as a JSON string.
) """
return json.loads(self.information_json)
bus_choice2 = models.ForeignKey( @information.setter
Bus, def information(self, information):
on_delete=models.PROTECT, """
related_name="+", Store information as a JSON string
null=True, """
blank=True, self.information_json = json.dumps(information)
verbose_name=_("bus choice 2"),
)
bus_choice3 = models.ForeignKey( @property
Bus, def is_1A(self):
on_delete=models.PROTECT, """
related_name="+", We assume that a user is a new member if it not fully registered yet.
null=True, """
blank=True, return not self.user.profile.registration_valid
verbose_name=_("bus choice 3"),
)
asked_roles = models.ManyToManyField(
WEIRole,
related_name="+",
verbose_name=_("asked roles"),
)
def __str__(self): def __str__(self):
return str(self.user) return str(self.user)
@ -241,3 +195,34 @@ class WEIUser(models.Model):
unique_together = ('user', 'wei',) unique_together = ('user', 'wei',)
verbose_name = _("WEI User") verbose_name = _("WEI User")
verbose_name_plural = _("WEI Users") verbose_name_plural = _("WEI Users")
class WEIMembership(Membership):
bus = models.ForeignKey(
Bus,
on_delete=models.PROTECT,
null=True,
default=None,
verbose_name=_("bus"),
)
team = models.ForeignKey(
BusTeam,
on_delete=models.PROTECT,
related_name="memberships",
null=True,
blank=True,
default=None,
verbose_name=_("team"),
)
registration = models.OneToOneField(
WEIRegistration,
on_delete=models.PROTECT,
null=True,
blank=True,
default=None,
related_name="membership",
verbose_name=_("WEI registration"),
)