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
class CustomPagination(PageNumberPagination):
page_size_query_param = 'page_size'

View File

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

View File

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

View File

@ -753,6 +753,10 @@ class ClubAddMemberView(ProtectQuerysetMixin, ProtectedCreateView):
club = old_membership.club
user = old_membership.user
# Update club membership date
if PermissionBackend.check_perm(self.request, "member.change_club_membership_start", club):
club.update_membership_dates()
form.instance.club = club
# Get form data

View File

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

View File

@ -5,6 +5,7 @@ from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.utils.translation import gettext_lazy as _
from member.models import Club
from note.models import NoteSpecial, Alias
from note_kfet.inputs import AmountInput
@ -44,14 +45,14 @@ class SignUpForm(UserCreationForm):
fields = ('first_name', 'last_name', 'username', 'email', )
class DeclareSogeAccountOpenedForm(forms.Form):
soge_account = forms.BooleanField(
label=_("I declare that I opened or I will open soon a bank account in the Société générale with the BDE "
"partnership."),
help_text=_("Warning: this engages you to open your bank account. If you finally decides to don't open your "
"account, you will have to pay the BDE membership."),
required=False,
)
# class DeclareSogeAccountOpenedForm(forms.Form):
# soge_account = forms.BooleanField(
# label=_("I declare that I opened or I will open soon a bank account in the Société générale with the BDE "
# "partnership."),
# help_text=_("Warning: this engages you to open your bank account. If you finally decides to don't open your "
# "account, you will have to pay the BDE membership."),
# required=False,
# )
class WEISignupForm(forms.Form):
@ -67,11 +68,11 @@ class ValidationForm(forms.Form):
"""
Validate the inscription of the new users and pay memberships.
"""
soge = forms.BooleanField(
label=_("Inscription paid by Société Générale"),
required=False,
help_text=_("Check this case if the Société Générale paid the inscription."),
)
# soge = forms.BooleanField(
# label=_("Inscription paid by Société Générale"),
# required=False,
# help_text=_("Check this case if the Société Générale paid the inscription."),
# )
credit_type = forms.ModelChoiceField(
queryset=NoteSpecial.objects,
@ -114,3 +115,12 @@ class ValidationForm(forms.Form):
required=False,
initial=True,
)
# If the bda exists
if Club.objects.filter(name__iexact="bda").exists():
# The user can join the bda club at the inscription
join_bda = forms.BooleanField(
label=_("Join BDA Club"),
required=False,
initial=False,
)

View File

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

View File

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

View File

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

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

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

View File

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

View File

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

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

View File

@ -56,7 +56,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
<dd class="col-xl-6">{{ registration.get_gender_display }}</dd>
<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>
<dd class="col-xl-6">{{ registration.clothing_size }}</dd>

View File

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

View File

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

View File

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

View File

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