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."