From a6e7d260eafa70a7faac8d8bba616baa9685972b Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sat, 18 Apr 2020 22:27:51 +0200 Subject: [PATCH] Add model for extra lessons --- aleksis/apps/chronos/admin.py | 14 +++++ .../chronos/migrations/0014_extra_lesson.py | 53 +++++++++++++++++++ aleksis/apps/chronos/models.py | 19 +++++++ 3 files changed, 86 insertions(+) create mode 100644 aleksis/apps/chronos/migrations/0014_extra_lesson.py diff --git a/aleksis/apps/chronos/admin.py b/aleksis/apps/chronos/admin.py index 816f9d16..a734e60f 100644 --- a/aleksis/apps/chronos/admin.py +++ b/aleksis/apps/chronos/admin.py @@ -17,6 +17,7 @@ from .models import ( AbsenceReason, Break, TimePeriod, + ExtraLesson, ) from .util.format import format_date_period, format_m2m @@ -91,6 +92,19 @@ class EventAdmin(admin.ModelAdmin): admin.site.register(Event, EventAdmin) +class ExtraLessonAdmin(admin.ModelAdmin): + def _groups(self, obj): + return format_m2m(obj.groups) + + def _teachers(self, obj): + return format_m2m(obj.teachers) + + list_display = ("week", "period", "subject", "_groups", "_teachers", "room") + + +admin.site.register(ExtraLesson, ExtraLessonAdmin) + + class HolidayAdmin(admin.ModelAdmin): list_display = ("title", "date_start", "date_end") diff --git a/aleksis/apps/chronos/migrations/0014_extra_lesson.py b/aleksis/apps/chronos/migrations/0014_extra_lesson.py new file mode 100644 index 00000000..b0610a5e --- /dev/null +++ b/aleksis/apps/chronos/migrations/0014_extra_lesson.py @@ -0,0 +1,53 @@ +# Generated by Django 3.0.5 on 2020-04-18 20:21 + +import calendarweek.calendarweek +import django.contrib.postgres.fields.jsonb +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('chronos', '0013_event_title_optional'), + ] + + operations = [ + migrations.CreateModel( + name='ExtraLesson', + 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)), + ('week', models.IntegerField(default=calendarweek.calendarweek.CalendarWeek.current_week, verbose_name='Week')), + ('comment', models.CharField(blank=True, max_length=255, null=True, verbose_name='Comment')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='extralesson', + name='groups', + field=models.ManyToManyField(related_name='extra_lessons', to='core.Group', verbose_name='Groups'), + ), + migrations.AddField( + model_name='extralesson', + name='period', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='extra_lessons', to='chronos.TimePeriod'), + ), + migrations.AddField( + model_name='extralesson', + name='room', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='extra_lessons', to='chronos.Room', verbose_name='Room'), + ), + migrations.AddField( + model_name='extralesson', + name='subject', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='extra_lessons', to='chronos.Subject', verbose_name='Subject'), + ), + migrations.AddField( + model_name='extralesson', + name='teachers', + field=models.ManyToManyField(related_name='extra_lessons_as_teacher', to='core.Person', verbose_name='Teachers'), + ), + ] diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index 8382a44e..0c37b208 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -1030,3 +1030,22 @@ class Event(ExtensibleModel): indexes = [models.Index(fields=["period_from", "period_to", "date_start", "date_end"])] verbose_name = _("Event") verbose_name_plural = _("Events") + + +class ExtraLesson(ExtensibleModel): + week = models.IntegerField(verbose_name=_("Week"), default=CalendarWeek.current_week) + period = models.ForeignKey("TimePeriod", models.CASCADE, related_name="extra_lessons") + + subject = models.ForeignKey("Subject", on_delete=models.CASCADE, related_name="extra_lessons", verbose_name=_("Subject")) + groups = models.ManyToManyField("core.Group", related_name="extra_lessons", verbose_name=_("Groups")) + teachers = models.ManyToManyField("core.Person", related_name="extra_lessons_as_teacher", verbose_name=_("Teachers")) + room = models.ForeignKey("Room", models.CASCADE, null=True, related_name="extra_lessons", verbose_name=_("Room")) + + comment = models.CharField(verbose_name=_("Comment"), blank=True, null=True, max_length=255) + + def __str__(self): + return "{}, {}, {}".format(self.week, self.period, self.subject) + + class Meta: + verbose_name = _("Extra lesson") + verbose_name_plural = _("Extra lessons") -- GitLab