diff --git a/apps/activity/views.py b/apps/activity/views.py index cac7f183..923f32ec 100644 --- a/apps/activity/views.py +++ b/apps/activity/views.py @@ -114,28 +114,31 @@ class ActivityEntryView(LoginRequiredMixin, TemplateView): context = super().get_context_data(**kwargs) activity = Activity.objects.filter(PermissionBackend.filter_queryset(self.request.user, Activity, "view"))\ - .get(pk=self.kwargs["pk"]) + .distinct().get(pk=self.kwargs["pk"]) context["activity"] = activity matched = [] - pattern = "^$" - if "search" in self.request.GET: - pattern = self.request.GET["search"] - - if not pattern: - pattern = "^$" - - if pattern[0] != "^": - pattern = "^" + pattern - guest_qs = Guest.objects\ .annotate(balance=F("inviter__balance"), note_name=F("inviter__user__username"))\ - .filter(Q(first_name__regex=pattern) | Q(last_name__regex=pattern) - | Q(inviter__alias__name__regex=pattern) - | Q(inviter__alias__normalized_name__regex=Alias.normalize(pattern))) \ + .filter(activity=activity)\ .filter(PermissionBackend.filter_queryset(self.request.user, Guest, "view"))\ - .distinct()[:20] + .order_by('last_name', 'first_name').distinct() + + if "search" in self.request.GET: + pattern = self.request.GET["search"] + if pattern[0] != "^": + pattern = "^" + pattern + guest_qs = guest_qs.filter( + Q(first_name__regex=pattern) + | Q(last_name__regex=pattern) + | Q(inviter__alias__name__regex=pattern) + | Q(inviter__alias__normalized_name__regex=Alias.normalize(pattern)) + ) + else: + pattern = None + guest_qs = guest_qs.none() + for guest in guest_qs: guest.type = "Invité" matched.append(guest) @@ -145,12 +148,18 @@ class ActivityEntryView(LoginRequiredMixin, TemplateView): username=F("note__noteuser__user__username"), note_name=F("name"), balance=F("note__balance"))\ - .filter(Q(note__polymorphic_ctype__model="noteuser") - & (Q(note__noteuser__user__first_name__regex=pattern) - | Q(note__noteuser__user__last_name__regex=pattern) - | Q(name__regex=pattern) - | Q(normalized_name__regex=Alias.normalize(pattern)))) \ + .filter(note__polymorphic_ctype__model="noteuser")\ .filter(PermissionBackend.filter_queryset(self.request.user, Alias, "view")) + if pattern: + note_qs = note_qs.filter( + Q(note__noteuser__user__first_name__regex=pattern) + | Q(note__noteuser__user__last_name__regex=pattern) + | Q(name__regex=pattern) + | Q(normalized_name__regex=Alias.normalize(pattern)) + ) + else: + note_qs = note_qs.none() + if settings.DATABASES[note_qs.db]["ENGINE"] == 'django.db.backends.postgresql_psycopg2': note_qs = note_qs.distinct('note__pk')[:20] else: @@ -158,6 +167,7 @@ class ActivityEntryView(LoginRequiredMixin, TemplateView): # have distinct aliases rather than distinct notes with a SQLite DB, but it can fill the result page. # In production mode, please use PostgreSQL. note_qs = note_qs.distinct()[:20] + for note in note_qs: note.type = "Adhérent" note.activity = activity diff --git a/apps/member/forms.py b/apps/member/forms.py index 50fa9c47..58285b79 100644 --- a/apps/member/forms.py +++ b/apps/member/forms.py @@ -4,6 +4,7 @@ from django import forms from django.contrib.auth.forms import AuthenticationForm from django.contrib.auth.models import User +from django.forms import CheckboxSelectMultiple from django.utils.translation import gettext_lazy as _ from note.models import NoteSpecial, Alias from note_kfet.inputs import Autocomplete, AmountInput, DatePickerInput @@ -151,6 +152,7 @@ class MembershipRolesForm(forms.ModelForm): roles = forms.ModelMultipleChoiceField( queryset=Role.objects.filter(weirole=None).all(), label=_("Roles"), + widget=CheckboxSelectMultiple(), ) class Meta: diff --git a/apps/wei/forms/registration.py b/apps/wei/forms/registration.py index 9ce3a350..738db4e2 100644 --- a/apps/wei/forms/registration.py +++ b/apps/wei/forms/registration.py @@ -4,6 +4,7 @@ from django import forms from django.contrib.auth.models import User from django.db.models import Q +from django.forms import CheckboxSelectMultiple from django.utils.translation import gettext_lazy as _ from note_kfet.inputs import AmountInput, DatePickerInput, Autocomplete, ColorWidget @@ -47,6 +48,7 @@ class WEIChooseBusForm(forms.Form): label=_("bus"), help_text=_("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."), + widget=CheckboxSelectMultiple(), ) team = forms.ModelMultipleChoiceField( @@ -54,17 +56,24 @@ class WEIChooseBusForm(forms.Form): label=_("Team"), required=False, help_text=_("Leave this field empty if you won't be in a team (staff, bus chief, free electron)"), + widget=CheckboxSelectMultiple(), ) roles = forms.ModelMultipleChoiceField( queryset=WEIRole.objects.filter(~Q(name="1A")), label=_("WEI Roles"), help_text=_("Select the roles that you are interested in."), + initial=WEIRole.objects.filter(name="Adhérent WEI").all(), + widget=CheckboxSelectMultiple(), ) class WEIMembershipForm(forms.ModelForm): - roles = forms.ModelMultipleChoiceField(queryset=WEIRole.objects, label=_("WEI Roles")) + roles = forms.ModelMultipleChoiceField( + queryset=WEIRole.objects, + label=_("WEI Roles"), + widget=CheckboxSelectMultiple(), + ) def clean(self): cleaned_data = super().clean() diff --git a/apps/wei/views.py b/apps/wei/views.py index fb0f7b32..8a95c72a 100644 --- a/apps/wei/views.py +++ b/apps/wei/views.py @@ -527,8 +527,9 @@ class WEIRegister2AView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): context["form"].fields["user"].disabled = True choose_bus_form = WEIChooseBusForm() - choose_bus_form.fields["bus"].queryset = Bus.objects.filter(wei=context["club"]) - choose_bus_form.fields["team"].queryset = BusTeam.objects.filter(bus__wei=context["club"]) + choose_bus_form.fields["bus"].queryset = Bus.objects.filter(wei=context["club"]).order_by('name') + choose_bus_form.fields["team"].queryset = BusTeam.objects.filter(bus__wei=context["club"])\ + .order_by('bus__name', 'name') context['membership_form'] = choose_bus_form return context diff --git a/templates/wei/weiregistration_form.html b/templates/wei/weiregistration_form.html index 86aea555..9cf507c8 100644 --- a/templates/wei/weiregistration_form.html +++ b/templates/wei/weiregistration_form.html @@ -14,3 +14,29 @@ {% endblock %} + +{% block extrajavascript %} + +{% endblock %}