From 91f784872cd8fb3551b367df3fcfbb7ce4cb0819 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Fri, 23 Oct 2020 09:50:12 +0200 Subject: [PATCH 1/5] Treasurers can update any roles, not only the BDE-related --- apps/permission/fixtures/initial.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/permission/fixtures/initial.json b/apps/permission/fixtures/initial.json index 6faaa11f..c8fbc94e 100644 --- a/apps/permission/fixtures/initial.json +++ b/apps/permission/fixtures/initial.json @@ -799,12 +799,12 @@ "member", "membership" ], - "query": "{\"club\": [\"club\"]}", + "query": "{}", "type": "change", "mask": 3, "field": "roles", "permanent": false, - "description": "Modifier les rôles d'un adhérent d'un club" + "description": "Modifier les rôles d'une adhésion" } }, { @@ -3402,7 +3402,6 @@ 135, 136, 137, - 138, 139, 140, 143, From f910feca9e0dd0699f620d3fe0ba9200a0d0c929 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Fri, 23 Oct 2020 13:17:07 +0200 Subject: [PATCH 2/5] PC Kfet can create and renew memberships --- apps/permission/fixtures/initial.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/permission/fixtures/initial.json b/apps/permission/fixtures/initial.json index c8fbc94e..ffd6d148 100644 --- a/apps/permission/fixtures/initial.json +++ b/apps/permission/fixtures/initial.json @@ -3427,10 +3427,18 @@ 26, 27, 30, + 50, + 55, + 56, + 57, + 58, + 143, 150, 166, 167, - 168 + 168, + 176, + 177 ] } }, From cb7f3c9f18ff8b8076498b1aef3c5cc229be7b18 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Fri, 23 Oct 2020 16:42:06 +0200 Subject: [PATCH 3/5] Note account can manage BDE memberships --- apps/member/templates/member/user_list.html | 2 +- apps/member/views.py | 7 ++++ apps/permission/fixtures/initial.json | 38 ++++++++++++++++++++- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/apps/member/templates/member/user_list.html b/apps/member/templates/member/user_list.html index a41d7e69..023aca16 100644 --- a/apps/member/templates/member/user_list.html +++ b/apps/member/templates/member/user_list.html @@ -5,7 +5,7 @@ SPDX-License-Identifier: GPL-3.0-or-later {% load i18n perms %} {% block content %} -{% if "member.change_profile_registration_valid"|has_perm:user %} +{% if can_manage_registrations %} {% trans "Registrations" %} diff --git a/apps/member/views.py b/apps/member/views.py index f736f47e..ed52e2a3 100644 --- a/apps/member/views.py +++ b/apps/member/views.py @@ -234,6 +234,13 @@ class UserListView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView): return qs + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + pre_registered_users = User.objects.filter(PermissionBackend.filter_queryset(self.request.user, User, "view"))\ + .filter(profile__registration_valid=False) + context["can_manage_registrations"] = pre_registered_users.exists() + return context + class ProfileAliasView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): """ diff --git a/apps/permission/fixtures/initial.json b/apps/permission/fixtures/initial.json index ffd6d148..8c7ec9bc 100644 --- a/apps/permission/fixtures/initial.json +++ b/apps/permission/fixtures/initial.json @@ -2807,6 +2807,38 @@ "description": "Voir ses propres alias, pour toujours" } }, + { + "model": "permission.permission", + "pk": 180, + "fields": { + "model": [ + "auth", + "user" + ], + "query": "{\"profile__registration_valid\": false}", + "type": "view", + "mask": 2, + "field": "", + "permanent": false, + "description": "Voir n'importe quel utilisateur non encore inscrit" + } + }, + { + "model": "permission.permission", + "pk": 181, + "fields": { + "model": [ + "member", + "profile" + ], + "query": "{\"registration_valid\": false}", + "type": "view", + "mask": 2, + "field": "", + "permanent": false, + "description": "Voir n'importe quel profil non encore inscrit" + } + }, { "model": "permission.role", "pk": 1, @@ -3422,11 +3454,13 @@ "name": "PC Kfet", "permissions": [ 6, + 22, 24, 25, 26, 27, 30, + 49, 50, 55, 56, @@ -3438,7 +3472,9 @@ 167, 168, 176, - 177 + 177, + 180, + 181 ] } }, From 6dc7604e9000f6912dcb9a4b200eab787df59999 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Fri, 23 Oct 2020 16:48:33 +0200 Subject: [PATCH 4/5] Alias were duplicated in profile alias list view --- apps/member/views.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/member/views.py b/apps/member/views.py index ed52e2a3..9a585ede 100644 --- a/apps/member/views.py +++ b/apps/member/views.py @@ -254,8 +254,8 @@ class ProfileAliasView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) note = context['object'].note - context["aliases"] = AliasTable(note.alias_set.filter(PermissionBackend - .filter_queryset(self.request.user, Alias, "view")).all()) + context["aliases"] = AliasTable( + note.alias_set.filter(PermissionBackend.filter_queryset(self.request.user, Alias, "view")).distinct().all()) context["can_create"] = PermissionBackend.check_perm(self.request.user, "note.add_alias", Alias( note=context["object"].note, name="", @@ -457,8 +457,8 @@ class ClubAliasView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) note = context['object'].note - context["aliases"] = AliasTable(note.alias_set.filter(PermissionBackend - .filter_queryset(self.request.user, Alias, "view")).all()) + context["aliases"] = AliasTable(note.alias_set.filter( + PermissionBackend.filter_queryset(self.request.user, Alias, "view")).distinct().all()) context["can_create"] = PermissionBackend.check_perm(self.request.user, "note.add_alias", Alias( note=context["object"].note, name="", From 224a0fdd8c644bc437dcf4429d30ce1c9c91140a Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Fri, 23 Oct 2020 16:55:33 +0200 Subject: [PATCH 5/5] SpecialTransactionProxy are force-saved --- apps/treasury/apps.py | 4 +++- apps/treasury/signals.py | 11 +++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/treasury/apps.py b/apps/treasury/apps.py index e2873ea2..f3fbe092 100644 --- a/apps/treasury/apps.py +++ b/apps/treasury/apps.py @@ -28,6 +28,8 @@ class TreasuryConfig(AppConfig): source__in=NoteSpecial.objects.filter(~Q(remittancetype=None)), specialtransactionproxy=None, ): - SpecialTransactionProxy.objects.create(transaction=transaction, remittance=None) + proxy = SpecialTransactionProxy(transaction=transaction, remittance=None) + proxy._force_save = True + proxy.save() post_migrate.connect(setup_specialtransactions_proxies, sender=SpecialTransactionProxy) diff --git a/apps/treasury/signals.py b/apps/treasury/signals.py index f08540d1..5604b3c1 100644 --- a/apps/treasury/signals.py +++ b/apps/treasury/signals.py @@ -10,9 +10,8 @@ def save_special_transaction(instance, created, **kwargs): """ if not hasattr(instance, "_no_signal"): - if instance.is_credit(): - if created and RemittanceType.objects.filter(note=instance.source).exists(): - SpecialTransactionProxy.objects.create(transaction=instance, remittance=None).save() - else: - if created and RemittanceType.objects.filter(note=instance.destination).exists(): - SpecialTransactionProxy.objects.create(transaction=instance, remittance=None).save() + if created and RemittanceType.objects.filter( + note=instance.source if instance.is_credit() else instance.destination).exists(): + proxy = SpecialTransactionProxy(transaction=instance, remittance=None) + proxy._force_save = True + proxy.save()