diff --git a/Tasks/AddressCreation.cs b/Tasks/AddressCreation.cs index e1f3105..47e33e3 100644 --- a/Tasks/AddressCreation.cs +++ b/Tasks/AddressCreation.cs @@ -43,177 +43,195 @@ public static class AddressCreator public static string? CreateFinalMarkdownString(int id) { // 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) + try { - var temp = set.KasPersons.FirstOrDefault(obj => obj.id == id); - 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; try to map via Global countries alternatives -> translation - var trimmedLand = (address.land ?? "").Trim(); - var trimmedLowerLand = trimmedLand.ToLower(); - var isGermany = trimmedLowerLand == "germany" || trimmedLowerLand == "ger" || - trimmedLowerLand == "" || trimmedLowerLand == "de" || - trimmedLowerLand == "deutschland"; - - if (!isGermany) - { - var countryToShow = trimmedLand; // default: use raw land value - - if (!string.IsNullOrEmpty(trimmedLand)) - // search for matching country via alternatives using for-loops - for (var ci = 0; ci < Global._instance.countries.Count; ci++) - { - var country = Global._instance.countries[ci]; - for (var ai = 0; ai < country.alternatives.Count; ai++) - try + // 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.id == id); + if (temp != null) { - var alt = (country.alternatives[ai] ?? "").Trim(); - if (string.Equals(alt, trimmedLand, StringComparison.OrdinalIgnoreCase)) + 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; try to map via Global countries alternatives -> translation + var trimmedLand = (address.land ?? "").Trim(); + var trimmedLowerLand = trimmedLand.ToLower(); + var isGermany = trimmedLowerLand == "germany" || trimmedLowerLand == "ger" || + trimmedLowerLand == "" || trimmedLowerLand == "de" || + trimmedLowerLand == "deutschland"; + + if (!isGermany) + { + var countryToShow = trimmedLand; // default: use raw land value + + if (!string.IsNullOrEmpty(trimmedLand)) + // search for matching country via alternatives using for-loops + for (var ci = 0; ci < Global._instance.countries.Count; ci++) { - countryToShow = string.IsNullOrWhiteSpace(country.translation) - ? country.name - : country.translation; - goto CountryFound; + var country = Global._instance.countries[ci]; + for (var ai = 0; ai < country.alternatives.Count; ai++) + try + { + var alt = (country.alternatives[ai] ?? "").Trim(); + if (string.Equals(alt, trimmedLand, StringComparison.OrdinalIgnoreCase)) + { + countryToShow = string.IsNullOrWhiteSpace(country.translation) + ? country.name + : country.translation; + goto CountryFound; + } + } + catch + { + // ignore malformed alternative + } } - } - catch + + CountryFound: + string_address = "**" + countryToShow + "**"; // 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)) { - // ignore malformed alternative + string_address = "Postfach " + address.postfach.Trim() + "\n" + string_address; + address_line_count++; } - } - - CountryFound: - string_address = "**" + countryToShow + "**"; // Needs to be bold - 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 + "\n" + 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 + "\n" + 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? + + if (address_line_count > 1) return string_address; + return null; + } + catch (Exception ex) + { + Logger.Log($"Error while creating markdown string: {ex.Message}", Logger.LogType.Error); } - // 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 = "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 + "\n" + 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 + "\n" + 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? - - if (address_line_count > 1) return string_address; return null; } public static string CreateNameLine(string anredezus, string anrede, string titel, string vorname, string adel, string name, string namezus) { - if (!string.IsNullOrWhiteSpace(anredezus)) + try + { + if (!string.IsNullOrWhiteSpace(anredezus)) + return string.Join(" ", + new[] { anredezus, titel, vorname, adel, name } + .Where(s => !string.IsNullOrWhiteSpace(s)) + ) + + (string.IsNullOrWhiteSpace(namezus) ? "" : $" ({namezus.Trim()})"); + + // else return string.Join(" ", - new[] { anredezus, titel, vorname, adel, name } + new[] { anrede, titel, vorname, adel, name } .Where(s => !string.IsNullOrWhiteSpace(s)) ) + (string.IsNullOrWhiteSpace(namezus) ? "" : $" ({namezus.Trim()})"); + } + catch (Exception ex) + { + Logger.Log($"Error while performing address name line creation: {ex.Message}", Logger.LogType.Error); + } - // else - return string.Join(" ", - new[] { anrede, titel, vorname, adel, name } - .Where(s => !string.IsNullOrWhiteSpace(s)) - ) - + (string.IsNullOrWhiteSpace(namezus) ? "" : $" ({namezus.Trim()})"); + return null; + } /// @@ -224,29 +242,39 @@ public static class AddressCreator /// true or faslse, depending on result :+1: public static bool CheckPLZ(string plz, string land) { - if (string.IsNullOrWhiteSpace(plz)) return false; + try + { + 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; + } + catch (Exception ex) + { + Logger.Log($"Error while performing address plz check: {ex.Message}", Logger.LogType.Error); + } - 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; + return false; + } } \ No newline at end of file