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 wagtail.models import Page from vbv_lernwelt.core.model_utils import find_available_slug from vbv_lernwelt.core.models import User class Course(models.Model): title = models.CharField(_("Titel"), max_length=255) category_name = models.CharField( _("Kategorie-Name"), max_length=255, default="Kategorie" ) class Meta: verbose_name = _("Lehrgang") def __str__(self): return f"{self.title}" class CourseCategory(models.Model): # Die Handlungsfelder im "Versicherungsvermittler/in" title = models.CharField(_("Titel"), max_length=255, blank=True) course = models.ForeignKey("course.Course", on_delete=models.CASCADE) general = models.BooleanField(_("Allgemein"), default=False) def __str__(self): return f"{self.course} / {self.title}" class CoursePage(Page): content_panels = Page.content_panels subpage_types = ["learnpath.LearningPath", "media_library.MediaLibraryPage"] course = models.ForeignKey("course.Course", on_delete=models.PROTECT) class Meta: verbose_name = _("Lehrgang-Seite") def full_clean(self, *args, **kwargs): self.slug = find_available_slug(slugify(self.title, allow_unicode=True)) super(CoursePage, self).full_clean(*args, **kwargs) def __str__(self): return f"{self.title}" class CourseCompletion(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) user = models.ForeignKey(User, on_delete=models.CASCADE) # page can logically be a LearningContent or a PerformanceCriteria for now page_key = models.UUIDField() page_type = models.CharField(max_length=255, default="", blank=True) page_slug = models.CharField(max_length=255, default="", blank=True) course = models.ForeignKey("course.Course", on_delete=models.CASCADE) completion_status = models.CharField( max_length=255, choices=[ ("unknown", "unknown"), ("success", "success"), ("fail", "fail"), ], default="unknown", ) additional_json_data = models.JSONField(default=dict) class Meta: constraints = [ UniqueConstraint( fields=[ "user", "page_key", ], name="course_completion_unique_user_page_key", ) ]