diff --git a/Tasks/AddressCheck.cs b/Tasks/AddressCheck.cs index 936871b..2133f2e 100644 --- a/Tasks/AddressCheck.cs +++ b/Tasks/AddressCheck.cs @@ -39,227 +39,240 @@ public class AddressCheck public async Task> Perform(int id) { - // Find the index of the address set with the given id - var adset_index = -1; - for (var i = 0; i < Settings._instance.addressSets.addresses.Count; i++) - if (Settings._instance.addressSets.addresses[i].ID == id) - { - adset_index = i; - break; - } - - if (adset_index == -1) return new List(); - - var adset = Settings._instance.addressSets.addresses[adset_index]; - var total = adset.KasPersons.Count; - var current = 0; - - await Task.Run(async () => + try { - foreach (var person in adset.KasPersons) + // Find the index of the address set with the given id + var adset_index = -1; + for (var i = 0; i < Settings._instance.addressSets.addresses.Count; i++) + if (Settings._instance.addressSets.addresses[i].ID == id) + { + adset_index = i; + break; + } + + if (adset_index == -1) return new List(); + + var adset = Settings._instance.addressSets.addresses[adset_index]; + var total = adset.KasPersons.Count; + var current = 0; + + await Task.Run(async () => { - var errors = new List(); - var warnings = new List(); - var hasFaults = false; - - var address_component_count = 2; // cause anrede and name are first - - // PLZ-Prüfung - if (person.plz == "" || person.plz == null) + foreach (var person in adset.KasPersons) { - hasFaults = true; - warnings.Add(WarningTypes.NoPLZ); - } - else - { - if (!AddressCreator.CheckPLZ(person.plz, person.land)) + var errors = new List(); + var warnings = new List(); + var hasFaults = false; + + var address_component_count = 2; // cause anrede and name are first + + // PLZ-Prüfung + if (person.plz == "" || person.plz == null) { hasFaults = true; - errors.Add(ErrorTypes.PlzNotUsable); + warnings.Add(WarningTypes.NoPLZ); + } + else + { + if (!AddressCreator.CheckPLZ(person.plz, person.land)) + { + hasFaults = true; + errors.Add(ErrorTypes.PlzNotUsable); + } + // if ((person.plz < 10000 && string.IsNullOrWhiteSpace(person.land)) || + // (person.plz < 10000 && person.land == "GER") || + // (person.plz < 10000 && person.land == "DE")) + // { + // hasFaults = true; + // errors.Add(ErrorTypes.PlzTooShort); + // } + // else if ((person.plz > 99999 && string.IsNullOrWhiteSpace(person.land)) || + // (person.plz > 99999 && person.land == "GER") || + // (person.plz > 99999 && person.land == "DE")) + // { + // hasFaults = true; + // errors.Add(ErrorTypes.PlzTooLong); + // } } - // if ((person.plz < 10000 && string.IsNullOrWhiteSpace(person.land)) || - // (person.plz < 10000 && person.land == "GER") || - // (person.plz < 10000 && person.land == "DE")) - // { - // hasFaults = true; - // errors.Add(ErrorTypes.PlzTooShort); - // } - // else if ((person.plz > 99999 && string.IsNullOrWhiteSpace(person.land)) || - // (person.plz > 99999 && person.land == "GER") || - // (person.plz > 99999 && person.land == "DE")) - // { - // hasFaults = true; - // errors.Add(ErrorTypes.PlzTooLong); - // } - } - // PPLZ-Prüfung - if (person.pplz == "" || person.pplz == null) - { - hasFaults = true; - warnings.Add(WarningTypes.NoPPLZ); - } - else - { - if (!AddressCreator.CheckPLZ(person.pplz, person.land)) + // PPLZ-Prüfung + if (person.pplz == "" || person.pplz == null) { hasFaults = true; - errors.Add(ErrorTypes.PPlzNotUsable); + warnings.Add(WarningTypes.NoPPLZ); + } + else + { + if (!AddressCreator.CheckPLZ(person.pplz, person.land)) + { + hasFaults = true; + errors.Add(ErrorTypes.PPlzNotUsable); + } + + // if ((person.pplz < 10000 && string.IsNullOrWhiteSpace(person.land)) || + // (person.pplz < 10000 && person.land == "GER") || + // (person.pplz < 10000 && person.land == "DE")) + // { + // hasFaults = true; + // errors.Add(ErrorTypes.PPlzTooShort); + // } + // else if ((person.pplz > 99999 && string.IsNullOrWhiteSpace(person.land)) || + // (person.pplz > 99999 && person.land == "GER") || + // (person.pplz > 99999 && person.land == "DE")) + // { + // hasFaults = true; + // errors.Add(ErrorTypes.PPlzTooLong); + // } } - // if ((person.pplz < 10000 && string.IsNullOrWhiteSpace(person.land)) || - // (person.pplz < 10000 && person.land == "GER") || - // (person.pplz < 10000 && person.land == "DE")) - // { - // hasFaults = true; - // errors.Add(ErrorTypes.PPlzTooShort); - // } - // else if ((person.pplz > 99999 && string.IsNullOrWhiteSpace(person.land)) || - // (person.pplz > 99999 && person.land == "GER") || - // (person.pplz > 99999 && person.land == "DE")) - // { - // hasFaults = true; - // errors.Add(ErrorTypes.PPlzTooLong); - // } - } - - if (warnings.Contains(WarningTypes.NoPLZ) && warnings.Contains(WarningTypes.NoPPLZ)) - { - hasFaults = true; - errors.Add(ErrorTypes.NoPLZorPPLZ); - } - - // Ort-Prüfung - if (string.IsNullOrWhiteSpace(person.ort)) - { - hasFaults = true; - warnings.Add(WarningTypes.NoCity); - } - else - { - address_component_count++; - } - - // Street-Number - var street = person.strasse.ToCharArray(); - var intcount = 0; - foreach (var c in street) - { - int maybe; - if (int.TryParse(c.ToString(), out maybe)) intcount++; - } - - if (intcount == 0) - { - hasFaults = true; - warnings.Add(WarningTypes.NoStreetNumber); - } - - // Last-Name - if (string.IsNullOrWhiteSpace(person.name)) - { - hasFaults = true; - warnings.Add(WarningTypes.NoLastName); - } - - // First-Name - if (string.IsNullOrWhiteSpace(person.vorname)) - { - hasFaults = true; - warnings.Add(WarningTypes.NoFirstName); - } - - // Street-Check - if (string.IsNullOrWhiteSpace(person.strasse)) - { - hasFaults = true; - warnings.Add(WarningTypes.NoStreet); - } - else - { - address_component_count++; - } - - // Address-Component-Count - if (!string.IsNullOrWhiteSpace(person.strasse2)) address_component_count++; - if (!string.IsNullOrWhiteSpace(person.land)) address_component_count++; - if (!string.IsNullOrWhiteSpace(person.name1)) address_component_count++; - if (!string.IsNullOrWhiteSpace(person.name2)) address_component_count++; - if (!string.IsNullOrWhiteSpace(person.name3)) address_component_count++; - if (!string.IsNullOrWhiteSpace(person.name4)) address_component_count++; - if (!string.IsNullOrWhiteSpace(person.name5)) address_component_count++; - if (!string.IsNullOrWhiteSpace(person.funktion)) address_component_count++; - if (!string.IsNullOrWhiteSpace(person.funktion2)) address_component_count++; - if (!string.IsNullOrWhiteSpace(person.funktionad)) address_component_count++; - if (!string.IsNullOrWhiteSpace(person.abteilung)) address_component_count++; - - // Double-Refsid or DoubleAddresses - foreach (var person2 in adset.KasPersons) - { - if (adset.KasPersons.IndexOf(person) == adset.KasPersons.IndexOf(person2)) continue; - - if (person.refsid == person2.refsid) // trifft auf Patch-Addressen nicht zu + if (warnings.Contains(WarningTypes.NoPLZ) && warnings.Contains(WarningTypes.NoPPLZ)) { hasFaults = true; - warnings.Add(WarningTypes.DoubledRefsid); + errors.Add(ErrorTypes.NoPLZorPPLZ); } - if (person.name == person2.name && - person.strasse == person2.strasse && - person.vorname == person2.vorname && - person.ort == person2.ort && - person.funktion == person2.funktion && - person.funktion2 == person2.funktion2 && - person.funktionad == person2.funktionad && - person.abteilung == person2.abteilung && - person.name1 == person2.name1 && - person.name2 == person2.name2 && - person.name3 == person2.name3 && - person.name4 == person2.name4 && - person.name5 == person2.name5) // - + // Ort-Prüfung + if (string.IsNullOrWhiteSpace(person.ort)) { hasFaults = true; - errors.Add(ErrorTypes.MayBeSameAddress); + warnings.Add(WarningTypes.NoCity); } - } - - // Adressen-Länge - if (address_component_count > 10) - { - hasFaults = true; - warnings.Add(WarningTypes.FullAddressTooLong); - } - - if (hasFaults) - lock (Settings._instance.addressSets.addresses) + else { - // Directly set PersonError in the address set - var person_index = adset.KasPersons.IndexOf(person); - if (person_index >= 0) - Settings._instance.addressSets.addresses[adset_index].KasPersons[person_index].PersonError = - new KasPersonError((errors, warnings)); + address_component_count++; + } + + // Street-Number + var street = person.strasse.ToCharArray(); + var intcount = 0; + foreach (var c in street) + { + int maybe; + if (int.TryParse(c.ToString(), out maybe)) intcount++; + } + + if (intcount == 0) + { + hasFaults = true; + warnings.Add(WarningTypes.NoStreetNumber); + } + + // Last-Name + if (string.IsNullOrWhiteSpace(person.name)) + { + hasFaults = true; + warnings.Add(WarningTypes.NoLastName); + } + + // First-Name + if (string.IsNullOrWhiteSpace(person.vorname)) + { + hasFaults = true; + warnings.Add(WarningTypes.NoFirstName); + } + + // Street-Check + if (string.IsNullOrWhiteSpace(person.strasse)) + { + hasFaults = true; + warnings.Add(WarningTypes.NoStreet); + } + else + { + address_component_count++; + } + + // Address-Component-Count + if (!string.IsNullOrWhiteSpace(person.strasse2)) address_component_count++; + if (!string.IsNullOrWhiteSpace(person.land)) address_component_count++; + if (!string.IsNullOrWhiteSpace(person.name1)) address_component_count++; + if (!string.IsNullOrWhiteSpace(person.name2)) address_component_count++; + if (!string.IsNullOrWhiteSpace(person.name3)) address_component_count++; + if (!string.IsNullOrWhiteSpace(person.name4)) address_component_count++; + if (!string.IsNullOrWhiteSpace(person.name5)) address_component_count++; + if (!string.IsNullOrWhiteSpace(person.funktion)) address_component_count++; + if (!string.IsNullOrWhiteSpace(person.funktion2)) address_component_count++; + if (!string.IsNullOrWhiteSpace(person.funktionad)) address_component_count++; + if (!string.IsNullOrWhiteSpace(person.abteilung)) address_component_count++; + + // Double-Refsid or DoubleAddresses + foreach (var person2 in adset.KasPersons) + { + if (adset.KasPersons.IndexOf(person) == adset.KasPersons.IndexOf(person2)) continue; + + if (person.refsid == person2.refsid) // trifft auf Patch-Addressen nicht zu + { + hasFaults = true; + warnings.Add(WarningTypes.DoubledRefsid); + } + + if (person.name == person2.name && + person.strasse == person2.strasse && + person.vorname == person2.vorname && + person.ort == person2.ort && + person.funktion == person2.funktion && + person.funktion2 == person2.funktion2 && + person.funktionad == person2.funktionad && + person.abteilung == person2.abteilung && + person.name1 == person2.name1 && + person.name2 == person2.name2 && + person.name3 == person2.name3 && + person.name4 == person2.name4 && + person.name5 == person2.name5) // + + { + hasFaults = true; + errors.Add(ErrorTypes.MayBeSameAddress); + } + } + + // Adressen-Länge + if (address_component_count > 10) + { + hasFaults = true; + warnings.Add(WarningTypes.FullAddressTooLong); } - // Fortschritt aktualisieren - Interlocked.Increment(ref current); - var percent = current / (double)total * 100; - await Dispatcher.UIThread.InvokeAsync(() => - { if (hasFaults) - _progress.AddToLog($"Person mit id {person.id} ist fehlerhaft", Convert.ToInt32(percent).ToString()); + lock (Settings._instance.addressSets.addresses) + { + // Directly set PersonError in the address set + var person_index = adset.KasPersons.IndexOf(person); + if (person_index >= 0) + Settings._instance.addressSets.addresses[adset_index].KasPersons[person_index] + .PersonError = + new KasPersonError((errors, warnings)); + } - _progress.ChangePercentage(percent); - }); - } - }); + // Fortschritt aktualisieren + Interlocked.Increment(ref current); + var percent = current / (double)total * 100; + await Dispatcher.UIThread.InvokeAsync(() => + { + if (hasFaults) + _progress.AddToLog($"Person mit id {person.id} ist fehlerhaft", + Convert.ToInt32(percent).ToString()); - Settings.Save(); + _progress.ChangePercentage(percent); + }); + } + }); - // Return only the persons with errors from the address set - return Settings._instance.addressSets.addresses[adset_index].KasPersons - .Where(p => p.PersonError != null) - .ToList(); + Settings.Save(); + + // Return only the persons with errors from the address set + return Settings._instance.addressSets.addresses[adset_index].KasPersons + .Where(p => p.PersonError != null) + .ToList(); + + } + catch (Exception ex) + { + Logger.Log($"Error while performing address check: {ex.Message}", Logger.LogType.Error); + } + + return null; } + } \ No newline at end of file