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"))