diff --git a/aleksis/apps/alsijil/migrations/0001_initial.py b/aleksis/apps/alsijil/migrations/0001_initial.py index 9c09fe176a2917b5b08d77863b9bd8adb07826eb..3b396eaaa92bbf3bdef22379f94ad6055094eab7 100644 --- a/aleksis/apps/alsijil/migrations/0001_initial.py +++ b/aleksis/apps/alsijil/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.0.6 on 2020-05-11 13:19 +# Generated by Django 3.0.6 on 2020-05-29 10:29 import aleksis.apps.alsijil.models import django.contrib.postgres.fields.jsonb @@ -12,9 +12,9 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('core', '0001_initial'), ('chronos', '0001_initial'), ('sites', '0002_alter_domain_unique'), - ('core', '0001_initial'), ] operations = [ @@ -29,6 +29,8 @@ class Migration(migrations.Migration): ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), ], options={ + 'verbose_name': 'Personal note filter', + 'verbose_name_plural': 'Personal note filters', 'ordering': ['identifier'], }, managers=[ @@ -50,6 +52,8 @@ class Migration(migrations.Migration): ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), ], options={ + 'verbose_name': 'Personal note', + 'verbose_name_plural': 'Personal notes', 'ordering': ['lesson_period__lesson__date_start', 'week', 'lesson_period__period__weekday', 'lesson_period__period__period', 'person__last_name', 'person__first_name'], 'unique_together': {('lesson_period', 'week', 'person')}, }, @@ -69,6 +73,8 @@ class Migration(migrations.Migration): ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), ], options={ + 'verbose_name': 'Lesson documentation', + 'verbose_name_plural': 'Lesson documentations', 'ordering': ['lesson_period__lesson__date_start', 'week', 'lesson_period__period__weekday', 'lesson_period__period__period'], 'unique_together': {('lesson_period', 'week')}, }, diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index 916486fd783121cdd4d8d2265b44213d8e2d5f3a..3867f6c5a449977f39135e1690bb7954623a247f 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -27,6 +27,8 @@ class PersonalNote(ExtensibleModel): remarks = models.CharField(max_length=200, blank=True) class Meta: + verbose_name = _("Personal note") + verbose_name_plural = _("Personal notes") unique_together = [["lesson_period", "week", "person"]] ordering = [ "lesson_period__lesson__date_start", @@ -52,6 +54,8 @@ class LessonDocumentation(ExtensibleModel): homework = models.CharField(verbose_name=_("Homework"), max_length=200, blank=True) class Meta: + verbose_name = _("Lesson documentation") + verbose_name_plural = _("Lesson documentations") unique_together = [["lesson_period", "week"]] ordering = [ "lesson_period__lesson__date_start", @@ -74,4 +78,6 @@ class PersonalNoteFilter(ExtensibleModel): regex = models.CharField(verbose_name=_("Match expression"), max_length=100, unique=True) class Meta: + verbose_name = _("Personal note filter") + verbose_name_plural = _("Personal note filters") ordering = ["identifier"] diff --git a/aleksis/apps/alsijil/static/css/alsijil/full_register.css b/aleksis/apps/alsijil/static/css/alsijil/full_register.css index fe26ef3b717889ca953bc5c052ecb817d487fcf7..e9ee93a5c93d948307ae15b9f4b146616e73279a 100644 --- a/aleksis/apps/alsijil/static/css/alsijil/full_register.css +++ b/aleksis/apps/alsijil/static/css/alsijil/full_register.css @@ -130,3 +130,14 @@ table.person-info td.person-img img { .sheet * { page-break-inside: avoid; } + +img.max-size-600 { + max-width: 600px; + max-height: 600px; +} + +img.center{ + position: relative; + left: 50%; + transform: translateX(-50%); +} diff --git a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html index b8756f4bcc1572c7335e7a56194864d19c4ab475..32069660f212b015faacd13c73d5b4689382b2b2 100644 --- a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html +++ b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html @@ -14,7 +14,9 @@ <section class="sheet padding-10mm bigprint" id="titlepage"> <div> <h1>{% trans 'Class register' %}</h1> - <img src="{% cropped_thumbnail school 'logo_cropping' max_size='600x600' %}" id="school-logo" /> + {% static "img/aleksis-banner.svg" as aleksis_banner %} + <img src="{% firstof request.site.preferences.theme__logo.url aleksis_banner %}" + alt="{{ request.site.preferences.general__title }} – Logo" class="max-size-600 center"> <p id="group-desc"> {{ group.name }} </p> @@ -82,7 +84,7 @@ <td>{{ person.first_name }}</td> <td>{{ person.get_sex_display }}</td> <td>{{ person.date_of_birth }}</td> - <td>{{ person.absences}}</td> + <td>{{ person.absences_count}}</td> <td>{{ person.unexcused }}</td> <td>{{ person.tardiness }}</td> </tr> @@ -204,7 +206,7 @@ <tbody> <tr> - <td>{{ person.absences }}</td> + <td>{{ person.absences_count }}</td> <td>{{ person.unexcused }}</td> <td>{{ person.tardiness }}</td> </tr> diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index 79c3a9ea73c36adc569e7649b8aa8a3184c17a3b..24c242471e1aebf1ea5106a42d6ee9557457f1d2 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -14,7 +14,7 @@ from calendarweek import CalendarWeek from django_tables2 import RequestConfig from aleksis.apps.chronos.models import LessonPeriod -from aleksis.core.models import Group, Person +from aleksis.core.models import Group, Person, SchoolTerm from aleksis.core.util import messages from .forms import ( @@ -234,22 +234,26 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse: # Get all lesson periods for the selected group lesson_periods = ( LessonPeriod.objects.filter_group(group) - .distinct() - .prefetch_related("documentations", "personal_notes") + .distinct() + .prefetch_related("documentations", "personal_notes") ) -#FIXME SchoolTerm missing in core -# weeks = CalendarWeek.weeks_within( -# SchoolTerm.objects.first().current_term.date_start, -# SchoolTerm.objects.first().current_term.date_end, -# ) + current_school_term = SchoolTerm.current + + if not current_school_term: + return HttpResponseNotFound(_("There is no current school term.")) + + weeks = CalendarWeek.weeks_within( + current_school_term.date_start, + current_school_term.date_end, + ) periods_by_day = {} for lesson_period in lesson_periods: for week in weeks: day = week[lesson_period.period.weekday - 1] - if lesson_period.lesson.date_start <= day and lesson_period.lesson.date_end >= day: + if lesson_period.lesson.date_start <= day <= lesson_period.lesson.date_end: documentations = list( filter(lambda d: d.week == week.week, lesson_period.documentations.all(),) ) @@ -263,7 +267,7 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse: ) persons = group.members.annotate( - absences=Count("personal_notes__absent", filter=Q(personal_notes__absent=True)), + absences_count=Count("personal_notes__absent", filter=Q(personal_notes__absent=True)), unexcused=Count( "personal_notes__absent", filter=Q(personal_notes__absent=True, personal_notes__excused=False), diff --git a/poetry.lock b/poetry.lock index d77663670ccc2bbf5d73db4d6afe6efdcfe34d35..bc2fb8f0b06ac19fe0883468608e3632d2c8f51e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -68,11 +68,11 @@ extras = ["phonenumbers"] version = ">=3.0,<4.0" [package.dependencies.django-two-factor-auth] -extras = ["call", "phonenumbers", "yubikey", "sms"] +extras = ["sms", "call", "phonenumbers", "yubikey"] version = ">=1.11.0,<2.0.0" [package.dependencies.dynaconf] -extras = ["toml", "ini", "yaml"] +extras = ["ini", "yaml", "toml"] version = ">=2.0,<3.0" [package.extras] @@ -965,7 +965,7 @@ description = "Plugin to catch bad style specific to Django Projects" name = "flake8-django" optional = false python-versions = "*" -version = "1.1.0" +version = "1.1.1" [package.dependencies] flake8 = "*" @@ -1648,7 +1648,7 @@ description = "Python documentation generator" name = "sphinx" optional = false python-versions = ">=3.5" -version = "3.0.3" +version = "3.0.4" [package.dependencies] Jinja2 = ">=2.3" @@ -1868,7 +1868,7 @@ description = "Twilio API client and TwiML generator" name = "twilio" optional = false python-versions = "*" -version = "6.40.0" +version = "6.41.0" [package.dependencies] PyJWT = ">=1.4.2" @@ -2269,10 +2269,8 @@ flake8-builtins = [ {file = "flake8_builtins-1.5.3-py2.py3-none-any.whl", hash = "sha256:7706babee43879320376861897e5d1468e396a40b8918ed7bccf70e5f90b8687"}, ] flake8-django = [ - {file = "flake8-django-1.1.0.tar.gz", hash = "sha256:93b101c6f683d94eeeb9c042261fda87e5e54c4f4e621549aade9ce39c1e4986"}, - {file = "flake8_django-1.1.0-py3-none-any.whl", hash = "sha256:af88da63452b45e9bb5fdc2ddcdadbe0be13b0eaa55bd3e6906391f44f840e8f"}, - {file = "flake8_django-1.1.0-py3.6.egg", hash = "sha256:510a75351d7fa8447a6d89a04128b1516ab3371738d3382c981151849d9ff53b"}, - {file = "flake8_django-1.1.0-py3.7.egg", hash = "sha256:320f36bfe505e037e4609f93361f1024905dab48b7204d818dcd2863a55dccfd"}, + {file = "flake8-django-1.1.1.tar.gz", hash = "sha256:fb4e8f669d3cf44297bb6e1c5d0a358ab0aba373cd4c69268cf2798de6bcbd9b"}, + {file = "flake8_django-1.1.1-py3-none-any.whl", hash = "sha256:c71da0e61b6119dae91cbffdbdb00f1d6ebe3f5d0c43f5bf136929997ab0b72d"}, ] flake8-docstrings = [ {file = "flake8-docstrings-1.5.0.tar.gz", hash = "sha256:3d5a31c7ec6b7367ea6506a87ec293b94a0a46c0bce2bb4975b7f1d09b6f3717"}, @@ -2330,14 +2328,12 @@ jinja2 = [ {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"}, ] libsass = [ - {file = "libsass-0.20.0-cp27-cp27m-macosx_10_14_intel.whl", hash = "sha256:107c409524c6a4ed14410fa9dafa9ee59c6bd3ecae75d73af749ab2b75685726"}, {file = "libsass-0.20.0-cp27-cp27m-win32.whl", hash = "sha256:98f6dee9850b29e62977a963e3beb3cfeb98b128a267d59d2c3d675e298c8d57"}, {file = "libsass-0.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:b077261a04ba1c213e932943208471972c5230222acb7fa97373e55a40872cbb"}, {file = "libsass-0.20.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e6a547c0aa731dcb4ed71f198e814bee0400ce04d553f3f12a53bc3a17f2a481"}, {file = "libsass-0.20.0-cp36-abi3-manylinux1_x86_64.whl", hash = "sha256:74f6fb8da58179b5d86586bc045c16d93d55074bc7bb48b6354a4da7ac9f9dfd"}, {file = "libsass-0.20.0-cp36-cp36m-win32.whl", hash = "sha256:a43f3830d83ad9a7f5013c05ce239ca71744d0780dad906587302ac5257bce60"}, {file = "libsass-0.20.0-cp36-cp36m-win_amd64.whl", hash = "sha256:fd19c8f73f70ffc6cbcca8139da08ea9a71fc48e7dfc4bb236ad88ab2d6558f1"}, - {file = "libsass-0.20.0-cp37-abi3-macosx_10_14_x86_64.whl", hash = "sha256:8cf72552b39e78a1852132e16b706406bc76029fe3001583284ece8d8752a60a"}, {file = "libsass-0.20.0-cp37-cp37m-win32.whl", hash = "sha256:7555d9b24e79943cfafac44dbb4ca7e62105c038de7c6b999838c9ff7b88645d"}, {file = "libsass-0.20.0-cp37-cp37m-win_amd64.whl", hash = "sha256:794f4f4661667263e7feafe5cc866e3746c7c8a9192b2aa9afffdadcbc91c687"}, {file = "libsass-0.20.0-cp38-cp38-win32.whl", hash = "sha256:3bc0d68778b30b5fa83199e18795314f64b26ca5871e026343e63934f616f7f7"}, @@ -2660,8 +2656,8 @@ spdx-license-list = [ {file = "spdx_license_list-0.4.0.tar.gz", hash = "sha256:f8b5eeda2a1c88d8ce15f6324d5a6128a462932a2e55b032f017ac9a0e61f1c7"}, ] sphinx = [ - {file = "Sphinx-3.0.3-py3-none-any.whl", hash = "sha256:f5505d74cf9592f3b997380f9bdb2d2d0320ed74dd69691e3ee0644b956b8d83"}, - {file = "Sphinx-3.0.3.tar.gz", hash = "sha256:62edfd92d955b868d6c124c0942eba966d54b5f3dcb4ded39e65f74abac3f572"}, + {file = "Sphinx-3.0.4-py3-none-any.whl", hash = "sha256:779a519adbd3a70fc7c468af08c5e74829868b0a5b34587b33340e010291856c"}, + {file = "Sphinx-3.0.4.tar.gz", hash = "sha256:ea64df287958ee5aac46be7ac2b7277305b0381d213728c3a49d8bb9b8415807"}, ] sphinx-autodoc-typehints = [ {file = "sphinx-autodoc-typehints-1.10.3.tar.gz", hash = "sha256:a6b3180167479aca2c4d1ed3b5cb044a70a76cccd6b38662d39288ebd9f0dff0"}, @@ -2731,7 +2727,7 @@ tqdm = [ {file = "tqdm-4.46.0.tar.gz", hash = "sha256:4733c4a10d0f2a4d098d801464bdaf5240c7dadd2a7fde4ee93b0a0efd9fb25e"}, ] twilio = [ - {file = "twilio-6.40.0.tar.gz", hash = "sha256:41d220c7f36834cc10986e3364d40617b804cb01624542f90b5cf5dc79d89ee5"}, + {file = "twilio-6.41.0.tar.gz", hash = "sha256:7c6329118583852bb06a2065dd2987a012310e5dfd834ef821d736b059bd1c74"}, ] typed-ast = [ {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3"},