Delete registrations

This commit is contained in:
Yohann D'ANELLO 2020-04-21 01:06:54 +02:00
parent 1c7d4fbbec
commit 73878d03ab
9 changed files with 270 additions and 108 deletions

View File

@ -60,7 +60,7 @@ class WEIRegistrationTable(tables.Table):
) )
delete = tables.LinkColumn( delete = tables.LinkColumn(
'wei:wei_detail', 'wei:wei_delete_registration',
args=[A('pk')], args=[A('pk')],
verbose_name=_("delete"), verbose_name=_("delete"),
text=_("Delete"), text=_("Delete"),

View File

@ -5,8 +5,8 @@ from django.urls import path
from .views import CurrentWEIDetailView, WEIListView, WEICreateView, WEIDetailView, WEIUpdateView,\ from .views import CurrentWEIDetailView, WEIListView, WEICreateView, WEIDetailView, WEIUpdateView,\
BusCreateView, BusManageView, BusUpdateView, BusTeamCreateView, BusTeamManageView, BusTeamUpdateView,\ BusCreateView, BusManageView, BusUpdateView, BusTeamCreateView, BusTeamManageView, BusTeamUpdateView,\
WEIRegister1AView, WEIRegister2AView, WEIUpdateRegistrationView, WEIValidateRegistrationView,\ WEIRegister1AView, WEIRegister2AView, WEIUpdateRegistrationView, WEIDeleteRegistrationView,\
WEISurveyView, WEISurveyEndView, WEIClosedView WEIValidateRegistrationView, WEISurveyView, WEISurveyEndView, WEIClosedView
app_name = 'wei' app_name = 'wei'
@ -27,6 +27,7 @@ urlpatterns = [
path('register/<int:wei_pk>/1A/myself/', WEIRegister1AView.as_view(), name="wei_register_1A_myself"), path('register/<int:wei_pk>/1A/myself/', WEIRegister1AView.as_view(), name="wei_register_1A_myself"),
path('register/<int:wei_pk>/2A+/myself/', WEIRegister2AView.as_view(), name="wei_register_2A_myself"), path('register/<int:wei_pk>/2A+/myself/', WEIRegister2AView.as_view(), name="wei_register_2A_myself"),
path('edit-registration/<int:pk>/', WEIUpdateRegistrationView.as_view(), name="wei_update_registration"), path('edit-registration/<int:pk>/', WEIUpdateRegistrationView.as_view(), name="wei_update_registration"),
path('delete-registration/<int:pk>/', WEIDeleteRegistrationView.as_view(), name="wei_delete_registration"),
path('validate/<int:pk>/', WEIValidateRegistrationView.as_view(), name="validate_registration"), path('validate/<int:pk>/', WEIValidateRegistrationView.as_view(), name="validate_registration"),
path('survey/<int:pk>/', WEISurveyView.as_view(), name="wei_survey"), path('survey/<int:pk>/', WEISurveyView.as_view(), name="wei_survey"),
path('survey/<int:pk>/end/', WEISurveyEndView.as_view(), name="wei_survey_end"), path('survey/<int:pk>/end/', WEISurveyEndView.as_view(), name="wei_survey_end"),

View File

@ -11,7 +11,7 @@ from django.shortcuts import redirect
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.views.generic import DetailView, UpdateView, CreateView, RedirectView, TemplateView from django.views.generic import DetailView, UpdateView, CreateView, RedirectView, TemplateView
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.views.generic.edit import BaseFormView from django.views.generic.edit import BaseFormView, DeleteView
from django_tables2 import SingleTableView from django_tables2 import SingleTableView
from member.models import Membership, Club from member.models import Membership, Club
from note.models import Transaction, NoteClub from note.models import Transaction, NoteClub
@ -350,6 +350,19 @@ class WEIRegister1AView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView):
def form_valid(self, form): def form_valid(self, form):
form.instance.wei = WEIClub.objects.get(pk=self.kwargs["wei_pk"]) form.instance.wei = WEIClub.objects.get(pk=self.kwargs["wei_pk"])
form.instance.first_year = True form.instance.first_year = True
if not form.instance.pk:
# Check if the user is not already registered to the WEI
if WEIRegistration.objects.filter(wei=form.instance.wei, user=form.instance.user).exists():
form.add_error('user', _("This user is already registered to this WEI."))
return self.form_invalid(form)
# Check if the user can be in her/his first year (yeah, no cheat)
if WEIRegistration.objects.filter(user=form.instance.user).exists():
form.add_error('user', _("This user can't be in her/his first year since he/she has already"
" participed to a WEI."))
return self.form_invalid(form)
return super().form_valid(form) return super().form_valid(form)
def get_success_url(self): def get_success_url(self):
@ -406,9 +419,15 @@ class WEIRegister2AView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView):
form.instance.wei = WEIClub.objects.get(pk=self.kwargs["wei_pk"]) form.instance.wei = WEIClub.objects.get(pk=self.kwargs["wei_pk"])
form.instance.first_year = False form.instance.first_year = False
if not form.instance.pk:
# Check if the user is not already registered to the WEI
if WEIRegistration.objects.filter(wei=form.instance.wei, user=form.instance.user).exists():
form.add_error('user', _("This user is already registered to this WEI."))
return self.form_invalid(form)
choose_bus_form = WEIChooseBusForm(self.request.POST) choose_bus_form = WEIChooseBusForm(self.request.POST)
if not choose_bus_form.is_valid(): if not choose_bus_form.is_valid():
return self.form_invalid(choose_bus_form) return self.form_invalid(form)
information = form.instance.information information = form.instance.information
information["preferred_bus_pk"] = [bus.pk for bus in choose_bus_form.cleaned_data["bus"]] information["preferred_bus_pk"] = [bus.pk for bus in choose_bus_form.cleaned_data["bus"]]
@ -422,11 +441,6 @@ class WEIRegister2AView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView):
return super().form_valid(form) return super().form_valid(form)
def form_invalid(self, form):
print(form.data)
print(form.cleaned_data)
return super().form_invalid(form)
def get_success_url(self): def get_success_url(self):
self.object.refresh_from_db() self.object.refresh_from_db()
return reverse_lazy("wei:wei_survey", kwargs={"pk": self.object.pk}) return reverse_lazy("wei:wei_survey", kwargs={"pk": self.object.pk})
@ -490,14 +504,14 @@ class WEIUpdateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Update
if form.instance.is_validated: if form.instance.is_validated:
membership_form = WEIMembershipForm(self.request.POST) membership_form = WEIMembershipForm(self.request.POST)
if not membership_form.is_valid(): if not membership_form.is_valid():
return self.form_invalid(membership_form) return self.form_invalid(form)
membership_form.save() membership_form.save()
# If it is not validated and if this is an old member, then we update the choices # If it is not validated and if this is an old member, then we update the choices
elif not form.instance.first_year and PermissionBackend.check_perm( elif not form.instance.first_year and PermissionBackend.check_perm(
self.request.user, "wei.change_weiregistration_information_json", self.object): self.request.user, "wei.change_weiregistration_information_json", self.object):
choose_bus_form = WEIChooseBusForm(self.request.POST) choose_bus_form = WEIChooseBusForm(self.request.POST)
if not choose_bus_form.is_valid(): if not choose_bus_form.is_valid():
return self.form_invalid(choose_bus_form) return self.form_invalid(form)
information = form.instance.information information = form.instance.information
information["preferred_bus_pk"] = [bus.pk for bus in choose_bus_form.cleaned_data["bus"]] information["preferred_bus_pk"] = [bus.pk for bus in choose_bus_form.cleaned_data["bus"]]
information["preferred_bus_name"] = [bus.name for bus in choose_bus_form.cleaned_data["bus"]] information["preferred_bus_name"] = [bus.name for bus in choose_bus_form.cleaned_data["bus"]]
@ -519,6 +533,26 @@ class WEIUpdateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Update
return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.wei.pk}) return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.wei.pk})
class WEIDeleteRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, DeleteView):
model = WEIRegistration
def dispatch(self, request, *args, **kwargs):
wei = self.get_object().wei
today = date.today()
# We can't delete a registration of a past WEI
if today > wei.membership_end:
return redirect(reverse_lazy('wei:wei_closed', args=(wei.pk,)))
return super().dispatch(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["club"] = self.object.wei
return context
def get_success_url(self):
return reverse_lazy('wei:wei_detail', args=(self.object.wei.pk,))
class WEIValidateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): class WEIValidateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView):
""" """
Validate WEI Registration Validate WEI Registration

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-20 22:34+0200\n" "POT-Creation-Date: 2020-04-21 01:01+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -439,7 +439,7 @@ msgstr ""
msgid "fee" msgid "fee"
msgstr "" msgstr ""
#: apps/member/models.py:267 apps/member/views.py:500 apps/wei/views.py:592 #: apps/member/models.py:267 apps/member/views.py:500 apps/wei/views.py:645
msgid "User is not a member of the parent club" msgid "User is not a member of the parent club"
msgstr "" msgstr ""
@ -470,7 +470,7 @@ msgstr ""
#: apps/member/views.py:65 templates/member/profile_info.html:45 #: apps/member/views.py:65 templates/member/profile_info.html:45
#: templates/registration/future_profile_detail.html:55 #: templates/registration/future_profile_detail.html:55
#: templates/wei/weimembership_form.html:105 #: templates/wei/weimembership_form.html:116
msgid "Update Profile" msgid "Update Profile"
msgstr "" msgstr ""
@ -482,7 +482,7 @@ msgstr ""
msgid "Search user" msgid "Search user"
msgstr "" msgstr ""
#: apps/member/views.py:495 apps/wei/views.py:583 #: apps/member/views.py:495 apps/wei/views.py:636
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."
@ -727,6 +727,7 @@ msgid "No reason specified"
msgstr "" msgstr ""
#: apps/note/tables.py:122 apps/note/tables.py:151 apps/wei/tables.py:66 #: apps/note/tables.py:122 apps/note/tables.py:151 apps/wei/tables.py:66
#: templates/wei/weiregistration_confirm_delete.html:32
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
@ -1003,23 +1004,37 @@ msgstr ""
msgid "WEI" msgid "WEI"
msgstr "" msgstr ""
#: apps/wei/forms/registration.py:47 #: apps/wei/forms/registration.py:47 apps/wei/models.py:108
#: apps/wei/models.py:269
msgid "bus"
msgstr ""
#: apps/wei/forms/registration.py:48
msgid "" msgid ""
"This choice is not definitive. The WEI organizers are free to attribute for " "This choice is not definitive. The WEI organizers are free to attribute for "
"you a bus and a team, in particular if you are a free eletron." "you a bus and a team, in particular if you are a free eletron."
msgstr "" msgstr ""
#: apps/wei/forms/registration.py:54 #: apps/wei/forms/registration.py:54
msgid "Team"
msgstr ""
#: apps/wei/forms/registration.py:56
msgid "" msgid ""
"Leave this field empty if you won't be in a team (staff, bus chief, free " "Leave this field empty if you won't be in a team (staff, bus chief, free "
"electron)" "electron)"
msgstr "" msgstr ""
#: apps/wei/forms/registration.py:59 #: apps/wei/forms/registration.py:61 apps/wei/forms/registration.py:67
#: apps/wei/models.py:142
msgid "WEI Roles"
msgstr ""
#: apps/wei/forms/registration.py:62
msgid "Select the roles that you are interested in." msgid "Select the roles that you are interested in."
msgstr "" msgstr ""
#: apps/wei/forms/registration.py:65 apps/wei/forms/registration.py:75 #: apps/wei/forms/registration.py:72
msgid "This team doesn't belong to the given bus." msgid "This team doesn't belong to the given bus."
msgstr "" msgstr ""
@ -1055,10 +1070,6 @@ msgstr ""
msgid "Buses" msgid "Buses"
msgstr "" msgstr ""
#: apps/wei/models.py:108 apps/wei/models.py:269
msgid "bus"
msgstr ""
#: apps/wei/models.py:116 #: apps/wei/models.py:116
msgid "color" msgid "color"
msgstr "" msgstr ""
@ -1079,10 +1090,6 @@ msgstr ""
msgid "WEI Role" msgid "WEI Role"
msgstr "" msgstr ""
#: apps/wei/models.py:142
msgid "WEI Roles"
msgstr ""
#: apps/wei/models.py:166 #: apps/wei/models.py:166
msgid "Credit from Société générale" msgid "Credit from Société générale"
msgstr "" msgstr ""
@ -1196,19 +1203,29 @@ msgstr ""
msgid "Register 1A" msgid "Register 1A"
msgstr "" msgstr ""
#: apps/wei/views.py:377 templates/wei/weiclub_info.html:63 #: apps/wei/views.py:357 apps/wei/views.py:425
msgid "This user is already registered to this WEI."
msgstr ""
#: apps/wei/views.py:362
msgid ""
"This user can't be in her/his first year since he/she has already participed "
"to a WEI."
msgstr ""
#: apps/wei/views.py:390 templates/wei/weiclub_info.html:63
msgid "Register 2A+" msgid "Register 2A+"
msgstr "" msgstr ""
#: apps/wei/views.py:394 #: apps/wei/views.py:408 apps/wei/views.py:491
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 "" msgstr ""
#: apps/wei/views.py:587 #: apps/wei/views.py:640
msgid "This user didn't give her/his caution check." msgid "This user didn't give her/his caution check."
msgstr "" msgstr ""
#: apps/wei/views.py:655 apps/wei/views.py:675 apps/wei/views.py:685 #: apps/wei/views.py:708 apps/wei/views.py:728 apps/wei/views.py:738
#: templates/wei/survey.html:12 templates/wei/survey_closed.html:12 #: templates/wei/survey.html:12 templates/wei/survey_closed.html:12
#: templates/wei/survey_end.html:12 #: templates/wei/survey_end.html:12
msgid "Survey WEI" msgid "Survey WEI"
@ -1581,6 +1598,7 @@ msgid ""
msgstr "" msgstr ""
#: templates/registration/future_profile_detail.html:56 #: templates/registration/future_profile_detail.html:56
#: templates/wei/weiregistration_confirm_delete.html:12
msgid "Delete registration" msgid "Delete registration"
msgstr "" msgstr ""
@ -1589,8 +1607,8 @@ msgid "Validate account"
msgstr "" msgstr ""
#: templates/registration/future_profile_detail.html:71 #: templates/registration/future_profile_detail.html:71
#: templates/wei/weimembership_form.html:115 #: templates/wei/weimembership_form.html:126
#: templates/wei/weimembership_form.html:173 #: templates/wei/weimembership_form.html:184
msgid "Validate registration" msgid "Validate registration"
msgstr "" msgstr ""
@ -1822,7 +1840,7 @@ msgstr ""
msgid "The inscription for this WEI are now closed." msgid "The inscription for this WEI are now closed."
msgstr "" msgstr ""
#: templates/wei/survey_closed.html:22 #: templates/wei/survey_closed.html:20
msgid "Return to WEI detail" msgid "Return to WEI detail"
msgstr "" msgstr ""
@ -1902,31 +1920,44 @@ msgstr ""
msgid "caution check given" msgid "caution check given"
msgstr "" msgstr ""
#: templates/wei/weimembership_form.html:103
msgid "preferred bus"
msgstr ""
#: templates/wei/weimembership_form.html:106 #: templates/wei/weimembership_form.html:106
msgid "preferred team"
msgstr ""
#: templates/wei/weimembership_form.html:109
msgid "preferred roles"
msgstr ""
#: templates/wei/weimembership_form.html:117
#: templates/wei/weiregistration_confirm_delete.html:31
msgid "Update registration" msgid "Update registration"
msgstr "" msgstr ""
#: templates/wei/weimembership_form.html:119 #: templates/wei/weimembership_form.html:130
msgid "The registration is already validated and can't be unvalidated." msgid "The registration is already validated and can't be unvalidated."
msgstr "" msgstr ""
#: templates/wei/weimembership_form.html:120 #: templates/wei/weimembership_form.html:131
msgid "The user joined the bus" msgid "The user joined the bus"
msgstr "" msgstr ""
#: templates/wei/weimembership_form.html:121 #: templates/wei/weimembership_form.html:132
msgid "in the team" msgid "in the team"
msgstr "" msgstr ""
#: templates/wei/weimembership_form.html:122 #: templates/wei/weimembership_form.html:133
msgid "in no team (staff)" msgid "in no team (staff)"
msgstr "" msgstr ""
#: templates/wei/weimembership_form.html:122 #: templates/wei/weimembership_form.html:133
msgid "with the following roles:" msgid "with the following roles:"
msgstr "" msgstr ""
#: templates/wei/weimembership_form.html:127 #: templates/wei/weimembership_form.html:138
msgid "" msgid ""
"\n" "\n"
" The WEI will be paid by Société générale. The " " The WEI will be paid by Société générale. The "
@ -1938,7 +1969,7 @@ msgid ""
" " " "
msgstr "" msgstr ""
#: templates/wei/weimembership_form.html:137 #: templates/wei/weimembership_form.html:148
#, python-format #, python-format
msgid "" msgid ""
"\n" "\n"
@ -1947,15 +1978,15 @@ msgid ""
" " " "
msgstr "" msgstr ""
#: templates/wei/weimembership_form.html:144 #: templates/wei/weimembership_form.html:155
msgid "The note has enough money, the registration is possible." msgid "The note has enough money, the registration is possible."
msgstr "" msgstr ""
#: templates/wei/weimembership_form.html:151 #: templates/wei/weimembership_form.html:162
msgid "The user didn't give her/his caution check." msgid "The user didn't give her/his caution check."
msgstr "" msgstr ""
#: templates/wei/weimembership_form.html:159 #: templates/wei/weimembership_form.html:170
#, python-format #, python-format
msgid "" msgid ""
"\n" "\n"
@ -1968,3 +1999,14 @@ msgid ""
" the registration of the WEI.\n" " the registration of the WEI.\n"
" " " "
msgstr "" msgstr ""
#: templates/wei/weiregistration_confirm_delete.html:17
msgid "This registration is already validated and can't be deleted."
msgstr ""
#: templates/wei/weiregistration_confirm_delete.html:24
#, python-format
msgid ""
"Are you sure you want to delete the registration of %(user)s for the WEI "
"%(wei_name)s? This action can't be undoed."
msgstr ""

