Bereiche vollständig verwaltbar (anlegen/bearbeiten/löschen/Uhrzeit)

Migration 0006: sections.key bekommt einen automatisch generierten
Schlüssel (wie dishes.id), menu_entries.section_key kaskadiert beim
Löschen eines Bereichs, neue RLS-Policy erlaubt Kantinenmitarbeitern/
Admins Schreibzugriff auf sections.

Neue Seite „Bereiche" im Kantinen-Bereich (SectionManager): Bereiche
anlegen, umbenennen (inkl. EN/PL), Uhrzeit setzen, löschen und per
Pfeil-Buttons neu anordnen.
This commit is contained in:
2026-07-18 08:14:32 +02:00
parent 8b98294998
commit 868a5d2fcf
5 changed files with 386 additions and 0 deletions
+57
View File
@@ -30,6 +30,7 @@ const de = {
canteen: "Kantine",
menuGroup: "Speiseplan",
weekPlan: "Wochenplan",
sections: "Bereiche",
dishes: "Gerichte",
labels: "Allergene & Zusatzstoffe",
adminGroup: "Verwaltung",
@@ -120,6 +121,24 @@ const de = {
saveError: "Speichern fehlgeschlagen: {message}",
deleteError: "Löschen fehlgeschlagen: {message}",
},
sectionManager: {
title: "Bereiche",
newSection: "Neuer Bereich",
editSection: "Bereich bearbeiten",
nameLabel: "Bezeichnung",
nameEnLabel: "Bezeichnung (Englisch)",
namePlLabel: "Bezeichnung (Polnisch)",
timeFrom: "Von",
timeTo: "Bis",
moveUp: "Nach oben",
moveDown: "Nach unten",
empty: "Noch keine Bereiche angelegt.",
confirmDelete:
"„{name}“ wirklich löschen? Zugewiesene Gerichte werden auch aus allen Wochenplänen entfernt.",
loadError: "Laden fehlgeschlagen: {message}",
saveError: "Speichern fehlgeschlagen: {message}",
deleteError: "Löschen fehlgeschlagen: {message}",
},
userManager: {
title: "Benutzer",
newUser: "Neuer Benutzer",
@@ -269,6 +288,7 @@ const en: Dict = {
canteen: "Canteen",
menuGroup: "Menu",
weekPlan: "Weekly plan",
sections: "Sections",
dishes: "Dishes",
labels: "Allergens & Additives",
adminGroup: "Administration",
@@ -359,6 +379,24 @@ const en: Dict = {
saveError: "Saving failed: {message}",
deleteError: "Deleting failed: {message}",
},
sectionManager: {
title: "Sections",
newSection: "New section",
editSection: "Edit section",
nameLabel: "Name",
nameEnLabel: "Name (English)",
namePlLabel: "Name (Polish)",
timeFrom: "From",
timeTo: "To",
moveUp: "Move up",
moveDown: "Move down",
empty: "No sections yet.",
confirmDelete:
"Really delete “{name}”? Assigned dishes will also be removed from all weekly plans.",
loadError: "Loading failed: {message}",
saveError: "Saving failed: {message}",
deleteError: "Deleting failed: {message}",
},
userManager: {
title: "Users",
newUser: "New user",
@@ -506,6 +544,7 @@ const pl: Dict = {
canteen: "Stołówka",
menuGroup: "Jadłospis",
weekPlan: "Plan tygodnia",
sections: "Sekcje",
dishes: "Dania",
labels: "Alergeny i dodatki",
adminGroup: "Administracja",
@@ -596,6 +635,24 @@ const pl: Dict = {
saveError: "Zapisywanie nie powiodło się: {message}",
deleteError: "Usuwanie nie powiodło się: {message}",
},
sectionManager: {
title: "Sekcje",
newSection: "Nowa sekcja",
editSection: "Edytuj sekcję",
nameLabel: "Nazwa",
nameEnLabel: "Nazwa (angielski)",
namePlLabel: "Nazwa (polski)",
timeFrom: "Od",
timeTo: "Do",
moveUp: "Przesuń w górę",
moveDown: "Przesuń w dół",
empty: "Nie dodano jeszcze żadnych sekcji.",
confirmDelete:
"Czy na pewno usunąć „{name}”? Przypisane dania zostaną również usunięte ze wszystkich planów tygodniowych.",
loadError: "Wczytywanie nie powiodło się: {message}",
saveError: "Zapisywanie nie powiodło się: {message}",
deleteError: "Usuwanie nie powiodło się: {message}",
},
userManager: {
title: "Użytkownicy",
newUser: "Nowy użytkownik",