Skip to content
Snippets Groups Projects
Commit e030e675 authored by Felix Blanke's avatar Felix Blanke Committed by Lorenzo Conti
Browse files

Avoid setting the slot duration at import

parent 63d6c5ee
No related branches found
No related tags found
5 merge requests!262[WIP] compatibility with koma solver import/export,!261[WIP] compatibility with koma solver import/export,!260[WIP] import/export merge,!259Add view to clear schedule,!235Merge fork for interoperability of KoMa solver
......@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-31 14:22+0000\n"
"POT-Creation-Date: 2025-01-22 19:00+0000\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"
......@@ -33,7 +33,8 @@ msgstr "Plan veröffentlichen"
msgid "Unpublish plan"
msgstr "Plan verbergen"
#: AKModel/admin.py:168 AKModel/models.py:612 AKModel/models.py:1028
#: AKModel/admin.py:168 AKModel/models.py:689 AKModel/models.py:1114
#: AKModel/models.py:1150
#: AKModel/templates/admin/AKModel/status/event_aks.html:10
#: AKModel/views/manage.py:75 AKModel/views/status.py:97
msgid "AKs"
......@@ -59,11 +60,11 @@ msgstr "In Wiki-Syntax exportieren"
msgid "Cannot export AKs from more than one event at the same time."
msgstr "Kann nicht AKs von mehreren Events zur selben Zeit exportieren."
#: AKModel/admin.py:320 AKModel/views/ak.py:226
#: AKModel/admin.py:320 AKModel/views/ak.py:237
msgid "Reset interest in AKs"
msgstr "Interesse an AKs zurücksetzen"
#: AKModel/admin.py:330 AKModel/views/ak.py:241
#: AKModel/admin.py:330 AKModel/views/ak.py:252
msgid "Reset AKs' interest counters"
msgstr "Interessenszähler der AKs zurücksetzen"
......@@ -108,17 +109,18 @@ msgstr "Die eingegebene Verfügbarkeit enthält ein ungültiges Datum."
msgid "Please fill in your availabilities!"
msgstr "Bitte Verfügbarkeiten eintragen!"
#: AKModel/availability/models.py:43 AKModel/models.py:91 AKModel/models.py:412
#: AKModel/models.py:489 AKModel/models.py:522 AKModel/models.py:548
#: AKModel/models.py:602 AKModel/models.py:744 AKModel/models.py:820
#: AKModel/models.py:967 AKModel/models.py:1024 AKModel/models.py:1215
#: AKModel/availability/models.py:43 AKModel/models.py:160
#: AKModel/models.py:489 AKModel/models.py:566 AKModel/models.py:599
#: AKModel/models.py:625 AKModel/models.py:679 AKModel/models.py:821
#: AKModel/models.py:897 AKModel/models.py:1053 AKModel/models.py:1110
#: AKModel/models.py:1301
msgid "Event"
msgstr "Event"
#: AKModel/availability/models.py:44 AKModel/models.py:413
#: AKModel/models.py:490 AKModel/models.py:523 AKModel/models.py:549
#: AKModel/models.py:603 AKModel/models.py:745 AKModel/models.py:821
#: AKModel/models.py:968 AKModel/models.py:1025 AKModel/models.py:1216
#: AKModel/availability/models.py:44 AKModel/models.py:490
#: AKModel/models.py:567 AKModel/models.py:600 AKModel/models.py:626
#: AKModel/models.py:680 AKModel/models.py:822 AKModel/models.py:898
#: AKModel/models.py:1054 AKModel/models.py:1111 AKModel/models.py:1302
msgid "Associated event"
msgstr "Zugehöriges Event"
......@@ -130,8 +132,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:748
#: AKModel/models.py:810 AKModel/models.py:1034
#: AKModel/availability/models.py:61 AKModel/models.py:825
#: AKModel/models.py:887 AKModel/models.py:1120
msgid "Room"
msgstr "Raum"
......@@ -139,8 +141,8 @@ msgstr "Raum"
msgid "Room whose availability this is"
msgstr "Raum dessen Verfügbarkeit hier abgebildet wird"
#: AKModel/availability/models.py:70 AKModel/models.py:611
#: AKModel/models.py:809 AKModel/models.py:962
#: AKModel/availability/models.py:70 AKModel/models.py:688
#: AKModel/models.py:886 AKModel/models.py:1048
msgid "AK"
msgstr "AK"
......@@ -148,8 +150,8 @@ msgstr "AK"
msgid "AK whose availability this is"
msgstr "Verfügbarkeiten"
#: AKModel/availability/models.py:79 AKModel/models.py:493
#: AKModel/models.py:1040
#: AKModel/availability/models.py:79 AKModel/models.py:570
#: AKModel/models.py:1126
msgid "AK Category"
msgstr "AK-Kategorie"
......@@ -157,7 +159,7 @@ msgstr "AK-Kategorie"
msgid "AK Category whose availability this is"
msgstr "AK-Kategorie, deren Verfügbarkeit hier abgebildet wird"
#: AKModel/availability/models.py:300
#: AKModel/availability/models.py:300 AKModel/models.py:721
msgid "Availabilities"
msgstr "Verfügbarkeiten"
......@@ -219,7 +221,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:1209
#: AKModel/forms.py:189 AKModel/models.py:1295
msgid "Default Slots"
msgstr "Standardslots"
......@@ -266,7 +268,7 @@ msgstr "JSON-Daten"
msgid "JSON data from the scheduling solver"
msgstr "JSON-Daten, die der scheduling-solver produziert hat"
#: AKModel/metaviews/admin.py:156 AKModel/models.py:60
#: AKModel/metaviews/admin.py:156 AKModel/models.py:129
msgid "Start"
msgstr "Start"
......@@ -291,66 +293,66 @@ msgstr "Aktivieren?"
msgid "Finish"
msgstr "Abschluss"
#: AKModel/models.py:51 AKModel/models.py:481 AKModel/models.py:519
#: AKModel/models.py:546 AKModel/models.py:564 AKModel/models.py:736
#: AKModel/models.py:120 AKModel/models.py:558 AKModel/models.py:596
#: AKModel/models.py:623 AKModel/models.py:641 AKModel/models.py:813
msgid "Name"
msgstr "Name"
#: AKModel/models.py:52
#: AKModel/models.py:121
msgid "Name or iteration of the event"
msgstr "Name oder Iteration des Events"
#: AKModel/models.py:53
#: AKModel/models.py:122
msgid "Short Form"
msgstr "Kurzer Name"
#: AKModel/models.py:54
#: AKModel/models.py:123
msgid "Short name of letters/numbers/dots/dashes/underscores used in URLs."
msgstr ""
"Kurzname bestehend aus Buchstaben, Nummern, Punkten und Unterstrichen zur "
"Nutzung in URLs"
#: AKModel/models.py:56
#: AKModel/models.py:125
msgid "Place"
msgstr "Ort"
#: AKModel/models.py:57
#: AKModel/models.py:126
msgid "City etc. the event takes place in"
msgstr "Stadt o.ä. in der das Event stattfindet"
#: AKModel/models.py:59
#: AKModel/models.py:128
msgid "Time Zone"
msgstr "Zeitzone"
#: AKModel/models.py:59
#: AKModel/models.py:128
msgid "Time Zone where this event takes place in"
msgstr "Zeitzone in der das Event stattfindet"
#: AKModel/models.py:60
#: AKModel/models.py:129
msgid "Time the event begins"
msgstr "Zeit zu der das Event beginnt"
#: AKModel/models.py:61
#: AKModel/models.py:130
msgid "End"
msgstr "Ende"
#: AKModel/models.py:61
#: AKModel/models.py:130
msgid "Time the event ends"
msgstr "Zeit zu der das Event endet"
#: AKModel/models.py:62
#: AKModel/models.py:131
msgid "Resolution Deadline"
msgstr "Resolutionsdeadline"
#: AKModel/models.py:63
#: AKModel/models.py:132
msgid "When should AKs with intention to submit a resolution be done?"
msgstr "Wann sollen AKs mit Resolutionsabsicht stattgefunden haben?"
#: AKModel/models.py:65
#: AKModel/models.py:134
msgid "Interest Window Start"
msgstr "Beginn Interessensbekundung"
#: AKModel/models.py:67
#: AKModel/models.py:136
msgid ""
"Opening time for expression of interest. When left blank, no interest "
"indication will be possible."
......@@ -358,71 +360,71 @@ msgstr ""
"Ö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:69
#: AKModel/models.py:138
msgid "Interest Window End"
msgstr "Ende Interessensbekundung"
#: AKModel/models.py:70
#: AKModel/models.py:139
msgid "Closing time for expression of interest."
msgstr "Öffnungszeitpunkt für die Angabe von Interesse an AKs."
#: AKModel/models.py:72
#: AKModel/models.py:141
msgid "Public event"
msgstr "Öffentliches Event"
#: AKModel/models.py:73
#: AKModel/models.py:142
msgid "Show this event on overview page."
msgstr "Zeige dieses Event auf der Übersichtseite an"
#: AKModel/models.py:75
#: AKModel/models.py:144
msgid "Active State"
msgstr "Aktiver Status"
#: AKModel/models.py:75
#: AKModel/models.py:144
msgid "Marks currently active events"
msgstr "Markiert aktuell aktive Events"
#: AKModel/models.py:76
#: AKModel/models.py:145
msgid "Plan Hidden"
msgstr "Plan verborgen"
#: AKModel/models.py:76
#: AKModel/models.py:145
msgid "Hides plan for non-staff users"
msgstr "Verbirgt den Plan für Nutzer*innen ohne erweiterte Rechte"
#: AKModel/models.py:78
#: AKModel/models.py:147
msgid "Plan published at"
msgstr "Plan veröffentlicht am/um"
#: AKModel/models.py:79
#: AKModel/models.py:148
msgid "Timestamp at which the plan was published"
msgstr "Zeitpunkt, zu dem der Plan veröffentlicht wurde"
#: AKModel/models.py:81
#: AKModel/models.py:150
msgid "Base URL"
msgstr "URL-Prefix"
#: AKModel/models.py:81
#: AKModel/models.py:150
msgid "Prefix for wiki link construction"
msgstr "Prefix für die automatische Generierung von Wiki-Links"
#: AKModel/models.py:82
#: AKModel/models.py:151
msgid "Wiki Export Template Name"
msgstr "Wiki-Export Templatename"
#: AKModel/models.py:83
#: AKModel/models.py:152
msgid "Default Slot Length"
msgstr "Standardslotlänge"
#: AKModel/models.py:84
#: AKModel/models.py:153
msgid "Default length in hours that is assumed for AKs in this event."
msgstr "Standardlänge von Slots (in Stunden) für dieses Event"
#: AKModel/models.py:86
#: AKModel/models.py:155
msgid "Contact email address"
msgstr "E-Mail Kontaktadresse"
#: AKModel/models.py:87
#: AKModel/models.py:156
msgid ""
"An email address that is displayed on every page and can be used for all "
"kinds of questions"
......@@ -430,75 +432,107 @@ msgstr ""
"Eine Mailadresse die auf jeder Seite angezeigt wird und für alle Arten von "
"Fragen genutzt werden kann"
#: AKModel/models.py:92
#: AKModel/models.py:161
msgid "Events"
msgstr "Events"
#: AKModel/models.py:407
#: AKModel/models.py:430
#, python-brace-format
msgid "AK {ak_name} is not assigned any timeslot by the solver"
msgstr "Dem AK {ak_name} wurde vom Solver kein Zeitslot zugewiesen"
#: AKModel/models.py:440
#, python-brace-format
msgid ""
"Duration of AK {ak_name} assigned by solver ({solver_duration} hours) is "
"less than the duration required by the slot ({slot_duration} hours)"
msgstr ""
"Die dem AK {ak_name} vom Solver zugewiesene Dauer ({solver_duration} Stunden) ist "
"kürzer als die aktuell vorgesehene Dauer des Slots ({slot_duration} Stunden)"
#: AKModel/models.py:454
#, python-brace-format
msgid ""
"Fixed AK {ak_name} assigned by solver to room {solver_room} is fixed to room "
"{slot_room}"
msgstr ""
"Dem fix geplanten AK {ak_name} wurde vom Solver Raum {solver_room} zugewiesen, "
"dabei ist der AK bereits fix in Raum {slot_room} eingeplant."
#: AKModel/models.py:465
#, python-brace-format
msgid ""
"Fixed AK {ak_name} assigned by solver to start at {solver_start} is fixed to "
"start at {slot_start}"
msgstr ""
"Dem fix geplanten AK {ak_name} wurde vom Solver die Startzeit {solver_start} zugewiesen, "
"dabei ist der AK bereits für {slot_start} eingeplant."
#: AKModel/models.py:484
msgid "Nickname"
msgstr "Spitzname"
#: AKModel/models.py:407
#: AKModel/models.py:484
msgid "Name to identify an AK owner by"
msgstr "Name, durch den eine AK-Leitung identifiziert wird"
#: AKModel/models.py:408
#: AKModel/models.py:485
msgid "Slug"
msgstr "Slug"
#: AKModel/models.py:408
#: AKModel/models.py:485
msgid "Slug for URL generation"
msgstr "Slug für URL-Generierung"
#: AKModel/models.py:409
#: AKModel/models.py:486
msgid "Institution"
msgstr "Instutution"
#: AKModel/models.py:409
#: AKModel/models.py:486
msgid "Uni etc."
msgstr "Universität o.ä."
#: AKModel/models.py:410 AKModel/models.py:573
#: AKModel/models.py:487 AKModel/models.py:650
msgid "Web Link"
msgstr "Internet Link"
#: AKModel/models.py:410
#: AKModel/models.py:487
msgid "Link to Homepage"
msgstr "Link zu Homepage oder Webseite"
#: AKModel/models.py:416 AKModel/models.py:1033
#: AKModel/models.py:493 AKModel/models.py:1119
msgid "AK Owner"
msgstr "AK-Leitung"
#: AKModel/models.py:417
#: AKModel/models.py:494
msgid "AK Owners"
msgstr "AK-Leitungen"
#: AKModel/models.py:481
#: AKModel/models.py:558
msgid "Name of the AK Category"
msgstr "Name der AK-Kategorie"
#: AKModel/models.py:482 AKModel/models.py:520
#: AKModel/models.py:559 AKModel/models.py:597
msgid "Color"
msgstr "Farbe"
#: AKModel/models.py:482 AKModel/models.py:520
#: AKModel/models.py:559 AKModel/models.py:597
msgid "Color for displaying"
msgstr "Farbe für die Anzeige"
#: AKModel/models.py:483 AKModel/models.py:567
#: AKModel/models.py:560 AKModel/models.py:644
msgid "Description"
msgstr "Beschreibung"
#: AKModel/models.py:484
#: AKModel/models.py:561
msgid "Short description of this AK Category"
msgstr "Beschreibung der AK-Kategorie"
#: AKModel/models.py:485
#: AKModel/models.py:562
msgid "Present by default"
msgstr "Defaultmäßig präsentieren"
#: AKModel/models.py:486
#: AKModel/models.py:563
msgid ""
"Present AKs of this category by default if AK owner did not specify whether "
"this AK should be presented?"
......@@ -506,132 +540,132 @@ msgstr ""
"AKs dieser Kategorie standardmäßig vorstellen, wenn die Leitungen das für "
"ihren AK nicht explizit spezifiziert haben?"
#: AKModel/models.py:494
#: AKModel/models.py:571
msgid "AK Categories"
msgstr "AK-Kategorien"
#: AKModel/models.py:519
#: AKModel/models.py:596
msgid "Name of the AK Track"
msgstr "Name des AK-Tracks"
#: AKModel/models.py:526
#: AKModel/models.py:603
msgid "AK Track"
msgstr "AK-Track"
#: AKModel/models.py:527
#: AKModel/models.py:604
msgid "AK Tracks"
msgstr "AK-Tracks"
#: AKModel/models.py:546
#: AKModel/models.py:623
msgid "Name of the Requirement"
msgstr "Name der Anforderung"
#: AKModel/models.py:552 AKModel/models.py:1037
#: AKModel/models.py:629 AKModel/models.py:1123
msgid "AK Requirement"
msgstr "AK-Anforderung"
#: AKModel/models.py:553
#: AKModel/models.py:630
msgid "AK Requirements"
msgstr "AK-Anforderungen"
#: AKModel/models.py:564
#: AKModel/models.py:641
msgid "Name of the AK"
msgstr "Name des AKs"
#: AKModel/models.py:565
#: AKModel/models.py:642
msgid "Short Name"
msgstr "Kurzer Name"
#: AKModel/models.py:566
#: AKModel/models.py:643
msgid "Name displayed in the schedule"
msgstr "Name zur Anzeige im AK-Plan"
#: AKModel/models.py:567
#: AKModel/models.py:644
msgid "Description of the AK"
msgstr "Beschreibung des AKs"
#: AKModel/models.py:569
#: AKModel/models.py:646
msgid "Owners"
msgstr "Leitungen"
#: AKModel/models.py:570
#: AKModel/models.py:647
msgid "Those organizing the AK"
msgstr "Menschen, die den AK organisieren und halten"
#: AKModel/models.py:573
#: AKModel/models.py:650
msgid "Link to wiki page"
msgstr "Link zur Wiki Seite"
#: AKModel/models.py:574
#: AKModel/models.py:651
msgid "Protocol Link"
msgstr "Protokolllink"
#: AKModel/models.py:574
#: AKModel/models.py:651
msgid "Link to protocol"
msgstr "Link zum Protokoll"
#: AKModel/models.py:576
#: AKModel/models.py:653
msgid "Category"
msgstr "Kategorie"
#: AKModel/models.py:577
#: AKModel/models.py:654
msgid "Category of the AK"
msgstr "Kategorie des AKs"
#: AKModel/models.py:578
#: AKModel/models.py:655
msgid "Track"
msgstr "Track"
#: AKModel/models.py:579
#: AKModel/models.py:656
msgid "Track the AK belongs to"
msgstr "Track zu dem der AK gehört"
#: AKModel/models.py:581
#: AKModel/models.py:658
msgid "Resolution Intention"
msgstr "Resolutionsabsicht"
#: AKModel/models.py:582
#: AKModel/models.py:659
msgid "Intends to submit a resolution"
msgstr "Beabsichtigt eine Resolution einzureichen"
#: AKModel/models.py:583
#: AKModel/models.py:660
msgid "Present this AK"
msgstr "AK präsentieren"
#: AKModel/models.py:584
#: AKModel/models.py:661
msgid "Present results of this AK"
msgstr "Die Ergebnisse dieses AKs vorstellen"
#: AKModel/models.py:586 AKModel/views/status.py:170
#: AKModel/models.py:663 AKModel/models.py:716 AKModel/views/status.py:170
msgid "Requirements"
msgstr "Anforderungen"
#: AKModel/models.py:587
#: AKModel/models.py:664
msgid "AK's Requirements"
msgstr "Anforderungen des AKs"
#: AKModel/models.py:589
#: AKModel/models.py:666
msgid "Conflicting AKs"
msgstr "AK-Konflikte"
#: AKModel/models.py:590
#: AKModel/models.py:667
msgid "AKs that conflict and thus must not take place at the same time"
msgstr ""
"AKs, die Konflikte haben und deshalb nicht gleichzeitig stattfinden dürfen"
#: AKModel/models.py:591
#: AKModel/models.py:668
msgid "Prerequisite AKs"
msgstr "Vorausgesetzte AKs"
#: AKModel/models.py:592
#: AKModel/models.py:669
msgid "AKs that should precede this AK in the schedule"
msgstr "AKs die im AK-Plan vor diesem AK stattfinden müssen"
#: AKModel/models.py:594
#: AKModel/models.py:671
msgid "Organizational Notes"
msgstr "Notizen zur Organisation"
#: AKModel/models.py:595
#: AKModel/models.py:672
msgid ""
"Notes to organizers. These are public. For private notes, please use the "
"button for private messages on the detail page of this AK (after creation/"
......@@ -641,295 +675,303 @@ msgstr ""
"Anmerkungen bitte den Button für Direktnachrichten verwenden (nach dem "
"Anlegen/Bearbeiten)."
#: AKModel/models.py:598
#: AKModel/models.py:675 AKModel/models.py:714
msgid "Interest"
msgstr "Interesse"
#: AKModel/models.py:598
#: AKModel/models.py:675
msgid "Expected number of people"
msgstr "Erwartete Personenzahl"
#: AKModel/models.py:599
#: AKModel/models.py:676
msgid "Interest Counter"
msgstr "Interessenszähler"
#: AKModel/models.py:600
#: AKModel/models.py:677
msgid "People who have indicated interest online"
msgstr "Anzahl Personen, die online Interesse bekundet haben"
#: AKModel/models.py:605
#: AKModel/models.py:682
msgid "Export?"
msgstr "Export?"
#: AKModel/models.py:606
#: AKModel/models.py:683
msgid "Include AK in wiki export?"
msgstr "AK bei Wiki-Export berücksichtigen?"
#: AKModel/models.py:736
#: AKModel/models.py:718
msgid "Conflicts"
msgstr "Konflikte"
#: AKModel/models.py:720
msgid "Prerequisites"
msgstr "Voraussetzungen"
#: AKModel/models.py:813
msgid "Name or number of the room"
msgstr "Name oder Nummer des Raums"
#: AKModel/models.py:737
#: AKModel/models.py:814
msgid "Location"
msgstr "Ort"
#: AKModel/models.py:738
#: AKModel/models.py:815
msgid "Name or number of the location"
msgstr "Name oder Nummer des Ortes"
#: AKModel/models.py:739
#: AKModel/models.py:816
msgid "Capacity"
msgstr "Kapazität"
#: AKModel/models.py:740
#: AKModel/models.py:817
msgid "Maximum number of people (-1 for unlimited)."
msgstr "Maximale Personenzahl (-1 wenn unbeschränkt)."
#: AKModel/models.py:741
#: AKModel/models.py:818
msgid "Properties"
msgstr "Eigenschaften"
#: AKModel/models.py:742
#: AKModel/models.py:819
msgid "AK requirements fulfilled by the room"
msgstr "AK-Anforderungen, die dieser Raum erfüllt"
#: AKModel/models.py:749 AKModel/views/status.py:59
#: AKModel/models.py:826 AKModel/views/status.py:59
msgid "Rooms"
msgstr "Räume"
#: AKModel/models.py:809
#: AKModel/models.py:886
msgid "AK being mapped"
msgstr "AK, der zugeordnet wird"
#: AKModel/models.py:811
#: AKModel/models.py:888
msgid "Room the AK will take place in"
msgstr "Raum in dem der AK stattfindet"
#: AKModel/models.py:812 AKModel/models.py:1212
#: AKModel/models.py:889 AKModel/models.py:1298
msgid "Slot Begin"
msgstr "Beginn des Slots"
#: AKModel/models.py:812 AKModel/models.py:1212
#: AKModel/models.py:889 AKModel/models.py:1298
msgid "Time and date the slot begins"
msgstr "Zeit und Datum zu der der AK beginnt"
#: AKModel/models.py:814
#: AKModel/models.py:891
msgid "Duration"
msgstr "Dauer"
#: AKModel/models.py:815
#: AKModel/models.py:892
msgid "Length in hours"
msgstr "Länge in Stunden"
#: AKModel/models.py:817
#: AKModel/models.py:894
msgid "Scheduling fixed"
msgstr "Planung fix"
#: AKModel/models.py:818
#: AKModel/models.py:895
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:823
#: AKModel/models.py:900
msgid "Last update"
msgstr "Letzte Aktualisierung"
#: AKModel/models.py:826
#: AKModel/models.py:903
msgid "AK Slot"
msgstr "AK-Slot"
#: AKModel/models.py:827 AKModel/models.py:1030
#: AKModel/models.py:904 AKModel/models.py:1116 AKModel/models.py:1151
msgid "AK Slots"
msgstr "AK-Slot"
#: AKModel/models.py:849 AKModel/models.py:858
#: AKModel/models.py:926 AKModel/models.py:935
msgid "Not scheduled yet"
msgstr "Noch nicht geplant"
#: AKModel/models.py:963
#: AKModel/models.py:1049
msgid "AK this message belongs to"
msgstr "AK zu dem die Nachricht gehört"
#: AKModel/models.py:964
#: AKModel/models.py:1050
msgid "Message text"
msgstr "Nachrichtentext"
#: AKModel/models.py:965
#: AKModel/models.py:1051
msgid "Message to the organizers. This is not publicly visible."
msgstr ""
"Nachricht an die Organisator*innen. Diese ist nicht öffentlich sichtbar."
#: AKModel/models.py:969
#: AKModel/models.py:1055
msgid "Resolved"
msgstr "Erledigt"
#: AKModel/models.py:970
#: AKModel/models.py:1056
msgid "This message has been resolved (no further action needed)"
msgstr ""
"Diese Nachricht wurde vollständig bearbeitet (keine weiteren Aktionen "
"notwendig)"
#: AKModel/models.py:973
#: AKModel/models.py:1059
msgid "AK Orga Message"
msgstr "AK-Organachricht"
#: AKModel/models.py:974
#: AKModel/models.py:1060
msgid "AK Orga Messages"
msgstr "AK-Organachrichten"
#: AKModel/models.py:991
#: AKModel/models.py:1077
msgid "Constraint Violation"
msgstr "Constraintverletzung"
#: AKModel/models.py:992
#: AKModel/models.py:1078
msgid "Constraint Violations"
msgstr "Constraintverletzungen"
#: AKModel/models.py:999
#: AKModel/models.py:1085
msgid "Owner has two parallel slots"
msgstr "Leitung hat zwei Slots parallel"
#: AKModel/models.py:1000
#: AKModel/models.py:1086
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:1001
#: AKModel/models.py:1087
msgid "Room has two AK slots scheduled at the same time"
msgstr "Raum hat zwei AK Slots gleichzeitig"
#: AKModel/models.py:1002
#: AKModel/models.py:1088
msgid "Room does not satisfy the requirement of the scheduled AK"
msgstr "Room erfüllt die Anforderungen des platzierten AKs nicht"
#: AKModel/models.py:1003
#: AKModel/models.py:1089
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:1004
#: AKModel/models.py:1090
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:1006
#: AKModel/models.py:1092
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:1007
#: AKModel/models.py:1093
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:1008
#: AKModel/models.py:1094
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:1009
#: AKModel/models.py:1095
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:1010
#: AKModel/models.py:1096
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:1016
#: AKModel/models.py:1102
msgid "Warning"
msgstr "Warnung"
#: AKModel/models.py:1017
#: AKModel/models.py:1103
msgid "Violation"
msgstr "Verletzung"
#: AKModel/models.py:1019
#: AKModel/models.py:1105
msgid "Type"
msgstr "Art"
#: AKModel/models.py:1020
#: AKModel/models.py:1106
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:1021
#: AKModel/models.py:1107
msgid "Level"
msgstr "Level"
#: AKModel/models.py:1022
#: AKModel/models.py:1108
msgid "Severity level of the violation"
msgstr "Schweregrad der Verletzung"
#: AKModel/models.py:1029
#: AKModel/models.py:1115
msgid "AK(s) belonging to this constraint"
msgstr "AK(s), die zu diesem Constraint gehören"
#: AKModel/models.py:1031
#: AKModel/models.py:1117
msgid "AK Slot(s) belonging to this constraint"
msgstr "AK Slot(s), die zu diesem Constraint gehören"
#: AKModel/models.py:1033
#: AKModel/models.py:1119
msgid "AK Owner belonging to this constraint"
msgstr "AK Leitung(en), die zu diesem Constraint gehören"
#: AKModel/models.py:1035
#: AKModel/models.py:1121
msgid "Room belonging to this constraint"
msgstr "Raum, der zu diesem Constraint gehört"
#: AKModel/models.py:1038
#: AKModel/models.py:1124
msgid "AK Requirement belonging to this constraint"
msgstr "AK Anforderung, die zu diesem Constraint gehört"
#: AKModel/models.py:1040
#: AKModel/models.py:1126
msgid "AK Category belonging to this constraint"
msgstr "AK Kategorie, di zu diesem Constraint gehört"
#: AKModel/models.py:1042
#: AKModel/models.py:1128
msgid "Comment"
msgstr "Kommentar"
#: AKModel/models.py:1042
#: AKModel/models.py:1128
msgid "Comment or further details for this violation"
msgstr "Kommentar oder weitere Details zu dieser Vereletzung"
#: AKModel/models.py:1045
#: AKModel/models.py:1131
msgid "Timestamp"
msgstr "Timestamp"
#: AKModel/models.py:1045
#: AKModel/models.py:1131
msgid "Time of creation"
msgstr "Zeitpunkt der ERstellung"
#: AKModel/models.py:1046
#: AKModel/models.py:1132
msgid "Manually Resolved"
msgstr "Manuell behoben"
#: AKModel/models.py:1047
#: AKModel/models.py:1133
msgid "Mark this violation manually as resolved"
msgstr "Markiere diese Verletzung manuell als behoben"
#: AKModel/models.py:1074
#: AKModel/models.py:1160
#: AKModel/templates/admin/AKModel/requirements_overview.html:27
msgid "Details"
msgstr "Details"
#: AKModel/models.py:1208
#: AKModel/models.py:1294
msgid "Default Slot"
msgstr "Standardslot"
#: AKModel/models.py:1213
#: AKModel/models.py:1299
msgid "Slot End"
msgstr "Ende des Slots"
#: AKModel/models.py:1213
#: AKModel/models.py:1299
msgid "Time and date the slot ends"
msgstr "Zeit und Datum zu der der Slot endet"
#: AKModel/models.py:1218
#: AKModel/models.py:1304
msgid "Primary categories"
msgstr "Primäre Kategorien"
#: AKModel/models.py:1219
#: AKModel/models.py:1305
msgid "Categories that should be assigned to this slot primarily"
msgstr "Kategorieren, die diesem Slot primär zugewiesen werden sollen"
#: AKModel/site.py:14
#: AKModel/site.py:13 AKModel/site.py:14
msgid "Administration"
msgstr "Verwaltung"
......@@ -1135,35 +1177,35 @@ msgstr "AK-CSV-Export"
msgid "AK JSON Export"
msgstr "AK-JSON-Export"
#: AKModel/views/ak.py:175
#: AKModel/views/ak.py:186
msgid "AK Wiki Export"
msgstr "AK-Wiki-Export"
#: AKModel/views/ak.py:186 AKModel/views/manage.py:55
#: AKModel/views/ak.py:197 AKModel/views/manage.py:55
msgid "Wishes"
msgstr "Wünsche"
#: AKModel/views/ak.py:198
#: AKModel/views/ak.py:209
msgid "Delete AK Orga Messages"
msgstr "AK-Organachrichten löschen"
#: AKModel/views/ak.py:216
#: AKModel/views/ak.py:227
msgid "AK Orga Messages successfully deleted"
msgstr "AK-Organachrichten erfolgreich gelöscht"
#: AKModel/views/ak.py:228
#: AKModel/views/ak.py:239
msgid "Interest of the following AKs will be set to not filled (-1):"
msgstr "Interesse an den folgenden AKs wird auf nicht ausgefüllt (-1) gesetzt:"
#: AKModel/views/ak.py:229
#: AKModel/views/ak.py:240
msgid "Reset of interest in AKs successful."
msgstr "Interesse an AKs erfolgreich zurückgesetzt."
#: AKModel/views/ak.py:243
#: AKModel/views/ak.py:254
msgid "Interest counter of the following AKs will be set to 0:"
msgstr "Interessensbekundungszähler der folgenden AKs wird auf 0 gesetzt:"
#: AKModel/views/ak.py:244
#: AKModel/views/ak.py:255
msgid "AKs' interest counters set back to 0."
msgstr "Interessenszähler der AKs zurückgesetzt"
......@@ -1265,6 +1307,15 @@ msgstr ""
msgid "AK Schedule JSON Import"
msgstr "AK-Plan JSON-Import"
#: AKModel/views/manage.py:265
#, python-brace-format
msgid "Successfully imported {n} slot(s)"
msgstr "Erfolgreich {n} Slot(s) importiert"
#: AKModel/views/manage.py:271
msgid "Importing an AK schedule failed! Reason: "
msgstr "AK-Plan importieren fehlgeschlagen! Grund: "
#: AKModel/views/room.py:37
#, python-format
msgid "Created Room '%(room)s'"
......
......@@ -6,7 +6,7 @@ from dataclasses import dataclass
from datetime import datetime, timedelta
from typing import Iterable, Generator
from django.db import models
from django.db import models, transaction
from django.apps import apps
from django.db.models import Count
from django.urls import reverse_lazy
......@@ -401,7 +401,8 @@ class Event(models.Model):
else:
yield from self.uniform_time_slots(slots_in_an_hour=slots_in_an_hour)
def schedule_from_json(self, schedule: str) -> None:
@transaction.atomic
def schedule_from_json(self, schedule: str) -> int:
"""Load AK schedule from a json string.
:param schedule: A string that can be decoded to json, describing
......@@ -419,18 +420,63 @@ class Event(models.Model):
for timeslot in block
}
slots_updated = 0
for scheduled_slot in schedule["scheduled_aks"]:
scheduled_slot["timeslot_ids"] = list(map(int, scheduled_slot["timeslot_ids"]))
slot = AKSlot.objects.get(id=int(scheduled_slot["ak_id"]))
slot.room = Room.objects.get(id=int(scheduled_slot["room_id"]))
scheduled_slot["timeslot_ids"] = list(map(int, scheduled_slot["timeslot_ids"]))
if not scheduled_slot["timeslot_ids"]:
raise ValueError(
_("AK {ak_name} is not assigned any timeslot by the solver").format(ak_name=slot.ak.name)
)
start_timeslot = timeslot_dict[min(scheduled_slot["timeslot_ids"])].avail
end_timeslot = timeslot_dict[max(scheduled_slot["timeslot_ids"])].avail
solver_duration = (end_timeslot.end - start_timeslot.start).total_seconds() / 3600.0
if solver_duration + 2e-4 < slot.duration:
raise ValueError(
_(
"Duration of AK {ak_name} assigned by solver ({solver_duration} hours) "
"is less than the duration required by the slot ({slot_duration} hours)"
).format(
ak_name=slot.ak.name,
solver_duration=solver_duration,
slot_duration=slot.duration,
)
)
if slot.fixed:
solver_room = Room.objects.get(id=int(scheduled_slot["room_id"]))
if slot.room != solver_room:
raise ValueError(
_(
"Fixed AK {ak_name} assigned by solver to room {solver_room} "
"is fixed to room {slot_room}"
).format(
ak_name=slot.ak.name,
solver_room=solver_room.name,
slot_room=slot.room.name,
)
)
if slot.start != start_timeslot.start:
raise ValueError(
_(
"Fixed AK {ak_name} assigned by solver to start at {solver_start} "
"is fixed to start at {slot_start}"
).format(
ak_name=slot.ak.name,
solver_start=start_timeslot.start,
slot_start=slot.start,
)
)
else:
slot.room = Room.objects.get(id=int(scheduled_slot["room_id"]))
slot.start = start_timeslot.start
slot.save()
slots_updated += 1
slot.start = start_timeslot.start
slot.duration = (end_timeslot.end - start_timeslot.start).total_seconds() / 3600.0
slot.save()
return slots_updated
class AKOwner(models.Model):
""" An AKOwner describes the person organizing/holding an AK.
......
......@@ -257,6 +257,18 @@ class AKScheduleJSONImportView(EventSlugMixin, IntermediateAdminView):
title = _("AK Schedule JSON Import")
def form_valid(self, form):
self.event.schedule_from_json(form.data["json_data"])
try:
number_of_slots_changed = self.event.schedule_from_json(form.data["json_data"])
messages.add_message(
self.request,
messages.SUCCESS,
_("Successfully imported {n} slot(s)").format(n=number_of_slots_changed)
)
except ValueError as ex:
messages.add_message(
self.request,
messages.ERROR,
_("Importing an AK schedule failed! Reason: ") + str(ex),
)
return redirect("admin:event_status", self.event.slug)
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-04-25 00:24+0200\n"
"POT-Creation-Date: 2025-01-22 19:00+0000\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"
......@@ -27,7 +27,7 @@ msgstr "Ende"
#: AKScheduling/forms.py:26
msgid "Duration"
msgstr ""
msgstr "Dauer"
#: AKScheduling/forms.py:27
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:171
......@@ -107,6 +107,7 @@ msgid "Event Status"
msgstr "Event-Status"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:113
#: AKScheduling/views.py:48
msgid "Scheduling"
msgstr "Scheduling"
......@@ -239,6 +240,7 @@ msgstr[1] ""
" "
#: AKScheduling/templates/admin/AKScheduling/unscheduled.html:7
#: AKScheduling/views.py:25
msgid "Unscheduled AK Slots"
msgstr "Noch nicht geschedulte AK-Slots"
......@@ -246,10 +248,22 @@ msgstr "Noch nicht geschedulte AK-Slots"
msgid "Count"
msgstr "Anzahl"
#: AKScheduling/views.py:89
msgid "Constraint violations for"
msgstr "Constraintverletzungen für"
#: AKScheduling/views.py:104
msgid "AKs requiring special attention for"
msgstr "AKs die besondere Aufmerksamkeit erfordern für"
#: AKScheduling/views.py:150
msgid "Interest updated"
msgstr "Interesse aktualisiert"
#: AKScheduling/views.py:157
msgid "Enter interest"
msgstr "Interesse eingeben"
#: AKScheduling/views.py:201
msgid "Wishes"
msgstr "Wünsche"
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-27 01:57+0000\n"
"POT-Creation-Date: 2025-01-22 19:00+0000\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"
......@@ -418,6 +418,10 @@ msgstr ""
msgid "Currently planned AKs"
msgstr "Aktuell geplante AKs"
#: AKSubmission/views.py:231
msgid "AKs with Track"
msgstr "AK mit Track"
#: AKSubmission/views.py:300
msgid "Event inactive. Cannot create or update."
msgstr "Event inaktiv. Hinzufügen/Bearbeiten nicht möglich."
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment