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

Support events and extra lessons in full register printout

parent b0572970
No related branches found
No related tags found
1 merge request!120Resolve "Support events and extra lessons in class register"
Pipeline #5869 passed
......@@ -317,14 +317,26 @@
<tbody>
{% for note in person.personal_notes.all %}
{% if note.lesson_period in lesson_periods %}
{% if note.register_object in register_objects %}
{% if note.absent or note.late or note.remarks or note.extra_marks.all %}
{% weekday_to_date note.calendar_week note.lesson_period.period.weekday as note_date %}
<tr>
<td>{{ note_date }}</td>
<td>{{ note.lesson_period.period.period }}</td>
<td>{{ note.lesson_period.get_subject.short_name }} </td>
<td>{{ note.lesson_period.get_teachers.first.short_name }}</td>
{% if note.date %}
<td>{{ note.date }}</td>
<td>{{ note.register_object.period.period }}</td>
{% else %}
<td colspan="2">
{{ note.register_object.date_start }} {{ note.register_object.period_from.period }}.–{{ note.register_object.date_end }}
{{ note.register_object.period_to.period }}.
</td>
{% endif %}
<td>
{% if note.register_object.label_ != "event" %}
{{ note.register_object.get_subject.short_name }}
{% else %}
{% trans "Event" %}
{% endif %}
</td>
<td>{{ note.register_object.teacher_short_names }}</td>
<td>
{% if note.absent %}
{% trans 'Yes' %}
......@@ -376,8 +388,8 @@
</thead>
<tbody>
{% for day in week %}
{% with periods_by_day|get_dict:day as periods %}
{% for period, documentations, notes, substitution in periods %}
{% with register_objects_by_day|get_dict:day as register_objects %}
{% for register_object, documentations, notes, substitution in register_objects %}
<tr class="
{% if substitution %}
{% if substitution.cancelled %}
......@@ -391,18 +403,28 @@
{% endif %}
">
{% if forloop.first %}
<th rowspan="{{ periods|length }}" class="lessons-day-head">{{ day }}</th>
<th rowspan="{{ register_objects|length }}" class="lessons-day-head">{{ day }}</th>
{% endif %}
<td class="lesson-pe">{{ period.period.period }}</td>
<td class="lesson-pe">
{% if register_object.label_ != "event" %}
{{ register_object.period.period }}
{% else %}
{{ register_object.period_from_on_day }}.–{{ register_object.period_to_on_day }}.
{% endif %}
</td>
<td class="lesson-subj">
{% if substitution %}
{% if register_object.label_ == "event" %}
<strong>{% trans "Event" %}</strong>
{% elif substitution %}
{% include "chronos/partials/subs/subject.html" with type="substitution" el=substitution %}
{% else %}
{% include "chronos/partials/subject.html" with subject=period.lesson.subject %}
{% include "chronos/partials/subject.html" with subject=register_object.get_subject %}
{% endif %}
</td>
<td class="lesson-topic">
{% if substitution.cancelled %}
{% if register_object.label_ == "event" %}
{{ register_object.title }}: {{ documentations.0.topic }}
{% elif substitution.cancelled %}
{% trans 'Lesson cancelled' %}
{% else %}
{{ documentations.0.topic }}
......@@ -453,7 +475,7 @@
</td>
<td class="lesson-te">
{% if documentations.0.topic %}
{{ substitution.teachers.first.short_name|default:period.lesson.teachers.first.short_name }}
{{ substitution.teachers.first.short_name|default:register_object.get_teachers.first.short_name }}
{% endif %}
</td>
</tr>
......
......@@ -493,10 +493,59 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
"personal_notes__groups_of_person",
)
)
events = (
Event.objects.filter_group(group)
.distinct()
.prefetch_related(
"documentations",
"personal_notes",
"personal_notes__excuse_type",
"personal_notes__extra_marks",
"personal_notes__person",
"personal_notes__groups_of_person",
)
)
extra_lessons = (
ExtraLesson.objects.filter_group(group)
.distinct()
.prefetch_related(
"documentations",
"personal_notes",
"personal_notes__excuse_type",
"personal_notes__extra_marks",
"personal_notes__person",
"personal_notes__groups_of_person",
)
)
weeks = CalendarWeek.weeks_within(group.school_term.date_start, group.school_term.date_end)
register_objects_by_day = {}
for extra_lesson in extra_lessons:
day = extra_lesson.date
register_objects_by_day.setdefault(day, []).append(
(
extra_lesson,
list(extra_lesson.documentations.all()),
list(extra_lesson.personal_notes.all()),
None,
)
)
weeks = CalendarWeek.weeks_within(group.school_term.date_start, group.school_term.date_end,)
for event in events:
day_number = (event.date_end - event.date_start).days + 1
for i in range(day_number):
day = event.date_start + timedelta(days=i)
event_copy = deepcopy(event)
event_copy.annotate_day(day)
register_objects_by_day.setdefault(day, []).append(
(
event_copy,
list(event_copy.documentations.all()),
list(event_copy.personal_notes.all()),
None,
)
)
periods_by_day = {}
for lesson_period in lesson_periods:
for week in weeks:
day = week[lesson_period.period.weekday]
......@@ -520,7 +569,7 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
)
substitution = lesson_period.get_substitution(week)
periods_by_day.setdefault(day, []).append(
register_objects_by_day.setdefault(day, []).append(
(lesson_period, documentations, notes, substitution)
)
......@@ -543,8 +592,8 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
context["extra_marks"] = ExtraMark.objects.all()
context["group"] = group
context["weeks"] = weeks
context["periods_by_day"] = periods_by_day
context["lesson_periods"] = lesson_periods
context["register_objects_by_day"] = register_objects_by_day
context["register_objects"] = list(lesson_periods) + list(events) + list(extra_lessons)
context["today"] = date.today()
context["lessons"] = (
group.lessons.all()
......
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