[WEI] Validate WEI memberships of first year members before the repartition algorithm to debit notes

Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>
This commit is contained in:
Yohann D'ANELLO 2021-09-10 22:09:47 +02:00
parent 49551e88f8
commit 3532846c87
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
5 changed files with 121 additions and 97 deletions

View File

@ -1,10 +1,10 @@
# Copyright (C) 2018-2021 by BDE ENS Paris-Saclay # Copyright (C) 2018-2021 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
from .registration import WEIForm, WEIRegistrationForm, WEIMembershipForm, BusForm, BusTeamForm from .registration import WEIForm, WEIRegistrationForm, WEIMembership1AForm, WEIMembershipForm, BusForm, BusTeamForm
from .surveys import WEISurvey, WEISurveyInformation, WEISurveyAlgorithm, CurrentSurvey from .surveys import WEISurvey, WEISurveyInformation, WEISurveyAlgorithm, CurrentSurvey
__all__ = [ __all__ = [
'WEIForm', 'WEIRegistrationForm', 'WEIMembershipForm', 'BusForm', 'BusTeamForm', 'WEIForm', 'WEIRegistrationForm', 'WEIMembesrhip1AForm', 'WEIMembershipForm', 'BusForm', 'BusTeamForm',
'WEISurvey', 'WEISurveyInformation', 'WEISurveyAlgorithm', 'CurrentSurvey', 'WEISurvey', 'WEISurveyInformation', 'WEISurveyAlgorithm', 'CurrentSurvey',
] ]

View File

@ -144,6 +144,20 @@ class WEIMembershipForm(forms.ModelForm):
} }
class WEIMembership1AForm(WEIMembershipForm):
"""
Used to confirm registrations of first year members without choosing a bus now.
"""
roles = None
def clean(self):
return super(forms.ModelForm, self).clean()
class Meta:
model = WEIMembership
fields = ('credit_type', 'credit_amount', 'last_name', 'first_name', 'bank',)
class BusForm(forms.ModelForm): class BusForm(forms.ModelForm):
class Meta: class Meta:
model = Bus model = Bus

View File

@ -102,9 +102,9 @@ class WEIRegistrationTable(tables.Table):
if record.fee > record.user.note.balance and not record.soge_credit: if record.fee > record.user.note.balance and not record.soge_credit:
btn_class = 'btn-secondary' btn_class = 'btn-secondary'
tooltip = _("The user does not have enough money.") tooltip = _("The user does not have enough money.")
elif record.first_year and 'selected_bus_pk' not in record.information: elif record.first_year:
btn_class = 'btn-info' btn_class = 'btn-info'
tooltip = _("The user is in first year, and the repartition algorithm didn't run.") tooltip = _("The user is in first year. You may validate the credit, the algorithm will run later.")
else: else:
btn_class = 'btn-success' btn_class = 'btn-success'
tooltip = _("The user has enough money, you can validate the registration.") tooltip = _("The user has enough money, you can validate the registration.")

View File

