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