diff --git a/app/stiftung/views.py b/app/stiftung/views.py
index 9918e36..1fa1279 100644
--- a/app/stiftung/views.py
+++ b/app/stiftung/views.py
@@ -480,6 +480,25 @@ def process_destinataere_csv(csv_file, csv_import):
total_rows += 1
try:
+ # Helper function to parse boolean values from CSV
+ def parse_boolean(value, default=False):
+ """Parse boolean values from CSV with multiple accepted formats"""
+ if not value:
+ return default
+ value_str = str(value).strip().lower()
+ # Accept various true values
+ true_values = ['true', 'ja', 'yes', '1', 'wahr', 'x']
+ # Accept various false values
+ false_values = ['false', 'nein', 'no', '0', 'falsch', '']
+
+ if value_str in true_values:
+ return True
+ elif value_str in false_values:
+ return False
+ else:
+ # If unclear, return default
+ return default
+
# Map CSV columns to model fields
destinataer_data = {
"vorname": row.get("Vorname", "").strip(),
@@ -501,12 +520,40 @@ def process_destinataere_csv(csv_file, csv_import):
if row.get("Jährliches_Einkommen")
else None
),
- "finanzielle_notlage": row.get("Finanzielle_Notlage", "false").lower()
- == "true",
"notizen": row.get("Notizen", "").strip() or None,
- "aktiv": row.get("Aktiv", "true").lower() == "true",
+ # Boolean fields with improved parsing
+ "finanzielle_notlage": parse_boolean(row.get("Finanzielle_Notlage"), False),
+ "aktiv": parse_boolean(row.get("Aktiv"), True),
+ "ist_abkoemmling": parse_boolean(row.get("Ist_Abkömmling"), False),
+ "unterstuetzung_bestaetigt": parse_boolean(row.get("Unterstützung_bestätigt"), False),
+ "studiennachweis_erforderlich": parse_boolean(row.get("Studiennachweis_erforderlich"), False),
}
+ # Handle numeric fields
+ if row.get("Haushaltsgröße"):
+ try:
+ destinataer_data["haushaltsgroesse"] = int(row["Haushaltsgröße"])
+ except ValueError:
+ pass
+
+ if row.get("Monatliche_Bezüge"):
+ try:
+ destinataer_data["monatliche_bezuege"] = float(row["Monatliche_Bezüge"])
+ except ValueError:
+ pass
+
+ if row.get("Vermögen"):
+ try:
+ destinataer_data["vermoegen"] = float(row["Vermögen"])
+ except ValueError:
+ pass
+
+ if row.get("Vierteljährlicher_Betrag"):
+ try:
+ destinataer_data["vierteljaehrlicher_betrag"] = float(row["Vierteljährlicher_Betrag"])
+ except ValueError:
+ pass
+
# Handle date fields
if row.get("Geburtsdatum"):
try:
@@ -521,6 +568,19 @@ def process_destinataere_csv(csv_file, csv_import):
except ValueError:
destinataer_data["geburtsdatum"] = None
+ if row.get("Letzter_Studiennachweis"):
+ try:
+ destinataer_data["letzter_studiennachweis"] = datetime.strptime(
+ row["Letzter_Studiennachweis"], "%d.%m.%Y"
+ ).date()
+ except ValueError:
+ try:
+ destinataer_data["letzter_studiennachweis"] = datetime.strptime(
+ row["Letzter_Studiennachweis"], "%Y-%m-%d"
+ ).date()
+ except ValueError:
+ destinataer_data["letzter_studiennachweis"] = None
+
# Validate required fields
if not destinataer_data["vorname"] or not destinataer_data["nachname"]:
error_log.append(
diff --git a/app/templates/base.html b/app/templates/base.html
index 6fa6fce..b15713c 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -443,8 +443,8 @@
© 2025 van Hees-Theyssen-Vogel'sche Stiftung. Alle Rechte vorbehalten.
- v2.1.3 - Verpachtungsmanagement • Sept 2025
- 🦌 Stabil
+ v2.1.4 - Enhanced Destinataer Management • Sept 2025
+ 🚀 Enhanced