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