diff --git a/Tasks/AddressCreation.cs b/Tasks/AddressCreation.cs
new file mode 100644
index 0000000..56b9426
--- /dev/null
+++ b/Tasks/AddressCreation.cs
@@ -0,0 +1,208 @@
+using System;
+using System.Linq;
+using System.Runtime.InteropServices.JavaScript;
+
+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 = new KasPerson();
+ string string_address = "";
+ int address_line_count = 0;
+ foreach (var set in Settings._instance.addressSets.addresses)
+ {
+ var temp = set.KasPersons.FirstOrDefault(obj => obj.refsid == refsid);
+ if (temp != null) 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 = new KasPerson();
+ string string_address = "";
+ int address_line_count = 0;
+ foreach (var set in Settings._instance.addressSets.addresses)
+ {
+ var temp = set.KasPersons.FirstOrDefault(obj => obj.refsid == refsid);
+ if (temp != null) 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 = "**" + 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 + "\n" + string_address;
+ address_line_count++;
+ if (!string.IsNullOrWhiteSpace(address.postfach))
+ {
+ string_address = address.postfach.Trim() + "\n" + string_address;
+ address_line_count++;
+ }
+ else
+ {
+ string_address = address.strasse.Trim() + "\n" + string_address;
+ address_line_count++;
+ }
+
+ if (!string.IsNullOrWhiteSpace(address.anredzus))
+ {
+ string_address = address.anredzus.Trim() + " " + address.titel.Trim()+ " " + address.vorname.Trim()+ " " + address.adel.Trim() + " " + address.name.Trim()+ " (" + address.namezus.Trim() + ")\n" + string_address;
+ address_line_count++;
+ }
+ else
+ {
+ string_address = address.anrede.Trim() + " " + address.titel.Trim()+ " " + address.vorname.Trim()+ " " + address.adel.Trim() + " " + address.name.Trim()+ " (" + address.namezus.Trim() + ")\n" + string_address;
+ address_line_count++;
+ }
+
+ string[] nameattribs = new[] { address.name1, address.name2, address.name3, address.name4, address.name5 };
+
+ for (int i = 0; i < nameattribs.Length-1; i++)
+ {
+ if (address_line_count < 7)
+ {
+ if (!string.IsNullOrWhiteSpace(nameattribs[i]))
+ {
+ string_address += nameattribs[i] + "\n" + string_address;
+ address_line_count++;
+ }
+ }
+ else break;
+ }
+ } // Alternative B: plz valid and city existing
+ else if (!string.IsNullOrEmpty(address.ort) && CheckPLZ(address.plz, address.land))
+ {
+
+ }
+ else // Error-Handling?
+ {
+
+ }
+
+ return string_address;
+ return "Hier könnte eine\nAdresse stehen";
+ }
+
+ ///
+ /// 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 (plz == null) return false;
+ if (land.ToLower().Trim() != "germany" && land.ToLower().Trim() != "ger" && land.ToLower().Trim() != "" && land.ToLower().Trim() != "de" && land.ToLower().Trim() != "deutschland")
+ {
+ // if country is not germany... how should we check for a valid plz?
+
+ // temporarily accept all of them
+ return true;
+ }
+
+ try
+ {
+ int iplz = Convert.ToInt32(plz);
+ if (iplz > 999999 || iplz < 10000)
+ {
+ return false;
+ }
+ return true;
+
+ } catch
+ {
+ return false;
+ }
+
+ }
+}
\ No newline at end of file