View File

@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-20 22:34+0200\n" "POT-Creation-Date: 2020-04-21 01:01+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -439,7 +439,7 @@ msgstr "l'adhésion finit le"
msgid "fee" msgid "fee"
msgstr "cotisation" msgstr "cotisation"
#: apps/member/models.py:267 apps/member/views.py:500 apps/wei/views.py:592 #: apps/member/models.py:267 apps/member/views.py:500 apps/wei/views.py:645
msgid "User is not a member of the parent club" msgid "User is not a member of the parent club"
msgstr "L'utilisateur n'est pas membre du club parent" msgstr "L'utilisateur n'est pas membre du club parent"
@ -470,7 +470,7 @@ msgstr "Cette adresse doit être valide."
#: apps/member/views.py:65 templates/member/profile_info.html:45 #: apps/member/views.py:65 templates/member/profile_info.html:45
#: templates/registration/future_profile_detail.html:55 #: templates/registration/future_profile_detail.html:55
#: templates/wei/weimembership_form.html:105 #: templates/wei/weimembership_form.html:116
msgid "Update Profile" msgid "Update Profile"
msgstr "Modifier le profil" msgstr "Modifier le profil"
@ -482,7 +482,7 @@ msgstr "Un alias avec un nom similaire existe déjà."
msgid "Search user" msgid "Search user"
msgstr "Chercher un utilisateur" msgstr "Chercher un utilisateur"
#: apps/member/views.py:495 apps/wei/views.py:583 #: apps/member/views.py:495 apps/wei/views.py:636
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."
@ -730,6 +730,7 @@ msgid "No reason specified"
msgstr "Pas de motif spécifié" msgstr "Pas de motif spécifié"
#: apps/note/tables.py:122 apps/note/tables.py:151 apps/wei/tables.py:66 #: apps/note/tables.py:122 apps/note/tables.py:151 apps/wei/tables.py:66
#: templates/wei/weiregistration_confirm_delete.html:32
msgid "Delete" msgid "Delete"
msgstr "Supprimer" msgstr "Supprimer"
@ -1011,27 +1012,42 @@ msgstr "supprimer"
msgid "WEI" msgid "WEI"
msgstr "WEI" msgstr "WEI"
#: apps/wei/forms/registration.py:47 #: apps/wei/forms/registration.py:47 apps/wei/models.py:108
#: apps/wei/models.py:269
msgid "bus"
msgstr "Bus"
#: apps/wei/forms/registration.py:48
msgid "" msgid ""
"This choice is not definitive. The WEI organizers are free to attribute for " "This choice is not definitive. The WEI organizers are free to attribute for "
"you a bus and a team, in particular if you are a free eletron." "you a bus and a team, in particular if you are a free eletron."
msgstr "" msgstr ""
"Ce choix n'est pas définitif. Les organisateurs du WEI sont libres de vous " "Ce choix n'est pas définitif. Les organisateurs du WEI sont libres de vous "
"attribuer un bus et une équipe, en particulier si vous êtes un électron libre." "attribuer un bus et une équipe, en particulier si vous êtes un électron "
"libre."
#: apps/wei/forms/registration.py:54 #: apps/wei/forms/registration.py:54
msgid "Team"
msgstr "Équipe"
#: apps/wei/forms/registration.py:56
msgid "" msgid ""
"Leave this field empty if you won't be in a team (staff, bus chief, free " "Leave this field empty if you won't be in a team (staff, bus chief, free "
"electron)" "electron)"
msgstr "" msgstr ""
"Laissez ce champ vide si vous ne serez pas dans une équipe (staff, chef " "Laissez ce champ vide si vous ne serez pas dans une équipe (staff, chef de "
"de bus ou électron libre)" "bus ou électron libre)"
#: apps/wei/forms/registration.py:59 #: apps/wei/forms/registration.py:61 apps/wei/forms/registration.py:67
#: apps/wei/models.py:142
msgid "WEI Roles"
msgstr "Rôles au WEI"
#: apps/wei/forms/registration.py:62
msgid "Select the roles that you are interested in." msgid "Select the roles that you are interested in."
msgstr "Sélectionnez les rôles qui vous intéressent." msgstr "Sélectionnez les rôles qui vous intéressent."
#: apps/wei/forms/registration.py:65 apps/wei/forms/registration.py:75 #: apps/wei/forms/registration.py:72
msgid "This team doesn't belong to the given bus." msgid "This team doesn't belong to the given bus."
msgstr "Cette équipe n'appartient pas à ce bus." msgstr "Cette équipe n'appartient pas à ce bus."
@ -1057,7 +1073,8 @@ msgstr "informations sur le questionnaire"
#: apps/wei/models.py:73 #: apps/wei/models.py:73
msgid "Information about the survey for new members, encoded in JSON" msgid "Information about the survey for new members, encoded in JSON"
msgstr "Informations sur le sondage pour les nouveaux membres, encodées en JSON" msgstr ""
"Informations sur le sondage pour les nouveaux membres, encodées en JSON"
#: apps/wei/models.py:95 #: apps/wei/models.py:95
msgid "Bus" msgid "Bus"
@ -1067,10 +1084,6 @@ msgstr "Bus"
msgid "Buses" msgid "Buses"
msgstr "Bus" msgstr "Bus"
#: apps/wei/models.py:108 apps/wei/models.py:269
msgid "bus"
msgstr "Bus"
#: apps/wei/models.py:116 #: apps/wei/models.py:116
msgid "color" msgid "color"
msgstr "couleur" msgstr "couleur"
@ -1092,10 +1105,6 @@ msgstr "Équipes de bus"
msgid "WEI Role" msgid "WEI Role"
msgstr "Rôle au WEI" msgstr "Rôle au WEI"
#: apps/wei/models.py:142
msgid "WEI Roles"
msgstr "Rôles au WEI"
#: apps/wei/models.py:166 #: apps/wei/models.py:166
msgid "Credit from Société générale" msgid "Credit from 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"
@ -1192,10 +1201,6 @@ msgstr "Participants au WEI"
msgid "team" msgid "team"
msgstr "équipe" msgstr "équipe"
#: apps/wei/models.py:279
msgid "Team"
msgstr "Équipe"
#: apps/wei/models.py:289 #: apps/wei/models.py:289
msgid "WEI registration" msgid "WEI registration"
msgstr "inscription au WEI" msgstr "inscription au WEI"
@ -1221,19 +1226,31 @@ msgstr "Équipes"
msgid "Register 1A" msgid "Register 1A"
msgstr "Inscrire un 1A" msgstr "Inscrire un 1A"
#: apps/wei/views.py:377 templates/wei/weiclub_info.html:63 #: apps/wei/views.py:357 apps/wei/views.py:425
msgid "This user is already registered to this WEI."
msgstr "Cette personne est déjà inscrite au WEI."
#: apps/wei/views.py:362
msgid ""
"This user can't be in her/his first year since he/she has already participed "
"to a WEI."
msgstr ""
"Cet utilisateur ne peut pas être en première année puisqu'iel a déjà "
"participé à un WEI."
#: apps/wei/views.py:390 templates/wei/weiclub_info.html:63
msgid "Register 2A+" msgid "Register 2A+"
msgstr "Inscrire un 2A+" msgstr "Inscrire un 2A+"
#: apps/wei/views.py:394 #: apps/wei/views.py:408 apps/wei/views.py:491
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:587 #: apps/wei/views.py:640
msgid "This user didn't give her/his caution check." msgid "This user didn't give her/his caution check."
msgstr "Cet utilisateur n'a pas donné son chèque de caution." msgstr "Cet utilisateur n'a pas donné son chèque de caution."
#: apps/wei/views.py:655 apps/wei/views.py:675 apps/wei/views.py:685 #: apps/wei/views.py:708 apps/wei/views.py:728 apps/wei/views.py:738
#: templates/wei/survey.html:12 templates/wei/survey_closed.html:12 #: templates/wei/survey.html:12 templates/wei/survey_closed.html:12
#: templates/wei/survey_end.html:12 #: templates/wei/survey_end.html:12
msgid "Survey WEI" msgid "Survey WEI"
@ -1614,6 +1631,7 @@ msgstr ""
"pour activer votre compte." "pour activer votre compte."
#: templates/registration/future_profile_detail.html:56 #: templates/registration/future_profile_detail.html:56
#: templates/wei/weiregistration_confirm_delete.html:12
msgid "Delete registration" msgid "Delete registration"
msgstr "Supprimer l'inscription" msgstr "Supprimer l'inscription"
@ -1622,8 +1640,8 @@ msgid "Validate account"
msgstr "Valider le compte" msgstr "Valider le compte"
#: templates/registration/future_profile_detail.html:71 #: templates/registration/future_profile_detail.html:71
#: templates/wei/weimembership_form.html:115 #: templates/wei/weimembership_form.html:126
#: templates/wei/weimembership_form.html:173 #: templates/wei/weimembership_form.html:184
msgid "Validate registration" msgid "Validate registration"
msgstr "Valider l'inscription" msgstr "Valider l'inscription"
@ -1872,13 +1890,14 @@ msgstr "Suivant"
msgid "The inscription for this WEI are now closed." msgid "The inscription for this WEI are now closed."
msgstr "Les inscriptions pour le WEI sont fermées." msgstr "Les inscriptions pour le WEI sont fermées."
#: templates/wei/survey_closed.html:22 #: templates/wei/survey_closed.html:20
msgid "Return to WEI detail" msgid "Return to WEI detail"
msgstr "Retour aux détails du WEI" msgstr "Retour aux détails du WEI"
#: templates/wei/survey_end.html:16 #: templates/wei/survey_end.html:16
msgid "The survey is now ended. Your answers have been saved." msgid "The survey is now ended. Your answers have been saved."
msgstr "Le sondage est désormais terminé, vos réponses ont bien été enregistrées." msgstr ""
"Le sondage est désormais terminé, vos réponses ont bien été enregistrées."
#: templates/wei/weiclub_info.html:31 #: templates/wei/weiclub_info.html:31
msgid "WEI fee / including BDE and Kfet fee (paid students)" msgid "WEI fee / including BDE and Kfet fee (paid students)"
@ -1952,31 +1971,44 @@ msgstr "L'algorithme n'a pas été exécuté."
msgid "caution check given" msgid "caution check given"
msgstr "chèque de caution donné" msgstr "chèque de caution donné"
#: templates/wei/weimembership_form.html:103
msgid "preferred bus"
msgstr ""
#: templates/wei/weimembership_form.html:106 #: templates/wei/weimembership_form.html:106
msgid "preferred team"
msgstr ""
#: templates/wei/weimembership_form.html:109
msgid "preferred roles"
msgstr ""
#: templates/wei/weimembership_form.html:117
#: templates/wei/weiregistration_confirm_delete.html:31
msgid "Update registration" msgid "Update registration"
msgstr "Mettre à jour l'inscription" msgstr "Mettre à jour l'inscription"
#: templates/wei/weimembership_form.html:119 #: templates/wei/weimembership_form.html:130
msgid "The registration is already validated and can't be unvalidated." msgid "The registration is already validated and can't be unvalidated."
msgstr "L'inscription a déjà été validée et ne peut pas être dévalidée." msgstr "L'inscription a déjà été validée et ne peut pas être dévalidée."
#: templates/wei/weimembership_form.html:120 #: templates/wei/weimembership_form.html:131
msgid "The user joined the bus" msgid "The user joined the bus"
msgstr "L'utilisateur a rejoint le bus" msgstr "L'utilisateur a rejoint le bus"
#: templates/wei/weimembership_form.html:121 #: templates/wei/weimembership_form.html:132
msgid "in the team" msgid "in the team"
msgstr "dans l'équipe" msgstr "dans l'équipe"
#: templates/wei/weimembership_form.html:122 #: templates/wei/weimembership_form.html:133
msgid "in no team (staff)" msgid "in no team (staff)"
msgstr "dans aucune équipe (staff)" msgstr "dans aucune équipe (staff)"
#: templates/wei/weimembership_form.html:122 #: templates/wei/weimembership_form.html:133
msgid "with the following roles:" msgid "with the following roles:"
msgstr "avec les rôles suivants :" msgstr "avec les rôles suivants :"
#: templates/wei/weimembership_form.html:127 #: templates/wei/weimembership_form.html:138
msgid "" msgid ""
"\n" "\n"
" The WEI will be paid by Société générale. The " " The WEI will be paid by Société générale. The "
@ -1988,35 +2020,36 @@ msgid ""
" " " "
msgstr "" msgstr ""
"\n" "\n"
"Le WEI va être payé par la Société générale. " "Le WEI va être payé par la Société générale. L'adhésion sera créée même si "
"L'adhésion sera créée même si la banque n'a pas encore payé le BDE.\n" "la banque n'a pas encore payé le BDE.\n"
"La transaction d'adhésion sera créée mais invalide. " "La transaction d'adhésion sera créée mais invalide. Vous devrez la valider "
"Vous devrez la valider une fois que la banque\n" "une fois que la banque\n"
"aura validé la création du compte, ou bien changer " "aura validé la création du compte, ou bien changer de moyen de paiement.\n"
"de moyen de paiement.\n"
" " " "
#: templates/wei/weimembership_form.html:137 #: templates/wei/weimembership_form.html:148
#, python-format
msgid "" msgid ""
"\n" "\n"
"The note don't have enough money " " The note don't have enough money "
"(%(balance)s, %(pretty_fee)s required). The registration may fail.\n" "(%(balance)s, %(pretty_fee)s required). The registration may fail.\n"
" " " "
msgstr "" msgstr ""
"\n" "\n"
"La note n'a pas assez d'argent (%(balance)s, " "La note n'a pas assez d'argent (%(balance)s, %(pretty_fee)s requis). "
"%(pretty_fee)s requis). L'inscription va échouer.\n" "L'inscription va échouer.\n"
" " " "
#: templates/wei/weimembership_form.html:144 #: templates/wei/weimembership_form.html:155
msgid "The note has enough money, the registration is possible." msgid "The note has enough money, the registration is possible."
msgstr "La note a assez d'argent, l'inscription est possible." msgstr "La note a assez d'argent, l'inscription est possible."
#: templates/wei/weimembership_form.html:151 #: templates/wei/weimembership_form.html:162
msgid "The user didn't give her/his caution check." msgid "The user didn't give her/his caution check."
msgstr "L'utilisateur n'a pas donné son chèque de caution." msgstr "L'utilisateur n'a pas donné son chèque de caution."
#: templates/wei/weimembership_form.html:159 #: templates/wei/weimembership_form.html:170
#, python-format
msgid "" msgid ""
"\n" "\n"
" This user is not a member of the Kfet club. " " This user is not a member of the Kfet club. "
@ -2029,9 +2062,22 @@ msgid ""
" " " "
msgstr "" msgstr ""
"\n" "\n"
"Cet utilisateur n'est pas membre du club Kfet. Merci " "Cet utilisateur n'est pas membre du club Kfet. Merci de le faire adhérer\n"
"de le faire adhérer\n" "<a href=\"%(future_user_detail)s\">ici s'iel est en première année</a>\n"
"<a href=\"%(future_user_detail)s\">ici s'il est en première année</a>\n" "ou <a href=\"%(club_detail)s\">ici s'iel est un ancien membre</a> avant de "
"ou <a href=\"%(club_detail)s\">ici s'il est un ancien membre</a> avant de valider\n" "valider\n"
"l'inscription au WEI.\n" "l'inscription au WEI.\n"
" " " "
#: templates/wei/weiregistration_confirm_delete.html:17
msgid "This registration is already validated and can't be deleted."
msgstr "L'inscription a déjà été validée et ne peut pas être supprimée."
#: templates/wei/weiregistration_confirm_delete.html:24
#, python-format
msgid ""
"Are you sure you want to delete the registration of %(user)s for the WEI "
"%(wei_name)s? This action can't be undoed."
msgstr ""
"Êtes-vous sûr de vouloir supprimer l'inscription de %(user)s pour le WEI "
"%(wei_name)s ? Cette action ne pourra pas être annulée."

