using System;
using System.Linq;
namespace Logof_Client;
public static class AddressCreator
{
///
/// Creates max-seven-lines-long Markdown address-string. Analyzes the KasPerson-Instance to find the best result.
///
/// KasPerson-ID
/// A Markdown string with the address that is maximum seven lines long
public static string? CreateFinalMarkdownString2(int refsid)
{
// Maximum seven lines of information
// find the address
KasPerson? address = null;
var string_address = "";
var address_line_count = 0;
foreach (var set in Settings._instance.addressSets.addresses)
{
var temp = set.KasPersons.FirstOrDefault(obj => obj.refsid == refsid);
if (temp != null)
{
address = temp;
break;
}
}
// no address found
if (address == null) return null;
// let's get started: the name (and anrede), block-line-count: 1
if (!string.IsNullOrEmpty(address.anrede))
{
if (address.anrede == "Herr") string_address += "Herrn";
else string_address += address.anrede;
address_line_count++;
}
if (!string.IsNullOrEmpty(address.name) && !string.IsNullOrEmpty(address.vorname))
{
string_address += " " + address.vorname + " " + address.name;
}
else if (!string.IsNullOrEmpty(address.name))
{
}
else // Anrede but no name? to the trash!
{
string_address = "";
address_line_count = 0;
}
return "Hier könnte eine\nAdresse stehen";
}
//+++ Aufbau +++
//
// Von unten anfangen, max. 7 Zeilen
//
// + Wenn Land nicht Deutschland Abbildung von Land (Fettgedruckt)
//
// Alternative A (wenn PPLZ + Ort ausgefüllt):
// + Abbildung PPLZ + Ort - Ort ggf. Abschneiden, wenn länger als eine Zeile … das längste was ich finden konnte: „Giugliano in Campania-Lago Patra“ (passt exakt auf eine Zeile)
// + Abbildung Postfach – wenn leer, dann Straße
// + Abbildung Wenn Anredezusatz nicht leer, Anredezusatz, sonst Anrede + Titel + Vorname + Adel + Name + Namenszusatz in Klammern
// + Abbildung Name 1 + Name 2 + Name 3 + Name 4 + Name 5 + Abteilung (insgesamt max. 7 Zeilen)
//
// ansonsten
//
// + Abbildung PLZ + Ort - Ort ggf. Abschneiden, wenn länger als eine Zeile … das längste was ich finden konnte: „Giugliano in Campania-Lago Patra“ (passt exakt auf eine Zeile)
// + Abbildung Straße – wenn Straße leer, dann Postfach
// + Abbildung Wenn Anredezusatz nicht leer, Anredezusatz, sonst Anrede + Titel + Vorname + Adel + Name + Namenszusatz in Klammern
// + Abbildung Name 1 + Name 2 + Name 3 + Name 4 + Name 5 + Abteilung (insgesamt max. 7 Zeilen)
//
// Auswurf Fehler-Datei
//
// + wenn keine PLZ und/oder kein Ort -> Fehler
// + wenn kein Name 1-5 und/oder Name -> Fehler
//
// Auswurf CSV-Datei (Komma/TAB, UTF-8, ISO…)
//
// Auswurf PDF mit normalen Absender
//
// Auswurf PDF mit PvSt.
///
/// Creates max-seven-lines-long Markdown address-string. Analyzes the KasPerson-Instance to find the best result.
///
/// KasPerson-ID
/// A Markdown string with the address that is maximum seven lines long
public static string? CreateFinalMarkdownString(int refsid)
{
// Maximum seven lines of information
// find the address
KasPerson? address = null;
var string_address = "";
var address_line_count = 0;
foreach (var set in Settings._instance.addressSets.addresses)
{
var temp = set.KasPersons.FirstOrDefault(obj => obj.refsid == refsid);
if (temp != null)
{
address = temp;
break;
}
}
// no address found
if (address == null) return null;
// let's get started: we start from the bottom
// if the country is not germany, set it
// LAND: GER oder DE
if (address.land.ToLower().Trim() != "germany" && address.land.ToLower().Trim() != "ger" &&
address.land.ToLower().Trim() != "" && address.land.ToLower().Trim() != "de" &&
address.land.ToLower().Trim() != "deutschland")
{
string_address = "\n**" + address.land.Trim() + "**"; // Needs to be bold
address_line_count++;
}
// Alternative A: pplz valid and city existing
if (!string.IsNullOrEmpty(address.ort) && CheckPLZ(address.pplz, address.land))
{
string_address = address.pplz + " " + address.ort + string_address;
address_line_count++;
if (!string.IsNullOrWhiteSpace(address.postfach))
{
string_address = "Postfach " + address.postfach.Trim() + "\n" + string_address;
address_line_count++;
}
else if (!string.IsNullOrWhiteSpace(address.strasse.Trim()))
{
string_address = address.strasse.Trim() + "\n" + string_address;
address_line_count++;
}
var nameline = CreateNameLine(address.anredzus, address.anrede, address.titel, address.vorname,
address.adel, address.name, address.namezus);
if (!string.IsNullOrWhiteSpace(nameline))
{
string_address = nameline + string_address;
address_line_count++;
}
// REIHENFOLGE
var nameattribs = new[]
{ address.name1, address.name2, address.name3, address.name4, address.name5, address.abteilung };
var names = "";
for (var i = 0; i < nameattribs.Length; i++)
try
{
if (address_line_count >= 7) break;
if (!string.IsNullOrWhiteSpace(nameattribs[i]))
{
names += "\n" + nameattribs[i];
address_line_count++;
}
}
catch
{
Console.WriteLine("ERROR 15821");
}
string_address = names + "\n" + string_address;
} // Alternative B: plz valid and city existing
else if (!string.IsNullOrEmpty(address.ort) && CheckPLZ(address.plz, address.land))
{
string_address = address.plz + " " + address.ort + "\n" + string_address;
address_line_count++;
if (!string.IsNullOrWhiteSpace(address.strasse))
{
string_address = address.strasse.Trim() + "\n" + string_address;
address_line_count++;
}
else if (!string.IsNullOrWhiteSpace(address.postfach.Trim()))
{
string_address = "Postfach " + address.postfach.Trim() + "\n" + string_address;
address_line_count++;
}
var nameline = CreateNameLine(address.anredzus, address.anrede, address.titel, address.vorname,
address.adel, address.name, address.namezus);
if (!string.IsNullOrWhiteSpace(nameline))
{
string_address = nameline + string_address;
address_line_count++;
}
var nameattribs = new[]
{ address.name1, address.name2, address.name3, address.name4, address.name5, address.abteilung };
var names = "";
for (var i = 0; i < nameattribs.Length; i++)
try
{
if (address_line_count >= 7) break;
if (!string.IsNullOrWhiteSpace(nameattribs[i]))
{
names += "\n" + nameattribs[i];
address_line_count++;
}
}
catch
{
Console.WriteLine("ERROR 15821");
}
string_address = names + "\n" + string_address;
} // Error-Handling?
return string_address;
return "Hier könnte eine\nAdresse stehen";
}
public static string CreateNameLine(string anredezus, string anrede, string titel, string vorname, string adel,
string name, string namezus)
{
if (!string.IsNullOrWhiteSpace(anredezus))
return string.Join(" ",
new[] { anredezus, titel, vorname, adel, name }
.Where(s => !string.IsNullOrWhiteSpace(s))
)
+ (string.IsNullOrWhiteSpace(namezus) ? "" : $" ({namezus.Trim()})")
+ "\n";
// else
return string.Join(" ",
new[] { anrede, titel, vorname, adel, name }
.Where(s => !string.IsNullOrWhiteSpace(s))
)
+ (string.IsNullOrWhiteSpace(namezus) ? "" : $" ({namezus.Trim()})")
+ "\n";
}
///
/// Returns true if a plz (or pplz) is valid
///
/// the plz itself
/// country, to check the plz
/// true or faslse, depending on result :+1:
public static bool CheckPLZ(string plz, string land)
{
if (string.IsNullOrWhiteSpace(plz)) return false;
var trimmedPlz = plz.Trim();
var trimmedLand = land.ToLower().Trim();
// Check if it's a German country code
var isGermany = trimmedLand == "germany" || trimmedLand == "ger" || trimmedLand == "de" ||
trimmedLand == "deutschland" || trimmedLand == "";
if (isGermany)
// For Germany (including empty land), accept numeric postal codes with 5 digits
try
{
var iplz = Convert.ToInt32(trimmedPlz);
if (trimmedPlz.Length == 5) return true;
return false;
}
catch
{
return false;
}
// For non-German countries, accept any non-empty postal code
return true;
}
}