diff --git a/AKModel/admin.py b/AKModel/admin.py index 43b72e0ecf1e3ae0a3bbd707312477a7aa9a3c19..74818764fbb23e82881fe9e0035756a23ebcfae8 100644 --- a/AKModel/admin.py +++ b/AKModel/admin.py @@ -443,7 +443,7 @@ class AKOrgaMessageAdmin(admin.ModelAdmin): """ Admin interface for AKOrgaMessages """ - list_display = ['timestamp', 'ak', 'text'] + list_display = ['timestamp', 'ak', 'text', 'resolved'] list_filter = ['ak__event'] readonly_fields = ['timestamp', 'ak', 'text'] diff --git a/AKModel/locale/de_DE/LC_MESSAGES/django.po b/AKModel/locale/de_DE/LC_MESSAGES/django.po index 197948175ba9e5f0332325ae12c0d06a86f29535..fe18e5f14831f427f364e99365fad7f598d00dcd 100644 --- a/AKModel/locale/de_DE/LC_MESSAGES/django.po +++ b/AKModel/locale/de_DE/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-21 16:43+0200\n" +"POT-Creation-Date: 2024-04-24 23:45+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -104,15 +104,15 @@ msgstr "Bitte Verfügbarkeiten eintragen!" #: AKModel/availability/models.py:43 AKModel/models.py:60 AKModel/models.py:174 #: AKModel/models.py:251 AKModel/models.py:270 AKModel/models.py:296 -#: AKModel/models.py:350 AKModel/models.py:481 AKModel/models.py:520 -#: AKModel/models.py:602 AKModel/models.py:657 AKModel/models.py:848 +#: AKModel/models.py:350 AKModel/models.py:492 AKModel/models.py:531 +#: AKModel/models.py:621 AKModel/models.py:678 AKModel/models.py:869 msgid "Event" msgstr "Event" #: AKModel/availability/models.py:44 AKModel/models.py:175 #: AKModel/models.py:252 AKModel/models.py:271 AKModel/models.py:297 -#: AKModel/models.py:351 AKModel/models.py:482 AKModel/models.py:521 -#: AKModel/models.py:603 AKModel/models.py:658 AKModel/models.py:849 +#: AKModel/models.py:351 AKModel/models.py:493 AKModel/models.py:532 +#: AKModel/models.py:622 AKModel/models.py:679 AKModel/models.py:870 msgid "Associated event" msgstr "Zugehöriges Event" @@ -124,8 +124,8 @@ msgstr "Person" msgid "Person whose availability this is" msgstr "Person deren Verfügbarkeit hier abgebildet wird" -#: AKModel/availability/models.py:61 AKModel/models.py:485 -#: AKModel/models.py:510 AKModel/models.py:667 +#: AKModel/availability/models.py:61 AKModel/models.py:496 +#: AKModel/models.py:521 AKModel/models.py:688 msgid "Room" msgstr "Raum" @@ -134,7 +134,7 @@ msgid "Room whose availability this is" msgstr "Raum dessen Verfügbarkeit hier abgebildet wird" #: AKModel/availability/models.py:70 AKModel/models.py:359 -#: AKModel/models.py:509 AKModel/models.py:597 +#: AKModel/models.py:520 AKModel/models.py:616 msgid "AK" msgstr "AK" @@ -143,7 +143,7 @@ msgid "AK whose availability this is" msgstr "Verfügbarkeiten" #: AKModel/availability/models.py:79 AKModel/models.py:255 -#: AKModel/models.py:673 +#: AKModel/models.py:694 msgid "AK Category" msgstr "AK-Kategorie" @@ -213,7 +213,7 @@ msgstr "" "fürWünsche markieren, z.B. um während der Präsentation auf einem Touchscreen " "ausgefüllt zu werden?" -#: AKModel/forms.py:189 AKModel/models.py:842 +#: AKModel/forms.py:189 AKModel/models.py:863 msgid "Default Slots" msgstr "Standardslots" @@ -278,7 +278,7 @@ msgid "Finish" msgstr "Abschluss" #: AKModel/models.py:20 AKModel/models.py:243 AKModel/models.py:267 -#: AKModel/models.py:294 AKModel/models.py:312 AKModel/models.py:473 +#: AKModel/models.py:294 AKModel/models.py:312 AKModel/models.py:484 msgid "Name" msgstr "Name" @@ -341,8 +341,8 @@ msgid "" "Opening time for expression of interest. When left blank, no interest " "indication will be possible." msgstr "" -"Öffnungszeitpunkt für die Angabe von Interesse an AKs." -"Wenn das Feld leer bleibt, wird keine Abgabe von Interesse möglich sein." +"Öffnungszeitpunkt für die Angabe von Interesse an AKs.Wenn das Feld leer " +"bleibt, wird keine Abgabe von Interesse möglich sein." #: AKModel/models.py:38 msgid "Interest Window End" @@ -452,7 +452,7 @@ msgstr "Internet Link" msgid "Link to Homepage" msgstr "Link zu Homepage oder Webseite" -#: AKModel/models.py:178 AKModel/models.py:666 +#: AKModel/models.py:178 AKModel/models.py:687 msgid "AK Owner" msgstr "AK-Leitung" @@ -512,7 +512,7 @@ msgstr "AK-Tracks" msgid "Name of the Requirement" msgstr "Name der Anforderung" -#: AKModel/models.py:300 AKModel/models.py:670 +#: AKModel/models.py:300 AKModel/models.py:691 msgid "AK Requirement" msgstr "AK-Anforderung" @@ -651,263 +651,271 @@ msgstr "Export?" msgid "Include AK in wiki export?" msgstr "AK bei Wiki-Export berücksichtigen?" -#: AKModel/models.py:360 AKModel/models.py:661 +#: AKModel/models.py:360 AKModel/models.py:682 #: AKModel/templates/admin/AKModel/status/event_aks.html:10 #: AKModel/views/manage.py:73 AKModel/views/status.py:98 msgid "AKs" msgstr "AKs" -#: AKModel/models.py:473 +#: AKModel/models.py:484 msgid "Name or number of the room" msgstr "Name oder Nummer des Raums" -#: AKModel/models.py:474 +#: AKModel/models.py:485 msgid "Location" msgstr "Ort" -#: AKModel/models.py:475 +#: AKModel/models.py:486 msgid "Name or number of the location" msgstr "Name oder Nummer des Ortes" -#: AKModel/models.py:476 +#: AKModel/models.py:487 msgid "Capacity" msgstr "Kapazität" -#: AKModel/models.py:477 +#: AKModel/models.py:488 msgid "Maximum number of people (-1 for unlimited)." msgstr "Maximale Personenzahl (-1 wenn unbeschränkt)." -#: AKModel/models.py:478 +#: AKModel/models.py:489 msgid "Properties" msgstr "Eigenschaften" -#: AKModel/models.py:479 +#: AKModel/models.py:490 msgid "AK requirements fulfilled by the room" msgstr "AK-Anforderungen, die dieser Raum erfüllt" -#: AKModel/models.py:486 AKModel/views/status.py:60 +#: AKModel/models.py:497 AKModel/views/status.py:60 msgid "Rooms" msgstr "Räume" -#: AKModel/models.py:509 +#: AKModel/models.py:520 msgid "AK being mapped" msgstr "AK, der zugeordnet wird" -#: AKModel/models.py:511 +#: AKModel/models.py:522 msgid "Room the AK will take place in" msgstr "Raum in dem der AK stattfindet" -#: AKModel/models.py:512 AKModel/models.py:845 +#: AKModel/models.py:523 AKModel/models.py:866 msgid "Slot Begin" msgstr "Beginn des Slots" -#: AKModel/models.py:512 AKModel/models.py:845 +#: AKModel/models.py:523 AKModel/models.py:866 msgid "Time and date the slot begins" msgstr "Zeit und Datum zu der der AK beginnt" -#: AKModel/models.py:514 +#: AKModel/models.py:525 msgid "Duration" msgstr "Dauer" -#: AKModel/models.py:515 +#: AKModel/models.py:526 msgid "Length in hours" msgstr "Länge in Stunden" -#: AKModel/models.py:517 +#: AKModel/models.py:528 msgid "Scheduling fixed" msgstr "Planung fix" -#: AKModel/models.py:518 +#: AKModel/models.py:529 msgid "Length and time of this AK should not be changed" msgstr "Dauer und Zeit dieses AKs sollten nicht verändert werden" -#: AKModel/models.py:523 +#: AKModel/models.py:534 msgid "Last update" msgstr "Letzte Aktualisierung" -#: AKModel/models.py:526 +#: AKModel/models.py:537 msgid "AK Slot" msgstr "AK-Slot" -#: AKModel/models.py:527 AKModel/models.py:663 +#: AKModel/models.py:538 AKModel/models.py:684 msgid "AK Slots" msgstr "AK-Slot" -#: AKModel/models.py:549 AKModel/models.py:558 +#: AKModel/models.py:560 AKModel/models.py:569 msgid "Not scheduled yet" msgstr "Noch nicht geplant" -#: AKModel/models.py:598 +#: AKModel/models.py:617 msgid "AK this message belongs to" msgstr "AK zu dem die Nachricht gehört" -#: AKModel/models.py:599 +#: AKModel/models.py:618 msgid "Message text" msgstr "Nachrichtentext" -#: AKModel/models.py:600 +#: AKModel/models.py:619 msgid "Message to the organizers. This is not publicly visible." msgstr "" "Nachricht an die Organisator*innen. Diese ist nicht öffentlich sichtbar." -#: AKModel/models.py:606 +#: AKModel/models.py:623 +msgid "Resolved" +msgstr "Erledigt" + +#: AKModel/models.py:624 +msgid "This message has been resolved (no further action needed)" +msgstr "Diese Nachricht wurde vollständig bearbeitet (keine weiteren Aktionen notwendig" + +#: AKModel/models.py:627 msgid "AK Orga Message" msgstr "AK-Organachricht" -#: AKModel/models.py:607 +#: AKModel/models.py:628 msgid "AK Orga Messages" msgstr "AK-Organachrichten" -#: AKModel/models.py:624 +#: AKModel/models.py:645 msgid "Constraint Violation" msgstr "Constraintverletzung" -#: AKModel/models.py:625 AKModel/views/status.py:117 +#: AKModel/models.py:646 AKModel/views/status.py:117 msgid "Constraint Violations" msgstr "Constraintverletzungen" -#: AKModel/models.py:632 +#: AKModel/models.py:653 msgid "Owner has two parallel slots" msgstr "Leitung hat zwei Slots parallel" -#: AKModel/models.py:633 +#: AKModel/models.py:654 msgid "AK Slot was scheduled outside the AK's availabilities" msgstr "AK Slot wurde außerhalb der Verfügbarkeit des AKs platziert" -#: AKModel/models.py:634 +#: AKModel/models.py:655 msgid "Room has two AK slots scheduled at the same time" msgstr "Raum hat zwei AK Slots gleichzeitig" -#: AKModel/models.py:635 +#: AKModel/models.py:656 msgid "Room does not satisfy the requirement of the scheduled AK" msgstr "Room erfüllt die Anforderungen des platzierten AKs nicht" -#: AKModel/models.py:636 +#: AKModel/models.py:657 msgid "AK Slot is scheduled at the same time as an AK listed as a conflict" msgstr "" "AK Slot wurde wurde zur gleichen Zeit wie ein Konflikt des AKs platziert" -#: AKModel/models.py:637 +#: AKModel/models.py:658 msgid "AK Slot is scheduled before an AK listed as a prerequisite" msgstr "AK Slot wurde vor einem als Voraussetzung gelisteten AK platziert" -#: AKModel/models.py:639 +#: AKModel/models.py:660 msgid "" "AK Slot for AK with intention to submit a resolution is scheduled after " "resolution deadline" msgstr "" "AK Slot eines AKs mit Resoabsicht wurde nach der Resodeadline platziert" -#: AKModel/models.py:640 +#: AKModel/models.py:661 msgid "AK Slot in a category is outside that categories availabilities" msgstr "AK Slot wurde außerhalb der Verfügbarkeiten seiner Kategorie" -#: AKModel/models.py:641 +#: AKModel/models.py:662 msgid "Two AK Slots for the same AK scheduled at the same time" msgstr "Zwei AK Slots eines AKs wurden zur selben Zeit platziert" -#: AKModel/models.py:642 +#: AKModel/models.py:663 msgid "Room does not have enough space for interest in scheduled AK Slot" msgstr "Room hat nicht genug Platz für das Interesse am geplanten AK-Slot" -#: AKModel/models.py:643 +#: AKModel/models.py:664 msgid "AK Slot is scheduled outside the event's availabilities" msgstr "AK Slot wurde außerhalb der Verfügbarkeit des Events platziert" -#: AKModel/models.py:649 +#: AKModel/models.py:670 msgid "Warning" msgstr "Warnung" -#: AKModel/models.py:650 +#: AKModel/models.py:671 msgid "Violation" msgstr "Verletzung" -#: AKModel/models.py:652 +#: AKModel/models.py:673 msgid "Type" msgstr "Art" -#: AKModel/models.py:653 +#: AKModel/models.py:674 msgid "Type of violation, i.e. what kind of constraint was violated" msgstr "Art der Verletzung, gibt an welche Art Constraint verletzt wurde" -#: AKModel/models.py:654 +#: AKModel/models.py:675 msgid "Level" msgstr "Level" -#: AKModel/models.py:655 +#: AKModel/models.py:676 msgid "Severity level of the violation" msgstr "Schweregrad der Verletzung" -#: AKModel/models.py:662 +#: AKModel/models.py:683 msgid "AK(s) belonging to this constraint" msgstr "AK(s), die zu diesem Constraint gehören" -#: AKModel/models.py:664 +#: AKModel/models.py:685 msgid "AK Slot(s) belonging to this constraint" msgstr "AK Slot(s), die zu diesem Constraint gehören" -#: AKModel/models.py:666 +#: AKModel/models.py:687 msgid "AK Owner belonging to this constraint" msgstr "AK Leitung(en), die zu diesem Constraint gehören" -#: AKModel/models.py:668 +#: AKModel/models.py:689 msgid "Room belonging to this constraint" msgstr "Raum, der zu diesem Constraint gehört" -#: AKModel/models.py:671 +#: AKModel/models.py:692 msgid "AK Requirement belonging to this constraint" msgstr "AK Anforderung, die zu diesem Constraint gehört" -#: AKModel/models.py:673 +#: AKModel/models.py:694 msgid "AK Category belonging to this constraint" msgstr "AK Kategorie, di zu diesem Constraint gehört" -#: AKModel/models.py:675 +#: AKModel/models.py:696 msgid "Comment" msgstr "Kommentar" -#: AKModel/models.py:675 +#: AKModel/models.py:696 msgid "Comment or further details for this violation" msgstr "Kommentar oder weitere Details zu dieser Vereletzung" -#: AKModel/models.py:678 +#: AKModel/models.py:699 msgid "Timestamp" msgstr "Timestamp" -#: AKModel/models.py:678 +#: AKModel/models.py:699 msgid "Time of creation" msgstr "Zeitpunkt der ERstellung" -#: AKModel/models.py:679 +#: AKModel/models.py:700 msgid "Manually Resolved" msgstr "Manuell behoben" -#: AKModel/models.py:680 +#: AKModel/models.py:701 msgid "Mark this violation manually as resolved" msgstr "Markiere diese Verletzung manuell als behoben" -#: AKModel/models.py:707 +#: AKModel/models.py:728 #: AKModel/templates/admin/AKModel/requirements_overview.html:27 msgid "Details" msgstr "Details" -#: AKModel/models.py:841 +#: AKModel/models.py:862 msgid "Default Slot" msgstr "Standardslot" -#: AKModel/models.py:846 +#: AKModel/models.py:867 msgid "Slot End" msgstr "Ende des Slots" -#: AKModel/models.py:846 +#: AKModel/models.py:867 msgid "Time and date the slot ends" msgstr "Zeit und Datum zu der der Slot endet" -#: AKModel/models.py:851 +#: AKModel/models.py:872 msgid "Primary categories" msgstr "Primäre Kategorien" -#: AKModel/models.py:852 +#: AKModel/models.py:873 msgid "Categories that should be assigned to this slot primarily" msgstr "Kategorieren, die diesem Slot primär zugewiesen werden sollen" diff --git a/AKModel/migrations/0060_orga_message_resolved.py b/AKModel/migrations/0060_orga_message_resolved.py new file mode 100644 index 0000000000000000000000000000000000000000..b6df74bdc1dd8c8aa0eaffdd5ac30759837e4dcf --- /dev/null +++ b/AKModel/migrations/0060_orga_message_resolved.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.11 on 2024-04-24 21:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('AKModel', '0059_interest_default'), + ] + + operations = [ + migrations.AddField( + model_name='akorgamessage', + name='resolved', + field=models.BooleanField(default=False, help_text='This message has been resolved (no further action needed)', verbose_name='Resolved'), + ), + ] diff --git a/AKModel/models.py b/AKModel/models.py index aa4d67030c3460b15c66542f2612997672188d51..22586a57380b4ba368c440726ecccc3f6d73b1d0 100644 --- a/AKModel/models.py +++ b/AKModel/models.py @@ -620,6 +620,8 @@ class AKOrgaMessage(models.Model): timestamp = models.DateTimeField(auto_now_add=True) event = models.ForeignKey(to=Event, on_delete=models.CASCADE, verbose_name=_('Event'), help_text=_('Associated event')) + resolved = models.BooleanField(verbose_name=_('Resolved'), default=False, + help_text=_('This message has been resolved (no further action needed)')) class Meta: verbose_name = _('AK Orga Message') diff --git a/AKModel/templates/admin/AKModel/render_ak_messages.html b/AKModel/templates/admin/AKModel/render_ak_messages.html index fbadbc138817c2bd36df9bff9e67e6ca0522fb35..5406dc1373cf50c1dbccd8101677a76447f721cb 100644 --- a/AKModel/templates/admin/AKModel/render_ak_messages.html +++ b/AKModel/templates/admin/AKModel/render_ak_messages.html @@ -1,4 +1,5 @@ {% load tz %} +{% load fontawesome_6 %} {% timezone event.timezone %} <table class="table table-striped"> @@ -7,7 +8,10 @@ <span class="text-secondary float-end"> {{ message.timestamp|date:"Y-m-d H:i:s" }} </span> - <h5><a href="{{ message.ak.detail_url }}">{{ message.ak }}</a></h5> + <h5><a href="{{ message.ak.detail_url }}"> + {% if message.resolved %}{% fa6_icon "check-circle" %} {% endif %} + {{ message.ak }} + </a></h5> <p>{{ message.text }}</p> </td></tr> {% endfor %}