diff --git a/apps/member/views.py b/apps/member/views.py index fac8bfc6..6ce8d4c5 100644 --- a/apps/member/views.py +++ b/apps/member/views.py @@ -18,7 +18,7 @@ from django.views.generic import DetailView, UpdateView, TemplateView from django.views.generic.edit import FormMixin from django_tables2.views import SingleTableView from rest_framework.authtoken.models import Token -from note.models import Alias, NoteUser +from note.models import Alias, NoteUser, NoteClub from note.models.transactions import Transaction, SpecialTransaction from note.tables import HistoryTable, AliasTable from note_kfet.middlewares import _set_current_request @@ -174,7 +174,7 @@ class UserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): modified_note = NoteUser.objects.get(pk=user.note.pk) # Don't log these tests modified_note._no_signal = True - modified_note.is_active = True + modified_note.is_active = False modified_note.inactivity_reason = 'manual' context["can_lock_note"] = user.note.is_active and PermissionBackend\ .check_perm(self.request, "note.change_noteuser_is_active", modified_note) @@ -183,14 +183,14 @@ class UserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): modified_note._force_save = True modified_note.save() context["can_force_lock"] = user.note.is_active and PermissionBackend\ - .check_perm(self.request, "note.change_note_is_active", modified_note) + .check_perm(self.request, "note.change_noteuser_is_active", modified_note) old_note._force_save = True old_note._no_signal = True old_note.save() modified_note.refresh_from_db() modified_note.is_active = True context["can_unlock_note"] = not user.note.is_active and PermissionBackend\ - .check_perm(self.request, "note.change_note_is_active", modified_note) + .check_perm(self.request, "note.change_noteuser_is_active", modified_note) return context @@ -404,9 +404,12 @@ class ClubDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): """ context = super().get_context_data(**kwargs) - club = context["club"] + club = self.object + context["note"] = club.note + if PermissionBackend.check_perm(self.request, "member.change_club_membership_start", club): club.update_membership_dates() + # managers list managers = Membership.objects.filter(club=self.object, roles__name="Bureau de club", date_start__lte=date.today(), date_end__gte=date.today())\ @@ -444,6 +447,29 @@ class ClubDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): context["can_add_members"] = PermissionBackend()\ .has_perm(self.request.user, "member.add_membership", empty_membership) + # Check permissions to see if the authenticated user can lock/unlock the note + with transaction.atomic(): + modified_note = NoteClub.objects.get(pk=club.note.pk) + # Don't log these tests + modified_note._no_signal = True + modified_note.is_active = False + modified_note.inactivity_reason = 'manual' + context["can_lock_note"] = club.note.is_active and PermissionBackend \ + .check_perm(self.request, "note.change_noteclub_is_active", modified_note) + old_note = NoteClub.objects.select_for_update().get(pk=club.note.pk) + modified_note.inactivity_reason = 'forced' + modified_note._force_save = True + modified_note.save() + context["can_force_lock"] = club.note.is_active and PermissionBackend \ + .check_perm(self.request, "note.change_noteclub_is_active", modified_note) + old_note._force_save = True + old_note._no_signal = True + old_note.save() + modified_note.refresh_from_db() + modified_note.is_active = True + context["can_unlock_note"] = not club.note.is_active and PermissionBackend \ + .check_perm(self.request, "note.change_noteclub_is_active", modified_note) + return context diff --git a/apps/note/tables.py b/apps/note/tables.py index 1efd5c38..2cfbcc76 100644 --- a/apps/note/tables.py +++ b/apps/note/tables.py @@ -198,14 +198,15 @@ class ButtonTable(tables.Table): ) hideshow = tables.Column( - verbose_name= _("Hide/Show"), - accessor="pk", - attrs= { - 'td': { - 'class': 'col-sm-1', - 'id': lambda record: "hideshow_" + str(record.pk), - } - }) + verbose_name=_("Hide/Show"), + accessor="pk", + attrs={ + 'td': { + 'class': 'col-sm-1', + 'id': lambda record: "hideshow_" + str(record.pk), + } + }, + ) delete_col = tables.TemplateColumn(template_code=DELETE_TEMPLATE, extra_context={"delete_trans": _('delete')}, diff --git a/apps/permission/fixtures/initial.json b/apps/permission/fixtures/initial.json index 42fe3b57..ee62cf18 100644 --- a/apps/permission/fixtures/initial.json +++ b/apps/permission/fixtures/initial.json @@ -2511,7 +2511,7 @@ "note", "noteuser" ], - "query": "[\"AND\", {\"user\": [\"user\"]}, [\"OR\", {\"inactivity_reason\": \"manual\"}, {\"inactivity_reason\": null}]]", + "query": "[\"AND\", {\"user\": [\"user\"]}, [\"OR\", {\"inactivity_reason\": \"manual\"}, {\"is_active\": true}]]", "type": "change", "mask": 1, "field": "is_active", @@ -2527,7 +2527,7 @@ "note", "noteuser" ], - "query": "[\"AND\", {\"user\": [\"user\"]}, [\"OR\", {\"inactivity_reason\": \"manual\"}, {\"inactivity_reason\": null}]]", + "query": "[\"AND\", {\"user\": [\"user\"]}, [\"OR\", {\"inactivity_reason\": \"manual\"}, {\"is_active\": true}]]", "type": "change", "mask": 1, "field": "inactivity_reason", @@ -2871,6 +2871,38 @@ "description": "Changer l'image de n'importe quelle note" } }, + { + "model": "permission.permission", + "pk": 184, + "fields": { + "model": [ + "note", + "noteclub" + ], + "query": "[\"AND\", {\"club\": [\"club\"]}, [\"OR\", {\"inactivity_reason\": \"manual\"}, {\"is_active\": true}]]", + "type": "change", + "mask": 3, + "field": "is_active", + "permanent": true, + "description": "(Dé)bloquer la note de son club manuellement" + } + }, + { + "model": "permission.permission", + "pk": 185, + "fields": { + "model": [ + "note", + "noteclub" + ], + "query": "[\"AND\", {\"club\": [\"club\"]}, [\"OR\", {\"inactivity_reason\": \"manual\"}, {\"is_active\": true}]]", + "type": "change", + "mask": 3, + "field": "inactivity_reason", + "permanent": true, + "description": "(Dé)bloquer la note de son club et indiquer que cela a été fait manuellement" + } + }, { "model": "permission.role", "pk": 1, @@ -3010,7 +3042,9 @@ 166, 167, 168, - 182 + 182, + 184, + 185 ] } }, @@ -3278,7 +3312,9 @@ 180, 181, 182, - 183 + 183, + 184, + 185 ] } },