diff --git a/MainWindow.axaml b/MainWindow.axaml
index 86b8308..659eed5 100644
--- a/MainWindow.axaml
+++ b/MainWindow.axaml
@@ -223,6 +223,10 @@
+
+
+
+
Speichere Unverarbeitete in neuem Verteiler
diff --git a/MainWindow.axaml.cs b/MainWindow.axaml.cs
index 1328265..104f74a 100644
--- a/MainWindow.axaml.cs
+++ b/MainWindow.axaml.cs
@@ -471,14 +471,14 @@ public partial class MainWindow : Window
}
}
- private async void StartCombine(List address_lists, int owner_id, string type)
+ private async void StartCombine(List address_lists, int owner_id, string type, CombineAddresses.CombineType comb_type)
{
var progressWindow = new ProgressWindow();
progressWindow.Show(_instance);
var processor = new CombineAddresses(progressWindow);
- var result = await processor.Perform(address_lists, type, CbMergeExportUnmerged.IsChecked);
+ var result = await processor.Perform(address_lists, type, comb_type, CbMergeExportUnmerged.IsChecked);
if (result.Item1 != null)
result.Item1.owner_id = owner_id;
@@ -769,7 +769,7 @@ public partial class MainWindow : Window
Convert.ToInt32(item.ToString().Split(" - ")[0])));
try
{
- StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "difference");
+ StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "difference", GetCombiningTyp());
}
catch
{
@@ -785,7 +785,7 @@ public partial class MainWindow : Window
Convert.ToInt32(item.ToString().Split(" - ")[0])));
try
{
- StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "union");
+ StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "union", GetCombiningTyp());
}
catch
{
@@ -802,7 +802,7 @@ public partial class MainWindow : Window
Convert.ToInt32(item.ToString().Split(" - ")[0])));
try
{
- StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "intersection");
+ StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "intersection", GetCombiningTyp());
}
catch
{
@@ -810,6 +810,19 @@ public partial class MainWindow : Window
}
}
+ public CombineAddresses.CombineType GetCombiningTyp()
+ {
+ if (RbComprefsid.IsChecked == true)
+ {
+ return CombineAddresses.CombineType.refsid;
+ } else if (RbCompfinAd.IsChecked == true)
+ {
+ return CombineAddresses.CombineType.final_adress;
+ }
+
+ return CombineAddresses.CombineType.none;
+ }
+
private void BtnCombineSymmetricDifference_OnClick(object? sender, RoutedEventArgs e)
{
var list = new List();
@@ -817,7 +830,7 @@ public partial class MainWindow : Window
list.Add(Settings._instance.addressSets.GetAddressSetByID(
Convert.ToInt32(item.ToString().Split(" - ")[0])));
- StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "symdiff");
+ StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "symdiff", GetCombiningTyp());
}
private async void BtnGenerateLabels_OnClick(object? sender, RoutedEventArgs e)
diff --git a/Tasks/CombineAddresses.cs b/Tasks/CombineAddresses.cs
index d160526..1a7c861 100644
--- a/Tasks/CombineAddresses.cs
+++ b/Tasks/CombineAddresses.cs
@@ -15,14 +15,21 @@ public class CombineAddresses
{
_progress = progressWindow;
}
+
+ public enum CombineType
+ {
+ refsid,
+ final_adress,
+ none
+ }
- public async Task<(KasAddressList, KasAddressList)> Perform(List address_lists, string type,
+ public async Task<(KasAddressList, KasAddressList)> Perform(List address_lists, string type, CombineType comb_type,
bool? exportUnused)
{
- if (type == "difference") return await Difference(address_lists, exportUnused);
- if (type == "union") return await Union(address_lists, exportUnused);
- if (type == "intersection") return await Intersection(address_lists, exportUnused);
- if (type == "symdiff") return await SymmetricDifference(address_lists, exportUnused);
+ if (type == "difference") return await Difference(address_lists, comb_type, exportUnused);
+ if (type == "union") return await Union(address_lists, comb_type, exportUnused);
+ if (type == "intersection") return await Intersection(address_lists, comb_type, exportUnused);
+ if (type == "symdiff") return await SymmetricDifference(address_lists, comb_type, exportUnused);
return (null, null);
}
@@ -35,11 +42,12 @@ public class CombineAddresses
/// Second address to compare
/// If true, only a refsid-check will be done
///
- public bool CompareAddresses(KasPerson first, KasPerson second, bool only_refsid = false)
+ public bool CompareAddresses(KasPerson first, KasPerson second, CombineType comb_type)
{
// A refsid of 0 means "missing", so it must not collapse unrelated entries.
- if (first.refsid != 0 && second.refsid != 0 && first.refsid == second.refsid) return true;
- if (!only_refsid)
+ if(comb_type == CombineType.refsid)
+ if (first.refsid != 0 && second.refsid != 0 && first.refsid == second.refsid) return true;
+ if (comb_type == CombineType.final_adress)
if (first.name == second.name &&
first.anrede == second.anrede &&
first.anredzus == second.anredzus &&
@@ -68,7 +76,7 @@ public class CombineAddresses
return false;
}
- public async Task<(KasAddressList, KasAddressList)> Difference(List address_lists,
+ public async Task<(KasAddressList, KasAddressList)> Difference(List address_lists, CombineType comb_type,
bool? return_unused,
Progress? progress = null)
{
@@ -92,7 +100,7 @@ public class CombineAddresses
foreach (var person in address_lists[0].KasPersons)
{
- var isDouble = restUnion.Any(p => CompareAddresses(person, p));
+ var isDouble = restUnion.Any(p => CompareAddresses(person, p, comb_type));
if (!isDouble)
result.KasPersons.Add(person);
else
@@ -111,7 +119,7 @@ public class CombineAddresses
}
- public async Task<(KasAddressList, KasAddressList)> Union(List address_lists, bool? return_unused,
+ public async Task<(KasAddressList, KasAddressList)> Union(List address_lists, CombineType comb_type, bool? return_unused,
Progress progress = null)
{
var result = new KasAddressList(await KasAddressList.GenerateName("union"));
@@ -128,7 +136,7 @@ public class CombineAddresses
foreach (var list in address_lists)
foreach (var person in list.KasPersons)
{
- if (!result.KasPersons.Any(existing => CompareAddresses(existing, person)))
+ if (!result.KasPersons.Any(existing => CompareAddresses(existing, person, comb_type)))
result.KasPersons.Add(person);
else
second_result.KasPersons.Add(person);
@@ -155,7 +163,7 @@ public class CombineAddresses
return null;
}
- public async Task<(KasAddressList, KasAddressList)> Intersection(List address_lists,
+ public async Task<(KasAddressList, KasAddressList)> Intersection(List address_lists, CombineType comb_type,
bool? return_unused, Progress progress = null)
{
var result = new KasAddressList(await KasAddressList.GenerateName("intersection"));
@@ -176,7 +184,7 @@ public class CombineAddresses
{
// Prüfen, ob Person in *allen* anderen Listen vorkommt
var isInAll = otherLists.All(list =>
- list.KasPersons.Any(existing => CompareAddresses(existing, person)));
+ list.KasPersons.Any(existing => CompareAddresses(existing, person, comb_type)));
if (isInAll)
result.KasPersons.Add(person);
@@ -203,7 +211,7 @@ public class CombineAddresses
}
- public async Task<(KasAddressList, KasAddressList)> SymmetricDifference(List address_lists,
+ public async Task<(KasAddressList, KasAddressList)> SymmetricDifference(List address_lists, CombineType comb_type,
bool? return_unused, Progress progress = null)
{
var result = new KasAddressList(await KasAddressList.GenerateName("symmetric_difference"));
@@ -223,7 +231,7 @@ public class CombineAddresses
foreach (var person in list.KasPersons)
{
// Prüfen, ob schon vorhanden
- var existing = allPersons.FirstOrDefault(p => CompareAddresses(p.person, person));
+ var existing = allPersons.FirstOrDefault(p => CompareAddresses(p.person, person, comb_type));
if (existing.person != null)
{
// Falls schon drin → Vorkommen erhöhen