View File

@ -111,9 +111,11 @@ SPDX-License-Identifier: GPL-3.0-or-later
<a class="nav-link" href="{% url 'treasury:invoice_list' %}"><i class="fa fa-money"></i> {% trans 'Treasury' %}</a> <a class="nav-link" href="{% url 'treasury:invoice_list' %}"><i class="fa fa-money"></i> {% trans 'Treasury' %}</a>
</li> </li>
{% endif %} {% endif %}
<li class="nav-item active"> {% if "wei.weiclub"|not_empty_model_change_list %}
<a class="nav-link" href="{% url 'wei:current_wei_detail' %}"><i class="fa fa-bus"></i> {% trans 'WEI' %}</a> <li class="nav-item active">
</li> <a class="nav-link" href="{% url 'wei:current_wei_detail' %}"><i class="fa fa-bus"></i> {% trans 'WEI' %}</a>
</li>
{% endif %}
</ul> </ul>
<ul class="navbar-nav ml-auto"> <ul class="navbar-nav ml-auto">
{% if user.is_authenticated %} {% if user.is_authenticated %}

View File

@ -13,7 +13,7 @@
<div class="card-header text-center"> <div class="card-header text-center">
<h4>{% trans "Review registration" %}</h4> <h4>{% trans "Review registration" %}</h4>
</div> </div>
<div class="card-body" id="profile_infos"> <div class="card-body">
<dl class="row"> <dl class="row">
<dt class="col-xl-6">{% trans 'name'|capfirst %}, {% trans 'first name' %}</dt> <dt class="col-xl-6">{% trans 'name'|capfirst %}, {% trans 'first name' %}</dt>
<dd class="col-xl-6">{{ registration.user.last_name }} {{ registration.user.first_name }}</dd> <dd class="col-xl-6">{{ registration.user.last_name }} {{ registration.user.first_name }}</dd>

