diff --git a/AddressCheck.cs b/AddressCheck.cs index fe61589..c85b192 100644 --- a/AddressCheck.cs +++ b/AddressCheck.cs @@ -11,16 +11,20 @@ public class AddressCheck { PlzTooShort, PlzTooLong, + + // empty, + FullAddressTooLong, + DoubledRefsid, + MayBeSameAddress + } + + public enum WarningTypes + { NoCity, NoStreet, NoLastName, NoFirstName, - - // empty, - FullAddressTooLong, - NoStreetNumber, - DoubledRefsid, - MayBeSameAddress + NoStreetNumber } private readonly ProgressWindow _progress; @@ -30,9 +34,9 @@ public class AddressCheck _progress = progressWindow; } - public async Task)>> Perform(KasAddressList addresses) + public async Task, List)>> Perform(KasAddressList addresses) { - var failed_refsids = new List<(int, List)>(); + var failed_refsids = new List<(int, List, List)>(); var total = addresses.KasPersons.Count; var current = 0; @@ -41,6 +45,7 @@ public class AddressCheck foreach (var person in addresses.KasPersons) { var errors = new List(); + var warnings = new List(); var hasFaults = false; var address_component_count = 2; // cause anrede and name are first @@ -64,7 +69,7 @@ public class AddressCheck if (string.IsNullOrWhiteSpace(person.ort)) { hasFaults = true; - errors.Add(ErrorTypes.NoCity); + warnings.Add(WarningTypes.NoCity); } else { @@ -82,26 +87,26 @@ public class AddressCheck if (intcount == 0) { hasFaults = true; - errors.Add(ErrorTypes.NoStreetNumber); + warnings.Add(WarningTypes.NoStreetNumber); } if (string.IsNullOrWhiteSpace(person.name)) { hasFaults = true; - errors.Add(ErrorTypes.NoLastName); + warnings.Add(WarningTypes.NoLastName); } if (string.IsNullOrWhiteSpace(person.vorname)) { hasFaults = true; - errors.Add(ErrorTypes.NoFirstName); + warnings.Add(WarningTypes.NoFirstName); } if (string.IsNullOrWhiteSpace(person.strasse)) { hasFaults = true; - errors.Add(ErrorTypes.NoStreet); + warnings.Add(WarningTypes.NoStreet); } else { @@ -160,7 +165,7 @@ public class AddressCheck if (hasFaults) lock (failed_refsids) { - failed_refsids.Add((person.refsid, errors)); + failed_refsids.Add((person.refsid, errors, warnings)); } // Fortschritt aktualisieren diff --git a/CombineAddresses.cs b/CombineAddresses.cs index 2b218e7..2596b16 100644 --- a/CombineAddresses.cs +++ b/CombineAddresses.cs @@ -27,7 +27,6 @@ public class CombineAddresses private async Task Merge(KasAddressList first, KasAddressList second, int num, int total) { - KasAddressList result = new(); foreach (var sec in second.KasPersons) { var is_new = true; @@ -68,7 +67,7 @@ public class CombineAddresses } } - if (is_new) result.KasPersons.Add(sec); + if (is_new) first.KasPersons.Add(sec); var subperc = second.KasPersons.IndexOf(sec) / second.KasPersons.Count; var percent = (num + (double)subperc) / total * 100; await Dispatcher.UIThread.InvokeAsync(() => @@ -82,6 +81,6 @@ public class CombineAddresses }); } - return result; + return first; } } \ No newline at end of file diff --git a/DataStructures.cs b/DataStructures.cs index 2c24ed7..c122084 100644 --- a/DataStructures.cs +++ b/DataStructures.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; namespace Logof_Client; @@ -121,14 +122,35 @@ public class KasPerson public class KasPersonError { - public KasPersonError((int, List) single_result) + public KasPersonError((int, List, List) single_result) { refsid = single_result.Item1; - foreach (var err in single_result.Item2) errors += err + ", "; - errors = errors.Trim(); - errors = errors.TrimEnd(','); + try + { + foreach (var err in single_result.Item2) errors += err + ", "; + errors = errors.Trim(); + errors = errors.TrimEnd(','); + } + catch + { + } + + try + { + if (single_result.Item3 != null) + { + foreach (var err in single_result.Item3) warnings += err + ", "; + warnings = warnings.Trim(); + warnings = warnings.TrimEnd(','); + } + } + catch (Exception e) + { + Console.WriteLine(e.Message); + } } public int refsid { get; set; } - public string errors { get; set; } + public string errors { get; set; } = ""; + public string warnings { get; set; } = ""; } \ No newline at end of file diff --git a/MainWindow.axaml.cs b/MainWindow.axaml.cs index 54a0099..7d844ac 100644 --- a/MainWindow.axaml.cs +++ b/MainWindow.axaml.cs @@ -5,7 +5,6 @@ using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Platform.Storage; -using Avalonia.Threading; namespace Logof_Client; @@ -172,13 +171,10 @@ public partial class MainWindow : Window progressWindow.Close(); - File.WriteAllText(Dispatcher.UIThread.Invoke(() => OpenSettingsSaveAsDialog()).Result, + File.WriteAllText(OpenSettingsSaveAsDialog().Result, new CsvBuilder( "refsid,anrede,titel,vorname,adel,name,namezus,anredzus,strasse,strasse2,plz,ort,land,pplz,postfach,name1,name2,name3,name4,name5,funktion,funktion2,abteilung,funktionad,lastupdate", result).BuildKas()); - - - //new ResultWindow(result).Show(); } private async Task OpenSettingsSaveAsDialog() diff --git a/ResultWindow.axaml.cs b/ResultWindow.axaml.cs index d442f98..9245322 100644 --- a/ResultWindow.axaml.cs +++ b/ResultWindow.axaml.cs @@ -8,16 +8,17 @@ namespace Logof_Client; public partial class ResultWindow : Window { public List errortypecheckboxes = new(); - public List<(int, List)> ur_result; + public List<(int, List, List)> ur_result; + public List warningtypecheckboxes = new(); - public ResultWindow(List<(int, List)> result) + public ResultWindow(List<(int, List, List)> result) { InitializeComponent(); ur_result = result; Load(result); } - private void GenerateView(List<(int, List)> result) + private void GenerateView(List<(int, List, List)> result) { var errors = new List(); foreach (var single_result in result) errors.Add(new KasPersonError(single_result)); @@ -25,14 +26,22 @@ public partial class ResultWindow : Window DgResult.ItemsSource = errors; } - private void Load(List<(int, List)> result) + private void Load(List<(int, List, List)> result) { var knownErrors = new List(); + var knownWarnings = new List(); foreach (var single_result in result) - foreach (var errtyp in single_result.Item2) - if (!knownErrors.Contains(errtyp)) - knownErrors.Add(errtyp); + { + foreach (var errtyp in single_result.Item2) + if (!knownErrors.Contains(errtyp)) + knownErrors.Add(errtyp); + + foreach (var wartyp in single_result.Item3) + if (!knownWarnings.Contains(wartyp)) + knownWarnings.Add(wartyp); + } + foreach (var errtype in knownErrors) { @@ -44,6 +53,16 @@ public partial class ResultWindow : Window StpFilterOptions.Children.Add(cb); } + foreach (var wartype in knownWarnings) + { + var cb = new CheckBox(); + cb.IsChecked = true; + cb.Content = wartype.ToString(); + cb.Click += (sender, e) => UpdateFilter(); + warningtypecheckboxes.Add(cb); + StpFilterOptions.Children.Add(cb); + } + GenerateView(result); } @@ -53,17 +72,30 @@ public partial class ResultWindow : Window private void UpdateFilter() { - var temp_result = new List<(int, List)>(); + var temp_result = new List<(int, List, List)>(); var checked_types = new List(); + var checked_types_war = new List(); foreach (var cb in errortypecheckboxes) if (cb.IsChecked == true) checked_types.Add( (AddressCheck.ErrorTypes)Enum.Parse(typeof(AddressCheck.ErrorTypes), cb.Content.ToString())); + foreach (var cb in warningtypecheckboxes) + if (cb.IsChecked == true) + checked_types_war.Add( + (AddressCheck.WarningTypes)Enum.Parse(typeof(AddressCheck.WarningTypes), cb.Content.ToString())); + foreach (var sres in ur_result) - foreach (var err in sres.Item2) - if (checked_types.Contains(err) && !temp_result.Contains(sres)) - temp_result.Add(sres); + { + foreach (var err in sres.Item2) + if (checked_types.Contains(err) && !temp_result.Contains(sres)) + temp_result.Add(sres); + + foreach (var war in sres.Item3) + if (checked_types_war.Contains(war) && !temp_result.Contains(sres)) + temp_result.Add(sres); + } + var errors = new List(); foreach (var single_result in temp_result) errors.Add(new KasPersonError(single_result)); diff --git a/obj/Debug/net9.0/Avalonia/Resources.Inputs.cache b/obj/Debug/net9.0/Avalonia/Resources.Inputs.cache index 3bf8e10..27f326f 100644 --- a/obj/Debug/net9.0/Avalonia/Resources.Inputs.cache +++ b/obj/Debug/net9.0/Avalonia/Resources.Inputs.cache @@ -1 +1 @@ -982c4bab1be7433e0655bc9d9093ed492303bd16c33e9bf09c663ad2ef1afbaa +9d71302617c5994ca25ba86e9f6470b4429e0686166ec81d7a41e9ab31df1343 diff --git a/obj/Debug/net9.0/Avalonia/resources b/obj/Debug/net9.0/Avalonia/resources index 4a9a04b..292e986 100644 Binary files a/obj/Debug/net9.0/Avalonia/resources and b/obj/Debug/net9.0/Avalonia/resources differ diff --git a/obj/Debug/net9.0/Logof Client.AssemblyInfo.cs b/obj/Debug/net9.0/Logof Client.AssemblyInfo.cs index 6645c1b..61b0d8a 100644 --- a/obj/Debug/net9.0/Logof Client.AssemblyInfo.cs +++ b/obj/Debug/net9.0/Logof Client.AssemblyInfo.cs @@ -13,10 +13,10 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Logof Client")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+79e454fa0798dd4d65d644597aab3c43cffc33dc")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9f0cfd09c3953603741230374c4b81fcd710fca0")] [assembly: System.Reflection.AssemblyProductAttribute("Logof Client")] [assembly: System.Reflection.AssemblyTitleAttribute("Logof Client")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] -// Von der MSBuild WriteCodeFragment-Klasse generiert. +// Generated by the MSBuild WriteCodeFragment class. diff --git a/obj/Debug/net9.0/Logof Client.AssemblyInfoInputs.cache b/obj/Debug/net9.0/Logof Client.AssemblyInfoInputs.cache index 72bc4ff..73ba2bc 100644 --- a/obj/Debug/net9.0/Logof Client.AssemblyInfoInputs.cache +++ b/obj/Debug/net9.0/Logof Client.AssemblyInfoInputs.cache @@ -1 +1 @@ -dba61fcf7b622589bad0203aa3dbe33fc04aea760881f5a8d0f36c1b5d8f2535 +bb8aef8b9e51521c6cf017c0b4260a3bea949a2efa414dd34c1e3fb67e86ea5d diff --git a/obj/Logof Client.csproj.nuget.dgspec.json b/obj/Logof Client.csproj.nuget.dgspec.json index 3f9924a..30166ad 100644 --- a/obj/Logof Client.csproj.nuget.dgspec.json +++ b/obj/Logof Client.csproj.nuget.dgspec.json @@ -20,7 +20,6 @@ "net9.0" ], "sources": { - "/usr/lib64/dotnet/library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { @@ -85,12 +84,18 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.5, 9.0.5]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "/usr/lib64/dotnet/sdk/9.0.106/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/9.0.106/PortableRuntimeIdentifierGraph.json" } } } diff --git a/obj/project.assets.json b/obj/project.assets.json index 545eeff..17e7bbb 100644 --- a/obj/project.assets.json +++ b/obj/project.assets.json @@ -1497,7 +1497,6 @@ "net9.0" ], "sources": { - "/usr/lib64/dotnet/library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { @@ -1562,12 +1561,18 @@ ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[9.0.5, 9.0.5]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "/usr/lib64/dotnet/sdk/9.0.106/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/9.0.106/PortableRuntimeIdentifierGraph.json" } } } diff --git a/obj/project.nuget.cache b/obj/project.nuget.cache index 8575554..bdfb879 100644 --- a/obj/project.nuget.cache +++ b/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "iFRYA+o6oII=", + "dgSpecHash": "G2hn8BEXuGk=", "success": true, "projectFilePath": "/home/fierke/Nextcloud/Documents/source/repos/logofclient/Logof Client/Logof Client.csproj", "expectedPackageFiles": [ @@ -33,7 +33,8 @@ "/home/fierke/.nuget/packages/skiasharp.nativeassets.webassembly/2.88.9/skiasharp.nativeassets.webassembly.2.88.9.nupkg.sha512", "/home/fierke/.nuget/packages/skiasharp.nativeassets.win32/2.88.9/skiasharp.nativeassets.win32.2.88.9.nupkg.sha512", "/home/fierke/.nuget/packages/system.io.pipelines/8.0.0/system.io.pipelines.8.0.0.nupkg.sha512", - "/home/fierke/.nuget/packages/tmds.dbus.protocol/0.21.2/tmds.dbus.protocol.0.21.2.nupkg.sha512" + "/home/fierke/.nuget/packages/tmds.dbus.protocol/0.21.2/tmds.dbus.protocol.0.21.2.nupkg.sha512", + "/home/fierke/.nuget/packages/microsoft.aspnetcore.app.ref/9.0.5/microsoft.aspnetcore.app.ref.9.0.5.nupkg.sha512" ], "logs": [] } \ No newline at end of file diff --git a/obj/project.packagespec.json b/obj/project.packagespec.json index e09a74e..137617f 100644 --- a/obj/project.packagespec.json +++ b/obj/project.packagespec.json @@ -1 +1 @@ -"restore":{"projectUniqueName":"/home/fierke/Nextcloud/Documents/source/repos/logofclient/Logof Client/Logof Client.csproj","projectName":"Logof Client","projectPath":"/home/fierke/Nextcloud/Documents/source/repos/logofclient/Logof Client/Logof Client.csproj","outputPath":"/home/fierke/Nextcloud/Documents/source/repos/logofclient/Logof Client/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net9.0"],"sources":{"/usr/lib64/dotnet/library-packs":{},"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net9.0":{"targetAlias":"net9.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"},"SdkAnalysisLevel":"9.0.100"}"frameworks":{"net9.0":{"targetAlias":"net9.0","dependencies":{"Avalonia":{"target":"Package","version":"[11.3.2, )"},"Avalonia.Controls.DataGrid":{"target":"Package","version":"[11.3.2, )"},"Avalonia.Desktop":{"target":"Package","version":"[11.3.2, )"},"Avalonia.Diagnostics":{"target":"Package","version":"[11.3.2, )"},"Avalonia.Fonts.Inter":{"target":"Package","version":"[11.3.2, )"},"Avalonia.Themes.Fluent":{"target":"Package","version":"[11.3.2, )"},"Lucide.Avalonia":{"target":"Package","version":"[0.1.35, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/lib64/dotnet/sdk/9.0.106/PortableRuntimeIdentifierGraph.json"}} \ No newline at end of file +"restore":{"projectUniqueName":"/home/fierke/Nextcloud/Documents/source/repos/logofclient/Logof Client/Logof Client.csproj","projectName":"Logof Client","projectPath":"/home/fierke/Nextcloud/Documents/source/repos/logofclient/Logof Client/Logof Client.csproj","outputPath":"/home/fierke/Nextcloud/Documents/source/repos/logofclient/Logof Client/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net9.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net9.0":{"targetAlias":"net9.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"},"SdkAnalysisLevel":"9.0.100"}"frameworks":{"net9.0":{"targetAlias":"net9.0","dependencies":{"Avalonia":{"target":"Package","version":"[11.3.2, )"},"Avalonia.Controls.DataGrid":{"target":"Package","version":"[11.3.2, )"},"Avalonia.Desktop":{"target":"Package","version":"[11.3.2, )"},"Avalonia.Diagnostics":{"target":"Package","version":"[11.3.2, )"},"Avalonia.Fonts.Inter":{"target":"Package","version":"[11.3.2, )"},"Avalonia.Themes.Fluent":{"target":"Package","version":"[11.3.2, )"},"Lucide.Avalonia":{"target":"Package","version":"[0.1.35, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"downloadDependencies":[{"name":"Microsoft.AspNetCore.App.Ref","version":"[9.0.5, 9.0.5]"}],"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/share/dotnet/sdk/9.0.106/PortableRuntimeIdentifierGraph.json"}} \ No newline at end of file diff --git a/obj/rider.project.model.nuget.info b/obj/rider.project.model.nuget.info index 3697127..7b60e69 100644 --- a/obj/rider.project.model.nuget.info +++ b/obj/rider.project.model.nuget.info @@ -1 +1 @@ -17520917705843408 \ No newline at end of file +17523228750000000 \ No newline at end of file diff --git a/obj/rider.project.restore.info b/obj/rider.project.restore.info index 041aab5..98c1199 100644 --- a/obj/rider.project.restore.info +++ b/obj/rider.project.restore.info @@ -1 +1 @@ -17520918778041105 \ No newline at end of file +17559386360285797 \ No newline at end of file