diff --git a/Tasks/AddressCreation.cs b/Tasks/AddressCreation.cs index 56b9426..64c2fb1 100644 --- a/Tasks/AddressCreation.cs +++ b/Tasks/AddressCreation.cs @@ -1,24 +1,23 @@ 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. + /// 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 + /// 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; + var address = new KasPerson(); + 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); @@ -26,34 +25,32 @@ public static class AddressCreator } // no address found - if (address == null) - { - return null; - } - + 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"; + 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 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 @@ -83,20 +80,20 @@ public static class AddressCreator // 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. + /// 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 + /// 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; + var address = new KasPerson(); + 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); @@ -104,20 +101,19 @@ public static class AddressCreator } // no address found - if (address == null) - { - return null; - } - + 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") + 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)) { @@ -134,21 +130,19 @@ public static class AddressCreator address_line_count++; } - if (!string.IsNullOrWhiteSpace(address.anredzus)) + var nameline = CreateNameLine(address.anredzus, address.anrede, address.titel, address.vorname, + address.adel, address.name, address.namezus); + + if (string.IsNullOrWhiteSpace(nameline)) { - 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; + string_address = nameline + string_address; address_line_count++; } - string[] nameattribs = new[] { address.name1, address.name2, address.name3, address.name4, address.name5 }; + var nameattribs = new[] + { address.name1, address.name2, address.name3, address.name4, address.name5, address.abteilung }; - for (int i = 0; i < nameattribs.Length-1; i++) - { + for (var i = 0; i < nameattribs.Length - 1; i++) if (address_line_count < 7) { if (!string.IsNullOrWhiteSpace(nameattribs[i])) @@ -157,52 +151,100 @@ public static class AddressCreator address_line_count++; } } - else break; - } + else + { + break; + } } // Alternative B: plz valid and city existing else if (!string.IsNullOrEmpty(address.ort) && CheckPLZ(address.plz, address.land)) { - - } - else // Error-Handling? - { - - } - + 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 + { + string_address = 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 }; + + for (var 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; + } + } // 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 + /// 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 + if (string.IsNullOrWhiteSpace(plz)) return false; + + // For non-german countries, accept any non-empty postal code + if (land.ToLower().Trim() != "germany" && land.ToLower().Trim() != "ger" && land.ToLower().Trim() != "" && + land.ToLower().Trim() != "de" && land.ToLower().Trim() != "deutschland") return true; - } - try + // For Germany, check if it's a valid numeric postal code (5 digits) + if (int.TryParse(plz, out var iplz)) { - int iplz = Convert.ToInt32(plz); - if (iplz > 999999 || iplz < 10000) - { - return false; - } + if (iplz > 99999 || iplz < 10000) return false; return true; - - } catch - { - return false; } + // If it can't be parsed as int, it's not a valid German postal code + return false; } } \ No newline at end of file