Add DueDates to CourseSession and Course Session Assignment

This commit is contained in:
Lorenz Padberg 2023-06-28 16:26:58 +02:00
parent 1671abe512
commit 347cc37a28
3 changed files with 39 additions and 33 deletions

View File

@ -2,7 +2,6 @@ from django.db import models
from django.db.models import UniqueConstraint from django.db.models import UniqueConstraint
from django.utils.text import slugify from django.utils.text import slugify
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django_jsonform.models.fields import JSONField
from grapple.models import GraphQLString from grapple.models import GraphQLString
from wagtail.models import Page from wagtail.models import Page
@ -193,26 +192,6 @@ class CourseSession(models.Model):
Das anhängen kann via CourseSessionUser oder "Schulklasse (TODO)" geschehen 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) created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True) updated_at = models.DateTimeField(auto_now=True)
@ -228,8 +207,6 @@ class CourseSession(models.Model):
start_date = models.DateField(null=True, blank=True) start_date = models.DateField(null=True, blank=True)
end_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) additional_json_data = models.JSONField(default=dict, blank=True)
def __str__(self): def __str__(self):

View File

@ -1,12 +1,13 @@
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from vbv_lernwelt.assignment.models import AssignmentType
from vbv_lernwelt.duedate.models import DueDate from vbv_lernwelt.duedate.models import DueDate
class CourseSessionAttendanceCourse(models.Model): class CourseSessionAttendanceCourse(models.Model):
""" """
Präsenzkurs Durchührung Präsenztag Durchührung
Kann über einen Zeitraum von meheren Tagen gehen. Kann über einen Zeitraum von meheren Tagen gehen.
""" """
@ -30,13 +31,18 @@ class CourseSessionAttendanceCourse(models.Model):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if not self.pk: if not self.pk:
title = "" title = ""
url = ""
page = None page = None
if self.learning_content_id: if self.learning_content_id:
title = self.learning_content.title title = self.learning_content.title
page = self.learning_content.page_ptr page = self.learning_content.page_ptr
url = self.learning_content.get_frontend_url()
self.due_date = DueDate.objects.create( 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, course_session=self.course_session,
page=page) page=page)
super().save(*args, **kwargs) super().save(*args, **kwargs)
@ -63,31 +69,52 @@ class CourseSessionAssignment(models.Model):
"duedate.DueDate", "duedate.DueDate",
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name="assignment_submission_deadline", related_name="assignment_submission_deadline",
null=True,
) )
evaluation_deadline = models.OneToOneField( evaluation_deadline = models.OneToOneField(
"duedate.DueDate", "duedate.DueDate",
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name="assignment_evaluation_deadline", related_name="assignment_evaluation_deadline",
null=True,
) )
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if not self.pk: if not self.pk:
title = "" title = ""
url = ""
page = None page = None
assignment_type_description = ""
if self.learning_content_id: if self.learning_content_id:
title = self.learning_content.title title = self.learning_content.title
page = self.learning_content.page_ptr 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( if assignment_type in {AssignmentType.CASEWORK, AssignmentType.PREP_ASSIGNMENT}: # Reflexion
title=f"{title} {_('Submission Deadline')}", self.submission_deadline = DueDate.objects.create(
course_session=self.course_session, url=url,
page=page) 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) super().save(*args, **kwargs)
def __str__(self): def __str__(self):

View File

@ -13,6 +13,8 @@ class DueDate(models.Model):
start = models.DateTimeField(null=True, db_index=True) start = models.DateTimeField(null=True, db_index=True)
end = models.DateTimeField(db_index=True, null=True) end = models.DateTimeField(db_index=True, null=True)
title = models.CharField(default=_("Termin"), max_length=1024) 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) url = models.URLField(null=True, blank=True, max_length=1024)
course_session = models.ForeignKey( course_session = models.ForeignKey(
"course.CourseSession", "course.CourseSession",