Add output filename generation and workbook save flow

This commit is contained in:
Rob committed 2026-04-21 15:37:39 +02:00
1 parent 10e3ec8c12
commit 5436315952
2 files changed
+58 -5

No files matched your search

+5 -5
View File
@@ -71,10 +71,10 @@ Projekt vollstaendig umsetzen: aus PS_PW.xlsx und Stellenbeschreibungen.xlsx mon
- [x] Template-Workbook laden - [x] Template-Workbook laden
- [x] Sheet pro aktiver Zuordnung klonen - [x] Sheet pro aktiver Zuordnung klonen
- [x] Inhalte assignment-spezifisch in Zielzellen schreiben - [x] Inhalte assignment-spezifisch in Zielzellen schreiben
- [ ] T12: Dateinamen und Speichern - [x] T12: Dateinamen und Speichern
- [ ] Muster: `Taetigkeitsnachweis_YYYY_MM_Vorname_Nachname.xlsx` - [x] Muster: `Taetigkeitsnachweis_YYYY_MM_Vorname_Nachname.xlsx`
- [ ] Pro Mitarbeiter genau eine Datei pro Monat erzeugen - [x] Pro Mitarbeiter genau eine Datei pro Monat erzeugen
- [ ] Bei mehreren Zuordnungen: mehrere Sheets in derselben Datei - [x] Bei mehreren Zuordnungen: mehrere Sheets in derselben Datei
## Phase 7 - CLI und Benutzerfluss ## Phase 7 - CLI und Benutzerfluss
- [ ] T13: CLI in `generate.py` implementieren - [ ] T13: CLI in `generate.py` implementieren
@@ -111,4 +111,4 @@ Projekt vollstaendig umsetzen: aus PS_PW.xlsx und Stellenbeschreibungen.xlsx mon
8. T15 -> T16 -> T17 8. T15 -> T16 -> T17
## Aktueller Startpunkt ## Aktueller Startpunkt
- [ ] Naechste aktive Aufgabe: T12 (Dateinamen und Speichern) - [ ] Naechste aktive Aufgabe: T13 (CLI in generate.py implementieren)
+53
View File
@@ -94,3 +94,56 @@ def build_employee_workbooks(
workbooks[employee_name] = workbook workbooks[employee_name] = workbook
return workbooks return workbooks
def build_output_filename(
filename_pattern: str,
employee_name: str,
report_year: int,
report_month: int,
) -> str:
first_name, last_name = _split_name_for_filename(employee_name)
safe_first = first_name.replace(" ", "_")
safe_last = last_name.replace(" ", "_")
return filename_pattern.format(
year=report_year,
month=f"{report_month:02d}",
first_name=safe_first,
last_name=safe_last,
)
def save_employee_workbooks(
config: dict[str, Any],
employee_workbooks: dict[str, Workbook],
report_month: int,
report_year: int,
project_root: Path,
) -> list[Path]:
paths_cfg = config["paths"]
output_cfg = config["output"]
filename_pattern = output_cfg["filename_pattern"]
output_dir = project_root / paths_cfg["output_dir"]
output_dir.mkdir(parents=True, exist_ok=True)
saved_paths: list[Path] = []
used_names: set[str] = set()
for employee_name, workbook in employee_workbooks.items():
filename = build_output_filename(
filename_pattern=filename_pattern,
employee_name=employee_name,
report_year=report_year,
report_month=report_month,
)
if filename in used_names:
raise ValueError(f"Output filename collision detected: {filename}")
used_names.add(filename)
output_path = output_dir / filename
workbook.save(output_path)
workbook.close()
saved_paths.append(output_path)
return saved_paths