Update footer version to v2.1.4 - Enhanced Destinataer Management

- Bump version from v2.1.3 to v2.1.4
- Update status badge from 'Stabil' to 'Enhanced'
- Reflect recent improvements to Destinataer inline editing and CSV import
This commit is contained in:
Stiftung Development
2025-09-21 20:12:32 +02:00
parent 8854fc2619
commit 15c798a97b
2 changed files with 65 additions and 5 deletions

View File

@@ -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(