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