From 027789fa332ef881b6dec574fd914c2f4ff2a6bc Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Sun, 8 Mar 2020 14:50:41 +0100
Subject: [PATCH] Add missing models

---
 .../0007_advanced_models_from_untis.py        | 77 ++++++++++++++++++-
 aleksis/apps/chronos/models.py                | 34 +++++++-
 2 files changed, 108 insertions(+), 3 deletions(-)

diff --git a/aleksis/apps/chronos/migrations/0007_advanced_models_from_untis.py b/aleksis/apps/chronos/migrations/0007_advanced_models_from_untis.py
index add8928a..2eaf543f 100644
--- a/aleksis/apps/chronos/migrations/0007_advanced_models_from_untis.py
+++ b/aleksis/apps/chronos/migrations/0007_advanced_models_from_untis.py
@@ -1,5 +1,6 @@
-# Generated by Django 3.0.2 on 2020-03-07 13:53
+# Generated by Django 3.0.2 on 2020-03-08 13:49
 
+import colorfield.fields
 import django.contrib.postgres.fields.jsonb
 from django.db import migrations, models
 import django.db.models.deletion
@@ -40,6 +41,22 @@ class Migration(migrations.Migration):
                 'verbose_name': 'Absence reason',
             },
         ),
+        migrations.CreateModel(
+            name='Event',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('extended_data', django.contrib.postgres.fields.jsonb.JSONField(default=dict, editable=False)),
+                ('title', models.CharField(max_length=50, verbose_name='Title')),
+                ('datefrom', models.DateField(null=True, verbose_name='Effective start date of event')),
+                ('dateto', models.DateField(null=True, verbose_name='Effective end date of event')),
+                ('timefrom', models.DateTimeField(null=True, verbose_name='Effective start time of event')),
+                ('timeto', models.DateTimeField(null=True, verbose_name='Effective end time of event')),
+            ],
+            options={
+                'verbose_name': 'Events',
+                'ordering': ['datefrom'],
+            },
+        ),
         migrations.CreateModel(
             name='Exam',
             fields=[
@@ -70,6 +87,33 @@ class Migration(migrations.Migration):
                 'ordering': ['datefrom'],
             },
         ),
+        migrations.CreateModel(
+            name='SupervisionArea',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('extended_data', django.contrib.postgres.fields.jsonb.JSONField(default=dict, editable=False)),
+                ('name', models.CharField(max_length=10, verbose_name='Short name')),
+                ('longname', models.CharField(max_length=50, verbose_name='Long name')),
+                ('colour_fg', colorfield.fields.ColorField(default='#FFFFFF', max_length=18)),
+                ('colour_bg', colorfield.fields.ColorField(default='#FFFFFF', max_length=18)),
+            ],
+            options={
+                'verbose_name': 'Supervision areas',
+                'ordering': ['name'],
+            },
+        ),
+        migrations.CreateModel(
+            name='TimetableWidget',
+            fields=[
+            ],
+            options={
+                'verbose_name': 'Timetable widget',
+                'proxy': True,
+                'indexes': [],
+                'constraints': [],
+            },
+            bases=('core.dashboardwidget',),
+        ),
         migrations.AddIndex(
             model_name='holiday',
             index=models.Index(fields=['datefrom', 'dateto'], name='chronos_hol_datefro_36520a_idx'),
@@ -79,10 +123,35 @@ class Migration(migrations.Migration):
             name='lesson',
             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lesson', to='chronos.Lesson'),
         ),
