add: ColdRun-Mode in dem automatisch ein kompletter Durchlauf stattfindet ohne GUI

This commit is contained in:
trnq1ll0 committed 2026-06-10 21:51:17 +02:00
1 parent 6e541a04df
commit dbe325d305
3 files changed
+152

No files matched your search

+111
View File
@@ -0,0 +1,111 @@
#!/usr/bin/env python3
"""Cold-Run Tätigkeitsnachweis-Generator.
Nimmt automatisch die erste Input-Datei und das erste Template,
erzeugt einen Tätigkeitsnachweis für die erste gelistete Person
und öffnet das Ergebnis (macOS) – ohne GUI, ohne Fragen.
"""
import subprocess
import sys
from pathlib import Path
# Projekt-Root
PROJECT_ROOT = Path(__file__).resolve().parent
sys.path.insert(0, str(PROJECT_ROOT))
from src.config import (
load_settings,
load_input_schema,
load_output_mapping,
get_available_input_files,
get_available_templates,
)
from src.parser import parse_input_file, group_by_employee, get_unique_employees
from src.writer import generate_activity_reports
def main():
print("=" * 50)
print(" Tätigkeitsnachweis-Generator (Cold Run)")
print("=" * 50)
print()
# ── Konfiguration laden ──────────────────────────────────────────
config_dir = PROJECT_ROOT / "config"
config = load_settings(config_dir, PROJECT_ROOT)
config.input_schema = load_input_schema(config_dir)
config.output_mapping = load_output_mapping(config_dir)
# ── Erste Input-Datei ermitteln ───────────────────────────────────
input_files = get_available_input_files(config)
if not input_files:
print("[FEHLER] Keine .xlsx-Dateien im input/-Ordner gefunden.")
return 1
input_file = input_files[0]
input_path = Path(config.input_dir) / input_file
print(f"[INFO] Input-Datei: {input_file}")
# ── Erstes Template ermitteln ─────────────────────────────────────
template_files = get_available_templates(config)
if not template_files:
print("[FEHLER] Keine .xlsx-Dateien im template/-Ordner gefunden.")
return 1
template_file = template_files[0]
template_path = Path(config.template_dir) / template_file
print(f"[INFO] Template: {template_file}")
# ── Input parsen ──────────────────────────────────────────────────
print()
print("[INFO] Parse Input-Datei…")
records = parse_input_file(
filepath=input_path,
schema=config.input_schema,
month_sheet_pattern=config.month_sheet_pattern,
skip_empty_name=config.skip_empty_name,
skip_empty_antragsnummer=config.skip_empty_antragsnummer,
)
employees = get_unique_employees(records)
print(f"[INFO] {len(records)} Einträge für {len(employees)} Personen gefunden.")
# ── Erste Person ermitteln ────────────────────────────────────────
grouped = group_by_employee(records)
first_person = sorted(grouped.keys())[0]
first_records = grouped[first_person]
print(f"[INFO] Erste Person: {first_person} ({len(first_records)} Monate)")
# ── Reports generieren ────────────────────────────────────────────
print()
print("[INFO] Generiere Tätigkeitsnachweis…")
single_person = {first_person: first_records}
output_dir = Path(config.output_dir)
generated = generate_activity_reports(
employee_records=single_person,
template_path=template_path,
mapping=config.output_mapping,
output_dir=output_dir,
filename_pattern=config.filename_pattern,
)
output_file = generated[0]
print(f"[OK] Erstellt: {output_file.name}")
print(f" Pfad: {output_file}")
# ── Datei öffnen (macOS) ──────────────────────────────────────────
if sys.platform == "darwin":
print()
print("[INFO] Öffne Datei im Finder…")
subprocess.run(["open", str(output_file)], check=False)
print()
print("=" * 50)
print(" Fertig.")
print("=" * 50)
return 0
if __name__ == "__main__":
sys.exit(main())