Merge branch 'registration2023' into 'main'

Registration2023

See merge request bde/nk20!213
This commit is contained in:
charliep 2023-07-16 17:12:33 +02:00
commit b42f5afeab
21 changed files with 543 additions and 424 deletions

View File

@ -1,5 +1,5 @@
from rest_framework.pagination import PageNumberPagination from rest_framework.pagination import PageNumberPagination
class CustomPagination(PageNumberPagination): class CustomPagination(PageNumberPagination):
page_size_query_param = 'page_size' page_size_query_param = 'page_size'

View File

@ -263,7 +263,7 @@ class Club(models.Model):
today = datetime.date.today() today = datetime.date.today()
if (today - self.membership_start).days >= 365: while (today - self.membership_start).days >= 365:
if self.membership_start: if self.membership_start:
self.membership_start = datetime.date(self.membership_start.year + 1, self.membership_start = datetime.date(self.membership_start.year + 1,
self.membership_start.month, self.membership_start.day) self.membership_start.month, self.membership_start.day)

View File

@ -183,7 +183,7 @@ class TestMemberships(TestCase):
club = Club.objects.get(name="Kfet") club = Club.objects.get(name="Kfet")
else: else:
club = Club.objects.create( club = Club.objects.create(
name="Second club " + ("with BDE" if bde_parent else "without BDE"), name="Second club without BDE",
parent_club=None, parent_club=None,
email="newclub@example.com", email="newclub@example.com",
require_memberships=True, require_memberships=True,

View File

@ -753,6 +753,10 @@ class ClubAddMemberView(ProtectQuerysetMixin, ProtectedCreateView):
club = old_membership.club club = old_membership.club
user = old_membership.user 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 form.instance.club = club
# Get form data # Get form data

View File

@ -325,8 +325,8 @@ class SpecialTransaction(Transaction):
def clean(self): def clean(self):
# SpecialTransaction are only possible with NoteSpecial object # SpecialTransaction are only possible with NoteSpecial object
if self.is_credit() == self.is_debit(): if self.is_credit() == self.is_debit():
raise(ValidationError(_("A special transaction is only possible between a" raise ValidationError(_("A special transaction is only possible between a"
" Note associated to a payment method and a User or a Club"))) " Note associated to a payment method and a User or a Club"))
@transaction.atomic @transaction.atomic
def save(self, *args, **kwargs): def save(self, *args, **kwargs):

View File

@ -5,6 +5,7 @@ from django import forms
from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from member.models import Club
from note.models import NoteSpecial, Alias from note.models import NoteSpecial, Alias
from note_kfet.inputs import AmountInput from note_kfet.inputs import AmountInput
@ -44,14 +45,14 @@ class SignUpForm(UserCreationForm):
fields = ('first_name', 'last_name', 'username', 'email', ) fields = ('first_name', 'last_name', 'username', 'email', )
class DeclareSogeAccountOpenedForm(forms.Form): # class DeclareSogeAccountOpenedForm(forms.Form):
soge_account = forms.BooleanField( # 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 " # 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."), # "partnership."),
help_text=_("Warning: this engages you to open your bank account. If you finally decides to don't open your " # 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."), # "account, you will have to pay the BDE membership."),
required=False, # required=False,
) # )
class WEISignupForm(forms.Form): class WEISignupForm(forms.Form):
@ -67,11 +68,11 @@ class ValidationForm(forms.Form):
""" """
Validate the inscription of the new users and pay memberships. Validate the inscription of the new users and pay memberships.
""" """
soge = forms.BooleanField( # soge = forms.BooleanField(
label=_("Inscription paid by Société Générale"), # label=_("Inscription paid by Société Générale"),
required=False, # required=False,
help_text=_("Check this case if the Société Générale paid the inscription."), # help_text=_("Check this case if the Société Générale paid the inscription."),
) # )
credit_type = forms.ModelChoiceField( credit_type = forms.ModelChoiceField(
queryset=NoteSpecial.objects, queryset=NoteSpecial.objects,
@ -114,3 +115,12 @@ class ValidationForm(forms.Form):
required=False, required=False,
initial=True, 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,
)

View File

@ -57,11 +57,13 @@ SPDX-License-Identifier: GPL-3.0-or-later
<h4> {% trans "Validate account" %}</h4> <h4> {% trans "Validate account" %}</h4>
</div> </div>
{% comment "Soge not for membership (only WEI)" %}
{% if declare_soge_account %} {% if declare_soge_account %}
<div class="alert alert-info"> <div class="alert alert-info">
{% trans "The user declared that he/she opened a bank account in the Société générale." %} {% trans "The user declared that he/she opened a bank account in the Société générale." %}
</div> </div>
{% endif %} {% endif %}
{% endcomment %}
<div class="card-body" id="profile_infos"> <div class="card-body" id="profile_infos">
{% csrf_token %} {% csrf_token %}
@ -76,6 +78,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
</div> </div>
{% endblock %} {% endblock %}
{% comment "Soge not for membership (only WEI)" %}
{% block extrajavascript %} {% block extrajavascript %}
<script> <script>
soge_field = $("#id_soge"); soge_field = $("#id_soge");
@ -118,3 +121,4 @@ SPDX-License-Identifier: GPL-3.0-or-later
{% endif %} {% endif %}
</script> </script>
{% endblock %} {% endblock %}
{% endcomment %}

View File

@ -190,7 +190,7 @@ class TestValidateRegistration(TestCase):
# BDE Membership is mandatory # BDE Membership is mandatory
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict( 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_type=NoteSpecial.objects.get(special_type="Chèque").id,
credit_amount=4200, credit_amount=4200,
last_name="TOTO", last_name="TOTO",
@ -204,7 +204,7 @@ class TestValidateRegistration(TestCase):
# Same # Same
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict( response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict(
soge=False, # soge=False,
credit_type="", credit_type="",
credit_amount=0, credit_amount=0,
last_name="TOTO", last_name="TOTO",
@ -218,7 +218,7 @@ class TestValidateRegistration(TestCase):
# The BDE membership is not free # The BDE membership is not free
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict( 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_type=NoteSpecial.objects.get(special_type="Espèces").id,
credit_amount=0, credit_amount=0,
last_name="TOTO", last_name="TOTO",
@ -232,7 +232,7 @@ class TestValidateRegistration(TestCase):
# Last and first names are required for a credit # Last and first names are required for a credit
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict( 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_type=NoteSpecial.objects.get(special_type="Chèque").id,
credit_amount=4000, credit_amount=4000,
last_name="", last_name="",
@ -249,7 +249,7 @@ class TestValidateRegistration(TestCase):
self.user.username = "admïntoto" self.user.username = "admïntoto"
self.user.save() self.user.save()
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict( 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_type=NoteSpecial.objects.get(special_type="Chèque").id,
credit_amount=500, credit_amount=500,
last_name="TOTO", last_name="TOTO",
@ -275,7 +275,7 @@ class TestValidateRegistration(TestCase):
self.user.profile.save() self.user.profile.save()
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict( 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_type=NoteSpecial.objects.get(special_type="Chèque").id,
credit_amount=500, credit_amount=500,
last_name="TOTO", last_name="TOTO",
@ -290,6 +290,7 @@ class TestValidateRegistration(TestCase):
self.assertTrue(NoteUser.objects.filter(user=self.user).exists()) 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="BDE", user=self.user).exists())
self.assertFalse(Membership.objects.filter(club__name="Kfet", 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.assertFalse(SogeCredit.objects.filter(user=self.user).exists())
self.assertEqual(Transaction.objects.filter( self.assertEqual(Transaction.objects.filter(
Q(source=self.user.note) | Q(destination=self.user.note)).count(), 2) Q(source=self.user.note) | Q(destination=self.user.note)).count(), 2)
@ -311,7 +312,7 @@ class TestValidateRegistration(TestCase):
self.user.profile.save() self.user.profile.save()
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict( 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_type=NoteSpecial.objects.get(special_type="Espèces").id,
credit_amount=4000, credit_amount=4000,
last_name="TOTO", last_name="TOTO",
@ -326,6 +327,7 @@ class TestValidateRegistration(TestCase):
self.assertTrue(NoteUser.objects.filter(user=self.user).exists()) 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="BDE", user=self.user).exists())
self.assertTrue(Membership.objects.filter(club__name="Kfet", 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.assertFalse(SogeCredit.objects.filter(user=self.user).exists())
self.assertEqual(Transaction.objects.filter( self.assertEqual(Transaction.objects.filter(
Q(source=self.user.note) | Q(destination=self.user.note)).count(), 3) 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()) response = self.client.get(self.user.profile.get_absolute_url())
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
def test_validate_kfet_registration_with_soge(self): # 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. # 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,))) # response = self.client.get(reverse("registration:future_user_detail", args=(self.user.pk,)))
self.assertEqual(response.status_code, 200) # self.assertEqual(response.status_code, 200)
#
response = self.client.get(self.user.profile.get_absolute_url()) # response = self.client.get(self.user.profile.get_absolute_url())
self.assertEqual(response.status_code, 404) # self.assertEqual(response.status_code, 404)
#
self.user.profile.email_confirmed = True # self.user.profile.email_confirmed = True
self.user.profile.save() # self.user.profile.save()
#
response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict( # response = self.client.post(reverse("registration:future_user_detail", args=(self.user.pk,)), data=dict(
soge=True, # soge=True,
credit_type=NoteSpecial.objects.get(special_type="Espèces").id, # credit_type=NoteSpecial.objects.get(special_type="Espèces").id,
credit_amount=4000, # credit_amount=4000,
last_name="TOTO", # last_name="TOTO",
first_name="Toto", # first_name="Toto",
bank="Société générale", # bank="Société générale",
join_bde=True, # join_bde=True,
join_kfet=True, # join_kfet=True,
)) # ))
self.assertRedirects(response, self.user.profile.get_absolute_url(), 302, 200) # self.assertRedirects(response, self.user.profile.get_absolute_url(), 302, 200)
self.user.profile.refresh_from_db() # self.user.profile.refresh_from_db()
self.assertTrue(self.user.profile.registration_valid) # self.assertTrue(self.user.profile.registration_valid)
self.assertTrue(NoteUser.objects.filter(user=self.user).exists()) # 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="BDE", user=self.user).exists())
self.assertTrue(Membership.objects.filter(club__name="Kfet", 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.assertFalse(Membership.objects.filter(club__name__iexact="BDA", user=self.user).exists())
self.assertEqual(Transaction.objects.filter( # self.assertTrue(SogeCredit.objects.filter(user=self.user).exists())
Q(source=self.user.note) | Q(destination=self.user.note)).count(), 3) # self.assertEqual(Transaction.objects.filter(
self.assertFalse(Transaction.objects.filter(valid=True).exists()) # 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) # response = self.client.get(self.user.profile.get_absolute_url())
# self.assertEqual(response.status_code, 200)
def test_invalidate_registration(self): def test_invalidate_registration(self):
""" """

View File

@ -24,7 +24,8 @@ from permission.models import Role
from permission.views import ProtectQuerysetMixin from permission.views import ProtectQuerysetMixin
from treasury.models import SogeCredit 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 .tables import FutureUserTable
from .tokens import email_validation_token from .tokens import email_validation_token
@ -42,7 +43,7 @@ class UserCreateView(CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["profile_form"] = self.second_form(self.request.POST if self.request.POST else None) 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["section"]
del context["profile_form"].fields["report_frequency"] del context["profile_form"].fields["report_frequency"]
del context["profile_form"].fields["last_report"] del context["profile_form"].fields["last_report"]
@ -75,12 +76,12 @@ class UserCreateView(CreateView):
user.profile.send_email_validation_link() user.profile.send_email_validation_link()
soge_form = DeclareSogeAccountOpenedForm(self.request.POST) # soge_form = DeclareSogeAccountOpenedForm(self.request.POST)
if "soge_account" in soge_form.data and soge_form.data["soge_account"]: # 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 # # If the user declares that a bank account got opened, prepare the soge credit to warn treasurers
soge_credit = SogeCredit(user=user) # soge_credit = SogeCredit(user=user)
soge_credit._force_save = True # soge_credit._force_save = True
soge_credit.save() # soge_credit.save()
return super().form_valid(form) 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 fee += bde.membership_fee_paid if user.profile.paid else bde.membership_fee_unpaid
kfet = Club.objects.get(name="Kfet") kfet = Club.objects.get(name="Kfet")
fee += kfet.membership_fee_paid if user.profile.paid else kfet.membership_fee_unpaid 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["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 return ctx
@ -262,8 +266,13 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
form.add_error(None, _("An alias with a similar name already exists.")) form.add_error(None, _("An alias with a similar name already exists."))
return self.form_invalid(form) 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 # Get form data
soge = form.cleaned_data["soge"] # soge = form.cleaned_data["soge"]
credit_type = form.cleaned_data["credit_type"] credit_type = form.cleaned_data["credit_type"]
credit_amount = form.cleaned_data["credit_amount"] credit_amount = form.cleaned_data["credit_amount"]
last_name = form.cleaned_data["last_name"] last_name = form.cleaned_data["last_name"]
@ -271,11 +280,13 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
bank = form.cleaned_data["bank"] bank = form.cleaned_data["bank"]
join_bde = form.cleaned_data["join_bde"] join_bde = form.cleaned_data["join_bde"]
join_kfet = form.cleaned_data["join_kfet"] join_kfet = form.cleaned_data["join_kfet"]
if bda_exists:
join_bda = form.cleaned_data["join_bda"]
if soge: # if soge:
# If Société Générale pays the inscription, the user automatically joins the two clubs. # # If Société Générale pays the inscription, the user automatically joins the two clubs.
join_bde = True # join_bde = True
join_kfet = True # join_kfet = True
if not join_bde: if not join_bde:
# This software belongs to the 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 kfet_fee = kfet.membership_fee_paid if user.profile.paid else kfet.membership_fee_unpaid
# Add extra fee for the full membership # Add extra fee for the full membership
fee += kfet_fee if join_kfet else 0 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 # # If the bank pays, then we don't credit now. Treasurers will validate the transaction
# and credit the note later. # # and credit the note later.
credit_type = None if soge else credit_type # credit_type = None if soge else credit_type
# If the user does not select any payment method, then no credit will be performed. # 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 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 # Check if the user credits enough money
form.add_error('credit_type', form.add_error('credit_type',
_("The entered amount is not enough for the memberships, should be at least {}") _("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.profile.save()
user.refresh_from_db() user.refresh_from_db()
if not soge and SogeCredit.objects.filter(user=user).exists(): # 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 # # If the user declared that a bank account was opened but in the validation form the SoGé case was
# unchecked, delete the associated credit # # unchecked, delete the associated credit
soge_credit = SogeCredit.objects.get(user=user) # soge_credit = SogeCredit.objects.get(user=user)
soge_credit._force_delete = True # soge_credit._force_delete = True
soge_credit.delete() # soge_credit.delete()
if credit_type is not None and credit_amount > 0: if credit_type is not None and credit_amount > 0:
# Credit the note # Credit the note
@ -334,7 +351,8 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
destination=user.note, destination=user.note,
quantity=1, quantity=1,
amount=credit_amount, 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, last_name=last_name,
first_name=first_name, first_name=first_name,
bank=bank, bank=bank,
@ -348,8 +366,8 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
user=user, user=user,
fee=bde_fee, fee=bde_fee,
) )
if soge: # if soge:
membership._soge = True # membership._soge = True
membership.save() membership.save()
membership.refresh_from_db() membership.refresh_from_db()
membership.roles.add(Role.objects.get(name="Adhérent BDE")) membership.roles.add(Role.objects.get(name="Adhérent BDE"))
@ -362,17 +380,29 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
user=user, user=user,
fee=kfet_fee, fee=kfet_fee,
) )
if soge: # if soge:
membership._soge = True # membership._soge = True
membership.save() membership.save()
membership.refresh_from_db() membership.refresh_from_db()
membership.roles.add(Role.objects.get(name="Adhérent Kfet")) membership.roles.add(Role.objects.get(name="Adhérent Kfet"))
membership.save() membership.save()
if soge: if bda_exists and join_bda:
soge_credit = SogeCredit.objects.get(user=user) # Create membership for the user to the BDA starting today
# Update the credit transaction amount membership = Membership(
soge_credit.save() 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 return ret

View File

@ -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 # SPDX-License-Identifier: GPL-3.0-or-later
import datetime
from datetime import date from datetime import date
from django.conf import settings 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.template.loader import render_to_string
from django.utils import timezone from django.utils import timezone
from django.utils.translation import gettext_lazy as _ 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 from note.models import NoteSpecial, SpecialTransaction, MembershipTransaction, NoteUser
@ -326,12 +326,12 @@ class SogeCredit(models.Model):
if self.valid or not self.pk: if self.valid or not self.pk:
return return
bde = Club.objects.get(name="BDE") # Soge do not pay BDE and kfet memberships since 2022
kfet = Club.objects.get(name="Kfet") # bde = Club.objects.get(name="BDE")
bde_qs = Membership.objects.filter(user=self.user, club=bde, date_start__gte=bde.membership_start) # kfet = Club.objects.get(name="Kfet")
kfet_qs = Membership.objects.filter(user=self.user, club=kfet, date_start__gte=kfet.membership_start) # 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(): # if bde_qs.exists():
# m = bde_qs.get() # m = bde_qs.get()
# if MembershipTransaction.objects.filter(membership=m).exists(): # non-free membership # if MembershipTransaction.objects.filter(membership=m).exists(): # non-free membership
@ -388,7 +388,6 @@ class SogeCredit(models.Model):
for tr in self.transactions.all(): for tr in self.transactions.all():
tr.valid = True tr.valid = True
tr._force_save = True tr._force_save = True
tr.created_at = timezone.now()
tr.save() tr.save()
@transaction.atomic @transaction.atomic
@ -437,12 +436,11 @@ class SogeCredit(models.Model):
for tr in self.transactions.all(): for tr in self.transactions.all():
tr._force_save = True tr._force_save = True
tr.valid = True tr.valid = True
tr.created_at = timezone.now()
tr.save() tr.save()
if self.credit_transaction: if self.credit_transaction:
# If the soge credit is deleted while the user is not validated yet, # If the soge credit is deleted while the user is not validated yet,
# there is not credit transaction. # 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. # was opened after the validation of the account.
self.credit_transaction.valid = False self.credit_transaction.valid = False
self.credit_transaction.reason += " (invalide)" self.credit_transaction.reason += " (invalide)"

View File

@ -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 # SPDX-License-Identifier: GPL-3.0-or-later
from django import forms from django import forms
@ -38,7 +38,7 @@ class WEIRegistrationForm(forms.ModelForm):
class Meta: class Meta:
model = WEIRegistration model = WEIRegistration
exclude = ('wei', ) exclude = ('wei', 'clothing_cut')
widgets = { widgets = {
"user": Autocomplete( "user": Autocomplete(
User, User,

View File

@ -148,7 +148,7 @@ class WEISurvey2021(WEISurvey):
buses = cls.get_algorithm_class().get_buses() 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() 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): def score(self, bus):
if not self.is_complete(): if not self.is_complete():
raise ValueError("Survey is not ended, can't calculate score") 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 - self.word_mean(getattr(self.information, 'word' + str(i))) for i in range(1, 21)) / 20
return s return s
@lru_cache() # @lru_cache()
def scores_per_bus(self): def scores_per_bus(self):
return {bus: self.score(bus) for bus in self.get_algorithm_class().get_buses()} return {bus: self.score(bus) for bus in self.get_algorithm_class().get_buses()}
@lru_cache() # @lru_cache()
def ordered_buses(self): def ordered_buses(self):
values = list(self.scores_per_bus().items()) values = list(self.scores_per_bus().items())
values.sort(key=lambda item: -item[1]) values.sort(key=lambda item: -item[1])

View File

@ -151,7 +151,7 @@ class WEISurvey2022(WEISurvey):
buses = cls.get_algorithm_class().get_buses() 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() 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): def score(self, bus):
if not self.is_complete(): if not self.is_complete():
raise ValueError("Survey is not ended, can't calculate score") 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 - self.word_mean(getattr(self.information, 'word' + str(i))) for i in range(1, 21)) / 20
return s return s
@lru_cache() # @lru_cache()
def scores_per_bus(self): def scores_per_bus(self):
return {bus: self.score(bus) for bus in self.get_algorithm_class().get_buses()} return {bus: self.score(bus) for bus in self.get_algorithm_class().get_buses()}
@lru_cache() # @lru_cache()
def ordered_buses(self): def ordered_buses(self):
values = list(self.scores_per_bus().items()) values = list(self.scores_per_bus().items())
values.sort(key=lambda item: -item[1]) values.sort(key=lambda item: -item[1])

View File

@ -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'),
),
]

View File

@ -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'),
),
]

View File

@ -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 # SPDX-License-Identifier: GPL-3.0-or-later
import json import json
@ -209,7 +209,9 @@ class WEIRegistration(models.Model):
choices=( choices=(
('male', _("Male")), ('male', _("Male")),
('female', _("Female")), ('female', _("Female")),
('unisex', _("Unisex")),
), ),
default='unisex',
verbose_name=_("clothing cut"), verbose_name=_("clothing cut"),
) )
@ -235,6 +237,7 @@ class WEIRegistration(models.Model):
emergency_contact_name = models.CharField( emergency_contact_name = models.CharField(
max_length=255, max_length=255,
verbose_name=_("emergency contact name"), verbose_name=_("emergency contact name"),
help_text=_("The emergency contact must not be a WEI participant")
) )
emergency_contact_phone = PhoneNumberField( emergency_contact_phone = PhoneNumberField(

View File

@ -56,7 +56,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
<dd class="col-xl-6">{{ registration.get_gender_display }}</dd> <dd class="col-xl-6">{{ registration.get_gender_display }}</dd>
<dt class="col-xl-6">{% trans 'clothing cut'|capfirst %}</dt> <dt class="col-xl-6">{% trans 'clothing cut'|capfirst %}</dt>
<dd class="col-xl-6">{{ registration.clothing_cut }}</dd> <dd class="col-xl-6">{{ registration.get_clothing_cut_display }}</dd>
<dt class="col-xl-6">{% trans 'clothing size'|capfirst %}</dt> <dt class="col-xl-6">{% trans 'clothing size'|capfirst %}</dt>
<dd class="col-xl-6">{{ registration.clothing_size }}</dd> <dd class="col-xl-6">{{ registration.clothing_size }}</dd>

View File

@ -448,6 +448,10 @@ Options
"value": "female", "value": "female",
"display_name": "Femme" "display_name": "Femme"
} }
{
"value": "unisex",
"display_name": "Unisexe"
},
] ]
}, },
"clothing_size": { "clothing_size": {

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2020-11-16 20:02+0000\n"
"Last-Translator: bleizi <bleizi@crans.org>\n" "Last-Translator: bleizi <bleizi@crans.org>\n"
"Language-Team: German <http://translate.ynerant.fr/projects/nk20/nk20/de/>\n" "Language-Team: German <http://translate.ynerant.fr/projects/nk20/nk20/de/>\n"
@ -115,7 +115,7 @@ msgid "type"
msgstr "Type" msgstr "Type"
#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:307 #: 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/models.py:173 apps/wei/templates/wei/attribute_bus_1A.html:13
#: apps/wei/templates/wei/survey.html:15 #: apps/wei/templates/wei/survey.html:15
msgid "user" msgid "user"
@ -258,19 +258,19 @@ msgstr "Eingetreten um "
msgid "remove" msgid "remove"
msgstr "entfernen" 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" msgid "Type"
msgstr "Type" msgstr "Type"
#: apps/activity/tables.py:84 apps/member/forms.py:186 #: 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 #: apps/wei/forms/registration.py:104
msgid "Last name" msgid "Last name"
msgstr "Nachname" msgstr "Nachname"
#: apps/activity/tables.py:86 apps/member/forms.py:191 #: apps/activity/tables.py:86 apps/member/forms.py:191
#: apps/note/templates/note/transaction_form.html:138 #: 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 #: apps/wei/forms/registration.py:109
msgid "First name" msgid "First name"
msgstr "Vorname" msgstr "Vorname"
@ -549,24 +549,24 @@ msgid "This image cannot be loaded."
msgstr "Dieses Bild kann nicht geladen werden." msgstr "Dieses Bild kann nicht geladen werden."
#: apps/member/forms.py:141 apps/member/views.py:103 #: 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." msgid "An alias with a similar name already exists."
msgstr "Ein ähnliches Alias ist schon benutzt." 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" msgid "Inscription paid by Société Générale"
msgstr "Mitgliedschaft von der Société Générale bezahlt" 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." msgid "Check this case if the Société Générale paid the inscription."
msgstr "Die Société Générale die Mitgliedschaft bezahlt." 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 #: apps/wei/forms/registration.py:91
msgid "Credit type" msgid "Credit type"
msgstr "Kredittype" 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 #: apps/wei/forms/registration.py:92
msgid "No credit" msgid "No credit"
msgstr "Kein Kredit" msgstr "Kein Kredit"
@ -575,13 +575,13 @@ msgstr "Kein Kredit"
msgid "You can credit the note of the user." msgid "You can credit the note of the user."
msgstr "Sie dûrfen diese Note kreditieren." 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 #: apps/wei/forms/registration.py:97
msgid "Credit amount" msgid "Credit amount"
msgstr "Kreditanzahl" msgstr "Kreditanzahl"
#: apps/member/forms.py:196 apps/note/templates/note/transaction_form.html:144 #: 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 #: apps/wei/forms/registration.py:114
msgid "Bank" msgid "Bank"
msgstr "Bank" msgstr "Bank"
@ -1193,7 +1193,7 @@ msgstr "Speichern"
msgid "Registrations" msgid "Registrations"
msgstr "Anmeldung" 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." msgid "This address must be valid."
msgstr "Diese Adresse muss gültig sein." 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}." msgid "The membership must begin before {:%m-%d-%Y}."
msgstr "Die Mitgliedschaft muss vor {:%m-%d-Y} anfängen." 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" msgid "Manage roles of an user in the club"
msgstr "Rollen in diesen Club bearbeiten" msgstr "Rollen in diesen Club bearbeiten"
#: apps/member/views.py:901 #: apps/member/views.py:905
msgid "Members of the club" msgid "Members of the club"
msgstr "Mitlglieder dieses Club" msgstr "Mitlglieder dieses Club"
@ -1570,7 +1570,7 @@ msgstr "Sondertranskationen"
msgid "membership transaction" msgid "membership transaction"
msgstr "Mitgliedschafttransaktion" 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" msgid "membership transactions"
msgstr "Mitgliedschaftttransaktionen" msgstr "Mitgliedschaftttransaktionen"
@ -1689,7 +1689,7 @@ msgid "Amount"
msgstr "Anzahl" msgstr "Anzahl"
#: apps/note/templates/note/transaction_form.html:132 #: apps/note/templates/note/transaction_form.html:132
#: apps/treasury/models.py:55 #: apps/treasury/models.py:56
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
@ -1982,29 +1982,15 @@ msgstr "Alle Rechten"
msgid "registration" msgid "registration"
msgstr "Anmeldung" msgstr "Anmeldung"
#: apps/registration/forms.py:39 #: apps/registration/forms.py:40
msgid "This email address is already used." msgid "This email address is already used."
msgstr "Diese email adresse ist schon benutzt." msgstr "Diese email adresse ist schon benutzt."
#: apps/registration/forms.py:49 #: apps/registration/forms.py:60
#, 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
msgid "Register to the WEI" msgid "Register to the WEI"
msgstr "Zu WEI anmelden" msgstr "Zu WEI anmelden"
#: apps/registration/forms.py:61 #: apps/registration/forms.py:62
msgid "" msgid ""
"Check this case if you want to register to the WEI. If you hesitate, you " "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." "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 " "falls Zweifel, können Sie sich später nach Bestätigung Ihres Kontos im Kfet "
"registrieren." "registrieren."
#: apps/registration/forms.py:106 #: apps/registration/forms.py:107
msgid "Join BDE Club" msgid "Join BDE Club"
msgstr "BDE Mitglieder werden" msgstr "BDE Mitglieder werden"
#: apps/registration/forms.py:113 #: apps/registration/forms.py:114
msgid "Join Kfet Club" msgid "Join Kfet Club"
msgstr "Kfet Mitglieder werden" 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 #: apps/registration/templates/registration/email_validation_complete.html:15
msgid "Your email have successfully been validated." msgid "Your email have successfully been validated."
msgstr "Ihre E-Mail wurde erfolgreich validiert." msgstr "Ihre E-Mail wurde erfolgreich validiert."
@ -2069,14 +2059,14 @@ msgstr "Registrierung löschen"
msgid "Validate account" msgid "Validate account"
msgstr "Konto validieren" msgstr "Konto validieren"
#: apps/registration/templates/registration/future_profile_detail.html:62 #: apps/registration/templates/registration/future_profile_detail.html:63
#, fuzzy #, fuzzy
#| msgid "You already opened an account in the Société générale." #| msgid "You already opened an account in the Société générale."
msgid "" msgid ""
"The user declared that he/she opened a bank account in the Société générale." "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." 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:127
#: apps/wei/templates/wei/weimembership_form.html:186 #: apps/wei/templates/wei/weimembership_form.html:186
msgid "Validate registration" msgid "Validate registration"
@ -2128,54 +2118,54 @@ msgstr "Danke"
msgid "The Note Kfet team." msgid "The Note Kfet team."
msgstr "Die NoteKfet Team." msgstr "Die NoteKfet Team."
#: apps/registration/views.py:40 #: apps/registration/views.py:41
msgid "Register new user" msgid "Register new user"
msgstr "Neuen User registrieren" msgstr "Neuen User registrieren"
#: apps/registration/views.py:98 #: apps/registration/views.py:99
msgid "Email validation" msgid "Email validation"
msgstr "Email validierung" msgstr "Email validierung"
#: apps/registration/views.py:100 #: apps/registration/views.py:101
msgid "Validate email" msgid "Validate email"
msgstr "Email validieren" msgstr "Email validieren"
#: apps/registration/views.py:144 #: apps/registration/views.py:145
msgid "Email validation unsuccessful" msgid "Email validation unsuccessful"
msgstr "Email validierung unerfolgreich" msgstr "Email validierung unerfolgreich"
#: apps/registration/views.py:155 #: apps/registration/views.py:156
msgid "Email validation email sent" msgid "Email validation email sent"
msgstr "Validierungsemail wurde gesendet" msgstr "Validierungsemail wurde gesendet"
#: apps/registration/views.py:163 #: apps/registration/views.py:164
msgid "Resend email validation link" msgid "Resend email validation link"
msgstr "E-Mail-Validierungslink erneut senden" msgstr "E-Mail-Validierungslink erneut senden"
#: apps/registration/views.py:181 #: apps/registration/views.py:182
msgid "Pre-registered users list" msgid "Pre-registered users list"
msgstr "Vorregistrierte Userliste" msgstr "Vorregistrierte Userliste"
#: apps/registration/views.py:205 #: apps/registration/views.py:206
msgid "Unregistered users" msgid "Unregistered users"
msgstr "Unregistrierte Users" msgstr "Unregistrierte Users"
#: apps/registration/views.py:218 #: apps/registration/views.py:219
msgid "Registration detail" msgid "Registration detail"
msgstr "Registrierung Detailen" msgstr "Registrierung Detailen"
#: apps/registration/views.py:282 #: apps/registration/views.py:293
msgid "You must join the BDE." msgid "You must join the BDE."
msgstr "Sie müssen die BDE beitreten." msgstr "Sie müssen die BDE beitreten."
#: apps/registration/views.py:306 #: apps/registration/views.py:323
msgid "" msgid ""
"The entered amount is not enough for the memberships, should be at least {}" "The entered amount is not enough for the memberships, should be at least {}"
msgstr "" msgstr ""
"Der eingegebene Betrag reicht für die Mitgliedschaft nicht aus, sollte " "Der eingegebene Betrag reicht für die Mitgliedschaft nicht aus, sollte "
"mindestens {} betragen" "mindestens {} betragen"
#: apps/registration/views.py:387 #: apps/registration/views.py:417
msgid "Invalidate pre-registration" msgid "Invalidate pre-registration"
msgstr "Ungültige Vorregistrierung" msgstr "Ungültige Vorregistrierung"
@ -2183,7 +2173,7 @@ msgstr "Ungültige Vorregistrierung"
msgid "Treasury" msgid "Treasury"
msgstr "Quaestor" 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 #: apps/treasury/templates/treasury/invoice_form.html:22
msgid "This invoice is locked and can no longer be edited." msgid "This invoice is locked and can no longer be edited."
msgstr "Diese Rechnung ist gesperrt und kann nicht mehr bearbeitet werden." 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." msgid "You can't change the type of the remittance."
msgstr "Sie können die Art der Überweisung nicht ändern." 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/tables.py:97 apps/treasury/tables.py:105
#: apps/treasury/templates/treasury/invoice_list.html:16 #: apps/treasury/templates/treasury/invoice_list.html:16
#: apps/treasury/templates/treasury/remittance_list.html:16 #: apps/treasury/templates/treasury/remittance_list.html:16
@ -2212,112 +2202,112 @@ msgstr "Keine beigefügte Überweisung"
msgid "Invoice identifier" msgid "Invoice identifier"
msgstr "Rechnungskennung" msgstr "Rechnungskennung"
#: apps/treasury/models.py:41 #: apps/treasury/models.py:42
msgid "BDE" msgid "BDE"
msgstr "BDE" msgstr "BDE"
#: apps/treasury/models.py:46 #: apps/treasury/models.py:47
msgid "Object" msgid "Object"
msgstr "Objekt" msgstr "Objekt"
#: apps/treasury/models.py:50 #: apps/treasury/models.py:51
msgid "Description" msgid "Description"
msgstr "Beschreibung" msgstr "Beschreibung"
#: apps/treasury/models.py:59 #: apps/treasury/models.py:60
msgid "Address" msgid "Address"
msgstr "Adresse" msgstr "Adresse"
#: apps/treasury/models.py:64 apps/treasury/models.py:194 #: apps/treasury/models.py:65 apps/treasury/models.py:195
msgid "Date" msgid "Date"
msgstr "Datum" msgstr "Datum"
#: apps/treasury/models.py:68 #: apps/treasury/models.py:69
msgid "Acquitted" msgid "Acquitted"
msgstr "Bezahlt" msgstr "Bezahlt"
#: apps/treasury/models.py:73 #: apps/treasury/models.py:74
msgid "Locked" msgid "Locked"
msgstr "Gesperrt" msgstr "Gesperrt"
#: apps/treasury/models.py:74 #: apps/treasury/models.py:75
msgid "An invoice can't be edited when it is locked." msgid "An invoice can't be edited when it is locked."
msgstr "Eine Rechnung kann nicht bearbeitet werden, wenn sie gesperrt ist." msgstr "Eine Rechnung kann nicht bearbeitet werden, wenn sie gesperrt ist."
#: apps/treasury/models.py:80 #: apps/treasury/models.py:81
msgid "tex source" msgid "tex source"
msgstr "Tex Quelle" 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" msgid "invoice"
msgstr "Rechnung" msgstr "Rechnung"
#: apps/treasury/models.py:115 #: apps/treasury/models.py:116
msgid "invoices" msgid "invoices"
msgstr "Rechnungen" msgstr "Rechnungen"
#: apps/treasury/models.py:118 #: apps/treasury/models.py:119
#, python-brace-format #, python-brace-format
msgid "Invoice #{id}" msgid "Invoice #{id}"
msgstr "Rechnung #{id}" msgstr "Rechnung #{id}"
#: apps/treasury/models.py:135 #: apps/treasury/models.py:136
msgid "Designation" msgid "Designation"
msgstr "Bezeichnung" msgstr "Bezeichnung"
#: apps/treasury/models.py:141 #: apps/treasury/models.py:142
msgid "Quantity" msgid "Quantity"
msgstr "Qualität" msgstr "Qualität"
#: apps/treasury/models.py:146 #: apps/treasury/models.py:147
msgid "Unit price" msgid "Unit price"
msgstr "Einzelpreis" msgstr "Einzelpreis"
#: apps/treasury/models.py:162 #: apps/treasury/models.py:163
msgid "product" msgid "product"
msgstr "Produkt" msgstr "Produkt"
#: apps/treasury/models.py:163 #: apps/treasury/models.py:164
msgid "products" msgid "products"
msgstr "Produkten" msgstr "Produkten"
#: apps/treasury/models.py:183 #: apps/treasury/models.py:184
msgid "remittance type" msgid "remittance type"
msgstr "Überweisungstyp" msgstr "Überweisungstyp"
#: apps/treasury/models.py:184 #: apps/treasury/models.py:185
msgid "remittance types" msgid "remittance types"
msgstr "Überweisungstypen" msgstr "Überweisungstypen"
#: apps/treasury/models.py:205 #: apps/treasury/models.py:206
msgid "Comment" msgid "Comment"
msgstr "Kommentar" msgstr "Kommentar"
#: apps/treasury/models.py:210 #: apps/treasury/models.py:211
msgid "Closed" msgid "Closed"
msgstr "Geschlossen" msgstr "Geschlossen"
#: apps/treasury/models.py:214 #: apps/treasury/models.py:215
msgid "remittance" msgid "remittance"
msgstr "Überweisung" msgstr "Überweisung"
#: apps/treasury/models.py:215 #: apps/treasury/models.py:216
msgid "remittances" msgid "remittances"
msgstr "Überweisungen" msgstr "Überweisungen"
#: apps/treasury/models.py:248 #: apps/treasury/models.py:249
msgid "Remittance #{:d}: {}" msgid "Remittance #{:d}: {}"
msgstr "Überweisung #{:d}:{}" msgstr "Überweisung #{:d}:{}"
#: apps/treasury/models.py:272 #: apps/treasury/models.py:273
msgid "special transaction proxy" msgid "special transaction proxy"
msgstr "spezielle Transaktion Proxy" msgstr "spezielle Transaktion Proxy"
#: apps/treasury/models.py:273 #: apps/treasury/models.py:274
msgid "special transaction proxies" msgid "special transaction proxies"
msgstr "spezielle Transaktion Proxies" msgstr "spezielle Transaktion Proxies"
#: apps/treasury/models.py:299 #: apps/treasury/models.py:300
msgid "credit transaction" msgid "credit transaction"
msgstr "Kredit Transaktion" msgstr "Kredit Transaktion"
@ -2329,16 +2319,16 @@ msgstr ""
"Dieser Benutzer hat nicht genug Geld, um die Mitgliedschaften mit seiner " "Dieser Benutzer hat nicht genug Geld, um die Mitgliedschaften mit seiner "
"Note zu bezahlen." "Note zu bezahlen."
#: apps/treasury/models.py:453 #: apps/treasury/models.py:452
#: apps/treasury/templates/treasury/sogecredit_detail.html:10 #: apps/treasury/templates/treasury/sogecredit_detail.html:10
msgid "Credit from the Société générale" msgid "Credit from the Société générale"
msgstr "Kredit von der 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" msgid "Credits from the Société générale"
msgstr "Krediten von der 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 #, python-brace-format
msgid "Soge credit for {user}" msgid "Soge credit for {user}"
msgstr "Kredit von der Société générale für {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 "" msgstr ""
#: apps/wei/forms/registration.py:59 apps/wei/models.py:126 #: apps/wei/forms/registration.py:59 apps/wei/models.py:126
#: apps/wei/models.py:323 #: apps/wei/models.py:326
msgid "bus" msgid "bus"
msgstr "Bus" msgstr "Bus"
@ -2727,40 +2717,48 @@ msgstr "Nicht binär"
msgid "gender" msgid "gender"
msgstr "Geschlecht" 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" msgid "clothing cut"
msgstr "Kleidung Schnitt" 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" msgid "clothing size"
msgstr "Kleidergröße" 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 #: apps/wei/templates/wei/weimembership_form.html:67
msgid "health issues" msgid "health issues"
msgstr "Gesundheitsprobleme" 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" msgid "emergency contact name"
msgstr "Notfall-Kontakt" 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" msgid "emergency contact phone"
msgstr "Notfallkontakttelefon" 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" msgid "first year"
msgstr "Erste Jahr" msgstr "Erste Jahr"
#: apps/wei/models.py:248 #: apps/wei/models.py:251
msgid "Tells if the user is new in the school." msgid "Tells if the user is new in the school."
msgstr "Gibt an, ob der USer neu in der Schule ist." msgstr "Gibt an, ob der USer neu in der Schule ist."
#: apps/wei/models.py:253 #: apps/wei/models.py:256
msgid "registration information" msgid "registration information"
msgstr "Registrierung Detailen" msgstr "Registrierung Detailen"
#: apps/wei/models.py:254 #: apps/wei/models.py:257
msgid "" msgid ""
"Information about the registration (buses for old members, survey for the " "Information about the registration (buses for old members, survey for the "
"new members), encoded in JSON" "new members), encoded in JSON"
@ -2768,27 +2766,27 @@ msgstr ""
"Informationen zur Registrierung (Busse für alte Mitglieder, Umfrage für neue " "Informationen zur Registrierung (Busse für alte Mitglieder, Umfrage für neue "
"Mitglieder), verschlüsselt in JSON" "Mitglieder), verschlüsselt in JSON"
#: apps/wei/models.py:312 #: apps/wei/models.py:315
msgid "WEI User" msgid "WEI User"
msgstr "WEI User" msgstr "WEI User"
#: apps/wei/models.py:313 #: apps/wei/models.py:316
msgid "WEI Users" msgid "WEI Users"
msgstr "WEI Users" msgstr "WEI Users"
#: apps/wei/models.py:333 #: apps/wei/models.py:336
msgid "team" msgid "team"
msgstr "Team" msgstr "Team"
#: apps/wei/models.py:343 #: apps/wei/models.py:346
msgid "WEI registration" msgid "WEI registration"
msgstr "WEI Registrierung" msgstr "WEI Registrierung"
#: apps/wei/models.py:347 #: apps/wei/models.py:350
msgid "WEI membership" msgid "WEI membership"
msgstr "WEI Mitgliedschaft" msgstr "WEI Mitgliedschaft"
#: apps/wei/models.py:348 #: apps/wei/models.py:351
msgid "WEI memberships" msgid "WEI memberships"
msgstr "WEI Mitgliedschaften" msgstr "WEI Mitgliedschaften"
@ -3612,6 +3610,13 @@ msgstr ""
"müssen Ihre E-Mail-Adresse auch überprüfen, indem Sie dem Link folgen, den " "müssen Ihre E-Mail-Adresse auch überprüfen, indem Sie dem Link folgen, den "
"Sie erhalten haben." "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." #~ msgid "This user didn't give her/his caution check."
#~ msgstr "Dieser User hat seine / ihre Vorsicht nicht überprüft." #~ msgstr "Dieser User hat seine / ihre Vorsicht nicht überprüft."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2022-04-11 23:12+0200\n"
"Last-Translator: bleizi <bleizi@crans.org>\n" "Last-Translator: bleizi <bleizi@crans.org>\n"
"Language-Team: \n" "Language-Team: \n"
@ -114,7 +114,7 @@ msgid "type"
msgstr "tipo" msgstr "tipo"
#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:307 #: 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/models.py:173 apps/wei/templates/wei/attribute_bus_1A.html:13
#: apps/wei/templates/wei/survey.html:15 #: apps/wei/templates/wei/survey.html:15
msgid "user" msgid "user"
@ -257,19 +257,19 @@ msgstr "Entrado el "
msgid "remove" msgid "remove"
msgstr "quitar" 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" msgid "Type"
msgstr "Tipo" msgstr "Tipo"
#: apps/activity/tables.py:84 apps/member/forms.py:186 #: 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 #: apps/wei/forms/registration.py:104
msgid "Last name" msgid "Last name"
msgstr "Apellido" msgstr "Apellido"
#: apps/activity/tables.py:86 apps/member/forms.py:191 #: apps/activity/tables.py:86 apps/member/forms.py:191
#: apps/note/templates/note/transaction_form.html:138 #: 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 #: apps/wei/forms/registration.py:109
msgid "First name" msgid "First name"
msgstr "Nombre" msgstr "Nombre"
@ -546,24 +546,24 @@ msgid "This image cannot be loaded."
msgstr "Esta imagen no puede ser cargada." msgstr "Esta imagen no puede ser cargada."
#: apps/member/forms.py:141 apps/member/views.py:103 #: 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." msgid "An alias with a similar name already exists."
msgstr "Un alias similar ya existe." 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" msgid "Inscription paid by Société Générale"
msgstr "Registración pagadas por 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." 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." 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 #: apps/wei/forms/registration.py:91
msgid "Credit type" msgid "Credit type"
msgstr "Tipo de crédito" 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 #: apps/wei/forms/registration.py:92
msgid "No credit" msgid "No credit"
msgstr "No crédito" msgstr "No crédito"
@ -572,13 +572,13 @@ msgstr "No crédito"
msgid "You can credit the note of the user." msgid "You can credit the note of the user."
msgstr "Usted puede acreditar la note del usuario." 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 #: apps/wei/forms/registration.py:97
msgid "Credit amount" msgid "Credit amount"
msgstr "Valor del crédito" msgstr "Valor del crédito"
#: apps/member/forms.py:196 apps/note/templates/note/transaction_form.html:144 #: 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 #: apps/wei/forms/registration.py:114
msgid "Bank" msgid "Bank"
msgstr "Banco" msgstr "Banco"
@ -1180,7 +1180,7 @@ msgstr "Guardar cambios"
msgid "Registrations" msgid "Registrations"
msgstr "Registraciones" 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." msgid "This address must be valid."
msgstr "Este correo tiene que ser valido." 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}." msgid "The membership must begin before {:%m-%d-%Y}."
msgstr "La afiliación tiene que empezar antes del {:%d-%m-%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" msgid "Manage roles of an user in the club"
msgstr "Gestionar los papeles de un usuario en el 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" msgid "Members of the club"
msgstr "Miembros del club" msgstr "Miembros del club"
@ -1557,7 +1557,7 @@ msgstr "Transacciones especiales"
msgid "membership transaction" msgid "membership transaction"
msgstr "transacción de afiliación" 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" msgid "membership transactions"
msgstr "transacciones de afiliación" msgstr "transacciones de afiliación"
@ -1676,7 +1676,7 @@ msgid "Amount"
msgstr "Monto" msgstr "Monto"
#: apps/note/templates/note/transaction_form.html:132 #: apps/note/templates/note/transaction_form.html:132
#: apps/treasury/models.py:55 #: apps/treasury/models.py:56
msgid "Name" msgid "Name"
msgstr "Nombre" msgstr "Nombre"
@ -1963,31 +1963,15 @@ msgstr "Todos los permisos"
msgid "registration" msgid "registration"
msgstr "afiliación" msgstr "afiliación"
#: apps/registration/forms.py:39 #: apps/registration/forms.py:40
msgid "This email address is already used." msgid "This email address is already used."
msgstr "Este correo electrónico ya esta utilizado." msgstr "Este correo electrónico ya esta utilizado."
#: apps/registration/forms.py:49 #: apps/registration/forms.py:60
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
msgid "Register to the WEI" msgid "Register to the WEI"
msgstr "Registrarse en el WEI" msgstr "Registrarse en el WEI"
#: apps/registration/forms.py:61 #: apps/registration/forms.py:62
msgid "" msgid ""
"Check this case if you want to register to the WEI. If you hesitate, you " "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." "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á " "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." "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" msgid "Join BDE Club"
msgstr "Afiliarse al club BDE" msgstr "Afiliarse al club BDE"
#: apps/registration/forms.py:113 #: apps/registration/forms.py:114
msgid "Join Kfet Club" msgid "Join Kfet Club"
msgstr "Afiliarse al club Kfet" 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 #: apps/registration/templates/registration/email_validation_complete.html:15
msgid "Your email have successfully been validated." msgid "Your email have successfully been validated."
msgstr "Su correo electrónico fue validado con éxito." msgstr "Su correo electrónico fue validado con éxito."
@ -2051,12 +2039,12 @@ msgstr "Suprimir afiliación"
msgid "Validate account" msgid "Validate account"
msgstr "Validar la cuenta" msgstr "Validar la cuenta"
#: apps/registration/templates/registration/future_profile_detail.html:62 #: apps/registration/templates/registration/future_profile_detail.html:63
msgid "" msgid ""
"The user declared that he/she opened a bank account in the Société générale." "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." 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:127
#: apps/wei/templates/wei/weimembership_form.html:186 #: apps/wei/templates/wei/weimembership_form.html:186
msgid "Validate registration" msgid "Validate registration"
@ -2108,54 +2096,54 @@ msgstr "Gracias"
msgid "The Note Kfet team." msgid "The Note Kfet team."
msgstr "El equipo Note Kfet." msgstr "El equipo Note Kfet."
#: apps/registration/views.py:40 #: apps/registration/views.py:41
msgid "Register new user" msgid "Register new user"
msgstr "Registrar un nuevo usuario" msgstr "Registrar un nuevo usuario"
#: apps/registration/views.py:98 #: apps/registration/views.py:99
msgid "Email validation" msgid "Email validation"
msgstr "Validación del correo electrónico" msgstr "Validación del correo electrónico"
#: apps/registration/views.py:100 #: apps/registration/views.py:101
msgid "Validate email" msgid "Validate email"
msgstr "Validar el correo electrónico" msgstr "Validar el correo electrónico"
#: apps/registration/views.py:144 #: apps/registration/views.py:145
msgid "Email validation unsuccessful" msgid "Email validation unsuccessful"
msgstr "La validación del correo electrónico fracasó" msgstr "La validación del correo electrónico fracasó"
#: apps/registration/views.py:155 #: apps/registration/views.py:156
msgid "Email validation email sent" msgid "Email validation email sent"
msgstr "Correo de validación enviado" msgstr "Correo de validación enviado"
#: apps/registration/views.py:163 #: apps/registration/views.py:164
msgid "Resend email validation link" msgid "Resend email validation link"
msgstr "Reenviar el enlace de validación" msgstr "Reenviar el enlace de validación"
#: apps/registration/views.py:181 #: apps/registration/views.py:182
msgid "Pre-registered users list" msgid "Pre-registered users list"
msgstr "Lista de los usuarios con afiliación pendiente" msgstr "Lista de los usuarios con afiliación pendiente"
#: apps/registration/views.py:205 #: apps/registration/views.py:206
msgid "Unregistered users" msgid "Unregistered users"
msgstr "Usuarios con afiliación pendiente" msgstr "Usuarios con afiliación pendiente"
#: apps/registration/views.py:218 #: apps/registration/views.py:219
msgid "Registration detail" msgid "Registration detail"
msgstr "Detalles de la afiliación" msgstr "Detalles de la afiliación"
#: apps/registration/views.py:282 #: apps/registration/views.py:293
msgid "You must join the BDE." msgid "You must join the BDE."
msgstr "Usted tiene que afiliarse al BDE." msgstr "Usted tiene que afiliarse al BDE."
#: apps/registration/views.py:306 #: apps/registration/views.py:323
msgid "" msgid ""
"The entered amount is not enough for the memberships, should be at least {}" "The entered amount is not enough for the memberships, should be at least {}"
msgstr "" msgstr ""
"El monto dado no es suficiente para las afiliaciones, tiene que ser al menos " "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" msgid "Invalidate pre-registration"
msgstr "Invalidar la afiliación" msgstr "Invalidar la afiliación"
@ -2163,7 +2151,7 @@ msgstr "Invalidar la afiliación"
msgid "Treasury" msgid "Treasury"
msgstr "Tesorería" 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 #: apps/treasury/templates/treasury/invoice_form.html:22
msgid "This invoice is locked and can no longer be edited." msgid "This invoice is locked and can no longer be edited."
msgstr "Esta factura esta bloqueada y no puede ser modificada." 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." msgid "You can't change the type of the remittance."
msgstr "No puede cambiar el tipo de descuento." 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/tables.py:97 apps/treasury/tables.py:105
#: apps/treasury/templates/treasury/invoice_list.html:16 #: apps/treasury/templates/treasury/invoice_list.html:16
#: apps/treasury/templates/treasury/remittance_list.html:16 #: apps/treasury/templates/treasury/remittance_list.html:16
@ -2192,112 +2180,112 @@ msgstr "No hay descuento relacionado"
msgid "Invoice identifier" msgid "Invoice identifier"
msgstr "Numero de factura" msgstr "Numero de factura"
#: apps/treasury/models.py:41 #: apps/treasury/models.py:42
msgid "BDE" msgid "BDE"
msgstr "BDE" msgstr "BDE"
#: apps/treasury/models.py:46 #: apps/treasury/models.py:47
msgid "Object" msgid "Object"
msgstr "Asunto" msgstr "Asunto"
#: apps/treasury/models.py:50 #: apps/treasury/models.py:51
msgid "Description" msgid "Description"
msgstr "Descripción" msgstr "Descripción"
#: apps/treasury/models.py:59 #: apps/treasury/models.py:60
msgid "Address" msgid "Address"
msgstr "Dirección" 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" msgid "Date"
msgstr "Fecha" msgstr "Fecha"
#: apps/treasury/models.py:68 #: apps/treasury/models.py:69
msgid "Acquitted" msgid "Acquitted"
msgstr "Pagada" msgstr "Pagada"
#: apps/treasury/models.py:73 #: apps/treasury/models.py:74
msgid "Locked" msgid "Locked"
msgstr "Bloqueada" msgstr "Bloqueada"
#: apps/treasury/models.py:74 #: apps/treasury/models.py:75
msgid "An invoice can't be edited when it is locked." msgid "An invoice can't be edited when it is locked."
msgstr "Une factura no puede ser modificada cuando esta bloqueada." msgstr "Une factura no puede ser modificada cuando esta bloqueada."
#: apps/treasury/models.py:80 #: apps/treasury/models.py:81
msgid "tex source" msgid "tex source"
msgstr "código fuente TeX" 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" msgid "invoice"
msgstr "factura" msgstr "factura"
#: apps/treasury/models.py:115 #: apps/treasury/models.py:116
msgid "invoices" msgid "invoices"
msgstr "facturas" msgstr "facturas"
#: apps/treasury/models.py:118 #: apps/treasury/models.py:119
#, python-brace-format #, python-brace-format
msgid "Invoice #{id}" msgid "Invoice #{id}"
msgstr "Factura n°{id}" msgstr "Factura n°{id}"
#: apps/treasury/models.py:135 #: apps/treasury/models.py:136
msgid "Designation" msgid "Designation"
msgstr "Designación" msgstr "Designación"
#: apps/treasury/models.py:141 #: apps/treasury/models.py:142
msgid "Quantity" msgid "Quantity"
msgstr "Cantidad" msgstr "Cantidad"
#: apps/treasury/models.py:146 #: apps/treasury/models.py:147
msgid "Unit price" msgid "Unit price"
msgstr "Precio unitario" msgstr "Precio unitario"
#: apps/treasury/models.py:162 #: apps/treasury/models.py:163
msgid "product" msgid "product"
msgstr "producto" msgstr "producto"
#: apps/treasury/models.py:163 #: apps/treasury/models.py:164
msgid "products" msgid "products"
msgstr "productos" msgstr "productos"
#: apps/treasury/models.py:183 #: apps/treasury/models.py:184
msgid "remittance type" msgid "remittance type"
msgstr "tipo de descuento" msgstr "tipo de descuento"
#: apps/treasury/models.py:184 #: apps/treasury/models.py:185
msgid "remittance types" msgid "remittance types"
msgstr "tipos de descuentos" msgstr "tipos de descuentos"
#: apps/treasury/models.py:205 #: apps/treasury/models.py:206
msgid "Comment" msgid "Comment"
msgstr "Comentario" msgstr "Comentario"
#: apps/treasury/models.py:210 #: apps/treasury/models.py:211
msgid "Closed" msgid "Closed"
msgstr "Cerrada" msgstr "Cerrada"
#: apps/treasury/models.py:214 #: apps/treasury/models.py:215
msgid "remittance" msgid "remittance"
msgstr "descuento" msgstr "descuento"
#: apps/treasury/models.py:215 #: apps/treasury/models.py:216
msgid "remittances" msgid "remittances"
msgstr "descuentos" msgstr "descuentos"
#: apps/treasury/models.py:248 #: apps/treasury/models.py:249
msgid "Remittance #{:d}: {}" msgid "Remittance #{:d}: {}"
msgstr "Descuento n°{:d} : {}" msgstr "Descuento n°{:d} : {}"
#: apps/treasury/models.py:272 #: apps/treasury/models.py:273
msgid "special transaction proxy" msgid "special transaction proxy"
msgstr "proxy de transacción especial" msgstr "proxy de transacción especial"
#: apps/treasury/models.py:273 #: apps/treasury/models.py:274
msgid "special transaction proxies" msgid "special transaction proxies"
msgstr "proxys de transacciones especiales" msgstr "proxys de transacciones especiales"
#: apps/treasury/models.py:299 #: apps/treasury/models.py:300
msgid "credit transaction" msgid "credit transaction"
msgstr "transacción de crédito" msgstr "transacción de crédito"
@ -2310,16 +2298,16 @@ msgstr ""
"afiliaciones. Por favor pídelo acreditar su note antes de invalidar este " "afiliaciones. Por favor pídelo acreditar su note antes de invalidar este "
"crédito." "crédito."
#: apps/treasury/models.py:453 #: apps/treasury/models.py:452
#: apps/treasury/templates/treasury/sogecredit_detail.html:10 #: apps/treasury/templates/treasury/sogecredit_detail.html:10
msgid "Credit from the Société générale" msgid "Credit from the Société générale"
msgstr "Crédito de la 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" msgid "Credits from the Société générale"
msgstr "Créditos de la 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 #, python-brace-format
msgid "Soge credit for {user}" msgid "Soge credit for {user}"
msgstr "Crédito de la Société Générale para {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" "El usuario seleccionado no ha sido validado. Validar esta cuenta primero"
#: apps/wei/forms/registration.py:59 apps/wei/models.py:126 #: apps/wei/forms/registration.py:59 apps/wei/models.py:126
#: apps/wei/models.py:323 #: apps/wei/models.py:326
msgid "bus" msgid "bus"
msgstr "bus" msgstr "bus"
@ -2699,40 +2687,48 @@ msgstr "No binari@"
msgid "gender" msgid "gender"
msgstr "género" 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" msgid "clothing cut"
msgstr "forma de ropa" 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" msgid "clothing size"
msgstr "medida de ropa" 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 #: apps/wei/templates/wei/weimembership_form.html:67
msgid "health issues" msgid "health issues"
msgstr "problemas de salud" 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" msgid "emergency contact name"
msgstr "nombre del contacto de emergencia" 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" msgid "emergency contact phone"
msgstr "teléfono del contacto de emergencia" 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" msgid "first year"
msgstr "primer año" msgstr "primer año"
#: apps/wei/models.py:248 #: apps/wei/models.py:251
msgid "Tells if the user is new in the school." msgid "Tells if the user is new in the school."
msgstr "Indica si el usuario es nuevo en la escuela." msgstr "Indica si el usuario es nuevo en la escuela."
#: apps/wei/models.py:253 #: apps/wei/models.py:256
msgid "registration information" msgid "registration information"
msgstr "informaciones sobre la afiliación" msgstr "informaciones sobre la afiliación"
#: apps/wei/models.py:254 #: apps/wei/models.py:257
msgid "" msgid ""
"Information about the registration (buses for old members, survey for the " "Information about the registration (buses for old members, survey for the "
"new members), encoded in JSON" "new members), encoded in JSON"
@ -2740,27 +2736,27 @@ msgstr ""
"Informaciones sobre la afiliacion (bus para miembros ancianos, cuestionario " "Informaciones sobre la afiliacion (bus para miembros ancianos, cuestionario "
"para los nuevos miembros), registrado en JSON" "para los nuevos miembros), registrado en JSON"
#: apps/wei/models.py:312 #: apps/wei/models.py:315
msgid "WEI User" msgid "WEI User"
msgstr "Participante WEI" msgstr "Participante WEI"
#: apps/wei/models.py:313 #: apps/wei/models.py:316
msgid "WEI Users" msgid "WEI Users"
msgstr "Participantes WEI" msgstr "Participantes WEI"
#: apps/wei/models.py:333 #: apps/wei/models.py:336
msgid "team" msgid "team"
msgstr "equipo" msgstr "equipo"
#: apps/wei/models.py:343 #: apps/wei/models.py:346
msgid "WEI registration" msgid "WEI registration"
msgstr "Apuntación al WEI" msgstr "Apuntación al WEI"
#: apps/wei/models.py:347 #: apps/wei/models.py:350
msgid "WEI membership" msgid "WEI membership"
msgstr "Afiliación al WEI" msgstr "Afiliación al WEI"
#: apps/wei/models.py:348 #: apps/wei/models.py:351
msgid "WEI memberships" msgid "WEI memberships"
msgstr "Afiliaciones al WEI" msgstr "Afiliaciones al WEI"
@ -3541,6 +3537,21 @@ msgstr ""
"pagar su afiliación. Tambien tiene que validar su correo electronico con el " "pagar su afiliación. Tambien tiene que validar su correo electronico con el "
"enlace que recibió." "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." #~ 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." #~ msgstr "Usted no es un miembro de la Kfet, no puede usar su cuenta note."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2022-04-11 22:05+0200\n"
"Last-Translator: bleizi <bleizi@crans.org>\n" "Last-Translator: bleizi <bleizi@crans.org>\n"
"Language-Team: French <http://translate.ynerant.fr/projects/nk20/nk20/fr/>\n" "Language-Team: French <http://translate.ynerant.fr/projects/nk20/nk20/fr/>\n"
@ -115,7 +115,7 @@ msgid "type"
msgstr "type" msgstr "type"
#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:307 #: 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/models.py:173 apps/wei/templates/wei/attribute_bus_1A.html:13
#: apps/wei/templates/wei/survey.html:15 #: apps/wei/templates/wei/survey.html:15
msgid "user" msgid "user"
@ -258,19 +258,19 @@ msgstr "Entré le "
msgid "remove" msgid "remove"
msgstr "supprimer" 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" msgid "Type"
msgstr "Type" msgstr "Type"
#: apps/activity/tables.py:84 apps/member/forms.py:186 #: 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 #: apps/wei/forms/registration.py:104
msgid "Last name" msgid "Last name"
msgstr "Nom de famille" msgstr "Nom de famille"
#: apps/activity/tables.py:86 apps/member/forms.py:191 #: apps/activity/tables.py:86 apps/member/forms.py:191
#: apps/note/templates/note/transaction_form.html:138 #: 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 #: apps/wei/forms/registration.py:109
msgid "First name" msgid "First name"
msgstr "Prénom" msgstr "Prénom"
@ -548,24 +548,24 @@ msgid "This image cannot be loaded."
msgstr "Cette image ne peut pas être chargée." msgstr "Cette image ne peut pas être chargée."
#: apps/member/forms.py:141 apps/member/views.py:103 #: 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." msgid "An alias with a similar name already exists."
msgstr "Un alias avec un nom similaire existe déjà." 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" msgid "Inscription paid by Société Générale"
msgstr "Inscription payée par la 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." 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." 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 #: apps/wei/forms/registration.py:91
msgid "Credit type" msgid "Credit type"
msgstr "Type de rechargement" 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 #: apps/wei/forms/registration.py:92
msgid "No credit" msgid "No credit"
msgstr "Pas de rechargement" msgstr "Pas de rechargement"
@ -574,13 +574,13 @@ msgstr "Pas de rechargement"
msgid "You can credit the note of the user." msgid "You can credit the note of the user."
msgstr "Vous pouvez créditer la note de l'utilisateur avant l'adhésion." 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 #: apps/wei/forms/registration.py:97
msgid "Credit amount" msgid "Credit amount"
msgstr "Montant à créditer" msgstr "Montant à créditer"
#: apps/member/forms.py:196 apps/note/templates/note/transaction_form.html:144 #: 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 #: apps/wei/forms/registration.py:114
msgid "Bank" msgid "Bank"
msgstr "Banque" msgstr "Banque"
@ -1183,7 +1183,7 @@ msgstr "Sauvegarder les changements"
msgid "Registrations" msgid "Registrations"
msgstr "Inscriptions" 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." msgid "This address must be valid."
msgstr "Cette adresse doit être valide." 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}." msgid "The membership must begin before {:%m-%d-%Y}."
msgstr "L'adhésion doit commencer avant le {:%d/%m/%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" msgid "Manage roles of an user in the club"
msgstr "Gérer les rôles d'un utilisateur dans le 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" msgid "Members of the club"
msgstr "Membres du club" msgstr "Membres du club"
@ -1563,7 +1563,7 @@ msgstr "Transactions de crédit/retrait"
msgid "membership transaction" msgid "membership transaction"
msgstr "transaction d'adhésion" 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" msgid "membership transactions"
msgstr "transactions d'adhésion" msgstr "transactions d'adhésion"
@ -1682,7 +1682,7 @@ msgid "Amount"
msgstr "Montant" msgstr "Montant"
#: apps/note/templates/note/transaction_form.html:132 #: apps/note/templates/note/transaction_form.html:132
#: apps/treasury/models.py:55 #: apps/treasury/models.py:56
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
@ -1972,31 +1972,15 @@ msgstr "Tous les droits"
msgid "registration" msgid "registration"
msgstr "inscription" msgstr "inscription"
#: apps/registration/forms.py:39 #: apps/registration/forms.py:40
msgid "This email address is already used." msgid "This email address is already used."
msgstr "Cet email est déjà pris." msgstr "Cet email est déjà pris."
#: apps/registration/forms.py:49 #: apps/registration/forms.py:60
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
msgid "Register to the WEI" msgid "Register to the WEI"
msgstr "S'inscrire au WEI" msgstr "S'inscrire au WEI"
#: apps/registration/forms.py:61 #: apps/registration/forms.py:62
msgid "" msgid ""
"Check this case if you want to register to the WEI. If you hesitate, you " "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." "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 à " "pourrez toujours vous inscrire plus tard, après avoir validé votre compte à "
"la Kfet." "la Kfet."
#: apps/registration/forms.py:106 #: apps/registration/forms.py:107
msgid "Join BDE Club" msgid "Join BDE Club"
msgstr "Adhérer au club BDE" msgstr "Adhérer au club BDE"
#: apps/registration/forms.py:113 #: apps/registration/forms.py:114
msgid "Join Kfet Club" msgid "Join Kfet Club"
msgstr "Adhérer au club Kfet" 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 #: apps/registration/templates/registration/email_validation_complete.html:15
msgid "Your email have successfully been validated." msgid "Your email have successfully been validated."
msgstr "Votre adresse e-mail a bien été validée." msgstr "Votre adresse e-mail a bien été validée."
@ -2061,12 +2049,12 @@ msgstr "Supprimer l'inscription"
msgid "Validate account" msgid "Validate account"
msgstr "Valider le compte" msgstr "Valider le compte"
#: apps/registration/templates/registration/future_profile_detail.html:62 #: apps/registration/templates/registration/future_profile_detail.html:63
msgid "" msgid ""
"The user declared that he/she opened a bank account in the Société générale." "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." 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:127
#: apps/wei/templates/wei/weimembership_form.html:186 #: apps/wei/templates/wei/weimembership_form.html:186
msgid "Validate registration" msgid "Validate registration"
@ -2116,54 +2104,54 @@ msgstr "Merci"
msgid "The Note Kfet team." msgid "The Note Kfet team."
msgstr "L'équipe de la Note Kfet." msgstr "L'équipe de la Note Kfet."
#: apps/registration/views.py:40 #: apps/registration/views.py:41
msgid "Register new user" msgid "Register new user"
msgstr "Enregistrer un nouvel utilisateur" msgstr "Enregistrer un nouvel utilisateur"
#: apps/registration/views.py:98 #: apps/registration/views.py:99
msgid "Email validation" msgid "Email validation"
msgstr "Validation de l'adresse mail" msgstr "Validation de l'adresse mail"
#: apps/registration/views.py:100 #: apps/registration/views.py:101
msgid "Validate email" msgid "Validate email"
msgstr "Valider l'adresse e-mail" msgstr "Valider l'adresse e-mail"
#: apps/registration/views.py:144 #: apps/registration/views.py:145
msgid "Email validation unsuccessful" msgid "Email validation unsuccessful"
msgstr "La validation de l'adresse mail a échoué" msgstr "La validation de l'adresse mail a échoué"
#: apps/registration/views.py:155 #: apps/registration/views.py:156
msgid "Email validation email sent" msgid "Email validation email sent"
msgstr "L'email de vérification de l'adresse email a bien été envoyé" 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" msgid "Resend email validation link"
msgstr "Renvoyer le lien de validation" msgstr "Renvoyer le lien de validation"
#: apps/registration/views.py:181 #: apps/registration/views.py:182
msgid "Pre-registered users list" msgid "Pre-registered users list"
msgstr "Liste des utilisateurs en attente d'inscription" msgstr "Liste des utilisateurs en attente d'inscription"
#: apps/registration/views.py:205 #: apps/registration/views.py:206
msgid "Unregistered users" msgid "Unregistered users"
msgstr "Utilisateurs en attente d'inscription" msgstr "Utilisateurs en attente d'inscription"
#: apps/registration/views.py:218 #: apps/registration/views.py:219
msgid "Registration detail" msgid "Registration detail"
msgstr "Détails de l'inscription" msgstr "Détails de l'inscription"
#: apps/registration/views.py:282 #: apps/registration/views.py:293
msgid "You must join the BDE." msgid "You must join the BDE."
msgstr "Vous devez adhérer au BDE." msgstr "Vous devez adhérer au BDE."
#: apps/registration/views.py:306 #: apps/registration/views.py:323
msgid "" msgid ""
"The entered amount is not enough for the memberships, should be at least {}" "The entered amount is not enough for the memberships, should be at least {}"
msgstr "" msgstr ""
"Le montant crédité est trop faible pour adhérer, il doit être au minimum de " "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" msgid "Invalidate pre-registration"
msgstr "Invalider l'inscription" msgstr "Invalider l'inscription"
@ -2171,7 +2159,7 @@ msgstr "Invalider l'inscription"
msgid "Treasury" msgid "Treasury"
msgstr "Trésorerie" 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 #: apps/treasury/templates/treasury/invoice_form.html:22
msgid "This invoice is locked and can no longer be edited." msgid "This invoice is locked and can no longer be edited."
msgstr "Cette facture est verrouillée et ne peut plus être éditée." 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." msgid "You can't change the type of the remittance."
msgstr "Vous ne pouvez pas changer le type de la remise." 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/tables.py:97 apps/treasury/tables.py:105
#: apps/treasury/templates/treasury/invoice_list.html:16 #: apps/treasury/templates/treasury/invoice_list.html:16
#: apps/treasury/templates/treasury/remittance_list.html:16 #: apps/treasury/templates/treasury/remittance_list.html:16
@ -2200,112 +2188,112 @@ msgstr "Pas de remise associée"
msgid "Invoice identifier" msgid "Invoice identifier"
msgstr "Numéro de facture" msgstr "Numéro de facture"
#: apps/treasury/models.py:41 #: apps/treasury/models.py:42
msgid "BDE" msgid "BDE"
msgstr "BDE" msgstr "BDE"
#: apps/treasury/models.py:46 #: apps/treasury/models.py:47
msgid "Object" msgid "Object"
msgstr "Objet" msgstr "Objet"
#: apps/treasury/models.py:50 #: apps/treasury/models.py:51
msgid "Description" msgid "Description"
msgstr "Description" msgstr "Description"
#: apps/treasury/models.py:59 #: apps/treasury/models.py:60
msgid "Address" msgid "Address"
msgstr "Adresse" msgstr "Adresse"
#: apps/treasury/models.py:64 apps/treasury/models.py:194 #: apps/treasury/models.py:65 apps/treasury/models.py:195
msgid "Date" msgid "Date"
msgstr "Date" msgstr "Date"
#: apps/treasury/models.py:68 #: apps/treasury/models.py:69
msgid "Acquitted" msgid "Acquitted"
msgstr "Acquittée" msgstr "Acquittée"
#: apps/treasury/models.py:73 #: apps/treasury/models.py:74
msgid "Locked" msgid "Locked"
msgstr "Verrouillée" msgstr "Verrouillée"
#: apps/treasury/models.py:74 #: apps/treasury/models.py:75
msgid "An invoice can't be edited when it is locked." 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." 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" msgid "tex source"
msgstr "fichier 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" msgid "invoice"
msgstr "facture" msgstr "facture"
#: apps/treasury/models.py:115 #: apps/treasury/models.py:116
msgid "invoices" msgid "invoices"
msgstr "factures" msgstr "factures"
#: apps/treasury/models.py:118 #: apps/treasury/models.py:119
#, python-brace-format #, python-brace-format
msgid "Invoice #{id}" msgid "Invoice #{id}"
msgstr "Facture n°{id}" msgstr "Facture n°{id}"
#: apps/treasury/models.py:135 #: apps/treasury/models.py:136
msgid "Designation" msgid "Designation"
msgstr "Désignation" msgstr "Désignation"
#: apps/treasury/models.py:141 #: apps/treasury/models.py:142
msgid "Quantity" msgid "Quantity"
msgstr "Quantité" msgstr "Quantité"
#: apps/treasury/models.py:146 #: apps/treasury/models.py:147
msgid "Unit price" msgid "Unit price"
msgstr "Prix unitaire" msgstr "Prix unitaire"
#: apps/treasury/models.py:162 #: apps/treasury/models.py:163
msgid "product" msgid "product"
msgstr "produit" msgstr "produit"
#: apps/treasury/models.py:163 #: apps/treasury/models.py:164
msgid "products" msgid "products"
msgstr "produits" msgstr "produits"
#: apps/treasury/models.py:183 #: apps/treasury/models.py:184
msgid "remittance type" msgid "remittance type"
msgstr "type de remise" msgstr "type de remise"
#: apps/treasury/models.py:184 #: apps/treasury/models.py:185
msgid "remittance types" msgid "remittance types"
msgstr "types de remises" msgstr "types de remises"
#: apps/treasury/models.py:205 #: apps/treasury/models.py:206
msgid "Comment" msgid "Comment"
msgstr "Commentaire" msgstr "Commentaire"
#: apps/treasury/models.py:210 #: apps/treasury/models.py:211
msgid "Closed" msgid "Closed"
msgstr "Fermée" msgstr "Fermée"
#: apps/treasury/models.py:214 #: apps/treasury/models.py:215
msgid "remittance" msgid "remittance"
msgstr "remise" msgstr "remise"
#: apps/treasury/models.py:215 #: apps/treasury/models.py:216
msgid "remittances" msgid "remittances"
msgstr "remises" msgstr "remises"
#: apps/treasury/models.py:248 #: apps/treasury/models.py:249
msgid "Remittance #{:d}: {}" msgid "Remittance #{:d}: {}"
msgstr "Remise n°{:d} : {}" msgstr "Remise n°{:d} : {}"
#: apps/treasury/models.py:272 #: apps/treasury/models.py:273
msgid "special transaction proxy" msgid "special transaction proxy"
msgstr "proxy de transaction spéciale" msgstr "proxy de transaction spéciale"
#: apps/treasury/models.py:273 #: apps/treasury/models.py:274
msgid "special transaction proxies" msgid "special transaction proxies"
msgstr "proxys de transactions spéciales" msgstr "proxys de transactions spéciales"
#: apps/treasury/models.py:299 #: apps/treasury/models.py:300
msgid "credit transaction" msgid "credit transaction"
msgstr "transaction de crédit" 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 " "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." "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 #: apps/treasury/templates/treasury/sogecredit_detail.html:10
msgid "Credit from the Société générale" msgid "Credit from the Société générale"
msgstr "Crédit de la 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" msgid "Credits from the Société générale"
msgstr "Crédits de la 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 #, python-brace-format
msgid "Soge credit for {user}" msgid "Soge credit for {user}"
msgstr "Crédit de la société générale pour l'utilisateur {user}" msgstr "Crédit de la société générale pour l'utilisateur {user}"
@ -2586,7 +2574,7 @@ msgstr ""
"compte" "compte"
#: apps/wei/forms/registration.py:59 apps/wei/models.py:126 #: apps/wei/forms/registration.py:59 apps/wei/models.py:126
#: apps/wei/models.py:323 #: apps/wei/models.py:326
msgid "bus" msgid "bus"
msgstr "bus" msgstr "bus"
@ -2711,40 +2699,48 @@ msgstr "Non-binaire"
msgid "gender" msgid "gender"
msgstr "genre" 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" msgid "clothing cut"
msgstr "coupe de vêtement" 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" msgid "clothing size"
msgstr "taille de vêtement" 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 #: apps/wei/templates/wei/weimembership_form.html:67
msgid "health issues" msgid "health issues"
msgstr "problèmes de santé" 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" msgid "emergency contact name"
msgstr "nom du contact en cas d'urgence" 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" msgid "emergency contact phone"
msgstr "téléphone du contact en cas d'urgence" 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" msgid "first year"
msgstr "première année" 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." msgid "Tells if the user is new in the school."
msgstr "Indique si l'utilisateur est nouveau dans l'école." msgstr "Indique si l'utilisateur est nouveau dans l'école."
#: apps/wei/models.py:253 #: apps/wei/models.py:256
msgid "registration information" msgid "registration information"
msgstr "informations sur l'inscription" msgstr "informations sur l'inscription"
#: apps/wei/models.py:254 #: apps/wei/models.py:257
msgid "" msgid ""
"Information about the registration (buses for old members, survey for the " "Information about the registration (buses for old members, survey for the "
"new members), encoded in JSON" "new members), encoded in JSON"
@ -2752,27 +2748,27 @@ msgstr ""
"Informations sur l'inscription (bus pour les 2A+, questionnaire pour les " "Informations sur l'inscription (bus pour les 2A+, questionnaire pour les "
"1A), encodées en JSON" "1A), encodées en JSON"
#: apps/wei/models.py:312 #: apps/wei/models.py:315
msgid "WEI User" msgid "WEI User"
msgstr "Participant au WEI" msgstr "Participant au WEI"
#: apps/wei/models.py:313 #: apps/wei/models.py:316
msgid "WEI Users" msgid "WEI Users"
msgstr "Participants au WEI" msgstr "Participants au WEI"
#: apps/wei/models.py:333 #: apps/wei/models.py:336
msgid "team" msgid "team"
msgstr "équipe" msgstr "équipe"
#: apps/wei/models.py:343 #: apps/wei/models.py:346
msgid "WEI registration" msgid "WEI registration"
msgstr "Inscription au WEI" msgstr "Inscription au WEI"
#: apps/wei/models.py:347 #: apps/wei/models.py:350
msgid "WEI membership" msgid "WEI membership"
msgstr "Adhésion au WEI" msgstr "Adhésion au WEI"
#: apps/wei/models.py:348 #: apps/wei/models.py:351
msgid "WEI memberships" msgid "WEI memberships"
msgstr "Adhésions au WEI" msgstr "Adhésions au WEI"
@ -3566,3 +3562,18 @@ msgstr ""
"vous connecter. Vous devez vous rendre à la Kfet et payer les frais " "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 " "d'adhésion. Vous devez également valider votre adresse email en suivant le "
"lien que vous avez reçu." "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."