diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/person_overview.html b/aleksis/apps/alsijil/templates/alsijil/partials/person_overview.html new file mode 100644 index 0000000000000000000000000000000000000000..f9f533c84e1682e5bc710025a4d22e12674e79bf --- /dev/null +++ b/aleksis/apps/alsijil/templates/alsijil/partials/person_overview.html @@ -0,0 +1,160 @@ +<h4>{% trans 'Personal overview' %}: {{ person.last_name }}, {{ person.first_name }}</h4> + +<h5>{% blocktrans %}Contact details{% endblocktrans %}</h5> +<table class="person-info"> + <tr> + <td rowspan="6" class="person-img"> + {% if person.photo %} + <img src="{{ person.photo.url }}" alt="{{ person.first_name }} {{ person.last_name }}"/> + {% else %} + <img src="{% static 'img/fallback.png' %}" alt="{{ person.first_name }} {{ person.last_name }}"/> + {% endif %} + </td> + <td><i class="material-icons iconify" data-icon="mdi:account-outline"></i></td> + <td colspan="2">{{ person.first_name }} {{ person.additional_name }} {{ person.last_name }}</td> + </tr> + <tr> + <td><i class="material-icons iconify" data-icon="mdi:human-non-binary"></i></td> + <td colspan="2">{{ person.get_sex_display }}</td> + </tr> + <tr> + <td><i class="material-icons iconify" data-icon="mdi:map-marker-outline"></i></td> + <td>{{ person.street }} {{ person.housenumber }}</td> + <td>{{ person.postal_code }} {{ person.place }}</td> + </tr> + <tr> + <td><i class="material-icons iconify" data-icon="mdi:phone-outline"></i></td> + <td>{{ person.phone_number }}</td> + <td>{{ person.mobile_number }}</td> + </tr> + <tr> + <td><i class="material-icons iconify" data-icon="mdi:email-outline"></i></td> + <td colspan="2">{{ person.email }}</td> + </tr> + <tr> + <td><i class="material-icons iconify" data-icon="mdi:cake"></i></td> + <td colspan="2">{{ person.date_of_birth|date }}</td> + </tr> +</table> + +<div class="row"> + <div class="col s6"> + <h5>{% trans 'Absences and tardiness' %}</h5> + <table> + <tr> + <th colspan="3">{% trans 'Absences' %}</th> + <td>{{ person.absences_count }}</td> + </tr> + <tr> + <td rowspan="{{ excuse_types.count|add:3 }}" style="width: 16mm;" + class="rotate small-print">{% trans "thereof" %}</td> + <th colspan="2">{% trans 'Excused' %}</th> + <td>{{ person.excused }}</td> + </tr> + <tr> + <td rowspan="{{ excuse_types.count|add:1 }}" style="width: 16mm;" + class="rotate small-print">{% trans "thereof" %}</td> + <th>{% trans "Without excuse type" %}</th> + <td>{{ person.excused_without_excuse_type }}</td> + </tr> + {% for excuse_type in excuse_types %} + <tr> + <th>{{ excuse_type.name }}</th> + <td>{{ person|get_dict:excuse_type.count_label }}</td> + </tr> + {% endfor %} + <tr> + <th colspan="2">{% trans 'Unexcused' %}</th> + <td>{{ person.unexcused }}</td> + </tr> + {% for excuse_type in excuse_types_not_absent %} + <tr> + <th colspan="3">{{ excuse_type.name }}</th> + <td>{{ person|get_dict:excuse_type.count_label }}</td> + </tr> + {% endfor %} + <tr> + <th colspan="3">{% trans 'Tardiness' %}</th> + <td>{{ person.tardiness }}'/{{ person.tardiness_count }}×</td> + </tr> + </table> + </div> + + <div class="col s6"> + {% if extra_marks %} + <h5>{% trans 'Extra marks' %}</h5> + <table> + {% for extra_mark in extra_marks %} + <tr> + <th>{{ extra_mark.name }}</th> + <td>{{ person|get_dict:extra_mark.count_label }}</td> + </tr> + {% endfor %} + </table> + {% endif %} + </div> +</div> + +<h5>{% trans 'Relevant personal notes' %}</h5> +<table class="small-print"> + <thead> + <tr> + <th>{% trans 'Date' %}</th> + <th>{% trans 'Pe.' %}</th> + <th>{% trans 'Subj.' %}</th> + <th>{% trans 'Te.' %}</th> + <th>{% trans 'Absent' %}</th> + <th>{% trans 'Tard.' %}</th> + <th colspan="2">{% trans 'Remarks' %}</th> + </tr> + </thead> + + <tbody> + {% for note in person.filtered_notes %} + {% if note.absent or note.tardiness or note.remarks or note.extra_marks.all %} + <tr> + {% 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' %} + {% if note.excused %} + {% if note.excuse_type %} + ({{ note.excuse_type.short_name }}) + {% else %} + ({% trans 'e' %}) + {% endif %} + {% endif %} + {% endif %} + </td> + <td> + {% if note.tardiness %} + {{ note.tardiness }}' + {% endif %} + </td> + <td> + {% for extra_mark in note.extra_marks.all %} + {{ extra_mark.short_name }}{% if not forloop.last %},{% endif %} + {% endfor %} + </td> + <td>{{ note.remarks }}</td> + </tr> + {% endif %} + {% endfor %} + </tbody> +</table> diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/register_abbreviations.html b/aleksis/apps/alsijil/templates/alsijil/partials/register_abbreviations.html new file mode 100644 index 0000000000000000000000000000000000000000..12ad365d00795a2f9b4703b574337bd9be867a32 --- /dev/null +++ b/aleksis/apps/alsijil/templates/alsijil/partials/register_abbreviations.html @@ -0,0 +1,54 @@ +<h4>{% trans "Abbreviations" %}</h4> + +<h5>{% trans "General" %}</h5> + +<ul class="collection"> + <li class="collection-item"> + <strong>(a)</strong> {% trans "Absent" %} + </li> + <li class="collection-item"> + <strong>(b)</strong> {% trans "Late" %} + </li> + <li class="collection-item"> + <strong>(u)</strong> {% trans "Unexcused" %} + </li> + <li class="collection-item"> + <strong>(e)</strong> {% trans "Excused" %} + </li> +</ul> + +{% if excuse_types %} + <h5>{% trans "Custom excuse types" %}</h5> + + <ul class="collection"> + {% for excuse_type in excuse_types %} + <li class="collection-item"> + <strong>({{ excuse_type.short_name }})</strong> {{ excuse_type.name }} + </li> + {% endfor %} + </ul> +{% endif %} + +{% if excuse_types_not_absent %} + <h5>{% trans "Custom excuse types (not counted as absent)" %}</h5> + + <ul class="collection"> + {% for excuse_type in excuse_types_not_absent %} + <li class="collection-item"> + <strong>({{ excuse_type.short_name }})</strong> {{ excuse_type.name }} + </li> + {% endfor %} + </ul> +{% endif %} + +{% if extra_marks %} + <h5>{% trans "Available extra marks" %}</h5> + + <ul class="collection"> + {% for extra_mark in extra_marks %} + <li class="collection-item"> + <strong>{{ extra_mark.short_name }}</strong> {{ extra_mark.name }} + </li> + {% endfor %} + </ul> +{% endif %} diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/register_coursebook.html b/aleksis/apps/alsijil/templates/alsijil/partials/register_coursebook.html new file mode 100644 index 0000000000000000000000000000000000000000..122eedc7567e5ead796e33da356c0d3a4173da30 --- /dev/null +++ b/aleksis/apps/alsijil/templates/alsijil/partials/register_coursebook.html @@ -0,0 +1,114 @@ +{% for week in weeks %} + <h4>{% trans 'Week' %} {{ week.week }}: {{ week.0 }}–{{ week.6 }}</h4> + + <table class="small-print"> + <thead> + <tr> + <th></th> + <th>{% trans 'Pe.' %}</th> + <th>{% trans 'Subj.' %}</th> + <th>{% trans 'Lesson topic' %}</th> + <th>{% trans 'Homework' %}</th> + <th>{% trans 'Notes' %}</th> + <th>{% trans 'Te.' %}</th> + </tr> + </thead> + <tbody> + {% for day in week %} + {% with register_objects_by_day|get_dict:day as register_objects %} + {% for register_object, documentation, notes, substitution in register_objects %} + <tr class=" + {% if substitution %} + {% if substitution.cancelled %} + lesson-cancelled + {% else %} + lesson-substituted + {% endif %} + {% endif %} + {% if forloop.first %} + lessons-day-first + {% endif %} + "> + {% if forloop.first %} + <th rowspan="{{ register_objects|length }}" class="lessons-day-head">{{ day|date:"D" }}</th> + {% endif %} + <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 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=register_object.get_subject %} + {% endif %} + </td> + <td class="lesson-topic"> + {% if register_object.label_ == "event" %} + {{ register_object.title }}: {{ documentation.topic }} + {% elif substitution.cancelled %} + {% trans 'Lesson cancelled' %} + {% else %} + {{ documentation.topic }} + {% endif %} + </td> + <td class="lesson-homework">{{ documentation.homework }}</td> + <td class="lesson-notes"> + {{ documentation.group_note }} + {% for note in notes %} + {% if note.absent %} + <span class="lesson-note-absent"> + {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}. + {% if note.excused %} + <span class="lesson-note-excused"> + {% if note.excuse_type %} + ({{ note.excuse_type.short_name }}) + {% else %} + ({% trans 'e' %}) + {% endif %} + </span> + {% endif %} + </span> + {% endif %} + {% if note.tardiness %} + <span class="lesson-note-late"> + {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}. + ({{ note.tardiness }}′) + {% if note.excused %} + <span class="lesson-note-excused"> + {% if note.excuse_type %} + ({{ note.excuse_type.short_name }}) + {% else %} + ({% trans 'e' %}) + {% endif %} + </span> + {% endif %} + </span> + {% endif %} + {% for extra_mark in note.extra_marks.all %} + <span> + {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}. + ({{ extra_mark.short_name }}) + </span> + {% endfor %} + {% endfor %} + </td> + <td class="lesson-te"> + {% if documentation.topic %} + {{ register_object.get_teachers.first.short_name }} + {% endif %} + </td> + </tr> + {% endfor %} + {% endwith %} + {% endfor %} + </tbody> + </table> + + <div class="page-break"> </div> +{% endfor %} diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/register_cover.html b/aleksis/apps/alsijil/templates/alsijil/partials/register_cover.html new file mode 100644 index 0000000000000000000000000000000000000000..193e19094711bdcaa96293267a3b08e9afd8a334 --- /dev/null +++ b/aleksis/apps/alsijil/templates/alsijil/partials/register_cover.html @@ -0,0 +1,51 @@ +<div class="center-align"> + <h1>{% trans 'Class register' %}</h1> + <h5>{{ school_term }}</h5> + <p>({{ school_term.date_start }}–{{ school_term.date_end }})</p> + {% static "img/aleksis-banner.svg" as aleksis_banner %} + <img src="{% firstof SITE_PREFERENCES.theme__logo.url aleksis_banner %}" + alt="{{ SITE_PREFERENCES.general__title }} – Logo" class="max-size-600 center"> + <h4 id="group-desc"> + {{ group.name }} + </h4> + <p id="group-owners" class="flow-text"> + {% trans 'Owners' %}: + {{ group.owners.all|join:', ' }} + </p> + <p id="printed-info"> + {% trans 'Printed on' %} {{ today }} + </p> +</div> +<div> + <hr/> +</div> +<div> + <p> + {% blocktrans %} + This printout is intended for archival purposes. The main copy of + the class register is stored in the AlekSIS School Information + System. + {% endblocktrans %} + </p> + <p> + {% blocktrans %} + Copies of the class register, both digital and as printout, must + only be kept inside the school and/or on devices authorised by the + school. + {% endblocktrans %} + </p> + <p> + {% blocktrans %} + The owner of the group and the headteacher confirm the above, as + well as the correctness of this printout. + {% endblocktrans %} + </p> + <div id="signatures"> + <div class="signature"> + {% trans 'Owners' %} + </div> + <div class="signature"> + {% trans 'Headteacher' %} + </div> + </div> +</div> diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/register_members_table.html b/aleksis/apps/alsijil/templates/alsijil/partials/register_members_table.html new file mode 100644 index 0000000000000000000000000000000000000000..23a310b5b41ae4234170f6c8ec83b109bdb8ee56 --- /dev/null +++ b/aleksis/apps/alsijil/templates/alsijil/partials/register_members_table.html @@ -0,0 +1,53 @@ +<h4>{% trans 'Persons in group' %} {{ group.name }}</h4> + +<table id="persons"> + <thead> + <tr> + <th>{% trans 'No.' %}</th> + <th>{% trans 'Last name' %}</th> + <th>{% trans 'First name' %}</th> + <th>{% trans 'Sex' %}</th> + <th>{% trans 'Date of birth' %}</th> + <th>{% trans '(a)' %}</th> + <th>{% trans "Sum (e)" %}</th> + <th>{% trans "(e)" %}</th> + {% for excuse_type in excuse_types %} + <th>({{ excuse_type.short_name }})</th> + {% endfor %} + <th>{% trans '(u)' %}</th> + {% for excuse_type in excuse_types_not_absent %} + <th>({{ excuse_type.short_name }})</th> + {% endfor %} + <th>{% trans '(b)' %}</th> + {% for extra_mark in extra_marks %} + <th>{{ extra_mark.short_name }}</th> + {% endfor %} + </tr> + </thead> + + <tbody> + {% for person in persons %} + <tr> + <td>{{ forloop.counter }}</td> + <td>{{ person.last_name }}</td> + <td>{{ person.first_name }}</td> + <td>{{ person.get_sex_display }}</td> + <td>{{ person.date_of_birth }}</td> + <td>{{ person.absences_count }}</td> + <td>{{ person.excused }}</td> + <td>{{ person.excused_without_excuse_type }}</td> + {% for excuse_type in excuse_types %} + <td>{{ person|get_dict:excuse_type.count_label }}</td> + {% endfor %} + <td>{{ person.unexcused }}</td> + {% for excuse_type in excuse_types_not_absent %} + <td>{{ person|get_dict:excuse_type.count_label }}</td> + {% endfor %} + <td>{{ person.tardiness }}'/{{ person.tardiness_count }}×</td> + {% for extra_mark in extra_marks %} + <td>{{ person|get_dict:extra_mark.count_label }}</td> + {% endfor %} + </tr> + {% endfor %} + </tbody> +</table> diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/register_teachers_and_subjects_table.html b/aleksis/apps/alsijil/templates/alsijil/partials/register_teachers_and_subjects_table.html new file mode 100644 index 0000000000000000000000000000000000000000..d3de44993a5b9c3678e226f6d678a532fa8adb1c --- /dev/null +++ b/aleksis/apps/alsijil/templates/alsijil/partials/register_teachers_and_subjects_table.html @@ -0,0 +1,31 @@ +<table id="lessons"> + <thead> + <tr> + {% if len(groups) > 1 %} + <th>{% trans 'Group' %}</th> + {% endif %} + <th>{% trans 'Subject' %}</th> + <th>{% trans 'Teacher' %}</th> + <th>{% trans 'Lesson start' %}</th> + <th>{% trans 'Lesson end' %}</th> + <th>{% trans 'Per week' %}</th> + </tr> + </thead> + + <tbody> + {% for group in groups %} + {% for lesson in group.lessons.all %} + <tr> + {% if len(groups) > 1 %} + <td>{{ group.name }}</td> + {% endif %} + <td>{{ lesson.subject.name }}</td> + <td>{{ lesson.teachers.all|join:', ' }}</td> + <td>{{ lesson.validity.date_start }}</td> + <td>{{ lesson.validity.date_end }}</td> + <td>{{ lesson.lesson_periods.count }}</td> + </tr> + {% endfor %} + {% endfor %} + </tbody> +</table> diff --git a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html index c699287a00987ad99c1fd0c2d4617827670fae2f..5d740a2a31551950b0dc57e29d0163b0c85d6f12 100644 --- a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html +++ b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html @@ -11,516 +11,45 @@ {% endblock %} {% block content %} - - <div class="center-align"> - <h1>{% trans 'Class register' %}</h1> - <h5>{{ school_term }}</h5> - <p>({{ school_term.date_start }}–{{ school_term.date_end }})</p> - {% static "img/aleksis-banner.svg" as aleksis_banner %} - <img src="{% firstof SITE_PREFERENCES.theme__logo.url aleksis_banner %}" - alt="{{ SITE_PREFERENCES.general__title }} – Logo" class="max-size-600 center"> - <h4 id="group-desc"> - {{ group.name }} - </h4> - <p id="group-owners" class="flow-text"> - {% trans 'Owners' %}: - {{ group.owners.all|join:', ' }} - </p> - <p id="printed-info"> - {% trans 'Printed on' %} {{ today }} - </p> - </div> - <div> - <hr/> - </div> - <div> - <p> - {% blocktrans %} - This printout is intended for archival purposes. The main copy of - the class register is stored in the AlekSIS School Information - System. - {% endblocktrans %} - </p> - <p> - {% blocktrans %} - Copies of the class register, both digital and as printout, must - only be kept inside the school and/or on devices authorised by the - school. - {% endblocktrans %} - </p> - <p> - {% blocktrans %} - The owner of the group and the headteacher confirm the above, as - well as the correctness of this printout. - {% endblocktrans %} - </p> - <div id="signatures"> - <div class="signature"> - {% trans 'Owners' %} - </div> - <div class="signature"> - {% trans 'Headteacher' %} - </div> - </div> - </div> - - <div class="page-break"> </div> - - <h4>{% trans "Abbreviations" %}</h4> - - <h5>{% trans "General" %}</h5> - - <ul class="collection"> - <li class="collection-item"> - <strong>(a)</strong> {% trans "Absent" %} - </li> - <li class="collection-item"> - <strong>(b)</strong> {% trans "Late" %} - </li> - <li class="collection-item"> - <strong>(u)</strong> {% trans "Unexcused" %} - </li> - <li class="collection-item"> - <strong>(e)</strong> {% trans "Excused" %} - </li> - </ul> - - {% if excuse_types %} - <h5>{% trans "Custom excuse types" %}</h5> - - <ul class="collection"> - {% for excuse_type in excuse_types %} - <li class="collection-item"> - <strong>({{ excuse_type.short_name }})</strong> {{ excuse_type.name }} - </li> - {% endfor %} - </ul> + {% if include_cover %} + {% include "alsijil/partials/register_cover.html" %} {% endif %} - {% if excuse_types_not_absent %} - <h5>{% trans "Custom excuse types (not counted as absent)" %}</h5> - - <ul class="collection"> - {% for excuse_type in excuse_types_not_absent %} - <li class="collection-item"> - <strong>({{ excuse_type.short_name }})</strong> {{ excuse_type.name }} - </li> - {% endfor %} - </ul> + <div class="page-break"> </div> + + {% if include_abbreviations %} + {% include "alsijil/partials/register_abbreviations.html" %} {% endif %} - {% if extra_marks %} - <h5>{% trans "Available extra marks" %}</h5> + <div class="page-break"> </div> - <ul class="collection"> - {% for extra_mark in extra_marks %} - <li class="collection-item"> - <strong>{{ extra_mark.short_name }}</strong> {{ extra_mark.name }} - </li> - {% endfor %} - </ul> + {% if include_members_table %} + {% include "alsijil/partials/register_members_table.html" %} {% endif %} <div class="page-break"> </div> + {% if include_teachers_and_subjects_table %} + {% if group.lessons %} + <h4>{% trans 'Teachers and lessons in group' %} {{ group.name }}</h4> + {% include "alsijil/partials/register_teachers_and_subjects_table.html" with groups=[group] only %} + <div class="page-break"> </div> + {% endif %} + {% if child_groups %} + <h4>{% trans 'Teachers and lessons in child groups' %}</h4> + {% include "alsijil/partials/register_teachers_and_subjects_table.html" with groups=child_groups only} + <div class="page-break"> </div> + {% endif %} + {% endif %} - <h4>{% trans 'Persons in group' %} {{ group.name }}</h4> - - <table id="persons"> - <thead> - <tr> - <th>{% trans 'No.' %}</th> - <th>{% trans 'Last name' %}</th> - <th>{% trans 'First name' %}</th> - <th>{% trans 'Sex' %}</th> - <th>{% trans 'Date of birth' %}</th> - <th>{% trans '(a)' %}</th> - <th>{% trans "Sum (e)" %}</th> - <th>{% trans "(e)" %}</th> - {% for excuse_type in excuse_types %} - <th>({{ excuse_type.short_name }})</th> - {% endfor %} - <th>{% trans '(u)' %}</th> - {% for excuse_type in excuse_types_not_absent %} - <th>({{ excuse_type.short_name }})</th> - {% endfor %} - <th>{% trans '(b)' %}</th> - {% for extra_mark in extra_marks %} - <th>{{ extra_mark.short_name }}</th> - {% endfor %} - </tr> - </thead> - - <tbody> + {% if include_person_overviews %} {% for person in persons %} - <tr> - <td>{{ forloop.counter }}</td> - <td>{{ person.last_name }}</td> - <td>{{ person.first_name }}</td> - <td>{{ person.get_sex_display }}</td> - <td>{{ person.date_of_birth }}</td> - <td>{{ person.absences_count }}</td> - <td>{{ person.excused }}</td> - <td>{{ person.excused_without_excuse_type }}</td> - {% for excuse_type in excuse_types %} - <td>{{ person|get_dict:excuse_type.count_label }}</td> - {% endfor %} - <td>{{ person.unexcused }}</td> - {% for excuse_type in excuse_types_not_absent %} - <td>{{ person|get_dict:excuse_type.count_label }}</td> - {% endfor %} - <td>{{ person.tardiness }}'/{{ person.tardiness_count }}×</td> - {% for extra_mark in extra_marks %} - <td>{{ person|get_dict:extra_mark.count_label }}</td> - {% endfor %} - </tr> + {% include "alsijil/partials/person_overview.html with person=person only %} + <div class="page-break"> </div> {% endfor %} - </tbody> - </table> - - <div class="page-break"> </div> - - {% if lessons %} - <h4>{% trans 'Teachers and lessons in group' %} {{ group.name }}</h4> - - <table id="lessons"> - <thead> - <tr> - <th>{% trans 'Subject' %}</th> - <th>{% trans 'Teacher' %}</th> - <th>{% trans 'Lesson start' %}</th> - <th>{% trans 'Lesson end' %}</th> - <th>{% trans 'Per week' %}</th> - </tr> - </thead> - - <tbody> - {% for lesson in lessons %} - <tr> - <td>{{ lesson.subject.name }}</td> - <td>{{ lesson.teachers.all|join:', ' }}</td> - <td>{{ lesson.validity.date_start }}</td> - <td>{{ lesson.validity.date_end }}</td> - <td>{{ lesson.lesson_periods.count }}</td> - </tr> - {% endfor %} - </tbody> - </table> - <div class="page-break"> </div> - {% endif %} - - {% if child_groups %} - <h4>{% trans 'Teachers and lessons in child groups' %}</h4> - - <table id="lessons"> - <thead> - <tr> - <th>{% trans 'Group' %}</th> - <th>{% trans 'Subject' %}</th> - <th>{% trans 'Teacher' %}</th> - <th>{% trans 'Lesson start' %}</th> - <th>{% trans 'Lesson end' %}</th> - <th>{% trans 'Per week' %}</th> - </tr> - </thead> - - <tbody> - {% for child_group in child_groups %} - {% for lesson in child_group.lessons.all %} - <tr> - <td>{{ child_group.name }}</td> - <td>{{ lesson.subject.name }}</td> - <td>{{ lesson.teachers.all|join:', ' }}</td> - <td>{{ lesson.validity.date_start }}</td> - <td>{{ lesson.validity.date_end }}</td> - <td>{{ lesson.lesson_periods.count }}</td> - </tr> - {% endfor %} - {% endfor %} - </tbody> - </table> - <div class="page-break"> </div> + + {% if include_coursebook %} + {% include "alsijil/partials/register_coursebook.html" %} {% endif %} - - {% for person in persons %} - <h4>{% trans 'Personal overview' %}: {{ person.last_name }}, {{ person.first_name }}</h4> - - <h5>{% blocktrans %}Contact details{% endblocktrans %}</h5> - <table class="person-info"> - <tr> - <td rowspan="6" class="person-img"> - {% if person.photo %} - <img src="{{ person.photo.url }}" alt="{{ person.first_name }} {{ person.last_name }}"/> - {% else %} - <img src="{% static 'img/fallback.png' %}" alt="{{ person.first_name }} {{ person.last_name }}"/> - {% endif %} - </td> - <td><i class="material-icons iconify" data-icon="mdi:account-outline"></i></td> - <td colspan="2">{{ person.first_name }} {{ person.additional_name }} {{ person.last_name }}</td> - </tr> - <tr> - <td><i class="material-icons iconify" data-icon="mdi:human-non-binary"></i></td> - <td colspan="2">{{ person.get_sex_display }}</td> - </tr> - <tr> - <td><i class="material-icons iconify" data-icon="mdi:map-marker-outline"></i></td> - <td>{{ person.street }} {{ person.housenumber }}</td> - <td>{{ person.postal_code }} {{ person.place }}</td> - </tr> - <tr> - <td><i class="material-icons iconify" data-icon="mdi:phone-outline"></i></td> - <td>{{ person.phone_number }}</td> - <td>{{ person.mobile_number }}</td> - </tr> - <tr> - <td><i class="material-icons iconify" data-icon="mdi:email-outline"></i></td> - <td colspan="2">{{ person.email }}</td> - </tr> - <tr> - <td><i class="material-icons iconify" data-icon="mdi:cake"></i></td> - <td colspan="2">{{ person.date_of_birth|date }}</td> - </tr> - </table> - - <div class="row"> - <div class="col s6"> - <h5>{% trans 'Absences and tardiness' %}</h5> - <table> - <tr> - <th colspan="3">{% trans 'Absences' %}</th> - <td>{{ person.absences_count }}</td> - </tr> - <tr> - <td rowspan="{{ excuse_types.count|add:3 }}" style="width: 16mm;" - class="rotate small-print">{% trans "thereof" %}</td> - <th colspan="2">{% trans 'Excused' %}</th> - <td>{{ person.excused }}</td> - </tr> - <tr> - <td rowspan="{{ excuse_types.count|add:1 }}" style="width: 16mm;" - class="rotate small-print">{% trans "thereof" %}</td> - <th>{% trans "Without excuse type" %}</th> - <td>{{ person.excused_without_excuse_type }}</td> - </tr> - {% for excuse_type in excuse_types %} - <tr> - <th>{{ excuse_type.name }}</th> - <td>{{ person|get_dict:excuse_type.count_label }}</td> - </tr> - {% endfor %} - <tr> - <th colspan="2">{% trans 'Unexcused' %}</th> - <td>{{ person.unexcused }}</td> - </tr> - {% for excuse_type in excuse_types_not_absent %} - <tr> - <th colspan="3">{{ excuse_type.name }}</th> - <td>{{ person|get_dict:excuse_type.count_label }}</td> - </tr> - {% endfor %} - <tr> - <th colspan="3">{% trans 'Tardiness' %}</th> - <td>{{ person.tardiness }}'/{{ person.tardiness_count }}×</td> - </tr> - </table> - </div> - - <div class="col s6"> - {% if extra_marks %} - <h5>{% trans 'Extra marks' %}</h5> - <table> - {% for extra_mark in extra_marks %} - <tr> - <th>{{ extra_mark.name }}</th> - <td>{{ person|get_dict:extra_mark.count_label }}</td> - </tr> - {% endfor %} - </table> - {% endif %} - </div> - </div> - - <h5>{% trans 'Relevant personal notes' %}</h5> - <table class="small-print"> - <thead> - <tr> - <th>{% trans 'Date' %}</th> - <th>{% trans 'Pe.' %}</th> - <th>{% trans 'Subj.' %}</th> - <th>{% trans 'Te.' %}</th> - <th>{% trans 'Absent' %}</th> - <th>{% trans 'Tard.' %}</th> - <th colspan="2">{% trans 'Remarks' %}</th> - </tr> - </thead> - - <tbody> - {% for note in person.filtered_notes %} - {% if note.absent or note.tardiness or note.remarks or note.extra_marks.all %} - <tr> - {% 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' %} - {% if note.excused %} - {% if note.excuse_type %} - ({{ note.excuse_type.short_name }}) - {% else %} - ({% trans 'e' %}) - {% endif %} - {% endif %} - {% endif %} - </td> - <td> - {% if note.tardiness %} - {{ note.tardiness }}' - {% endif %} - </td> - <td> - {% for extra_mark in note.extra_marks.all %} - {{ extra_mark.short_name }}{% if not forloop.last %},{% endif %} - {% endfor %} - </td> - <td>{{ note.remarks }}</td> - </tr> - {% endif %} - {% endfor %} - </tbody> - </table> - - <div class="page-break"> </div> - - {% endfor %} - - {% for week in weeks %} - <h4>{% trans 'Week' %} {{ week.week }}: {{ week.0 }}–{{ week.6 }}</h4> - - <table class="small-print"> - <thead> - <tr> - <th></th> - <th>{% trans 'Pe.' %}</th> - <th>{% trans 'Subj.' %}</th> - <th>{% trans 'Lesson topic' %}</th> - <th>{% trans 'Homework' %}</th> - <th>{% trans 'Notes' %}</th> - <th>{% trans 'Te.' %}</th> - </tr> - </thead> - <tbody> - {% for day in week %} - {% with register_objects_by_day|get_dict:day as register_objects %} - {% for register_object, documentation, notes, substitution in register_objects %} - <tr class=" - {% if substitution %} - {% if substitution.cancelled %} - lesson-cancelled - {% else %} - lesson-substituted - {% endif %} - {% endif %} - {% if forloop.first %} - lessons-day-first - {% endif %} - "> - {% if forloop.first %} - <th rowspan="{{ register_objects|length }}" class="lessons-day-head">{{ day|date:"D" }}</th> - {% endif %} - <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 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=register_object.get_subject %} - {% endif %} - </td> - <td class="lesson-topic"> - {% if register_object.label_ == "event" %} - {{ register_object.title }}: {{ documentation.topic }} - {% elif substitution.cancelled %} - {% trans 'Lesson cancelled' %} - {% else %} - {{ documentation.topic }} - {% endif %} - </td> - <td class="lesson-homework">{{ documentation.homework }}</td> - <td class="lesson-notes"> - {{ documentation.group_note }} - {% for note in notes %} - {% if note.absent %} - <span class="lesson-note-absent"> - {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}. - {% if note.excused %} - <span class="lesson-note-excused"> - {% if note.excuse_type %} - ({{ note.excuse_type.short_name }}) - {% else %} - ({% trans 'e' %}) - {% endif %} - </span> - {% endif %} - </span> - {% endif %} - {% if note.tardiness %} - <span class="lesson-note-late"> - {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}. - ({{ note.tardiness }}′) - {% if note.excused %} - <span class="lesson-note-excused"> - {% if note.excuse_type %} - ({{ note.excuse_type.short_name }}) - {% else %} - ({% trans 'e' %}) - {% endif %} - </span> - {% endif %} - </span> - {% endif %} - {% for extra_mark in note.extra_marks.all %} - <span> - {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}. - ({{ extra_mark.short_name }}) - </span> - {% endfor %} - {% endfor %} - </td> - <td class="lesson-te"> - {% if documentation.topic %} - {{ register_object.get_teachers.first.short_name }} - {% endif %} - </td> - </tr> - {% endfor %} - {% endwith %} - {% endfor %} - </tbody> - </table> - - <div class="page-break"> </div> - {% endfor %} {% endblock %}