From 8666add00b4890feeb68081bb04f12edd935048e Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Tue, 14 Jun 2022 21:46:38 +0200 Subject: [PATCH] Add option to mark instructions as done in lesson documentation --- aleksis/apps/alsijil/forms.py | 4 ++- .../migrations/0018_done_instructions.py | 19 ++++++++++++++ aleksis/apps/alsijil/models.py | 8 ++++++ .../partials/lesson/tabs/documentation.html | 25 ++++++++++++++++++- aleksis/apps/alsijil/views.py | 6 +++++ 5 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 aleksis/apps/alsijil/migrations/0018_done_instructions.py diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py index 1a4dc2a72..cc4921487 100644 --- a/aleksis/apps/alsijil/forms.py +++ b/aleksis/apps/alsijil/forms.py @@ -38,9 +38,11 @@ from .models import ( class LessonDocumentationForm(forms.ModelForm): + layout = Layout("topic", "homework", "group_note") + class Meta: model = LessonDocumentation - fields = ["topic", "homework", "group_note"] + fields = ["topic", "homework", "group_note", "done_instructions"] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/aleksis/apps/alsijil/migrations/0018_done_instructions.py b/aleksis/apps/alsijil/migrations/0018_done_instructions.py new file mode 100644 index 000000000..968d8491a --- /dev/null +++ b/aleksis/apps/alsijil/migrations/0018_done_instructions.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.13 on 2022-06-14 13:51 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0019_fix_uniqueness_per_site'), + ('alsijil', '0017_instruction'), + ] + + operations = [ + migrations.AddField( + model_name='lessondocumentation', + name='done_instructions', + field=models.ManyToManyField(blank=True, null=True, related_name='documentations', to='alsijil.Instruction', verbose_name='Done instructions'), + ), + ] diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index f5ac86590..2adfc9668 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -350,6 +350,14 @@ class LessonDocumentation(RegisterObjectRelatedMixin, ExtensibleModel): homework = models.CharField(verbose_name=_("Homework"), max_length=200, blank=True) group_note = models.CharField(verbose_name=_("Group note"), max_length=200, blank=True) + done_instructions = models.ManyToManyField( + "Instruction", + blank=True, + null=True, + related_name="documentations", + verbose_name=_("Done instructions"), + ) + def carry_over_data(self, all_periods_of_lesson: LessonPeriod): """Carry over data to given periods in this lesson if data is not already set. diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/lesson/tabs/documentation.html b/aleksis/apps/alsijil/templates/alsijil/partials/lesson/tabs/documentation.html index ef0f42048..a5e68e5ad 100644 --- a/aleksis/apps/alsijil/templates/alsijil/partials/lesson/tabs/documentation.html +++ b/aleksis/apps/alsijil/templates/alsijil/partials/lesson/tabs/documentation.html @@ -1,4 +1,4 @@ -{% load i18n material_form_internal material_form %} +{% load i18n material_form_internal material_form data_helpers %} {% include "alsijil/partials/lesson/heading.html" %} {% include "alsijil/partials/lesson/prev_next.html" with with_save=0 %} @@ -19,6 +19,29 @@ {% if can_edit_lesson_documentation %} {% form form=lesson_documentation_form %}{% endform %} + + {% if instructions %} + <h6>{% trans "Instructions" %}</h6> + <div class="collection"> + {% for instruction in instructions %} + <div class="collection-item"> + <i class="material-icons primary-color-text left">{{ instruction.icon|default:"rule" }}</i> + {{ instruction.name }} + <div class="right grey-text darken-4"> + {% trans "Instruction done" %} + <label class="secondary-content right"> + <input type="checkbox" + class="filled-in" + name="lesson_documentation-done_instructions" + value="{{ instruction.pk }}" + {% if instruction.pk|slugify in lesson_documentation_form.done_instructions.value %}checked{% endif %}> + <span></span> + </label> + </div> + </div> + {% endfor %} + </div> + {% endif %} {% elif can_view_lesson_documentation %} <table> <tr> diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index 50c5f9267..a3751bcc2 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -220,11 +220,17 @@ def register_object( lesson_documentation = register_object.get_or_create_lesson_documentation(wanted_week) context["has_documentation"] = bool(lesson_documentation.topic) + instructions = Instruction.objects.on_day(date_of_lesson).filter( + Q(groups__in=groups) | Q(groups__isnull=True) + ) + context["instructions"] = instructions + lesson_documentation_form = LessonDocumentationForm( request.POST or None, instance=lesson_documentation, prefix="lesson_documentation", ) + lesson_documentation_form.fields["done_instructions"].queryset = instructions # Prefetch object permissions for all related groups of the register object # because the object permissions are checked for all groups of the register object -- GitLab