From e96156ddc8828742f28a8c46b4625e61f388420b Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Wed, 11 Mar 2020 16:18:45 +0100
Subject: [PATCH] Add "show_in_timetables" field to announcements

- Add JSON field
- Add filter method
- Add form row

Signed-off-by: Jonathan Weth <git@jonathanweth.de>
---
 aleksis/apps/chronos/forms.py  |  6 ++++++
 aleksis/apps/chronos/models.py | 12 +++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/aleksis/apps/chronos/forms.py b/aleksis/apps/chronos/forms.py
index d519ba6c..685f67f7 100644
--- a/aleksis/apps/chronos/forms.py
+++ b/aleksis/apps/chronos/forms.py
@@ -1,7 +1,10 @@
 from django import forms
 from django_select2.forms import ModelSelect2MultipleWidget
+from django.utils.translation import gettext_lazy as _
+from material import Fieldset
 
 from .models import LessonSubstitution
+from aleksis.core.forms import AnnouncementForm
 
 
 class LessonSubstitutionForm(forms.ModelForm):
@@ -17,3 +20,6 @@ class LessonSubstitutionForm(forms.ModelForm):
                 ]
             )
         }
+
+
+AnnouncementForm.add_node_to_layout(Fieldset(_("Options for timetables"), "show_in_timetables"))
diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index 55c5f7c4..704eee74 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -19,9 +19,10 @@ from django.utils.translation import ugettext_lazy as _
 
 from calendarweek.django import CalendarWeek, i18n_day_names_lazy, i18n_day_abbrs_lazy
 from django_global_request.middleware import get_request
+from jsonstore import BooleanField
 
 from aleksis.core.mixins import ExtensibleModel
-from aleksis.core.models import Group, Person, DashboardWidget
+from aleksis.core.models import Group, Person, DashboardWidget, Announcement
 
 from aleksis.apps.chronos.util.date import week_weekday_from_date
 from aleksis.core.util.core_helpers import has_person
@@ -552,6 +553,15 @@ class LessonPeriod(ExtensibleModel):
         indexes = [models.Index(fields=["lesson", "period"])]
 
 
+@classmethod
+def for_timetables(cls):
+    return cls.objects.filter(show_in_timetables=True)
+
+
+Announcement.for_timetables = for_timetables
+Announcement.field(show_in_timetables=BooleanField(verbose_name=_("Show announcement in timetable views?")))
+
+
 class TimetableWidget(DashboardWidget):
     template = "chronos/widget.html"
 
-- 
GitLab