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 = _("Lerngang") 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 = _("Lerngang-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' ) ]