Skip to content
Snippets Groups Projects
Commit 438c6797 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch...

Merge branch '133-data-checks-are-also-marking-empty-personal-notes-and-lesson-documentations' into 'master'

Resolve "Data checks are also marking empty personal notes and lesson documentations"

Closes #133

See merge request !132
parents 70a648ac b84d3953
No related branches found
No related tags found
1 merge request!132Resolve "Data checks are also marking empty personal notes and lesson documentations"
Pipeline #5433 passed
......@@ -56,11 +56,15 @@ class NoPersonalNotesInCancelledLessonsDataCheck(DataCheck):
def check_data(cls):
from .models import PersonalNote
personal_notes = PersonalNote.objects.filter(
lesson_period__substitutions__cancelled=True,
lesson_period__substitutions__week=F("week"),
lesson_period__substitutions__year=F("year"),
).prefetch_related("lesson_period", "lesson_period__substitutions")
personal_notes = (
PersonalNote.objects.not_empty()
.filter(
lesson_period__substitutions__cancelled=True,
lesson_period__substitutions__week=F("week"),
lesson_period__substitutions__year=F("year"),
)
.prefetch_related("lesson_period", "lesson_period__substitutions")
)
for note in personal_notes:
logging.info(f"Check personal note {note}")
......@@ -119,9 +123,9 @@ 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 +159,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:
......
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=""))
......@@ -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()
......
......@@ -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",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment