From 347cc37a28bf59d7185d626d2b247d91241a76ab Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Wed, 28 Jun 2023 16:26:58 +0200 Subject: [PATCH] Add DueDates to CourseSession and Course Session Assignment --- server/vbv_lernwelt/course/models.py | 23 ---------- server/vbv_lernwelt/course_session/models.py | 47 +++++++++++++++----- server/vbv_lernwelt/duedate/models.py | 2 + 3 files changed, 39 insertions(+), 33 deletions(-) diff --git a/server/vbv_lernwelt/course/models.py b/server/vbv_lernwelt/course/models.py index b0910612..c2cd39a2 100644 --- a/server/vbv_lernwelt/course/models.py +++ b/server/vbv_lernwelt/course/models.py @@ -2,7 +2,6 @@ from django.db import models from django.db.models import UniqueConstraint from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ -from django_jsonform.models.fields import JSONField from grapple.models import GraphQLString from wagtail.models import Page @@ -193,26 +192,6 @@ class CourseSession(models.Model): Das anhängen kann via CourseSessionUser oder "Schulklasse (TODO)" geschehen """ - # TODO: Das wird durch event modell ersetzt - - # ATTENDANCE_COURSES_SCHEMA = { - # "type": "array", - # "items": { - # "type": "object", - # "properties": { - # "learningContentId": { - # "type": "number", - # "title": "ID des Lerninhalts", - # "required": True, - # }, - # "start": {"type": "string", "format": "datetime"}, - # "end": {"type": "string", "format": "datetime"}, - # "location": {"type": "string"}, - # "trainer": {"type": "string"}, - # }, - # }, - # } - created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) @@ -228,8 +207,6 @@ class CourseSession(models.Model): start_date = models.DateField(null=True, blank=True) end_date = models.DateField(null=True, blank=True) - assignment_details_list = models.JSONField(default=list, blank=True) - additional_json_data = models.JSONField(default=dict, blank=True) def __str__(self): diff --git a/server/vbv_lernwelt/course_session/models.py b/server/vbv_lernwelt/course_session/models.py index f4d06266..a479afff 100644 --- a/server/vbv_lernwelt/course_session/models.py +++ b/server/vbv_lernwelt/course_session/models.py @@ -1,12 +1,13 @@ from django.db import models from django.utils.translation import gettext_lazy as _ +from vbv_lernwelt.assignment.models import AssignmentType from vbv_lernwelt.duedate.models import DueDate class CourseSessionAttendanceCourse(models.Model): """ - Präsenzkurs Durchührung + Präsenztag Durchührung Kann über einen Zeitraum von meheren Tagen gehen. """ @@ -30,13 +31,18 @@ class CourseSessionAttendanceCourse(models.Model): def save(self, *args, **kwargs): if not self.pk: title = "" + url = "" page = None if self.learning_content_id: title = self.learning_content.title page = self.learning_content.page_ptr + url = self.learning_content.get_frontend_url() self.due_date = DueDate.objects.create( - title=f"{title} {_('Präsenzkurs')}", + url=url, + title=f"{title}", + learning_content_description=f"{_('Präsenztag')}", + description="", course_session=self.course_session, page=page) super().save(*args, **kwargs) @@ -63,31 +69,52 @@ class CourseSessionAssignment(models.Model): "duedate.DueDate", on_delete=models.CASCADE, related_name="assignment_submission_deadline", + null=True, ) evaluation_deadline = models.OneToOneField( "duedate.DueDate", on_delete=models.CASCADE, related_name="assignment_evaluation_deadline", + null=True, ) def save(self, *args, **kwargs): if not self.pk: title = "" + url = "" page = None + assignment_type_description = "" if self.learning_content_id: title = self.learning_content.title page = self.learning_content.page_ptr + url = self.learning_content.get_frontend_url() + assignment_type = self.learning_content.assignment_type + assignment_type_descriptions = { + AssignmentType.CASEWORK.name: _("Geleitete Fallarbeit"), + AssignmentType.PREP_ASSIGNMENT.name: _("Vorbereitungsauftrag"), + AssignmentType.REFLECTION.name: _("Reflexion"), + } + assignment_type_description = assignment_type_descriptions.get(assignment_type, "") - self.submission_deadline = DueDate.objects.create( - title=f"{title} {_('Submission Deadline')}", - course_session=self.course_session, - page=page) + if assignment_type in {AssignmentType.CASEWORK, AssignmentType.PREP_ASSIGNMENT}: # Reflexion + self.submission_deadline = DueDate.objects.create( + url=url, + title=f"{title}", + learning_content_description=assignment_type_description, + description=f"{_('Abgabe Termin')}", + course_session=self.course_session, + page=page) + + if assignment_type == AssignmentType.CASEWORK: + self.evaluation_deadline = DueDate.objects.create( + url=url, + title=f"{title}", + learning_content_description=assignment_type_description, + description=f"{_('Freigabe Termin Bewertungen')}", + course_session=self.course_session, + page=page) - self.evaluation_deadline = DueDate.objects.create( - title=f"{title} {_('Evaluation Deadline')}", - course_session=self.course_session, - page=page) super().save(*args, **kwargs) def __str__(self): diff --git a/server/vbv_lernwelt/duedate/models.py b/server/vbv_lernwelt/duedate/models.py index e12fdfcf..8c584fd6 100644 --- a/server/vbv_lernwelt/duedate/models.py +++ b/server/vbv_lernwelt/duedate/models.py @@ -13,6 +13,8 @@ class DueDate(models.Model): start = models.DateTimeField(null=True, db_index=True) end = models.DateTimeField(db_index=True, null=True) title = models.CharField(default=_("Termin"), max_length=1024) + learning_content_description = models.CharField(default=_("GeleiteteFallarbeit"), max_length=1024) + description = models.CharField(default=_("Abgabetermin"), max_length=1024) url = models.URLField(null=True, blank=True, max_length=1024) course_session = models.ForeignKey( "course.CourseSession",