From 20c406a7a82749b631aaf670088882ed62360706 Mon Sep 17 00:00:00 2001 From: Reto Tschuppert Date: Fri, 19 Sep 2025 11:47:41 +0200 Subject: [PATCH] Add setting, initial version for template --- src/onegov/org/forms/settings.py | 9 +++++++ src/onegov/org/models/organisation.py | 2 ++ src/onegov/org/templates/mail_newsletter.pt | 22 +++++++++++++-- tests/onegov/org/test_cronjobs.py | 30 ++++++++++++++------- 4 files changed, 51 insertions(+), 12 deletions(-) diff --git a/src/onegov/org/forms/settings.py b/src/onegov/org/forms/settings.py index 6b00835d5f..0d6175e34c 100644 --- a/src/onegov/org/forms/settings.py +++ b/src/onegov/org/forms/settings.py @@ -1387,6 +1387,15 @@ class NewsletterSettingsForm(Form): default=False ) + show_news_as_tiles = BooleanField( + label=_('Show news as tiles'), + description=_( + 'If checked, news are displayed as tiles. Otherwise, ' + 'news are listed in full length.'), + fieldset=_('Automatic newsletters'), + default=True + ) + newsletter_times = TagsField( label=_('Newsletter sending times (24h format)'), fieldset=_('Automatic newsletters'), diff --git a/src/onegov/org/models/organisation.py b/src/onegov/org/models/organisation.py index 233502346c..76b38deb56 100644 --- a/src/onegov/org/models/organisation.py +++ b/src/onegov/org/models/organisation.py @@ -255,6 +255,8 @@ class Organisation(Base, TimestampMixin): notify_on_unsubscription: dict_property[list[str] | None] = meta_property() enable_automatic_newsletters: dict_property[bool] = meta_property( default=False) + # News in automatic newsletters shall be shown as tiles + show_news_as_tiles: dict_property[bool] = meta_property(default=True) newsletter_times: dict_property[list[str] | None] = meta_property() # Chat Settings diff --git a/src/onegov/org/templates/mail_newsletter.pt b/src/onegov/org/templates/mail_newsletter.pt index 03e14bd862..2416fae869 100644 --- a/src/onegov/org/templates/mail_newsletter.pt +++ b/src/onegov/org/templates/mail_newsletter.pt @@ -9,7 +9,7 @@

Latest news

- + ${item.title} @@ -18,7 +18,25 @@ - + + +
+
+
+
+
+
+
+
+
+ +

${item.title}

+
+

${layout.format_date(item.published_or_created, 'relative')}

+

${item.lead}

+
+
+
diff --git a/tests/onegov/org/test_cronjobs.py b/tests/onegov/org/test_cronjobs.py index 8ec79dfe52..03556ffabf 100644 --- a/tests/onegov/org/test_cronjobs.py +++ b/tests/onegov/org/test_cronjobs.py @@ -779,6 +779,7 @@ def test_send_daily_newsletter(es_org_app): session = org_app.session() org_app.org.enable_automatic_newsletters = True + org_app.org.show_news_as_tiles = False org_app.org.newsletter_times = '10', '11', '16' news = PageCollection(session) @@ -805,11 +806,15 @@ def test_send_daily_newsletter(es_org_app): with freeze_time(datetime(2018, 3, 5, 10, 0, tzinfo=tz)): # Created today at 10:00, published immediately news.add( - parent=news_parent, title='News3', type='news', access='public') + parent=news_parent, title='News3', type='news', access='public', + lead='Lead of News 3', + ) # Created today at 10:00, published today 10:01 news.add( parent=news_parent, title='News4', type='news', access='public', - publication_start=utcnow() + timedelta(minutes=1)) + publication_start=utcnow() + timedelta(minutes=1), + lead='Lead of News 4', + ) transaction.commit() @@ -823,10 +828,13 @@ def test_send_daily_newsletter(es_org_app): assert newsletter.title == 'Täglicher Newsletter 05.03.2018, 10:00' assert len(os.listdir(client.app.maildir)) == 1 mail = client.get_email(0) - assert "News1" in mail['TextBody'] - assert "News2" in mail['TextBody'] - assert "News3" not in mail['TextBody'] - assert "News4" not in mail['TextBody'] + assert 'News1' in mail['TextBody'] + assert 'News2' in mail['TextBody'] + assert 'News3' not in mail['TextBody'] + assert 'News4' not in mail['TextBody'] + + org_app.org.show_news_as_tiles = True + transaction.commit() with freeze_time(datetime(2018, 3, 5, 11, 0, tzinfo=tz)): client.get(get_cronjob_url(job)) @@ -836,10 +844,12 @@ def test_send_daily_newsletter(es_org_app): assert 'Täglicher Newsletter 05.03.2018, 11:00' in newsletter.title assert len(os.listdir(client.app.maildir)) == 2 mail = client.get_email(1) - assert "News1" not in mail['TextBody'] - assert "News2" not in mail['TextBody'] - assert "News3" in mail['TextBody'] - assert "News4" in mail['TextBody'] + assert 'News1' not in mail['TextBody'] + assert 'News2' not in mail['TextBody'] + assert 'News3' in mail['TextBody'] + assert 'Lead of News 3' in mail['TextBody'] + assert 'News4' in mail['TextBody'] + assert 'Lead of News 4' in mail['TextBody'] with freeze_time(datetime(2018, 3, 5, 16, 0, tzinfo=tz)): client.get(get_cronjob_url(job))