diff --git a/biscuit/apps/chronos/migrations/0005_school_related.py b/biscuit/apps/chronos/migrations/0005_school_related.py new file mode 100644 index 0000000000000000000000000000000000000000..d30597a55d45f3f8998675d4a0853c7309efaeac --- /dev/null +++ b/biscuit/apps/chronos/migrations/0005_school_related.py @@ -0,0 +1,78 @@ +# Generated by Django 2.2.4 on 2019-09-03 14:10 + +import biscuit.apps.chronos.util +import biscuit.core.util.core_helpers +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('chronos', '0004_auto_20190821_1550'), + ] + + operations = [ + migrations.AddField( + model_name='lesson', + name='school', + field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'), + ), + migrations.AddField( + model_name='lessonperiod', + name='school', + field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'), + ), + migrations.AddField( + model_name='lessonsubstitution', + name='school', + field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'), + ), + migrations.AddField( + model_name='room', + name='school', + field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'), + ), + migrations.AddField( + model_name='subject', + name='school', + field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'), + ), + migrations.AddField( + model_name='timeperiod', + name='school', + field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'), + ), + migrations.AlterField( + model_name='room', + name='name', + field=models.CharField(max_length=30, verbose_name='Long name'), + ), + migrations.AlterField( + model_name='room', + name='short_name', + field=models.CharField(max_length=10, verbose_name='Short name, e.g. room number'), + ), + migrations.AlterField( + model_name='subject', + name='abbrev', + field=models.CharField(max_length=10, verbose_name='Abbreviation of subject in timetable'), + ), + migrations.AlterField( + model_name='subject', + name='name', + field=models.CharField(max_length=30, verbose_name='Long name of subject'), + ), + migrations.AlterUniqueTogether( + name='room', + unique_together={('school', 'name'), ('school', 'short_name')}, + ), + migrations.AlterUniqueTogether( + name='subject', + unique_together={('school', 'abbrev'), ('school', 'name')}, + ), + migrations.AlterUniqueTogether( + name='timeperiod', + unique_together={('school', 'weekday', 'period')}, + ), + ] diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py index 756391b38cbccc779420d14375bb71e289ca0e21..0242663d63070a238b4f3b253a321d051a14c637 100644 --- a/biscuit/apps/chronos/models.py +++ b/biscuit/apps/chronos/models.py @@ -5,10 +5,12 @@ from django.core import validators from django.db import models from django.utils.translation import ugettext_lazy as _ +from biscuit.core.mixins import SchoolRelated + from .util import current_week -class TimePeriod(models.Model): +class TimePeriod(SchoolRelated): WEEKDAY_CHOICES = [ (0, _('Sunday')), (1, _('Monday')), @@ -39,15 +41,15 @@ class TimePeriod(models.Model): return periods class Meta: - unique_together = [['weekday', 'period']] + unique_together = [['school', 'weekday', 'period']] ordering = ['weekday', 'period'] -class Subject(models.Model): +class Subject(SchoolRelated): abbrev = models.CharField(verbose_name=_( - 'Abbreviation of subject in timetable'), max_length=10, unique=True) + 'Abbreviation of subject in timetable'), max_length=10) name = models.CharField(verbose_name=_( - 'Long name of subject'), max_length=30, unique=True) + 'Long name of subject'), max_length=30) colour_fg = models.CharField(verbose_name=_('Foreground colour in timetable'), blank=True, validators=[ validators.RegexValidator(r'#[0-9A-F]{6}')], max_length=7) @@ -59,22 +61,24 @@ class Subject(models.Model): class Meta: ordering = ['name', 'abbrev'] + unique_together = [['school', 'abbrev'], ['school', 'name']] -class Room(models.Model): +class Room(SchoolRelated): short_name = models.CharField(verbose_name=_( - 'Short name, e.g. room number'), max_length=10, unique=True) + 'Short name, e.g. room number'), max_length=10) name = models.CharField(verbose_name=_('Long name'), - max_length=30, unique=True) + max_length=30) def __str__(self) -> str: return '%s (%s)' % (self.name, self.short_name) class Meta: ordering = ['name', 'short_name'] + unique_together = [['school', 'short_name'], ['school', 'name']] -class Lesson(models.Model): +class Lesson(SchoolRelated): subject = models.ForeignKey( 'Subject', on_delete=models.CASCADE, related_name='lessons') teachers = models.ManyToManyField('core.Person', related_name='lessons') @@ -99,7 +103,7 @@ class Lesson(models.Model): ordering = ['date_start'] -class LessonSubstitution(models.Model): +class LessonSubstitution(SchoolRelated): week = models.IntegerField(verbose_name=_('Week'), default=current_week) @@ -118,7 +122,7 @@ class LessonSubstitution(models.Model): 'lesson_period__period__weekday', 'lesson_period__period__period'] -class LessonPeriod(models.Model): +class LessonPeriod(SchoolRelated): lesson = models.ForeignKey('Lesson', models.CASCADE, related_name='lesson_periods') period = models.ForeignKey('TimePeriod', models.CASCADE, related_name='lesson_periods')