Skip to content
Snippets Groups Projects
Commit d1465a0c authored by permcu's avatar permcu
Browse files

Change generate_full_register_printout to list of groups

parent 8d89bf54
No related branches found
No related tags found
1 merge request!422Resolve "Add export functionality to course book"
from typing import Optional from typing import Optional, List
from copy import deepcopy from copy import deepcopy
from datetime import date, timedelta from datetime import date, timedelta
...@@ -23,7 +23,7 @@ from .model_extensions import annotate_person_statistics_from_documentations ...@@ -23,7 +23,7 @@ from .model_extensions import annotate_person_statistics_from_documentations
@recorded_task @recorded_task
def generate_full_register_printout( def generate_full_register_printout(
group: int, groups: List[int],
file_object: int, file_object: int,
recorder: ProgressRecorder, recorder: ProgressRecorder,
include_cover: Optional[bool] = True, include_cover: Optional[bool] = True,
...@@ -61,14 +61,14 @@ def generate_full_register_printout( ...@@ -61,14 +61,14 @@ def generate_full_register_printout(
context = {} context = {}
_number_of_steps = 4 _number_of_steps = 5 + len(groups)
recorder.set_progress(1, _number_of_steps, _("Load data ...")) recorder.set_progress(1, _number_of_steps, _("Loading data ..."))
group = Group.objects.filter(pk=group) groups = Group.objects.filter(pk__in=groups).order_by("name")
if include_cover: if include_cover:
group = group.select_related("school_term") groups = groups.select_related("school_term")
if include_abbreviations or include_members_table: if include_abbreviations or include_members_table:
context["absence_reasons"] = AbsenceReason.objects.filter(tags__short_name="class_register", count_as_absent=True) context["absence_reasons"] = AbsenceReason.objects.filter(tags__short_name="class_register", count_as_absent=True)
...@@ -76,10 +76,10 @@ def generate_full_register_printout( ...@@ -76,10 +76,10 @@ def generate_full_register_printout(
context["extra_marks"] = ExtraMark.objects.all() context["extra_marks"] = ExtraMark.objects.all()
if include_members_table or include_person_overviews: if include_members_table or include_person_overviews:
group = group.prefetch_related("members") groups = groups.prefetch_related("members")
if include_teachers_and_subjects_table: if include_teachers_and_subjects_table:
group = group.prefetch_related( groups = groups.prefetch_related(
Prefetch("courses", queryset=Course.objects.select_related("subject")), Prefetch("courses", queryset=Course.objects.select_related("subject")),
"courses__teachers", "courses__teachers",
"child_groups", "child_groups",
...@@ -87,58 +87,63 @@ def generate_full_register_printout( ...@@ -87,58 +87,63 @@ def generate_full_register_printout(
"child_groups__courses__teachers", "child_groups__courses__teachers",
) )
group = group[0] recorder.set_progress(2, _number_of_steps, _("Loading groups ..."))
context["group"] = group
for i, group in enumerate(groups, start=1):
if include_members_table or include_person_overviews or include_coursebook:
documentations = Documentation.objects.filter( recorder.set_progress(2 + i, _number_of_steps, _(f"Loading group {group.short_name or group.name} ..."))
Q(datetime_start__date__gte=group.school_term.date_start)
& Q(datetime_end__date__lte=group.school_term.date_end) if include_members_table or include_person_overviews or include_coursebook:
& (Q(course__groups=group) | Q(course__groups__parent_groups=group)) documentations = Documentation.objects.filter(
) Q(datetime_start__date__gte=group.school_term.date_start)
& Q(datetime_end__date__lte=group.school_term.date_end)
if include_members_table or include_person_overviews: & (Q(course__groups=group) | Q(course__groups__parent_groups=group))
context["members"] = annotate_person_statistics_from_documentations(group.members.all(), documentations) )
if include_person_overviews: if include_members_table or include_person_overviews:
doc_query_set = Documentation.objects.select_related("subject").prefetch_related("teachers"), group.members_with_stats = annotate_person_statistics_from_documentations(group.members.all(), documentations)
context["members"] = context["members"].prefetch_related(
prefetch_notable_participations( if include_person_overviews:
prefetch_related=[ doc_query_set = Documentation.objects.select_related("subject").prefetch_related("teachers"),
Prefetch( group.members_with_stats = group.members_with_stats.prefetch_related(
"related_documentation", prefetch_notable_participations(
queryset=doc_query_set, prefetch_related=[
) Prefetch(
], "related_documentation",
), queryset=doc_query_set,
prefetch_personal_notes( )
"new_personal_notes", ],
prefetch_related=[ ),
Prefetch( prefetch_personal_notes(
"documentation", "new_personal_notes",
queryset=doc_query_set, prefetch_related=[
) Prefetch(
], "documentation",
), queryset=doc_query_set,
) )
],
if include_coursebook: ),
context["documentations_by_day"] = {} )
documentations = documentations.order_by("datetime_start").prefetch_related(
prefetch_notable_participations(select_related=["person"]), if include_coursebook:
prefetch_personal_notes("personal_notes", select_related=["person"]) group.documentations_by_day = {}
) documentations = documentations.order_by("datetime_start").prefetch_related(
for doc in documentations: prefetch_notable_participations(select_related=["person"]),
context["documentations_by_day"].setdefault(doc.datetime_start.date(), []).append(doc) prefetch_personal_notes("personal_notes", select_related=["person"])
)
recorder.set_progress(2, _number_of_steps, _("Generate template ...")) for doc in documentations:
group.documentations_by_day.setdefault(doc.datetime_start.date(), []).append(doc)
context["groups"] = groups
recorder.set_progress(3 + len(groups), _number_of_steps, _("Generating template ..."))
# TODO: Use render pdf instead # TODO: Use render pdf instead
file_object, result = generate_pdf_from_template( file_object, result = generate_pdf_from_template(
"alsijil/print/register_for_group.html", context, file_object=file_object "alsijil/print/register_for_group.html", context, file_object=file_object
) )
recorder.set_progress(3, _number_of_steps, _("Generate PDF ...")) recorder.set_progress(4 + len(groups), _number_of_steps, _("Generating PDF ..."))
with allow_join_result(): with allow_join_result():
result.wait() result.wait()
...@@ -146,4 +151,4 @@ def generate_full_register_printout( ...@@ -146,4 +151,4 @@ def generate_full_register_printout(
if not result.status == SUCCESS and file_object.file: if not result.status == SUCCESS and file_object.file:
raise Exception(_("PDF generation failed")) raise Exception(_("PDF generation failed"))
recorder.set_progress(4, _number_of_steps) recorder.set_progress(5 + len(groups), _number_of_steps)
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