Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • AlekSIS/official/AlekSIS-App-Chronos
  • sunweaver/AlekSIS-App-Chronos
  • sggua/AlekSIS-App-Chronos
  • tincmeKdenka/AlekSIS-App-Chronos
  • ligquamacti/AlekSIS-App-Chronos
  • 1crotatilhe/AlekSIS-App-Chronos
  • 1compluningi/AlekSIS-App-Chronos
  • starwardcarfi/AlekSIS-App-Chronos
  • ceohecholeg/AlekSIS-App-Chronos
  • 7quecontranchi/AlekSIS-App-Chronos
  • 8evsubcesza/AlekSIS-App-Chronos
  • unscinKibdzu/AlekSIS-App-Chronos
  • delucPchondmu/AlekSIS-App-Chronos
13 results
Show changes
Commits on Source (105)
Showing
with 1135 additions and 826 deletions
include:
- project: "AlekSIS/official/AlekSIS"
file: /ci/general.yml
# - project: "AlekSIS/official/AlekSIS"
# file: /ci/test/test.yml
- project: "AlekSIS/official/AlekSIS"
file: /ci/test.yml
file: /ci/test/lint.yml
- project: "AlekSIS/official/AlekSIS"
file: /ci/build_dist.yml
file: /ci/test/security.yml
- project: "AlekSIS/official/AlekSIS"
file: /ci/build/dist.yml
- project: "AlekSIS/official/AlekSIS"
file: /ci/deploy/pypi.yml
......@@ -26,6 +26,4 @@ class LessonSubstitutionForm(forms.ModelForm):
}
AnnouncementForm.add_node_to_layout(
Fieldset(_("Options for timetables"), "show_in_timetables")
)
AnnouncementForm.add_node_to_layout(Fieldset(_("Options for timetables"), "show_in_timetables"))
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-04 15:42+0200\n"
"POT-Creation-Date: 2020-12-05 21:26+0100\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"
......@@ -16,8 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: forms.py:29
msgid "Options for timetables"
......@@ -47,297 +46,329 @@ msgstr ""
msgid "Substitutions"
msgstr ""
#: model_extensions.py:89
#: mixins.py:25
msgid "Linked validity range"
msgstr ""
#: model_extensions.py:123
msgid "Show announcement in timetable views?"
msgstr ""
#: models.py:45
#: models.py:68
msgid "School term"
msgstr ""
#: models.py:71 models.py:543
msgid "Name"
msgstr ""
#: models.py:73 models.py:593 models.py:663 models.py:860
msgid "Start date"
msgstr ""
#: models.py:74 models.py:594 models.py:664 models.py:861
msgid "End date"
msgstr ""
#: models.py:93
msgid "The start date must be earlier than the end date."
msgstr ""
#: models.py:100
msgid "The validity range must be within the school term."
msgstr ""
#: models.py:107
msgid "There is already a validity range for this time or a part of this time."
msgstr ""
#: models.py:114
msgid "Validity range"
msgstr ""
#: models.py:115
msgid "Validity ranges"
msgstr ""
#: models.py:124
msgid "Week day"
msgstr ""
#: models.py:46
#: models.py:126
msgid "Number of period"
msgstr ""
#: models.py:48
#: models.py:128
msgid "Start time"
msgstr ""
#: models.py:49
#: models.py:129
msgid "End time"
msgstr ""
#: models.py:144 models.py:277 models.py:732
#: models.py:289 models.py:426 models.py:916
msgid "Time period"
msgstr ""
#: models.py:145
#: models.py:290
msgid "Time periods"
msgstr ""
#: models.py:149 models.py:165 models.py:375 models.py:531 models.py:546
#: models.py:294 models.py:310 models.py:542 models.py:703 models.py:720
msgid "Short name"
msgstr ""
#: models.py:150 models.py:166 models.py:532 models.py:547
#: models.py:295 models.py:311 models.py:704 models.py:721
msgid "Long name"
msgstr ""
#: models.py:152
#: models.py:297
msgid "Foreground colour"
msgstr ""
#: models.py:153
#: models.py:298
msgid "Background colour"
msgstr ""
#: models.py:160 models.py:179 models.py:224 models.py:739
#: models.py:305 models.py:327 models.py:373 models.py:923
#: templates/chronos/substitutions.html:46
#: templates/chronos/substitutions_print.html:29
msgid "Subject"
msgstr ""
#: models.py:161
#: models.py:306
msgid "Subjects"
msgstr ""
#: models.py:173 models.py:229 models.py:281 models.py:423 models.py:748
#: models.py:321 models.py:378 models.py:430 models.py:590 models.py:932
#: templates/chronos/substitutions.html:47
#: templates/chronos/substitutions_print.html:30
msgid "Room"
msgstr ""
#: models.py:174 models.py:691 templates/chronos/all.html:39
#: models.py:322 models.py:874 templates/chronos/all.html:39
msgid "Rooms"
msgstr ""
#: models.py:182 models.py:227 models.py:693 models.py:745 tables.py:35
#: models.py:330 models.py:376 models.py:876 models.py:929 tables.py:35
#: templates/chronos/all.html:17 templates/chronos/substitutions_print.html:28
msgid "Teachers"
msgstr ""
#: models.py:185
#: models.py:333
msgid "Periods"
msgstr ""
#: models.py:187 models.py:690 models.py:742 tables.py:34
#: models.py:335 models.py:873 models.py:926 tables.py:34
#: templates/chronos/all.html:28
msgid "Groups"
msgstr ""
#: models.py:189 models.py:426 models.py:496 models.py:677
msgid "Start date"
msgstr ""
#: models.py:190 models.py:427 models.py:497 models.py:678
msgid "End date"
msgstr ""
#: models.py:205 models.py:274 models.py:463
#: models.py:353 models.py:423 models.py:630
msgid "Lesson"
msgstr ""
#: models.py:206 templates/chronos/lessons_day.html:9
#: models.py:354 templates/chronos/lessons_day.html:9
#: templates/chronos/lessons_day.html:19
msgid "Lessons"
msgstr ""
#: models.py:212 models.py:730
#: models.py:360 models.py:913
msgid "Week"
msgstr ""
#: models.py:215 models.py:330
#: models.py:361 models.py:914
msgid "Year"
msgstr ""
#: models.py:364 models.py:497
msgid "Lesson period"
msgstr ""
#: models.py:231
#: models.py:380
msgid "Cancelled?"
msgstr ""
#: models.py:233
#: models.py:382
msgid "Cancelled for teachers?"
msgstr ""
#: models.py:236 models.py:442 models.py:483 models.py:751
#: models.py:385 models.py:609 models.py:650 models.py:935
msgid "Comment"
msgstr ""
#: models.py:240
#: models.py:389
msgid "Lessons can only be either substituted or cancelled."
msgstr ""
#: models.py:264
#: models.py:413
msgid "Lesson substitution"
msgstr ""
#: models.py:265
#: models.py:414
msgid "Lesson substitutions"
msgstr ""
#: models.py:331
#: models.py:498
msgid "Lesson periods"
msgstr ""
#: models.py:370
#: models.py:537
msgid "Timetable widget"
msgstr ""
#: models.py:371
#: models.py:538
msgid "Timetable widgets"
msgstr ""
#: models.py:376
msgid "Name"
msgstr ""
#: models.py:385 models.py:398
#: models.py:552 models.py:565
msgid "Absence reason"
msgstr ""
#: models.py:386
#: models.py:553
msgid "Absence reasons"
msgstr ""
#: models.py:407 models.py:617 models.py:654
#: models.py:574 models.py:791 models.py:837
#: templates/chronos/substitutions.html:45
msgid "Teacher"
msgstr ""
#: models.py:415
#: models.py:582
msgid "Group"
msgstr ""
#: models.py:431 models.py:470
#: models.py:598 models.py:637
msgid "Start period"
msgstr ""
#: models.py:438 models.py:477
#: models.py:605 models.py:644
msgid "End period"
msgstr ""
#: models.py:452
#: models.py:619
msgid "Unknown absence"
msgstr ""
#: models.py:457
#: models.py:624
msgid "Absence"
msgstr ""
#: models.py:458
#: models.py:625
msgid "Absences"
msgstr ""
#: models.py:466
#: models.py:633
msgid "Date of exam"
msgstr ""
#: models.py:482 models.py:495 models.py:675
#: models.py:649 models.py:662 models.py:858
msgid "Title"
msgstr ""
#: models.py:488
#: models.py:655
msgid "Exam"
msgstr ""
#: models.py:489
#: models.py:656
msgid "Exams"
msgstr ""
#: models.py:498
#: models.py:665
msgid "Comments"
msgstr ""
#: models.py:526
#: models.py:698
msgid "Holiday"
msgstr ""
#: models.py:527
#: models.py:699
msgid "Holidays"
msgstr ""
#: models.py:541 models.py:610
#: models.py:713 models.py:784
msgid "Supervision area"
msgstr ""
#: models.py:542
#: models.py:714
msgid "Supervision areas"
msgstr ""
#: models.py:552
#: models.py:726
msgid "Time period after break starts"
msgstr ""
#: models.py:560
#: models.py:734
msgid "Time period before break ends"
msgstr ""
#: models.py:600 models.py:614
#: models.py:774 models.py:788
msgid "Break"
msgstr ""
#: models.py:601
#: models.py:775
msgid "Breaks"
msgstr ""
#: models.py:641 models.py:648 templates/chronos/partials/subs/subject.html:23
#: models.py:822 models.py:831 templates/chronos/partials/subs/subject.html:23
#: templates/chronos/partials/supervision.html:15
msgid "Supervision"
msgstr ""
#: models.py:642
#: models.py:823
msgid "Supervisions"
msgstr ""
#: models.py:646
#: models.py:829
msgid "Date"
msgstr ""
#: models.py:666
#: models.py:849
msgid "Supervision substitution"
msgstr ""
#: models.py:667
#: models.py:850
msgid "Supervision substitutions"
msgstr ""
#: models.py:683
#: models.py:866
msgid "Start time period"
msgstr ""
#: models.py:687
#: models.py:870
msgid "End time period"
msgstr ""
#: models.py:700
#: models.py:883
#, python-brace-format
msgid "Event {self.pk}"
msgstr ""
#: models.py:721 templates/chronos/partials/subs/subject.html:27
#: models.py:904 templates/chronos/partials/subs/subject.html:27
msgid "Event"
msgstr ""
#: models.py:722
#: models.py:905
msgid "Events"
msgstr ""
#: models.py:757
#: models.py:941
msgid "Extra lesson"
msgstr ""
#: models.py:758
#: models.py:942
msgid "Extra lessons"
msgstr ""
#: models.py:765
#: models.py:949
msgid "Can view all timetables"
msgstr ""
#: models.py:766
#: models.py:950
msgid "Can view timetable overview"
msgstr ""
#: models.py:767
#: models.py:951
msgid "Can view all lessons per day"
msgstr ""
......@@ -350,9 +381,7 @@ msgid "Use parent groups in timetable views"
msgstr ""
#: preferences.py:18
msgid ""
"If an lesson or substitution has only one group and this group has parent "
"groups, show the parent groups instead of the original group."
msgid "If an lesson or substitution has only one group and this group has parent groups, show the parent groups instead of the original group."
msgstr ""
#: preferences.py:29
......@@ -368,9 +397,7 @@ msgid "Limit of groups for shortening of groups"
msgstr ""
#: preferences.py:40
msgid ""
"If an user activates shortening of groups,they will be collapsed if there "
"are more groups than this limit."
msgid "If an user activates shortening of groups,they will be collapsed if there are more groups than this limit."
msgstr ""
#: preferences.py:50
......@@ -385,6 +412,10 @@ msgstr ""
msgid "The header box shows affected teachers/groups."
msgstr ""
#: preferences.py:68
msgid "Show parent groups in header box in substitution views instead of original groups"
msgstr ""
#: tables.py:41
msgid "Substitution"
msgstr ""
......@@ -492,10 +523,10 @@ msgstr ""
msgid "Go to smart plan"
msgstr ""
#: views.py:234
#: views.py:243
msgid "The substitution has been saved."
msgstr ""
#: views.py:255
#: views.py:264
msgid "The substitution has been deleted."
msgstr ""
......@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-04 15:42+0200\n"
"PO-Revision-Date: 2020-09-06 17:49+0000\n"
"POT-Creation-Date: 2020-12-05 21:26+0100\n"
"PO-Revision-Date: 2020-12-05 20:51+0000\n"
"Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
"Language-Team: German <https://translate.edugit.org/projects/aleksis/"
"aleksis-app-chronos/de/>\n"
......@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.1.1\n"
"X-Generator: Weblate 4.3.2\n"
#: forms.py:29
msgid "Options for timetables"
......@@ -47,298 +47,331 @@ msgstr "Tagesstunden"
msgid "Substitutions"
msgstr "Vertretungen"
#: model_extensions.py:89
#: mixins.py:25
msgid "Linked validity range"
msgstr "Zugeordneter Gültigkeitsbereich"
#: model_extensions.py:123
msgid "Show announcement in timetable views?"
msgstr "Ankündigungen in Stundenplanansichten anzeigen?"
#: models.py:45
#: models.py:68
msgid "School term"
msgstr "Schuljahr"
#: models.py:71 models.py:543
msgid "Name"
msgstr "Name"
#: models.py:73 models.py:593 models.py:663 models.py:860
msgid "Start date"
msgstr "Startdatum"
#: models.py:74 models.py:594 models.py:664 models.py:861
msgid "End date"
msgstr "Enddatum"
#: models.py:93
msgid "The start date must be earlier than the end date."
msgstr "Das Startdatum muss vor dem Enddatum liegen."
#: models.py:100
msgid "The validity range must be within the school term."
msgstr "Der Gültigkeitsbereich muss innerhalb des Schuljahres liegen."
#: models.py:107
msgid "There is already a validity range for this time or a part of this time."
msgstr ""
"Es gibt bereits einen Gültigkeitsbereich für diesen Zeitraum oder einen Teil "
"diesen Zeitraumes."
#: models.py:114
msgid "Validity range"
msgstr "Gültigkeitsbereich"
#: models.py:115
msgid "Validity ranges"
msgstr "Gültigkeitsbereiche"
#: models.py:124
msgid "Week day"
msgstr "Wochentag"
#: models.py:46
#: models.py:126
msgid "Number of period"
msgstr "Nummer der Stunde"
#: models.py:48
#: models.py:128
msgid "Start time"
msgstr "Startzeit"
#: models.py:49
#: models.py:129
msgid "End time"
msgstr "Endzeit"
#: models.py:144 models.py:277 models.py:732
#: models.py:289 models.py:426 models.py:916
msgid "Time period"
msgstr "Stunde"
#: models.py:145
#: models.py:290
msgid "Time periods"
msgstr "Stunden"
#: models.py:149 models.py:165 models.py:375 models.py:531 models.py:546
#: models.py:294 models.py:310 models.py:542 models.py:703 models.py:720
msgid "Short name"
msgstr "Kurzname"
#: models.py:150 models.py:166 models.py:532 models.py:547
#: models.py:295 models.py:311 models.py:704 models.py:721
msgid "Long name"
msgstr "Langname"
#: models.py:152
#: models.py:297
msgid "Foreground colour"
msgstr "Vordergrundfarbe"
#: models.py:153
#: models.py:298
msgid "Background colour"
msgstr "Hintergrundfarbe"
#: models.py:160 models.py:179 models.py:224 models.py:739
#: models.py:305 models.py:327 models.py:373 models.py:923
#: templates/chronos/substitutions.html:46
#: templates/chronos/substitutions_print.html:29
msgid "Subject"
msgstr "Fach"
#: models.py:161
#: models.py:306
msgid "Subjects"
msgstr "Fächer"
#: models.py:173 models.py:229 models.py:281 models.py:423 models.py:748
#: models.py:321 models.py:378 models.py:430 models.py:590 models.py:932
#: templates/chronos/substitutions.html:47
#: templates/chronos/substitutions_print.html:30
msgid "Room"
msgstr "Raum"
#: models.py:174 models.py:691 templates/chronos/all.html:39
#: models.py:322 models.py:874 templates/chronos/all.html:39
msgid "Rooms"
msgstr "Räume"
#: models.py:182 models.py:227 models.py:693 models.py:745 tables.py:35
#: models.py:330 models.py:376 models.py:876 models.py:929 tables.py:35
#: templates/chronos/all.html:17 templates/chronos/substitutions_print.html:28
msgid "Teachers"
msgstr "Lehrkräfte"
#: models.py:185
#: models.py:333
msgid "Periods"
msgstr "Stunden"
#: models.py:187 models.py:690 models.py:742 tables.py:34
#: models.py:335 models.py:873 models.py:926 tables.py:34
#: templates/chronos/all.html:28
msgid "Groups"
msgstr "Gruppen"
#: models.py:189 models.py:426 models.py:496 models.py:677
msgid "Start date"
msgstr "Startdatum"
#: models.py:190 models.py:427 models.py:497 models.py:678
msgid "End date"
msgstr "Enddatum"
#: models.py:205 models.py:274 models.py:463
#: models.py:353 models.py:423 models.py:630
msgid "Lesson"
msgstr "Unterrichtsstunde"
#: models.py:206 templates/chronos/lessons_day.html:9
#: models.py:354 templates/chronos/lessons_day.html:9
#: templates/chronos/lessons_day.html:19
msgid "Lessons"
msgstr "Unterrichtsstunden"
#: models.py:212 models.py:730
#: models.py:360 models.py:913
msgid "Week"
msgstr "Woche"
#: models.py:215 models.py:330
#: models.py:361 models.py:914
msgid "Year"
msgstr "Jahr"
#: models.py:364 models.py:497
msgid "Lesson period"
msgstr "Unterrichtsstunde"
#: models.py:231
#: models.py:380
msgid "Cancelled?"
msgstr "Entfällt?"
#: models.py:233
#: models.py:382
msgid "Cancelled for teachers?"
msgstr "Entfällt für Lehrkräfte?"
#: models.py:236 models.py:442 models.py:483 models.py:751
#: models.py:385 models.py:609 models.py:650 models.py:935
msgid "Comment"
msgstr "Kommentar"
#: models.py:240
#: models.py:389
msgid "Lessons can only be either substituted or cancelled."
msgstr ""
"Unterrichtsstunden können nur entweder vertreten werden oder ausfallen."
msgstr "Unterrichtsstunden können nur entweder vertreten werden oder ausfallen."
#: models.py:264
#: models.py:413
msgid "Lesson substitution"
msgstr "Vertretung"
#: models.py:265
#: models.py:414
msgid "Lesson substitutions"
msgstr "Vertretungen"
#: models.py:331
#: models.py:498
msgid "Lesson periods"
msgstr "Unterrichtsstunden"
#: models.py:370
#: models.py:537
msgid "Timetable widget"
msgstr "Stundenplanwidget"
#: models.py:371
#: models.py:538
msgid "Timetable widgets"
msgstr "Stundenplanwidgets"
#: models.py:376
msgid "Name"
msgstr "Name"
#: models.py:385 models.py:398
#: models.py:552 models.py:565
msgid "Absence reason"
msgstr "Absenzgrund"
#: models.py:386
#: models.py:553
msgid "Absence reasons"
msgstr "Absenzgründe"
#: models.py:407 models.py:617 models.py:654
#: models.py:574 models.py:791 models.py:837
#: templates/chronos/substitutions.html:45
msgid "Teacher"
msgstr "Lehrkraft"
#: models.py:415
#: models.py:582
msgid "Group"
msgstr "Gruppe"
#: models.py:431 models.py:470
#: models.py:598 models.py:637
msgid "Start period"
msgstr "Startstunde"
#: models.py:438 models.py:477
#: models.py:605 models.py:644
msgid "End period"
msgstr "Endstunde"
#: models.py:452
#: models.py:619
msgid "Unknown absence"
msgstr "Unbekannte Absenz"
#: models.py:457
#: models.py:624
msgid "Absence"
msgstr "Absenz"
#: models.py:458
#: models.py:625
msgid "Absences"
msgstr "Fehlstunden"
#: models.py:466
#: models.py:633
msgid "Date of exam"
msgstr "Datum der Klausur"
#: models.py:482 models.py:495 models.py:675
#: models.py:649 models.py:662 models.py:858
msgid "Title"
msgstr "Titel"
#: models.py:488
#: models.py:655
msgid "Exam"
msgstr "Klausur"
#: models.py:489
#: models.py:656
msgid "Exams"
msgstr "Klausuren"
#: models.py:498
#: models.py:665
msgid "Comments"
msgstr "Kommentare"
#: models.py:526
#: models.py:698
msgid "Holiday"
msgstr "Ferien"
#: models.py:527
#: models.py:699
msgid "Holidays"
msgstr "Ferien"
#: models.py:541 models.py:610
#: models.py:713 models.py:784
msgid "Supervision area"
msgstr "Aufsichtsgebiet"
#: models.py:542
#: models.py:714
msgid "Supervision areas"
msgstr "Aufsichtsgebiete"
#: models.py:552
#: models.py:726
msgid "Time period after break starts"
msgstr "Stunde, nach der die Pause startet"
#: models.py:560
#: models.py:734
msgid "Time period before break ends"
msgstr "Stunde nach der Pause"
#: models.py:600 models.py:614
#: models.py:774 models.py:788
msgid "Break"
msgstr "Pause"
#: models.py:601
#: models.py:775
msgid "Breaks"
msgstr "Pausen"
#: models.py:641 models.py:648 templates/chronos/partials/subs/subject.html:23
#: models.py:822 models.py:831 templates/chronos/partials/subs/subject.html:23
#: templates/chronos/partials/supervision.html:15
msgid "Supervision"
msgstr "Aufsicht"
#: models.py:642
#: models.py:823
msgid "Supervisions"
msgstr "Aufsichten"
#: models.py:646
#: models.py:829
msgid "Date"
msgstr "Datum"
#: models.py:666
#: models.py:849
msgid "Supervision substitution"
msgstr "Aufsichtsvertretung"
#: models.py:667
#: models.py:850
msgid "Supervision substitutions"
msgstr "Aufsichtsvertretungen"
#: models.py:683
#: models.py:866
msgid "Start time period"
msgstr "Startstunde"
#: models.py:687
#: models.py:870
msgid "End time period"
msgstr "Endstunde"
#: models.py:700
#: models.py:883
#, python-brace-format
msgid "Event {self.pk}"
msgstr "Veranstaltung {self.pk}"
#: models.py:721 templates/chronos/partials/subs/subject.html:27
#: models.py:904 templates/chronos/partials/subs/subject.html:27
msgid "Event"
msgstr "Veranstaltung"
#: models.py:722
#: models.py:905
msgid "Events"
msgstr "Veranstaltungen"
#: models.py:757
#: models.py:941
msgid "Extra lesson"
msgstr "Sonderstunde"
#: models.py:758
#: models.py:942
msgid "Extra lessons"
msgstr "Sonderstunden"
#: models.py:765
#: models.py:949
msgid "Can view all timetables"
msgstr "Kann alle Stundenpläne sehen"
#: models.py:766
#: models.py:950
msgid "Can view timetable overview"
msgstr "Kann Stundenplanübersicht sehen"
#: models.py:767
#: models.py:951
msgid "Can view all lessons per day"
msgstr "Kann alle Tagesstunden sehen"
......@@ -351,12 +384,8 @@ msgid "Use parent groups in timetable views"
msgstr "Elterngruppen in Stundenplanansichten benutzen"
#: preferences.py:18
msgid ""
"If an lesson or substitution has only one group and this group has parent "
"groups, show the parent groups instead of the original group."
msgstr ""
"Wenn eine Stunde oder Vertretung nur eine Gruppe hat und diese Gruppe "
"Elterngruppen hat, zeige die Elterngruppen anstelle der eigentlichen Gruppe."
msgid "If an lesson or substitution has only one group and this group has parent groups, show the parent groups instead of the original group."
msgstr "Wenn eine Stunde oder Vertretung nur eine Gruppe hat und diese Gruppe Elterngruppen hat, zeige die Elterngruppen anstelle der eigentlichen Gruppe."
#: preferences.py:29
msgid "Shorten groups in timetable views"
......@@ -364,27 +393,19 @@ msgstr "Gruppen in Stundenplanansichten kürzen"
#: preferences.py:30
msgid "If there are more groups than the set limit, they will be collapsed."
msgstr ""
"Wenn es mehr Gruppen als das gesetzte Limit gibt, werden die Gruppenangaben "
"gekürzt."
msgstr "Wenn es mehr Gruppen als das gesetzte Limit gibt, werden die Gruppenangaben gekürzt."
#: preferences.py:38
msgid "Limit of groups for shortening of groups"
msgstr "Anzahl der Gruppen, ab der gekürzt wird"
#: preferences.py:40
msgid ""
"If an user activates shortening of groups,they will be collapsed if there "
"are more groups than this limit."
msgstr ""
"Wenn ein Nutzer die Kürzung von Gruppen aktiviert hat, werden sie ab diesem "
"Limit gekürzt."
msgid "If an user activates shortening of groups,they will be collapsed if there are more groups than this limit."
msgstr "Wenn ein Nutzer die Kürzung von Gruppen aktiviert hat, werden sie ab diesem Limit gekürzt."
#: preferences.py:50
msgid "Number of days shown on substitutions print view"
msgstr ""
"Anzahl der Tage, die in der Druckansicht des Vertretungsplanes angezeigt "
"werden soll"
msgstr "Anzahl der Tage, die in der Druckansicht des Vertretungsplanes angezeigt werden soll"
#: preferences.py:58
msgid "Show header box in substitution views"
......@@ -394,6 +415,12 @@ msgstr "Kopfbox in Vertretungsplänen anzeigen"
msgid "The header box shows affected teachers/groups."
msgstr "Die Kopfbox zeigt betroffene Lehrkräfte/Gruppen."
#: preferences.py:68
msgid "Show parent groups in header box in substitution views instead of original groups"
msgstr ""
"Elterngruppen in der Kopfbox in Vertretungsplänen an Stelle der eigentlichen "
"Gruppen anzeigen"
#: tables.py:41
msgid "Substitution"
msgstr "Vertretung"
......@@ -507,11 +534,11 @@ msgstr ""
msgid "Go to smart plan"
msgstr "SMART PLAN anzeigen"
#: views.py:234
#: views.py:243
msgid "The substitution has been saved."
msgstr "Die Vertretung wurde gespeichert."
#: views.py:255
#: views.py:264
msgid "The substitution has been deleted."
msgstr "Die Vertretung wurde gelöscht."
......@@ -575,12 +602,8 @@ msgstr "Die Vertretung wurde gelöscht."
#~ msgid "Effective end period of event"
#~ msgstr "Effektive Endstunde der Veranstaltung"
#~ msgid ""
#~ "If there are more groups than this limit and CHRONOS_SHORTEN_GROUPS is "
#~ "enabled, add text collapsible."
#~ msgstr ""
#~ "Wenn es mehr Gruppen als dieses Limit gibt und CHRONOS_SHORTEN_GROUPS "
#~ "aktiviert ist, werden die Gruppenangaben gekürzt."
#~ msgid "If there are more groups than this limit and CHRONOS_SHORTEN_GROUPS is enabled, add text collapsible."
#~ msgstr "Wenn es mehr Gruppen als dieses Limit gibt und CHRONOS_SHORTEN_GROUPS aktiviert ist, werden die Gruppenangaben gekürzt."
#~ msgid "Abbreviation of subject in timetable"
#~ msgstr "Kürzel des Faches im Stundenplan"
......
......@@ -7,11 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-04 15:42+0200\n"
"POT-Creation-Date: 2020-12-05 21:26+0100\n"
"PO-Revision-Date: 2020-04-29 12:01+0000\n"
"Last-Translator: Marlene Grundey <grundema@katharineum.de>\n"
"Language-Team: French <https://translate.edugit.org/projects/aleksis/aleksis-"
"app-chronos/fr/>\n"
"Language-Team: French <https://translate.edugit.org/projects/aleksis/aleksis-app-chronos/fr/>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
......@@ -47,299 +46,331 @@ msgstr ""
msgid "Substitutions"
msgstr ""
#: model_extensions.py:89
#: mixins.py:25
msgid "Linked validity range"
msgstr ""
#: model_extensions.py:123
msgid "Show announcement in timetable views?"
msgstr ""
#: models.py:45
#: models.py:68
msgid "School term"
msgstr ""
#: models.py:71 models.py:543
msgid "Name"
msgstr ""
#: models.py:73 models.py:593 models.py:663 models.py:860
msgid "Start date"
msgstr ""
#: models.py:74 models.py:594 models.py:664 models.py:861
msgid "End date"
msgstr ""
#: models.py:93
msgid "The start date must be earlier than the end date."
msgstr ""
#: models.py:100
msgid "The validity range must be within the school term."
msgstr ""
#: models.py:107
msgid "There is already a validity range for this time or a part of this time."
msgstr ""
#: models.py:114
msgid "Validity range"
msgstr ""
#: models.py:115
msgid "Validity ranges"
msgstr ""
#: models.py:124
msgid "Week day"
msgstr ""
#: models.py:46
#: models.py:126
msgid "Number of period"
msgstr ""
#: models.py:48
#: models.py:128
msgid "Start time"
msgstr ""
#: models.py:49
#: models.py:129
msgid "End time"
msgstr ""
#: models.py:144 models.py:277 models.py:732
#: models.py:289 models.py:426 models.py:916
msgid "Time period"
msgstr ""
#: models.py:145
#: models.py:290
msgid "Time periods"
msgstr ""
#: models.py:149 models.py:165 models.py:375 models.py:531 models.py:546
#: models.py:294 models.py:310 models.py:542 models.py:703 models.py:720
msgid "Short name"
msgstr ""
#: models.py:150 models.py:166 models.py:532 models.py:547
#: models.py:295 models.py:311 models.py:704 models.py:721
msgid "Long name"
msgstr ""
#: models.py:152
#: models.py:297
msgid "Foreground colour"
msgstr ""
#: models.py:153
#: models.py:298
msgid "Background colour"
msgstr ""
#: models.py:160 models.py:179 models.py:224 models.py:739
#: models.py:305 models.py:327 models.py:373 models.py:923
#: templates/chronos/substitutions.html:46
#: templates/chronos/substitutions_print.html:29
msgid "Subject"
msgstr "Sujet"
#: models.py:161
#: models.py:306
#, fuzzy
#| msgid "Subject"
msgid "Subjects"
msgstr "Sujet"
#: models.py:173 models.py:229 models.py:281 models.py:423 models.py:748
#: models.py:321 models.py:378 models.py:430 models.py:590 models.py:932
#: templates/chronos/substitutions.html:47
#: templates/chronos/substitutions_print.html:30
msgid "Room"
msgstr "Salle"
#: models.py:174 models.py:691 templates/chronos/all.html:39
#: models.py:322 models.py:874 templates/chronos/all.html:39
msgid "Rooms"
msgstr ""
#: models.py:182 models.py:227 models.py:693 models.py:745 tables.py:35
#: models.py:330 models.py:376 models.py:876 models.py:929 tables.py:35
#: templates/chronos/all.html:17 templates/chronos/substitutions_print.html:28
msgid "Teachers"
msgstr "Profs"
#: models.py:185
#: models.py:333
msgid "Periods"
msgstr ""
#: models.py:187 models.py:690 models.py:742 tables.py:34
#: models.py:335 models.py:873 models.py:926 tables.py:34
#: templates/chronos/all.html:28
msgid "Groups"
msgstr ""
#: models.py:189 models.py:426 models.py:496 models.py:677
msgid "Start date"
msgstr ""
#: models.py:190 models.py:427 models.py:497 models.py:678
msgid "End date"
msgstr ""
#: models.py:205 models.py:274 models.py:463
#: models.py:353 models.py:423 models.py:630
msgid "Lesson"
msgstr "Cours"
#: models.py:206 templates/chronos/lessons_day.html:9
#: models.py:354 templates/chronos/lessons_day.html:9
#: templates/chronos/lessons_day.html:19
msgid "Lessons"
msgstr ""
#: models.py:212 models.py:730
#: models.py:360 models.py:913
msgid "Week"
msgstr ""
#: models.py:215 models.py:330
#: models.py:361 models.py:914
msgid "Year"
msgstr ""
#: models.py:364 models.py:497
msgid "Lesson period"
msgstr ""
#: models.py:231
#: models.py:380
msgid "Cancelled?"
msgstr ""
#: models.py:233
#: models.py:382
msgid "Cancelled for teachers?"
msgstr ""
#: models.py:236 models.py:442 models.py:483 models.py:751
#: models.py:385 models.py:609 models.py:650 models.py:935
msgid "Comment"
msgstr ""
#: models.py:240
#: models.py:389
msgid "Lessons can only be either substituted or cancelled."
msgstr ""
#: models.py:264
#: models.py:413
msgid "Lesson substitution"
msgstr ""
#: models.py:265
#: models.py:414
msgid "Lesson substitutions"
msgstr ""
#: models.py:331
#: models.py:498
msgid "Lesson periods"
msgstr ""
#: models.py:370
#: models.py:537
msgid "Timetable widget"
msgstr ""
#: models.py:371
#: models.py:538
msgid "Timetable widgets"
msgstr ""
#: models.py:376
msgid "Name"
msgstr ""
#: models.py:385 models.py:398
#: models.py:552 models.py:565
msgid "Absence reason"
msgstr ""
#: models.py:386
#: models.py:553
msgid "Absence reasons"
msgstr ""
#: models.py:407 models.py:617 models.py:654
#: models.py:574 models.py:791 models.py:837
#: templates/chronos/substitutions.html:45
msgid "Teacher"
msgstr "Profs"
#: models.py:415
#: models.py:582
msgid "Group"
msgstr ""
#: models.py:431 models.py:470
#: models.py:598 models.py:637
msgid "Start period"
msgstr ""
#: models.py:438 models.py:477
#: models.py:605 models.py:644
msgid "End period"
msgstr ""
#: models.py:452
#: models.py:619
msgid "Unknown absence"
msgstr ""
#: models.py:457
#: models.py:624
msgid "Absence"
msgstr ""
#: models.py:458
#: models.py:625
msgid "Absences"
msgstr "Absences"
#: models.py:466
#: models.py:633
msgid "Date of exam"
msgstr ""
#: models.py:482 models.py:495 models.py:675
#: models.py:649 models.py:662 models.py:858
msgid "Title"
msgstr ""
#: models.py:488
#: models.py:655
msgid "Exam"
msgstr ""
#: models.py:489
#: models.py:656
msgid "Exams"
msgstr ""
#: models.py:498
#: models.py:665
msgid "Comments"
msgstr ""
#: models.py:526
#: models.py:698
msgid "Holiday"
msgstr ""
#: models.py:527
#: models.py:699
msgid "Holidays"
msgstr ""
#: models.py:541 models.py:610
#: models.py:713 models.py:784
msgid "Supervision area"
msgstr ""
#: models.py:542
#: models.py:714
msgid "Supervision areas"
msgstr ""
#: models.py:552
#: models.py:726
msgid "Time period after break starts"
msgstr ""
#: models.py:560
#: models.py:734
msgid "Time period before break ends"
msgstr ""
#: models.py:600 models.py:614
#: models.py:774 models.py:788
msgid "Break"
msgstr ""
#: models.py:601
#: models.py:775
msgid "Breaks"
msgstr ""
#: models.py:641 models.py:648 templates/chronos/partials/subs/subject.html:23
#: models.py:822 models.py:831 templates/chronos/partials/subs/subject.html:23
#: templates/chronos/partials/supervision.html:15
msgid "Supervision"
msgstr ""
#: models.py:642
#: models.py:823
msgid "Supervisions"
msgstr ""
#: models.py:646
#: models.py:829
msgid "Date"
msgstr "Date"
#: models.py:666
#: models.py:849
msgid "Supervision substitution"
msgstr ""
#: models.py:667
#: models.py:850
msgid "Supervision substitutions"
msgstr ""
#: models.py:683
#: models.py:866
msgid "Start time period"
msgstr ""
#: models.py:687
#: models.py:870
msgid "End time period"
msgstr ""
#: models.py:700
#: models.py:883
#, python-brace-format
msgid "Event {self.pk}"
msgstr ""
#: models.py:721 templates/chronos/partials/subs/subject.html:27
#: models.py:904 templates/chronos/partials/subs/subject.html:27
msgid "Event"
msgstr ""
#: models.py:722
#: models.py:905
msgid "Events"
msgstr ""
#: models.py:757
#: models.py:941
msgid "Extra lesson"
msgstr ""
#: models.py:758
#: models.py:942
msgid "Extra lessons"
msgstr ""
#: models.py:765
#: models.py:949
msgid "Can view all timetables"
msgstr ""
#: models.py:766
#: models.py:950
msgid "Can view timetable overview"
msgstr ""
#: models.py:767
#: models.py:951
msgid "Can view all lessons per day"
msgstr ""
......@@ -352,9 +383,7 @@ msgid "Use parent groups in timetable views"
msgstr ""
#: preferences.py:18
msgid ""
"If an lesson or substitution has only one group and this group has parent "
"groups, show the parent groups instead of the original group."
msgid "If an lesson or substitution has only one group and this group has parent groups, show the parent groups instead of the original group."
msgstr ""
#: preferences.py:29
......@@ -370,9 +399,7 @@ msgid "Limit of groups for shortening of groups"
msgstr ""
#: preferences.py:40
msgid ""
"If an user activates shortening of groups,they will be collapsed if there "
"are more groups than this limit."
msgid "If an user activates shortening of groups,they will be collapsed if there are more groups than this limit."
msgstr ""
#: preferences.py:50
......@@ -387,6 +414,10 @@ msgstr ""
msgid "The header box shows affected teachers/groups."
msgstr ""
#: preferences.py:68
msgid "Show parent groups in header box in substitution views instead of original groups"
msgstr ""
#: tables.py:41
msgid "Substitution"
msgstr ""
......@@ -494,10 +525,10 @@ msgstr ""
msgid "Go to smart plan"
msgstr ""
#: views.py:234
#: views.py:243
msgid "The substitution has been saved."
msgstr ""
#: views.py:255
#: views.py:264
msgid "The substitution has been deleted."
msgstr ""
......@@ -7,11 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-04 15:42+0200\n"
"POT-Creation-Date: 2020-12-05 21:26+0100\n"
"PO-Revision-Date: 2020-08-23 13:49+0000\n"
"Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
"Language-Team: Latin <https://translate.edugit.org/projects/aleksis/"
"aleksis-app-chronos/la/>\n"
"Language-Team: Latin <https://translate.edugit.org/projects/aleksis/aleksis-app-chronos/la/>\n"
"Language: la\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
......@@ -47,297 +46,329 @@ msgstr ""
msgid "Substitutions"
msgstr ""
#: model_extensions.py:89
#: mixins.py:25
msgid "Linked validity range"
msgstr ""
#: model_extensions.py:123
msgid "Show announcement in timetable views?"
msgstr ""
#: models.py:45
#: models.py:68
msgid "School term"
msgstr ""
#: models.py:71 models.py:543
msgid "Name"
msgstr ""
#: models.py:73 models.py:593 models.py:663 models.py:860
msgid "Start date"
msgstr ""
#: models.py:74 models.py:594 models.py:664 models.py:861
msgid "End date"
msgstr ""
#: models.py:93
msgid "The start date must be earlier than the end date."
msgstr ""
#: models.py:100
msgid "The validity range must be within the school term."
msgstr ""
#: models.py:107
msgid "There is already a validity range for this time or a part of this time."
msgstr ""
#: models.py:114
msgid "Validity range"
msgstr ""
#: models.py:115
msgid "Validity ranges"
msgstr ""
#: models.py:124
msgid "Week day"
msgstr ""
#: models.py:46
#: models.py:126
msgid "Number of period"
msgstr ""
#: models.py:48
#: models.py:128
msgid "Start time"
msgstr ""
#: models.py:49
#: models.py:129
msgid "End time"
msgstr ""
#: models.py:144 models.py:277 models.py:732
#: models.py:289 models.py:426 models.py:916
msgid "Time period"
msgstr ""
#: models.py:145
#: models.py:290
msgid "Time periods"
msgstr ""
#: models.py:149 models.py:165 models.py:375 models.py:531 models.py:546
#: models.py:294 models.py:310 models.py:542 models.py:703 models.py:720
msgid "Short name"
msgstr ""
#: models.py:150 models.py:166 models.py:532 models.py:547
#: models.py:295 models.py:311 models.py:704 models.py:721
msgid "Long name"
msgstr ""
#: models.py:152
#: models.py:297
msgid "Foreground colour"
msgstr ""
#: models.py:153
#: models.py:298
msgid "Background colour"
msgstr ""
#: models.py:160 models.py:179 models.py:224 models.py:739
#: models.py:305 models.py:327 models.py:373 models.py:923
#: templates/chronos/substitutions.html:46
#: templates/chronos/substitutions_print.html:29
msgid "Subject"
msgstr ""
#: models.py:161
#: models.py:306
msgid "Subjects"
msgstr ""
#: models.py:173 models.py:229 models.py:281 models.py:423 models.py:748
#: models.py:321 models.py:378 models.py:430 models.py:590 models.py:932
#: templates/chronos/substitutions.html:47
#: templates/chronos/substitutions_print.html:30
msgid "Room"
msgstr ""
#: models.py:174 models.py:691 templates/chronos/all.html:39
#: models.py:322 models.py:874 templates/chronos/all.html:39
msgid "Rooms"
msgstr ""
#: models.py:182 models.py:227 models.py:693 models.py:745 tables.py:35
#: models.py:330 models.py:376 models.py:876 models.py:929 tables.py:35
#: templates/chronos/all.html:17 templates/chronos/substitutions_print.html:28
msgid "Teachers"
msgstr ""
#: models.py:185
#: models.py:333
msgid "Periods"
msgstr ""
#: models.py:187 models.py:690 models.py:742 tables.py:34
#: models.py:335 models.py:873 models.py:926 tables.py:34
#: templates/chronos/all.html:28
msgid "Groups"
msgstr ""
#: models.py:189 models.py:426 models.py:496 models.py:677
msgid "Start date"
msgstr ""
#: models.py:190 models.py:427 models.py:497 models.py:678
msgid "End date"
msgstr ""
#: models.py:205 models.py:274 models.py:463
#: models.py:353 models.py:423 models.py:630
msgid "Lesson"
msgstr ""
#: models.py:206 templates/chronos/lessons_day.html:9
#: models.py:354 templates/chronos/lessons_day.html:9
#: templates/chronos/lessons_day.html:19
msgid "Lessons"
msgstr ""
#: models.py:212 models.py:730
#: models.py:360 models.py:913
msgid "Week"
msgstr ""
#: models.py:215 models.py:330
#: models.py:361 models.py:914
msgid "Year"
msgstr ""
#: models.py:364 models.py:497
msgid "Lesson period"
msgstr ""
#: models.py:231
#: models.py:380
msgid "Cancelled?"
msgstr ""
#: models.py:233
#: models.py:382
msgid "Cancelled for teachers?"
msgstr ""
#: models.py:236 models.py:442 models.py:483 models.py:751
#: models.py:385 models.py:609 models.py:650 models.py:935
msgid "Comment"
msgstr ""
#: models.py:240
#: models.py:389
msgid "Lessons can only be either substituted or cancelled."
msgstr ""
#: models.py:264
#: models.py:413
msgid "Lesson substitution"
msgstr ""
#: models.py:265
#: models.py:414
msgid "Lesson substitutions"
msgstr ""
#: models.py:331
#: models.py:498
msgid "Lesson periods"
msgstr ""
#: models.py:370
#: models.py:537
msgid "Timetable widget"
msgstr ""
#: models.py:371
#: models.py:538
msgid "Timetable widgets"
msgstr ""
#: models.py:376
msgid "Name"
msgstr ""
#: models.py:385 models.py:398
#: models.py:552 models.py:565
msgid "Absence reason"
msgstr ""
#: models.py:386
#: models.py:553
msgid "Absence reasons"
msgstr ""
#: models.py:407 models.py:617 models.py:654
#: models.py:574 models.py:791 models.py:837
#: templates/chronos/substitutions.html:45
msgid "Teacher"
msgstr ""
#: models.py:415
#: models.py:582
msgid "Group"
msgstr "Grex"
#: models.py:431 models.py:470
#: models.py:598 models.py:637
msgid "Start period"
msgstr ""
#: models.py:438 models.py:477
#: models.py:605 models.py:644
msgid "End period"
msgstr ""
#: models.py:452
#: models.py:619
msgid "Unknown absence"
msgstr ""
#: models.py:457
#: models.py:624
msgid "Absence"
msgstr ""
#: models.py:458
#: models.py:625
msgid "Absences"
msgstr ""
#: models.py:466
#: models.py:633
msgid "Date of exam"
msgstr ""
#: models.py:482 models.py:495 models.py:675
#: models.py:649 models.py:662 models.py:858
msgid "Title"
msgstr ""
#: models.py:488
#: models.py:655
msgid "Exam"
msgstr ""
#: models.py:489
#: models.py:656
msgid "Exams"
msgstr ""
#: models.py:498
#: models.py:665
msgid "Comments"
msgstr ""
#: models.py:526
#: models.py:698
msgid "Holiday"
msgstr ""
#: models.py:527
#: models.py:699
msgid "Holidays"
msgstr ""
#: models.py:541 models.py:610
#: models.py:713 models.py:784
msgid "Supervision area"
msgstr ""
#: models.py:542
#: models.py:714
msgid "Supervision areas"
msgstr ""
#: models.py:552
#: models.py:726
msgid "Time period after break starts"
msgstr ""
#: models.py:560
#: models.py:734
msgid "Time period before break ends"
msgstr ""
#: models.py:600 models.py:614
#: models.py:774 models.py:788
msgid "Break"
msgstr ""
#: models.py:601
#: models.py:775
msgid "Breaks"
msgstr ""
#: models.py:641 models.py:648 templates/chronos/partials/subs/subject.html:23
#: models.py:822 models.py:831 templates/chronos/partials/subs/subject.html:23
#: templates/chronos/partials/supervision.html:15
msgid "Supervision"
msgstr ""
#: models.py:642
#: models.py:823
msgid "Supervisions"
msgstr ""
#: models.py:646
#: models.py:829
msgid "Date"
msgstr ""
#: models.py:666
#: models.py:849
msgid "Supervision substitution"
msgstr ""
#: models.py:667
#: models.py:850
msgid "Supervision substitutions"
msgstr ""
#: models.py:683
#: models.py:866
msgid "Start time period"
msgstr ""
#: models.py:687
#: models.py:870
msgid "End time period"
msgstr ""
#: models.py:700
#: models.py:883
#, python-brace-format
msgid "Event {self.pk}"
msgstr ""
#: models.py:721 templates/chronos/partials/subs/subject.html:27
#: models.py:904 templates/chronos/partials/subs/subject.html:27
msgid "Event"
msgstr ""
#: models.py:722
#: models.py:905
msgid "Events"
msgstr ""
#: models.py:757
#: models.py:941
msgid "Extra lesson"
msgstr ""
#: models.py:758
#: models.py:942
msgid "Extra lessons"
msgstr ""
#: models.py:765
#: models.py:949
msgid "Can view all timetables"
msgstr ""
#: models.py:766
#: models.py:950
msgid "Can view timetable overview"
msgstr ""
#: models.py:767
#: models.py:951
msgid "Can view all lessons per day"
msgstr ""
......@@ -350,9 +381,7 @@ msgid "Use parent groups in timetable views"
msgstr ""
#: preferences.py:18
msgid ""
"If an lesson or substitution has only one group and this group has parent "
"groups, show the parent groups instead of the original group."
msgid "If an lesson or substitution has only one group and this group has parent groups, show the parent groups instead of the original group."
msgstr ""
#: preferences.py:29
......@@ -368,9 +397,7 @@ msgid "Limit of groups for shortening of groups"
msgstr ""
#: preferences.py:40
msgid ""
"If an user activates shortening of groups,they will be collapsed if there "
"are more groups than this limit."
msgid "If an user activates shortening of groups,they will be collapsed if there are more groups than this limit."
msgstr ""
#: preferences.py:50
......@@ -385,6 +412,10 @@ msgstr ""
msgid "The header box shows affected teachers/groups."
msgstr ""
#: preferences.py:68
msgid "Show parent groups in header box in substitution views instead of original groups"
msgstr ""
#: tables.py:41
msgid "Substitution"
msgstr ""
......@@ -492,10 +523,10 @@ msgstr ""
msgid "Go to smart plan"
msgstr ""
#: views.py:234
#: views.py:243
msgid "The substitution has been saved."
msgstr ""
#: views.py:255
#: views.py:264
msgid "The substitution has been deleted."
msgstr ""
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-04 15:42+0200\n"
"POT-Creation-Date: 2020-12-05 21:26+0100\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"
......@@ -45,297 +45,329 @@ msgstr ""
msgid "Substitutions"
msgstr ""
#: model_extensions.py:89
#: mixins.py:25
msgid "Linked validity range"
msgstr ""
#: model_extensions.py:123
msgid "Show announcement in timetable views?"
msgstr ""
#: models.py:45
#: models.py:68
msgid "School term"
msgstr ""
#: models.py:71 models.py:543
msgid "Name"
msgstr ""
#: models.py:73 models.py:593 models.py:663 models.py:860
msgid "Start date"
msgstr ""
#: models.py:74 models.py:594 models.py:664 models.py:861
msgid "End date"
msgstr ""
#: models.py:93
msgid "The start date must be earlier than the end date."
msgstr ""
#: models.py:100
msgid "The validity range must be within the school term."
msgstr ""
#: models.py:107
msgid "There is already a validity range for this time or a part of this time."
msgstr ""
#: models.py:114
msgid "Validity range"
msgstr ""
#: models.py:115
msgid "Validity ranges"
msgstr ""
#: models.py:124
msgid "Week day"
msgstr ""
#: models.py:46
#: models.py:126
msgid "Number of period"
msgstr ""
#: models.py:48
#: models.py:128
msgid "Start time"
msgstr ""
#: models.py:49
#: models.py:129
msgid "End time"
msgstr ""
#: models.py:144 models.py:277 models.py:732
#: models.py:289 models.py:426 models.py:916
msgid "Time period"
msgstr ""
#: models.py:145
#: models.py:290
msgid "Time periods"
msgstr ""
#: models.py:149 models.py:165 models.py:375 models.py:531 models.py:546
#: models.py:294 models.py:310 models.py:542 models.py:703 models.py:720
msgid "Short name"
msgstr ""
#: models.py:150 models.py:166 models.py:532 models.py:547
#: models.py:295 models.py:311 models.py:704 models.py:721
msgid "Long name"
msgstr ""
#: models.py:152
#: models.py:297
msgid "Foreground colour"
msgstr ""
#: models.py:153
#: models.py:298
msgid "Background colour"
msgstr ""
#: models.py:160 models.py:179 models.py:224 models.py:739
#: models.py:305 models.py:327 models.py:373 models.py:923
#: templates/chronos/substitutions.html:46
#: templates/chronos/substitutions_print.html:29
msgid "Subject"
msgstr ""
#: models.py:161
#: models.py:306
msgid "Subjects"
msgstr ""
#: models.py:173 models.py:229 models.py:281 models.py:423 models.py:748
#: models.py:321 models.py:378 models.py:430 models.py:590 models.py:932
#: templates/chronos/substitutions.html:47
#: templates/chronos/substitutions_print.html:30
msgid "Room"
msgstr ""
#: models.py:174 models.py:691 templates/chronos/all.html:39
#: models.py:322 models.py:874 templates/chronos/all.html:39
msgid "Rooms"
msgstr ""
#: models.py:182 models.py:227 models.py:693 models.py:745 tables.py:35
#: models.py:330 models.py:376 models.py:876 models.py:929 tables.py:35
#: templates/chronos/all.html:17 templates/chronos/substitutions_print.html:28
msgid "Teachers"
msgstr ""
#: models.py:185
#: models.py:333
msgid "Periods"
msgstr ""
#: models.py:187 models.py:690 models.py:742 tables.py:34
#: models.py:335 models.py:873 models.py:926 tables.py:34
#: templates/chronos/all.html:28
msgid "Groups"
msgstr ""
#: models.py:189 models.py:426 models.py:496 models.py:677
msgid "Start date"
msgstr ""
#: models.py:190 models.py:427 models.py:497 models.py:678
msgid "End date"
msgstr ""
#: models.py:205 models.py:274 models.py:463
#: models.py:353 models.py:423 models.py:630
msgid "Lesson"
msgstr ""
#: models.py:206 templates/chronos/lessons_day.html:9
#: models.py:354 templates/chronos/lessons_day.html:9
#: templates/chronos/lessons_day.html:19
msgid "Lessons"
msgstr ""
#: models.py:212 models.py:730
#: models.py:360 models.py:913
msgid "Week"
msgstr ""
#: models.py:215 models.py:330
#: models.py:361 models.py:914
msgid "Year"
msgstr ""
#: models.py:364 models.py:497
msgid "Lesson period"
msgstr ""
#: models.py:231
#: models.py:380
msgid "Cancelled?"
msgstr ""
#: models.py:233
#: models.py:382
msgid "Cancelled for teachers?"
msgstr ""
#: models.py:236 models.py:442 models.py:483 models.py:751
#: models.py:385 models.py:609 models.py:650 models.py:935
msgid "Comment"
msgstr ""
#: models.py:240
#: models.py:389
msgid "Lessons can only be either substituted or cancelled."
msgstr ""
#: models.py:264
#: models.py:413
msgid "Lesson substitution"
msgstr ""
#: models.py:265
#: models.py:414
msgid "Lesson substitutions"
msgstr ""
#: models.py:331
#: models.py:498
msgid "Lesson periods"
msgstr ""
#: models.py:370
#: models.py:537
msgid "Timetable widget"
msgstr ""
#: models.py:371
#: models.py:538
msgid "Timetable widgets"
msgstr ""
#: models.py:376
msgid "Name"
msgstr ""
#: models.py:385 models.py:398
#: models.py:552 models.py:565
msgid "Absence reason"
msgstr ""
#: models.py:386
#: models.py:553
msgid "Absence reasons"
msgstr ""
#: models.py:407 models.py:617 models.py:654
#: models.py:574 models.py:791 models.py:837
#: templates/chronos/substitutions.html:45
msgid "Teacher"
msgstr ""
#: models.py:415
#: models.py:582
msgid "Group"
msgstr ""
#: models.py:431 models.py:470
#: models.py:598 models.py:637
msgid "Start period"
msgstr ""
#: models.py:438 models.py:477
#: models.py:605 models.py:644
msgid "End period"
msgstr ""
#: models.py:452
#: models.py:619
msgid "Unknown absence"
msgstr ""
#: models.py:457
#: models.py:624
msgid "Absence"
msgstr ""
#: models.py:458
#: models.py:625
msgid "Absences"
msgstr ""
#: models.py:466
#: models.py:633
msgid "Date of exam"
msgstr ""
#: models.py:482 models.py:495 models.py:675
#: models.py:649 models.py:662 models.py:858
msgid "Title"
msgstr ""
#: models.py:488
#: models.py:655
msgid "Exam"
msgstr ""
#: models.py:489
#: models.py:656
msgid "Exams"
msgstr ""
#: models.py:498
#: models.py:665
msgid "Comments"
msgstr ""
#: models.py:526
#: models.py:698
msgid "Holiday"
msgstr ""
#: models.py:527
#: models.py:699
msgid "Holidays"
msgstr ""
#: models.py:541 models.py:610
#: models.py:713 models.py:784
msgid "Supervision area"
msgstr ""
#: models.py:542
#: models.py:714
msgid "Supervision areas"
msgstr ""
#: models.py:552
#: models.py:726
msgid "Time period after break starts"
msgstr ""
#: models.py:560
#: models.py:734
msgid "Time period before break ends"
msgstr ""
#: models.py:600 models.py:614
#: models.py:774 models.py:788
msgid "Break"
msgstr ""
#: models.py:601
#: models.py:775
msgid "Breaks"
msgstr ""
#: models.py:641 models.py:648 templates/chronos/partials/subs/subject.html:23
#: models.py:822 models.py:831 templates/chronos/partials/subs/subject.html:23
#: templates/chronos/partials/supervision.html:15
msgid "Supervision"
msgstr ""
#: models.py:642
#: models.py:823
msgid "Supervisions"
msgstr ""
#: models.py:646
#: models.py:829
msgid "Date"
msgstr ""
#: models.py:666
#: models.py:849
msgid "Supervision substitution"
msgstr ""
#: models.py:667
#: models.py:850
msgid "Supervision substitutions"
msgstr ""
#: models.py:683
#: models.py:866
msgid "Start time period"
msgstr ""
#: models.py:687
#: models.py:870
msgid "End time period"
msgstr ""
#: models.py:700
#: models.py:883
#, python-brace-format
msgid "Event {self.pk}"
msgstr ""
#: models.py:721 templates/chronos/partials/subs/subject.html:27
#: models.py:904 templates/chronos/partials/subs/subject.html:27
msgid "Event"
msgstr ""
#: models.py:722
#: models.py:905
msgid "Events"
msgstr ""
#: models.py:757
#: models.py:941
msgid "Extra lesson"
msgstr ""
#: models.py:758
#: models.py:942
msgid "Extra lessons"
msgstr ""
#: models.py:765
#: models.py:949
msgid "Can view all timetables"
msgstr ""
#: models.py:766
#: models.py:950
msgid "Can view timetable overview"
msgstr ""
#: models.py:767
#: models.py:951
msgid "Can view all lessons per day"
msgstr ""
......@@ -348,9 +380,7 @@ msgid "Use parent groups in timetable views"
msgstr ""
#: preferences.py:18
msgid ""
"If an lesson or substitution has only one group and this group has parent "
"groups, show the parent groups instead of the original group."
msgid "If an lesson or substitution has only one group and this group has parent groups, show the parent groups instead of the original group."
msgstr ""
#: preferences.py:29
......@@ -366,9 +396,7 @@ msgid "Limit of groups for shortening of groups"
msgstr ""
#: preferences.py:40
msgid ""
"If an user activates shortening of groups,they will be collapsed if there "
"are more groups than this limit."
msgid "If an user activates shortening of groups,they will be collapsed if there are more groups than this limit."
msgstr ""
#: preferences.py:50
......@@ -383,6 +411,10 @@ msgstr ""
msgid "The header box shows affected teachers/groups."
msgstr ""
#: preferences.py:68
msgid "Show parent groups in header box in substitution views instead of original groups"
msgstr ""
#: tables.py:41
msgid "Substitution"
msgstr ""
......@@ -490,10 +522,10 @@ msgstr ""
msgid "Go to smart plan"
msgstr ""
#: views.py:234
#: views.py:243
msgid "The substitution has been saved."
msgstr ""
#: views.py:255
#: views.py:264
msgid "The substitution has been deleted."
msgstr ""
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-04 15:42+0200\n"
"POT-Creation-Date: 2020-12-05 21:26+0100\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"
......@@ -45,297 +45,329 @@ msgstr ""
msgid "Substitutions"
msgstr ""
#: model_extensions.py:89
#: mixins.py:25
msgid "Linked validity range"
msgstr ""
#: model_extensions.py:123
msgid "Show announcement in timetable views?"
msgstr ""
#: models.py:45
#: models.py:68
msgid "School term"
msgstr ""
#: models.py:71 models.py:543
msgid "Name"
msgstr ""
#: models.py:73 models.py:593 models.py:663 models.py:860
msgid "Start date"
msgstr ""
#: models.py:74 models.py:594 models.py:664 models.py:861
msgid "End date"
msgstr ""
#: models.py:93
msgid "The start date must be earlier than the end date."
msgstr ""
#: models.py:100
msgid "The validity range must be within the school term."
msgstr ""
#: models.py:107
msgid "There is already a validity range for this time or a part of this time."
msgstr ""
#: models.py:114
msgid "Validity range"
msgstr ""
#: models.py:115
msgid "Validity ranges"
msgstr ""
#: models.py:124
msgid "Week day"
msgstr ""
#: models.py:46
#: models.py:126
msgid "Number of period"
msgstr ""
#: models.py:48
#: models.py:128
msgid "Start time"
msgstr ""
#: models.py:49
#: models.py:129
msgid "End time"
msgstr ""
#: models.py:144 models.py:277 models.py:732
#: models.py:289 models.py:426 models.py:916
msgid "Time period"
msgstr ""
#: models.py:145
#: models.py:290
msgid "Time periods"
msgstr ""
#: models.py:149 models.py:165 models.py:375 models.py:531 models.py:546
#: models.py:294 models.py:310 models.py:542 models.py:703 models.py:720
msgid "Short name"
msgstr ""
#: models.py:150 models.py:166 models.py:532 models.py:547
#: models.py:295 models.py:311 models.py:704 models.py:721
msgid "Long name"
msgstr ""
#: models.py:152
#: models.py:297
msgid "Foreground colour"
msgstr ""
#: models.py:153
#: models.py:298
msgid "Background colour"
msgstr ""
#: models.py:160 models.py:179 models.py:224 models.py:739
#: models.py:305 models.py:327 models.py:373 models.py:923
#: templates/chronos/substitutions.html:46
#: templates/chronos/substitutions_print.html:29
msgid "Subject"
msgstr ""
#: models.py:161
#: models.py:306
msgid "Subjects"
msgstr ""
#: models.py:173 models.py:229 models.py:281 models.py:423 models.py:748
#: models.py:321 models.py:378 models.py:430 models.py:590 models.py:932
#: templates/chronos/substitutions.html:47
#: templates/chronos/substitutions_print.html:30
msgid "Room"
msgstr ""
#: models.py:174 models.py:691 templates/chronos/all.html:39
#: models.py:322 models.py:874 templates/chronos/all.html:39
msgid "Rooms"
msgstr ""
#: models.py:182 models.py:227 models.py:693 models.py:745 tables.py:35
#: models.py:330 models.py:376 models.py:876 models.py:929 tables.py:35
#: templates/chronos/all.html:17 templates/chronos/substitutions_print.html:28
msgid "Teachers"
msgstr ""
#: models.py:185
#: models.py:333
msgid "Periods"
msgstr ""
#: models.py:187 models.py:690 models.py:742 tables.py:34
#: models.py:335 models.py:873 models.py:926 tables.py:34
#: templates/chronos/all.html:28
msgid "Groups"
msgstr ""
#: models.py:189 models.py:426 models.py:496 models.py:677
msgid "Start date"
msgstr ""
#: models.py:190 models.py:427 models.py:497 models.py:678
msgid "End date"
msgstr ""
#: models.py:205 models.py:274 models.py:463
#: models.py:353 models.py:423 models.py:630
msgid "Lesson"
msgstr ""
#: models.py:206 templates/chronos/lessons_day.html:9
#: models.py:354 templates/chronos/lessons_day.html:9
#: templates/chronos/lessons_day.html:19
msgid "Lessons"
msgstr ""
#: models.py:212 models.py:730
#: models.py:360 models.py:913
msgid "Week"
msgstr ""
#: models.py:215 models.py:330
#: models.py:361 models.py:914
msgid "Year"
msgstr ""
#: models.py:364 models.py:497
msgid "Lesson period"
msgstr ""
#: models.py:231
#: models.py:380
msgid "Cancelled?"
msgstr ""
#: models.py:233
#: models.py:382
msgid "Cancelled for teachers?"
msgstr ""
#: models.py:236 models.py:442 models.py:483 models.py:751
#: models.py:385 models.py:609 models.py:650 models.py:935
msgid "Comment"
msgstr ""
#: models.py:240
#: models.py:389
msgid "Lessons can only be either substituted or cancelled."
msgstr ""
#: models.py:264
#: models.py:413
msgid "Lesson substitution"
msgstr ""
#: models.py:265
#: models.py:414
msgid "Lesson substitutions"
msgstr ""
#: models.py:331
#: models.py:498
msgid "Lesson periods"
msgstr ""
#: models.py:370
#: models.py:537
msgid "Timetable widget"
msgstr ""
#: models.py:371
#: models.py:538
msgid "Timetable widgets"
msgstr ""
#: models.py:376
msgid "Name"
msgstr ""
#: models.py:385 models.py:398
#: models.py:552 models.py:565
msgid "Absence reason"
msgstr ""
#: models.py:386
#: models.py:553
msgid "Absence reasons"
msgstr ""
#: models.py:407 models.py:617 models.py:654
#: models.py:574 models.py:791 models.py:837
#: templates/chronos/substitutions.html:45
msgid "Teacher"
msgstr ""
#: models.py:415
#: models.py:582
msgid "Group"
msgstr ""
#: models.py:431 models.py:470
#: models.py:598 models.py:637
msgid "Start period"
msgstr ""
#: models.py:438 models.py:477
#: models.py:605 models.py:644
msgid "End period"
msgstr ""
#: models.py:452
#: models.py:619
msgid "Unknown absence"
msgstr ""
#: models.py:457
#: models.py:624
msgid "Absence"
msgstr ""
#: models.py:458
#: models.py:625
msgid "Absences"
msgstr ""
#: models.py:466
#: models.py:633
msgid "Date of exam"
msgstr ""
#: models.py:482 models.py:495 models.py:675
#: models.py:649 models.py:662 models.py:858
msgid "Title"
msgstr ""
#: models.py:488
#: models.py:655
msgid "Exam"
msgstr ""
#: models.py:489
#: models.py:656
msgid "Exams"
msgstr ""
#: models.py:498
#: models.py:665
msgid "Comments"
msgstr ""
#: models.py:526
#: models.py:698
msgid "Holiday"
msgstr ""
#: models.py:527
#: models.py:699
msgid "Holidays"
msgstr ""
#: models.py:541 models.py:610
#: models.py:713 models.py:784
msgid "Supervision area"
msgstr ""
#: models.py:542
#: models.py:714
msgid "Supervision areas"
msgstr ""
#: models.py:552
#: models.py:726
msgid "Time period after break starts"
msgstr ""
#: models.py:560
#: models.py:734
msgid "Time period before break ends"
msgstr ""
#: models.py:600 models.py:614
#: models.py:774 models.py:788
msgid "Break"
msgstr ""
#: models.py:601
#: models.py:775
msgid "Breaks"
msgstr ""
#: models.py:641 models.py:648 templates/chronos/partials/subs/subject.html:23
#: models.py:822 models.py:831 templates/chronos/partials/subs/subject.html:23
#: templates/chronos/partials/supervision.html:15
msgid "Supervision"
msgstr ""
#: models.py:642
#: models.py:823
msgid "Supervisions"
msgstr ""
#: models.py:646
#: models.py:829
msgid "Date"
msgstr ""
#: models.py:666
#: models.py:849
msgid "Supervision substitution"
msgstr ""
#: models.py:667
#: models.py:850
msgid "Supervision substitutions"
msgstr ""
#: models.py:683
#: models.py:866
msgid "Start time period"
msgstr ""
#: models.py:687
#: models.py:870
msgid "End time period"
msgstr ""
#: models.py:700
#: models.py:883
#, python-brace-format
msgid "Event {self.pk}"
msgstr ""
#: models.py:721 templates/chronos/partials/subs/subject.html:27
#: models.py:904 templates/chronos/partials/subs/subject.html:27
msgid "Event"
msgstr ""
#: models.py:722
#: models.py:905
msgid "Events"
msgstr ""
#: models.py:757
#: models.py:941
msgid "Extra lesson"
msgstr ""
#: models.py:758
#: models.py:942
msgid "Extra lessons"
msgstr ""
#: models.py:765
#: models.py:949
msgid "Can view all timetables"
msgstr ""
#: models.py:766
#: models.py:950
msgid "Can view timetable overview"
msgstr ""
#: models.py:767
#: models.py:951
msgid "Can view all lessons per day"
msgstr ""
......@@ -348,9 +380,7 @@ msgid "Use parent groups in timetable views"
msgstr ""
#: preferences.py:18
msgid ""
"If an lesson or substitution has only one group and this group has parent "
"groups, show the parent groups instead of the original group."
msgid "If an lesson or substitution has only one group and this group has parent groups, show the parent groups instead of the original group."
msgstr ""
#: preferences.py:29
......@@ -366,9 +396,7 @@ msgid "Limit of groups for shortening of groups"
msgstr ""
#: preferences.py:40
msgid ""
"If an user activates shortening of groups,they will be collapsed if there "
"are more groups than this limit."
msgid "If an user activates shortening of groups,they will be collapsed if there are more groups than this limit."
msgstr ""
#: preferences.py:50
......@@ -383,6 +411,10 @@ msgstr ""
msgid "The header box shows affected teachers/groups."
msgstr ""
#: preferences.py:68
msgid "Show parent groups in header box in substitution views instead of original groups"
msgstr ""
#: tables.py:41
msgid "Substitution"
msgstr ""
......@@ -490,10 +522,10 @@ msgstr ""
msgid "Go to smart plan"
msgstr ""
#: views.py:234
#: views.py:243
msgid "The substitution has been saved."
msgstr ""
#: views.py:255
#: views.py:264
msgid "The substitution has been deleted."
msgstr ""
......@@ -33,9 +33,7 @@ class ValidityRangeRelatedQuerySet(QuerySet):
"""Filter for all objects on a certain day."""
return self.within_dates(day, day)
def for_validity_range(
self, validity_range: "ValidityRange"
) -> "ValidityRangeRelatedQuerySet":
def for_validity_range(self, validity_range: "ValidityRange") -> "ValidityRangeRelatedQuerySet":
return self.filter(validity=validity_range)
def for_current_or_all(self) -> "ValidityRangeRelatedQuerySet":
......@@ -89,7 +87,14 @@ class LessonPeriodManager(CurrentSiteManager):
return (
super()
.get_queryset()
.select_related("lesson", "lesson__subject", "period", "room")
.select_related(
"lesson",
"lesson__subject",
"period",
"room",
"lesson__validity",
"lesson__validity__school_term",
)
.prefetch_related("lesson__groups", "lesson__teachers", "substitutions")
)
......@@ -105,18 +110,98 @@ class LessonSubstitutionManager(CurrentSiteManager):
.select_related(
"lesson_period",
"lesson_period__lesson",
"lesson_period__lesson__subject",
"subject",
"lesson_period__period",
"room",
"lesson_period__room",
)
.prefetch_related(
"lesson_period__lesson__groups",
"lesson_period__lesson__groups__parent_groups",
"teachers",
"lesson_period__lesson__teachers",
)
)
class SupervisionManager(CurrentSiteManager):
"""Manager adding specific methods to supervisions."""
def get_queryset(self):
"""Ensure all related data is loaded as well."""
return (
super()
.get_queryset()
.select_related(
"teacher",
"area",
"break_item",
"break_item__after_period",
"break_item__before_period",
)
)
class SupervisionSubstitutionManager(CurrentSiteManager):
"""Manager adding specific methods to supervision substitutions."""
def get_queryset(self):
"""Ensure all related data is loaded as well."""
return (
super()
.get_queryset()
.select_related(
"teacher",
"supervision",
"supervision__teacher",
"supervision__area",
"supervision__break_item",
"supervision__break_item__after_period",
"supervision__break_item__before_period",
)
.prefetch_related("lesson_period__lesson__groups", "teachers")
)
class EventManager(CurrentSiteManager):
"""Manager adding specific methods to events."""
def get_queryset(self):
"""Ensure all related data is loaded as well."""
return (
super()
.get_queryset()
.select_related("period_from", "period_to")
.prefetch_related(
"groups", "groups__school_term", "groups__parent_groups", "teachers", "rooms",
)
)
class ExtraLessonManager(CurrentSiteManager):
"""Manager adding specific methods to extra lessons."""
def get_queryset(self):
"""Ensure all related data is loaded as well."""
return (
super()
.get_queryset()
.select_related("room", "period", "subject")
.prefetch_related("groups", "groups__school_term", "groups__parent_groups", "teachers",)
)
class BreakManager(CurrentSiteManager):
"""Manager adding specific methods to breaks."""
def get_queryset(self):
"""Ensure all related data is loaded as well."""
return super().get_queryset().select_related("before_period", "after_period")
class WeekQuerySetMixin:
def annotate_week(self, week: Union[CalendarWeek]):
"""Annotate all lessons in the QuerySet with the number of the provided calendar week."""
return self.annotate(
_week=models.Value(week.week, models.IntegerField()),
_year=models.Value(week.year, models.IntegerField()),
......@@ -124,7 +209,7 @@ class WeekQuerySetMixin:
class GroupByPeriodsMixin:
def group_by_periods(self, is_person: bool = False) -> dict:
def group_by_periods(self, is_week: bool = False) -> dict:
"""Group a QuerySet of objects with attribute period by period numbers and weekdays."""
per_period = {}
for obj in self:
......@@ -132,12 +217,12 @@ class GroupByPeriodsMixin:
weekday = obj.period.weekday
if period not in per_period:
per_period[period] = [] if is_person else {}
per_period[period] = [] if not is_week else {}
if not is_person and weekday not in per_period[period]:
if is_week and weekday not in per_period[period]:
per_period[period][weekday] = []
if is_person:
if not is_week:
per_period[period].append(obj)
else:
per_period[period][weekday].append(obj)
......@@ -166,10 +251,8 @@ class LessonDataQuerySet(models.QuerySet, WeekQuerySetMixin):
def in_week(self, wanted_week: CalendarWeek):
"""Filter for all lessons within a calendar week."""
return self.within_dates(
wanted_week[0]
+ timedelta(days=1) * (F(self._period_path + "period__weekday")),
wanted_week[0]
+ timedelta(days=1) * (F(self._period_path + "period__weekday")),
wanted_week[0] + timedelta(days=1) * (F(self._period_path + "period__weekday")),
wanted_week[0] + timedelta(days=1) * (F(self._period_path + "period__weekday")),
).annotate_week(wanted_week)
def on_day(self, day: date):
......@@ -242,15 +325,15 @@ class LessonDataQuerySet(models.QuerySet, WeekQuerySetMixin):
return qs1.union(qs2)
def filter_from_type(
self, type_: TimetableType, pk: int
self, type_: TimetableType, obj: Union[Person, Group, "Room", int]
) -> Optional[models.QuerySet]:
"""Filter lesson data for a group, teacher or room by provided type."""
if type_ == TimetableType.GROUP:
return self.filter_group(pk)
return self.filter_group(obj)
elif type_ == TimetableType.TEACHER:
return self.filter_teacher(pk)
return self.filter_teacher(obj)
elif type_ == TimetableType.ROOM:
return self.filter_room(pk)
return self.filter_room(obj)
else:
return None
......@@ -283,9 +366,7 @@ class LessonDataQuerySet(models.QuerySet, WeekQuerySetMixin):
return lesson_periods
def next_lesson(
self, reference: "LessonPeriod", offset: Optional[int] = 1
) -> "LessonPeriod":
def next_lesson(self, reference: "LessonPeriod", offset: Optional[int] = 1) -> "LessonPeriod":
"""Get another lesson in an ordered set of lessons.
By default, it returns the next lesson in the set. By passing the offset argument,
......@@ -322,6 +403,51 @@ class LessonSubstitutionQuerySet(LessonDataQuerySet):
_period_path = "lesson_period__"
_subst_path = ""
def within_dates(self, start: date, end: date):
"""Filter for all substitutions within a date range."""
start_week = CalendarWeek.from_date(start)
end_week = CalendarWeek.from_date(end)
return self.filter(
week__gte=start_week.week,
week__lte=end_week.week,
year__gte=start_week.year,
year__lte=end_week.year,
).filter(
Q(
week=start_week.week,
year=start_week.year,
lesson_period__period__weekday__gte=start.weekday(),
)
| Q(
week=end_week.week,
year=end_week.year,
lesson_period__period__weekday__lte=end.weekday(),
)
| (
~Q(week=start_week.week, year=start_week.year)
& ~Q(week=end_week.week, year=end_week.year)
)
)
def in_week(self, wanted_week: CalendarWeek):
"""Filter for all lessons within a calendar week."""
return self.filter(week=wanted_week.week, year=wanted_week.year).annotate_week(wanted_week)
def on_day(self, day: date):
"""Filter for all lessons on a certain day."""
week, weekday = week_weekday_from_date(day)
return self.in_week(week).filter(lesson_period__period__weekday=weekday)
def at_time(self, when: Optional[datetime] = None):
"""Filter for the lessons taking place at a certain point in time."""
now = when or datetime.now()
return self.on_day(now.date()).filter(
lesson_period__period__time_start__lte=now.time(),
lesson_period__period__time_end__gte=now.time(),
)
def affected_lessons(self):
"""Return all lessons which are affected by selected substitutions."""
from .models import Lesson # noaq
......@@ -334,15 +460,20 @@ class LessonSubstitutionQuerySet(LessonDataQuerySet):
Return all teachers which are affected by
selected substitutions (as substituted or substituting).
"""
return Person.objects.filter(
Q(lessons_as_teacher__in=self.affected_lessons())
| Q(lesson_substitutions__in=self)
).annotate(lessons_count=Count("lessons_as_teacher"))
return (
Person.objects.filter(
Q(lessons_as_teacher__in=self.affected_lessons()) | Q(lesson_substitutions__in=self)
)
.annotate(lessons_count=Count("lessons_as_teacher"))
.order_by("short_name")
)
def affected_groups(self):
"""Return all groups which are affected by selected substitutions."""
return Group.objects.filter(lessons__in=self.affected_lessons()).annotate(
lessons_count=Count("lessons")
return (
Group.objects.filter(lessons__in=self.affected_lessons())
.annotate(lessons_count=Count("lessons"))
.order_by("short_name")
)
......@@ -373,22 +504,28 @@ class DateRangeQuerySetMixin:
)
class AbsenceQuerySet(SchoolTermRelatedQuerySet, DateRangeQuerySetMixin):
class AbsenceQuerySet(DateRangeQuerySetMixin, SchoolTermRelatedQuerySet):
"""QuerySet with custom query methods for absences."""
def absent_teachers(self):
return Person.objects.filter(absences__in=self).annotate(
absences_count=Count("absences")
return (
Person.objects.filter(absences__in=self)
.annotate(absences_count=Count("absences"))
.order_by("short_name")
)
def absent_groups(self):
return Group.objects.filter(absences__in=self).annotate(
absences_count=Count("absences")
return (
Group.objects.filter(absences__in=self)
.annotate(absences_count=Count("absences"))
.order_by("short_name")
)
def absent_rooms(self):
return Person.objects.filter(absences__in=self).annotate(
absences_count=Count("absences")
return (
Person.objects.filter(absences__in=self)
.annotate(absences_count=Count("absences"))
.order_by("short_name")
)
......@@ -403,7 +540,7 @@ class SupervisionQuerySet(ValidityRangeRelatedQuerySet, WeekQuerySetMixin):
def filter_by_weekday(self, weekday: int):
"""Filter supervisions by weekday."""
self.filter(
return self.filter(
Q(break_item__before_period__weekday=weekday)
| Q(break_item__after_period__weekday=weekday)
)
......@@ -464,15 +601,15 @@ class TimetableQuerySet(models.QuerySet):
return self.filter(room=room)
def filter_from_type(
self, type_: TimetableType, pk: int
self, type_: TimetableType, obj: Union[Group, Person, "Room", int]
) -> Optional[models.QuerySet]:
"""Filter data for a group, teacher or room by provided type."""
if type_ == TimetableType.GROUP:
return self.filter_group(pk)
return self.filter_group(obj)
elif type_ == TimetableType.TEACHER:
return self.filter_teacher(pk)
return self.filter_teacher(obj)
elif type_ == TimetableType.ROOM:
return self.filter_room(pk)
return self.filter_room(obj)
else:
return None
......@@ -495,9 +632,7 @@ class TimetableQuerySet(models.QuerySet):
return None
class EventQuerySet(
SchoolTermRelatedQuerySet, DateRangeQuerySetMixin, TimetableQuerySet
):
class EventQuerySet(DateRangeQuerySetMixin, SchoolTermRelatedQuerySet, TimetableQuerySet):
"""QuerySet with custom query methods for events."""
def annotate_day(self, day: date):
......@@ -505,9 +640,7 @@ class EventQuerySet(
return self.annotate(_date=models.Value(day, models.DateField()))
class ExtraLessonQuerySet(
SchoolTermRelatedQuerySet, TimetableQuerySet, GroupByPeriodsMixin
):
class ExtraLessonQuerySet(TimetableQuerySet, SchoolTermRelatedQuerySet, GroupByPeriodsMixin):
"""QuerySet with custom query methods for extra lessons."""
_multiple_rooms = False
......
......@@ -16,9 +16,7 @@ from .managers import ValidityRangeRelatedQuerySet
class ValidityRangeRelatedExtensibleModel(ExtensibleModel):
"""Add relation to validity range."""
objects = CurrentSiteManagerWithoutMigrations.from_queryset(
ValidityRangeRelatedQuerySet
)()
objects = CurrentSiteManagerWithoutMigrations.from_queryset(ValidityRangeRelatedQuerySet)()
validity = models.ForeignKey(
"chronos.ValidityRange",
......@@ -36,9 +34,7 @@ class ValidityRangeRelatedExtensibleModel(ExtensibleModel):
class WeekRelatedMixin:
@property
def date(self) -> date:
return week_weekday_to_date(
self.calendar_week, self.lesson_period.period.weekday
)
return week_weekday_to_date(self.calendar_week, self.lesson_period.period.weekday)
@property
def calendar_week(self) -> CalendarWeek:
......
from datetime import date
from typing import Optional, Union
from django.utils.translation import gettext_lazy as _
......@@ -79,6 +80,39 @@ def lesson_periods_as_teacher(self):
return LessonPeriod.objects.filter(lesson__teachers=self)
@Person.method
def lessons_on_day(self, day: date):
"""Get all lessons of this person (either as participant or teacher) on the given day."""
return LessonPeriod.objects.on_day(day).filter_from_person(self).order_by("period__period")
@Person.method
def _adjacent_lesson(
self, lesson_period: "LessonPeriod", day: date, offset: int = 1
) -> Union["LessonPeriod", None]:
"""Get next/previous lesson of the person (either as participant or teacher) on the same day."""
daily_lessons = self.lessons_on_day(day)
ids = list(daily_lessons.values_list("id", flat=True))
index = ids.index(lesson_period.pk)
if (offset > 0 and index + offset < len(ids)) or (offset < 0 and index >= -offset):
return daily_lessons[index + offset]
else:
return None
@Person.method
def next_lesson(self, lesson_period: "LessonPeriod", day: date) -> Union["LessonPeriod", None]:
"""Get next lesson of the person (either as participant or teacher) on the same day."""
return self._adjacent_lesson(lesson_period, day)
@Person.method
def previous_lesson(self, lesson_period: "LessonPeriod", day: date) -> Union["LessonPeriod", None]:
"""Get previous lesson of the person (either as participant or teacher) on the same day."""
return self._adjacent_lesson(lesson_period, day, offset=-1)
def for_timetables(cls):
"""Return all announcements that should be shown in timetable views."""
return cls.objects.filter(show_in_timetables=True)
......@@ -86,9 +120,7 @@ def for_timetables(cls):
Announcement.class_method(for_timetables)
Announcement.field(
show_in_timetables=BooleanField(
verbose_name=_("Show announcement in timetable views?")
)
show_in_timetables=BooleanField(verbose_name=_("Show announcement in timetable views?"))
)
Group.foreign_key("subject", Subject, related_name="groups")
This diff is collapsed.
......@@ -27,9 +27,7 @@ class ShortenGroups(BooleanPreference):
name = "shorten_groups"
default = True
verbose_name = _("Shorten groups in timetable views")
help_text = _(
"If there are more groups than the set limit, they will be collapsed."
)
help_text = _("If there are more groups than the set limit, they will be collapsed.")
@site_preferences_registry.register
......@@ -59,3 +57,13 @@ class SubstitutionsShowHeaderBox(BooleanPreference):
default = True
verbose_name = _("Show header box in substitution views")
help_text = _("The header box shows affected teachers/groups.")
@site_preferences_registry.register
class AffectedGroupsUseParentGroups(BooleanPreference):
section = chronos
name = "affected_groups_parent_groups"
default = True
verbose_name = _(
"Show parent groups in header box in substitution views instead of original groups"
)
......@@ -11,9 +11,7 @@ from .models import LessonSubstitution
from .util.predicates import has_timetable_perm
# View timetable overview
view_timetable_overview_predicate = has_person & has_global_perm(
"chronos.view_timetable_overview"
)
view_timetable_overview_predicate = has_person & has_global_perm("chronos.view_timetable_overview")
add_perm("chronos.view_timetable_overview", view_timetable_overview_predicate)
# View my timetable
......
from aleksis.core.util.search import Indexable, SearchIndex
from .models import Room
class RoomIndex(SearchIndex, Indexable):
"""Haystack index for searching rooms."""
model = Room
......@@ -31,12 +31,8 @@ class LessonsTable(tables.Table):
row_attrs = {"class": _css_class_from_lesson_state}
period__period = tables.Column(accessor="period__period")
lesson__groups = tables.Column(
accessor="lesson__group_names", verbose_name=_("Groups")
)
lesson__teachers = tables.Column(
accessor="lesson__teacher_names", verbose_name=_("Teachers")
)
lesson__groups = tables.Column(accessor="lesson__group_names", verbose_name=_("Groups"))
lesson__teachers = tables.Column(accessor="lesson__teacher_names", verbose_name=_("Teachers"))
lesson__subject = tables.Column(accessor="lesson__subject")
room = tables.Column(accessor="room")
edit_substitution = tables.LinkColumn(
......
......@@ -13,7 +13,7 @@
{% block content %}
<div class="row no-margin">
<div class="col m12 s12 l6 xl4">
<div class="col s12">
<h4>
{% trans "My timetable" %} <i>{{ el }}</i>
<span class="badge new primary-color ">{% trans "SMART PLAN" %}</span>
......@@ -24,36 +24,43 @@
</div>
</div>
<div class="row nomargin">
<div class="row nomargin hide-on-large-only">
<div class="col m12 s12 l6 xl4">
{% include "core/partials/announcements.html" with announcements=announcements %}
</div>
</div>
<div class="row">
<div class="timetable-plan col s12 m12 xl4">
{# Date #}
<div class="row">
<div class="col s12">
<div class="card timetable-title-card">
<div class="card-content">
<span class="card-title">
{% include "chronos/partials/datepicker.html" with display_date_only=1 %}
{# {% if holiday %}#}
{# <span class="badge new blue center-align holiday-badge">{{ holiday.0 }}</span>#}
{# {% endif %}#}
</span>
</div>
</div>
<div class="row nomargin hide-on-large-med-and-down">
<div class="col m12 s12 l6 xl4">
{% include "core/partials/announcements.html" with announcements=week_announcements %}
</div>
</div>
<div class="row">
<div class="col s12">
<div class="card timetable-title-card">
<div class="card-content">
<span class="card-title">
{% include "chronos/partials/datepicker.html" with display_date_only=1 %}
<span class="show-on-medium-and-down hide-on-large-only">
{% if weekday.date == today %}
<br/> {% include "chronos/partials/today.html" %}
{% endif %}
</span>
</span>
</div>
</div>
</div>
</div>
<div class="row hide-on-large-only">
<div class="timetable-plan col s12 m12 xl4">
{# Lessons #}
{% include "chronos/partials/lessons_col.html" with lesson_periods=lesson_periods %}
</div>
</div>
<div class="row timetable-plan hide-on-med-and-down">
{% include "chronos/partials/week_timetable.html" with timetable=week_timetable active_day=day today=today %}
</div>
{% endblock %}
<div class="card lesson-card">
<div class="card lesson-card {% if week_day == active_day %} z-depth-5 active {% endif %}">
<div class="card-content">
{% for element in elements %}
{% if element.label_ == "lesson_period" %}
......
{% if groups.count == 1 and groups.0.parent_groups.all and request.site.preferences.chronos__use_parent_groups %}
{% include "chronos/partials/groups_part.html" with groups=groups.0.parent_groups.all %}
{% include "chronos/partials/groups_part.html" with groups=groups.0.parent_groups.all no_collapsible=no_collapsible %}
{% else %}
{% include "chronos/partials/groups_part.html" with groups=groups %}
{% include "chronos/partials/groups_part.html" with groups=groups no_collapsible=no_collapsible %}
{% endif %}
{% if groups.count > request.site.preferences.chronos__shorten_groups_limit and request.user.person.preferences.chronos__shorten_groups %}
{% if groups.count > request.site.preferences.chronos__shorten_groups_limit and request.user.person.preferences.chronos__shorten_groups and not no_collapsible %}
{% include "components/text_collapsible.html" with template="chronos/partials/group.html" qs=groups %}
{% else %}
{% for group in groups %}
......