13 Commits
23 changed files with 627 additions and 663 deletions
+2 -9
View File
@@ -208,7 +208,6 @@ public class KasPerson
public static int GenerateNewID(int base_id) public static int GenerateNewID(int base_id)
{ {
//var newid = 100000 + base_id;
int highest = 0; int highest = 0;
foreach (var set in Settings._instance.addressSets.addresses) foreach (var set in Settings._instance.addressSets.addresses)
{ {
@@ -217,8 +216,6 @@ public class KasPerson
if(add.id >= highest) highest = add.id+1; if(add.id >= highest) highest = add.id+1;
} }
} }
return highest + base_id + 1; return highest + base_id + 1;
} }
@@ -228,10 +225,8 @@ public class KasPerson
{ {
return refsid + " - " + name; return refsid + " - " + name;
} }
else
{ return id + " - " + name;
return id + " - " + name;
}
} }
} }
@@ -239,12 +234,10 @@ public class KasPersonError
{ {
public KasPersonError((List<AddressCheck.ErrorTypes>, List<AddressCheck.WarningTypes>) single_result) public KasPersonError((List<AddressCheck.ErrorTypes>, List<AddressCheck.WarningTypes>) single_result)
{ {
//refsid = single_result.Item1;
errors = single_result.Item1; errors = single_result.Item1;
warnings = single_result.Item2; warnings = single_result.Item2;
} }
//public int refsid { get; set; }
public List<AddressCheck.ErrorTypes> errors { get; set; } = new(); public List<AddressCheck.ErrorTypes> errors { get; set; } = new();
public List<AddressCheck.WarningTypes> warnings { get; set; } = new(); public List<AddressCheck.WarningTypes> warnings { get; set; } = new();
-19
View File
@@ -19,9 +19,6 @@ public class Settings
public Customers customers = new(); public Customers customers = new();
public PdfExportSettings pdfExport { get; set; } = new(); public PdfExportSettings pdfExport { get; set; } = new();
// public string settingsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
// "logofclient", "config.json");
public Settings() public Settings()
{ {
_instance = this; _instance = this;
@@ -32,7 +29,6 @@ public class Settings
{ {
if (!Directory.Exists(Global._instance.config_path) && !File.Exists((Global._instance.config_path))) if (!Directory.Exists(Global._instance.config_path) && !File.Exists((Global._instance.config_path)))
Directory.CreateDirectory(Global._instance.config_path); Directory.CreateDirectory(Global._instance.config_path);
// if (!string.IsNullOrEmpty(Global._instance.config_path)) _instance.settingsPath = Global._instance.config_path;
// Always save with current schema version // Always save with current schema version
_instance.schemaVersion = SchemaMigration.CURRENT_SCHEMA_VERSION; _instance.schemaVersion = SchemaMigration.CURRENT_SCHEMA_VERSION;
@@ -42,8 +38,6 @@ public class Settings
public static void Load() public static void Load()
{ {
//if (!string.IsNullOrEmpty(Global._instance.config_path)) _instance.settingsPath = Global._instance.config_path;
try try
{ {
var contents = File.ReadAllText(Path.Combine(Global._instance.config_path, "config.json")); var contents = File.ReadAllText(Path.Combine(Global._instance.config_path, "config.json"));
@@ -158,12 +152,6 @@ public class Global
public static void Load() public static void Load()
{ {
// if (!File.Exists(Path.Combine(
// Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "logofclient",
// "global.config")))
// File.Create(Path.Combine(
// Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "logofclient",
// "global.config"));
try try
{ {
var contents = File.ReadAllText(Path.Combine( var contents = File.ReadAllText(Path.Combine(
@@ -247,13 +235,6 @@ public class Customer
return null; return null;
} }
// public static int GetIDByCustomerListItem(string item_content)
// {
// var id = item_content.Split(" - ")[0];
// return int.Parse(id);
// }
} }
public class AddressSets public class AddressSets
-1
View File
@@ -28,7 +28,6 @@ public static class Logger
{ {
Console.WriteLine(ex); Console.WriteLine(ex);
} }
} }
public enum LogType public enum LogType
+7
View File
@@ -71,4 +71,11 @@
<Folder Include="assets\fonts\" /> <Folder Include="assets\fonts\" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Compile Update="PreviewWindow.axaml.cs">
<DependentUpon>PreviewWindow.axaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
</ItemGroup>
</Project> </Project>
+19 -2
View File
@@ -154,7 +154,7 @@
<TextBlock TextWrapping="Wrap" FontSize="9" Text="Generiert Versandetiketten und Bundleitzettel" HorizontalAlignment="Stretch" TextAlignment="Left"></TextBlock> <TextBlock TextWrapping="Wrap" FontSize="9" Text="Generiert Versandetiketten und Bundleitzettel" HorizontalAlignment="Stretch" TextAlignment="Left"></TextBlock>
</StackPanel> </StackPanel>
</Button> </Button>
<Button Width="250" IsEnabled="False" <Button Width="250" IsEnabled="False" Click="BtnRepair_OnClick"
HorizontalContentAlignment="Center" x:Name="BtnRepair" VerticalAlignment="Stretch" HorizontalContentAlignment="Center" x:Name="BtnRepair" VerticalAlignment="Stretch"
Margin="0,0,0,10"> Margin="0,0,0,10">
<StackPanel Orientation="Vertical"> <StackPanel Orientation="Vertical">
@@ -220,7 +220,6 @@
<Label FontSize="9" <Label FontSize="9"
Content="Elemente der ersten Menge ohne Elemente der zweiten Menge" /> Content="Elemente der ersten Menge ohne Elemente der zweiten Menge" />
</StackPanel> </StackPanel>
</Button> </Button>
<Button HorizontalAlignment="Stretch" MinWidth="240" <Button HorizontalAlignment="Stretch" MinWidth="240"
HorizontalContentAlignment="Center" x:Name="BtnCombineSymmetric" HorizontalContentAlignment="Center" x:Name="BtnCombineSymmetric"
@@ -248,6 +247,24 @@
<CheckBox HorizontalAlignment="Left" x:Name="CbMergeDeleteOld" IsChecked="False">Lösche ursprüngliche Sets</CheckBox> <CheckBox HorizontalAlignment="Left" x:Name="CbMergeDeleteOld" IsChecked="False">Lösche ursprüngliche Sets</CheckBox>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<Label HorizontalAlignment="Center" Content="Reihenfolge:"></Label>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="10">
<ListBox x:Name="LstCombineAddressSetSort" SelectionMode="Single" SelectionChanged="LstCombineAddressSetSort_OnSelectionChanged"></ListBox>
<StackPanel Orientation="Vertical">
<Button HorizontalAlignment="Stretch" MinWidth="40"
HorizontalContentAlignment="Center" x:Name="BtnCombineAddressSetSortUp"
Click="BtnCombineAddressSetSortUp_OnClick"
Margin="0,0,0,10">
<LucideIcon Kind="ArrowBigUp" Width="36" Height="36" />
</Button>
<Button HorizontalAlignment="Stretch" MinWidth="40"
HorizontalContentAlignment="Center" x:Name="BtnCombineAddressSetSortDown"
Click="BtnCombineAddressSetSortDown_OnClick"
Margin="0,0,0,10">
<LucideIcon Kind="ArrowBigDown" Width="36" Height="36" />
</Button>
</StackPanel>
</StackPanel>
</StackPanel> </StackPanel>
</Grid> </Grid>
<Grid Grid.Row="2" Margin="20" ColumnDefinitions="*,5*,*" IsVisible="False" x:Name="GrdExportMarginOptions"> <Grid Grid.Row="2" Margin="20" ColumnDefinitions="*,5*,*" IsVisible="False" x:Name="GrdExportMarginOptions">
+116 -85
View File
@@ -31,7 +31,7 @@ public partial class MainWindow : Window
SetSettingsCustomerEnabledState(false); SetSettingsCustomerEnabledState(false);
//Hide(); //Hide();
var s = new StartupWindow(); //var s = new StartupWindow();
//s.Show(); //s.Show();
_instance = this; _instance = this;
@@ -85,54 +85,49 @@ public partial class MainWindow : Window
{ {
Logger.Log($"Error while doing wiki stuff: {ex.Message}", Logger.LogType.Error); Logger.Log($"Error while doing wiki stuff: {ex.Message}", Logger.LogType.Error);
} }
//Thread.Sleep(3000);
//Show();
} }
private async void StartAddressCheck(int addresSetID) private async void StartAddressCheck(int addresSetID)
{ {
//var addresses = DataImport.ImportKasAddressList(path); // Ihr Code hier
var progressWindow = new ProgressWindow(); var progressWindow = new ProgressWindow();
progressWindow.Show(_instance); progressWindow.Show(_instance);
var processor = new AddressCheck(progressWindow); var processor = new AddressCheck(progressWindow);
var result = await processor.Perform(addresSetID); var result = await processor.Perform(addresSetID);
// foreach (var item in result)
// {
// }
progressWindow.Close(); progressWindow.Close();
new ResultWindow(result, addresSetID).Show(); new ResultWindow(result, addresSetID).Show();
Settings.Save(); Settings.Save();
//await MessageBox.Show(_instance, $"{result.Count} Einträge fehlerhaft.", "Fertig"); RefreshAddressSetListItems((LstCustomers.SelectedItem as Customer).ID);
} }
private async void StartAddressShortener(KasAddressList set) private async void StartAddressShortener(KasAddressList set)
{ {
//var addresses = DataImport.ImportKasAddressList(path); // Ihr Code hier
var progressWindow = new ProgressWindow(); var progressWindow = new ProgressWindow();
progressWindow.Show(_instance); progressWindow.Show(_instance);
var processor = new AddressShortener(progressWindow); var processor = new AddressShortener(progressWindow);
await processor.Perform(set); await processor.Perform(set);
// foreach (var item in result) progressWindow.Close();
// { Settings.Save();
// }
RefreshAddressSetListItems((LstCustomers.SelectedItem as Customer).ID);
}
private async void StartAddressRepairer(KasAddressList set)
{
var progressWindow = new ProgressWindow();
progressWindow.Show(_instance);
var processor = new AddressRepair(progressWindow);
await processor.Perform(set);
progressWindow.Close(); progressWindow.Close();
Settings.Save(); Settings.Save();
//await MessageBox.Show(_instance, $"{result.Count} Einträge fehlerhaft.", "Fertig");
RefreshAddressSetListItems((LstCustomers.SelectedItem as Customer).ID);
} }
@@ -150,7 +145,7 @@ public partial class MainWindow : Window
Process.Start(new ProcessStartInfo Process.Start(new ProcessStartInfo
{ {
FileName = "https://mypapercloud.de/logof/", FileName = "https://mypapercloud.de/logof/",
UseShellExecute = true // Wichtig für Plattformübergreifendes Öffnen UseShellExecute = true
}); });
} }
catch (Exception ex) catch (Exception ex)
@@ -166,7 +161,7 @@ public partial class MainWindow : Window
Process.Start(new ProcessStartInfo Process.Start(new ProcessStartInfo
{ {
FileName = "https://mypapercloud.de/logof/wiki/", FileName = "https://mypapercloud.de/logof/wiki/",
UseShellExecute = true // Wichtig für Plattformübergreifendes Öffnen UseShellExecute = true
}); });
} }
catch (Exception ex) catch (Exception ex)
@@ -182,7 +177,7 @@ public partial class MainWindow : Window
Process.Start(new ProcessStartInfo Process.Start(new ProcessStartInfo
{ {
FileName = "https://git.mypapercloud.de/fierke/logofclient", FileName = "https://git.mypapercloud.de/fierke/logofclient",
UseShellExecute = true // Wichtig für Plattformübergreifendes Öffnen UseShellExecute = true
}); });
} }
catch (Exception ex) catch (Exception ex)
@@ -231,19 +226,6 @@ public partial class MainWindow : Window
_selectedWikiFilePath = item.Path; _selectedWikiFilePath = item.Path;
var text = await _wikiService.LoadFileContentAsync(item.Path); var text = await _wikiService.LoadFileContentAsync(item.Path);
MsvWikiView.Markdown = text; MsvWikiView.Markdown = text;
// try
// {
// PreviewPanel.Children.Clear();
// var rendered = MarkdownRenderer.Render(text ?? string.Empty);
// PreviewPanel.Children.Add(rendered);
// }
// catch (Exception ex)
// {
// Logger.Log($"Error while rendering markdown: {ex.Message}", Logger.LogType.Error);
// PreviewPanel.Children.Clear();
// PreviewPanel.Children.Add(new TextBlock { Text = text ?? string.Empty });
// }
EditButton.IsEnabled = true; EditButton.IsEnabled = true;
} }
else else
@@ -387,8 +369,7 @@ public partial class MainWindow : Window
TbWikiPath.Text = chosen; TbWikiPath.Text = chosen;
Global._instance.wiki_storage_path = chosen; Global._instance.wiki_storage_path = chosen;
Global.Save(); Global.Save();
// reinit wiki service and reload tree
_wikiService = new WikiService(); _wikiService = new WikiService();
PopulateNavTree(); PopulateNavTree();
} }
@@ -404,7 +385,6 @@ public partial class MainWindow : Window
if (folder == null || folder.Count == 0) return; if (folder == null || folder.Count == 0) return;
var chosen = PathUtilities.NormalizeFileSystemPath(folder[0].Path); var chosen = PathUtilities.NormalizeFileSystemPath(folder[0].Path);
//TbFontPath.Text = chosen;
Global._instance.font_path = chosen; Global._instance.font_path = chosen;
Global.Save(); Global.Save();
} }
@@ -448,9 +428,6 @@ public partial class MainWindow : Window
Settings._instance.addressSets.addresses.Add(result.Item2); Settings._instance.addressSets.addresses.Add(result.Item2);
Settings.Save(); Settings.Save();
progressWindow.Close(); progressWindow.Close();
//new ResultWindow(result, addresSetID).Show();
} }
@@ -480,8 +457,6 @@ public partial class MainWindow : Window
foreach (var customer in Settings._instance.customers.customers) foreach (var customer in Settings._instance.customers.customers)
if (customer.ID == Settings._instance.customers.current.ID) if (customer.ID == Settings._instance.customers.current.ID)
customer.name = TbSettingsCustomerName.Text; customer.name = TbSettingsCustomerName.Text;
//Settings.Save();
//RefreshCustomerItems();
} }
private void LstSettingsCustomers_OnSelectionChanged(object? sender, SelectionChangedEventArgs e) private void LstSettingsCustomers_OnSelectionChanged(object? sender, SelectionChangedEventArgs e)
@@ -490,9 +465,6 @@ public partial class MainWindow : Window
if (LstSettingsCustomers.SelectedIndex < 0) return; if (LstSettingsCustomers.SelectedIndex < 0) return;
Settings._instance.customers.current = Settings._instance.customers.current =
((Customer)LstSettingsCustomers.SelectedItems[0]); ((Customer)LstSettingsCustomers.SelectedItems[0]);
//foreach (var customer in Settings._instance.customers.customers)
//if (customer.ID == Settings._instance.customers.current.ID)
//{
TbSettingsCustomerDescription.Text = Settings._instance.customers.current.description; TbSettingsCustomerDescription.Text = Settings._instance.customers.current.description;
TbSettingsCustomerName.Text = Settings._instance.customers.current.name; TbSettingsCustomerName.Text = Settings._instance.customers.current.name;
TbSettingsCustomerSenderAddress.Text = Settings._instance.customers.current.sender_address; TbSettingsCustomerSenderAddress.Text = Settings._instance.customers.current.sender_address;
@@ -502,12 +474,19 @@ public partial class MainWindow : Window
else else
TbSettingsCustomerPatchInfo.Text = ""; TbSettingsCustomerPatchInfo.Text = "";
SetSettingsCustomerEnabledState(); SetSettingsCustomerEnabledState();
//}
} }
private void SetSettingsCustomerEnabledState(bool enable = true) private void SetSettingsCustomerEnabledState(bool enable = true)
{ {
List<Object> nboom = new() { BtnSettingsImportCustomerAddressPatch, GrdCSVDividerButtonsAndTb, TbSettingsCustomerDescription, TbSettingsCustomerName, BtnDeleteCustomer, TbSettingsCustomerSenderAddress}; List<Object> nboom = new()
{
BtnSettingsImportCustomerAddressPatch,
GrdCSVDividerButtonsAndTb,
TbSettingsCustomerDescription,
TbSettingsCustomerName,
BtnDeleteCustomer,
TbSettingsCustomerSenderAddress
};
foreach (var obj in nboom) foreach (var obj in nboom)
{ {
(obj as Control).IsEnabled = enable; (obj as Control).IsEnabled = enable;
@@ -530,8 +509,6 @@ public partial class MainWindow : Window
PopulateNavTree(editedWikiFilePath, editedWikiFilePath); PopulateNavTree(editedWikiFilePath, editedWikiFilePath);
}; };
ew.Show(); ew.Show();
//await MessageBox.Show(this, "Edit feature is currently disabled.", "Edit Disabled");
} }
public void RefreshCustomerItems(int index = 0) public void RefreshCustomerItems(int index = 0)
@@ -598,7 +575,7 @@ public partial class MainWindow : Window
{ {
try try
{ {
MakeCalcManVisible(); MakeCalcManVisible();
var opts = new FilePickerOpenOptions(); var opts = new FilePickerOpenOptions();
opts.Title = "Address-Set importieren..."; opts.Title = "Address-Set importieren...";
opts.AllowMultiple = false; opts.AllowMultiple = false;
@@ -608,14 +585,11 @@ public partial class MainWindow : Window
opts.FileTypeFilter = new[] { type }; opts.FileTypeFilter = new[] { type };
var paths = await StorageProvider.OpenFilePickerAsync(opts); var paths = await StorageProvider.OpenFilePickerAsync(opts);
if (paths?.Count <= 0) return; if (paths?.Count <= 0) return;
if (LstCustomers.SelectedIndex < 0) return; if (LstCustomers.SelectedIndex < 0) return;
var selected_path = paths[0].Path; var selected_path = paths[0].Path;
foreach (var customer in Settings._instance.customers.customers) foreach (var customer in Settings._instance.customers.customers)
if (customer == ((Customer)LstCustomers.SelectedItems[0])) if (customer == ((Customer)LstCustomers.SelectedItems[0]))
{ {
@@ -631,8 +605,6 @@ public partial class MainWindow : Window
got.Item2.SetOwner(customer.ID); got.Item2.SetOwner(customer.ID);
Settings._instance.addressSets.addresses.Add(got.Item2); Settings._instance.addressSets.addresses.Add(got.Item2);
} }
//var customer_id = int.Parse(LstCustomers.SelectedItem.ToString().Split(" - ")[0]);
RefreshAddressSetListItems(customer.ID); RefreshAddressSetListItems(customer.ID);
} }
else else
@@ -647,8 +619,6 @@ public partial class MainWindow : Window
got.Item2.SetOwner(customer.ID); got.Item2.SetOwner(customer.ID);
Settings._instance.addressSets.addresses.Add(got.Item2); Settings._instance.addressSets.addresses.Add(got.Item2);
} }
//var customer_id = int.Parse(LstCustomers.SelectedItem.ToString().Split(" - ")[0]);
RefreshAddressSetListItems(customer.ID); RefreshAddressSetListItems(customer.ID);
} }
} }
@@ -704,7 +674,7 @@ public partial class MainWindow : Window
if (pers.PersonError != null) if (pers.PersonError != null)
{ {
BtnShorten.IsEnabled = true; BtnShorten.IsEnabled = true;
// BtnRepair.IsEnabled = true; BtnRepair.IsEnabled = true;
break; break;
} }
else else
@@ -712,9 +682,15 @@ public partial class MainWindow : Window
BtnShorten.IsEnabled = false; BtnShorten.IsEnabled = false;
BtnRepair.IsEnabled = false; BtnRepair.IsEnabled = false;
} }
}
LstCombineAddressSetSort.Items.Clear();
foreach (var selected in LstCustomerAdressSets.SelectedItems)
{
try
{
LstCombineAddressSetSort.Items.Add(selected as KasAddressList);
} catch {}
} }
} }
@@ -733,19 +709,13 @@ public partial class MainWindow : Window
opts.FileTypeFilter = new[] { type }; opts.FileTypeFilter = new[] { type };
var paths = await StorageProvider.OpenFilePickerAsync(opts); var paths = await StorageProvider.OpenFilePickerAsync(opts);
if (paths?.Count <= 0) return; if (paths?.Count <= 0) return;
//if (LstSettingsCustomers.SelectedIndex < 0) return;
var selected_path = paths[0].Path; var selected_path = paths[0].Path;
foreach (var customer in Settings._instance.customers.customers) foreach (var customer in Settings._instance.customers.customers)
if (customer.ID == ((Customer)LstSettingsCustomers.SelectedItems[0]).ID) if (customer.ID == ((Customer)LstSettingsCustomers.SelectedItems[0]).ID)
customer.patch = AddressPatch.Import(selected_path); customer.patch = AddressPatch.Import(selected_path);
Settings.Save(); Settings.Save();
} catch (Exception ex) } catch (Exception ex)
{ {
@@ -776,13 +746,12 @@ public partial class MainWindow : Window
MessageBox.Show(this, "Unknown Error: " + ex.Message, "Error"); MessageBox.Show(this, "Unknown Error: " + ex.Message, "Error");
Logger.Log($"Error while converting: {ex.Message}", Logger.LogType.Error); Logger.Log($"Error while converting: {ex.Message}", Logger.LogType.Error);
} }
} }
private void BtnCombineDifference_OnClick(object? sender, RoutedEventArgs e) private void BtnCombineDifference_OnClick(object? sender, RoutedEventArgs e)
{ {
var list = new List<KasAddressList>(); var list = new List<KasAddressList>();
foreach (var item in LstCustomerAdressSets.SelectedItems) foreach (var item in LstCombineAddressSetSort.Items)
list.Add((KasAddressList)item); list.Add((KasAddressList)item);
try try
{ {
@@ -797,7 +766,7 @@ public partial class MainWindow : Window
private void BtnCombineUnion_OnClick(object? sender, RoutedEventArgs e) private void BtnCombineUnion_OnClick(object? sender, RoutedEventArgs e)
{ {
var list = new List<KasAddressList>(); var list = new List<KasAddressList>();
foreach (var item in LstCustomerAdressSets.SelectedItems) foreach (var item in LstCombineAddressSetSort.Items)
list.Add((KasAddressList)item); list.Add((KasAddressList)item);
try try
{ {
@@ -813,7 +782,7 @@ public partial class MainWindow : Window
private void BtnCombineIntersection_OnClick(object? sender, RoutedEventArgs e) private void BtnCombineIntersection_OnClick(object? sender, RoutedEventArgs e)
{ {
var list = new List<KasAddressList>(); var list = new List<KasAddressList>();
foreach (var item in LstCustomerAdressSets.SelectedItems) foreach (var item in LstCombineAddressSetSort.Items)
list.Add((KasAddressList)item); list.Add((KasAddressList)item);
try try
{ {
@@ -830,7 +799,8 @@ public partial class MainWindow : Window
if (RbComprefsid.IsChecked == true) if (RbComprefsid.IsChecked == true)
{ {
return CombineAddresses.CombineType.refsid; return CombineAddresses.CombineType.refsid;
} else if (RbCompfinAd.IsChecked == true) }
if (RbCompfinAd.IsChecked == true)
{ {
return CombineAddresses.CombineType.final_adress; return CombineAddresses.CombineType.final_adress;
} }
@@ -841,7 +811,7 @@ public partial class MainWindow : Window
private void BtnCombineSymmetricDifference_OnClick(object? sender, RoutedEventArgs e) private void BtnCombineSymmetricDifference_OnClick(object? sender, RoutedEventArgs e)
{ {
var list = new List<KasAddressList>(); var list = new List<KasAddressList>();
foreach (var item in LstCustomerAdressSets.SelectedItems) foreach (var item in LstCombineAddressSetSort.Items)
list.Add((KasAddressList)item); list.Add((KasAddressList)item);
StartCombine(list, Convert.ToInt32((LstCustomers.SelectedItem as Customer).ID), "symdiff", GetCombiningTyp()); StartCombine(list, Convert.ToInt32((LstCustomers.SelectedItem as Customer).ID), "symdiff", GetCombiningTyp());
@@ -892,8 +862,10 @@ public partial class MainWindow : Window
filePath filePath
); );
Logger.Log("PDF OK"); Logger.Log("PDF seems OK");
} }
RefreshAddressSetListItems((LstCustomers.SelectedItem as Customer).ID);
} }
catch (Exception ex) catch (Exception ex)
@@ -1089,9 +1061,7 @@ public partial class MainWindow : Window
} }
if (_selectedCountry == null) return; if (_selectedCountry == null) return;
//Console.WriteLine("Refreshing alternatives...");
foreach (var a in _selectedCountry.alternatives) LbSettingsAlternatives.Items.Add(a); foreach (var a in _selectedCountry.alternatives) LbSettingsAlternatives.Items.Add(a);
//Console.WriteLine(a);
TbSettingsCountryName.Text = _selectedCountry.name; TbSettingsCountryName.Text = _selectedCountry.name;
TbSettingsCountryTranslation.Text = _selectedCountry.translation; TbSettingsCountryTranslation.Text = _selectedCountry.translation;
@@ -1246,7 +1216,6 @@ public partial class MainWindow : Window
if (set.ID == id) if (set.ID == id)
{ {
curr_set = set; curr_set = set;
} }
@@ -1309,7 +1278,6 @@ public partial class MainWindow : Window
{ {
Logger.Log($"Error while changing CSV divider: {ex.Message}", Logger.LogType.Error); Logger.Log($"Error while changing CSV divider: {ex.Message}", Logger.LogType.Error);
} }
} }
private async void MnIAdSetDelete_OnClick(object? sender, RoutedEventArgs e) private async void MnIAdSetDelete_OnClick(object? sender, RoutedEventArgs e)
@@ -1327,14 +1295,14 @@ public partial class MainWindow : Window
Settings.Save(); Settings.Save();
RefreshAddressSetListItems(cus_id); RefreshAddressSetListItems(cus_id);
break; break;
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(this, ex.StackTrace, "Fehler"); MessageBox.Show(this, ex.StackTrace, "Fehler");
Logger.Log($"Error while deleting address set: {ex.Message}", Logger.LogType.Error); Logger.Log($"Error while deleting address set: {ex.Message}", Logger.LogType.Error);
}} }
}
} }
private void Tb_OnTextChanged(object? sender, TextChangedEventArgs e) private void Tb_OnTextChanged(object? sender, TextChangedEventArgs e)
@@ -1346,4 +1314,67 @@ public partial class MainWindow : Window
{ {
PopulateNavTree(); PopulateNavTree();
} }
private void BtnRepair_OnClick(object? sender, RoutedEventArgs e)
{
MakeCalcManVisible();
if (LstCustomerAdressSets.SelectedIndex == -1)
{
MessageBox.Show(null, "Bitte zunächst ein Adress-Set auswählen", "Kein Adress-Set ausgewählt");
return;
}
StartAddressRepairer((KasAddressList)LstCustomerAdressSets.SelectedItem);
}
private void BtnCombineAddressSetSortUp_OnClick(object? sender, RoutedEventArgs e)
{
var selected = (LstCombineAddressSetSort.SelectedItem as KasAddressList);
int index = LstCombineAddressSetSort.SelectedIndex;
if (LstCombineAddressSetSort.SelectedIndex != null && LstCombineAddressSetSort.SelectedIndex != -1)
{
try
{
LstCombineAddressSetSort.Items.RemoveAt(index);
LstCombineAddressSetSort.Items.Insert(index-1, selected);
LstCombineAddressSetSort.SelectedIndex = index - 1;
} catch {}
}
}
private void BtnCombineAddressSetSortDown_OnClick(object? sender, RoutedEventArgs e)
{
var selected = (LstCombineAddressSetSort.SelectedItem as KasAddressList);
int index = LstCombineAddressSetSort.SelectedIndex;
if (LstCombineAddressSetSort.SelectedIndex != null && LstCombineAddressSetSort.SelectedIndex != -1)
{
try
{
LstCombineAddressSetSort.Items.RemoveAt(index);
LstCombineAddressSetSort.Items.Insert(index+1, selected);
LstCombineAddressSetSort.SelectedIndex = index + 1;
} catch {}
}
}
private void LstCombineAddressSetSort_OnSelectionChanged(object? sender, SelectionChangedEventArgs e)
{
if (LstCombineAddressSetSort.SelectedIndex == 0)
{
BtnCombineAddressSetSortDown.IsEnabled = true;
BtnCombineAddressSetSortUp.IsEnabled = false;
} else if (LstCombineAddressSetSort.SelectedIndex == LstCombineAddressSetSort.Items.Count - 1)
{
BtnCombineAddressSetSortUp.IsEnabled = true;
BtnCombineAddressSetSortDown.IsEnabled = false;
} else if (LstCombineAddressSetSort.SelectedIndex == LstCombineAddressSetSort.Items.Count - 1 && LstCombineAddressSetSort.SelectedIndex == 0)
{
BtnCombineAddressSetSortUp.IsEnabled = false;
BtnCombineAddressSetSortDown.IsEnabled = false;
} else
{
BtnCombineAddressSetSortDown.IsEnabled = true;
BtnCombineAddressSetSortUp.IsEnabled = true;
}
}
} }
-1
View File
@@ -40,7 +40,6 @@ public partial class NamingWindow : Window
AddButton("Ok"); AddButton("Ok");
var tcs = new TaskCompletionSource<string>(); var tcs = new TaskCompletionSource<string>();
wind.Closed += delegate { tcs.TrySetResult(res); }; wind.Closed += delegate { tcs.TrySetResult(res); };
if (parent != null) if (parent != null)
+103
View File
@@ -0,0 +1,103 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" Icon="assets/icon.ico"
xmlns:local="using:Logof_Client"
x:Class="Logof_Client.PreviewWindow"
Title="Datensätze bearbeiten" x:DataType="local:PreviewWindow">
<Grid Grid.ColumnDefinitions="*">
<ScrollViewer Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<DataGrid x:Name="AddressGrid"
ItemsSource="{Binding Addresses}"
AutoGenerateColumns="False"
IsReadOnly="False"
SelectionMode="Extended"
GridLinesVisibility="All">
<DataGrid.Columns>
<DataGridTextColumn Header="ID"
Binding="{Binding id}"
IsReadOnly="True" />
<DataGridTextColumn Header="RefSID"
Binding="{Binding refsid}" />
<DataGridTextColumn Header="Anrede"
Binding="{Binding anrede}" />
<DataGridTextColumn Header="Titel"
Binding="{Binding titel}" />
<DataGridTextColumn Header="Vorname"
Binding="{Binding vorname}" />
<DataGridTextColumn Header="Adel"
Binding="{Binding adel}" />
<DataGridTextColumn Header="Name"
Binding="{Binding name}" />
<DataGridTextColumn Header="Namenszusatz"
Binding="{Binding namezus}" />
<DataGridTextColumn Header="Anredzusatz"
Binding="{Binding anredzus}" />
<DataGridTextColumn Header="Straße"
Binding="{Binding strasse}" />
<DataGridTextColumn Header="Straße 2"
Binding="{Binding strasse2}" />
<DataGridTextColumn Header="PLZ"
Binding="{Binding plz}" />
<DataGridTextColumn Header="Ort"
Binding="{Binding ort}" />
<DataGridTextColumn Header="Land"
Binding="{Binding land}" />
<DataGridTextColumn Header="PPLZ"
Binding="{Binding pplz}" />
<DataGridTextColumn Header="Postfach"
Binding="{Binding postfach}" />
<DataGridTextColumn Header="Name 1"
Binding="{Binding name1}" />
<DataGridTextColumn Header="Name 2"
Binding="{Binding name2}" />
<DataGridTextColumn Header="Name 3"
Binding="{Binding name3}" />
<DataGridTextColumn Header="Name 4"
Binding="{Binding name4}" />
<DataGridTextColumn Header="Name 5"
Binding="{Binding name5}" />
<DataGridTextColumn Header="Funktion"
Binding="{Binding funktion}" />
<DataGridTextColumn Header="Funktion 2"
Binding="{Binding funktion2}" />
<DataGridTextColumn Header="Abteilung"
Binding="{Binding abteilung}" />
<DataGridTextColumn Header="Funktion AD"
Binding="{Binding funktionad}" />
</DataGrid.Columns>
</DataGrid>
<!-- <StackPanel x:Name="StkResults" Orientation="Vertical" Margin="10" /> -->
</ScrollViewer>
</Grid>
</Window>
+33
View File
@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Layout;
using Avalonia.Media;
namespace Logof_Client;
using System.ComponentModel;
using System.Runtime.CompilerServices;
public partial class PreviewWindow : Window, INotifyPropertyChanged
{
public PreviewWindow(IEnumerable<KasPerson> addresses)
{
InitializeComponent();
Addresses = new ObservableCollection<KasPerson>(addresses);
DataContext = this;
}
public ObservableCollection<KasPerson> Addresses { get; }
}
-1
View File
@@ -19,6 +19,5 @@ public partial class ProgressWindow : Window
public void AddToLog(string message, string percent) public void AddToLog(string message, string percent)
{ {
TbLog.Text = message + $"\n{percent}%"; TbLog.Text = message + $"\n{percent}%";
//ScvLog.ScrollToEnd();
} }
} }
+61 -2
View File
@@ -3,8 +3,9 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" Icon="assets/icon.ico" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" Icon="assets/icon.ico"
xmlns:local="using:Logof_Client"
x:Class="Logof_Client.ResultWindow" x:Class="Logof_Client.ResultWindow"
Title="Ergebnis"> Title="Ergebnis" x:DataType="local:ResultWindow">
<Grid Grid.ColumnDefinitions="200,*"> <Grid Grid.ColumnDefinitions="200,*">
<Grid> <Grid>
<Label Content="Filter" Margin="10,10,10,0" HorizontalAlignment="Stretch" VerticalAlignment="Top" /> <Label Content="Filter" Margin="10,10,10,0" HorizontalAlignment="Stretch" VerticalAlignment="Top" />
@@ -21,7 +22,65 @@
</Grid> </Grid>
<ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> <ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<!-- <TextBlock x:Name="TbResults"></TextBlock> --> <!-- <TextBlock x:Name="TbResults"></TextBlock> -->
<ListBox x:Name="LbResults"></ListBox> <!-- <ListBox x:Name="LbResults"></ListBox> -->
<!-- <DataGrid ItemsSource="{Binding Results}" IsReadOnly="True" -->
<!-- AutoGenerateColumns="False"> -->
<!-- -->
<!-- -->
<!-- <DataGrid.Columns> -->
<!-- <DataGridTextColumn Header="ID" -->
<!-- Binding="{Binding PersonId}" /> -->
<!-- -->
<!-- <DataGridTextColumn Header="Name" -->
<!-- Binding="{Binding Name}" /> -->
<!-- -->
<!-- <DataGridTextColumn Header="Errors" -->
<!-- Binding="{Binding Errors}" /> -->
<!-- -->
<!-- <DataGridTextColumn Header="Warnings" -->
<!-- Binding="{Binding Warnings}" /> -->
<!-- -->
<!-- <DataGridTextColumn Header="Refsid" -->
<!-- Binding="{Binding Refsid}" /> -->
<!-- </DataGrid.Columns> -->
<!-- -->
<!-- </DataGrid> -->
<ListBox ItemsSource="{Binding Results}" SelectionMode="Multiple" x:Name="LbResults" SelectedItems="{Binding SelectedResults}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="{Binding PersonId}" />
<TextBlock Grid.Column="1"
Text="{Binding Refsid}" />
<TextBlock Grid.Column="2"
Text="{Binding Name}" />
<TextBlock Grid.Column="3"
Text="{Binding Errors}" />
<TextBlock Grid.Column="4"
Text="{Binding Warnings}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<!-- <StackPanel x:Name="StkResults" Orientation="Vertical" Margin="10" /> --> <!-- <StackPanel x:Name="StkResults" Orientation="Vertical" Margin="10" /> -->
</ScrollViewer> </ScrollViewer>
+84 -75
View File
@@ -1,6 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Runtime.CompilerServices;
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Interactivity; using Avalonia.Interactivity;
@@ -8,79 +11,72 @@ using Avalonia.Layout;
using Avalonia.Media; using Avalonia.Media;
namespace Logof_Client; namespace Logof_Client;
using System.ComponentModel;
using System.Runtime.CompilerServices;
public partial class ResultWindow : Window public partial class ResultWindow : Window, INotifyPropertyChanged
{ {
public event PropertyChangedEventHandler? PropertyChanged;
private List<ResultItem> _results = new();
public List<ResultItem> Results
{
get => _results;
private set
{
_results = value;
PropertyChanged?.Invoke(
this,
new PropertyChangedEventArgs(nameof(Results))
);
}
}
public List<CheckBox> errortypecheckboxes = new(); public List<CheckBox> errortypecheckboxes = new();
public KasAddressList ur_addresses = new("Ergebnis_" + DateTime.Now.ToString("ddMMyy_HHmmss")); public KasAddressList ur_addresses = new("Ergebnis_" + DateTime.Now.ToString("ddMMyy_HHmmss"));
public List<KasPerson> ur_result; public List<KasPerson> ur_result;
public List<CheckBox> warningtypecheckboxes = new(); public List<CheckBox> warningtypecheckboxes = new();
public List<ResultItem>? SelectedResults { get; set; }
public ResultWindow(List<KasPerson> result, public ResultWindow(List<KasPerson> result, int addressSetID)
int addressSetID)
{ {
InitializeComponent(); InitializeComponent();
DataContext = this;
ur_result = result; ur_result = result;
ur_addresses = ur_addresses;
Load(result); Load(result);
//ViewSingle(200552426);
} }
private void GenerateView(List<KasPerson> result) //public List<ResultItem> Results { get; private set; } = new();
{ private void GenerateView(List<KasPerson> result) {
try try
{ {
// Filter to only show persons with errors // Filter to only show persons with errors
var result_with_errors = result.Where(p => p.PersonError != null).ToList(); var result_with_errors = result.Where(p => p.PersonError != null).ToList();
LblResultCount.Content = $"{result_with_errors.Count}/{ur_result.Count} Ergebnisse"; LblResultCount.Content = $"{result_with_errors.Count}/{ur_result.Count} Ergebnisse";
//LbResults.Items.Clear();
// TbResults.Text = ""; // foreach (var person in result_with_errors)
// foreach (var person in result_with_errors) TbResults.Text += person.PersonError.GetString()+"\n"; // LbResults.Items.Add(person.PersonError.ToString(person));
LbResults.Items.Clear(); Results = result_with_errors
foreach (var person in result_with_errors) LbResults.Items.Add(person.PersonError.ToString(person)); .Select(person => new ResultItem
// StkResults.Children.Clear(); {
// foreach (var person in result_with_errors) StkResults.Children.Add(CreatePersonGrid(person)); Person = person,
PersonId = person.id,
Name = $"{person.vorname} {person.name}".Trim(),
Errors = string.Join(", ", person.PersonError.errors),
Warnings = string.Join(", ", person.PersonError.warnings),
Refsid = person.refsid.ToString() ?? ""
})
.ToList();
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.Log("Error while generating result view: " + ex.Message, Logger.LogType.Warning); Logger.Log("Error while generating result view: " + ex.Message, Logger.LogType.Warning);
}
} }
private Grid CreatePersonGrid(KasPerson person)
{
var grid = new Grid
{
ColumnDefinitions = ColumnDefinitions.Parse("100,*,100,*,100,*"),
RowDefinitions = RowDefinitions.Parse("Auto"),
Margin = new Thickness(0, 5, 0, 5),
Background = new SolidColorBrush(Color.Parse("#F0F0F0"))
};
// ID
grid.Children.Add(new TextBlock
{
Text = "id: ",
FontWeight = FontWeight.Bold, Margin = new Thickness(5)
});
grid.Children.Add(new TextBlock { Text = person.id.ToString(), Margin = new Thickness(5) });
Grid.SetColumn(grid.Children[1], 1);
// PLZ
grid.Children.Add(new TextBlock { Text = "plz:", FontWeight = FontWeight.Bold, Margin = new Thickness(5) });
Grid.SetColumn(grid.Children[2], 2);
grid.Children.Add(new TextBlock { Text = person.plz, Margin = new Thickness(5) });
Grid.SetColumn(grid.Children[3], 3);
// PPLZ
grid.Children.Add(new TextBlock { Text = "errors:", FontWeight = FontWeight.Bold, Margin = new Thickness(5) });
Grid.SetColumn(grid.Children[4], 4);
grid.Children.Add(new TextBlock { Text = person.PersonError.GetString(), Margin = new Thickness(5) });
Grid.SetColumn(grid.Children[5], 5);
return grid;
} }
private void ViewSingle(int id) private void ViewSingle(int id)
@@ -139,7 +135,7 @@ public partial class ResultWindow : Window
var cb = new CheckBox(); var cb = new CheckBox();
cb.IsChecked = true; cb.IsChecked = true;
cb.Content = errtype.ToString(); cb.Content = errtype.ToString();
//cb.Click += (sender, e) => UpdateFilter();
errortypecheckboxes.Add(cb); errortypecheckboxes.Add(cb);
StpFilterOptions.Children.Add(cb); StpFilterOptions.Children.Add(cb);
} }
@@ -149,7 +145,7 @@ public partial class ResultWindow : Window
var cb = new CheckBox(); var cb = new CheckBox();
cb.IsChecked = true; cb.IsChecked = true;
cb.Content = wartype.ToString(); cb.Content = wartype.ToString();
//cb.Click += (sender, e) => UpdateFilter();
warningtypecheckboxes.Add(cb); warningtypecheckboxes.Add(cb);
StpFilterOptions.Children.Add(cb); StpFilterOptions.Children.Add(cb);
} }
@@ -163,10 +159,6 @@ public partial class ResultWindow : Window
} }
private void BtnUpdateFilter_OnClick(object? sender, RoutedEventArgs e)
{
}
private void UpdateFilter() private void UpdateFilter()
{ {
try try
@@ -224,12 +216,10 @@ public partial class ResultWindow : Window
LblResultCount.Content = $"{temp_result.Count}/{ur_result.Count} Ergebnisse"; LblResultCount.Content = $"{temp_result.Count}/{ur_result.Count} Ergebnisse";
LbResults.Items.Clear(); //LbResults.Items.Clear();
foreach (var person in temp_result) LbResults.Items.Add(person.PersonError.ToString(person)); GenerateView(temp_result);
// TbResults.Text = ""; //foreach (var person in temp_result) LbResults.Items.Add(person.PersonError.ToString(person));
// foreach (var person in temp_result) TbResults.Text += person.PersonError.GetString() +"\n";
// StkResults.Children.Clear();
// foreach (var person in temp_result) StkResults.Children.Add(CreatePersonGrid(person));
} catch (Exception ex) } catch (Exception ex)
{ {
Logger.Log("Error while updating filter: " + ex.Message, Logger.LogType.Warning); Logger.Log("Error while updating filter: " + ex.Message, Logger.LogType.Warning);
@@ -240,16 +230,20 @@ public partial class ResultWindow : Window
private void BtnShowSelected_OnClick(object? sender, RoutedEventArgs e) private void BtnShowSelected_OnClick(object? sender, RoutedEventArgs e)
{ {
// foreach (var selected in DgResult.SelectedItems) if (LbResults.SelectedItems.Count > 0)
// try {
// { var selectedPersons = LbResults.SelectedItems
// var _asKas = (KasPerson)selected; .Cast<ResultItem>()
// ViewSingle(_asKas.id); .Select(x => x.Person)
// } .ToList();
// catch (Exception ex)
// { if (selectedPersons.Count == 0)
// Console.WriteLine(ex.Message); return;
// }
var preview = new PreviewWindow(selectedPersons);
preview.Show();
}
} }
private void BtnExecuteFilter_OnClick(object? sender, RoutedEventArgs e) private void BtnExecuteFilter_OnClick(object? sender, RoutedEventArgs e)
@@ -257,4 +251,19 @@ public partial class ResultWindow : Window
Console.WriteLine("Updating filter..."); Console.WriteLine("Updating filter...");
UpdateFilter(); UpdateFilter();
} }
} //public ObservableCollection<ResultItem> Results { get; } = new();
}
public class ResultItem
{
public int PersonId { get; init; }
public string Name { get; init; } = "";
public string Errors { get; init; } = "";
public string Warnings { get; init; } = "";
public string Refsid { get; init; } = "";
public KasPerson Person { get; init; } = null!;
}
-2
View File
@@ -8,6 +8,4 @@ public partial class StartupWindow : Window
{ {
InitializeComponent(); InitializeComponent();
} }
} }
+73 -79
View File
@@ -58,6 +58,33 @@ public class AddressCheck
await Task.Run(async () => await Task.Run(async () =>
{ {
// Refsids, die mehrfach vorkommen
var doubledRefsids = adset.KasPersons
.Where(p => p.refsid > 0)
.GroupBy(p => p.refsid)
.Where(g => g.Count() > 1)
.ToDictionary(g => g.Key, g => true);
// Adressen, die mehrfach vorkommen
var doubledAddresses = adset.KasPersons
.GroupBy(p => (
p.name,
p.strasse,
p.vorname,
p.ort,
p.funktion,
p.funktion2,
p.funktionad,
p.abteilung,
p.name1,
p.name2,
p.name3,
p.name4,
p.name5))
.Where(g => g.Count() > 1)
.ToDictionary(g => g.Key, g => true);
foreach (var person in adset.KasPersons) foreach (var person in adset.KasPersons)
{ {
var errors = new List<ErrorTypes>(); var errors = new List<ErrorTypes>();
@@ -79,20 +106,6 @@ public class AddressCheck
hasFaults = true; hasFaults = true;
errors.Add(ErrorTypes.PlzNotUsable); 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);
// }
} }
@@ -109,21 +122,6 @@ public class AddressCheck
hasFaults = true; hasFaults = true;
errors.Add(ErrorTypes.PPlzNotUsable); 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 (warnings.Contains(WarningTypes.NoPLZ) && warnings.Contains(WarningTypes.NoPPLZ)) if (warnings.Contains(WarningTypes.NoPLZ) && warnings.Contains(WarningTypes.NoPPLZ))
@@ -184,47 +182,34 @@ public class AddressCheck
} }
// Address-Component-Count // Address-Component-Count
if (!string.IsNullOrWhiteSpace(person.strasse2)) address_component_count++; // Double-Refsid
if (!string.IsNullOrWhiteSpace(person.land)) address_component_count++; if (person.refsid > 0 &&
if (!string.IsNullOrWhiteSpace(person.name1)) address_component_count++; doubledRefsids.ContainsKey(person.refsid))
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; hasFaults = true;
warnings.Add(WarningTypes.DoubledRefsid);
if (person.refsid == person2.refsid) // trifft auf Patch-Addressen nicht zu }
{
hasFaults = true; // Double-Address
warnings.Add(WarningTypes.DoubledRefsid); var addressKey = (
} person.name,
person.strasse,
if (person.name == person2.name && person.vorname,
person.strasse == person2.strasse && person.ort,
person.vorname == person2.vorname && person.funktion,
person.ort == person2.ort && person.funktion2,
person.funktion == person2.funktion && person.funktionad,
person.funktion2 == person2.funktion2 && person.abteilung,
person.funktionad == person2.funktionad && person.name1,
person.abteilung == person2.abteilung && person.name2,
person.name1 == person2.name1 && person.name3,
person.name2 == person2.name2 && person.name4,
person.name3 == person2.name3 && person.name5);
person.name4 == person2.name4 &&
person.name5 == person2.name5) // if (doubledAddresses.ContainsKey(addressKey))
{
{ hasFaults = true;
hasFaults = true; errors.Add(ErrorTypes.MayBeSameAddress);
errors.Add(ErrorTypes.MayBeSameAddress);
}
} }
// Adressen-Länge // Adressen-Länge
@@ -246,16 +231,26 @@ public class AddressCheck
} }
// Fortschritt aktualisieren // Fortschritt aktualisieren
Interlocked.Increment(ref current); // Interlocked.Increment(ref current);
var percent = current / (double)total * 100; // var percent = current / (double)total * 100;
await Dispatcher.UIThread.InvokeAsync(() => // await Dispatcher.UIThread.InvokeAsync(() =>
{ // {
if (hasFaults) // if (hasFaults)
_progress.AddToLog($"Person mit id {person.id} ist fehlerhaft", // _progress.AddToLog($"Person mit id {person.id} ist fehlerhaft",
Convert.ToInt32(percent).ToString()); // Convert.ToInt32(percent).ToString());
//
// _progress.ChangePercentage(percent);
// });
var cd = Interlocked.Increment(ref current);
_progress.ChangePercentage(percent); if (cd % 10 == 0)
}); {
var percent = cd / (double)total * 100;
await Dispatcher.UIThread.InvokeAsync(() =>
_progress.ChangePercentage(percent));
}
} }
}); });
@@ -265,7 +260,6 @@ public class AddressCheck
return Settings._instance.addressSets.addresses[adset_index].KasPersons return Settings._instance.addressSets.addresses[adset_index].KasPersons
.Where(p => p.PersonError != null) .Where(p => p.PersonError != null)
.ToList(); .ToList();
} }
catch (Exception ex) catch (Exception ex)
{ {
+3 -37
View File
@@ -5,36 +5,6 @@ namespace Logof_Client;
public static class AddressCreator public static class AddressCreator
{ {
//+++ 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> /// <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>
@@ -93,7 +63,7 @@ public static class AddressCreator
} }
CountryFound: CountryFound:
string_address = "**" + countryToShow + "**"; // Needs to be bold string_address = "**" + countryToShow + "**"; // bold
address_line_count++; address_line_count++;
} }
@@ -125,8 +95,7 @@ public static class AddressCreator
string_address = nameline + "\n" + string_address; string_address = nameline + "\n" + string_address;
address_line_count++; address_line_count++;
} }
// REIHENFOLGE
var nameattribs = new[] var nameattribs = new[]
{ address.name1, address.name2, address.name3, address.name4, address.name5, address.abteilung }; { address.name1, address.name2, address.name3, address.name4, address.name5, address.abteilung };
@@ -152,7 +121,6 @@ public static class AddressCreator
{ {
string plz = address.plz; string plz = address.plz;
if (address.IsGermany()) plz = NormalizeGermanPLZ(address.plz); if (address.IsGermany()) plz = NormalizeGermanPLZ(address.plz);
KasPerson.SetUsedPLZ(id, plz); KasPerson.SetUsedPLZ(id, plz);
string_address = plz + " " + address.ort + "\n" + string_address; string_address = plz + " " + address.ort + "\n" + string_address;
@@ -214,8 +182,7 @@ public static class AddressCreator
.Where(s => !string.IsNullOrWhiteSpace(s)) .Where(s => !string.IsNullOrWhiteSpace(s))
) )
+ (string.IsNullOrWhiteSpace(namezus) ? "" : $" ({namezus.Trim()})"); + (string.IsNullOrWhiteSpace(namezus) ? "" : $" ({namezus.Trim()})");
// else
return string.Join(" ", return string.Join(" ",
new[] { anrede, titel, vorname, adel, name } new[] { anrede, titel, vorname, adel, name }
.Where(s => !string.IsNullOrWhiteSpace(s)) .Where(s => !string.IsNullOrWhiteSpace(s))
@@ -271,7 +238,6 @@ public static class AddressCreator
} }
return false; return false;
} }
public static string NormalizeGermanPLZ(string plz) public static string NormalizeGermanPLZ(string plz)
+31 -34
View File
@@ -63,37 +63,37 @@ public class AddressPatch
{ {
var patch = new AddressPatch(); var patch = new AddressPatch();
// Alle Zeilen aus der Datei laden // Alle Zeilen aus der Datei laden
var lines = File.ReadAllLines(filename.LocalPath); var lines = File.ReadAllLines(filename.LocalPath);
// Alle Properties der Klasse (Strings und bools) // Alle Properties der Klasse (Strings und bools)
var properties = typeof(AddressPatch).GetProperties(BindingFlags.Public | BindingFlags.Instance); var properties = typeof(AddressPatch).GetProperties(BindingFlags.Public | BindingFlags.Instance);
// Nur die Properties, die mit _is enden (also die String-Werte) // Nur die Properties, die mit _is enden (also die String-Werte)
var stringProps = properties.Where(p => p.PropertyType == typeof(string) && p.Name.EndsWith("_is")); var stringProps = properties.Where(p => p.PropertyType == typeof(string) && p.Name.EndsWith("_is"));
foreach (var prop in stringProps) foreach (var prop in stringProps)
{ {
// Beispiel: prop.Name = "name_is" // Beispiel: prop.Name = "name_is"
var baseName = prop.Name.Substring(0, prop.Name.Length - 3); // "name" var baseName = prop.Name.Substring(0, prop.Name.Length - 3); // "name"
// In der Datei wird nach "name:" gesucht (ohne _is) // In der Datei wird nach "name:" gesucht (ohne _is)
var line = lines.FirstOrDefault(l => l.StartsWith(baseName + ":")); var line = lines.FirstOrDefault(l => l.StartsWith(baseName + ":"));
if (line != null) if (line != null)
{ {
// Wert extrahieren (alles nach dem Doppelpunkt) // Wert extrahieren (alles nach dem Doppelpunkt)
var value = line.Substring(line.IndexOf(':') + 1).Trim(); var value = line.Substring(line.IndexOf(':') + 1).Trim();
// Wert im Patch-Objekt setzen // Wert im Patch-Objekt setzen
prop.SetValue(patch, value); prop.SetValue(patch, value);
// Passendes has_ Feld aktivieren, z.B. "has_name" // Passendes has_ Feld aktivieren, z.B. "has_name"
var hasProp = properties.FirstOrDefault(p => p.Name == "has_" + baseName); var hasProp = properties.FirstOrDefault(p => p.Name == "has_" + baseName);
if (hasProp != null && hasProp.PropertyType == typeof(bool)) hasProp.SetValue(patch, true); if (hasProp != null && hasProp.PropertyType == typeof(bool)) hasProp.SetValue(patch, true);
} }
} }
return patch; return patch;
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -101,8 +101,6 @@ public class AddressPatch
} }
return null; return null;
} }
@@ -135,6 +133,5 @@ public class AddressPatch
} }
return "Error while parsing"; return "Error while parsing";
} }
} }
+14 -8
View File
@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks;
namespace Logof_Client; namespace Logof_Client;
@@ -7,20 +8,25 @@ public class AddressRepair(ProgressWindow progressWindow)
{ {
private readonly ProgressWindow _progress = progressWindow; private readonly ProgressWindow _progress = progressWindow;
public KasAddressList Perform(KasAddressList all_addresses, public async Task Perform(KasAddressList list)
List<(int, List<AddressCheck.ErrorTypes>)> failed_addresses)
{ {
try try
{ {
foreach (var person in list.KasPersons)
{
// German PLZ too short (e.g. Dresden)
if (person.IsGermany() && person.plz.Length <= 4)
{
while (person.plz.Length <= 4)
{
person.plz = "0" + person.plz;
}
}
}
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.Log($"Error while performing address repair: {ex.Message}", Logger.LogType.Error); Logger.Log($"Error while performing address shortener: {ex.Message}", Logger.LogType.Error);
} }
return null;
return null;
} }
} }
+50 -53
View File
@@ -8,72 +8,69 @@ namespace Logof_Client;
public class AddressShortener(ProgressWindow progressWindow) public class AddressShortener(ProgressWindow progressWindow)
{ {
private readonly ProgressWindow _progress = progressWindow;
public async Task Perform(KasAddressList list) public async Task Perform(KasAddressList list)
{ {
try try
{ {
List<int> doubled_ids = new List<int>(); List<int> doubled_ids = new List<int>();
for (int i = 0; i < list.KasPersons.Count; i++) for (int i = 0; i < list.KasPersons.Count; i++)
{ {
var address = list.KasPersons[i]; var address = list.KasPersons[i];
for (int j = 0; j < list.KasPersons.Count; j++) for (int j = 0; j < list.KasPersons.Count; j++)
{ {
if (i == j) continue; if (i == j) continue;
var sec_address = list.KasPersons[j]; var sec_address = list.KasPersons[j];
if (address.refsid == sec_address.refsid && !doubled_ids.Contains(address.refsid) && address.refsid != 0)
{
doubled_ids.Add(address.refsid);
}
}
}
if (address.refsid == sec_address.refsid && !doubled_ids.Contains(address.refsid) && address.refsid != 0)
// delete doubled addresses by refsid
foreach (int id in doubled_ids)
{ {
// does this remove both of the doubled addresses? doubled_ids.Add(address.refsid);
list.KasPersons.Remove(list.KasPersons.FirstOrDefault(x => x.refsid == id));
} }
}
}
List<int> toRemove = new List<int>(); // delete doubled addresses by refsid
foreach (var address in list.KasPersons) foreach (int id in doubled_ids)
{
// does this remove both of the doubled addresses?
list.KasPersons.Remove(list.KasPersons.FirstOrDefault(x => x.refsid == id));
}
List<int> toRemove = new List<int>();
foreach (var address in list.KasPersons)
{
try
{
if (address.PersonError.errors.Contains(AddressCheck.ErrorTypes.NoPLZorPPLZ))
{ {
try toRemove.Add(address.id);
{
if (address.PersonError.errors.Contains(AddressCheck.ErrorTypes.NoPLZorPPLZ))
{
toRemove.Add(address.id);
}
else if (address.PersonError.errors.Contains(AddressCheck.ErrorTypes.PlzNotUsable) &&
address.PersonError.errors.Contains(AddressCheck.ErrorTypes.PPlzNotUsable))
{
toRemove.Add(address.id);
} else if (address.PersonError.errors.Contains(AddressCheck.ErrorTypes.PlzNotUsable) &&
address.PersonError.warnings.Contains(AddressCheck.WarningTypes.NoPPLZ))
{
toRemove.Add(address.id);
}
else if (address.PersonError.errors.Contains(AddressCheck.ErrorTypes.PPlzNotUsable) &&
address.PersonError.warnings.Contains(AddressCheck.WarningTypes.NoPLZ))
{
toRemove.Add(address.id);
}
}
catch
{
Console.WriteLine("PersonError not accessible: " + address.id);
}
} }
else if (address.PersonError.errors.Contains(AddressCheck.ErrorTypes.PlzNotUsable) &&
// delete doubled addresses by refsid address.PersonError.errors.Contains(AddressCheck.ErrorTypes.PPlzNotUsable))
foreach (int id in toRemove)
{ {
// does this remove both of the doubled addresses? toRemove.Add(address.id);
list.KasPersons.Remove(list.KasPersons.Find(x => x.id == id)); } else if (address.PersonError.errors.Contains(AddressCheck.ErrorTypes.PlzNotUsable) &&
address.PersonError.warnings.Contains(AddressCheck.WarningTypes.NoPPLZ))
{
toRemove.Add(address.id);
} }
else if (address.PersonError.errors.Contains(AddressCheck.ErrorTypes.PPlzNotUsable) &&
address.PersonError.warnings.Contains(AddressCheck.WarningTypes.NoPLZ))
{
toRemove.Add(address.id);
}
}
catch
{
Console.WriteLine("PersonError not accessible: " + address.id);
}
}
// delete doubled addresses by refsid
foreach (int id in toRemove)
{
// does this remove both of the doubled addresses?
list.KasPersons.Remove(list.KasPersons.Find(x => x.id == id));
}
} }
catch (Exception ex) catch (Exception ex)
{ {
+10 -19
View File
@@ -30,15 +30,15 @@ public class CombineAddresses
{ {
var result = await Execute(address_lists,type,comb_type,exportUnused); var result = await Execute(address_lists,type,comb_type,exportUnused);
if (deleteOld == true) if (deleteOld == true)
{ {
foreach (var list in address_lists) foreach (var list in address_lists)
{ {
Settings._instance.addressSets.addresses.Remove(list); Settings._instance.addressSets.addresses.Remove(list);
} }
} }
return result; return result;
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -46,8 +46,6 @@ public class CombineAddresses
} }
return (null,null); return (null,null);
} }
private async Task<(KasAddressList, KasAddressList)> Execute(List<KasAddressList> address_lists, string type, CombineType comb_type, private async Task<(KasAddressList, KasAddressList)> Execute(List<KasAddressList> address_lists, string type, CombineType comb_type,
@@ -67,7 +65,6 @@ public class CombineAddresses
} }
return (null,null); return (null,null);
} }
@@ -144,8 +141,7 @@ public class CombineAddresses
result.KasPersons.Add(person); result.KasPersons.Add(person);
else else
second_result.KasPersons.Add(person); second_result.KasPersons.Add(person);
progress.Increment(); progress.Increment();
if (progress.LogAction == null) continue; if (progress.LogAction == null) continue;
var logMessage = var logMessage =
@@ -162,7 +158,6 @@ public class CombineAddresses
} }
return (null,null); return (null,null);
} }
@@ -211,7 +206,6 @@ public class CombineAddresses
} }
return (null,null); return (null,null);
} }
@@ -274,7 +268,6 @@ public class CombineAddresses
} }
return (null,null); return (null,null);
} }
@@ -343,9 +336,7 @@ public class CombineAddresses
} }
return (null,null); return (null,null);
} }
} }
public class Progress public class Progress
+1 -3
View File
@@ -59,8 +59,7 @@ public class CsvBuilder
EscapeCsvField(l.abteilung), EscapeCsvField(l.abteilung),
EscapeCsvField(l.funktionad) EscapeCsvField(l.funktionad)
})); }));
// weitere Cases
return result.ToString(); return result.ToString();
} }
@@ -81,6 +80,5 @@ public class CsvBuilder
} }
return ""; return "";
} }
} }
+2 -19
View File
@@ -130,9 +130,7 @@ public class DataImport
var hasProperties = patchType.GetProperties(binding) var hasProperties = patchType.GetProperties(binding)
.Where(p => p.PropertyType == typeof(bool) && p.Name.StartsWith("has_", StringComparison.OrdinalIgnoreCase)) .Where(p => p.PropertyType == typeof(bool) && p.Name.StartsWith("has_", StringComparison.OrdinalIgnoreCase))
.ToArray(); .ToArray();
//var last_refsid = 1000000;
while (!reader.EndOfStream) while (!reader.EndOfStream)
{ {
var line = reader.ReadLine(); var line = reader.ReadLine();
@@ -143,8 +141,6 @@ public class DataImport
var fieldValues = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); var fieldValues = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
//var refsid_existing = false;
foreach (var hasProp in hasProperties) foreach (var hasProp in hasProperties)
{ {
var fieldName = hasProp.Name.Substring(4); var fieldName = hasProp.Name.Substring(4);
@@ -240,23 +236,10 @@ public class DataImport
{ {
Logger.Log($"Error while importing kas address list with patch: {ex.Message}",Logger.LogType.Error); Logger.Log($"Error while importing kas address list with patch: {ex.Message}",Logger.LogType.Error);
} }
// int GenerateNewRefsid()
// {
// var biggest = last_refsid;
// foreach (var set in Settings._instance.addressSets.addresses)
// foreach (var address in set.KasPersons)
// if (biggest < address.id)
// biggest = address.id + 1;
//
// last_refsid = biggest + 1;
// return last_refsid;
// }
return (false, null); return (false, null);
} }
private static int ParseInt(string input) private static int ParseInt(string input)
{ {
return int.TryParse(input, out var result) ? result : 0; return int.TryParse(input, out var result) ? result : 0;
+18 -74
View File
@@ -48,8 +48,6 @@ public class PdfBuilder
{ {
Logger.Log($"Error while font resolving: {ex.Message}",Logger.LogType.Error); Logger.Log($"Error while font resolving: {ex.Message}",Logger.LogType.Error);
} }
} }
private static void EnsureFontResolverRegistered() private static void EnsureFontResolverRegistered()
@@ -57,14 +55,12 @@ public class PdfBuilder
try try
{ {
if (GlobalFontSettings.FontResolver != null) return; if (GlobalFontSettings.FontResolver != null) return;
//var fontsDir = Path.Combine(AppContext.BaseDirectory, "fonts");
GlobalFontSettings.FontResolver = new StableFontResolver(Global._instance.font_path); GlobalFontSettings.FontResolver = new StableFontResolver(Global._instance.font_path);
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.Log($"Error while ensuring font resolver register state: {ex.Message}",Logger.LogType.Error); Logger.Log($"Error while ensuring font resolver register state: {ex.Message}",Logger.LogType.Error);
} }
} }
private static string StripStyleSuffix(string name) private static string StripStyleSuffix(string name)
@@ -84,7 +80,6 @@ public class PdfBuilder
} }
return null; return null;
} }
@@ -101,11 +96,6 @@ public class PdfBuilder
{ {
// Find the AddressSet by ID // Find the AddressSet by ID
var addressSet = Settings._instance.addressSets.GetAddressSetByID(addressSetId); var addressSet = Settings._instance.addressSets.GetAddressSetByID(addressSetId);
// foreach (var pers in addressSet.KasPersons)
// {
// AddressCreator.CreateFinalMarkdownString(pers.id);
// }
// addressSet.KasPersons = addressSet.KasPersons.OrderBy(x => x.IsGermany()).ThenBy(y => y.used_plz).ToList();
if (addressSet == null) if (addressSet == null)
throw new ArgumentException($"AddressSet with ID {addressSetId} not found"); throw new ArgumentException($"AddressSet with ID {addressSetId} not found");
@@ -114,7 +104,6 @@ public class PdfBuilder
throw new ArgumentException($"AddressSet with ID {addressSetId} contains no addresses"); throw new ArgumentException($"AddressSet with ID {addressSetId} contains no addresses");
// Generate markdown addresses from all KasPersons in the set // Generate markdown addresses from all KasPersons in the set
//var addresses = new string?[addressSet.KasPersons.Count];
var addresses_german = new List<string>(); var addresses_german = new List<string>();
var addresses_inter = new List<string>(); var addresses_inter = new List<string>();
@@ -170,8 +159,6 @@ public class PdfBuilder
else else
addresses_inter.Add(addr); addresses_inter.Add(addr);
} }
if (addresses_german.Count == 0 && addresses_inter.Count == 0) if (addresses_german.Count == 0 && addresses_inter.Count == 0)
{ {
@@ -188,17 +175,11 @@ public class PdfBuilder
{ {
ExportRunningSheets(addressSetId, outputPath); ExportRunningSheets(addressSetId, outputPath);
} }
//CreateAddressLabelPdfWithPlaceholder(addresses_german, placeholderText, outputPath);
//CreateAddressLabelPdfWithPlaceholder(addresses_inter, placeholderText, output_inter);
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.Log($"Error while creating address label pdf from address set with placeholder: {ex.Message}",Logger.LogType.Error); Logger.Log($"Error while creating address label pdf from address set with placeholder: {ex.Message}",Logger.LogType.Error);
} }
} }
/// <summary> /// <summary>
@@ -211,32 +192,31 @@ public class PdfBuilder
{ {
try try
{ {
if (addresses == null || addresses.Count == 0) if (addresses == null || addresses.Count == 0)
throw new ArgumentException("Addresses array cannot be null or empty"); throw new ArgumentException("Addresses array cannot be null or empty");
var document = new PdfDocument(); var document = new PdfDocument();
var addressIndex = 0; var addressIndex = 0;
var isFirstCell = true; var isFirstCell = true;
while (addressIndex < addresses.Count || isFirstCell) while (addressIndex < addresses.Count || isFirstCell)
{
var page = document.AddPage();
page.Size = PageSize.A4;
using (var gfx = XGraphics.FromPdfPage(page))
{ {
var page = document.AddPage(); DrawPageWithPlaceholder(gfx, addresses, ref addressIndex, ref isFirstCell, placeholderText, pvst);
page.Size = PageSize.A4;
using (var gfx = XGraphics.FromPdfPage(page))
{
DrawPageWithPlaceholder(gfx, addresses, ref addressIndex, ref isFirstCell, placeholderText, pvst);
}
} }
}
document.Save(outputPath); document.Save(outputPath);
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.Log($"Error while creating address label pdf with placeholder: {ex.Message}",Logger.LogType.Error); Logger.Log($"Error while creating address label pdf with placeholder: {ex.Message}",Logger.LogType.Error);
} }
} }
@@ -272,7 +252,6 @@ public class PdfBuilder
{ {
Logger.Log($"Error while drawing page with placholder: {ex.Message}",Logger.LogType.Error); Logger.Log($"Error while drawing page with placholder: {ex.Message}",Logger.LogType.Error);
} }
} }
private void DrawCell(XGraphics gfx, double x, double y, bool pvst, string? address, bool isPlaceholer = false) private void DrawCell(XGraphics gfx, double x, double y, bool pvst, string? address, bool isPlaceholer = false)
@@ -298,7 +277,6 @@ public class PdfBuilder
{ {
Logger.Log($"Error while drawing cell: {ex.Message}",Logger.LogType.Error); Logger.Log($"Error while drawing cell: {ex.Message}",Logger.LogType.Error);
} }
} }
public void InsertDPPressepostImage(XGraphics gfx, XRect cell) public void InsertDPPressepostImage(XGraphics gfx, XRect cell)
@@ -307,7 +285,6 @@ public class PdfBuilder
{ {
const double imageSizeX = 47.3; // pt const double imageSizeX = 47.3; // pt
const double imageSizeY = 14.8; // pt const double imageSizeY = 14.8; // pt
//const double margin = 20.0; // pt
var imagePath = Path.Combine("assets", "DP_VerkVermerk_PresseP_NAT.jpg"); var imagePath = Path.Combine("assets", "DP_VerkVermerk_PresseP_NAT.jpg");
@@ -344,7 +321,6 @@ public class PdfBuilder
{ {
Logger.Log($"Error while drawing empty cell: {ex.Message}",Logger.LogType.Error); Logger.Log($"Error while drawing empty cell: {ex.Message}",Logger.LogType.Error);
} }
} }
private enum TextStyle private enum TextStyle
@@ -673,7 +649,6 @@ public class PdfBuilder
return availableHeightMm / _settings.rowsPerPage; return availableHeightMm / _settings.rowsPerPage;
} }
public void ExportRunningSheets(int setID, string path) public void ExportRunningSheets(int setID, string path)
{ {
string international_path = path; string international_path = path;
@@ -692,7 +667,6 @@ public class PdfBuilder
CreateGermanyRunningSheets(setID, path); CreateGermanyRunningSheets(setID, path);
CreateInternationalRunningSheets(setID, international_path); CreateInternationalRunningSheets(setID, international_path);
} }
@@ -792,21 +766,8 @@ public class PdfBuilder
document.Save(path); document.Save(path);
} }
private void DrawGermanyRunningSheet( private void DrawGermanyRunningSheet(XGraphics gfx, double x, double y, double w, double h, KasAddressList list, dynamic result, List<(int,string,string,string,int)> grouped_nums, XFont fontLabel, XFont fontText, XFont fontBig, int pal_nr, int bundleOnPallet, int totalBundleNumber)
XGraphics gfx, {
double x,
double y,
double w,
double h,
KasAddressList list,
dynamic result,
List<(int,string,string,string,int)> grouped_nums,
XFont fontLabel,
XFont fontText,
XFont fontBig,
int pal_nr,
int bundleOnPallet,
int totalBundleNumber){
double line = 1.0; double line = 1.0;
string sender = Customer.GetCustomerByID(list.owner_id)?.sender_address ?? "[Absender]"; string sender = Customer.GetCustomerByID(list.owner_id)?.sender_address ?? "[Absender]";
@@ -916,7 +877,6 @@ public class PdfBuilder
new XRect(midSplit + 5, y + r1 + r2 + 4, w - (midSplit - x) - 10, 14), new XRect(midSplit + 5, y + r1 + r2 + 4, w - (midSplit - x) - 10, 14),
XStringFormats.TopLeft); XStringFormats.TopLeft);
// Bottom left labels
// Bottom left labels // Bottom left labels
gfx.DrawString("Einlieferungsdatum:", fontLabel, XBrushes.Black, gfx.DrawString("Einlieferungsdatum:", fontLabel, XBrushes.Black,
new XRect(x + 5, y + r1 + r2 + r3 + 4, leftBottomW - 10, 14), new XRect(x + 5, y + r1 + r2 + r3 + 4, leftBottomW - 10, 14),
@@ -989,7 +949,7 @@ public class PdfBuilder
KasAddressList list = Settings._instance.addressSets.GetAddressSetByID(setID); KasAddressList list = Settings._instance.addressSets.GetAddressSetByID(setID);
var document = new PdfDocument(); var document = new PdfDocument();
document.Info.Title = $"Laufzettel für {list.Name}"; document.Info.Title = $"Leitzettel für {list.Name}";
document.Info.Subject = "powered by logofclient"; document.Info.Subject = "powered by logofclient";
document.Info.Author = "logofclient"; document.Info.Author = "logofclient";
@@ -1082,22 +1042,7 @@ public class PdfBuilder
document.Save(path); document.Save(path);
} }
private void DrawInternationalRunningSheet( private void DrawInternationalRunningSheet(XGraphics gfx, double x, double y, double w, double h, KasAddressList list, dynamic result, List<(int,string,string,string,int)> grouped_nums, XFont fontLabel, XFont fontText, XFont fontBig, int pal_nr, int bundleOnPallet, int totalBundleNumber, string category = "ECONOMY Non-EU")
XGraphics gfx,
double x,
double y,
double w,
double h,
KasAddressList list,
dynamic result,
List<(int,string,string,string,int)> grouped_nums,
XFont fontLabel,
XFont fontText,
XFont fontBig,
int pal_nr,
int bundleOnPallet,
int totalBundleNumber,
string category = "ECONOMY Non-EU")
{ {
double line = 1.0; double line = 1.0;
@@ -1208,7 +1153,6 @@ public class PdfBuilder
new XRect(midSplit + 5, y + r1 + r2 + 4, w - (midSplit - x) - 10, 14), new XRect(midSplit + 5, y + r1 + r2 + 4, w - (midSplit - x) - 10, 14),
XStringFormats.TopLeft); XStringFormats.TopLeft);
// Bottom left labels
// Bottom left labels // Bottom left labels
gfx.DrawString("Einlieferungsdatum:", fontLabel, XBrushes.Black, gfx.DrawString("Einlieferungsdatum:", fontLabel, XBrushes.Black,
new XRect(x + 5, y + r1 + r2 + r3 + 4, leftBottomW - 10, 14), new XRect(x + 5, y + r1 + r2 + r3 + 4, leftBottomW - 10, 14),
-140
View File
@@ -1,140 +0,0 @@
using System;
using System.Collections.Generic;
using Avalonia.Controls;
using Avalonia.Media;
using Markdig;
using Markdig.Syntax;
using Markdig.Syntax.Inlines;
using System.Text;
namespace Logof_Client.Wiki;
public static class MarkdownRenderer
{
// public static Control Render(string markdown)
// {
// try
// {
// var panel = new StackPanel { Spacing = 6 };
// if (string.IsNullOrWhiteSpace(markdown)) return panel;
//
// var doc = Markdown.Parse(markdown);
//
// foreach (var block in doc)
// {
// switch (block)
// {
// case HeadingBlock hb:
// {
// var text = GetInlineText(hb.Inline);
// var tb = new TextBlock
// {
// Text = text,
// FontWeight = FontWeight.Bold,
// Margin = new Avalonia.Thickness(0, hb.Level == 1 ? 6 : 2, 0, 2)
// };
// tb.FontSize = hb.Level switch { 1 => 22, 2 => 18, 3 => 16, _ => 14 };
// panel.Children.Add(tb);
// break;
// }
//
// case ParagraphBlock pb:
// {
// var text = GetInlineText(pb.Inline);
// var tb = new TextBlock { Text = text, TextWrapping = Avalonia.Media.TextWrapping.Wrap };
// panel.Children.Add(tb);
// break;
// }
//
// case FencedCodeBlock cb:
// {
// var sb = new StringBuilder();
// foreach (var line in cb.Lines.Lines)
// {
// sb.Append(line.ToString());
// }
// var codeBox = new TextBox
// {
// Text = sb.ToString(),
// FontFamily = "Consolas, monospace",
// IsReadOnly = true,
// AcceptsReturn = true
// };
// panel.Children.Add(codeBox);
// break;
// }
//
// case ListBlock lb:
// {
// var sp = new StackPanel { Spacing = 2 };
// var number = 1;
// foreach (var item in lb)
// {
// if (item is ListItemBlock lib)
// {
// var itemText = new StringBuilder();
// foreach (var sub in lib)
// {
// if (sub is ParagraphBlock pp)
// itemText.Append(GetInlineText(pp.Inline));
// }
// var tb = new TextBlock { Text = (lb.IsOrdered ? (number++ + ". ") : "• ") + itemText.ToString() };
// sp.Children.Add(tb);
// }
// }
// panel.Children.Add(sp);
// break;
// }
//
// default:
// {
// // fallback: raw text
// panel.Children.Add(new TextBlock { Text = block.ToString() });
// break;
// }
// }
// }
//
// return panel;
// } catch (Exception ex) { Logger.Log($"Error while : {ex.Message}",Logger.LogType.Error);}
//
// return new Panel();
// }
//
// private static string GetInlineText(ContainerInline? container)
// {
// try
// {
// if (container == null) return string.Empty;
// var sb = new StringBuilder();
// foreach (var inline in container)
// {
// switch (inline)
// {
// case LiteralInline li:
// sb.Append(li.Content.ToString());
// break;
// case EmphasisInline ei:
// sb.Append(GetInlineText(ei));
// break;
// case CodeInline ci:
// sb.Append(ci.Content);
// break;
// case LinkInline li:
// sb.Append(GetInlineText(li));
// break;
// case LineBreakInline:
// sb.Append("\n");
// break;
// default:
// sb.Append(inline.ToString());
// break;
// }
// }
//
// return sb.ToString();
// } catch (Exception ex) { Logger.Log($"Error while : {ex.Message}",Logger.LogType.Error);}
//
// return null;
// }
}