le75
clone your own copy | download snapshot

Snapshots | iceberg

Inside this repository

models.py
text/x-python

Download raw (6.7 KB)

from django.db import models
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from filer.fields.image import FilerImageField
from ckeditor.fields import RichTextField
from cms.models.pluginmodel import CMSPlugin


AUDIENCE_CHOICES = (
    (1, _("BAC 1")),
    (2, _("BAC 2")),
    (3, _("BAC 3")),
)
SEMESTER_CHOICES = (
    (1, _("Q1")),
    (2, _("Q2")),
    (3, _("Q1 and Q2")),
)

LANGUAGE_CHOICES = (
    (1, _("French")),
    (2, _("English")),
    (3, _("Dutch")),
)

YEAR_CHOICES = (
    (2015, "2015-2016"),
    (2016, "2016-2017"),
    (2017, "2017-2018"),
    (2018, "2018-2019"),
    (2019, "2019-2020"),
    (2020, "2020-2021"),
    (2021, "2021-2022"),
)

class TeachingUnit(models.Model):
    is_published =  models.BooleanField(verbose_name=_("is published?"))
    name = models.CharField(max_length=250, verbose_name=_("course official name"))
    common_name = models.CharField(max_length=50, verbose_name=_("course common name"), blank=True)
    slug = models.SlugField(unique=True, verbose_name=_("slug"), help_text=_("Unique identifier. Allows a constant targeting of this person"))
    ue = models.PositiveIntegerField()
    year = models.IntegerField(default=2015, choices=YEAR_CHOICES, verbose_name=_("academic year"))
    audience = models.PositiveSmallIntegerField(choices=AUDIENCE_CHOICES, verbose_name=_("audience"))
    orientation = models.ManyToManyField("Orientation", verbose_name=_("orientation"))
    course_type = models.ManyToManyField("CourseType", verbose_name=_("course type"))
    category = models.ManyToManyField("Category", verbose_name=_("category"))
    semester = models.PositiveSmallIntegerField(choices=SEMESTER_CHOICES, verbose_name=_("semester"))
    hours = models.PositiveSmallIntegerField(verbose_name=_("hours"))
    ects = models.PositiveSmallIntegerField(verbose_name=_("ects"))

    def __str__(self):
        return self.name

    def teacher_list(self):
        teachers = []
        for course in self.course_set.all():
            for teacher in course.teachers.all():
                if teacher not in teachers:
                    teachers.append(teacher)
        return teachers

    class Meta:
        verbose_name = _("TeachingUnit")
        verbose_name_plural = _("TeachingUnits")
        ordering = ["-year", "ue"]

    def get_absolute_url(self):
        return reverse('teaching-unit-detail', kwargs={'slug': self.slug})


class Course(models.Model):
    teaching_unit = models.ForeignKey(TeachingUnit, verbose_name=_("teaching unit"))
    teachers = models.ManyToManyField("Teacher", verbose_name=_("teachers"))
    is_mandatory = models.BooleanField(verbose_name=_("mandatory?"))
    co_required = RichTextField(verbose_name=_("co-required courses"), blank=True)
    pre_required = RichTextField(verbose_name=_("pre-required"), blank=True)
    goals = RichTextField(verbose_name=_("goals"))
    outcomes = RichTextField(verbose_name=_("learning outcomes"))
    methodology = RichTextField(verbose_name=_("methodology"))
    content = RichTextField(verbose_name=_("content"), blank=True)
    evaluation_mode = RichTextField(verbose_name=_("evaluation mode"))
    evaluation_criterias = RichTextField(verbose_name=("evaluation criterias"))
    language = models.PositiveSmallIntegerField(choices=LANGUAGE_CHOICES, verbose_name=_("teaching and evaluation language"))
    references = RichTextField(verbose_name=_("potential sources, references and materials"), blank=True)

    def __str__(self):
        return self.teaching_unit.name

    class Meta:
        verbose_name = _("Course")
        verbose_name_plural = _("Courses")

    def get_absolute_url(self):
        return reverse('teaching-unit-detail', kwargs={'slug': self.teaching_unit.slug})


class Orientation(models.Model):
    name = models.CharField(max_length=50, verbose_name=_("name"))
    slug = models.CharField(max_length=50, verbose_name=_("slug"))

    class Meta:
        verbose_name = _("Orientation")
        verbose_name_plural = _("Orientations")
        ordering = ["name"]

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('orientation-detail', kwargs={'slug': self.slug})

    def get_teachers(self):
        teachers = []
        for ue in self.teachingunit_set.all():
            for course in ue.course_set.all():
                for teacher in course.teachers.all():
                    if teacher not in teachers:
                        teachers.append(teacher)
        return teachers


class CourseType(models.Model):
    name = models.CharField(max_length=50, verbose_name=_("name"))

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = _("Course type")
        verbose_name_plural = _("Course types")
        ordering = ["name"]


class Category(models.Model):
    name = models.CharField(max_length=50, verbose_name=_("category name"))

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = _("Course category")
        verbose_name_plural = _("Course categories")
        ordering = ["name"]


class Teacher(models.Model):
    firstname = models.CharField(max_length=50, verbose_name=_("first name"))
    lastname = models.CharField(max_length=50, verbose_name=_("last name"))
    slug = models.CharField(max_length=100, verbose_name=_("slug"), null=True)
    department = models.ForeignKey("Department", related_name=("teacher_department"), null=True)
    role = models.CharField(max_length=100, verbose_name=_("role"))
    responsibilities = models.TextField(verbose_name=_("responsibilities"), blank=True)
    email = models.EmailField(verbose_name=_("email"), blank=True)
    phonenumber = models.CharField(max_length=20, verbose_name=_("phone number"), blank=True)
    website = models.URLField(verbose_name=_("website"), blank=True)
    bio = RichTextField(verbose_name=_("short biography"), blank=True)
    image = FilerImageField(null=True, blank=True, related_name="teacher_image", verbose_name=_("picture"))

    def __str__(self):
        return u"%s %s" % (self.lastname, self.firstname)

    class Meta:
        verbose_name = _("Staff member")
        verbose_name_plural = _("Staff members")
        ordering = ["lastname", "firstname"]

    def get_absolute_url(self):
        return reverse('teacher-detail', kwargs={'slug': u"%s" % self.slug})


class Department(models.Model):
    name = models.CharField(max_length=50, verbose_name=_("name"))

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = _("Working Department")
        verbose_name_plural = _("Working Departments")
        ordering = ["name"]


class OrientationPluginModel(CMSPlugin):
    orientation = models.ForeignKey(Orientation, verbose_name=_("orientation"))