diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py index 9624e5208e614319527a95b33feae1fea4e84b6b..d518f49c61be2f840547813b6ba57b0a2a603cc2 100644 --- a/aleksis/apps/alsijil/forms.py +++ b/aleksis/apps/alsijil/forms.py @@ -5,7 +5,6 @@ from django.core.exceptions import ValidationError from django.db.models import Count, Q from django.utils.translation import gettext_lazy as _ -from django_global_request.middleware import get_request from django_select2.forms import Select2Widget from guardian.shortcuts import get_objects_for_user from material import Fieldset, Layout, Row @@ -75,8 +74,8 @@ class SelectForm(forms.Form): data["instance"] = instance return data - def __init__(self, *args, **kwargs): - self.request = get_request() + def __init__(self, request, *args, **kwargs): + self.request = request super().__init__(*args, **kwargs) person = self.request.user.person @@ -138,7 +137,6 @@ class RegisterAbsenceForm(forms.Form): remarks = forms.CharField(label=_("Remarks"), max_length=30, required=False) def __init__(self, *args, **kwargs): - self.request = get_request() super().__init__(*args, **kwargs) period_choices = TimePeriod.period_choices diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py index 4501a8cc2cbe95cb302c88603bcdbca5b80cb74c..fdd05fd4bf3a867c98914b17ace921c65ffe052b 100644 --- a/aleksis/apps/alsijil/model_extensions.py +++ b/aleksis/apps/alsijil/model_extensions.py @@ -5,10 +5,7 @@ from django.db.models import Exists, OuterRef, Q, QuerySet from django.db.models.aggregates import Count, Sum from django.utils.translation import gettext as _ -import reversion from calendarweek import CalendarWeek -from django_global_request.middleware import get_request -from reversion import set_user from aleksis.apps.chronos.models import LessonPeriod from aleksis.core.models import Group, Person @@ -63,31 +60,25 @@ def mark_absent( if sub and sub.cancelled: continue - with reversion.create_revision(): - set_user(get_request().user) - personal_note, created = ( - PersonalNote.objects.select_related(None) - .prefetch_related(None) - .update_or_create( - person=self, - lesson_period=lesson_period, - week=wanted_week.week, - year=wanted_week.year, - defaults={ - "absent": absent, - "excused": excused, - "excuse_type": excuse_type, - }, - ) + personal_note, created = ( + PersonalNote.objects.select_related(None) + .prefetch_related(None) + .update_or_create( + person=self, + lesson_period=lesson_period, + week=wanted_week.week, + year=wanted_week.year, + defaults={"absent": absent, "excused": excused, "excuse_type": excuse_type,}, ) - personal_note.groups_of_person.set(self.member_of.all()) - - if remarks: - if personal_note.remarks: - personal_note.remarks += "; %s" % remarks - else: - personal_note.remarks = remarks - personal_note.save() + ) + personal_note.groups_of_person.set(self.member_of.all()) + + if remarks: + if personal_note.remarks: + personal_note.remarks += "; %s" % remarks + else: + personal_note.remarks = remarks + personal_note.save() return lesson_periods.count() diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index 170978aad3e22983357f7bf0facaf9031f421ad4..2b49259d926ae956a7ee48d53529f8632d99edca 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -1,3 +1,4 @@ +from contextlib import nullcontext from datetime import date, datetime, timedelta from typing import Optional @@ -153,14 +154,16 @@ def lesson( instances = personal_note_formset.save() # Iterate over personal notes and carry changed absences to following lessons - for instance in instances: - instance.person.mark_absent( - wanted_week[lesson_period.period.weekday], - lesson_period.period.period + 1, - instance.absent, - instance.excused, - instance.excuse_type, - ) + with reversion.create_revision(): + reversion.set_user(request.user) + for instance in instances: + instance.person.mark_absent( + wanted_week[lesson_period.period.weekday], + lesson_period.period.period + 1, + instance.absent, + instance.excused, + instance.excuse_type, + ) messages.success(request, _("The personal notes have been saved.")) @@ -223,7 +226,7 @@ def week_view( initial = {type_.value: instance} else: initial = {} - select_form = SelectForm(request.POST or None, initial=initial) + select_form = SelectForm(request, request.POST or None, initial=initial) if request.method == "POST": if select_form.is_valid(): @@ -724,16 +727,17 @@ def register_absence(request: HttpRequest, id_: int) -> HttpResponse: if holiday: continue - affected_count += person.mark_absent( - day, - from_period_on_day, - absent, - excused, - excuse_type, - remarks, - to_period_on_day, - dry_run=not confirmed, - ) + with reversion.create_revision() if confirmed else nullcontext(): + affected_count += person.mark_absent( + day, + from_period_on_day, + absent, + excused, + excuse_type, + remarks, + to_period_on_day, + dry_run=not confirmed, + ) if not confirmed: # Show confirmation page