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:
@@ -480,6 +480,25 @@ def process_destinataere_csv(csv_file, csv_import):
|
|||||||
total_rows += 1
|
total_rows += 1
|
||||||
|
|
||||||
try:
|
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
|
# Map CSV columns to model fields
|
||||||
destinataer_data = {
|
destinataer_data = {
|
||||||
"vorname": row.get("Vorname", "").strip(),
|
"vorname": row.get("Vorname", "").strip(),
|
||||||
@@ -501,12 +520,40 @@ def process_destinataere_csv(csv_file, csv_import):
|
|||||||
if row.get("Jährliches_Einkommen")
|
if row.get("Jährliches_Einkommen")
|
||||||
else None
|
else None
|
||||||
),
|
),
|
||||||
"finanzielle_notlage": row.get("Finanzielle_Notlage", "false").lower()
|
|
||||||
== "true",
|
|
||||||
"notizen": row.get("Notizen", "").strip() or None,
|
"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
|
# Handle date fields
|
||||||
if row.get("Geburtsdatum"):
|
if row.get("Geburtsdatum"):
|
||||||
try:
|
try:
|
||||||
@@ -521,6 +568,19 @@ def process_destinataere_csv(csv_file, csv_import):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
destinataer_data["geburtsdatum"] = None
|
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
|
# Validate required fields
|
||||||
if not destinataer_data["vorname"] or not destinataer_data["nachname"]:
|
if not destinataer_data["vorname"] or not destinataer_data["nachname"]:
|
||||||
error_log.append(
|
error_log.append(
|
||||||
|
|||||||
@@ -443,8 +443,8 @@
|
|||||||
<span>© 2025 van Hees-Theyssen-Vogel'sche Stiftung. Alle Rechte vorbehalten.</span>
|
<span>© 2025 van Hees-Theyssen-Vogel'sche Stiftung. Alle Rechte vorbehalten.</span>
|
||||||
<br>
|
<br>
|
||||||
<small class="text-muted">
|
<small class="text-muted">
|
||||||
<i class="fas fa-leaf text-success"></i> v2.1.3 - Verpachtungsmanagement • Sept 2025
|
<i class="fas fa-leaf text-success"></i> v2.1.4 - Enhanced Destinataer Management • Sept 2025
|
||||||
<span class="badge badge-primary ml-2">🦌 Stabil</span>
|
<span class="badge badge-primary ml-2">🚀 Enhanced</span>
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user