+        migrations.AddField(
+            model_name='event',
+            name='absence_reason',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='absence_reason', to='chronos.AbsenceReason', verbose_name='Absence reason'),
+        ),
+        migrations.AddField(
+            model_name='event',
+            name='group',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='group', to='core.Group', verbose_name='Group'),
+        ),
+        migrations.AddField(
+            model_name='event',
+            name='periodfrom',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='periodfrom', to='chronos.TimePeriod', verbose_name='Effective start period of event'),
+        ),
+        migrations.AddField(
+            model_name='event',
+            name='periodto',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='periodto', to='chronos.TimePeriod', verbose_name='Effective end period of event'),
+        ),
+        migrations.AddField(
+            model_name='event',
+            name='subject',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subject', to='chronos.Subject', verbose_name='Subject'),
+        ),
         migrations.AddField(
             model_name='absence',
             name='person',
-            field=models.ManyToManyField(related_name='person', to='core.Person'),
+            field=models.ManyToManyField(related_name='fk_person', to='core.Person'),
         ),
         migrations.AddField(
             model_name='absence',
@@ -93,6 +162,10 @@ class Migration(migrations.Migration):
             model_name='exam',
             index=models.Index(fields=['periodfrom', 'periodto'], name='chronos_exa_periodf_2f686a_idx'),
         ),
+        migrations.AddIndex(
+            model_name='event',
+            index=models.Index(fields=['periodfrom', 'periodto'], name='chronos_eve_periodf_1fa12c_idx'),
+        ),
         migrations.AddIndex(
             model_name='absence',
             index=models.Index(fields=['datefrom', 'dateto'], name='chronos_abs_datefro_d55b67_idx'),
diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index 012abce8..84cc04c7 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -17,6 +17,7 @@ from django.utils.decorators import classproperty
 from django.utils.translation import ugettext_lazy as _
 
 from calendarweek.django import CalendarWeek, i18n_day_names_lazy, i18n_day_abbrs_lazy
+from colorfield.fields import ColorField
 from django_global_request.middleware import get_request
 
 from aleksis.core.mixins import ExtensibleModel
@@ -611,7 +612,7 @@ class Exam(ExtensibleModel):
 
     date = models.DateField(verbose_name=_("Date of exam"), null=True)
     periodfrom = models.IntegerField(verbose_name=_("Effective start period of exam"), null=True)
-    periodto = models.IntegerField(verbose_name=_("Effective end period of exam"), null=True)  
+    periodto = models.IntegerField(verbose_name=_("Effective end period of exam"), null=True)
     title = models.CharField(verbose_name=_("Title"), max_length=50)
     comment = models.TextField(verbose_name=_("Comment"))
 
@@ -630,3 +631,34 @@ class Holiday(ExtensibleModel):
         ordering = ["datefrom"]
         indexes = [models.Index(fields=["datefrom", "dateto"])]
         verbose_name = _("Holiday")
+
+
+class SupervisionArea(ExtensibleModel):
+    name = models.CharField(verbose_name=_("Short name"), max_length=10)
+    longname = models.CharField(verbose_name=_("Long name"), max_length=50)
+    colour_fg = ColorField()
+    colour_bg = ColorField()
+
+    class Meta:
+        ordering = ["name"]
+        verbose_name = _("Supervision area")
+        verbose_name = _("Supervision areas")
+
+
+class Event(ExtensibleModel):
+    title = models.CharField(verbose_name=_("Title"), max_length=50)
+    datefrom = models.DateField(verbose_name=_("Effective start date of event"), null=True)
+    dateto = models.DateField(verbose_name=_("Effective end date of event"), null=True)
+    absence_reason = models.ForeignKey("AbsenceReason", on_delete=models.CASCADE, related_name="absence_reason", verbose_name=_("Absence reason"))
+    periodfrom = models.ForeignKey("TimePeriod", on_delete=models.CASCADE, related_name="periodfrom", verbose_name=_("Effective start period of event"))
+    periodto = models.ForeignKey("TimePeriod", on_delete=models.CASCADE, related_name="periodto", verbose_name=_("Effective end period of event"))
+    group = models.ForeignKey("core.Group", on_delete=models.CASCADE, related_name="group", verbose_name=_("Group"))
+    subject = models.ForeignKey("Subject", on_delete=models.CASCADE, related_name="subject", verbose_name=_("Subject"))
+    timefrom = models.DateTimeField(verbose_name=_("Effective start time of event"), null=True)
+    timeto = models.DateTimeField(verbose_name=_("Effective end time of event"), null=True)
+
+    class Meta:
+        ordering = ["datefrom"]
+        indexes = [models.Index(fields=["periodfrom", "periodto"])]
+        verbose_name = _("Event")
+        verbose_name = _("Events")
-- 
GitLab