@ -32,7 +32,8 @@ from permission.views import ProtectQuerysetMixin, ProtectedCreateView
from .forms.registration import WEIChooseBusForm from .forms.registration import WEIChooseBusForm
from .models import WEIClub, WEIRegistration, WEIMembership, Bus, BusTeam, WEIRole from .models import WEIClub, WEIRegistration, WEIMembership, Bus, BusTeam, WEIRole
from .forms import WEIForm, WEIRegistrationForm, BusForm, BusTeamForm, WEIMembershipForm, CurrentSurvey from .forms import WEIForm, WEIRegistrationForm, BusForm, BusTeamForm, WEIMembership1AForm, \
WEIMembershipForm, CurrentSurvey
from .tables import WEITable, WEIRegistrationTable, BusTable, BusTeamTable, WEIMembershipTable from .tables import WEITable, WEIRegistrationTable, BusTable, BusTeamTable, WEIMembershipTable
@ -799,7 +800,6 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, ProtectedCreateView):
Validate WEI Registration Validate WEI Registration
""" """
model = WEIMembership model = WEIMembership
form_class = WEIMembershipForm
extra_context = {"title": _("Validate WEI registration")} extra_context = {"title": _("Validate WEI registration")}
def get_sample_object(self): def get_sample_object(self):
@ -855,6 +855,12 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, ProtectedCreateView):
return context return context
def get_form_class(self):
registration = WEIRegistration.objects.get(pk=self.kwargs["pk"])
if registration.first_year and 'sleected_bus_pk' not in registration.information:
return WEIMembership1AForm
return WEIMembershipForm
def get_form(self, form_class=None): def get_form(self, form_class=None):
form = super().get_form(form_class) form = super().get_form(form_class)
registration = WEIRegistration.objects.get(pk=self.kwargs["pk"]) registration = WEIRegistration.objects.get(pk=self.kwargs["pk"])
@ -870,25 +876,27 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, ProtectedCreateView):
form.fields["bank"].disabled = True form.fields["bank"].disabled = True
form.fields["bank"].initial = "Société générale" form.fields["bank"].initial = "Société générale"
form.fields["bus"].widget.attrs["api_url"] = "/api/wei/bus/?wei=" + str(registration.wei.pk) if 'bus' in form.fields:
if registration.first_year: # For 2A+ and hardcoded 1A
# Use the results of the survey to fill initial data form.fields["bus"].widget.attrs["api_url"] = "/api/wei/bus/?wei=" + str(registration.wei.pk)
# A first year has no other role than "1A" if registration.first_year:
del form.fields["roles"] # Use the results of the survey to fill initial data
survey = CurrentSurvey(registration) # A first year has no other role than "1A"
if survey.information.valid: del form.fields["roles"]
form.fields["bus"].initial = survey.information.get_selected_bus() survey = CurrentSurvey(registration)
else: if survey.information.valid:
# Use the choice of the member to fill initial data form.fields["bus"].initial = survey.information.get_selected_bus()
information = registration.information else:
if "preferred_bus_pk" in information and len(information["preferred_bus_pk"]) == 1: # Use the choice of the member to fill initial data
form["bus"].initial = Bus.objects.get(pk=information["preferred_bus_pk"][0]) information = registration.information
if "preferred_team_pk" in information and len(information["preferred_team_pk"]) == 1: if "preferred_bus_pk" in information and len(information["preferred_bus_pk"]) == 1:
form["team"].initial = BusTeam.objects.get(pk=information["preferred_team_pk"][0]) form["bus"].initial = Bus.objects.get(pk=information["preferred_bus_pk"][0])
if "preferred_roles_pk" in information: if "preferred_team_pk" in information and len(information["preferred_team_pk"]) == 1:
form["roles"].initial = WEIRole.objects.filter( form["team"].initial = BusTeam.objects.get(pk=information["preferred_team_pk"][0])
Q(pk__in=information["preferred_roles_pk"]) | Q(name="Adhérent WEI") if "preferred_roles_pk" in information:
).all() form["roles"].initial = WEIRole.objects.filter(
Q(pk__in=information["preferred_roles_pk"]) | Q(name="Adhérent WEI")
).all()
return form return form
@transaction.atomic @transaction.atomic

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: 2021-09-08 18:46+0200\n" "POT-Creation-Date: 2021-09-10 22:08+0200\n"
"PO-Revision-Date: 2020-11-16 20:02+0000\n" "PO-Revision-Date: 2020-11-16 20:02+0000\n"
"Last-Translator: Yohann D'ANELLO <ynerant@crans.org>\n" "Last-Translator: Yohann D'ANELLO <ynerant@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"
@ -111,7 +111,7 @@ msgid "type"
msgstr "type" msgstr "type"
#: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:305 #: apps/activity/models.py:89 apps/logs/models.py:22 apps/member/models.py:305
#: apps/note/models/notes.py:148 apps/treasury/models.py:286 #: apps/note/models/notes.py:148 apps/treasury/models.py:285
#: apps/wei/models.py:165 apps/wei/templates/wei/survey.html:15 #: apps/wei/models.py:165 apps/wei/templates/wei/survey.html:15
msgid "user" msgid "user"
msgstr "utilisateur" msgstr "utilisateur"
@ -251,7 +251,7 @@ msgstr "Entré le "
msgid "remove" msgid "remove"
msgstr "supprimer" msgstr "supprimer"
#: apps/activity/tables.py:80 apps/note/forms.py:68 apps/treasury/models.py:200 #: apps/activity/tables.py:80 apps/note/forms.py:68 apps/treasury/models.py:199
msgid "Type" msgid "Type"
msgstr "Type" msgstr "Type"
@ -1188,7 +1188,7 @@ msgstr "Modifier le club"
msgid "Add new member to the club" msgid "Add new member to the club"
msgstr "Ajouter un nouveau membre au club" msgstr "Ajouter un nouveau membre au club"
#: apps/member/views.py:642 apps/wei/views.py:932 #: apps/member/views.py:642 apps/wei/views.py:952
msgid "" msgid ""
"This user don't have enough money to join this club, and can't have a " "This user don't have enough money to join this club, and can't have a "
"negative balance." "negative balance."
@ -1494,8 +1494,8 @@ msgstr ""
"mode de paiement et un utilisateur ou un club" "mode de paiement et un utilisateur ou un club"
#: apps/note/models/transactions.py:355 apps/note/models/transactions.py:358 #: apps/note/models/transactions.py:355 apps/note/models/transactions.py:358
#: apps/note/models/transactions.py:361 apps/wei/views.py:937 #: apps/note/models/transactions.py:361 apps/wei/views.py:957
#: apps/wei/views.py:941 #: apps/wei/views.py:961
msgid "This field is required." msgid "This field is required."
msgstr "Ce champ est requis." msgstr "Ce champ est requis."
@ -1511,7 +1511,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:292
msgid "membership transactions" msgid "membership transactions"
msgstr "transactions d'adhésion" msgstr "transactions d'adhésion"
@ -1625,7 +1625,7 @@ msgid "Amount"
msgstr "Montant" msgstr "Montant"
#: apps/note/templates/note/transaction_form.html:128 #: apps/note/templates/note/transaction_form.html:128
#: apps/treasury/models.py:55 #: apps/treasury/models.py:54
msgid "Name" msgid "Name"
msgstr "Nom" msgstr "Nom"
@ -2102,7 +2102,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:93
#: 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."
@ -2115,7 +2115,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:267
#: 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
@ -2127,120 +2127,120 @@ msgstr "Remise"
msgid "No attached remittance" msgid "No attached remittance"
msgstr "Pas de remise associée" msgstr "Pas de remise associée"
#: apps/treasury/models.py:27 #: apps/treasury/models.py:26
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:40
msgid "BDE" msgid "BDE"
msgstr "BDE" msgstr "BDE"
#: apps/treasury/models.py:46 #: apps/treasury/models.py:45
msgid "Object" msgid "Object"
msgstr "Objet" msgstr "Objet"
#: apps/treasury/models.py:50 #: apps/treasury/models.py:49
msgid "Description" msgid "Description"
msgstr "Description" msgstr "Description"
#: apps/treasury/models.py:59 #: apps/treasury/models.py:58
msgid "Address" msgid "Address"
msgstr "Adresse" msgstr "Adresse"
#: apps/treasury/models.py:64 apps/treasury/models.py:194 #: apps/treasury/models.py:63 apps/treasury/models.py:193
msgid "Date" msgid "Date"
msgstr "Date" msgstr "Date"
#: apps/treasury/models.py:68 #: apps/treasury/models.py:67
msgid "Acquitted" msgid "Acquitted"
msgstr "Acquittée" msgstr "Acquittée"
#: apps/treasury/models.py:73 #: apps/treasury/models.py:72
msgid "Locked" msgid "Locked"
msgstr "Verrouillée" msgstr "Verrouillée"
#: apps/treasury/models.py:74 #: apps/treasury/models.py:73
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:79
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:113 apps/treasury/models.py:129
msgid "invoice" msgid "invoice"
msgstr "facture" msgstr "facture"
#: apps/treasury/models.py:115 #: apps/treasury/models.py:114
msgid "invoices" msgid "invoices"
msgstr "factures" msgstr "factures"
#: apps/treasury/models.py:118 #: apps/treasury/models.py:117
#, 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:134
msgid "Designation" msgid "Designation"
msgstr "Désignation" msgstr "Désignation"
#: apps/treasury/models.py:141 #: apps/treasury/models.py:140
msgid "Quantity" msgid "Quantity"
msgstr "Quantité" msgstr "Quantité"
#: apps/treasury/models.py:146 #: apps/treasury/models.py:145
msgid "Unit price" msgid "Unit price"
msgstr "Prix unitaire" msgstr "Prix unitaire"
#: apps/treasury/models.py:162 #: apps/treasury/models.py:161
msgid "product" msgid "product"
msgstr "produit" msgstr "produit"
#: apps/treasury/models.py:163 #: apps/treasury/models.py:162
msgid "products" msgid "products"
msgstr "produits" msgstr "produits"
#: apps/treasury/models.py:183 #: apps/treasury/models.py:182
msgid "remittance type" msgid "remittance type"
msgstr "type de remise" msgstr "type de remise"
#: apps/treasury/models.py:184 #: apps/treasury/models.py:183
msgid "remittance types" msgid "remittance types"
msgstr "types de remises" msgstr "types de remises"
#: apps/treasury/models.py:205 #: apps/treasury/models.py:204
msgid "Comment" msgid "Comment"
msgstr "Commentaire" msgstr "Commentaire"
#: apps/treasury/models.py:210 #: apps/treasury/models.py:209
msgid "Closed" msgid "Closed"
msgstr "Fermée" msgstr "Fermée"
#: apps/treasury/models.py:214 #: apps/treasury/models.py:213
msgid "remittance" msgid "remittance"
msgstr "remise" msgstr "remise"
#: apps/treasury/models.py:215 #: apps/treasury/models.py:214
msgid "remittances" msgid "remittances"
msgstr "remises" msgstr "remises"
#: apps/treasury/models.py:248 #: apps/treasury/models.py:247
msgid "Remittance #{:d}: {}" msgid "Remittance #{:d}: {}"
msgstr "Remise n°{:d} : {}" msgstr "Remise n°{:d} : {}"
#: apps/treasury/models.py:272 #: apps/treasury/models.py:271
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:272
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:298
msgid "credit transaction" msgid "credit transaction"
msgstr "transaction de crédit" msgstr "transaction de crédit"
#: apps/treasury/models.py:418 #: apps/treasury/models.py:419
msgid "" msgid ""
"This user doesn't have enough money to pay the memberships with its note. " "This user doesn't have enough money to pay the memberships with its note. "
"Please ask her/him to credit the note before invalidating this credit." "Please ask her/him to credit the note before invalidating this credit."
@ -2248,16 +2248,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:438 #: apps/treasury/models.py:439
#: 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:439 #: apps/treasury/models.py:440
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:442 #: apps/treasury/models.py:443
#, 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}"
@ -2710,10 +2710,12 @@ msgid "The user does not have enough money."
msgstr "L'utilisateur n'a pas assez d'argent." msgstr "L'utilisateur n'a pas assez d'argent."
#: apps/wei/tables.py:107 #: apps/wei/tables.py:107
msgid "The user is in first year, and the repartition algorithm didn't run." msgid ""
"The user is in first year. You may validate the credit, the algorithm will "
"run later."
msgstr "" msgstr ""
"L'utilisateur est en première année, et l'algorithme de répartition n'a pas " "L'utilisateur est en première année, vous pouvez valider le crédit, "
"tourné." "l'algorithme tournera plus tard."
#: apps/wei/tables.py:110 #: apps/wei/tables.py:110
msgid "The user has enough money, you can validate the registration." msgid "The user has enough money, you can validate the registration."
@ -2752,11 +2754,11 @@ msgstr "Prix du WEI (étudiants)"
msgid "WEI list" msgid "WEI list"
msgstr "Liste des WEI" msgstr "Liste des WEI"
#: apps/wei/templates/wei/base.html:81 apps/wei/views.py:517 #: apps/wei/templates/wei/base.html:81 apps/wei/views.py:523
msgid "Register 1A" msgid "Register 1A"
msgstr "Inscrire un 1A" msgstr "Inscrire un 1A"
#: apps/wei/templates/wei/base.html:85 apps/wei/views.py:592 #: apps/wei/templates/wei/base.html:85 apps/wei/views.py:603
msgid "Register 2A+" msgid "Register 2A+"
msgstr "Inscrire un 2A+" msgstr "Inscrire un 2A+"
@ -2785,8 +2787,8 @@ msgstr "Télécharger au format PDF"
#: apps/wei/templates/wei/survey.html:11 #: apps/wei/templates/wei/survey.html:11
#: apps/wei/templates/wei/survey_closed.html:11 #: apps/wei/templates/wei/survey_closed.html:11
#: apps/wei/templates/wei/survey_end.html:11 apps/wei/views.py:988 #: apps/wei/templates/wei/survey_end.html:11 apps/wei/views.py:1007
#: apps/wei/views.py:1043 apps/wei/views.py:1053 #: apps/wei/views.py:1062 apps/wei/views.py:1072
msgid "Survey WEI" msgid "Survey WEI"
msgstr "Questionnaire WEI" msgstr "Questionnaire WEI"
@ -2827,7 +2829,7 @@ msgstr "Membres du WEI"
msgid "Unvalidated registrations" msgid "Unvalidated registrations"
msgstr "Inscriptions non validées" msgstr "Inscriptions non validées"
#: apps/wei/templates/wei/weiclub_list.html:14 apps/wei/views.py:77 #: apps/wei/templates/wei/weiclub_list.html:14 apps/wei/views.py:78
msgid "Create WEI" msgid "Create WEI"
msgstr "Créer un WEI" msgstr "Créer un WEI"
@ -2968,67 +2970,67 @@ msgstr "Il n'y a pas de pré-inscription en attente avec cette entrée."
msgid "View validated memberships..." msgid "View validated memberships..."
msgstr "Voir les adhésions validées ..." msgstr "Voir les adhésions validées ..."
#: apps/wei/views.py:56 #: apps/wei/views.py:57
msgid "Search WEI" msgid "Search WEI"
msgstr "Chercher un WEI" msgstr "Chercher un WEI"
#: apps/wei/views.py:107 #: apps/wei/views.py:108
msgid "WEI Detail" msgid "WEI Detail"
msgstr "Détails du WEI" msgstr "Détails du WEI"
#: apps/wei/views.py:202 #: apps/wei/views.py:203
msgid "View members of the WEI" msgid "View members of the WEI"
msgstr "Voir les membres du WEI" msgstr "Voir les membres du WEI"
#: apps/wei/views.py:230 #: apps/wei/views.py:231
msgid "Find WEI Membership" msgid "Find WEI Membership"
msgstr "Trouver une adhésion au WEI" msgstr "Trouver une adhésion au WEI"
#: apps/wei/views.py:240 #: apps/wei/views.py:241
msgid "View registrations to the WEI" msgid "View registrations to the WEI"
msgstr "Voir les inscriptions au WEI" msgstr "Voir les inscriptions au WEI"
#: apps/wei/views.py:264 #: apps/wei/views.py:265
msgid "Find WEI Registration" msgid "Find WEI Registration"
msgstr "Trouver une inscription au WEI" msgstr "Trouver une inscription au WEI"
#: apps/wei/views.py:275 #: apps/wei/views.py:276
msgid "Update the WEI" msgid "Update the WEI"
msgstr "Modifier le WEI" msgstr "Modifier le WEI"
#: apps/wei/views.py:296 #: apps/wei/views.py:297
msgid "Create new bus" msgid "Create new bus"
msgstr "Ajouter un nouveau bus" msgstr "Ajouter un nouveau bus"
#: apps/wei/views.py:334 #: apps/wei/views.py:335
msgid "Update bus" msgid "Update bus"
msgstr "Modifier le bus" msgstr "Modifier le bus"
#: apps/wei/views.py:366 #: apps/wei/views.py:367
msgid "Manage bus" msgid "Manage bus"
msgstr "Gérer le bus" msgstr "Gérer le bus"
#: apps/wei/views.py:393 #: apps/wei/views.py:394
msgid "Create new team" msgid "Create new team"
msgstr "Créer une nouvelle équipe" msgstr "Créer une nouvelle équipe"
#: apps/wei/views.py:433 #: apps/wei/views.py:434
msgid "Update team" msgid "Update team"
msgstr "Modifier l'équipe" msgstr "Modifier l'équipe"
#: apps/wei/views.py:464 #: apps/wei/views.py:465
msgid "Manage WEI team" msgid "Manage WEI team"
msgstr "Gérer l'équipe WEI" msgstr "Gérer l'équipe WEI"
#: apps/wei/views.py:486 #: apps/wei/views.py:487
msgid "Register first year student to the WEI" msgid "Register first year student to the WEI"
msgstr "Inscrire un 1A au WEI" msgstr "Inscrire un 1A au WEI"
#: apps/wei/views.py:539 apps/wei/views.py:627 #: apps/wei/views.py:545 apps/wei/views.py:638
msgid "This user is already registered to this WEI." msgid "This user is already registered to this WEI."
msgstr "Cette personne est déjà inscrite au WEI." msgstr "Cette personne est déjà inscrite au WEI."
#: apps/wei/views.py:544 #: apps/wei/views.py:550
msgid "" msgid ""
"This user can't be in her/his first year since he/she has already " "This user can't be in her/his first year since he/she has already "
"participated to a WEI." "participated to a WEI."
@ -3036,27 +3038,27 @@ msgstr ""
"Cet utilisateur ne peut pas être en première année puisqu'il a déjà " "Cet utilisateur ne peut pas être en première année puisqu'il a déjà "
"participé à un WEI." "participé à un WEI."
#: apps/wei/views.py:561 #: apps/wei/views.py:567
msgid "Register old student to the WEI" msgid "Register old student to the WEI"
msgstr "Inscrire un 2A+ au WEI" msgstr "Inscrire un 2A+ au WEI"
#: apps/wei/views.py:611 apps/wei/views.py:700 #: apps/wei/views.py:622 apps/wei/views.py:713
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."
msgstr "Vous avez déjà ouvert un compte auprès de la société générale." msgstr "Vous avez déjà ouvert un compte auprès de la société générale."
#: apps/wei/views.py:657 #: apps/wei/views.py:668
msgid "Update WEI Registration" msgid "Update WEI Registration"
msgstr "Modifier l'inscription WEI" msgstr "Modifier l'inscription WEI"
#: apps/wei/views.py:761 #: apps/wei/views.py:774
msgid "Delete WEI registration" msgid "Delete WEI registration"
msgstr "Supprimer l'inscription WEI" msgstr "Supprimer l'inscription WEI"
#: apps/wei/views.py:772 #: apps/wei/views.py:785
msgid "You don't have the right to delete this WEI registration." msgid "You don't have the right to delete this WEI registration."
msgstr "Vous n'avez pas la permission de supprimer cette inscription au WEI." msgstr "Vous n'avez pas la permission de supprimer cette inscription au WEI."
#: apps/wei/views.py:791 #: apps/wei/views.py:803
msgid "Validate WEI registration" msgid "Validate WEI registration"
msgstr "Valider l'inscription WEI" msgstr "Valider l'inscription WEI"