diff --git a/apps/api/pagination.py b/apps/api/pagination.py
index d897b583..1c6b1a1f 100644
--- a/apps/api/pagination.py
+++ b/apps/api/pagination.py
@@ -1,5 +1,5 @@
from rest_framework.pagination import PageNumberPagination
+
class CustomPagination(PageNumberPagination):
page_size_query_param = 'page_size'
-
diff --git a/apps/member/models.py b/apps/member/models.py
index 0b471f12..3706e47f 100644
--- a/apps/member/models.py
+++ b/apps/member/models.py
@@ -263,7 +263,7 @@ class Club(models.Model):
today = datetime.date.today()
- if (today - self.membership_start).days >= 365:
+ while (today - self.membership_start).days >= 365:
if self.membership_start:
self.membership_start = datetime.date(self.membership_start.year + 1,
self.membership_start.month, self.membership_start.day)
diff --git a/apps/member/tests/test_memberships.py b/apps/member/tests/test_memberships.py
index 2dc6dd41..b2647551 100644
--- a/apps/member/tests/test_memberships.py
+++ b/apps/member/tests/test_memberships.py
@@ -183,7 +183,7 @@ class TestMemberships(TestCase):
club = Club.objects.get(name="Kfet")
else:
club = Club.objects.create(
- name="Second club " + ("with BDE" if bde_parent else "without BDE"),
+ name="Second club without BDE",
parent_club=None,
email="newclub@example.com",
require_memberships=True,
diff --git a/apps/member/views.py b/apps/member/views.py
index 2f6348a6..63307383 100644
--- a/apps/member/views.py
+++ b/apps/member/views.py
@@ -753,6 +753,10 @@ class ClubAddMemberView(ProtectQuerysetMixin, ProtectedCreateView):
club = old_membership.club
user = old_membership.user
+ # Update club membership date
+ if PermissionBackend.check_perm(self.request, "member.change_club_membership_start", club):
+ club.update_membership_dates()
+
form.instance.club = club
# Get form data
diff --git a/apps/note/models/transactions.py b/apps/note/models/transactions.py
index 3c6b4c7d..8ec7bf0a 100644
--- a/apps/note/models/transactions.py
+++ b/apps/note/models/transactions.py
@@ -325,8 +325,8 @@ class SpecialTransaction(Transaction):
def clean(self):
# SpecialTransaction are only possible with NoteSpecial object
if self.is_credit() == self.is_debit():
- raise(ValidationError(_("A special transaction is only possible between a"
- " Note associated to a payment method and a User or a Club")))
+ raise ValidationError(_("A special transaction is only possible between a"
+ " Note associated to a payment method and a User or a Club"))
@transaction.atomic
def save(self, *args, **kwargs):
diff --git a/apps/registration/forms.py b/apps/registration/forms.py
index 64e79d52..405c9bb2 100644
--- a/apps/registration/forms.py
+++ b/apps/registration/forms.py
@@ -5,6 +5,7 @@ from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _
+from member.models import Club
from note.models import NoteSpecial, Alias
from note_kfet.inputs import AmountInput
@@ -44,14 +45,14 @@ class SignUpForm(UserCreationForm):
fields = ('first_name', 'last_name', 'username', 'email', )
-class DeclareSogeAccountOpenedForm(forms.Form):
- soge_account = forms.BooleanField(
- label=_("I declare that I opened or I will open soon a bank account in the Société générale with the BDE "
- "partnership."),
- help_text=_("Warning: this engages you to open your bank account. If you finally decides to don't open your "
- "account, you will have to pay the BDE membership."),
- required=False,
- )
+# class DeclareSogeAccountOpenedForm(forms.Form):
+# soge_account = forms.BooleanField(
+# label=_("I declare that I opened or I will open soon a bank account in the Société générale with the BDE "
+# "partnership."),
+# help_text=_("Warning: this engages you to open your bank account. If you finally decides to don't open your "
+# "account, you will have to pay the BDE membership."),
+# required=False,
+# )
class WEISignupForm(forms.Form):
@@ -67,11 +68,11 @@ class ValidationForm(forms.Form):
"""
Validate the inscription of the new users and pay memberships.
"""
- 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."),
- )
+# 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,
@@ -114,3 +115,12 @@ class ValidationForm(forms.Form):
required=False,
initial=True,
)
+
+ # If the bda exists
+ if Club.objects.filter(name__iexact="bda").exists():
+ # The user can join the bda club at the inscription
+ join_bda = forms.BooleanField(
+ label=_("Join BDA Club"),
+ required=False,
+ initial=False,
+ )
diff --git a/apps/registration/templates/registration/future_profile_detail.html b/apps/registration/templates/registration/future_profile_detail.html
index 577ad219..be0c084f 100644
--- a/apps/registration/templates/registration/future_profile_detail.html
+++ b/apps/registration/templates/registration/future_profile_detail.html
@@ -57,11 +57,13 @@ SPDX-License-Identifier: GPL-3.0-or-later
{% trans "Validate account" %}
+ {% comment "Soge not for membership (only WEI)" %}
{% if declare_soge_account %}
{% trans "The user declared that he/she opened a bank account in the Société générale." %}
{% endif %}
+ {% endcomment %}
{% csrf_token %}
@@ -76,6 +78,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
{% endblock %}
+{% comment "Soge not for membership (only WEI)" %}
{% block extrajavascript %}
{% endblock %}
+{% endcomment %}
diff --git a/apps/registration/tests/test_registration.py b/apps/registration/tests/test_registration.py
index 18cf16db..0b28efcb 100644
--- a/apps/registration/tests/test_registration.py
+++ b/apps/registration/tests/test_registration.py
@@ -190,7 +190,7 @@ class TestValidateRegistration(TestCase):
# BDE Membership is mandatory
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict(
- soge=False,
+ # soge=False,
credit_type=NoteSpecial.objects.get(special_type="Chèque").id,
credit_amount=4200,
last_name="TOTO",
@@ -204,7 +204,7 @@ class TestValidateRegistration(TestCase):
# Same
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict(
- soge=False,
+ # soge=False,
credit_type="",
credit_amount=0,
last_name="TOTO",
@@ -218,7 +218,7 @@ class TestValidateRegistration(TestCase):
# The BDE membership is not free
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict(
- soge=False,
+ # soge=False,
credit_type=NoteSpecial.objects.get(special_type="Espèces").id,
credit_amount=0,
last_name="TOTO",
@@ -232,7 +232,7 @@ class TestValidateRegistration(TestCase):
# Last and first names are required for a credit
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict(
- soge=False,
+ # soge=False,
credit_type=NoteSpecial.objects.get(special_type="Chèque").id,
credit_amount=4000,
last_name="",
@@ -249,7 +249,7 @@ class TestValidateRegistration(TestCase):
self.user.username = "admïntoto"
self.user.save()
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict(
- soge=False,
+ # soge=False,
credit_type=NoteSpecial.objects.get(special_type="Chèque").id,
credit_amount=500,
last_name="TOTO",
@@ -275,7 +275,7 @@ class TestValidateRegistration(TestCase):
self.user.profile.save()
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict(
- soge=False,
+ # soge=False,
credit_type=NoteSpecial.objects.get(special_type="Chèque").id,
credit_amount=500,
last_name="TOTO",
@@ -290,6 +290,7 @@ class TestValidateRegistration(TestCase):
self.assertTrue(NoteUser.objects.filter(user=self.user).exists())
self.assertTrue(Membership.objects.filter(club__name="BDE", user=self.user).exists())
self.assertFalse(Membership.objects.filter(club__name="Kfet", user=self.user).exists())
+ self.assertFalse(Membership.objects.filter(club__name__iexact="BDA", user=self.user).exists())
self.assertFalse(SogeCredit.objects.filter(user=self.user).exists())
self.assertEqual(Transaction.objects.filter(
Q(source=self.user.note) | Q(destination=self.user.note)).count(), 2)
@@ -311,7 +312,7 @@ class TestValidateRegistration(TestCase):
self.user.profile.save()
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict(
- soge=False,
+ # soge=False,
credit_type=NoteSpecial.objects.get(special_type="Espèces").id,
credit_amount=4000,
last_name="TOTO",
@@ -326,6 +327,7 @@ class TestValidateRegistration(TestCase):
self.assertTrue(NoteUser.objects.filter(user=self.user).exists())
self.assertTrue(Membership.objects.filter(club__name="BDE", user=self.user).exists())
self.assertTrue(Membership.objects.filter(club__name="Kfet", user=self.user).exists())
+ self.assertFalse(Membership.objects.filter(club__name__iexact="BDA", user=self.user).exists())
self.assertFalse(SogeCredit.objects.filter(user=self.user).exists())
self.assertEqual(Transaction.objects.filter(
Q(source=self.user.note) | Q(destination=self.user.note)).count(), 3)
@@ -333,42 +335,43 @@ class TestValidateRegistration(TestCase):
response = self.client.get(self.user.profile.get_absolute_url())
self.assertEqual(response.status_code, 200)
- def test_validate_kfet_registration_with_soge(self):
- """
- The user joins the BDE and the Kfet, but the membership is paid by the Société générale.
- """
- response = self.client.get(reverse("registration:future_user_detail", args=(self.user.pk,)))
- self.assertEqual(response.status_code, 200)
-
- response = self.client.get(self.user.profile.get_absolute_url())
- self.assertEqual(response.status_code, 404)
-
- self.user.profile.email_confirmed = True
- self.user.profile.save()
-
- response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict(
- soge=True,
- credit_type=NoteSpecial.objects.get(special_type="Espèces").id,
- credit_amount=4000,
- last_name="TOTO",
- first_name="Toto",
- bank="Société générale",
- join_bde=True,
- join_kfet=True,
- ))
- self.assertRedirects(response, self.user.profile.get_absolute_url(), 302, 200)
- self.user.profile.refresh_from_db()
- self.assertTrue(self.user.profile.registration_valid)
- self.assertTrue(NoteUser.objects.filter(user=self.user).exists())
- self.assertTrue(Membership.objects.filter(club__name="BDE", user=self.user).exists())
- self.assertTrue(Membership.objects.filter(club__name="Kfet", user=self.user).exists())
- self.assertTrue(SogeCredit.objects.filter(user=self.user).exists())
- self.assertEqual(Transaction.objects.filter(
- Q(source=self.user.note) | Q(destination=self.user.note)).count(), 3)
- self.assertFalse(Transaction.objects.filter(valid=True).exists())
-
- response = self.client.get(self.user.profile.get_absolute_url())
- self.assertEqual(response.status_code, 200)
+# def test_validate_kfet_registration_with_soge(self):
+# """
+# The user joins the BDE and the Kfet, but the membership is paid by the Société générale.
+# """
+# response = self.client.get(reverse("registration:future_user_detail", args=(self.user.pk,)))
+# self.assertEqual(response.status_code, 200)
+#
+# response = self.client.get(self.user.profile.get_absolute_url())
+# self.assertEqual(response.status_code, 404)
+#
+# self.user.profile.email_confirmed = True
+# self.user.profile.save()
+#
+# response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict(
+# soge=True,
+# credit_type=NoteSpecial.objects.get(special_type="Espèces").id,
+# credit_amount=4000,
+# last_name="TOTO",
+# first_name="Toto",
+# bank="Société générale",
+# join_bde=True,
+# join_kfet=True,
+# ))
+# self.assertRedirects(response, self.user.profile.get_absolute_url(), 302, 200)
+# self.user.profile.refresh_from_db()
+# self.assertTrue(self.user.profile.registration_valid)
+# self.assertTrue(NoteUser.objects.filter(user=self.user).exists())
+# self.assertTrue(Membership.objects.filter(club__name="BDE", user=self.user).exists())
+# self.assertTrue(Membership.objects.filter(club__name="Kfet", user=self.user).exists())
+# self.assertFalse(Membership.objects.filter(club__name__iexact="BDA", user=self.user).exists())
+# self.assertTrue(SogeCredit.objects.filter(user=self.user).exists())
+# self.assertEqual(Transaction.objects.filter(
+# Q(source=self.user.note) | Q(destination=self.user.note)).count(), 3)
+# self.assertFalse(Transaction.objects.filter(valid=True).exists())
+#
+# response = self.client.get(self.user.profile.get_absolute_url())
+# self.assertEqual(response.status_code, 200)
def test_invalidate_registration(self):
"""
diff --git a/apps/registration/views.py b/apps/registration/views.py
index b256f591..eb415bdd 100644
--- a/apps/registration/views.py
+++ b/apps/registration/views.py
@@ -24,7 +24,8 @@ from permission.models import Role
from permission.views import ProtectQuerysetMixin
from treasury.models import SogeCredit
-from .forms import SignUpForm, ValidationForm, DeclareSogeAccountOpenedForm
+# from .forms import SignUpForm, ValidationForm, DeclareSogeAccountOpenedForm
+from .forms import SignUpForm, ValidationForm
from .tables import FutureUserTable
from .tokens import email_validation_token
@@ -42,7 +43,7 @@ class UserCreateView(CreateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["profile_form"] = self.second_form(self.request.POST if self.request.POST else None)
- context["soge_form"] = DeclareSogeAccountOpenedForm(self.request.POST if self.request.POST else None)
+# context["soge_form"] = DeclareSogeAccountOpenedForm(self.request.POST if self.request.POST else None)
del context["profile_form"].fields["section"]
del context["profile_form"].fields["report_frequency"]
del context["profile_form"].fields["last_report"]
@@ -75,12 +76,12 @@ class UserCreateView(CreateView):
user.profile.send_email_validation_link()
- soge_form = DeclareSogeAccountOpenedForm(self.request.POST)
- if "soge_account" in soge_form.data and soge_form.data["soge_account"]:
- # If the user declares that a bank account got opened, prepare the soge credit to warn treasurers
- soge_credit = SogeCredit(user=user)
- soge_credit._force_save = True
- soge_credit.save()
+# soge_form = DeclareSogeAccountOpenedForm(self.request.POST)
+# if "soge_account" in soge_form.data and soge_form.data["soge_account"]:
+# # If the user declares that a bank account got opened, prepare the soge credit to warn treasurers
+# soge_credit = SogeCredit(user=user)
+# soge_credit._force_save = True
+# soge_credit.save()
return super().form_valid(form)
@@ -237,9 +238,12 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
fee += bde.membership_fee_paid if user.profile.paid else bde.membership_fee_unpaid
kfet = Club.objects.get(name="Kfet")
fee += kfet.membership_fee_paid if user.profile.paid else kfet.membership_fee_unpaid
+ if Club.objects.filter(name__iexact="BDA").exists():
+ bda = Club.objects.get(name__iexact="BDA")
+ fee += bda.membership_fee_paid if user.profile.paid else bda.membership_fee_unpaid
ctx["total_fee"] = "{:.02f}".format(fee / 100, )
- ctx["declare_soge_account"] = SogeCredit.objects.filter(user=user).exists()
+# ctx["declare_soge_account"] = SogeCredit.objects.filter(user=user).exists()
return ctx
@@ -262,8 +266,13 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
form.add_error(None, _("An alias with a similar name already exists."))
return self.form_invalid(form)
+ # Check if BDA exist to propose membership at regisration
+ bda_exists = False
+ if Club.objects.filter(name__iexact="BDA").exists():
+ bda_exists = True
+
# Get form data
- soge = form.cleaned_data["soge"]
+# soge = form.cleaned_data["soge"]
credit_type = form.cleaned_data["credit_type"]
credit_amount = form.cleaned_data["credit_amount"]
last_name = form.cleaned_data["last_name"]
@@ -271,11 +280,13 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
bank = form.cleaned_data["bank"]
join_bde = form.cleaned_data["join_bde"]
join_kfet = form.cleaned_data["join_kfet"]
+ if bda_exists:
+ join_bda = form.cleaned_data["join_bda"]
- if soge:
- # If Société Générale pays the inscription, the user automatically joins the two clubs.
- join_bde = True
- join_kfet = True
+# if soge:
+# # If Société Générale pays the inscription, the user automatically joins the two clubs.
+# join_bde = True
+# join_kfet = True
if not join_bde:
# This software belongs to the BDE.
@@ -292,15 +303,21 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
kfet_fee = kfet.membership_fee_paid if user.profile.paid else kfet.membership_fee_unpaid
# Add extra fee for the full membership
fee += kfet_fee if join_kfet else 0
+ if bda_exists:
+ bda = Club.objects.get(name__iexact="BDA")
+ bda_fee = bda.membership_fee_paid if user.profile.paid else bda.membership_fee_unpaid
+ # Add extra fee for the bda membership
+ fee += bda_fee if join_bda else 0
- # If the bank pays, then we don't credit now. Treasurers will validate the transaction
- # and credit the note later.
- credit_type = None if soge else credit_type
+# # If the bank pays, then we don't credit now. Treasurers will validate the transaction
+# # and credit the note later.
+# credit_type = None if soge else credit_type
# If the user does not select any payment method, then no credit will be performed.
credit_amount = 0 if credit_type is None else credit_amount
- if fee > credit_amount and not soge:
+# if fee > credit_amount and not soge:
+ if fee > credit_amount:
# Check if the user credits enough money
form.add_error('credit_type',
_("The entered amount is not enough for the memberships, should be at least {}")
@@ -320,12 +337,12 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
user.profile.save()
user.refresh_from_db()
- if not soge and SogeCredit.objects.filter(user=user).exists():
- # If the user declared that a bank account was opened but in the validation form the SoGé case was
- # unchecked, delete the associated credit
- soge_credit = SogeCredit.objects.get(user=user)
- soge_credit._force_delete = True
- soge_credit.delete()
+# if not soge and SogeCredit.objects.filter(user=user).exists():
+# # If the user declared that a bank account was opened but in the validation form the SoGé case was
+# # unchecked, delete the associated credit
+# soge_credit = SogeCredit.objects.get(user=user)
+# soge_credit._force_delete = True
+# soge_credit.delete()
if credit_type is not None and credit_amount > 0:
# Credit the note
@@ -334,7 +351,8 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
destination=user.note,
quantity=1,
amount=credit_amount,
- reason="Crédit " + ("Société générale" if soge else credit_type.special_type) + " (Inscription)",
+ reason="Crédit " + credit_type.special_type + " (Inscription)",
+ # reason="Crédit " + ("Société générale" if soge else credit_type.special_type) + " (Inscription)",
last_name=last_name,
first_name=first_name,
bank=bank,
@@ -348,8 +366,8 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
user=user,
fee=bde_fee,
)
- if soge:
- membership._soge = True
+# if soge:
+# membership._soge = True
membership.save()
membership.refresh_from_db()
membership.roles.add(Role.objects.get(name="Adhérent BDE"))
@@ -362,17 +380,29 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
user=user,
fee=kfet_fee,
)
- if soge:
- membership._soge = True
+# if soge:
+# membership._soge = True
membership.save()
membership.refresh_from_db()
membership.roles.add(Role.objects.get(name="Adhérent Kfet"))
membership.save()
- if soge:
- soge_credit = SogeCredit.objects.get(user=user)
- # Update the credit transaction amount
- soge_credit.save()
+ if bda_exists and join_bda:
+ # Create membership for the user to the BDA starting today
+ membership = Membership(
+ club=bda,
+ user=user,
+ fee=bda_fee,
+ )
+ membership.save()
+ membership.refresh_from_db()
+ membership.roles.add(Role.objects.get(name="Membre de club"))
+ membership.save()
+
+# if soge:
+# soge_credit = SogeCredit.objects.get(user=user)
+# # Update the credit transaction amount
+# soge_credit.save()
return ret
diff --git a/apps/treasury/models.py b/apps/treasury/models.py
index 9198481c..fc20da3b 100644
--- a/apps/treasury/models.py
+++ b/apps/treasury/models.py
@@ -1,6 +1,5 @@
-# Copyright (C) 2018-2021 by BDE ENS Paris-Saclay
+# Copyright (C) 2018-2023 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
-import datetime
from datetime import date
from django.conf import settings
@@ -12,7 +11,8 @@ from django.db.models import Q
from django.template.loader import render_to_string
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
-from member.models import Club, Membership
+# from member.models import Club, Membership # Club unused because of disabled soge
+from member.models import Membership
from note.models import NoteSpecial, SpecialTransaction, MembershipTransaction, NoteUser
@@ -326,12 +326,12 @@ class SogeCredit(models.Model):
if self.valid or not self.pk:
return
- bde = Club.objects.get(name="BDE")
- kfet = Club.objects.get(name="Kfet")
- bde_qs = Membership.objects.filter(user=self.user, club=bde, date_start__gte=bde.membership_start)
- kfet_qs = Membership.objects.filter(user=self.user, club=kfet, date_start__gte=kfet.membership_start)
+# Soge do not pay BDE and kfet memberships since 2022
+# bde = Club.objects.get(name="BDE")
+# kfet = Club.objects.get(name="Kfet")
+# bde_qs = Membership.objects.filter(user=self.user, club=bde, date_start__gte=bde.membership_start)
+# kfet_qs = Membership.objects.filter(user=self.user, club=kfet, date_start__gte=kfet.membership_start)
-## Soge do not pay BDE and kfet memberships this year (2022-2023)
# if bde_qs.exists():
# m = bde_qs.get()
# if MembershipTransaction.objects.filter(membership=m).exists(): # non-free membership
@@ -388,7 +388,6 @@ class SogeCredit(models.Model):
for tr in self.transactions.all():
tr.valid = True
tr._force_save = True
- tr.created_at = timezone.now()
tr.save()
@transaction.atomic
@@ -437,12 +436,11 @@ class SogeCredit(models.Model):
for tr in self.transactions.all():
tr._force_save = True
tr.valid = True
- tr.created_at = timezone.now()
tr.save()
if self.credit_transaction:
# If the soge credit is deleted while the user is not validated yet,
# there is not credit transaction.
- # There is a credit transaction iff the user declares that no bank account
+ # There is a credit transaction if the user declares that no bank account
# was opened after the validation of the account.
self.credit_transaction.valid = False
self.credit_transaction.reason += " (invalide)"
diff --git a/apps/wei/forms/registration.py b/apps/wei/forms/registration.py
index e934fb50..408071f4 100644
--- a/apps/wei/forms/registration.py
+++ b/apps/wei/forms/registration.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2018-2021 by BDE ENS Paris-Saclay
+# Copyright (C) 2018-2023 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
from django import forms
@@ -38,7 +38,7 @@ class WEIRegistrationForm(forms.ModelForm):
class Meta:
model = WEIRegistration
- exclude = ('wei', )
+ exclude = ('wei', 'clothing_cut')
widgets = {
"user": Autocomplete(
User,
diff --git a/apps/wei/forms/surveys/wei2021.py b/apps/wei/forms/surveys/wei2021.py
index e515d447..cbf615c2 100644
--- a/apps/wei/forms/surveys/wei2021.py
+++ b/apps/wei/forms/surveys/wei2021.py
@@ -148,7 +148,7 @@ class WEISurvey2021(WEISurvey):
buses = cls.get_algorithm_class().get_buses()
return sum([cls.get_algorithm_class().get_bus_information(bus).scores[word] for bus in buses]) / buses.count()
- @lru_cache()
+# @lru_cache
def score(self, bus):
if not self.is_complete():
raise ValueError("Survey is not ended, can't calculate score")
@@ -159,11 +159,11 @@ class WEISurvey2021(WEISurvey):
- self.word_mean(getattr(self.information, 'word' + str(i))) for i in range(1, 21)) / 20
return s
- @lru_cache()
+# @lru_cache()
def scores_per_bus(self):
return {bus: self.score(bus) for bus in self.get_algorithm_class().get_buses()}
- @lru_cache()
+# @lru_cache()
def ordered_buses(self):
values = list(self.scores_per_bus().items())
values.sort(key=lambda item: -item[1])
diff --git a/apps/wei/forms/surveys/wei2022.py b/apps/wei/forms/surveys/wei2022.py
index cb2b4adb..0c8a16d4 100644
--- a/apps/wei/forms/surveys/wei2022.py
+++ b/apps/wei/forms/surveys/wei2022.py
@@ -14,17 +14,17 @@ from .base import WEISurvey, WEISurveyInformation, WEISurveyAlgorithm, WEIBusInf
from ...models import WEIMembership
WORDS = [
- 'ABBA', 'After', 'Alcoolique anonyme', 'Ambiance festive', 'Années 2000', 'Apéro', 'Art',
- 'Baby foot billard biere pong', 'BBQ', 'Before', 'Bière pong', 'Bon enfant', 'Calme', 'Canapé',
- 'Chanson paillarde', 'Chanson populaire', 'Chartreuse', 'Cheerleader', 'Chill', 'Choré',
- 'Cinéma', 'Cocktail', 'Comédie musicle', 'Commercial', 'Copaing', 'Danse', 'Dancefloor',
- 'Electro', 'Fanfare', 'Gin tonic', 'Inclusif', 'Jazz', "Jeux d'alcool", 'Jeux de carte',
- 'Jeux de rôle', 'Jeux de société', 'JUL', 'Jus de fruit', 'Kfet', 'Kleptomanie assurée',
- 'LGBTQ+', 'Livre', 'Morning beer', 'Musique', 'NAPS', 'Paillettes', 'Pastis', 'Paté Hénaff',
- 'Peluche', 'Pena baiona', "Peu d'alcool", 'Pilier de bar', 'PMU', 'Poulpe', 'Punch', 'Rap',
- 'Réveil', 'Rock', 'Rugby', 'Sandwich', 'Serge', 'Shot', 'Sociable', 'Spectacle', 'Techno',
- 'Techno house', 'Thérapie Taxi', 'Tradition kchanaises', 'Troisième mi-temps', 'Turn up',
- 'Vodka', 'Vodka pomme', 'Volley', 'Vomi stratégique'
+ 'ABBA', 'After', 'Alcoolique anonyme', 'Ambiance festive', 'Années 2000', 'Apéro', 'Art',
+ 'Baby foot billard biere pong', 'BBQ', 'Before', 'Bière pong', 'Bon enfant', 'Calme', 'Canapé',
+ 'Chanson paillarde', 'Chanson populaire', 'Chartreuse', 'Cheerleader', 'Chill', 'Choré',
+ 'Cinéma', 'Cocktail', 'Comédie musicle', 'Commercial', 'Copaing', 'Danse', 'Dancefloor',
+ 'Electro', 'Fanfare', 'Gin tonic', 'Inclusif', 'Jazz', "Jeux d'alcool", 'Jeux de carte',
+ 'Jeux de rôle', 'Jeux de société', 'JUL', 'Jus de fruit', 'Kfet', 'Kleptomanie assurée',
+ 'LGBTQ+', 'Livre', 'Morning beer', 'Musique', 'NAPS', 'Paillettes', 'Pastis', 'Paté Hénaff',
+ 'Peluche', 'Pena baiona', "Peu d'alcool", 'Pilier de bar', 'PMU', 'Poulpe', 'Punch', 'Rap',
+ 'Réveil', 'Rock', 'Rugby', 'Sandwich', 'Serge', 'Shot', 'Sociable', 'Spectacle', 'Techno',
+ 'Techno house', 'Thérapie Taxi', 'Tradition kchanaises', 'Troisième mi-temps', 'Turn up',
+ 'Vodka', 'Vodka pomme', 'Volley', 'Vomi stratégique'
]
@@ -151,7 +151,7 @@ class WEISurvey2022(WEISurvey):
buses = cls.get_algorithm_class().get_buses()
return sum([cls.get_algorithm_class().get_bus_information(bus).scores[word] for bus in buses]) / buses.count()
- @lru_cache()
+# @lru_cache()
def score(self, bus):
if not self.is_complete():
raise ValueError("Survey is not ended, can't calculate score")
@@ -162,11 +162,11 @@ class WEISurvey2022(WEISurvey):
- self.word_mean(getattr(self.information, 'word' + str(i))) for i in range(1, 21)) / 20
return s
- @lru_cache()
+# @lru_cache()
def scores_per_bus(self):
return {bus: self.score(bus) for bus in self.get_algorithm_class().get_buses()}
- @lru_cache()
+# @lru_cache()
def ordered_buses(self):
values = list(self.scores_per_bus().items())
values.sort(key=lambda item: -item[1])
diff --git a/apps/wei/migrations/0006_unisex_clothing_cut.py b/apps/wei/migrations/0006_unisex_clothing_cut.py
new file mode 100644
index 00000000..c2ed7c97
--- /dev/null
+++ b/apps/wei/migrations/0006_unisex_clothing_cut.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.28 on 2023-07-09 09:51
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('wei', '0005_auto_20230128_1850'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='weiregistration',
+ name='clothing_cut',
+ field=models.CharField(choices=[('male', 'Male'), ('female', 'Female'), ('unisex', 'Unisex')], default='unisex', max_length=16, verbose_name='clothing cut'),
+ ),
+ ]
diff --git a/apps/wei/migrations/0007_help_text_emergency_contact.py b/apps/wei/migrations/0007_help_text_emergency_contact.py
new file mode 100644
index 00000000..4437db7d
--- /dev/null
+++ b/apps/wei/migrations/0007_help_text_emergency_contact.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.28 on 2023-07-09 12:46
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('wei', '0006_unisex_clothing_cut'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='weiregistration',
+ name='emergency_contact_name',
+ field=models.CharField(help_text='The emergency contact must not be a WEI participant', max_length=255, verbose_name='emergency contact name'),
+ ),
+ ]
diff --git a/apps/wei/models.py b/apps/wei/models.py
index 6b7272b4..6b05609f 100644
--- a/apps/wei/models.py
+++ b/apps/wei/models.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2018-2021 by BDE ENS Paris-Saclay
+# Copyright (C) 2018-2023 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later
import json
@@ -209,7 +209,9 @@ class WEIRegistration(models.Model):
choices=(
('male', _("Male")),
('female', _("Female")),
+ ('unisex', _("Unisex")),
),
+ default='unisex',
verbose_name=_("clothing cut"),
)
@@ -235,6 +237,7 @@ class WEIRegistration(models.Model):
emergency_contact_name = models.CharField(
max_length=255,
verbose_name=_("emergency contact name"),
+ help_text=_("The emergency contact must not be a WEI participant")
)
emergency_contact_phone = PhoneNumberField(
diff --git a/apps/wei/templates/wei/weimembership_form.html b/apps/wei/templates/wei/weimembership_form.html
index 7d1059b7..017b0dd7 100644
--- a/apps/wei/templates/wei/weimembership_form.html
+++ b/apps/wei/templates/wei/weimembership_form.html
@@ -56,7 +56,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
{{ registration.get_gender_display }}
{% trans 'clothing cut'|capfirst %}
- {{ registration.clothing_cut }}
+ {{ registration.get_clothing_cut_display }}
{% trans 'clothing size'|capfirst %}
{{ registration.clothing_size }}
diff --git a/docs/api/wei.rst b/docs/api/wei.rst
index 8c92c026..125ac9b4 100644
--- a/docs/api/wei.rst
+++ b/docs/api/wei.rst
@@ -448,6 +448,10 @@ Options
"value": "female",
"display_name": "Femme"
}
+ {
+ "value": "unisex",
+ "display_name": "Unisexe"
+ },
]
},
"clothing_size": {
diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po
index 8404af4d..0900b1b4 100644
--- a/locale/de/LC_MESSAGES/django.po
+++ b/locale/de/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-31 17:08+0200\n"
+"POT-Creation-Date: 2023-07-09 14:46+0200\n"
"PO-Revision-Date: 2020-11-16 20:02+0000\n"
"Last-Translator: bleizi \n"
"Language-Team: German \n"
@@ -115,7 +115,7 @@ msgid "type"
msgstr "Type"
#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:307
-#: apps/note/models/notes.py:148 apps/treasury/models.py:286
+#: apps/note/models/notes.py:148 apps/treasury/models.py:287
#: apps/wei/models.py:173 apps/wei/templates/wei/attribute_bus_1A.html:13
#: apps/wei/templates/wei/survey.html:15
msgid "user"
@@ -258,19 +258,19 @@ msgstr "Eingetreten um "
msgid "remove"
msgstr "entfernen"
-#: apps/activity/tables.py:82 apps/note/forms.py:68 apps/treasury/models.py:200
+#: apps/activity/tables.py:82 apps/note/forms.py:68 apps/treasury/models.py:201
msgid "Type"
msgstr "Type"
#: apps/activity/tables.py:84 apps/member/forms.py:186
-#: apps/registration/forms.py:91 apps/treasury/forms.py:131
+#: apps/registration/forms.py:92 apps/treasury/forms.py:131
#: apps/wei/forms/registration.py:104
msgid "Last name"
msgstr "Nachname"
#: apps/activity/tables.py:86 apps/member/forms.py:191
#: apps/note/templates/note/transaction_form.html:138
-#: apps/registration/forms.py:96 apps/treasury/forms.py:133
+#: apps/registration/forms.py:97 apps/treasury/forms.py:133
#: apps/wei/forms/registration.py:109
msgid "First name"
msgstr "Vorname"
@@ -549,24 +549,24 @@ msgid "This image cannot be loaded."
msgstr "Dieses Bild kann nicht geladen werden."
#: apps/member/forms.py:141 apps/member/views.py:103
-#: apps/registration/forms.py:33 apps/registration/views.py:262
+#: apps/registration/forms.py:34 apps/registration/views.py:266
msgid "An alias with a similar name already exists."
msgstr "Ein ähnliches Alias ist schon benutzt."
-#: apps/member/forms.py:165 apps/registration/forms.py:71
+#: apps/member/forms.py:165
msgid "Inscription paid by Société Générale"
msgstr "Mitgliedschaft von der Société Générale bezahlt"
-#: apps/member/forms.py:167 apps/registration/forms.py:73
+#: apps/member/forms.py:167
msgid "Check this case if the Société Générale paid the inscription."
msgstr "Die Société Générale die Mitgliedschaft bezahlt."
-#: apps/member/forms.py:172 apps/registration/forms.py:78
+#: apps/member/forms.py:172 apps/registration/forms.py:79
#: apps/wei/forms/registration.py:91
msgid "Credit type"
msgstr "Kredittype"
-#: apps/member/forms.py:173 apps/registration/forms.py:79
+#: apps/member/forms.py:173 apps/registration/forms.py:80
#: apps/wei/forms/registration.py:92
msgid "No credit"
msgstr "Kein Kredit"
@@ -575,13 +575,13 @@ msgstr "Kein Kredit"
msgid "You can credit the note of the user."
msgstr "Sie dûrfen diese Note kreditieren."
-#: apps/member/forms.py:179 apps/registration/forms.py:84
+#: apps/member/forms.py:179 apps/registration/forms.py:85
#: apps/wei/forms/registration.py:97
msgid "Credit amount"
msgstr "Kreditanzahl"
#: apps/member/forms.py:196 apps/note/templates/note/transaction_form.html:144
-#: apps/registration/forms.py:101 apps/treasury/forms.py:135
+#: apps/registration/forms.py:102 apps/treasury/forms.py:135
#: apps/wei/forms/registration.py:114
msgid "Bank"
msgstr "Bank"
@@ -1193,7 +1193,7 @@ msgstr "Speichern"
msgid "Registrations"
msgstr "Anmeldung"
-#: apps/member/views.py:73 apps/registration/forms.py:23
+#: apps/member/views.py:73 apps/registration/forms.py:24
msgid "This address must be valid."
msgstr "Diese Adresse muss gültig sein."
@@ -1249,11 +1249,11 @@ msgstr "Die Mitgliedschaft muss nach {:%m-%d-Y} anfängen."
msgid "The membership must begin before {:%m-%d-%Y}."
msgstr "Die Mitgliedschaft muss vor {:%m-%d-Y} anfängen."
-#: apps/member/views.py:876
+#: apps/member/views.py:880
msgid "Manage roles of an user in the club"
msgstr "Rollen in diesen Club bearbeiten"
-#: apps/member/views.py:901
+#: apps/member/views.py:905
msgid "Members of the club"
msgstr "Mitlglieder dieses Club"
@@ -1570,7 +1570,7 @@ msgstr "Sondertranskationen"
msgid "membership transaction"
msgstr "Mitgliedschafttransaktion"
-#: apps/note/models/transactions.py:385 apps/treasury/models.py:293
+#: apps/note/models/transactions.py:385 apps/treasury/models.py:294
msgid "membership transactions"
msgstr "Mitgliedschaftttransaktionen"
@@ -1689,7 +1689,7 @@ msgid "Amount"
msgstr "Anzahl"
#: apps/note/templates/note/transaction_form.html:132
-#: apps/treasury/models.py:55
+#: apps/treasury/models.py:56
msgid "Name"
msgstr "Name"
@@ -1982,29 +1982,15 @@ msgstr "Alle Rechten"
msgid "registration"
msgstr "Anmeldung"
-#: apps/registration/forms.py:39
+#: apps/registration/forms.py:40
msgid "This email address is already used."
msgstr "Diese email adresse ist schon benutzt."
-#: apps/registration/forms.py:49
-#, fuzzy
-#| msgid "You already opened an account in the Société générale."
-msgid ""
-"I declare that I opened or I will open soon a bank account in the Société "
-"générale with the BDE partnership."
-msgstr "Sie haben bereits ein Konto in der Société générale eröffnet."
-
-#: apps/registration/forms.py:51
-msgid ""
-"Warning: this engages you to open your bank account. If you finally decides "
-"to don't open your account, you will have to pay the BDE membership."
-msgstr ""
-
-#: apps/registration/forms.py:59
+#: apps/registration/forms.py:60
msgid "Register to the WEI"
msgstr "Zu WEI anmelden"
-#: apps/registration/forms.py:61
+#: apps/registration/forms.py:62
msgid ""
"Check this case if you want to register to the WEI. If you hesitate, you "
"will be able to register later, after validating your account in the Kfet."
@@ -2013,14 +1999,18 @@ msgstr ""
"falls Zweifel, können Sie sich später nach Bestätigung Ihres Kontos im Kfet "
"registrieren."
-#: apps/registration/forms.py:106
+#: apps/registration/forms.py:107
msgid "Join BDE Club"
msgstr "BDE Mitglieder werden"
-#: apps/registration/forms.py:113
+#: apps/registration/forms.py:114
msgid "Join Kfet Club"
msgstr "Kfet Mitglieder werden"
+#: apps/registration/forms.py:123
+msgid "Join BDA Club"
+msgstr "BDA Mitglieder werden"
+
#: apps/registration/templates/registration/email_validation_complete.html:15
msgid "Your email have successfully been validated."
msgstr "Ihre E-Mail wurde erfolgreich validiert."
@@ -2069,14 +2059,14 @@ msgstr "Registrierung löschen"
msgid "Validate account"
msgstr "Konto validieren"
-#: apps/registration/templates/registration/future_profile_detail.html:62
+#: apps/registration/templates/registration/future_profile_detail.html:63
#, fuzzy
#| msgid "You already opened an account in the Société générale."
msgid ""
"The user declared that he/she opened a bank account in the Société générale."
msgstr "Sie haben bereits ein Konto in der Société générale eröffnet."
-#: apps/registration/templates/registration/future_profile_detail.html:71
+#: apps/registration/templates/registration/future_profile_detail.html:73
#: apps/wei/templates/wei/weimembership_form.html:127
#: apps/wei/templates/wei/weimembership_form.html:186
msgid "Validate registration"
@@ -2128,54 +2118,54 @@ msgstr "Danke"
msgid "The Note Kfet team."
msgstr "Die NoteKfet Team."
-#: apps/registration/views.py:40
+#: apps/registration/views.py:41
msgid "Register new user"
msgstr "Neuen User registrieren"
-#: apps/registration/views.py:98
+#: apps/registration/views.py:99
msgid "Email validation"
msgstr "Email validierung"
-#: apps/registration/views.py:100
+#: apps/registration/views.py:101
msgid "Validate email"
msgstr "Email validieren"
-#: apps/registration/views.py:144
+#: apps/registration/views.py:145
msgid "Email validation unsuccessful"
msgstr "Email validierung unerfolgreich"
-#: apps/registration/views.py:155
+#: apps/registration/views.py:156
msgid "Email validation email sent"
msgstr "Validierungsemail wurde gesendet"
-#: apps/registration/views.py:163
+#: apps/registration/views.py:164
msgid "Resend email validation link"
msgstr "E-Mail-Validierungslink erneut senden"
-#: apps/registration/views.py:181
+#: apps/registration/views.py:182
msgid "Pre-registered users list"
msgstr "Vorregistrierte Userliste"
-#: apps/registration/views.py:205
+#: apps/registration/views.py:206
msgid "Unregistered users"
msgstr "Unregistrierte Users"
-#: apps/registration/views.py:218
+#: apps/registration/views.py:219
msgid "Registration detail"
msgstr "Registrierung Detailen"
-#: apps/registration/views.py:282
+#: apps/registration/views.py:293
msgid "You must join the BDE."
msgstr "Sie müssen die BDE beitreten."
-#: apps/registration/views.py:306
+#: apps/registration/views.py:323
msgid ""
"The entered amount is not enough for the memberships, should be at least {}"
msgstr ""
"Der eingegebene Betrag reicht für die Mitgliedschaft nicht aus, sollte "
"mindestens {} betragen"
-#: apps/registration/views.py:387
+#: apps/registration/views.py:417
msgid "Invalidate pre-registration"
msgstr "Ungültige Vorregistrierung"
@@ -2183,7 +2173,7 @@ msgstr "Ungültige Vorregistrierung"
msgid "Treasury"
msgstr "Quaestor"
-#: apps/treasury/forms.py:26 apps/treasury/models.py:94
+#: apps/treasury/forms.py:26 apps/treasury/models.py:95
#: apps/treasury/templates/treasury/invoice_form.html:22
msgid "This invoice is locked and can no longer be edited."
msgstr "Diese Rechnung ist gesperrt und kann nicht mehr bearbeitet werden."
@@ -2196,7 +2186,7 @@ msgstr "Überweisung ist bereits geschlossen."
msgid "You can't change the type of the remittance."
msgstr "Sie können die Art der Überweisung nicht ändern."
-#: apps/treasury/forms.py:125 apps/treasury/models.py:268
+#: apps/treasury/forms.py:125 apps/treasury/models.py:269
#: apps/treasury/tables.py:97 apps/treasury/tables.py:105
#: apps/treasury/templates/treasury/invoice_list.html:16
#: apps/treasury/templates/treasury/remittance_list.html:16
@@ -2212,112 +2202,112 @@ msgstr "Keine beigefügte Überweisung"
msgid "Invoice identifier"
msgstr "Rechnungskennung"
-#: apps/treasury/models.py:41
+#: apps/treasury/models.py:42
msgid "BDE"
msgstr "BDE"
-#: apps/treasury/models.py:46
+#: apps/treasury/models.py:47
msgid "Object"
msgstr "Objekt"
-#: apps/treasury/models.py:50
+#: apps/treasury/models.py:51
msgid "Description"
msgstr "Beschreibung"
-#: apps/treasury/models.py:59
+#: apps/treasury/models.py:60
msgid "Address"
msgstr "Adresse"
-#: apps/treasury/models.py:64 apps/treasury/models.py:194
+#: apps/treasury/models.py:65 apps/treasury/models.py:195
msgid "Date"
msgstr "Datum"
-#: apps/treasury/models.py:68
+#: apps/treasury/models.py:69
msgid "Acquitted"
msgstr "Bezahlt"
-#: apps/treasury/models.py:73
+#: apps/treasury/models.py:74
msgid "Locked"
msgstr "Gesperrt"
-#: apps/treasury/models.py:74
+#: apps/treasury/models.py:75
msgid "An invoice can't be edited when it is locked."
msgstr "Eine Rechnung kann nicht bearbeitet werden, wenn sie gesperrt ist."
-#: apps/treasury/models.py:80
+#: apps/treasury/models.py:81
msgid "tex source"
msgstr "Tex Quelle"
-#: apps/treasury/models.py:114 apps/treasury/models.py:130
+#: apps/treasury/models.py:115 apps/treasury/models.py:131
msgid "invoice"
msgstr "Rechnung"
-#: apps/treasury/models.py:115
+#: apps/treasury/models.py:116
msgid "invoices"
msgstr "Rechnungen"
-#: apps/treasury/models.py:118
+#: apps/treasury/models.py:119
#, python-brace-format
msgid "Invoice #{id}"
msgstr "Rechnung #{id}"
-#: apps/treasury/models.py:135
+#: apps/treasury/models.py:136
msgid "Designation"
msgstr "Bezeichnung"
-#: apps/treasury/models.py:141
+#: apps/treasury/models.py:142
msgid "Quantity"
msgstr "Qualität"
-#: apps/treasury/models.py:146
+#: apps/treasury/models.py:147
msgid "Unit price"
msgstr "Einzelpreis"
-#: apps/treasury/models.py:162
+#: apps/treasury/models.py:163
msgid "product"
msgstr "Produkt"
-#: apps/treasury/models.py:163
+#: apps/treasury/models.py:164
msgid "products"
msgstr "Produkten"
-#: apps/treasury/models.py:183
+#: apps/treasury/models.py:184
msgid "remittance type"
msgstr "Überweisungstyp"
-#: apps/treasury/models.py:184
+#: apps/treasury/models.py:185
msgid "remittance types"
msgstr "Überweisungstypen"
-#: apps/treasury/models.py:205
+#: apps/treasury/models.py:206
msgid "Comment"
msgstr "Kommentar"
-#: apps/treasury/models.py:210
+#: apps/treasury/models.py:211
msgid "Closed"
msgstr "Geschlossen"
-#: apps/treasury/models.py:214
+#: apps/treasury/models.py:215
msgid "remittance"
msgstr "Überweisung"
-#: apps/treasury/models.py:215
+#: apps/treasury/models.py:216
msgid "remittances"
msgstr "Überweisungen"
-#: apps/treasury/models.py:248
+#: apps/treasury/models.py:249
msgid "Remittance #{:d}: {}"
msgstr "Überweisung #{:d}:{}"
-#: apps/treasury/models.py:272
+#: apps/treasury/models.py:273
msgid "special transaction proxy"
msgstr "spezielle Transaktion Proxy"
-#: apps/treasury/models.py:273
+#: apps/treasury/models.py:274
msgid "special transaction proxies"
msgstr "spezielle Transaktion Proxies"
-#: apps/treasury/models.py:299
+#: apps/treasury/models.py:300
msgid "credit transaction"
msgstr "Kredit Transaktion"
@@ -2329,16 +2319,16 @@ msgstr ""
"Dieser Benutzer hat nicht genug Geld, um die Mitgliedschaften mit seiner "
"Note zu bezahlen."
-#: apps/treasury/models.py:453
+#: apps/treasury/models.py:452
#: apps/treasury/templates/treasury/sogecredit_detail.html:10
msgid "Credit from the Société générale"
msgstr "Kredit von der Société générale"
-#: apps/treasury/models.py:454
+#: apps/treasury/models.py:453
msgid "Credits from the Société générale"
msgstr "Krediten von der Société générale"
-#: apps/treasury/models.py:457
+#: apps/treasury/models.py:456
#, python-brace-format
msgid "Soge credit for {user}"
msgstr "Kredit von der Société générale für {user}"
@@ -2602,7 +2592,7 @@ msgid "The selected user is not validated. Please validate its account first"
msgstr ""
#: apps/wei/forms/registration.py:59 apps/wei/models.py:126
-#: apps/wei/models.py:323
+#: apps/wei/models.py:326
msgid "bus"
msgstr "Bus"
@@ -2727,40 +2717,48 @@ msgstr "Nicht binär"
msgid "gender"
msgstr "Geschlecht"
-#: apps/wei/models.py:213 apps/wei/templates/wei/weimembership_form.html:58
+#: apps/wei/models.py:212
+msgid "Unisex"
+msgstr "Unisex"
+
+#: apps/wei/models.py:215 apps/wei/templates/wei/weimembership_form.html:58
msgid "clothing cut"
msgstr "Kleidung Schnitt"
-#: apps/wei/models.py:226 apps/wei/templates/wei/weimembership_form.html:61
+#: apps/wei/models.py:228 apps/wei/templates/wei/weimembership_form.html:61
msgid "clothing size"
msgstr "Kleidergröße"
-#: apps/wei/models.py:232 apps/wei/templates/wei/attribute_bus_1A.html:28
+#: apps/wei/models.py:234 apps/wei/templates/wei/attribute_bus_1A.html:28
#: apps/wei/templates/wei/weimembership_form.html:67
msgid "health issues"
msgstr "Gesundheitsprobleme"
-#: apps/wei/models.py:237 apps/wei/templates/wei/weimembership_form.html:70
+#: apps/wei/models.py:239 apps/wei/templates/wei/weimembership_form.html:70
msgid "emergency contact name"
msgstr "Notfall-Kontakt"
-#: apps/wei/models.py:242 apps/wei/templates/wei/weimembership_form.html:73
+#: apps/wei/models.py:240
+msgid "The emergency contact must not be a WEI participant"
+msgstr "Der Notfallkontakt darf kein WEI-Teilnehmer sein"
+
+#: apps/wei/models.py:245 apps/wei/templates/wei/weimembership_form.html:73
msgid "emergency contact phone"
msgstr "Notfallkontakttelefon"
-#: apps/wei/models.py:247 apps/wei/templates/wei/weimembership_form.html:52
+#: apps/wei/models.py:250 apps/wei/templates/wei/weimembership_form.html:52
msgid "first year"
msgstr "Erste Jahr"
-#: apps/wei/models.py:248
+#: apps/wei/models.py:251
msgid "Tells if the user is new in the school."
msgstr "Gibt an, ob der USer neu in der Schule ist."
-#: apps/wei/models.py:253
+#: apps/wei/models.py:256
msgid "registration information"
msgstr "Registrierung Detailen"
-#: apps/wei/models.py:254
+#: apps/wei/models.py:257
msgid ""
"Information about the registration (buses for old members, survey for the "
"new members), encoded in JSON"
@@ -2768,27 +2766,27 @@ msgstr ""
"Informationen zur Registrierung (Busse für alte Mitglieder, Umfrage für neue "
"Mitglieder), verschlüsselt in JSON"
-#: apps/wei/models.py:312
+#: apps/wei/models.py:315
msgid "WEI User"
msgstr "WEI User"
-#: apps/wei/models.py:313
+#: apps/wei/models.py:316
msgid "WEI Users"
msgstr "WEI Users"
-#: apps/wei/models.py:333
+#: apps/wei/models.py:336
msgid "team"
msgstr "Team"
-#: apps/wei/models.py:343
+#: apps/wei/models.py:346
msgid "WEI registration"
msgstr "WEI Registrierung"
-#: apps/wei/models.py:347
+#: apps/wei/models.py:350
msgid "WEI membership"
msgstr "WEI Mitgliedschaft"
-#: apps/wei/models.py:348
+#: apps/wei/models.py:351
msgid "WEI memberships"
msgstr "WEI Mitgliedschaften"
@@ -3612,6 +3610,13 @@ msgstr ""
"müssen Ihre E-Mail-Adresse auch überprüfen, indem Sie dem Link folgen, den "
"Sie erhalten haben."
+#, fuzzy
+#~| msgid "You already opened an account in the Société générale."
+#~ msgid ""
+#~ "I declare that I opened or I will open soon a bank account in the Société "
+#~ "générale with the BDE partnership."
+#~ msgstr "Sie haben bereits ein Konto in der Société générale eröffnet."
+
#~ msgid "This user didn't give her/his caution check."
#~ msgstr "Dieser User hat seine / ihre Vorsicht nicht überprüft."
diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po
index 6e204d6c..78a6aae1 100644
--- a/locale/es/LC_MESSAGES/django.po
+++ b/locale/es/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-31 17:08+0200\n"
+"POT-Creation-Date: 2023-07-09 14:46+0200\n"
"PO-Revision-Date: 2022-04-11 23:12+0200\n"
"Last-Translator: bleizi \n"
"Language-Team: \n"
@@ -114,7 +114,7 @@ msgid "type"
msgstr "tipo"
#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:307
-#: apps/note/models/notes.py:148 apps/treasury/models.py:286
+#: apps/note/models/notes.py:148 apps/treasury/models.py:287
#: apps/wei/models.py:173 apps/wei/templates/wei/attribute_bus_1A.html:13
#: apps/wei/templates/wei/survey.html:15
msgid "user"
@@ -257,19 +257,19 @@ msgstr "Entrado el "
msgid "remove"
msgstr "quitar"
-#: apps/activity/tables.py:82 apps/note/forms.py:68 apps/treasury/models.py:200
+#: apps/activity/tables.py:82 apps/note/forms.py:68 apps/treasury/models.py:201
msgid "Type"
msgstr "Tipo"
#: apps/activity/tables.py:84 apps/member/forms.py:186
-#: apps/registration/forms.py:91 apps/treasury/forms.py:131
+#: apps/registration/forms.py:92 apps/treasury/forms.py:131
#: apps/wei/forms/registration.py:104
msgid "Last name"
msgstr "Apellido"
#: apps/activity/tables.py:86 apps/member/forms.py:191
#: apps/note/templates/note/transaction_form.html:138
-#: apps/registration/forms.py:96 apps/treasury/forms.py:133
+#: apps/registration/forms.py:97 apps/treasury/forms.py:133
#: apps/wei/forms/registration.py:109
msgid "First name"
msgstr "Nombre"
@@ -546,24 +546,24 @@ msgid "This image cannot be loaded."
msgstr "Esta imagen no puede ser cargada."
#: apps/member/forms.py:141 apps/member/views.py:103
-#: apps/registration/forms.py:33 apps/registration/views.py:262
+#: apps/registration/forms.py:34 apps/registration/views.py:266
msgid "An alias with a similar name already exists."
msgstr "Un alias similar ya existe."
-#: apps/member/forms.py:165 apps/registration/forms.py:71
+#: apps/member/forms.py:165
msgid "Inscription paid by Société Générale"
msgstr "Registración pagadas por Société Générale"
-#: apps/member/forms.py:167 apps/registration/forms.py:73
+#: apps/member/forms.py:167
msgid "Check this case if the Société Générale paid the inscription."
msgstr "Marcar esta casilla si Société Générale pagó la registración."
-#: apps/member/forms.py:172 apps/registration/forms.py:78
+#: apps/member/forms.py:172 apps/registration/forms.py:79
#: apps/wei/forms/registration.py:91
msgid "Credit type"
msgstr "Tipo de crédito"
-#: apps/member/forms.py:173 apps/registration/forms.py:79
+#: apps/member/forms.py:173 apps/registration/forms.py:80
#: apps/wei/forms/registration.py:92
msgid "No credit"
msgstr "No crédito"
@@ -572,13 +572,13 @@ msgstr "No crédito"
msgid "You can credit the note of the user."
msgstr "Usted puede acreditar la note del usuario."
-#: apps/member/forms.py:179 apps/registration/forms.py:84
+#: apps/member/forms.py:179 apps/registration/forms.py:85
#: apps/wei/forms/registration.py:97
msgid "Credit amount"
msgstr "Valor del crédito"
#: apps/member/forms.py:196 apps/note/templates/note/transaction_form.html:144
-#: apps/registration/forms.py:101 apps/treasury/forms.py:135
+#: apps/registration/forms.py:102 apps/treasury/forms.py:135
#: apps/wei/forms/registration.py:114
msgid "Bank"
msgstr "Banco"
@@ -1180,7 +1180,7 @@ msgstr "Guardar cambios"
msgid "Registrations"
msgstr "Registraciones"
-#: apps/member/views.py:73 apps/registration/forms.py:23
+#: apps/member/views.py:73 apps/registration/forms.py:24
msgid "This address must be valid."
msgstr "Este correo tiene que ser valido."
@@ -1236,11 +1236,11 @@ msgstr "La afiliación tiene que empezar después del {:%d-%m-%Y}."
msgid "The membership must begin before {:%m-%d-%Y}."
msgstr "La afiliación tiene que empezar antes del {:%d-%m-%Y}."
-#: apps/member/views.py:876
+#: apps/member/views.py:880
msgid "Manage roles of an user in the club"
msgstr "Gestionar los papeles de un usuario en el club"
-#: apps/member/views.py:901
+#: apps/member/views.py:905
msgid "Members of the club"
msgstr "Miembros del club"
@@ -1557,7 +1557,7 @@ msgstr "Transacciones especiales"
msgid "membership transaction"
msgstr "transacción de afiliación"
-#: apps/note/models/transactions.py:385 apps/treasury/models.py:293
+#: apps/note/models/transactions.py:385 apps/treasury/models.py:294
msgid "membership transactions"
msgstr "transacciones de afiliación"
@@ -1676,7 +1676,7 @@ msgid "Amount"
msgstr "Monto"
#: apps/note/templates/note/transaction_form.html:132
-#: apps/treasury/models.py:55
+#: apps/treasury/models.py:56
msgid "Name"
msgstr "Nombre"
@@ -1963,31 +1963,15 @@ msgstr "Todos los permisos"
msgid "registration"
msgstr "afiliación"
-#: apps/registration/forms.py:39
+#: apps/registration/forms.py:40
msgid "This email address is already used."
msgstr "Este correo electrónico ya esta utilizado."
-#: apps/registration/forms.py:49
-msgid ""
-"I declare that I opened or I will open soon a bank account in the Société "
-"générale with the BDE partnership."
-msgstr ""
-"Declaro que ya abrió una cuenta a la Société Générale en colaboración con el "
-"BDE."
-
-#: apps/registration/forms.py:51
-msgid ""
-"Warning: this engages you to open your bank account. If you finally decides "
-"to don't open your account, you will have to pay the BDE membership."
-msgstr ""
-"Cuidado : esto le obliga abrir su cuenta bancaria. Si cambia de idea y no "
-"abre su cuenta bancaria, tendrá que pagar su afiliación al BDE."
-
-#: apps/registration/forms.py:59
+#: apps/registration/forms.py:60
msgid "Register to the WEI"
msgstr "Registrarse en el WEI"
-#: apps/registration/forms.py:61
+#: apps/registration/forms.py:62
msgid ""
"Check this case if you want to register to the WEI. If you hesitate, you "
"will be able to register later, after validating your account in the Kfet."
@@ -1995,14 +1979,18 @@ msgstr ""
"Marcar esta casilla si usted quiere registrarse en el WEI. Si duda, podrá "
"registrarse más tarde, después de validar su cuenta Note Kfet."
-#: apps/registration/forms.py:106
+#: apps/registration/forms.py:107
msgid "Join BDE Club"
msgstr "Afiliarse al club BDE"
-#: apps/registration/forms.py:113
+#: apps/registration/forms.py:114
msgid "Join Kfet Club"
msgstr "Afiliarse al club Kfet"
+#: apps/registration/forms.py:123
+msgid "Join BDA Club"
+msgstr "Afiliarse al club BDA"
+
#: apps/registration/templates/registration/email_validation_complete.html:15
msgid "Your email have successfully been validated."
msgstr "Su correo electrónico fue validado con éxito."
@@ -2051,12 +2039,12 @@ msgstr "Suprimir afiliación"
msgid "Validate account"
msgstr "Validar la cuenta"
-#: apps/registration/templates/registration/future_profile_detail.html:62
+#: apps/registration/templates/registration/future_profile_detail.html:63
msgid ""
"The user declared that he/she opened a bank account in the Société générale."
msgstr "El usuario declara que ya abrió una cuenta a la Société Générale."
-#: apps/registration/templates/registration/future_profile_detail.html:71
+#: apps/registration/templates/registration/future_profile_detail.html:73
#: apps/wei/templates/wei/weimembership_form.html:127
#: apps/wei/templates/wei/weimembership_form.html:186
msgid "Validate registration"
@@ -2108,54 +2096,54 @@ msgstr "Gracias"
msgid "The Note Kfet team."
msgstr "El equipo Note Kfet."
-#: apps/registration/views.py:40
+#: apps/registration/views.py:41
msgid "Register new user"
msgstr "Registrar un nuevo usuario"
-#: apps/registration/views.py:98
+#: apps/registration/views.py:99
msgid "Email validation"
msgstr "Validación del correo electrónico"
-#: apps/registration/views.py:100
+#: apps/registration/views.py:101
msgid "Validate email"
msgstr "Validar el correo electrónico"
-#: apps/registration/views.py:144
+#: apps/registration/views.py:145
msgid "Email validation unsuccessful"
msgstr "La validación del correo electrónico fracasó"
-#: apps/registration/views.py:155
+#: apps/registration/views.py:156
msgid "Email validation email sent"
msgstr "Correo de validación enviado"
-#: apps/registration/views.py:163
+#: apps/registration/views.py:164
msgid "Resend email validation link"
msgstr "Reenviar el enlace de validación"
-#: apps/registration/views.py:181
+#: apps/registration/views.py:182
msgid "Pre-registered users list"
msgstr "Lista de los usuarios con afiliación pendiente"
-#: apps/registration/views.py:205
+#: apps/registration/views.py:206
msgid "Unregistered users"
msgstr "Usuarios con afiliación pendiente"
-#: apps/registration/views.py:218
+#: apps/registration/views.py:219
msgid "Registration detail"
msgstr "Detalles de la afiliación"
-#: apps/registration/views.py:282
+#: apps/registration/views.py:293
msgid "You must join the BDE."
msgstr "Usted tiene que afiliarse al BDE."
-#: apps/registration/views.py:306
+#: apps/registration/views.py:323
msgid ""
"The entered amount is not enough for the memberships, should be at least {}"
msgstr ""
"El monto dado no es suficiente para las afiliaciones, tiene que ser al menos "
"{}"
-#: apps/registration/views.py:387
+#: apps/registration/views.py:417
msgid "Invalidate pre-registration"
msgstr "Invalidar la afiliación"
@@ -2163,7 +2151,7 @@ msgstr "Invalidar la afiliación"
msgid "Treasury"
msgstr "Tesorería"
-#: apps/treasury/forms.py:26 apps/treasury/models.py:94
+#: apps/treasury/forms.py:26 apps/treasury/models.py:95
#: apps/treasury/templates/treasury/invoice_form.html:22
msgid "This invoice is locked and can no longer be edited."
msgstr "Esta factura esta bloqueada y no puede ser modificada."
@@ -2176,7 +2164,7 @@ msgstr "El descuento ya esta cerrado."
msgid "You can't change the type of the remittance."
msgstr "No puede cambiar el tipo de descuento."
-#: apps/treasury/forms.py:125 apps/treasury/models.py:268
+#: apps/treasury/forms.py:125 apps/treasury/models.py:269
#: apps/treasury/tables.py:97 apps/treasury/tables.py:105
#: apps/treasury/templates/treasury/invoice_list.html:16
#: apps/treasury/templates/treasury/remittance_list.html:16
@@ -2192,112 +2180,112 @@ msgstr "No hay descuento relacionado"
msgid "Invoice identifier"
msgstr "Numero de factura"
-#: apps/treasury/models.py:41
+#: apps/treasury/models.py:42
msgid "BDE"
msgstr "BDE"
-#: apps/treasury/models.py:46
+#: apps/treasury/models.py:47
msgid "Object"
msgstr "Asunto"
-#: apps/treasury/models.py:50
+#: apps/treasury/models.py:51
msgid "Description"
msgstr "Descripción"
-#: apps/treasury/models.py:59
+#: apps/treasury/models.py:60
msgid "Address"
msgstr "Dirección"
-#: apps/treasury/models.py:64 apps/treasury/models.py:194
+#: apps/treasury/models.py:65 apps/treasury/models.py:195
msgid "Date"
msgstr "Fecha"
-#: apps/treasury/models.py:68
+#: apps/treasury/models.py:69
msgid "Acquitted"
msgstr "Pagada"
-#: apps/treasury/models.py:73
+#: apps/treasury/models.py:74
msgid "Locked"
msgstr "Bloqueada"
-#: apps/treasury/models.py:74
+#: apps/treasury/models.py:75
msgid "An invoice can't be edited when it is locked."
msgstr "Une factura no puede ser modificada cuando esta bloqueada."
-#: apps/treasury/models.py:80
+#: apps/treasury/models.py:81
msgid "tex source"
msgstr "código fuente TeX"
-#: apps/treasury/models.py:114 apps/treasury/models.py:130
+#: apps/treasury/models.py:115 apps/treasury/models.py:131
msgid "invoice"
msgstr "factura"
-#: apps/treasury/models.py:115
+#: apps/treasury/models.py:116
msgid "invoices"
msgstr "facturas"
-#: apps/treasury/models.py:118
+#: apps/treasury/models.py:119
#, python-brace-format
msgid "Invoice #{id}"
msgstr "Factura n°{id}"
-#: apps/treasury/models.py:135
+#: apps/treasury/models.py:136
msgid "Designation"
msgstr "Designación"
-#: apps/treasury/models.py:141
+#: apps/treasury/models.py:142
msgid "Quantity"
msgstr "Cantidad"
-#: apps/treasury/models.py:146
+#: apps/treasury/models.py:147
msgid "Unit price"
msgstr "Precio unitario"
-#: apps/treasury/models.py:162
+#: apps/treasury/models.py:163
msgid "product"
msgstr "producto"
-#: apps/treasury/models.py:163
+#: apps/treasury/models.py:164
msgid "products"
msgstr "productos"
-#: apps/treasury/models.py:183
+#: apps/treasury/models.py:184
msgid "remittance type"
msgstr "tipo de descuento"
-#: apps/treasury/models.py:184
+#: apps/treasury/models.py:185
msgid "remittance types"
msgstr "tipos de descuentos"
-#: apps/treasury/models.py:205
+#: apps/treasury/models.py:206
msgid "Comment"
msgstr "Comentario"
-#: apps/treasury/models.py:210
+#: apps/treasury/models.py:211
msgid "Closed"
msgstr "Cerrada"
-#: apps/treasury/models.py:214
+#: apps/treasury/models.py:215
msgid "remittance"
msgstr "descuento"
-#: apps/treasury/models.py:215
+#: apps/treasury/models.py:216
msgid "remittances"
msgstr "descuentos"
-#: apps/treasury/models.py:248
+#: apps/treasury/models.py:249
msgid "Remittance #{:d}: {}"
msgstr "Descuento n°{:d} : {}"
-#: apps/treasury/models.py:272
+#: apps/treasury/models.py:273
msgid "special transaction proxy"
msgstr "proxy de transacción especial"
-#: apps/treasury/models.py:273
+#: apps/treasury/models.py:274
msgid "special transaction proxies"
msgstr "proxys de transacciones especiales"
-#: apps/treasury/models.py:299
+#: apps/treasury/models.py:300
msgid "credit transaction"
msgstr "transacción de crédito"
@@ -2310,16 +2298,16 @@ msgstr ""
"afiliaciones. Por favor pídelo acreditar su note antes de invalidar este "
"crédito."
-#: apps/treasury/models.py:453
+#: apps/treasury/models.py:452
#: apps/treasury/templates/treasury/sogecredit_detail.html:10
msgid "Credit from the Société générale"
msgstr "Crédito de la Société Générale"
-#: apps/treasury/models.py:454
+#: apps/treasury/models.py:453
msgid "Credits from the Société générale"
msgstr "Créditos de la Société Générale"
-#: apps/treasury/models.py:457
+#: apps/treasury/models.py:456
#, python-brace-format
msgid "Soge credit for {user}"
msgstr "Crédito de la Société Générale para {user}"
@@ -2574,7 +2562,7 @@ msgstr ""
"El usuario seleccionado no ha sido validado. Validar esta cuenta primero"
#: apps/wei/forms/registration.py:59 apps/wei/models.py:126
-#: apps/wei/models.py:323
+#: apps/wei/models.py:326
msgid "bus"
msgstr "bus"
@@ -2699,40 +2687,48 @@ msgstr "No binari@"
msgid "gender"
msgstr "género"
-#: apps/wei/models.py:213 apps/wei/templates/wei/weimembership_form.html:58
+#: apps/wei/models.py:212
+msgid "Unisex"
+msgstr "Unisex"
+
+#: apps/wei/models.py:215 apps/wei/templates/wei/weimembership_form.html:58
msgid "clothing cut"
msgstr "forma de ropa"
-#: apps/wei/models.py:226 apps/wei/templates/wei/weimembership_form.html:61
+#: apps/wei/models.py:228 apps/wei/templates/wei/weimembership_form.html:61
msgid "clothing size"
msgstr "medida de ropa"
-#: apps/wei/models.py:232 apps/wei/templates/wei/attribute_bus_1A.html:28
+#: apps/wei/models.py:234 apps/wei/templates/wei/attribute_bus_1A.html:28
#: apps/wei/templates/wei/weimembership_form.html:67
msgid "health issues"
msgstr "problemas de salud"
-#: apps/wei/models.py:237 apps/wei/templates/wei/weimembership_form.html:70
+#: apps/wei/models.py:239 apps/wei/templates/wei/weimembership_form.html:70
msgid "emergency contact name"
msgstr "nombre del contacto de emergencia"
-#: apps/wei/models.py:242 apps/wei/templates/wei/weimembership_form.html:73
+#: apps/wei/models.py:240
+msgid "The emergency contact must not be a WEI participant"
+msgstr "El contacto de emergencia no debe ser un participante de WEI"
+
+#: apps/wei/models.py:245 apps/wei/templates/wei/weimembership_form.html:73
msgid "emergency contact phone"
msgstr "teléfono del contacto de emergencia"
-#: apps/wei/models.py:247 apps/wei/templates/wei/weimembership_form.html:52
+#: apps/wei/models.py:250 apps/wei/templates/wei/weimembership_form.html:52
msgid "first year"
msgstr "primer año"
-#: apps/wei/models.py:248
+#: apps/wei/models.py:251
msgid "Tells if the user is new in the school."
msgstr "Indica si el usuario es nuevo en la escuela."
-#: apps/wei/models.py:253
+#: apps/wei/models.py:256
msgid "registration information"
msgstr "informaciones sobre la afiliación"
-#: apps/wei/models.py:254
+#: apps/wei/models.py:257
msgid ""
"Information about the registration (buses for old members, survey for the "
"new members), encoded in JSON"
@@ -2740,27 +2736,27 @@ msgstr ""
"Informaciones sobre la afiliacion (bus para miembros ancianos, cuestionario "
"para los nuevos miembros), registrado en JSON"
-#: apps/wei/models.py:312
+#: apps/wei/models.py:315
msgid "WEI User"
msgstr "Participante WEI"
-#: apps/wei/models.py:313
+#: apps/wei/models.py:316
msgid "WEI Users"
msgstr "Participantes WEI"
-#: apps/wei/models.py:333
+#: apps/wei/models.py:336
msgid "team"
msgstr "equipo"
-#: apps/wei/models.py:343
+#: apps/wei/models.py:346
msgid "WEI registration"
msgstr "Apuntación al WEI"
-#: apps/wei/models.py:347
+#: apps/wei/models.py:350
msgid "WEI membership"
msgstr "Afiliación al WEI"
-#: apps/wei/models.py:348
+#: apps/wei/models.py:351
msgid "WEI memberships"
msgstr "Afiliaciones al WEI"
@@ -3541,6 +3537,21 @@ msgstr ""
"pagar su afiliación. Tambien tiene que validar su correo electronico con el "
"enlace que recibió."
+#~ msgid ""
+#~ "I declare that I opened or I will open soon a bank account in the Société "
+#~ "générale with the BDE partnership."
+#~ msgstr ""
+#~ "Declaro que ya abrió una cuenta a la Société Générale en colaboración con "
+#~ "el BDE."
+
+#~ msgid ""
+#~ "Warning: this engages you to open your bank account. If you finally "
+#~ "decides to don't open your account, you will have to pay the BDE "
+#~ "membership."
+#~ msgstr ""
+#~ "Cuidado : esto le obliga abrir su cuenta bancaria. Si cambia de idea y no "
+#~ "abre su cuenta bancaria, tendrá que pagar su afiliación al BDE."
+
#~ msgid "You are not a Kfet member, so you can't use your note account."
#~ msgstr "Usted no es un miembro de la Kfet, no puede usar su cuenta note."
diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po
index fae66a14..eabfc3fb 100644
--- a/locale/fr/LC_MESSAGES/django.po
+++ b/locale/fr/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-31 17:08+0200\n"
+"POT-Creation-Date: 2023-07-09 14:46+0200\n"
"PO-Revision-Date: 2022-04-11 22:05+0200\n"
"Last-Translator: bleizi \n"
"Language-Team: French \n"
@@ -115,7 +115,7 @@ msgid "type"
msgstr "type"
#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:307
-#: apps/note/models/notes.py:148 apps/treasury/models.py:286
+#: apps/note/models/notes.py:148 apps/treasury/models.py:287
#: apps/wei/models.py:173 apps/wei/templates/wei/attribute_bus_1A.html:13
#: apps/wei/templates/wei/survey.html:15
msgid "user"
@@ -258,19 +258,19 @@ msgstr "Entré le "
msgid "remove"
msgstr "supprimer"
-#: apps/activity/tables.py:82 apps/note/forms.py:68 apps/treasury/models.py:200
+#: apps/activity/tables.py:82 apps/note/forms.py:68 apps/treasury/models.py:201
msgid "Type"
msgstr "Type"
#: apps/activity/tables.py:84 apps/member/forms.py:186
-#: apps/registration/forms.py:91 apps/treasury/forms.py:131
+#: apps/registration/forms.py:92 apps/treasury/forms.py:131
#: apps/wei/forms/registration.py:104
msgid "Last name"
msgstr "Nom de famille"
#: apps/activity/tables.py:86 apps/member/forms.py:191
#: apps/note/templates/note/transaction_form.html:138
-#: apps/registration/forms.py:96 apps/treasury/forms.py:133
+#: apps/registration/forms.py:97 apps/treasury/forms.py:133
#: apps/wei/forms/registration.py:109
msgid "First name"
msgstr "Prénom"
@@ -548,24 +548,24 @@ msgid "This image cannot be loaded."
msgstr "Cette image ne peut pas être chargée."
#: apps/member/forms.py:141 apps/member/views.py:103
-#: apps/registration/forms.py:33 apps/registration/views.py:262
+#: apps/registration/forms.py:34 apps/registration/views.py:266
msgid "An alias with a similar name already exists."
msgstr "Un alias avec un nom similaire existe déjà."
-#: apps/member/forms.py:165 apps/registration/forms.py:71
+#: apps/member/forms.py:165
msgid "Inscription paid by Société Générale"
msgstr "Inscription payée par la Société générale"
-#: apps/member/forms.py:167 apps/registration/forms.py:73
+#: apps/member/forms.py:167
msgid "Check this case if the Société Générale paid the inscription."
msgstr "Cochez cette case si la Société Générale a payé l'inscription."
-#: apps/member/forms.py:172 apps/registration/forms.py:78
+#: apps/member/forms.py:172 apps/registration/forms.py:79
#: apps/wei/forms/registration.py:91
msgid "Credit type"
msgstr "Type de rechargement"
-#: apps/member/forms.py:173 apps/registration/forms.py:79
+#: apps/member/forms.py:173 apps/registration/forms.py:80
#: apps/wei/forms/registration.py:92
msgid "No credit"
msgstr "Pas de rechargement"
@@ -574,13 +574,13 @@ msgstr "Pas de rechargement"
msgid "You can credit the note of the user."
msgstr "Vous pouvez créditer la note de l'utilisateur avant l'adhésion."
-#: apps/member/forms.py:179 apps/registration/forms.py:84
+#: apps/member/forms.py:179 apps/registration/forms.py:85
#: apps/wei/forms/registration.py:97
msgid "Credit amount"
msgstr "Montant à créditer"
#: apps/member/forms.py:196 apps/note/templates/note/transaction_form.html:144
-#: apps/registration/forms.py:101 apps/treasury/forms.py:135
+#: apps/registration/forms.py:102 apps/treasury/forms.py:135
#: apps/wei/forms/registration.py:114
msgid "Bank"
msgstr "Banque"
@@ -1183,7 +1183,7 @@ msgstr "Sauvegarder les changements"
msgid "Registrations"
msgstr "Inscriptions"
-#: apps/member/views.py:73 apps/registration/forms.py:23
+#: apps/member/views.py:73 apps/registration/forms.py:24
msgid "This address must be valid."
msgstr "Cette adresse doit être valide."
@@ -1239,11 +1239,11 @@ msgstr "L'adhésion doit commencer après le {:%d/%m/%Y}."
msgid "The membership must begin before {:%m-%d-%Y}."
msgstr "L'adhésion doit commencer avant le {:%d/%m/%Y}."
-#: apps/member/views.py:876
+#: apps/member/views.py:880
msgid "Manage roles of an user in the club"
msgstr "Gérer les rôles d'un utilisateur dans le club"
-#: apps/member/views.py:901
+#: apps/member/views.py:905
msgid "Members of the club"
msgstr "Membres du club"
@@ -1563,7 +1563,7 @@ msgstr "Transactions de crédit/retrait"
msgid "membership transaction"
msgstr "transaction d'adhésion"
-#: apps/note/models/transactions.py:385 apps/treasury/models.py:293
+#: apps/note/models/transactions.py:385 apps/treasury/models.py:294
msgid "membership transactions"
msgstr "transactions d'adhésion"
@@ -1682,7 +1682,7 @@ msgid "Amount"
msgstr "Montant"
#: apps/note/templates/note/transaction_form.html:132
-#: apps/treasury/models.py:55
+#: apps/treasury/models.py:56
msgid "Name"
msgstr "Nom"
@@ -1972,31 +1972,15 @@ msgstr "Tous les droits"
msgid "registration"
msgstr "inscription"
-#: apps/registration/forms.py:39
+#: apps/registration/forms.py:40
msgid "This email address is already used."
msgstr "Cet email est déjà pris."
-#: apps/registration/forms.py:49
-msgid ""
-"I declare that I opened or I will open soon a bank account in the Société "
-"générale with the BDE partnership."
-msgstr ""
-"Je déclare avoir ouvert ou ouvrir prochainement un compte à la société "
-"générale avec le partenariat du BDE."
-
-#: apps/registration/forms.py:51
-msgid ""
-"Warning: this engages you to open your bank account. If you finally decides "
-"to don't open your account, you will have to pay the BDE membership."
-msgstr ""
-"Attention : cocher cette case vous engage à ouvrir votre compte. Si vous "
-"décidez de ne pas le faire, vous devrez payer l'adhésion au BDE."
-
-#: apps/registration/forms.py:59
+#: apps/registration/forms.py:60
msgid "Register to the WEI"
msgstr "S'inscrire au WEI"
-#: apps/registration/forms.py:61
+#: apps/registration/forms.py:62
msgid ""
"Check this case if you want to register to the WEI. If you hesitate, you "
"will be able to register later, after validating your account in the Kfet."
@@ -2005,14 +1989,18 @@ msgstr ""
"pourrez toujours vous inscrire plus tard, après avoir validé votre compte à "
"la Kfet."
-#: apps/registration/forms.py:106
+#: apps/registration/forms.py:107
msgid "Join BDE Club"
msgstr "Adhérer au club BDE"
-#: apps/registration/forms.py:113
+#: apps/registration/forms.py:114
msgid "Join Kfet Club"
msgstr "Adhérer au club Kfet"
+#: apps/registration/forms.py:123
+msgid "Join BDA Club"
+msgstr "Adhérer au club BDA"
+
#: apps/registration/templates/registration/email_validation_complete.html:15
msgid "Your email have successfully been validated."
msgstr "Votre adresse e-mail a bien été validée."
@@ -2061,12 +2049,12 @@ msgstr "Supprimer l'inscription"
msgid "Validate account"
msgstr "Valider le compte"
-#: apps/registration/templates/registration/future_profile_detail.html:62
+#: apps/registration/templates/registration/future_profile_detail.html:63
msgid ""
"The user declared that he/she opened a bank account in the Société générale."
msgstr "L'utilisateur a déclaré avoir ouvert un compte à la société générale."
-#: apps/registration/templates/registration/future_profile_detail.html:71
+#: apps/registration/templates/registration/future_profile_detail.html:73
#: apps/wei/templates/wei/weimembership_form.html:127
#: apps/wei/templates/wei/weimembership_form.html:186
msgid "Validate registration"
@@ -2116,54 +2104,54 @@ msgstr "Merci"
msgid "The Note Kfet team."
msgstr "L'équipe de la Note Kfet."
-#: apps/registration/views.py:40
+#: apps/registration/views.py:41
msgid "Register new user"
msgstr "Enregistrer un nouvel utilisateur"
-#: apps/registration/views.py:98
+#: apps/registration/views.py:99
msgid "Email validation"
msgstr "Validation de l'adresse mail"
-#: apps/registration/views.py:100
+#: apps/registration/views.py:101
msgid "Validate email"
msgstr "Valider l'adresse e-mail"
-#: apps/registration/views.py:144
+#: apps/registration/views.py:145
msgid "Email validation unsuccessful"
msgstr "La validation de l'adresse mail a échoué"
-#: apps/registration/views.py:155
+#: apps/registration/views.py:156
msgid "Email validation email sent"
msgstr "L'email de vérification de l'adresse email a bien été envoyé"
-#: apps/registration/views.py:163
+#: apps/registration/views.py:164
msgid "Resend email validation link"
msgstr "Renvoyer le lien de validation"
-#: apps/registration/views.py:181
+#: apps/registration/views.py:182
msgid "Pre-registered users list"
msgstr "Liste des utilisateurs en attente d'inscription"
-#: apps/registration/views.py:205
+#: apps/registration/views.py:206
msgid "Unregistered users"
msgstr "Utilisateurs en attente d'inscription"
-#: apps/registration/views.py:218
+#: apps/registration/views.py:219
msgid "Registration detail"
msgstr "Détails de l'inscription"
-#: apps/registration/views.py:282
+#: apps/registration/views.py:293
msgid "You must join the BDE."
msgstr "Vous devez adhérer au BDE."
-#: apps/registration/views.py:306
+#: apps/registration/views.py:323
msgid ""
"The entered amount is not enough for the memberships, should be at least {}"
msgstr ""
"Le montant crédité est trop faible pour adhérer, il doit être au minimum de "
"{}"
-#: apps/registration/views.py:387
+#: apps/registration/views.py:417
msgid "Invalidate pre-registration"
msgstr "Invalider l'inscription"
@@ -2171,7 +2159,7 @@ msgstr "Invalider l'inscription"
msgid "Treasury"
msgstr "Trésorerie"
-#: apps/treasury/forms.py:26 apps/treasury/models.py:94
+#: apps/treasury/forms.py:26 apps/treasury/models.py:95
#: apps/treasury/templates/treasury/invoice_form.html:22
msgid "This invoice is locked and can no longer be edited."
msgstr "Cette facture est verrouillée et ne peut plus être éditée."
@@ -2184,7 +2172,7 @@ msgstr "La remise est déjà fermée."
msgid "You can't change the type of the remittance."
msgstr "Vous ne pouvez pas changer le type de la remise."
-#: apps/treasury/forms.py:125 apps/treasury/models.py:268
+#: apps/treasury/forms.py:125 apps/treasury/models.py:269
#: apps/treasury/tables.py:97 apps/treasury/tables.py:105
#: apps/treasury/templates/treasury/invoice_list.html:16
#: apps/treasury/templates/treasury/remittance_list.html:16
@@ -2200,112 +2188,112 @@ msgstr "Pas de remise associée"
msgid "Invoice identifier"
msgstr "Numéro de facture"
-#: apps/treasury/models.py:41
+#: apps/treasury/models.py:42
msgid "BDE"
msgstr "BDE"
-#: apps/treasury/models.py:46
+#: apps/treasury/models.py:47
msgid "Object"
msgstr "Objet"
-#: apps/treasury/models.py:50
+#: apps/treasury/models.py:51
msgid "Description"
msgstr "Description"
-#: apps/treasury/models.py:59
+#: apps/treasury/models.py:60
msgid "Address"
msgstr "Adresse"
-#: apps/treasury/models.py:64 apps/treasury/models.py:194
+#: apps/treasury/models.py:65 apps/treasury/models.py:195
msgid "Date"
msgstr "Date"
-#: apps/treasury/models.py:68
+#: apps/treasury/models.py:69
msgid "Acquitted"
msgstr "Acquittée"
-#: apps/treasury/models.py:73
+#: apps/treasury/models.py:74
msgid "Locked"
msgstr "Verrouillée"
-#: apps/treasury/models.py:74
+#: apps/treasury/models.py:75
msgid "An invoice can't be edited when it is locked."
msgstr "Une facture ne peut plus être modifiée si elle est verrouillée."
-#: apps/treasury/models.py:80
+#: apps/treasury/models.py:81
msgid "tex source"
msgstr "fichier TeX source"
-#: apps/treasury/models.py:114 apps/treasury/models.py:130
+#: apps/treasury/models.py:115 apps/treasury/models.py:131
msgid "invoice"
msgstr "facture"
-#: apps/treasury/models.py:115
+#: apps/treasury/models.py:116
msgid "invoices"
msgstr "factures"
-#: apps/treasury/models.py:118
+#: apps/treasury/models.py:119
#, python-brace-format
msgid "Invoice #{id}"
msgstr "Facture n°{id}"
-#: apps/treasury/models.py:135
+#: apps/treasury/models.py:136
msgid "Designation"
msgstr "Désignation"
-#: apps/treasury/models.py:141
+#: apps/treasury/models.py:142
msgid "Quantity"
msgstr "Quantité"
-#: apps/treasury/models.py:146
+#: apps/treasury/models.py:147
msgid "Unit price"
msgstr "Prix unitaire"
-#: apps/treasury/models.py:162
+#: apps/treasury/models.py:163
msgid "product"
msgstr "produit"
-#: apps/treasury/models.py:163
+#: apps/treasury/models.py:164
msgid "products"
msgstr "produits"
-#: apps/treasury/models.py:183
+#: apps/treasury/models.py:184
msgid "remittance type"
msgstr "type de remise"
-#: apps/treasury/models.py:184
+#: apps/treasury/models.py:185
msgid "remittance types"
msgstr "types de remises"
-#: apps/treasury/models.py:205
+#: apps/treasury/models.py:206
msgid "Comment"
msgstr "Commentaire"
-#: apps/treasury/models.py:210
+#: apps/treasury/models.py:211
msgid "Closed"
msgstr "Fermée"
-#: apps/treasury/models.py:214
+#: apps/treasury/models.py:215
msgid "remittance"
msgstr "remise"
-#: apps/treasury/models.py:215
+#: apps/treasury/models.py:216
msgid "remittances"
msgstr "remises"
-#: apps/treasury/models.py:248
+#: apps/treasury/models.py:249
msgid "Remittance #{:d}: {}"
msgstr "Remise n°{:d} : {}"
-#: apps/treasury/models.py:272
+#: apps/treasury/models.py:273
msgid "special transaction proxy"
msgstr "proxy de transaction spéciale"
-#: apps/treasury/models.py:273
+#: apps/treasury/models.py:274
msgid "special transaction proxies"
msgstr "proxys de transactions spéciales"
-#: apps/treasury/models.py:299
+#: apps/treasury/models.py:300
msgid "credit transaction"
msgstr "transaction de crédit"
@@ -2317,16 +2305,16 @@ msgstr ""
"Cet utilisateur n'a pas assez d'argent pour payer les adhésions avec sa "
"note. Merci de lui demander de recharger sa note avant d'invalider ce crédit."
-#: apps/treasury/models.py:453
+#: apps/treasury/models.py:452
#: apps/treasury/templates/treasury/sogecredit_detail.html:10
msgid "Credit from the Société générale"
msgstr "Crédit de la Société générale"
-#: apps/treasury/models.py:454
+#: apps/treasury/models.py:453
msgid "Credits from the Société générale"
msgstr "Crédits de la Société générale"
-#: apps/treasury/models.py:457
+#: apps/treasury/models.py:456
#, python-brace-format
msgid "Soge credit for {user}"
msgstr "Crédit de la société générale pour l'utilisateur {user}"
@@ -2586,7 +2574,7 @@ msgstr ""
"compte"
#: apps/wei/forms/registration.py:59 apps/wei/models.py:126
-#: apps/wei/models.py:323
+#: apps/wei/models.py:326
msgid "bus"
msgstr "bus"
@@ -2711,40 +2699,48 @@ msgstr "Non-binaire"
msgid "gender"
msgstr "genre"
-#: apps/wei/models.py:213 apps/wei/templates/wei/weimembership_form.html:58
+#: apps/wei/models.py:212
+msgid "Unisex"
+msgstr "Unisexe"
+
+#: apps/wei/models.py:215 apps/wei/templates/wei/weimembership_form.html:58
msgid "clothing cut"
msgstr "coupe de vêtement"
-#: apps/wei/models.py:226 apps/wei/templates/wei/weimembership_form.html:61
+#: apps/wei/models.py:228 apps/wei/templates/wei/weimembership_form.html:61
msgid "clothing size"
msgstr "taille de vêtement"
-#: apps/wei/models.py:232 apps/wei/templates/wei/attribute_bus_1A.html:28
+#: apps/wei/models.py:234 apps/wei/templates/wei/attribute_bus_1A.html:28
#: apps/wei/templates/wei/weimembership_form.html:67
msgid "health issues"
msgstr "problèmes de santé"
-#: apps/wei/models.py:237 apps/wei/templates/wei/weimembership_form.html:70
+#: apps/wei/models.py:239 apps/wei/templates/wei/weimembership_form.html:70
msgid "emergency contact name"
msgstr "nom du contact en cas d'urgence"
-#: apps/wei/models.py:242 apps/wei/templates/wei/weimembership_form.html:73
+#: apps/wei/models.py:240
+msgid "The emergency contact must not be a WEI participant"
+msgstr "Le contact en cas d'urgence ne doit pas être une personne qui participe au WEI"
+
+#: apps/wei/models.py:245 apps/wei/templates/wei/weimembership_form.html:73
msgid "emergency contact phone"
msgstr "téléphone du contact en cas d'urgence"
-#: apps/wei/models.py:247 apps/wei/templates/wei/weimembership_form.html:52
+#: apps/wei/models.py:250 apps/wei/templates/wei/weimembership_form.html:52
msgid "first year"
msgstr "première année"
-#: apps/wei/models.py:248
+#: apps/wei/models.py:251
msgid "Tells if the user is new in the school."
msgstr "Indique si l'utilisateur est nouveau dans l'école."
-#: apps/wei/models.py:253
+#: apps/wei/models.py:256
msgid "registration information"
msgstr "informations sur l'inscription"
-#: apps/wei/models.py:254
+#: apps/wei/models.py:257
msgid ""
"Information about the registration (buses for old members, survey for the "
"new members), encoded in JSON"
@@ -2752,27 +2748,27 @@ msgstr ""
"Informations sur l'inscription (bus pour les 2A+, questionnaire pour les "
"1A), encodées en JSON"
-#: apps/wei/models.py:312
+#: apps/wei/models.py:315
msgid "WEI User"
msgstr "Participant au WEI"
-#: apps/wei/models.py:313
+#: apps/wei/models.py:316
msgid "WEI Users"
msgstr "Participants au WEI"
-#: apps/wei/models.py:333
+#: apps/wei/models.py:336
msgid "team"
msgstr "équipe"
-#: apps/wei/models.py:343
+#: apps/wei/models.py:346
msgid "WEI registration"
msgstr "Inscription au WEI"
-#: apps/wei/models.py:347
+#: apps/wei/models.py:350
msgid "WEI membership"
msgstr "Adhésion au WEI"
-#: apps/wei/models.py:348
+#: apps/wei/models.py:351
msgid "WEI memberships"
msgstr "Adhésions au WEI"
@@ -3566,3 +3562,18 @@ msgstr ""
"vous connecter. Vous devez vous rendre à la Kfet et payer les frais "
"d'adhésion. Vous devez également valider votre adresse email en suivant le "
"lien que vous avez reçu."
+
+#~ msgid ""
+#~ "I declare that I opened or I will open soon a bank account in the Société "
+#~ "générale with the BDE partnership."
+#~ msgstr ""
+#~ "Je déclare avoir ouvert ou ouvrir prochainement un compte à la société "
+#~ "générale avec le partenariat du BDE."
+
+#~ msgid ""
+#~ "Warning: this engages you to open your bank account. If you finally "
+#~ "decides to don't open your account, you will have to pay the BDE "
+#~ "membership."
+#~ msgstr ""
+#~ "Attention : cocher cette case vous engage à ouvrir votre compte. Si vous "
+#~ "décidez de ne pas le faire, vous devrez payer l'adhésion au BDE."