vorherige_dienste verneinfacht
This commit is contained in:
parent
33b8a0047c
commit
367e3cd316
15
csv_io.py
15
csv_io.py
@ -164,10 +164,7 @@ class EingabeParser:
|
||||
datei: str,
|
||||
eltern: List[str],
|
||||
dienste: List, # List[Dienst]
|
||||
) -> Tuple[
|
||||
DefaultDict[str, DefaultDict], # vorherige_dienste
|
||||
List[Tuple[date, str, any]] # historische_dienste (mit Dienst-Objekt)
|
||||
]:
|
||||
) -> List[Tuple[date, str, any]]: # historische_dienste (mit Dienst-Objekt)
|
||||
"""
|
||||
Lädt vorherige-ausgaben.csv für Fairness-Constraints
|
||||
|
||||
@ -177,11 +174,10 @@ class EingabeParser:
|
||||
dienste: Liste der Dienst-Objekte
|
||||
|
||||
Returns:
|
||||
Tuple mit (vorherige_dienste, historische_dienste)
|
||||
Liste der historischen Dienste
|
||||
"""
|
||||
print(f"Lade vorherige Ausgaben aus {datei}...")
|
||||
|
||||
vorherige_dienste = defaultdict(lambda: defaultdict(int))
|
||||
historische_dienste = []
|
||||
|
||||
try:
|
||||
@ -207,25 +203,22 @@ class EingabeParser:
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
# Zugeteilte Dienste zählen UND mit Datum speichern
|
||||
# Zugeteilte Dienste mit Datum speichern
|
||||
for dienst, spalte_idx in dienst_spalten.items():
|
||||
if spalte_idx < len(row) and row[spalte_idx].strip():
|
||||
# Mehrere Eltern können in einer Zelle stehen (durch " und " getrennt)
|
||||
eltern_liste = row[spalte_idx].strip().split(' und ')
|
||||
for eltern_name in eltern_liste:
|
||||
if eltern_name in eltern:
|
||||
# Summierung für Kompatibilität
|
||||
vorherige_dienste[eltern_name][dienst] += 1
|
||||
# Historische Dienste mit Datum speichern
|
||||
historische_dienste.append((datum, eltern_name, dienst))
|
||||
|
||||
except FileNotFoundError:
|
||||
print("Keine vorherigen Ausgaben gefunden - starte ohne historische Daten")
|
||||
|
||||
print(f"Vorherige Dienste geladen: {dict(vorherige_dienste)}")
|
||||
print(f"Historische Dienste mit Datum: {len(historische_dienste)} Einträge")
|
||||
|
||||
return vorherige_dienste, historische_dienste
|
||||
return historische_dienste
|
||||
|
||||
|
||||
class AusgabeWriter:
|
||||
|
||||
@ -57,8 +57,6 @@ class Elterndienstplaner:
|
||||
# Wenn es tag nicht gibt -> default 0.0
|
||||
self.dienstfaktoren: Dict[str, DefaultDict[date, float]] = {}
|
||||
self.alle_zeitraeume: Dict[str, List[Tuple[date, date, float]]] = {}
|
||||
self.vorherige_dienste: DefaultDict[str, DefaultDict[Dienst, int]] = \
|
||||
defaultdict(lambda: defaultdict(int))
|
||||
self.historische_dienste: List[Tuple[date, str, Dienst]] = []
|
||||
|
||||
def get_dienst(self, kuerzel: str) -> Optional[Dienst]:
|
||||
@ -92,7 +90,7 @@ class Elterndienstplaner:
|
||||
|
||||
def lade_vorherige_ausgaben_csv(self, datei: str) -> None:
|
||||
"""Lädt vorherige-ausgaben.csv für Fairness-Constraints"""
|
||||
self.vorherige_dienste, self.historische_dienste = \
|
||||
self.historische_dienste = \
|
||||
EingabeParser.parse_vorherige_ausgaben_csv(datei, self.eltern, self.dienste)
|
||||
|
||||
def berechne_dienstfaktor_an_datum(self, eltern: str, datum: date) -> float:
|
||||
@ -193,7 +191,12 @@ class Elterndienstplaner:
|
||||
# 3. ABZUG DER BEREITS GELEISTETEN DIENSTE
|
||||
# Ziehe die tatsächlich geleisteten Dienste ab, um das Ziel für den Planungszeitraum zu erhalten
|
||||
for eltern in self.eltern:
|
||||
ziel_dienste[eltern][dienst] -= self.vorherige_dienste[eltern][dienst]
|
||||
# Berechne vorherige Dienste on-the-fly aus historischen Diensten
|
||||
vorherige_anzahl = sum(
|
||||
1 for _, hist_eltern, hist_dienst in self.historische_dienste
|
||||
if hist_eltern == eltern and hist_dienst == dienst
|
||||
)
|
||||
ziel_dienste[eltern][dienst] -= vorherige_anzahl
|
||||
|
||||
return ziel_dienste
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user