From 3aba16e82bf226e1145f3b344cf767a09ccc83c4 Mon Sep 17 00:00:00 2001 From: Emmanuel Cazenave Date: Wed, 26 Feb 2020 11:50:11 +0100 Subject: [PATCH] virtual agendas: allow direct relation from agenda to timeperiod (#40058) --- .../migrations/0040_timeperiod_agenda.py | 33 +++++++++++++++++++ chrono/agendas/models.py | 10 +++++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 chrono/agendas/migrations/0040_timeperiod_agenda.py diff --git a/chrono/agendas/migrations/0040_timeperiod_agenda.py b/chrono/agendas/migrations/0040_timeperiod_agenda.py new file mode 100644 index 00000000..e07ec7d8 --- /dev/null +++ b/chrono/agendas/migrations/0040_timeperiod_agenda.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2020-02-26 13:27 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('agendas', '0039_booking_delays'), + ] + + operations = [ + migrations.AddField( + model_name='timeperiod', + name='agenda', + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='excluded_timeperiods', + to='agendas.Agenda', + ), + ), + migrations.AlterField( + model_name='timeperiod', + name='desk', + field=models.ForeignKey( + null=True, on_delete=django.db.models.deletion.CASCADE, to='agendas.Desk' + ), + ), + ] diff --git a/chrono/agendas/models.py b/chrono/agendas/models.py index ae19acf4..5f5a089d 100644 --- a/chrono/agendas/models.py +++ b/chrono/agendas/models.py @@ -326,7 +326,10 @@ class TimePeriod(models.Model): weekday = models.IntegerField(_('Week day'), choices=WEEKDAYS_LIST) start_time = models.TimeField(_('Start')) end_time = models.TimeField(_('End')) - desk = models.ForeignKey('Desk', on_delete=models.CASCADE) + desk = models.ForeignKey('Desk', on_delete=models.CASCADE, null=True) + agenda = models.ForeignKey( + Agenda, on_delete=models.CASCADE, null=True, related_name='excluded_timeperiods' + ) class Meta: ordering = ['weekday', 'start_time'] @@ -338,6 +341,11 @@ class TimePeriod(models.Model): date_format(self.end_time, 'TIME_FORMAT'), ) + def save(self, *args, **kwargs): + if self.agenda: + assert self.agenda.kind == 'virtual', "a time peŕiod can only reference a virtual agenda" + super(TimePeriod, self).save(*args, **kwargs) + @property def weekday_str(self): return WEEKDAYS[self.weekday]