From 1b3e5cdad4334c377144f62fd3f9d577b7624c09 Mon Sep 17 00:00:00 2001 From: magicfelix <felix@felix-zauberer.de> Date: Sat, 20 Jan 2024 19:20:23 +0100 Subject: [PATCH] Implement LiveDocument for announcements --- .../apps/infinita/migrations/0001_initial.py | 35 +++++++++++++++++++ infipoint/apps/infinita/models/documents.py | 28 +++++++++++++++ .../templates/infinita/announcements.html | 17 +++++++++ 3 files changed, 80 insertions(+) create mode 100644 infipoint/apps/infinita/migrations/0001_initial.py create mode 100644 infipoint/apps/infinita/models/documents.py create mode 100644 infipoint/apps/infinita/templates/infinita/announcements.html diff --git a/infipoint/apps/infinita/migrations/0001_initial.py b/infipoint/apps/infinita/migrations/0001_initial.py new file mode 100644 index 0000000..d417ced --- /dev/null +++ b/infipoint/apps/infinita/migrations/0001_initial.py @@ -0,0 +1,35 @@ +# Generated by Django 4.2.9 on 2024-01-20 14:52 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + initial = True + + dependencies = [ + ("resint", "0010_drop_site"), + ] + + operations = [ + migrations.CreateModel( + name="Announcements", + fields=[ + ( + "livedocument_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="resint.livedocument", + ), + ), + ], + options={ + "abstract": False, + }, + bases=("resint.livedocument",), + ), + ] diff --git a/infipoint/apps/infinita/models/documents.py b/infipoint/apps/infinita/models/documents.py new file mode 100644 index 0000000..ceca370 --- /dev/null +++ b/infipoint/apps/infinita/models/documents.py @@ -0,0 +1,28 @@ +from typing import Any, Dict + +from django.db.models.signals import post_save +from django.dispatch import receiver + +from aleksis.apps.resint.models import LiveDocument +from aleksis.core.models import Announcement + + +class Announcements(LiveDocument): + """Model for configuring automatically updated announcements PDF.""" + + template = "infinita/announcements.html" + + def get_context_data(self) -> Dict[str, Any]: + """Get context data for generating the substitutions PDF.""" + from aleksis.core.models import Announcement # noqa + + context = {"announcements": Announcement.objects.on_date()} + + return context + + +@receiver(post_save, sender=Announcement) +def announcements_signal_receiver(sender, instance, **kwargs): + if Announcement.objects.filter(pk=instance.pk).on_date(): + for document in Announcements.objects.all(): + document.update() diff --git a/infipoint/apps/infinita/templates/infinita/announcements.html b/infipoint/apps/infinita/templates/infinita/announcements.html new file mode 100644 index 0000000..1a97bdf --- /dev/null +++ b/infipoint/apps/infinita/templates/infinita/announcements.html @@ -0,0 +1,17 @@ +{# -*- engine:django -*- #} + +{% extends 'core/base_print.html' %} + +{% load i18n static %} + +{% block extra_head %} + <link rel="stylesheet" href="{% static 'css/chronos/timetable.css' %}"> +{% endblock %} + +{% block browser_title %}{% blocktrans %}Print: Announcements{% endblocktrans %}{% endblock %} +{% block page_title %}{% blocktrans %}Announcements{% endblocktrans %}{% endblock %} + + +{% block content %} +{% include "core/partials/announcements.html" with announcements=announcements %} +{% endblock %} -- GitLab