mirror of https://gitlab.crans.org/bde/nk20
Update WEI models
This commit is contained in:
parent
154ea64b9f
commit
a186ccbb26
|
@ -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,
|
||||||
|
|
|
@ -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"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue