[init:] AddressCreator with first string address alternative
This commit is contained in:
208
Tasks/AddressCreation.cs
Normal file
208
Tasks/AddressCreation.cs
Normal file
@@ -0,0 +1,208 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices.JavaScript;
|
||||
|
||||
namespace Logof_Client;
|
||||
|
||||
public static class AddressCreator
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates max-seven-lines-long markdown address-string. Analyzes the KasPerson-Instance to find the best result.
|
||||
/// </summary>
|
||||
/// <param name="refsid">KasPerson-ID</param>
|
||||
/// <returns>A markdown string with the address that is maximum seven lines long</returns>
|
||||
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.
|
||||
|
||||
/// <summary>
|
||||
/// Creates max-seven-lines-long markdown address-string. Analyzes the KasPerson-Instance to find the best result.
|
||||
/// </summary>
|
||||
/// <param name="refsid">KasPerson-ID</param>
|
||||
/// <returns>A markdown string with the address that is maximum seven lines long</returns>
|
||||
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";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if a plz (or pplz) is valid
|
||||
/// </summary>
|
||||
/// <param name="plz">the plz itself</param>
|
||||
/// <param name="land">country, to check the plz</param>
|
||||
/// <returns>true or faslse, depending on result :+1:</returns>
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user