diff --git a/apps/wei/api/serializers.py b/apps/wei/api/serializers.py index 3312c87a..69254b75 100644 --- a/apps/wei/api/serializers.py +++ b/apps/wei/api/serializers.py @@ -3,7 +3,7 @@ from rest_framework import serializers -from ..models import WEIClub, Bus, BusTeam +from ..models import WEIClub, Bus, BusTeam, WEIRole, WEIRegistration, WEIMembership class WEIClubSerializer(serializers.ModelSerializer): @@ -37,3 +37,36 @@ class BusTeamSerializer(serializers.ModelSerializer): class Meta: model = BusTeam fields = '__all__' + + +class WEIRoleSerializer(serializers.ModelSerializer): + """ + REST API Serializer for WEI roles. + The djangorestframework plugin will analyse the model `WEIRole` and parse all fields in the API. + """ + + class Meta: + model = WEIRole + fields = '__all__' + + +class WEIRegistrationSerializer(serializers.ModelSerializer): + """ + REST API Serializer for WEI registrations. + The djangorestframework plugin will analyse the model `WEIRegistration` and parse all fields in the API. + """ + + class Meta: + model = WEIRegistration + fields = '__all__' + + +class WEIMembershipSerializer(serializers.ModelSerializer): + """ + REST API Serializer for WEI memberships. + The djangorestframework plugin will analyse the model `WEIMembership` and parse all fields in the API. + """ + + class Meta: + model = WEIMembership + fields = '__all__' diff --git a/apps/wei/api/urls.py b/apps/wei/api/urls.py index 74279695..713f5c7f 100644 --- a/apps/wei/api/urls.py +++ b/apps/wei/api/urls.py @@ -1,7 +1,8 @@ # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later -from .views import WEIClubViewSet, BusViewSet, BusTeamViewSet +from .views import WEIClubViewSet, BusViewSet, BusTeamViewSet, WEIRoleViewSet, WEIRegistrationViewSet, \ + WEIMembershipViewSet def register_wei_urls(router, path): @@ -11,3 +12,6 @@ def register_wei_urls(router, path): router.register(path + '/club', WEIClubViewSet) router.register(path + '/bus', BusViewSet) router.register(path + '/team', BusTeamViewSet) + router.register(path + '/role', WEIRoleViewSet) + router.register(path + '/registration', WEIRegistrationViewSet) + router.register(path + '/membership', WEIMembershipViewSet) diff --git a/apps/wei/api/views.py b/apps/wei/api/views.py index 8ea903f6..aaa1f141 100644 --- a/apps/wei/api/views.py +++ b/apps/wei/api/views.py @@ -4,8 +4,9 @@ from django_filters.rest_framework import DjangoFilterBackend from rest_framework.filters import SearchFilter from api.viewsets import ReadProtectedModelViewSet -from .serializers import WEIClubSerializer, BusSerializer, BusTeamSerializer -from ..models import WEIClub, Bus, BusTeam +from .serializers import WEIClubSerializer, BusSerializer, BusTeamSerializer, WEIRoleSerializer, \ + WEIRegistrationSerializer, WEIMembershipSerializer +from ..models import WEIClub, Bus, BusTeam, WEIRole, WEIRegistration, WEIMembership class WEIClubViewSet(ReadProtectedModelViewSet): @@ -27,7 +28,7 @@ class BusViewSet(ReadProtectedModelViewSet): The djangorestframework plugin will get all `Bus` objects, serialize it to JSON with the given serializer, then render it on /api/wei/bus/ """ - queryset = Bus.objects.all() + queryset = Bus.objects serializer_class = BusSerializer filter_backends = [SearchFilter, DjangoFilterBackend] search_fields = ['$name', ] @@ -40,8 +41,46 @@ class BusTeamViewSet(ReadProtectedModelViewSet): The djangorestframework plugin will get all `BusTeam` objects, serialize it to JSON with the given serializer, then render it on /api/wei/team/ """ - queryset = BusTeam.objects.all() + queryset = BusTeam.objects serializer_class = BusTeamSerializer filter_backends = [SearchFilter, DjangoFilterBackend] search_fields = ['$name', ] filterset_fields = ['name', 'bus', 'bus__wei', ] + + +class WEIRoleViewSet(ReadProtectedModelViewSet): + """ + REST API View set. + The djangorestframework plugin will get all `WEIRole` objects, serialize it to JSON with the given serializer, + then render it on /api/wei/role/ + """ + queryset = WEIRole.objects + serializer_class = WEIRoleSerializer + filter_backends = [SearchFilter] + search_fields = ['$name', ] + + +class WEIRegistrationViewSet(ReadProtectedModelViewSet): + """ + REST API View set. + The djangorestframework plugin will get all WEIRegistration objects, serialize it to JSON with the given serializer, + then render it on /api/wei/registration/ + """ + queryset = WEIRegistration.objects + serializer_class = WEIRegistrationSerializer + filter_backends = [SearchFilter, DjangoFilterBackend] + search_fields = ['$user__username', ] + filterset_fields = ['user', 'wei', ] + + +class WEIMembershipViewSet(ReadProtectedModelViewSet): + """ + REST API View set. + The djangorestframework plugin will get all `BusTeam` objects, serialize it to JSON with the given serializer, + then render it on /api/wei/membership/ + """ + queryset = WEIMembership.objects + serializer_class = WEIMembershipSerializer + filter_backends = [SearchFilter, DjangoFilterBackend] + search_fields = ['$user__username', '$bus__name', '$team__name', ] + filterset_fields = ['user', 'club', 'bus', 'team', ] diff --git a/apps/wei/tables.py b/apps/wei/tables.py index 1e4d7cf5..17f16ea1 100644 --- a/apps/wei/tables.py +++ b/apps/wei/tables.py @@ -77,7 +77,7 @@ class WEIRegistrationTable(tables.Table): } model = WEIRegistration template_name = 'django_tables2/bootstrap4.html' - fields = ('user', 'first_year',) + fields = ('user', 'user.first_name', 'user.last_name', 'first_year',) row_attrs = { 'class': 'table-row', 'id': lambda record: "row-" + str(record.pk), @@ -86,13 +86,28 @@ class WEIRegistrationTable(tables.Table): class WEIMembershipTable(tables.Table): + user = tables.LinkColumn( + 'wei:wei_update_registration', + args=[A('registration.pk')], + ) + + bus = tables.LinkColumn( + 'wei:manage_bus', + args=[A('bus.pk')], + ) + + team = tables.LinkColumn( + 'wei:manage_bus_team', + args=[A('bus.pk')], + ) + class Meta: attrs = { 'class': 'table table-condensed table-striped table-hover' } model = WEIMembership template_name = 'django_tables2/bootstrap4.html' - fields = ('user', ) + fields = ('user', 'user.first_name', 'user.last_name', 'bus', 'team', ) row_attrs = { 'class': 'table-row', 'id': lambda record: "row-" + str(record.pk), diff --git a/apps/wei/urls.py b/apps/wei/urls.py index 2c0b2ea0..39af30e0 100644 --- a/apps/wei/urls.py +++ b/apps/wei/urls.py @@ -4,6 +4,7 @@ from django.urls import path from .views import CurrentWEIDetailView, WEIListView, WEICreateView, WEIDetailView, WEIUpdateView,\ + WEIRegistrationsView, WEIMembershipsView,\ BusCreateView, BusManageView, BusUpdateView, BusTeamCreateView, BusTeamManageView, BusTeamUpdateView,\ WEIRegister1AView, WEIRegister2AView, WEIUpdateRegistrationView, WEIDeleteRegistrationView,\ WEIValidateRegistrationView, WEISurveyView, WEISurveyEndView, WEIClosedView @@ -16,6 +17,8 @@ urlpatterns = [ path('create/', WEICreateView.as_view(), name="wei_create"), path('detail//', WEIDetailView.as_view(), name="wei_detail"), path('update//', WEIUpdateView.as_view(), name="wei_update"), + path('detail//registrations/', WEIRegistrationsView.as_view(), name="wei_registrations"), + path('detail//memberships/', WEIMembershipsView.as_view(), name="wei_memberships"), path('add-bus//', BusCreateView.as_view(), name="add_bus"), path('manage-bus//', BusManageView.as_view(), name="manage_bus"), path('update-bus//', BusUpdateView.as_view(), name="update_bus"), diff --git a/apps/wei/views.py b/apps/wei/views.py index 63096fcc..c79c1296 100644 --- a/apps/wei/views.py +++ b/apps/wei/views.py @@ -5,6 +5,7 @@ from datetime import datetime, date from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.models import User +from django.core.exceptions import PermissionDenied from django.db.models import Q from django.forms import HiddenInput from django.shortcuts import redirect @@ -14,7 +15,7 @@ from django.utils.translation import gettext_lazy as _ from django.views.generic.edit import BaseFormView, DeleteView from django_tables2 import SingleTableView from member.models import Membership, Club -from note.models import Transaction, NoteClub +from note.models import Transaction, NoteClub, Alias from note.tables import HistoryTable from permission.backends import PermissionBackend from permission.views import ProtectQuerysetMixin @@ -128,6 +129,78 @@ class WEIDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): return context +class WEIMembershipsView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView): + """ + List all WEI memberships + """ + model = WEIMembership + table_class = WEIMembershipTable + + def dispatch(self, request, *args, **kwargs): + self.club = WEIClub.objects.get(pk=self.kwargs["pk"]) + return super().dispatch(request, *args, **kwargs) + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs).filter(club=self.club) + + pattern = self.request.GET.get("search", "") + + if not pattern: + return qs.none() + + qs = qs.filter( + Q(user__first_name__iregex=pattern) + | Q(user__last_name__iregex=pattern) + | Q(user__note__alias__name__iregex="^" + pattern) + | Q(user__note__alias__normalized_name__iregex="^" + Alias.normalize(pattern)) + | Q(bus__name__iregex=pattern) + | Q(team__name__iregex=pattern) + ) + + return qs[:20] + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["club"] = self.club + context["title"] = _("Find WEI Membership") + return context + + +class WEIRegistrationsView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView): + """ + List all non-validated WEI registrations. + """ + model = WEIRegistration + table_class = WEIRegistrationTable + + def dispatch(self, request, *args, **kwargs): + self.club = WEIClub.objects.get(pk=self.kwargs["pk"]) + return super().dispatch(request, *args, **kwargs) + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs).filter(wei=self.club, membership=None) + + pattern = self.request.GET.get("search", "") + + if not pattern: + return qs.none() + + qs = qs.filter( + Q(user__first_name__iregex=pattern) + | Q(user__last_name__iregex=pattern) + | Q(user__note__alias__name__iregex="^" + pattern) + | Q(user__note__alias__normalized_name__iregex="^" + Alias.normalize(pattern)) + ) + + return qs[:20] + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["club"] = self.club + context["title"] = _("Find WEI Registration") + return context + + class WEIUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): """ Update the information of the WEI. @@ -494,7 +567,7 @@ class WEIUpdateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Update def get_form(self, form_class=None): form = super().get_form(form_class) - del form.fields["user"] + form.fields["user"].disabled = True if not self.object.first_year: del form.fields["information_json"] return form @@ -502,7 +575,7 @@ class WEIUpdateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Update def form_valid(self, form): # If the membership is already validated, then we update the bus and the team (and the roles) if form.instance.is_validated: - membership_form = WEIMembershipForm(self.request.POST) + membership_form = WEIMembershipForm(self.request.POST, instance=form.instance.membership) if not membership_form.is_valid(): return self.form_invalid(form) membership_form.save() @@ -534,14 +607,22 @@ class WEIUpdateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Update class WEIDeleteRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, DeleteView): + """ + Delete a non-validated WEI registration + """ model = WEIRegistration def dispatch(self, request, *args, **kwargs): - wei = self.get_object().wei + object = self.get_object() + wei = 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,))) + + if not PermissionBackend.check_perm(self.request.user, "wei.delete_weiregistration", object): + raise PermissionDenied + return super().dispatch(request, *args, **kwargs) def get_context_data(self, **kwargs): diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 6fee90d4..a8c23ad5 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-21 01:01+0200\n" +"POT-Creation-Date: 2020-04-21 17:47+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -439,7 +439,7 @@ msgstr "" msgid "fee" msgstr "" -#: apps/member/models.py:267 apps/member/views.py:500 apps/wei/views.py:645 +#: apps/member/models.py:267 apps/member/views.py:500 apps/wei/views.py:726 msgid "User is not a member of the parent club" msgstr "" @@ -482,7 +482,7 @@ msgstr "" msgid "Search user" msgstr "" -#: apps/member/views.py:495 apps/wei/views.py:636 +#: apps/member/views.py:495 apps/wei/views.py:717 msgid "" "This user don't have enough money to join this club, and can't have a " "negative balance." @@ -1000,7 +1000,7 @@ msgid "Remove" msgstr "" #: apps/wei/apps.py:10 apps/wei/models.py:44 apps/wei/models.py:45 -#: apps/wei/models.py:56 apps/wei/models.py:161 templates/base.html:115 +#: apps/wei/models.py:56 apps/wei/models.py:161 templates/base.html:116 msgid "WEI" msgstr "" @@ -1194,38 +1194,46 @@ msgstr "" msgid "Validate" msgstr "" -#: apps/wei/tables.py:110 templates/wei/bus_tables.html:26 +#: apps/wei/tables.py:125 templates/wei/bus_tables.html:26 #: templates/wei/busteam_tables.html:43 msgid "Teams" msgstr "" -#: apps/wei/views.py:336 templates/wei/weiclub_info.html:62 +#: apps/wei/views.py:165 +msgid "Find WEI Membership" +msgstr "" + +#: apps/wei/views.py:200 +msgid "Find WEI Registration" +msgstr "" + +#: apps/wei/views.py:409 templates/wei/weiclub_info.html:62 msgid "Register 1A" msgstr "" -#: apps/wei/views.py:357 apps/wei/views.py:425 +#: apps/wei/views.py:430 apps/wei/views.py:498 msgid "This user is already registered to this WEI." msgstr "" -#: apps/wei/views.py:362 +#: apps/wei/views.py:435 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 +#: apps/wei/views.py:463 templates/wei/weiclub_info.html:63 msgid "Register 2A+" msgstr "" -#: apps/wei/views.py:408 apps/wei/views.py:491 +#: apps/wei/views.py:481 apps/wei/views.py:564 msgid "You already opened an account in the Société générale." msgstr "" -#: apps/wei/views.py:640 +#: apps/wei/views.py:721 msgid "This user didn't give her/his caution check." msgstr "" -#: apps/wei/views.py:708 apps/wei/views.py:728 apps/wei/views.py:738 +#: apps/wei/views.py:789 apps/wei/views.py:809 apps/wei/views.py:819 #: templates/wei/survey.html:12 templates/wei/survey_closed.html:12 #: templates/wei/survey_end.html:12 msgid "Survey WEI" @@ -1323,7 +1331,7 @@ msgstr "" msgid "Registrations" msgstr "" -#: templates/base.html:153 +#: templates/base.html:155 msgid "" "Your e-mail address is not validated. Please check your mail inbox and click " "on the validation link." @@ -1425,7 +1433,7 @@ msgstr "" msgid "Club listing" msgstr "" -#: templates/member/club_tables.html:7 templates/wei/weiclub_tables.html:92 +#: templates/member/club_tables.html:7 msgid "Member of the Club" msgstr "" @@ -1892,6 +1900,10 @@ msgstr "" msgid "Update my registration" msgstr "" +#: templates/wei/weiclub_tables.html:92 +msgid "Members of the WEI" +msgstr "" + #: templates/wei/weiclub_tables.html:120 msgid "Unvalidated registrations" msgstr "" @@ -2000,6 +2012,14 @@ msgid "" " " msgstr "" +#: templates/wei/weimembership_list.html:18 +msgid "There is no membership found with this pattern." +msgstr "" + +#: templates/wei/weimembership_list.html:24 +msgid "View unvalidated registrations..." +msgstr "" + #: templates/wei/weiregistration_confirm_delete.html:17 msgid "This registration is already validated and can't be deleted." msgstr "" @@ -2008,5 +2028,13 @@ msgstr "" #, 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." +"%(wei_name)s? This action can't be undone." +msgstr "" + +#: templates/wei/weiregistration_list.html:18 +msgid "There is no pre-registration found with this pattern." +msgstr "" + +#: templates/wei/weiregistration_list.html:24 +msgid "View validated memberships..." msgstr "" diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index cd76af81..69de359f 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-04-21 01:01+0200\n" +"POT-Creation-Date: 2020-04-21 17:47+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -439,7 +439,7 @@ msgstr "l'adhésion finit le" msgid "fee" msgstr "cotisation" -#: apps/member/models.py:267 apps/member/views.py:500 apps/wei/views.py:645 +#: apps/member/models.py:267 apps/member/views.py:500 apps/wei/views.py:726 msgid "User is not a member of the parent club" msgstr "L'utilisateur n'est pas membre du club parent" @@ -482,7 +482,7 @@ msgstr "Un alias avec un nom similaire existe déjà." msgid "Search user" msgstr "Chercher un utilisateur" -#: apps/member/views.py:495 apps/wei/views.py:636 +#: apps/member/views.py:495 apps/wei/views.py:717 msgid "" "This user don't have enough money to join this club, and can't have a " "negative balance." @@ -1008,7 +1008,7 @@ msgid "Remove" msgstr "supprimer" #: apps/wei/apps.py:10 apps/wei/models.py:44 apps/wei/models.py:45 -#: apps/wei/models.py:56 apps/wei/models.py:161 templates/base.html:115 +#: apps/wei/models.py:56 apps/wei/models.py:161 templates/base.html:116 msgid "WEI" msgstr "WEI" @@ -1217,20 +1217,28 @@ msgstr "adhésions au WEI" msgid "Validate" msgstr "Valider" -#: apps/wei/tables.py:110 templates/wei/bus_tables.html:26 +#: apps/wei/tables.py:125 templates/wei/bus_tables.html:26 #: templates/wei/busteam_tables.html:43 msgid "Teams" msgstr "Équipes" -#: apps/wei/views.py:336 templates/wei/weiclub_info.html:62 +#: apps/wei/views.py:165 +msgid "Find WEI Membership" +msgstr "Trouver une adhésion au WEI" + +#: apps/wei/views.py:200 +msgid "Find WEI Registration" +msgstr "Trouver une inscription au WEI" + +#: apps/wei/views.py:409 templates/wei/weiclub_info.html:62 msgid "Register 1A" msgstr "Inscrire un 1A" -#: apps/wei/views.py:357 apps/wei/views.py:425 +#: apps/wei/views.py:430 apps/wei/views.py:498 msgid "This user is already registered to this WEI." msgstr "Cette personne est déjà inscrite au WEI." -#: apps/wei/views.py:362 +#: apps/wei/views.py:435 msgid "" "This user can't be in her/his first year since he/she has already participed " "to a WEI." @@ -1238,19 +1246,19 @@ 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 +#: apps/wei/views.py:463 templates/wei/weiclub_info.html:63 msgid "Register 2A+" msgstr "Inscrire un 2A+" -#: apps/wei/views.py:408 apps/wei/views.py:491 +#: apps/wei/views.py:481 apps/wei/views.py:564 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." -#: apps/wei/views.py:640 +#: apps/wei/views.py:721 msgid "This user didn't give her/his caution check." msgstr "Cet utilisateur n'a pas donné son chèque de caution." -#: apps/wei/views.py:708 apps/wei/views.py:728 apps/wei/views.py:738 +#: apps/wei/views.py:789 apps/wei/views.py:809 apps/wei/views.py:819 #: templates/wei/survey.html:12 templates/wei/survey_closed.html:12 #: templates/wei/survey_end.html:12 msgid "Survey WEI" @@ -1348,7 +1356,7 @@ msgstr "Clubs" msgid "Registrations" msgstr "Inscriptions" -#: templates/base.html:153 +#: templates/base.html:155 msgid "" "Your e-mail address is not validated. Please check your mail inbox and click " "on the validation link." @@ -1454,7 +1462,7 @@ msgstr "Créer un club" msgid "Club listing" msgstr "Liste des clubs" -#: templates/member/club_tables.html:7 templates/wei/weiclub_tables.html:92 +#: templates/member/club_tables.html:7 msgid "Member of the Club" msgstr "Membre du club" @@ -1943,6 +1951,10 @@ msgstr "M'inscrire au WEI ! – 2A+" msgid "Update my registration" msgstr "Mettre à jour mon inscription" +#: templates/wei/weiclub_tables.html:92 +msgid "Members of the WEI" +msgstr "Membres du WEI" + #: templates/wei/weiclub_tables.html:120 msgid "Unvalidated registrations" msgstr "Inscriptions non validées" @@ -1973,15 +1985,15 @@ msgstr "chèque de caution donné" #: templates/wei/weimembership_form.html:103 msgid "preferred bus" -msgstr "" +msgstr "bus préféré" #: templates/wei/weimembership_form.html:106 msgid "preferred team" -msgstr "" +msgstr "équipe préférée" #: templates/wei/weimembership_form.html:109 msgid "preferred roles" -msgstr "" +msgstr "rôles préférés" #: templates/wei/weimembership_form.html:117 #: templates/wei/weiregistration_confirm_delete.html:31 @@ -2069,6 +2081,14 @@ msgstr "" "l'inscription au WEI.\n" " " +#: templates/wei/weimembership_list.html:18 +msgid "There is no membership found with this pattern." +msgstr "Il n'y a pas d'adhésion trouvée avec cette entrée." + +#: templates/wei/weimembership_list.html:24 +msgid "View unvalidated registrations..." +msgstr "Voir les inscriptions non validées ..." + #: 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." @@ -2077,7 +2097,15 @@ msgstr "L'inscription a déjà été validée et ne peut pas être supprimée." #, 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." +"%(wei_name)s? This action can't be undone." 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." + +#: templates/wei/weiregistration_list.html:18 +msgid "There is no pre-registration found with this pattern." +msgstr "Il n'y a pas de pré-inscription en attente avec cette entrée." + +#: templates/wei/weiregistration_list.html:24 +msgid "View validated memberships..." +msgstr "Voir les adhésions validées ..." diff --git a/templates/wei/weiclub_tables.html b/templates/wei/weiclub_tables.html index ef64e921..d5a8ff01 100644 --- a/templates/wei/weiclub_tables.html +++ b/templates/wei/weiclub_tables.html @@ -88,8 +88,8 @@ {% if member_list.data %}
{% render_table member_list %} @@ -116,7 +116,7 @@ {% if pre_registrations.data %}
diff --git a/templates/wei/weimembership_list.html b/templates/wei/weimembership_list.html new file mode 100644 index 00000000..461c988f --- /dev/null +++ b/templates/wei/weimembership_list.html @@ -0,0 +1,46 @@ +{% extends "member/noteowner_detail.html" %} +{% load i18n %} +{% load render_table from django_tables2 %} + +{% block profile_info %} +{% include "wei/weiclub_info.html" %} +{% endblock %} + +{% block profile_content %} + +
+ +
+ {% if table.data %} + {% render_table table %} + {% else %} +
+ {% trans "There is no membership found with this pattern." %} +
+ {% endif %} +
+ + + + +{% endblock %} + +{% block extrajavascript %} + +{% endblock %} diff --git a/templates/wei/weiregistration_confirm_delete.html b/templates/wei/weiregistration_confirm_delete.html index edd42c9c..51bfc030 100644 --- a/templates/wei/weiregistration_confirm_delete.html +++ b/templates/wei/weiregistration_confirm_delete.html @@ -21,7 +21,7 @@
{% 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 %} + {% blocktrans %}Are you sure you want to delete the registration of {{ user }} for the WEI {{ wei_name }}? This action can't be undone.{% endblocktrans %} {% endwith %}
diff --git a/templates/wei/weiregistration_list.html b/templates/wei/weiregistration_list.html new file mode 100644 index 00000000..05626dd2 --- /dev/null +++ b/templates/wei/weiregistration_list.html @@ -0,0 +1,46 @@ +{% extends "member/noteowner_detail.html" %} +{% load i18n %} +{% load render_table from django_tables2 %} + +{% block profile_info %} +{% include "wei/weiclub_info.html" %} +{% endblock %} + +{% block profile_content %} + +
+ +
+ {% if table.data %} + {% render_table table %} + {% else %} +
+ {% trans "There is no pre-registration found with this pattern." %} +
+ {% endif %} +
+ + + + +{% endblock %} + +{% block extrajavascript %} + +{% endblock %}