deepseek den plan umsetzen lassen

This commit is contained in:
trnq1ll0 committed 2026-06-09 08:33:47 +02:00
1 parent 6c60a72e0f
commit 044e4df783
16 files changed
+971 -55

No files matched your search

+83
View File
@@ -0,0 +1,83 @@
"""Tätigkeitsnachweis-Generator – Konfigurations-Loader."""
import configparser
import json
import fnmatch
from pathlib import Path
from typing import Optional
from .models import AppConfig, FieldSchema, OutputMapping
def load_settings(config_dir: Path, project_root: Path) -> AppConfig:
"""Lädt settings.ini und gibt ein AppConfig-Objekt zurück."""
ini_path = config_dir / "settings.ini"
if not ini_path.exists():
raise FileNotFoundError(f"settings.ini nicht gefunden: {ini_path}")
parser = configparser.ConfigParser()
parser.read(ini_path, encoding="utf-8")
paths = parser["paths"] if "paths" in parser else {}
output = parser["output"] if "output" in parser else {}
parsing = parser["parsing"] if "parsing" in parser else {}
return AppConfig(
input_dir=str(project_root / paths.get("input_dir", "input")),
template_dir=str(project_root / paths.get("template_dir", "template")),
output_dir=str(project_root / paths.get("output_dir", "output")),
filename_pattern=output.get("filename_pattern", "{last_name}_{first_name}_Tätigkeitsnachweis.xlsx"),
month_sheet_pattern=parsing.get("month_sheet_pattern", "* 20??"),
skip_empty_name=parsing.getboolean("skip_empty_name", True),
skip_empty_antragsnummer=parsing.getboolean("skip_empty_antragsnummer", True),
)
def load_input_schema(config_dir: Path) -> list[FieldSchema]:
"""Lädt input-fields.json."""
schema_path = config_dir / "input-fields.json"
if not schema_path.exists():
raise FileNotFoundError(f"input-fields.json nicht gefunden: {schema_path}")
with open(schema_path, "r", encoding="utf-8") as f:
data = json.load(f)
return [FieldSchema(**item) for item in data]
def load_output_mapping(config_dir: Path) -> list[OutputMapping]:
"""Lädt output-fields.json."""
mapping_path = config_dir / "output-fields.json"
if not mapping_path.exists():
raise FileNotFoundError(f"output-fields.json nicht gefunden: {mapping_path}")
with open(mapping_path, "r", encoding="utf-8") as f:
data = json.load(f)
return [OutputMapping(**item) for item in data]
def get_available_files(directory: Path, extension: str = ".xlsx") -> list[str]:
"""Listet alle Dateien mit der angegebenen Erweiterung im Verzeichnis auf."""
if not directory.exists():
return []
files = sorted(
f.name for f in directory.iterdir()
if f.is_file() and f.suffix.lower() == extension and not f.name.startswith("~")
)
return files
def get_available_input_files(config: AppConfig) -> list[str]:
"""Listet alle .xlsx-Dateien im input-Ordner."""
return get_available_files(Path(config.input_dir))
def get_available_templates(config: AppConfig) -> list[str]:
"""Listet alle .xlsx-Dateien im template-Ordner."""
return get_available_files(Path(config.template_dir))
def is_month_sheet(sheet_name: str, pattern: str) -> bool:
"""Prüft, ob ein Sheet-Name dem Monatsmuster entspricht."""
return fnmatch.fnmatch(sheet_name.strip(), pattern)