Remove Soge at signup
This commit is contained in:
parent
6348105dcd
commit
6379ee57de
5 changed files with 20 additions and 160 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -53,3 +53,6 @@ shell.nix
|
|||
ansible/host_vars/*.yaml
|
||||
!ansible/host_vars/bde*
|
||||
ansible/hosts
|
||||
|
||||
apps/member/migrations
|
||||
apps/wei/migrations
|
||||
|
|
|
|||
|
|
@ -161,12 +161,6 @@ class ClubForm(forms.ModelForm):
|
|||
|
||||
|
||||
class MembershipForm(forms.ModelForm):
|
||||
soge = forms.BooleanField(
|
||||
label=_("Inscription paid by Société Générale"),
|
||||
required=False,
|
||||
help_text=_("Check this case if the Société Générale paid the inscription."),
|
||||
)
|
||||
|
||||
credit_type = forms.ModelChoiceField(
|
||||
queryset=NoteSpecial.objects,
|
||||
label=_("Credit type"),
|
||||
|
|
|
|||
|
|
@ -53,22 +53,13 @@ class Profile(models.Model):
|
|||
max_length=8,
|
||||
verbose_name=_("department"),
|
||||
choices=[
|
||||
('A0', _("Informatics (A0)")),
|
||||
('A1', _("Mathematics (A1)")),
|
||||
('A2', _("Physics (A2)")),
|
||||
("A'2", _("Applied physics (A'2)")),
|
||||
("A''2", _("Chemistry (A''2)")),
|
||||
('A3', _("Biology (A3)")),
|
||||
('B1234', _("SAPHIRE (B1234)")),
|
||||
('B1', _("Mechanics (B1)")),
|
||||
('B2', _("Civil engineering (B2)")),
|
||||
('B3', _("Mechanical engineering (B3)")),
|
||||
('B4', _("EEA (B4)")),
|
||||
('C', _("Design (C)")),
|
||||
('D2', _("Economy-management (D2)")),
|
||||
('D3', _("Social sciences (D3)")),
|
||||
('E', _("English (E)")),
|
||||
('EXT', _("External (EXT)")),
|
||||
('INFO', _("Informatique")),
|
||||
('MATH', _("Mathématiques")),
|
||||
('DEM', _("Droit - économie - management")),
|
||||
('MECATRO', _("Mécatronique")),
|
||||
('2SEP', _("Sciences du sport et éducation physique")),
|
||||
('SE', _("Sciences pour l’Environnement")),
|
||||
('EXT', _("Externe")),
|
||||
]
|
||||
)
|
||||
|
||||
|
|
@ -98,8 +89,7 @@ class Profile(models.Model):
|
|||
max_length=2,
|
||||
choices=[
|
||||
('', _("No")),
|
||||
('fr', _("Yes (receive them in french)")),
|
||||
('en', _("Yes (receive them in english)")),
|
||||
('fr', _("Yes")),
|
||||
],
|
||||
verbose_name=_("Register on the mailing list to stay informed of the events of the campus (1 mail/week)"),
|
||||
)
|
||||
|
|
@ -151,13 +141,6 @@ class Profile(models.Model):
|
|||
def section_generated(self):
|
||||
return str(self.ens_year) + self.department
|
||||
|
||||
@property
|
||||
def soge(self):
|
||||
if "treasury" in settings.INSTALLED_APPS:
|
||||
from treasury.models import SogeCredit
|
||||
return SogeCredit.objects.filter(user=self.user, credit_transaction__isnull=False).exists()
|
||||
return False
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('user profile')
|
||||
verbose_name_plural = _('user profile')
|
||||
|
|
@ -360,8 +343,6 @@ class Membership(models.Model):
|
|||
)
|
||||
if hasattr(self, '_force_renew_parent') and self._force_renew_parent:
|
||||
new_membership._force_renew_parent = True
|
||||
if hasattr(self, '_soge') and self._soge:
|
||||
new_membership._soge = True
|
||||
if hasattr(self, '_force_save') and self._force_save:
|
||||
new_membership._force_save = True
|
||||
new_membership.save()
|
||||
|
|
@ -380,8 +361,6 @@ class Membership(models.Model):
|
|||
# Renew the previous membership of the parent club
|
||||
parent_membership = parent_membership.first()
|
||||
parent_membership._force_renew_parent = True
|
||||
if hasattr(self, '_soge'):
|
||||
parent_membership._soge = True
|
||||
if hasattr(self, '_force_save'):
|
||||
parent_membership._force_save = True
|
||||
parent_membership.renew()
|
||||
|
|
@ -393,8 +372,7 @@ class Membership(models.Model):
|
|||
date_start=self.date_start,
|
||||
)
|
||||
parent_membership._force_renew_parent = True
|
||||
if hasattr(self, '_soge'):
|
||||
parent_membership._soge = True
|
||||
|
||||
if hasattr(self, '_force_save'):
|
||||
parent_membership._force_save = True
|
||||
parent_membership.save()
|
||||
|
|
@ -479,26 +457,7 @@ class Membership(models.Model):
|
|||
reason="Adhésion " + self.club.name,
|
||||
)
|
||||
transaction._force_save = True
|
||||
if hasattr(self, '_soge') and "treasury" in settings.INSTALLED_APPS\
|
||||
and (self.club.name == "BDE" or self.club.name == "Kfet"
|
||||
or ("wei" in settings.INSTALLED_APPS and hasattr(self.club, "weiclub") and self.club.weiclub)):
|
||||
# If the soge pays, then the transaction is unvalidated in a first time, then submitted for control
|
||||
# to treasurers.
|
||||
transaction.valid = False
|
||||
from treasury.models import SogeCredit
|
||||
if SogeCredit.objects.filter(user=self.user).exists():
|
||||
soge_credit = SogeCredit.objects.get(user=self.user)
|
||||
else:
|
||||
soge_credit = SogeCredit(user=self.user)
|
||||
soge_credit._force_save = True
|
||||
soge_credit.save(force_insert=True)
|
||||
soge_credit.refresh_from_db()
|
||||
transaction.save(force_insert=True)
|
||||
transaction.refresh_from_db()
|
||||
soge_credit.transactions.add(transaction)
|
||||
soge_credit.save()
|
||||
else:
|
||||
transaction.save(force_insert=True)
|
||||
transaction.save(force_insert=True)
|
||||
|
||||
def __str__(self):
|
||||
return _("Membership of {user} for the club {club}").format(user=self.user.username, club=self.club.name, )
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ from django.urls import reverse
|
|||
from django.utils import timezone
|
||||
from note.models import Alias, NoteSpecial
|
||||
from permission.models import Role
|
||||
from treasury.models import SogeCredit
|
||||
|
||||
|
||||
from ..api.views import ClubViewSet, MembershipViewSet, ProfileViewSet
|
||||
from ..models import Club, Membership, Profile
|
||||
|
|
@ -201,7 +201,6 @@ class TestMemberships(TestCase):
|
|||
response = self.client.post(reverse("member:club_add_member", args=(club.pk,)), data=dict(
|
||||
user=user.pk,
|
||||
date_start="{:%Y-%m-%d}".format(date.today()),
|
||||
soge=False,
|
||||
credit_type=NoteSpecial.objects.get(special_type="Espèces").id,
|
||||
credit_amount=4200,
|
||||
last_name="TOTO",
|
||||
|
|
@ -240,7 +239,6 @@ class TestMemberships(TestCase):
|
|||
response = self.client.post(reverse("member:club_renew_membership", args=(membership.pk,)), data=dict(
|
||||
user=user.pk,
|
||||
date_start="{:%Y-%m-%d}".format(date.today()),
|
||||
soge=bde_parent,
|
||||
credit_type=NoteSpecial.objects.get(special_type="Chèque").id,
|
||||
credit_amount=14242,
|
||||
last_name="TOTO",
|
||||
|
|
@ -252,35 +250,7 @@ class TestMemberships(TestCase):
|
|||
response = self.client.get(club.get_absolute_url())
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_auto_join_kfet_when_join_bde_with_soge(self):
|
||||
"""
|
||||
When we join the BDE club with a Soge registration, a Kfet membership is automatically created.
|
||||
We check that it is the case.
|
||||
"""
|
||||
user = User.objects.create(username="new1A")
|
||||
user.profile.registration_valid = True
|
||||
user.profile.email_confirmed = True
|
||||
user.profile.save()
|
||||
user.save()
|
||||
|
||||
bde = Club.objects.get(name="BDE")
|
||||
kfet = Club.objects.get(name="Kfet")
|
||||
|
||||
response = self.client.post(reverse("member:club_add_member", args=(bde.pk,)), data=dict(
|
||||
user=user.pk,
|
||||
date_start="{:%Y-%m-%d}".format(date.today()),
|
||||
soge=True,
|
||||
credit_type=NoteSpecial.objects.get(special_type="Virement bancaire").id,
|
||||
credit_amount=(bde.membership_fee_paid + kfet.membership_fee_paid) / 100,
|
||||
last_name="TOTO",
|
||||
first_name="Toto",
|
||||
bank="Société générale",
|
||||
))
|
||||
self.assertRedirects(response, user.profile.get_absolute_url(), 302, 200)
|
||||
|
||||
self.assertTrue(Membership.objects.filter(user=user, club=bde).exists())
|
||||
self.assertTrue(Membership.objects.filter(user=user, club=kfet).exists())
|
||||
self.assertTrue(SogeCredit.objects.filter(user=user).exists())
|
||||
|
||||
|
||||
def test_change_roles(self):
|
||||
"""
|
||||
|
|
@ -327,11 +297,11 @@ class TestMemberships(TestCase):
|
|||
email="updated@example.com",
|
||||
phone_number="+33600000000",
|
||||
section="",
|
||||
department="A0",
|
||||
department="INFO",
|
||||
promotion=timezone.now().year,
|
||||
address="Earth",
|
||||
paid=True,
|
||||
ml_events_registration="en",
|
||||
ml_events_registration="",
|
||||
ml_sports_registration=True,
|
||||
ml_art_registration=True,
|
||||
report_frequency=7,
|
||||
|
|
@ -416,7 +386,7 @@ class TestMemberAPI(TestAPI):
|
|||
self.user.profile.email_confirmed = True
|
||||
self.user.profile.phone_number = "0600000000"
|
||||
self.user.profile.section = "1A0"
|
||||
self.user.profile.department = "A0"
|
||||
self.user.profile.department = "INFO"
|
||||
self.user.profile.address = "Earth"
|
||||
self.user.profile.save()
|
||||
|
||||
|
|
|
|||
|
|
@ -610,16 +610,7 @@ class ClubAddMemberView(ProtectQuerysetMixin, ProtectedCreateView):
|
|||
context["clubs_renewal"] = clubs_renewal
|
||||
context["additional_fee_renewal"] = additional_fee_renewal
|
||||
|
||||
# If the concerned club is the BDE, then we add the option that Société générale pays the membership.
|
||||
if club.name != "BDE":
|
||||
del form.fields['soge']
|
||||
else:
|
||||
fee = 0
|
||||
bde = Club.objects.get(name="BDE")
|
||||
fee += bde.membership_fee_paid
|
||||
kfet = Club.objects.get(name="Kfet")
|
||||
fee += kfet.membership_fee_paid
|
||||
context["total_fee"] = "{:.02f}".format(fee / 100, )
|
||||
|
||||
else: # This is a renewal. Fields can be pre-completed.
|
||||
context["renewal"] = True
|
||||
|
||||
|
|
@ -651,26 +642,6 @@ class ClubAddMemberView(ProtectQuerysetMixin, ProtectedCreateView):
|
|||
form.fields['last_name'].initial = user.last_name
|
||||
form.fields['first_name'].initial = user.first_name
|
||||
|
||||
# If this is a renewal of a BDE membership, Société générale can pays, if it has not been already done.
|
||||
if (club.name != "BDE" and club.name != "Kfet") or user.profile.soge:
|
||||
del form.fields['soge']
|
||||
else:
|
||||
fee = 0
|
||||
bde = Club.objects.get(name="BDE")
|
||||
if not Membership.objects.filter(
|
||||
club=bde,
|
||||
user=user,
|
||||
date_start__gte=bde.membership_start,
|
||||
).exists():
|
||||
fee += bde.membership_fee_paid if user.profile.paid else bde.membership_fee_unpaid
|
||||
kfet = Club.objects.get(name="Kfet")
|
||||
if not Membership.objects.filter(
|
||||
club=kfet,
|
||||
user=user,
|
||||
date_start__gte=bde.membership_start,
|
||||
).exists():
|
||||
fee += kfet.membership_fee_paid if user.profile.paid else kfet.membership_fee_unpaid
|
||||
context["total_fee"] = "{:.02f}".format(fee / 100, )
|
||||
|
||||
context['club'] = club
|
||||
|
||||
|
|
@ -686,12 +657,11 @@ class ClubAddMemberView(ProtectQuerysetMixin, ProtectedCreateView):
|
|||
# Retrieve form data
|
||||
credit_type = form.cleaned_data["credit_type"]
|
||||
credit_amount = form.cleaned_data["credit_amount"]
|
||||
soge = form.cleaned_data["soge"] and not user.profile.soge and (club.name == "BDE" or club.name == "Kfet")
|
||||
|
||||
if not credit_type:
|
||||
credit_amount = 0
|
||||
|
||||
if not soge and user.note.balance + credit_amount < fee and not Membership.objects.filter(
|
||||
if user.note.balance + credit_amount < fee and not Membership.objects.filter(
|
||||
club__name="Kfet",
|
||||
user=user,
|
||||
date_start__lte=date.today(),
|
||||
|
|
@ -762,13 +732,7 @@ class ClubAddMemberView(ProtectQuerysetMixin, ProtectedCreateView):
|
|||
last_name = form.cleaned_data["last_name"]
|
||||
first_name = form.cleaned_data["first_name"]
|
||||
bank = form.cleaned_data["bank"]
|
||||
soge = form.cleaned_data["soge"] and not user.profile.soge and (club.name == "BDE" or club.name == "Kfet")
|
||||
|
||||
# If Société générale pays, then we store that information but the payment must be controlled by treasurers
|
||||
# later. The membership transaction will be invalidated.
|
||||
if soge:
|
||||
credit_type = None
|
||||
form.instance._soge = True
|
||||
|
||||
if credit_type is None:
|
||||
credit_amount = 0
|
||||
|
|
@ -830,36 +794,6 @@ class ClubAddMemberView(ProtectQuerysetMixin, ProtectedCreateView):
|
|||
form.instance._force_save = True
|
||||
form.instance.save()
|
||||
|
||||
# If Société générale pays, then we assume that this is the BDE membership, and we auto-renew the
|
||||
# Kfet membership.
|
||||
if soge and club.name == "BDE":
|
||||
kfet = Club.objects.get(name="Kfet")
|
||||
fee = kfet.membership_fee_paid if user.profile.paid else kfet.membership_fee_unpaid
|
||||
|
||||
# Get current membership, to get the end date
|
||||
old_membership = Membership.objects.filter(
|
||||
club=kfet,
|
||||
user=user,
|
||||
).order_by("-date_start")
|
||||
|
||||
if not old_membership.filter(date_start__gte=kfet.membership_start).exists():
|
||||
# If the membership is not already renewed
|
||||
membership = Membership(
|
||||
club=kfet,
|
||||
user=user,
|
||||
fee=fee,
|
||||
date_start=max(old_membership.first().date_end + timedelta(days=1), kfet.membership_start)
|
||||
if old_membership.exists() else form.instance.date_start,
|
||||
)
|
||||
membership._force_save = True
|
||||
membership._soge = True
|
||||
membership.save()
|
||||
membership.refresh_from_db()
|
||||
if old_membership.exists():
|
||||
membership.roles.set(old_membership.get().roles.all())
|
||||
membership.roles.set(Role.objects.filter(Q(name="Adhérent Kfet") | Q(name="Membre de club")).all())
|
||||
membership.save()
|
||||
|
||||
return ret
|
||||
|
||||
def get_success_url(self):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue