[feat:] initial fully implemented address creation
This commit is contained in:
@@ -1,24 +1,23 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.InteropServices.JavaScript;
|
|
||||||
|
|
||||||
namespace Logof_Client;
|
namespace Logof_Client;
|
||||||
|
|
||||||
public static class AddressCreator
|
public static class AddressCreator
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 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.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="refsid">KasPerson-ID</param>
|
/// <param name="refsid">KasPerson-ID</param>
|
||||||
/// <returns>A markdown string with the address that is maximum seven lines long</returns>
|
/// <returns>A Markdown string with the address that is maximum seven lines long</returns>
|
||||||
public static string? CreateFinalMarkdownString2(int refsid)
|
public static string? CreateFinalMarkdownString2(int refsid)
|
||||||
{
|
{
|
||||||
// Maximum seven lines of information
|
// Maximum seven lines of information
|
||||||
|
|
||||||
// find the address
|
// find the address
|
||||||
KasPerson address = new KasPerson();
|
var address = new KasPerson();
|
||||||
string string_address = "";
|
var string_address = "";
|
||||||
int address_line_count = 0;
|
var address_line_count = 0;
|
||||||
foreach (var set in Settings._instance.addressSets.addresses)
|
foreach (var set in Settings._instance.addressSets.addresses)
|
||||||
{
|
{
|
||||||
var temp = set.KasPersons.FirstOrDefault(obj => obj.refsid == refsid);
|
var temp = set.KasPersons.FirstOrDefault(obj => obj.refsid == refsid);
|
||||||
@@ -26,34 +25,32 @@ public static class AddressCreator
|
|||||||
}
|
}
|
||||||
|
|
||||||
// no address found
|
// no address found
|
||||||
if (address == null)
|
if (address == null) return null;
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// let's get started: the name (and anrede), block-line-count: 1
|
// let's get started: the name (and anrede), block-line-count: 1
|
||||||
if (!string.IsNullOrEmpty(address.anrede))
|
if (!string.IsNullOrEmpty(address.anrede))
|
||||||
{
|
{
|
||||||
if(address.anrede == "Herr") string_address += "Herrn";
|
if (address.anrede == "Herr") string_address += "Herrn";
|
||||||
else string_address += address.anrede;
|
else string_address += address.anrede;
|
||||||
address_line_count++;
|
address_line_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(address.name) && !string.IsNullOrEmpty(address.vorname))
|
if (!string.IsNullOrEmpty(address.name) && !string.IsNullOrEmpty(address.vorname))
|
||||||
{
|
{
|
||||||
string_address += " " + address.vorname + " " + address.name;
|
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!
|
else // Anrede but no name? to the trash!
|
||||||
{
|
{
|
||||||
string_address = "";
|
string_address = "";
|
||||||
address_line_count = 0;
|
address_line_count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "Hier könnte eine\nAdresse stehen";
|
return "Hier könnte eine\nAdresse stehen";
|
||||||
}
|
}
|
||||||
|
|
||||||
//+++ Aufbau +++
|
//+++ Aufbau +++
|
||||||
//
|
//
|
||||||
// Von unten anfangen, max. 7 Zeilen
|
// Von unten anfangen, max. 7 Zeilen
|
||||||
@@ -83,20 +80,20 @@ public static class AddressCreator
|
|||||||
// Auswurf PDF mit normalen Absender
|
// Auswurf PDF mit normalen Absender
|
||||||
//
|
//
|
||||||
// Auswurf PDF mit PvSt.
|
// Auswurf PDF mit PvSt.
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 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.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="refsid">KasPerson-ID</param>
|
/// <param name="refsid">KasPerson-ID</param>
|
||||||
/// <returns>A markdown string with the address that is maximum seven lines long</returns>
|
/// <returns>A Markdown string with the address that is maximum seven lines long</returns>
|
||||||
public static string? CreateFinalMarkdownString(int refsid)
|
public static string? CreateFinalMarkdownString(int refsid)
|
||||||
{
|
{
|
||||||
// Maximum seven lines of information
|
// Maximum seven lines of information
|
||||||
|
|
||||||
// find the address
|
// find the address
|
||||||
KasPerson address = new KasPerson();
|
var address = new KasPerson();
|
||||||
string string_address = "";
|
var string_address = "";
|
||||||
int address_line_count = 0;
|
var address_line_count = 0;
|
||||||
foreach (var set in Settings._instance.addressSets.addresses)
|
foreach (var set in Settings._instance.addressSets.addresses)
|
||||||
{
|
{
|
||||||
var temp = set.KasPersons.FirstOrDefault(obj => obj.refsid == refsid);
|
var temp = set.KasPersons.FirstOrDefault(obj => obj.refsid == refsid);
|
||||||
@@ -104,20 +101,19 @@ public static class AddressCreator
|
|||||||
}
|
}
|
||||||
|
|
||||||
// no address found
|
// no address found
|
||||||
if (address == null)
|
if (address == null) return null;
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// let's get started: we start from the bottom
|
// let's get started: we start from the bottom
|
||||||
// if the country is not germany, set it
|
// if the country is not germany, set it
|
||||||
// LAND: GER oder DE
|
// 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
|
string_address = "**" + address.land.Trim() + "**"; // Needs to be bold
|
||||||
address_line_count++;
|
address_line_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Alternative A: pplz valid and city existing
|
// Alternative A: pplz valid and city existing
|
||||||
if (!string.IsNullOrEmpty(address.ort) && CheckPLZ(address.pplz, address.land))
|
if (!string.IsNullOrEmpty(address.ort) && CheckPLZ(address.pplz, address.land))
|
||||||
{
|
{
|
||||||
@@ -134,21 +130,19 @@ public static class AddressCreator
|
|||||||
address_line_count++;
|
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;
|
string_address = nameline + 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++;
|
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 (address_line_count < 7)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrWhiteSpace(nameattribs[i]))
|
if (!string.IsNullOrWhiteSpace(nameattribs[i]))
|
||||||
@@ -157,52 +151,100 @@ public static class AddressCreator
|
|||||||
address_line_count++;
|
address_line_count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else break;
|
else
|
||||||
}
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
} // Alternative B: plz valid and city existing
|
} // Alternative B: plz valid and city existing
|
||||||
else if (!string.IsNullOrEmpty(address.ort) && CheckPLZ(address.plz, address.land))
|
else if (!string.IsNullOrEmpty(address.ort) && CheckPLZ(address.plz, address.land))
|
||||||
{
|
{
|
||||||
|
string_address = address.plz + " " + address.ort + "\n" + string_address;
|
||||||
}
|
address_line_count++;
|
||||||
else // Error-Handling?
|
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 string_address;
|
||||||
return "Hier könnte eine\nAdresse stehen";
|
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";
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns true if a plz (or pplz) is valid
|
/// Returns true if a plz (or pplz) is valid
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="plz">the plz itself</param>
|
/// <param name="plz">the plz itself</param>
|
||||||
/// <param name="land">country, to check the plz</param>
|
/// <param name="land">country, to check the plz</param>
|
||||||
/// <returns>true or faslse, depending on result :+1:</returns>
|
/// <returns>true or faslse, depending on result :+1:</returns>
|
||||||
public static bool CheckPLZ(string plz, string land)
|
public static bool CheckPLZ(string plz, string land)
|
||||||
{
|
{
|
||||||
if (plz == null) return false;
|
if (string.IsNullOrWhiteSpace(plz)) return false;
|
||||||
if (land.ToLower().Trim() != "germany" && land.ToLower().Trim() != "ger" && land.ToLower().Trim() != "" && land.ToLower().Trim() != "de" && land.ToLower().Trim() != "deutschland")
|
|
||||||
{
|
// For non-german countries, accept any non-empty postal code
|
||||||
// if country is not germany... how should we check for a valid plz?
|
if (land.ToLower().Trim() != "germany" && land.ToLower().Trim() != "ger" && land.ToLower().Trim() != "" &&
|
||||||
|
land.ToLower().Trim() != "de" && land.ToLower().Trim() != "deutschland")
|
||||||
// temporarily accept all of them
|
|
||||||
return true;
|
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 > 99999 || iplz < 10000) return false;
|
||||||
if (iplz > 999999 || iplz < 10000)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
} catch
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If it can't be parsed as int, it's not a valid German postal code
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user