Skip to content

Commit

Permalink
Fix DoesNotExist Error on Working Hour views (#964)
Browse files Browse the repository at this point in the history
* refactor WorkingHoursPermissionMixin

* show upcoming own working hours
  • Loading branch information
felixrindt authored Jun 2, 2023
1 parent b3af341 commit 45d077e
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 17 deletions.
1 change: 0 additions & 1 deletion ephios/core/forms/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,6 @@ class Meta:
fields = ["date", "hours", "reason"]

def __init__(self, *args, **kwargs):
self.request = kwargs.pop("request")
self.can_grant = kwargs.pop("can_grant", False)
self.user = kwargs.pop("user")
super().__init__(*args, **kwargs)
Expand Down
2 changes: 1 addition & 1 deletion ephios/core/models/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ def get_workhour_items(self):
from ephios.core.models import AbstractParticipation

participations = (
self.participations.filter(state=AbstractParticipation.States.CONFIRMED, finished=True)
self.participations.filter(state=AbstractParticipation.States.CONFIRMED)
.annotate(
duration=ExpressionWrapper(
(F("end_time") - F("start_time")),
Expand Down
30 changes: 15 additions & 15 deletions ephios/core/views/workinghour.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from django.contrib.auth.models import Group
from django.contrib.messages.views import SuccessMessageMixin
from django.db.models import DurationField, ExpressionWrapper, F, Sum
from django.shortcuts import redirect
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
from django.utils.translation import gettext as _
from django.views.generic import DeleteView, DetailView, FormView, TemplateView, UpdateView
Expand All @@ -25,15 +25,17 @@
class WorkingHourPermissionMixin:
def setup(self, request, *args, **kwargs):
result = super().setup(request, *args, **kwargs)
self.target_user = self._get_target_user(request, *args, **kwargs)
grant_ids = get_objects_for_user(
can_grant_for_group_ids = get_objects_for_user(
self.request.user, "decide_workinghours_for_group", klass=Group
).values_list("id", flat=True)
self.can_grant = self.target_user.groups.filter(id__in=grant_ids).exists()
self.can_grant = (
self._get_target_user().groups.filter(id__in=can_grant_for_group_ids).exists()
)
return result

def _get_target_user(self, request, *args, **kwargs):
return kwargs.get("target_user", UserProfile.objects.get(pk=self.kwargs["pk"]))
def _get_target_user(self):
"""Return the working hour user"""
return get_object_or_404(UserProfile, pk=self.kwargs["pk"])


class DateFilterForm(forms.Form):
Expand Down Expand Up @@ -143,7 +145,6 @@ class WorkingHourRequestView(LoginRequiredMixin, FormView):
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs["user"] = self.request.user
kwargs["request"] = self.request
return kwargs

def form_valid(self, form):
Expand All @@ -161,7 +162,7 @@ def has_permission(self):
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs["can_grant"] = True
kwargs["user"] = UserProfile.objects.get(pk=self.kwargs["pk"])
kwargs["user"] = self._get_target_user()
return kwargs

def form_valid(self, form):
Expand All @@ -176,9 +177,6 @@ class WorkingHourUpdateView(WorkingHourPermissionMixin, CustomPermissionRequired
model = WorkingHours
form_class = WorkingHourRequestForm

def _get_target_user(self, request, *args, **kwargs):
return WorkingHours.objects.get(pk=self.kwargs["pk"]).user

def has_permission(self):
return self.can_grant

Expand All @@ -187,11 +185,13 @@ def get_success_url(self):

def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs["user"] = self.target_user
kwargs["request"] = self.request
kwargs["user"] = self.object.user
kwargs["can_grant"] = True
return kwargs

def _get_target_user(self):
return get_object_or_404(WorkingHours, pk=self.kwargs["pk"]).user


class WorkingHourDeleteView(
WorkingHourPermissionMixin, CustomPermissionRequiredMixin, SuccessMessageMixin, DeleteView
Expand All @@ -200,8 +200,8 @@ class WorkingHourDeleteView(
model = WorkingHours
success_message = _("Working hours have been deleted.")

def _get_target_user(self, request, *args, **kwargs):
return WorkingHours.objects.get(pk=self.kwargs["pk"]).user
def _get_target_user(self):
return get_object_or_404(WorkingHours, pk=self.kwargs["pk"]).user

def has_permission(self):
return self.can_grant
Expand Down

0 comments on commit 45d077e

Please sign in to comment.