From 0a6ddfe2cbe198e00e1005b8e38c2abd0e326d96 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Fri, 22 Jan 2021 21:53:34 +0100 Subject: [PATCH] Add query sets for personal notes and lesson documentations with not_empty query method --- aleksis/apps/alsijil/data_checks.py | 8 ++------ aleksis/apps/alsijil/managers.py | 21 +++++++++++++++++++++ aleksis/apps/alsijil/models.py | 11 +++++++++-- aleksis/apps/alsijil/views.py | 8 +++----- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/aleksis/apps/alsijil/data_checks.py b/aleksis/apps/alsijil/data_checks.py index 98decd9aa..cfb727fba 100644 --- a/aleksis/apps/alsijil/data_checks.py +++ b/aleksis/apps/alsijil/data_checks.py @@ -119,9 +119,7 @@ class LessonDocumentationOnHolidaysDataCheck(DataCheck): holidays = Holiday.objects.all() - documentations = LessonDocumentation.objects.filter( - ~Q(topic="") | ~Q(group_note="") | ~Q(homework="") - ).annotate(actual_date=weekday_to_date) + documentations = LessonDocumentation.objects.not_empty().annotate(actual_date=weekday_to_date) q = Q() for holiday in holidays: @@ -155,9 +153,7 @@ class PersonalNoteOnHolidaysDataCheck(DataCheck): holidays = Holiday.objects.all() - personal_notes = PersonalNote.objects.filter( - ~Q(remarks="") | Q(absent=True) | ~Q(late=0) | Q(extra_marks__isnull=False) - ).annotate(actual_date=weekday_to_date) + personal_notes = PersonalNote.objects.not_empty().annotate(actual_date=weekday_to_date) q = Q() for holiday in holidays: diff --git a/aleksis/apps/alsijil/managers.py b/aleksis/apps/alsijil/managers.py index b2589345a..7350cf375 100644 --- a/aleksis/apps/alsijil/managers.py +++ b/aleksis/apps/alsijil/managers.py @@ -1,3 +1,6 @@ +from django.db.models import QuerySet +from django.db.models.query_utils import Q + from aleksis.core.managers import CurrentSiteManagerWithoutMigrations @@ -21,3 +24,21 @@ class PersonalNoteManager(CurrentSiteManagerWithoutMigrations): ) .prefetch_related("extra_marks") ) + + +class PersonalNoteQuerySet(QuerySet): + def not_empty(self): + """Get all not empty personal notes.""" + return self.filter( + ~Q(remarks="") | Q(absent=True) | ~Q(late=0) | Q(extra_marks__isnull=False) + ) + + +class LessonDocumentationManager(CurrentSiteManagerWithoutMigrations): + pass + + +class LessonDocumentationQuerySet(QuerySet): + def not_empty(self): + """Get all not empty lesson documentations.""" + return self.filter(~Q(topic="") | ~Q(group_note="") | ~Q(homework="")) diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index 310232985..5a41074b7 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -12,7 +12,12 @@ from aleksis.apps.alsijil.data_checks import ( NoPersonalNotesInCancelledLessonsDataCheck, PersonalNoteOnHolidaysDataCheck, ) -from aleksis.apps.alsijil.managers import PersonalNoteManager +from aleksis.apps.alsijil.managers import ( + LessonDocumentationManager, + LessonDocumentationQuerySet, + PersonalNoteManager, + PersonalNoteQuerySet, +) from aleksis.apps.chronos.mixins import WeekRelatedMixin from aleksis.apps.chronos.models import LessonPeriod from aleksis.apps.chronos.util.date import get_current_year @@ -60,7 +65,7 @@ class PersonalNote(ExtensibleModel, WeekRelatedMixin): ExcusesWithoutAbsences, ] - objects = PersonalNoteManager() + objects = PersonalNoteManager.from_queryset(PersonalNoteQuerySet)() person = models.ForeignKey("core.Person", models.CASCADE, related_name="personal_notes") groups_of_person = models.ManyToManyField("core.Group", related_name="+") @@ -138,6 +143,8 @@ class LessonDocumentation(ExtensibleModel, WeekRelatedMixin): Non-personal, includes the topic and homework of the lesson. """ + objects = LessonDocumentationManager.from_queryset(LessonDocumentationQuerySet)() + data_checks = [LessonDocumentationOnHolidaysDataCheck] week = models.IntegerField() diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index d5bbf0614..170978aad 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -407,7 +407,7 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse: .prefetch_related( "lesson_period__substitutions", "lesson_period__lesson__teachers", "groups_of_person" ) - .filter(~Q(remarks="") | Q(absent=True) | ~Q(late=0) | Q(extra_marks__isnull=False)) + .not_empty() .filter( Q(lesson_period__lesson__groups=group) | Q(lesson_period__lesson__groups__parent_groups=group) @@ -415,7 +415,7 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse: ) documentations = ( LessonDocumentation.objects.select_related("lesson_period") - .filter(~Q(topic="") | ~Q(group_note="") | ~Q(homework="")) + .not_empty() .filter( Q(lesson_period__lesson__groups=group) | Q(lesson_period__lesson__groups__parent_groups=group) @@ -625,9 +625,7 @@ def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResp unexcused_absences = allowed_personal_notes.filter(absent=True, excused=False) context["unexcused_absences"] = unexcused_absences - personal_notes = allowed_personal_notes.filter( - Q(absent=True) | Q(late__gt=0) | ~Q(remarks="") | Q(extra_marks__isnull=False) - ).order_by( + personal_notes = allowed_personal_notes.not_empty().order_by( "-lesson_period__lesson__validity__date_start", "-week", "lesson_period__period__weekday", -- GitLab