From 402fb8ab76002104acfe165dd1e7308ad82dfa93 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sun, 20 Mar 2022 16:03:18 +0100 Subject: [PATCH] Fix some bugs --- aleksis/apps/stoelindeling/forms.py | 11 +++++++++++ aleksis/apps/stoelindeling/managers.py | 4 ++-- aleksis/apps/stoelindeling/models.py | 4 +++- .../templates/stoelindeling/seating_plan/view.html | 2 +- aleksis/apps/stoelindeling/util/perms.py | 2 +- aleksis/apps/stoelindeling/views.py | 8 ++++++-- 6 files changed, 24 insertions(+), 7 deletions(-) diff --git a/aleksis/apps/stoelindeling/forms.py b/aleksis/apps/stoelindeling/forms.py index 8bae61c..e5f8c0e 100644 --- a/aleksis/apps/stoelindeling/forms.py +++ b/aleksis/apps/stoelindeling/forms.py @@ -4,6 +4,7 @@ from django_select2.forms import ModelSelect2Widget from material import Layout, Row from aleksis.core.mixins import ExtensibleForm +from aleksis.core.models import Group from .models import Seat, SeatingPlan @@ -17,6 +18,16 @@ class SeatingPlanCreateForm(forms.ModelForm): ) ) + def __init__(self, *args, **kwargs): + self.request = kwargs.pop("request") + super().__init__(*args, **kwargs) + + qs = Group.objects.all() + if not self.request.user.has_perm("stoelindeling.view_seatingplan"): + qs = qs.filter(owners=self.request.user.person) + + self.fields["group"].queryset = qs + class Meta: model = SeatingPlan fields = ["group", "subject", "room"] diff --git a/aleksis/apps/stoelindeling/managers.py b/aleksis/apps/stoelindeling/managers.py index 4854d49..e43aa64 100644 --- a/aleksis/apps/stoelindeling/managers.py +++ b/aleksis/apps/stoelindeling/managers.py @@ -20,8 +20,8 @@ class SeatQuerySet(QuerySet): start_y = aggr["y__min"] or 0 end_x = aggr["x__max"] or 0 end_y = aggr["y__max"] or 0 - width = max(10, end_x - start_x) - height = max(10, end_y - start_y) + width = max(3, end_x - start_x) + height = max(3, end_y - start_y) end_x = start_x + width end_y = start_y + height diff --git a/aleksis/apps/stoelindeling/models.py b/aleksis/apps/stoelindeling/models.py index 6726b3b..e87c2e1 100644 --- a/aleksis/apps/stoelindeling/models.py +++ b/aleksis/apps/stoelindeling/models.py @@ -11,7 +11,9 @@ class SeatingPlan(ExtensibleModel): """Seating plan model.""" group = models.ForeignKey(Group, on_delete=models.CASCADE, verbose_name=_("Group")) - subject = models.ForeignKey(Subject, on_delete=models.CASCADE, verbose_name=_("Subject")) + subject = models.ForeignKey( + Subject, on_delete=models.CASCADE, verbose_name=_("Subject"), blank=True, null=True + ) room = models.ForeignKey(Room, on_delete=models.CASCADE, verbose_name=_("Room")) def get_all_seats(self) -> SeatQuerySet: diff --git a/aleksis/apps/stoelindeling/templates/stoelindeling/seating_plan/view.html b/aleksis/apps/stoelindeling/templates/stoelindeling/seating_plan/view.html index 7baef78..f0c8b9a 100644 --- a/aleksis/apps/stoelindeling/templates/stoelindeling/seating_plan/view.html +++ b/aleksis/apps/stoelindeling/templates/stoelindeling/seating_plan/view.html @@ -1,7 +1,7 @@ {# -*- engine:django -*- #} {% extends "core/base.html" %} -{% load i18n static %} +{% load i18n static rules %} {% block browser_title %}{% blocktrans %}Seating plan{% endblocktrans %}{% endblock %} diff --git a/aleksis/apps/stoelindeling/util/perms.py b/aleksis/apps/stoelindeling/util/perms.py index eb0ed12..c55d09b 100644 --- a/aleksis/apps/stoelindeling/util/perms.py +++ b/aleksis/apps/stoelindeling/util/perms.py @@ -21,7 +21,7 @@ def get_allowed_seating_plans(user): user, "stoelindeling.view_seatingplan", SeatingPlan ).values_list("pk", flat=True) ) - | Q(owner=user.person) + | Q(group__owners=user.person) ) return qs diff --git a/aleksis/apps/stoelindeling/views.py b/aleksis/apps/stoelindeling/views.py index 4839132..51b7189 100644 --- a/aleksis/apps/stoelindeling/views.py +++ b/aleksis/apps/stoelindeling/views.py @@ -49,6 +49,11 @@ class SeatingPlanCreateView(PermissionRequiredMixin, AdvancedCreateView): success_url = reverse_lazy("seating_plans") success_message = _("The seating plan has been created.") + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs["request"] = self.request + return kwargs + @method_decorator(never_cache, name="dispatch") class SeatingPlanEditView(PermissionRequiredMixin, AdvancedEditView): @@ -58,7 +63,6 @@ class SeatingPlanEditView(PermissionRequiredMixin, AdvancedEditView): form_class = SeatingPlanForm permission_required = "stoelindeling.edit_seatingplan_rule" template_name = "stoelindeling/seating_plan/edit.html" - success_url = reverse_lazy("seating_plans") success_message = _("The seating plan has been saved.") def get_context_data(self, **kwargs): @@ -108,7 +112,7 @@ class SeatingPlanEditView(PermissionRequiredMixin, AdvancedEditView): Seat.objects.bulk_update(objects_to_update, ["x", "y", "seated"]) messages.success(self.request, _("The seating plan has been updated.")) - return redirect("edit_seating_plan", self.object.pk) + return redirect("seating_plan", self.object.pk) return super().form_invalid(form) -- GitLab