View File

@ -0,0 +1,37 @@
{% extends "member/noteowner_detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block profile_info %}
{% include "wei/weiclub_info.html" %}
{% endblock %}
{% block profile_content %}
<div class="card bg-light shadow">
<div class="card-header text-center">
<h4>{% trans "Delete registration" %}</h4>
</div>
{% if object.is_validated %}
<div class="card-body">
<div class="alert alert-danger">
{% blocktrans %}This registration is already validated and can't be deleted.{% endblocktrans %}
</div>
</div>
{% else %}
<div class="card-body">
<div class="alert alert-warning">
{% with user=object.user wei_name=object.wei.name %}
{% blocktrans %}Are you sure you want to delete the registration of {{ user }} for the WEI {{ wei_name }}? This action can't be undoed.{% endblocktrans %}
{% endwith %}
</div>
</div>
<div class="card-footer text-center">
<form method="post">
{% csrf_token %}
<a class="btn btn-warning" href="{% url 'wei:wei_update_registration' object.pk %}">{% trans "Update registration" %}</a>
<button class="btn btn-danger" type="submit">{% trans "Delete" %}</button>
</form>
</div>
{% endif %}
</div>
{% endblock %}

View File

@ -7,10 +7,10 @@
{% endblock %} {% endblock %}
{% block profile_content %} {% block profile_content %}
<form method="post"> <form method="post">
{% csrf_token %} {% csrf_token %}
{{ form|crispy }} {{ form|crispy }}
{{ membership_form|crispy }} {{ membership_form|crispy }}
<button class="btn btn-primary" type="submit">{% trans "Submit" %}</button> <button class="btn btn-primary" type="submit">{% trans "Submit" %}</button>
</form> </form>
{% endblock %} {% endblock %}