[chore:] added address patch

This commit is contained in:
Elias Fierke
2025-10-03 16:36:22 +02:00
parent afc3a78358
commit bb65df9ea2
5 changed files with 541 additions and 49 deletions

View File

@@ -5,8 +5,10 @@ namespace Logof_Client;
public class DataImport
{
public static (bool, KasAddressList) ImportKasAddressList(Uri pathToCsv, char separator = ',')
public static (bool, KasAddressList) ImportKasAddressList(Uri pathToCsv, AddressPatch patch = null,
char separator = ',')
{
// Prüfen, ob die Datei existiert
if (!File.Exists(pathToCsv.LocalPath))
{
Console.WriteLine($"File not found: {pathToCsv}");
@@ -14,6 +16,8 @@ public class DataImport
}
using var reader = new StreamReader(pathToCsv.LocalPath);
// Erste Zeile: CSV-Header lesen
var headerLine = reader.ReadLine();
if (headerLine == null)
{
@@ -21,7 +25,12 @@ public class DataImport
return (false, null);
}
var imported = new KasAddressList();
var headers = headerLine.Split(separator); // Header in Spaltennamen aufteilen (z. B. name, vorname, ort, ...)
// Neue Adressliste anlegen
var imported = new KasAddressList(Path.GetFileNameWithoutExtension(pathToCsv.LocalPath));
// Zeilenweise durchgehen
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
@@ -30,46 +39,67 @@ public class DataImport
var parts = line.Split(separator);
if (parts.Length < 24)
{
Console.WriteLine($"No enough columns in line: {line}");
continue;
}
// Werte-Array vorbereiten immer 24 Felder für KasPerson
var values = new string[24];
for (var i = 0; i < 24; i++)
if (i < parts.Length)
values[i] = parts[i];
else
values[i] = ""; // fehlende Spalten leer lassen
// Patch anwenden (falls vorhanden)
if (patch != null)
for (var i = 0; i < headers.Length; i++)
{
var header = headers[i].Trim(); // z. B. "name", "vorname", "ort"
// Das zugehörige Patch-Feld heißt z. B. "name_is"
var patchProperty = typeof(AddressPatch).GetProperty(header + "_is");
var hasProperty = typeof(AddressPatch).GetProperty("has_" + header);
if (patchProperty != null && hasProperty != null)
// Prüfen, ob das Patch-Feld aktiv ist
if ((bool)hasProperty.GetValue(patch))
// Dann den Wert aus dem Patch übernehmen
values[i] = (string)patchProperty.GetValue(patch);
}
try
{
// KasPerson erstellen Reihenfolge der Werte muss mit dem Konstruktor übereinstimmen
var person = new KasPerson(
ParseInt(parts[0]),
parts[1],
parts[2],
parts[3],
parts[4],
parts[5],
parts[6],
parts[7],
parts[8],
parts[9],
ParseInt(parts[10]),
parts[11],
parts[12],
ParseInt(parts[13]),
parts[14],
parts[15],
parts[16],
parts[17],
parts[18],
parts[19],
parts[20],
parts[21],
parts[22],
parts[23]
ParseInt(values[0]),
values[1],
values[2],
values[3],
values[4],
values[5],
values[6],
values[7],
values[8],
values[9],
ParseInt(values[10]),
values[11],
values[12],
ParseInt(values[13]),
values[14],
values[15],
values[16],
values[17],
values[18],
values[19],
values[20],
values[21],
values[22],
values[23]
);
imported.KasPersons.Add(person);
}
catch (Exception ex)
{
Console.WriteLine($"Error while parsing line: {line} - {ex.Message}");
Console.WriteLine($"{ex.StackTrace}");
Console.WriteLine(ex.StackTrace);
return (false, null);
}
}
@@ -77,6 +107,7 @@ public class DataImport
return (true, imported);
}
private static int ParseInt(string input)
{
return int.TryParse(input, out var result) ? result : 0;