Skip to content
Snippets Groups Projects
Verified Commit a4b9dfea authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Improve statistics builder

parent 6978f1c5
No related branches found
No related tags found
1 merge request!477Resolve "Add export functionality to absence statistics page"
Pipeline #195684 failed
......@@ -163,11 +163,9 @@ def generate_person_register_printout(
doc_query_set = Documentation.objects.select_related("subject").prefetch_related("teachers")
statistics = (
(
StatisticsBuilder(Person.objects.filter(id=person.id))
.use_from_school_term(school_term)
.annotate_statistics()
)
StatisticsBuilder(Person.objects.filter(id=person.id))
.use_from_school_term(school_term)
.annotate_statistics()
.prefetch_relevant_participations(documentation_with_details=doc_query_set)
.prefetch_relevant_personal_notes(documentation_with_details=doc_query_set)
.build()
......
......@@ -17,7 +17,7 @@ class BuilderError(Exception):
class StatisticsBuilder:
"""Builder class for building queries with annotated statistics on persons.
To build queries, you can combine one `use_` with multiple `annotate` or `prefetch`
To build queries, you can combine `use_` with multiple `annotate` or `prefetch`
methods. At the end, call `build` to get the actual queryset.
>>> StatisticsBuilder(person_qs).use_from_school_term(school_term).annotate_statistics().build()
......@@ -87,7 +87,7 @@ class StatisticsBuilder:
def _annotate_filtered_participations(self, condition: Q | None = None) -> "StatisticsBuilder":
"""Annotate a filtered relation for participations."""
if not self.participations_filter and not condition:
raise BuilderError
raise BuilderError("Annotation of participations needs a participation filter.")
self.qs = self.qs.annotate(
filtered_participation_statuses=FilteredRelation(
"participations",
......@@ -99,7 +99,7 @@ class StatisticsBuilder:
def _annotate_filtered_personal_notes(self, condition: Q | None = None) -> "StatisticsBuilder":
"""Annotate a filtered relation for personal notes."""
if not self.personal_notes_filter and not condition:
raise BuilderError
raise BuilderError("Annotation of personal notes needs a participation filter.")
self.qs = self.qs.annotate(
filtered_personal_notes=FilteredRelation(
"new_personal_notes",
......
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