Skip to content
Snippets Groups Projects
models.py 2.33 KiB
Newer Older
Nik | Klampfradler's avatar
Nik | Klampfradler committed
from django.db import models
from django.utils.translation import ugettext_lazy as _

from biscuit.core.mixins import SchoolRelated


class PersonalNote(SchoolRelated):
    """ A personal note about a single person. Used in the class register to note
    absences, excuses and remarks about a student in a single lesson period.
    """

    person = models.ForeignKey('core.Person', models.CASCADE, related_name='personal_notes')

    week = models.IntegerField()
    lesson_period = models.ForeignKey('chronos.LessonPeriod', models.CASCADE, related_name='personal_notes')

    absent = models.BooleanField(default=False)
    late = models.IntegerField(default=0)
    excused = models.BooleanField(default=False)

    remarks = models.CharField(max_length=200, blank=True)

    class Meta:
        unique_together = [['school', 'lesson_period', 'week', 'person']]
        ordering = ['lesson_period__lesson__date_start', 'week', 'lesson_period__period__weekday',
                    'lesson_period__period__period', 'person__last_name', 'person__first_name']


class LessonDocumentation(SchoolRelated):
    """ A documentation on a single lesson period. Non-personal, includes
    the topic and homework of the lesson.
    """

    week = models.IntegerField()
    lesson_period = models.ForeignKey(
        'chronos.LessonPeriod', models.CASCADE, related_name='documentations')
    topic = models.CharField(verbose_name=_('Lesson topic'), max_length=200, blank=True)
    homework = models.CharField(verbose_name=_('Homework'), max_length=200, blank=True)

    class Meta:
        unique_together = [['school', 'lesson_period', 'week']]
        ordering = ['lesson_period__lesson__date_start', 'week',
                    'lesson_period__period__weekday', 'lesson_period__period__period']


class PersonalNoteFilter(SchoolRelated):
    """ A filter definition that can generate statistics on personal note texts. """

    identifier = models.CharField(verbose_name=_('Identifier'), max_length=30,
                                  validators=[str.isidentifier])
    description = models.CharField(verbose_name=_('Description'), max_length=60, blank=True)

    regex = models.CharField(verbose_name=_('Match expression'), max_length=100)

    class Meta:
        unique_together = [['school', 'identifier'], ['school', 'description'], ['school', 'regex']]
        ordering = ['identifier']