Web-GUI: fixierte Gruppen anzeigen, Strafprofil waehlen, Farben nutzen

CSVConfig.HandleGaesteliste liefert zusaetzlich FixierteGruppen (Name ->
Tisch/Anzahl), damit fest platzierte Gaeste in der Gaesteliste sichtbar
(grau hinterlegt) erscheinen. Durchgaengig "VIP" -> "fixiert" umbenannt.

Backend: Strafprofile werden gecacht geladen, neuer Endpoint /strafprofile
und Query-Parameter strafen an /berechnen, damit sich Profile (default vs.
locker) in der GUI vergleichen lassen. SVG-Ausgabe nutzt das Farbschema aus
farben.cfg (Rueckfall auf Palette).

Frontend: tische.ini und CSV werden bei Auswahl sofort geladen, Auswahl der
fixierten Gruppen und des Optimierungsprofils in der Oberflaeche.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Michael Stangl
2026-07-27 10:10:41 +02:00
parent d19913a53d
commit c6e0b95d81
3 changed files with 124 additions and 29 deletions
+14 -3
View File
@@ -84,6 +84,11 @@ class CSVConfig:
VIPGruppe = Gruppe( 0 )
VipHash = {}
GruppenNamen = {}
# fest platzierte ("fixierte") Gruppen fuer die Anzeige: Name ->
# {'tisch': Tischnummer, 'anzahl': Personenzahl}. VIPs laufen nicht
# durch die GA-Platzierung, sollen in der Gaesteliste aber sichtbar
# (grau hinterlegt) erscheinen.
FixierteGruppen = {}
# Gruppen entstehen beim ersten Auftreten ihres Namens;
# Einzelpersonen (leerer Gruppenname) bekommen eine eigene Gruppe
@@ -126,9 +131,13 @@ class CSVConfig:
PID = PID + 1
P = Person( PID, Vorname, Nachname, Titel )
if TischNr is not None:
# VIP: fester Tisch, keine GA-Platzierung
# fixiert: fester Tisch, keine GA-Platzierung
VipHash[ PID ] = TischNr
VIPGruppe.Person_dazu( P )
Name = GruppenName if GruppenName else 'Fixiert Tisch %d' % TischNr
Eintrag = FixierteGruppen.setdefault(
Name, { 'tisch': TischNr, 'anzahl': 0 } )
Eintrag['anzahl'] = Eintrag['anzahl'] + 1
else:
PN.PersonAdd( P )
if GruppenName == '':
@@ -155,7 +164,7 @@ class CSVConfig:
if G.Anzahl() > 0:
GN.Gruppe_dazu( G )
return [ PN, GN, VIPGruppe, VipHash, GruppenNamen ]
return [ PN, GN, VIPGruppe, VipHash, GruppenNamen, FixierteGruppen ]
def laden(self, FileName):
"""lese alle Eingangsdaten aus einer CSV-Datei ein"""
@@ -179,12 +188,14 @@ Einzel;Gast;;;;
"""
print("\n-- Parse Beispiel-CSV:")
C = CSVConfig()
[ PN, GN, VIPGruppe, VipHash, GruppenNamen ] = C.HandleGaesteliste( Beispiel )
[ PN, GN, VIPGruppe, VipHash, GruppenNamen, FixierteGruppen ] = \
C.HandleGaesteliste( Beispiel )
print(PN)
print(GN)
print(VIPGruppe)
print(VipHash)
print(GruppenNamen)
print(FixierteGruppen)
else:
pass