diff --git a/aleksis/apps/chronos/admin.py b/aleksis/apps/chronos/admin.py index 816f9d16bde0a4bce277d6b729b3dc01bae4acb2..a734e60f005621d656b54e24541bcc124069b1f1 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 0000000000000000000000000000000000000000..b0610a5ed76763d087d33ddbdb74581732bc9e78 --- /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 8382a44e51c631adf95547ccd354324c4c3e2e87..0c37b20833974e671449359f91ee2f3b904431df 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")