From 16079e3cc5b1d71eee3ee00b25ed2b9bb175a8e7 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Fri, 24 Apr 2020 14:03:25 +0200 Subject: [PATCH] Fix broken WEI permissions --- apps/permission/fixtures/initial.json | 249 ++++++++++++++++++++++---- apps/wei/views.py | 23 ++- templates/base.html | 4 +- templates/wei/weilist_sample.tex | 2 +- 4 files changed, 232 insertions(+), 46 deletions(-) diff --git a/apps/permission/fixtures/initial.json b/apps/permission/fixtures/initial.json index 7e7709e3..ce0fcd3d 100644 --- a/apps/permission/fixtures/initial.json +++ b/apps/permission/fixtures/initial.json @@ -118,6 +118,13 @@ "name": "1A" } }, + { + "model": "member.role", + "pk": 18, + "fields": { + "name": "Adhérent WEI" + } + }, { "model": "wei.weirole", "pk": 12, @@ -148,6 +155,11 @@ "pk": 17, "fields": {} }, + { + "model": "wei.weirole", + "pk": 18, + "fields": {} + }, { "model": "permission.permissionmask", "pk": 1, @@ -1320,11 +1332,11 @@ "wei", "weiclub" ], - "query": "{}", + "query": "{\"pk\": [\"club\", \"pk\"]}", "type": "view", "mask": 1, "field": "", - "description": "View all WEI" + "description": "View my WEI" } }, { @@ -1410,7 +1422,7 @@ "wei", "weiregistration" ], - "query": "{\"user\": [\"user\"], \"wei\": [\"club\"], \"wei__membership_start__lte\": [\"today\"], \"wei__membership_end__gte\": [\"today\"], \"membership\": null}", + "query": "{\"user\": [\"user\"], \"wei__year\": [\"today\", \"year\"], \"wei__membership_start__lte\": [\"today\"], \"wei__membership_end__gte\": [\"today\"], \"membership\": null}", "type": "add", "mask": 1, "field": "", @@ -1650,7 +1662,7 @@ "wei", "weiregistration" ], - "query": "{\"user\": [\"user\"], \"club\": [\"club\"], \"wei__membership_start__lte\": [\"today\"], \"wei__membership_end__gte\": [\"today\"]}", + "query": "{\"user\": [\"user\"], \"wei\": [\"club\"], \"wei__membership_start__lte\": [\"today\"], \"wei__membership_end__gte\": [\"today\"]}", "type": "change", "mask": 1, "field": "emergency_contact_name", @@ -1680,7 +1692,7 @@ "wei", "weiregistration" ], - "query": "{\"user\": [\"user\"], \"club\": [\"club\"], \"wei__membership_start__lte\": [\"today\"], \"wei__membership_end__gte\": [\"today\"]}", + "query": "{\"user\": [\"user\"], \"wei\": [\"club\"], \"wei__membership_start__lte\": [\"today\"], \"wei__membership_end__gte\": [\"today\"]}", "type": "change", "mask": 1, "field": "emergency_contact_phone", @@ -1725,7 +1737,7 @@ "wei", "bus" ], - "query": "{\"wei\": [\"club\"]}", + "query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}", "type": "change", "mask": 3, "field": "name", @@ -1785,7 +1797,7 @@ "wei", "bus" ], - "query": "[\"AND\", {\"wei\": [\"club\"]}, [\"OR\", {\"first_year\": false, \"club__weiclub__end_date__lte\": [\"today\"]}]]", + "query": "[\"AND\", {\"wei\": [\"club\"]}, [\"OR\", [\"NOT\", [\"membership\", \"registration\", \"first_year\"]], {\"wei__date_end__lte\": [\"today\"]}]]", "type": "view", "mask": 1, "field": "", @@ -1800,7 +1812,7 @@ "wei", "busteam" ], - "query": "[\"AND\", {\"wei\": [\"club\"]}, [\"OR\", {\"first_year\": false, \"club__weiclub__end_date__lte\": [\"today\"]}]]", + "query": "[\"AND\", {\"wei\": [\"club\"]}, [\"OR\", [\"NOT\", [\"membership\", \"registration\", \"first_year\"]], {\"wei__date_end__lte\": [\"today\"]}]]", "type": "view", "mask": 1, "field": "", @@ -1815,7 +1827,7 @@ "wei", "weimembership" ], - "query": "[\"AND\", {\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}, [\"OR\", {\"registration__soge_credit\": true}, {\"user__note__balance__gte\": [\"F\", \"fee\"]}]]", + "query": "[\"AND\", {\"club\": [\"club\"], \"club__weiclub__membership_end__gte\": [\"today\"]}, [\"OR\", {\"registration__soge_credit\": true}, {\"user__note__balance__gte\": [\"F\", \"fee\"]}]]", "type": "add", "mask": 3, "field": "", @@ -1830,7 +1842,7 @@ "wei", "weimembership" ], - "query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}", + "query": "{\"club\": [\"club\"], \"club__weiclub__membership_end__gte\": [\"today\"]}", "type": "change", "mask": 1, "field": "bus", @@ -1845,7 +1857,7 @@ "wei", "weimembership" ], - "query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}", + "query": "{\"club\": [\"club\"], \"club__weiclub__membership_end__gte\": [\"today\"]}", "type": "change", "mask": 1, "field": "team", @@ -1860,7 +1872,7 @@ "wei", "weimembership" ], - "query": "{\"wei\": [\"club\"]}", + "query": "{\"club\": [\"club\"]}", "type": "view", "mask": 1, "field": "", @@ -1875,7 +1887,7 @@ "wei", "weimembership" ], - "query": "[\"AND\", {\"user\": [\"user\"], \"wei\": [\"club\"]}, [\"OR\", {\"first_year\": false, \"club__weiclub__end_date__lte\": [\"today\"]}]]", + "query": "[\"AND\", {\"user\": [\"user\"], \"club\": [\"club\"]}, [\"OR\", {\"registration__first_year\": false, \"club__weiclub__date_end__lte\": [\"today\"]}]]", "type": "view", "mask": 1, "field": "", @@ -1890,7 +1902,7 @@ "wei", "weimembership" ], - "query": "{\"wei\": [\"club\"], \"bus\": [\"membership\", \"weimembership\", \"bus\"]}", + "query": "{\"club\": [\"club\"], \"bus\": [\"membership\", \"weimembership\", \"bus\"]}", "type": "view", "mask": 1, "field": "", @@ -1905,13 +1917,148 @@ "wei", "weimembership" ], - "query": "{\"wei\": [\"club\"], \"team\": [\"membership\", \"weimembership\", \"team\"]}", + "query": "{\"club\": [\"club\"], \"team\": [\"membership\", \"weimembership\", \"team\"]}", "type": "view", "mask": 1, "field": "", "description": "View the members of the team" } }, + { + "model": "permission.permission", + "pk": 117, + "fields": { + "model": [ + "wei", + "bus" + ], + "query": "{\"pk\": [\"membership\", \"bus\", \"pk\"], \"wei__date_end__gte\": [\"today\"]}", + "type": "change", + "mask": 1, + "field": "name", + "description": "Update the name of my bus" + } + }, + { + "model": "permission.permission", + "pk": 118, + "fields": { + "model": [ + "wei", + "bus" + ], + "query": "{\"pk\": [\"membership\", \"bus\", \"pk\"], \"wei__date_end__gte\": [\"today\"]}", + "type": "change", + "mask": 1, + "field": "description", + "description": "Update the description of my bus" + } + }, + { + "model": "permission.permission", + "pk": 119, + "fields": { + "model": [ + "wei", + "busteam" + ], + "query": "{\"bus\": [\"membership\", \"bus\"], \"wei__date_end__gte\": [\"today\"]}", + "type": "add", + "mask": 1, + "field": "", + "description": "Add a team to my bus" + } + }, + { + "model": "permission.permission", + "pk": 120, + "fields": { + "model": [ + "wei", + "busteam" + ], + "query": "{\"bus\": [\"membership\", \"bus\"], \"wei__date_end__gte\": [\"today\"]}", + "type": "change", + "mask": 1, + "field": "name", + "description": "Update the name of a team of my bus" + } + }, + { + "model": "permission.permission", + "pk": 121, + "fields": { + "model": [ + "wei", + "busteam" + ], + "query": "{\"bus\": [\"membership\", \"bus\"], \"wei__date_end__gte\": [\"today\"]}", + "type": "change", + "mask": 1, + "field": "color", + "description": "Update the color of a team of my bus" + } + }, + { + "model": "permission.permission", + "pk": 122, + "fields": { + "model": [ + "wei", + "busteam" + ], + "query": "{\"bus\": [\"membership\", \"bus\"], \"wei__date_end__gte\": [\"today\"]}", + "type": "change", + "mask": 1, + "field": "description", + "description": "Update the description of a team of my bus" + } + }, + { + "model": "permission.permission", + "pk": 123, + "fields": { + "model": [ + "wei", + "busteam" + ], + "query": "{\"pk\": [\"membership\", \"team\", \"pk\"], \"wei__date_end__gte\": [\"today\"]}", + "type": "change", + "mask": 1, + "field": "name", + "description": "Update the name of my team" + } + }, + { + "model": "permission.permission", + "pk": 124, + "fields": { + "model": [ + "wei", + "busteam" + ], + "query": "{\"pk\": [\"membership\", \"team\", \"pk\"], \"wei__date_end__gte\": [\"today\"]}", + "type": "change", + "mask": 1, + "field": "color", + "description": "Update the color of my team" + } + }, + { + "model": "permission.permission", + "pk": 125, + "fields": { + "model": [ + "wei", + "busteam" + ], + "query": "{\"pk\": [\"membership\", \"team\", \"pk\"], \"wei__date_end__gte\": [\"today\"]}", + "type": "change", + "mask": 1, + "field": "description", + "description": "Update the description of my team" + } + }, { "model": "permission.rolepermissions", "pk": 1, @@ -1952,21 +2099,12 @@ 16, 17, 18, - 97, - 99, - 101, 70, 108, 109, 78, 79, - 114, - 83, - 84, - 87, - 90, - 93, - 95 + 83 ] } }, @@ -2180,7 +2318,18 @@ 111, 112, 113, - 114 + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125 ] } }, @@ -2190,15 +2339,6 @@ "fields": { "role": 10, "permissions": [ - 32, - 33, - 56, - 58, - 55, - 57, - 52, - 53, - 54, 23, 24, 25, @@ -2207,7 +2347,16 @@ 28, 29, 30, - 31 + 31, + 32, + 33, + 52, + 53, + 54, + 55, + 56, + 57, + 58 ] } }, @@ -2267,7 +2416,12 @@ "fields": { "role": 13, "permissions": [ - 115 + 115, + 117, + 118, + 120, + 121, + 122 ] } }, @@ -2280,5 +2434,26 @@ 116 ] } + }, + { + "model": "permission.rolepermissions", + "pk": 16, + "fields": { + "role": 18, + "permissions": [ + 77, + 84, + 87, + 90, + 93, + 95, + 97, + 99, + 101, + 108, + 109, + 114 + ] + } } ] \ No newline at end of file diff --git a/apps/wei/views.py b/apps/wei/views.py index c6ac0aa8..c4423e8a 100644 --- a/apps/wei/views.py +++ b/apps/wei/views.py @@ -11,7 +11,7 @@ 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, Count -from django.db.models.functions import Lower +from django.db.models.functions.text import Lower from django.forms import HiddenInput from django.http import HttpResponse from django.shortcuts import redirect @@ -540,6 +540,9 @@ class WEIUpdateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Update model = WEIRegistration form_class = WEIRegistrationForm + def get_queryset(self, **kwargs): + return WEIRegistration.objects + def dispatch(self, request, *args, **kwargs): wei = self.get_object().wei today = date.today() @@ -702,7 +705,9 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Crea if "preferred_team_pk" in information and len(information["preferred_team_pk"]) == 1: form["team"].initial = Bus.objects.get(pk=information["preferred_team_pk"][0]) if "preferred_roles_pk" in information: - form["roles"].initial = WEIRole.objects.filter(pk__in=information["preferred_roles_pk"]).all() + form["roles"].initial = WEIRole.objects.filter( + Q(pk__in=information["preferred_roles_pk"]) | Q(name="Adhérent WEI") + ).all() return form def form_valid(self, form): @@ -749,7 +754,12 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, LoginRequiredMixin, Crea membership.roles.set(WEIRole.objects.filter(name="1A").all()) membership.save() - return super().form_valid(form) + ret = super().form_valid(form) + + membership.refresh_from_db() + membership.roles.add(WEIRole.objects.get("Adhérent WEI")) + + return ret def get_success_url(self): self.object.refresh_from_db() @@ -845,10 +855,11 @@ class MemberListRenderView(LoginRequiredMixin, View): qs = qs.filter(club__pk=self.kwargs["wei_pk"]).order_by( Lower('bus__name'), Lower('team__name'), - 'roles', + 'user__profile__promotion', Lower('user__last_name'), Lower('user__first_name'), - ).distinct() + 'id', + ) if "bus_pk" in self.kwargs: qs = qs.filter(bus__pk=self.kwargs["bus_pk"]) @@ -856,7 +867,7 @@ class MemberListRenderView(LoginRequiredMixin, View): if "team_pk" in self.kwargs: qs = qs.filter(team__pk=self.kwargs["team_pk"] if self.kwargs["team_pk"] else None) - return qs + return qs.distinct() def get(self, request, **kwargs): qs = self.get_queryset() diff --git a/templates/base.html b/templates/base.html index f2d0b3d1..56abd22f 100644 --- a/templates/base.html +++ b/templates/base.html @@ -106,12 +106,12 @@ SPDX-License-Identifier: GPL-3.0-or-later {% trans 'Activities' %} {% endif %} - {% if "treasury.invoice"|not_empty_model_change_list %} + {% if "treasury.invoice"|not_empty_model_list %} {% endif %} - {% if "wei.weiclub"|not_empty_model_change_list %} + {% if "wei.weiclub"|not_empty_model_list %} diff --git a/templates/wei/weilist_sample.tex b/templates/wei/weilist_sample.tex index 98fc9ee4..a2ff0755 100644 --- a/templates/wei/weilist_sample.tex +++ b/templates/wei/weilist_sample.tex @@ -30,7 +30,7 @@ {% for membership in memberships %} {{ membership.user.last_name|safe }} & {{ membership.user.first_name|safe }} & {{ membership.registration.birth_date|safe }} & {{ membership.registration.get_gender_display|safe }} & {{ membership.user.profile.section_generated|safe }} & {{ membership.bus.name|safe }} -& {% if membership.team %}{{ membership.team.name|safe }}{% else %}--{% endif %} & {{ membership.roles.all|join:", "|safe }} \\ +& {% if membership.team %}{{ membership.team.name|safe }}{% else %}--{% endif %} & {{ membership.roles.first|safe }} \\ {% endfor %} \end{tabularx} \end{center}