diff --git a/csv_io.py b/csv_io.py index 23d0c0a..7fbb338 100644 --- a/csv_io.py +++ b/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: diff --git a/elterndienstplaner.py b/elterndienstplaner.py index 132c179..2ca2bfa 100755 --- a/elterndienstplaner.py +++ b/elterndienstplaner.py @@ -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