18 Commits

13 changed files with 1163 additions and 963 deletions
+3 -9
View File
@@ -45,9 +45,8 @@ public class Settings
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine(ex.Message); Logger.Log($"Error while reading settings. Generating new... {ex.Message}", Logger.LogType.Warning);
Console.WriteLine(ex.StackTrace);
Console.WriteLine("Error while reading settings. Generating new...");
_instance = new Settings(); _instance = new Settings();
} }
} }
@@ -70,9 +69,6 @@ public class PdfExportSettings
public double fontSize { get; set; } = 9; public double fontSize { get; set; } = 9;
public double smallFontSize { get; set; } = 6; public double smallFontSize { get; set; } = 6;
public bool exportRunningSheets { get; set; } = true;
public double rsNumGrouped { get; set; } = 25;
public double rsPlzStartpoint { get; set; } = 2;
} }
public class Global public class Global
@@ -126,9 +122,7 @@ public class Global
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine(ex.Message); Logger.Log($"Error while reading global settings. Generating new... {ex.Message}", Logger.LogType.Warning);
Console.WriteLine(ex.StackTrace);
Console.WriteLine("Error while reading global settings. Generating new...");
_instance = new Global(); _instance = new Global();
Save(); Save();
} }
+40
View File
@@ -0,0 +1,40 @@
using System;
using System.IO;
using Newtonsoft.Json;
namespace Logof_Client;
public static class Logger
{
public static void Log(string text, LogType logType = LogType.Info)
{
try
{
string config_path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"logofclient");
if (!Directory.Exists(config_path))
Directory.CreateDirectory(config_path);
string log_path = Path.Combine(config_path, $"log-{DateTime.Now:dd-MM-yy}.log");
if(!File.Exists(log_path))
File.Create(log_path).Close();
string line = $"[{DateTime.Now:dd.MM.yyyy - hh:mm:ss}]: ({logType.ToString()}) {text}";
Console.WriteLine(line);
File.AppendAllLines(log_path, [line]);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
public enum LogType
{
Error,
Warning,
Info
}
}
-9
View File
@@ -254,7 +254,6 @@
<Label Grid.Column="0" Content="Zellenrand rechts (mm)"></Label> <Label Grid.Column="0" Content="Zellenrand rechts (mm)"></Label>
<NumericUpDown Grid.Column="1" x:Name="NudExpMargCellPaddingRight" Minimum="0" Maximum="20" Value="5"></NumericUpDown> <NumericUpDown Grid.Column="1" x:Name="NudExpMargCellPaddingRight" Minimum="0" Maximum="20" Value="5"></NumericUpDown>
</Grid> </Grid>
<CheckBox Content="Laufzettel erstellen" x:Name="CbExpRnsEnable"></CheckBox>
</StackPanel> </StackPanel>
<StackPanel Grid.Column="1" Orientation="Vertical" Spacing="10"> <StackPanel Grid.Column="1" Orientation="Vertical" Spacing="10">
@@ -274,10 +273,6 @@
<Label Content="Zellenabstand links"></Label> <Label Content="Zellenabstand links"></Label>
<NumericUpDown Grid.Column="1" x:Name="TbExpMargMarginLeft" Minimum="0" Maximum="20" Value="0"></NumericUpDown> <NumericUpDown Grid.Column="1" x:Name="TbExpMargMarginLeft" Minimum="0" Maximum="20" Value="0"></NumericUpDown>
</Grid> </Grid>
<Grid ColumnDefinitions="*,*">
<Label Grid.Column="0" Content="Anzahl gruppierter Sendungen"></Label>
<NumericUpDown Grid.Column="1" x:Name="NudExpRnsPlzcount" Minimum="1" Maximum="10000" Value="25"></NumericUpDown>
</Grid>
</StackPanel> </StackPanel>
<StackPanel Grid.Column="2" Orientation="Vertical" Spacing="10"> <StackPanel Grid.Column="2" Orientation="Vertical" Spacing="10">
@@ -297,10 +292,6 @@
<Label Grid.Column="0" Content="Schriftgröße (klein)"></Label> <Label Grid.Column="0" Content="Schriftgröße (klein)"></Label>
<NumericUpDown Grid.Column="1" x:Name="NudExpMargSmallFontSize" Minimum="3" Maximum="30" Value="6"></NumericUpDown> <NumericUpDown Grid.Column="1" x:Name="NudExpMargSmallFontSize" Minimum="3" Maximum="30" Value="6"></NumericUpDown>
</Grid> </Grid>
<Grid ColumnDefinitions="*,*">
<Label Grid.Column="0" Content="Gruppierpunkt"></Label>
<NumericUpDown Grid.Column="1" x:Name="NudExpRnsPlzStartpoint" Minimum="1" Maximum="10" Value="2"></NumericUpDown>
</Grid>
</StackPanel> </StackPanel>
</Grid> </Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
+148 -62
View File
@@ -24,6 +24,9 @@ public partial class MainWindow : Window
public MainWindow() public MainWindow()
{ {
Logger.Log("Welcome to logofclient");
Logger.Log($"Session on {DateTime.Now:G}");
Logger.Log("Initializing...");
InitializeComponent(); InitializeComponent();
//Hide(); //Hide();
@@ -32,6 +35,7 @@ public partial class MainWindow : Window
_instance = this; _instance = this;
WindowState = WindowState.Maximized; WindowState = WindowState.Maximized;
Logger.Log("Loading settings...");
Global.Load(); Global.Load();
Settings.Load(); Settings.Load();
LoadPdfExportOptions(); LoadPdfExportOptions();
@@ -40,6 +44,7 @@ public partial class MainWindow : Window
RefreshCountryView(); RefreshCountryView();
// Initialize wiki integration // Initialize wiki integration
Logger.Log("Building wiki...");
_wikiService = new WikiService(); _wikiService = new WikiService();
try try
{ {
@@ -54,8 +59,9 @@ public partial class MainWindow : Window
if (!string.IsNullOrWhiteSpace(Global._instance.wiki_storage_path)) if (!string.IsNullOrWhiteSpace(Global._instance.wiki_storage_path))
TbWikiPath.Text = Global._instance.wiki_storage_path; TbWikiPath.Text = Global._instance.wiki_storage_path;
} }
catch catch (Exception ex)
{ {
Logger.Log($"Error while setting paths: {ex.Message}", Logger.LogType.Error);
} }
try try
@@ -64,12 +70,14 @@ public partial class MainWindow : Window
BtnFontPath.Click += BtnFontPath_Click; BtnFontPath.Click += BtnFontPath_Click;
BtnConfigPath.Click += BtnConfigPath_Click; BtnConfigPath.Click += BtnConfigPath_Click;
} }
catch catch (Exception ex)
{ {
Logger.Log($"Error while adding click functions?: {ex.Message}", Logger.LogType.Error);
} }
} }
catch catch (Exception ex)
{ {
Logger.Log($"Error while doing wiki stuff: {ex.Message}", Logger.LogType.Error);
} }
//Thread.Sleep(3000); //Thread.Sleep(3000);
@@ -121,23 +129,6 @@ public partial class MainWindow : Window
//await MessageBox.Show(_instance, $"{result.Count} Einträge fehlerhaft.", "Fertig"); //await MessageBox.Show(_instance, $"{result.Count} Einträge fehlerhaft.", "Fertig");
} }
// private async void StartAddressRepair(Uri path)
// {
// var addresses = DataImport.ImportKasAddressList(path); // Ihr Code hier
// var progressWindow = new ProgressWindow();
//
// progressWindow.Show(_instance);
//
// var processor = new AddressRepair(progressWindow);
// //var result = await processor.Perform(addresses.Item2, errors);
//
//
// progressWindow.Close();
//
//
// //new ResultWindow(result, addresses.Item2).Show();
// //await MessageBox.Show(_instance, $"{result.Count} Einträge fehlerhaft.", "Fertig");
// }
private void MnuExit_OnClick(object? sender, RoutedEventArgs e) private void MnuExit_OnClick(object? sender, RoutedEventArgs e)
{ {
@@ -156,7 +147,7 @@ public partial class MainWindow : Window
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine($"Fehler beim Öffnen des Links: {ex.Message}"); Logger.Log($"Error while starting process: {ex.Message}", Logger.LogType.Error);
} }
} }
@@ -172,7 +163,7 @@ public partial class MainWindow : Window
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine($"Fehler beim Öffnen des Links: {ex.Message}"); Logger.Log($"Error while starting process: {ex.Message}", Logger.LogType.Error);
} }
} }
@@ -188,7 +179,7 @@ public partial class MainWindow : Window
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine($"Fehler beim Öffnen des Links: {ex.Message}"); Logger.Log($"Error while starting process: {ex.Message}", Logger.LogType.Error);
} }
} }
@@ -232,9 +223,9 @@ public partial class MainWindow : Window
var rendered = MarkdownRenderer.Render(text ?? string.Empty); var rendered = MarkdownRenderer.Render(text ?? string.Empty);
PreviewPanel.Children.Add(rendered); PreviewPanel.Children.Add(rendered);
} }
catch catch (Exception ex)
{ {
// fallback: plain text Logger.Log($"Error while rendering markdown: {ex.Message}", Logger.LogType.Error);
PreviewPanel.Children.Clear(); PreviewPanel.Children.Clear();
PreviewPanel.Children.Add(new TextBlock { Text = text ?? string.Empty }); PreviewPanel.Children.Add(new TextBlock { Text = text ?? string.Empty });
} }
@@ -249,6 +240,8 @@ public partial class MainWindow : Window
} }
public void PopulateNavTree(string? expandToPath = null, string? selectPath = null) public void PopulateNavTree(string? expandToPath = null, string? selectPath = null)
{
try
{ {
var roots = _wikiService.GetRootItems(); var roots = _wikiService.GetRootItems();
var nodes = new List<TreeViewItem>(); var nodes = new List<TreeViewItem>();
@@ -262,6 +255,10 @@ public partial class MainWindow : Window
ExpandAndFindNode(nodes, selectPath, out var selectedNode) && ExpandAndFindNode(nodes, selectPath, out var selectedNode) &&
selectedNode != null) selectedNode != null)
NavTree.SelectedItem = selectedNode; NavTree.SelectedItem = selectedNode;
}catch (Exception ex)
{
Logger.Log($"Error while populating nav tree: {ex.Message}", Logger.LogType.Error);
}
} }
private TreeViewItem BuildNode(WikiItem item) private TreeViewItem BuildNode(WikiItem item)
@@ -275,6 +272,8 @@ public partial class MainWindow : Window
} }
private string GetSelectedWikiTargetDirectory() private string GetSelectedWikiTargetDirectory()
{
try
{ {
var wikiRoot = Global._instance.wiki_storage_path; var wikiRoot = Global._instance.wiki_storage_path;
if (NavTree.SelectedItem is TreeViewItem treeItem && treeItem.Tag is WikiItem selectedItem) if (NavTree.SelectedItem is TreeViewItem treeItem && treeItem.Tag is WikiItem selectedItem)
@@ -284,8 +283,13 @@ public partial class MainWindow : Window
var parentDir = Path.GetDirectoryName(selectedItem.Path); var parentDir = Path.GetDirectoryName(selectedItem.Path);
if (!string.IsNullOrWhiteSpace(parentDir)) return parentDir; if (!string.IsNullOrWhiteSpace(parentDir)) return parentDir;
} }
return wikiRoot; return wikiRoot;
}catch (Exception ex)
{
Logger.Log($"Error while getting selected wiki target directory: {ex.Message}", Logger.LogType.Error);
}
return null;
} }
private static bool PathsEqual(string left, string right) private static bool PathsEqual(string left, string right)
@@ -344,8 +348,9 @@ public partial class MainWindow : Window
UseShellExecute = true UseShellExecute = true
}); });
} }
catch catch (Exception ex)
{ {
Logger.Log($"Error while starting process: {ex.Message}", Logger.LogType.Error);
} }
} }
@@ -443,8 +448,9 @@ public partial class MainWindow : Window
{ {
LstSettingsCustomers.SelectedIndex = LstSettingsCustomers.Items.Count - 1; LstSettingsCustomers.SelectedIndex = LstSettingsCustomers.Items.Count - 1;
} }
catch catch (Exception ex)
{ {
Logger.Log($"Error while setting selected item: {ex.Message}", Logger.LogType.Error);
} }
} }
@@ -515,17 +521,25 @@ public partial class MainWindow : Window
{ {
LstSettingsCustomers.SelectedIndex = index; LstSettingsCustomers.SelectedIndex = index;
} }
catch catch (Exception ex)
{ {
Logger.Log($"Error while setting selected index: {ex.Message}", Logger.LogType.Error);
} }
} }
private void TbSettingsCustomerDescription_OnTextChanged(object? sender, TextChangedEventArgs e) private void TbSettingsCustomerDescription_OnTextChanged(object? sender, TextChangedEventArgs e)
{
try
{ {
if (LstSettingsCustomers.SelectedIndex == null || LstSettingsCustomers.SelectedIndex == -1) return; if (LstSettingsCustomers.SelectedIndex == null || LstSettingsCustomers.SelectedIndex == -1) return;
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.description = TbSettingsCustomerDescription.Text; customer.description = TbSettingsCustomerDescription.Text;
} catch (Exception ex)
{
Logger.Log($"Error while changing customer description: {ex.Message}", Logger.LogType.Error);
}
//Settings.Save(); //Settings.Save();
} }
@@ -544,6 +558,8 @@ public partial class MainWindow : Window
} }
private async void BtnCustomerAddressSetImport_OnClick(object? sender, RoutedEventArgs e) private async void BtnCustomerAddressSetImport_OnClick(object? sender, RoutedEventArgs e)
{
try
{ {
MakeCalcManVisible(); MakeCalcManVisible();
var opts = new FilePickerOpenOptions(); var opts = new FilePickerOpenOptions();
@@ -602,6 +618,13 @@ public partial class MainWindow : Window
Settings.Save(); Settings.Save();
}
catch (Exception ex)
{
Logger.Log($"Error while importing: {ex.Message}", Logger.LogType.Error);
}
} }
public void RefreshAddressSetListItems(int customer_id) public void RefreshAddressSetListItems(int customer_id)
@@ -646,6 +669,8 @@ public partial class MainWindow : Window
} }
private async void BtnSettingsImportCustomerAddressPatch_OnClick(object? sender, RoutedEventArgs e) private async void BtnSettingsImportCustomerAddressPatch_OnClick(object? sender, RoutedEventArgs e)
{
try
{ {
if (LstSettingsCustomers.SelectedIndex == null || LstSettingsCustomers.SelectedIndex == -1) return; if (LstSettingsCustomers.SelectedIndex == null || LstSettingsCustomers.SelectedIndex == -1) return;
@@ -672,6 +697,11 @@ public partial class MainWindow : Window
Settings.Save(); Settings.Save();
} catch (Exception ex)
{
Logger.Log($"Error while importing customer address patch: {ex.Message}", Logger.LogType.Error);
}
} }
private void TbSettingsCustomerCsvSeparator_OnTextChanged(object? sender, TextChangedEventArgs e) private void TbSettingsCustomerCsvSeparator_OnTextChanged(object? sender, TextChangedEventArgs e)
@@ -689,11 +719,14 @@ public partial class MainWindow : Window
catch (FormatException ex) catch (FormatException ex)
{ {
MessageBox.Show(this, "Error while converting: " + ex.Message, "Could not parse"); MessageBox.Show(this, "Error while converting: " + ex.Message, "Could not parse");
Logger.Log($"Error while converting: {ex.Message}", Logger.LogType.Error);
} }
catch (Exception ex) catch (Exception ex)
{ {
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);
} }
} }
private void BtnCombineDifference_OnClick(object? sender, RoutedEventArgs e) private void BtnCombineDifference_OnClick(object? sender, RoutedEventArgs e)
@@ -703,11 +736,10 @@ public partial class MainWindow : Window
list.Add((KasAddressList)item); list.Add((KasAddressList)item);
try try
{ {
StartCombine(list, Convert.ToInt32((LstCustomers.SelectedItem as Customer).ID), "difference", GetCombiningTyp()); StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem), "difference", GetCombiningTyp());
} }catch (Exception ex)
catch
{ {
Logger.Log($"Error while combining (difference): {ex.Message}", Logger.LogType.Error);
} }
} }
@@ -720,9 +752,9 @@ public partial class MainWindow : Window
{ {
StartCombine(list, Convert.ToInt32((LstCustomers.SelectedItem as Customer).ID), "union", GetCombiningTyp()); StartCombine(list, Convert.ToInt32((LstCustomers.SelectedItem as Customer).ID), "union", GetCombiningTyp());
} }
catch catch (Exception ex)
{ {
Logger.Log($"Error while combining (union): {ex.Message}", Logger.LogType.Error);
} }
} }
@@ -734,11 +766,11 @@ public partial class MainWindow : Window
list.Add((KasAddressList)item); list.Add((KasAddressList)item);
try try
{ {
StartCombine(list, Convert.ToInt32((LstCustomers.SelectedItem as Customer).ID), "intersection", GetCombiningTyp()); StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "intersection", GetCombiningTyp());
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine("Error while trying to start intersection: " + ex.Message); Logger.Log($"Error while combining (intersection): {ex.Message}", Logger.LogType.Error);
} }
} }
@@ -761,7 +793,7 @@ public partial class MainWindow : Window
foreach (var item in LstCustomerAdressSets.SelectedItems) foreach (var item in LstCustomerAdressSets.SelectedItems)
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.ToString().Split(" - ")[0]), "symdiff", GetCombiningTyp());
} }
private async void BtnGenerateLabels_OnClick(object? sender, RoutedEventArgs e) private async void BtnGenerateLabels_OnClick(object? sender, RoutedEventArgs e)
@@ -773,36 +805,72 @@ public partial class MainWindow : Window
} }
private async void BtnStartGenerateLabels_OnClick(object? sender, RoutedEventArgs e) private async void BtnStartGenerateLabels_OnClick(object? sender, RoutedEventArgs e)
{
try
{ {
SavePdfExportOptions(); SavePdfExportOptions();
var saveDialog = new SaveFileDialog var saveDialog = new SaveFileDialog
{ {
DefaultExtension = "pdf", DefaultExtension = "pdf",
Filters = { new FileDialogFilter { Name = "PDF-Dateien", Extensions = { "pdf" } } } Filters =
{
new FileDialogFilter
{
Name = "PDF-Dateien",
Extensions = { "pdf" }
}
}
}; };
var filePath = await saveDialog.ShowAsync(this); var filePath = await saveDialog.ShowAsync(this);
if (!string.IsNullOrEmpty(filePath)) Console.WriteLine($"RAW: {filePath}");
if (!string.IsNullOrWhiteSpace(filePath))
{ {
if (filePath.StartsWith("file://"))
{
filePath = new Uri(filePath).LocalPath;
}
Console.WriteLine($"PATH: {filePath}");
var builder = new PdfBuilder(Settings._instance.pdfExport); var builder = new PdfBuilder(Settings._instance.pdfExport);
builder.CreateAddressLabelPdfFromAddressSetWithPlaceholder(( builder.CreateAddressLabelPdfFromAddressSetWithPlaceholder(
(KasAddressList)LstCustomerAdressSets.SelectedItem).ID, ((KasAddressList)LstCustomerAdressSets.SelectedItem).ID,
"Company Logo/Info", "Company Logo/Info",
filePath filePath
); );
//return true;
Console.WriteLine("PDF OK");
}
}
catch (Exception ex)
{
Logger.Log($"Error while generating labels: {ex.Message}", Logger.LogType.Error);
} }
} }
private void HookPdfExportOptionEvents() private void HookPdfExportOptionEvents()
{
try
{ {
var controls = GetPdfExportControls(); var controls = GetPdfExportControls();
foreach (var control in controls) control.ValueChanged += PdfExportOption_OnValueChanged; foreach (var control in controls) control.ValueChanged += PdfExportOption_OnValueChanged;
} }
catch (Exception ex)
{
Logger.Log($"Error while hooking pdf export margins: {ex.Message}", Logger.LogType.Error);
}
}
private void LoadPdfExportOptions() private void LoadPdfExportOptions()
{
try
{ {
var options = Settings._instance.pdfExport ?? new PdfExportSettings(); var options = Settings._instance.pdfExport ?? new PdfExportSettings();
@@ -821,6 +889,12 @@ public partial class MainWindow : Window
NudExpMargFontSize.Value = (decimal)options.fontSize; NudExpMargFontSize.Value = (decimal)options.fontSize;
NudExpMargSmallFontSize.Value = (decimal)options.smallFontSize; NudExpMargSmallFontSize.Value = (decimal)options.smallFontSize;
} }
catch (Exception ex)
{
Logger.Log($"Error while loading PDF Export Options: {ex.Message}", Logger.LogType.Error);
}
}
private void SavePdfExportOptions() private void SavePdfExportOptions()
{ {
@@ -900,6 +974,7 @@ public partial class MainWindow : Window
public void RefreshCountryView() public void RefreshCountryView()
{ {
if (_suppressCountryRefresh) return; if (_suppressCountryRefresh) return;
try try
{ {
@@ -914,8 +989,9 @@ public partial class MainWindow : Window
{ {
CountryList.Items.Clear(); CountryList.Items.Clear();
} }
catch catch (Exception ex)
{ {
Logger.Log($"Error while clearing country list: {ex.Message}", Logger.LogType.Error);
} }
foreach (var c in Global._instance.countries) CountryList.Items.Add(c.name); foreach (var c in Global._instance.countries) CountryList.Items.Add(c.name);
@@ -923,17 +999,19 @@ public partial class MainWindow : Window
{ {
CountryList.SelectedIndex = country_index; CountryList.SelectedIndex = country_index;
} }
catch catch (Exception ex)
{ {
Logger.Log($"Error while setting selected item: {ex.Message}", Logger.LogType.Error);
} }
try try
{ {
_selectedCountry = Country.GetByName(CountryList.SelectedItems[0].ToString()); _selectedCountry = Country.GetByName(CountryList.SelectedItems[0].ToString());
} }
catch catch (Exception ex)
{ {
_selectedCountry = null; _selectedCountry = null;
Logger.Log($"Error while getting country: {ex.Message}", Logger.LogType.Error);
} }
if (_selectedCountry == null) return; if (_selectedCountry == null) return;
@@ -947,8 +1025,9 @@ public partial class MainWindow : Window
{ {
LbSettingsAlternatives.SelectedIndex = alt_index; LbSettingsAlternatives.SelectedIndex = alt_index;
} }
catch catch (Exception ex)
{ {
Logger.Log($"Error while setting selected item: {ex.Message}", Logger.LogType.Error);
} }
} }
finally finally
@@ -964,9 +1043,9 @@ public partial class MainWindow : Window
{ {
_selectedCountry.alternatives.Remove(selected.ToString()); _selectedCountry.alternatives.Remove(selected.ToString());
} }
catch catch (Exception ex)
{ {
Console.WriteLine("Error while removing country alternative"); Logger.Log($"Error while removing alternatives: {ex.Message}", Logger.LogType.Error);
} }
RefreshCountryView(); RefreshCountryView();
@@ -1041,6 +1120,7 @@ public partial class MainWindow : Window
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(this, ex.StackTrace, "Fehler"); MessageBox.Show(this, ex.StackTrace, "Fehler");
Logger.Log($"Error while adding wiki file: {ex.Message}", Logger.LogType.Error);
} }
} }
@@ -1064,34 +1144,39 @@ public partial class MainWindow : Window
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(this, ex.StackTrace, "Fehler"); MessageBox.Show(this, ex.StackTrace, "Fehler");
Logger.Log($"Error while adding wiki folder: {ex.Message}", Logger.LogType.Error);
} }
} }
private async void MnIAdSetRename_OnClick(object? sender, RoutedEventArgs e) private async void MnIAdSetRename_OnClick(object? sender, RoutedEventArgs e)
{ {
if (LstCustomerAdressSets.SelectedItems.Count > 0) var id = (LstCustomerAdressSets.SelectedItems[0] as KasAddressList).ID;
try
{
var result = await NamingWindow.Show(this);
if (result != null)
{
var id = KasAddressList.GetIDByAddressSetListItem(LstCustomerAdressSets.SelectedItems[0]
.ToString());
var cus_id = ((Customer)LstCustomers.SelectedItems[0]).ID; var cus_id = ((Customer)LstCustomers.SelectedItems[0]).ID;
var curr_set = new KasAddressList("");
foreach (var set in Settings._instance.addressSets.addresses) foreach (var set in Settings._instance.addressSets.addresses)
if (set.ID == id) if (set.ID == id)
{ {
set.Name = result; curr_set = set;
}
if (LstCustomerAdressSets.SelectedItems.Count > 0)
try
{
var result = await NamingWindow.Show(this, curr_set.Name);
if (result != null)
{
curr_set.Name = result;
Settings.Save(); Settings.Save();
RefreshAddressSetListItems(cus_id); RefreshAddressSetListItems(cus_id);
break;
}
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(this, ex.StackTrace, "Fehler"); MessageBox.Show(this, ex.StackTrace, "Fehler");
Logger.Log($"Error while renaming address set: {ex.Message}", Logger.LogType.Error);
} }
} }
@@ -1105,6 +1190,7 @@ public partial class MainWindow : Window
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(this, "Unknown Error: " + ex.Message, "Error"); MessageBox.Show(this, "Unknown Error: " + ex.Message, "Error");
Logger.Log($"Error while deleting customer: {ex.Message}", Logger.LogType.Error);
} }
RefreshCustomerItems(); RefreshCustomerItems();
} }
@@ -1131,9 +1217,9 @@ public partial class MainWindow : Window
TbSettingsCustomerCsvSeparator.Text = div; TbSettingsCustomerCsvSeparator.Text = div;
Settings.Save(); Settings.Save();
} }
catch catch (Exception ex)
{ {
Console.WriteLine("Error while parsing"); Logger.Log($"Error while changing CSV divider: {ex.Message}", Logger.LogType.Error);
} }
} }
+1 -1
View File
@@ -52,7 +52,7 @@ public partial class NamingWindow : Window
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine("Error while showing naming window: " + ex.Message); Logger.Log("Error while showing naming window: " + ex.Message, Logger.LogType.Warning);
return Task.FromResult<string>(null!); return Task.FromResult<string>(null!);
} }
} }
+24
View File
@@ -28,6 +28,10 @@ public partial class ResultWindow : Window
private void GenerateView(List<KasPerson> result) private void GenerateView(List<KasPerson> result)
{ {
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";
@@ -39,6 +43,11 @@ public partial class ResultWindow : Window
// StkResults.Children.Clear(); // StkResults.Children.Clear();
// foreach (var person in result_with_errors) StkResults.Children.Add(CreatePersonGrid(person)); // foreach (var person in result_with_errors) StkResults.Children.Add(CreatePersonGrid(person));
} }
catch (Exception ex)
{
Logger.Log("Error while generating result view: " + ex.Message, Logger.LogType.Warning);
}
}
private Grid CreatePersonGrid(KasPerson person) private Grid CreatePersonGrid(KasPerson person)
{ {
@@ -105,6 +114,8 @@ public partial class ResultWindow : Window
} }
private void Load(List<KasPerson> result) private void Load(List<KasPerson> result)
{
try
{ {
var knownErrors = new List<AddressCheck.ErrorTypes>(); var knownErrors = new List<AddressCheck.ErrorTypes>();
var knownWarnings = new List<AddressCheck.WarningTypes>(); var knownWarnings = new List<AddressCheck.WarningTypes>();
@@ -145,12 +156,20 @@ public partial class ResultWindow : Window
GenerateView(result); GenerateView(result);
} }
catch (Exception ex)
{
Logger.Log("Error while showing naming window: " + ex.Message, Logger.LogType.Warning);
}
}
private void BtnUpdateFilter_OnClick(object? sender, RoutedEventArgs e) private void BtnUpdateFilter_OnClick(object? sender, RoutedEventArgs e)
{ {
} }
private void UpdateFilter() private void UpdateFilter()
{
try
{ {
var temp_result = new List<KasPerson>(); var temp_result = new List<KasPerson>();
@@ -211,6 +230,11 @@ public partial class ResultWindow : Window
// foreach (var person in temp_result) TbResults.Text += person.PersonError.GetString() +"\n"; // foreach (var person in temp_result) TbResults.Text += person.PersonError.GetString() +"\n";
// StkResults.Children.Clear(); // StkResults.Children.Clear();
// foreach (var person in temp_result) StkResults.Children.Add(CreatePersonGrid(person)); // foreach (var person in temp_result) StkResults.Children.Add(CreatePersonGrid(person));
} catch (Exception ex)
{
Logger.Log("Error while updating filter: " + ex.Message, Logger.LogType.Warning);
}
} }
+15 -2
View File
@@ -38,6 +38,8 @@ public class AddressCheck
} }
public async Task<List<KasPerson>> Perform(int id) public async Task<List<KasPerson>> Perform(int id)
{
try
{ {
// Find the index of the address set with the given id // Find the index of the address set with the given id
var adset_index = -1; var adset_index = -1;
@@ -238,7 +240,8 @@ public class AddressCheck
// Directly set PersonError in the address set // Directly set PersonError in the address set
var person_index = adset.KasPersons.IndexOf(person); var person_index = adset.KasPersons.IndexOf(person);
if (person_index >= 0) if (person_index >= 0)
Settings._instance.addressSets.addresses[adset_index].KasPersons[person_index].PersonError = Settings._instance.addressSets.addresses[adset_index].KasPersons[person_index]
.PersonError =
new KasPersonError((errors, warnings)); new KasPersonError((errors, warnings));
} }
@@ -248,7 +251,8 @@ public class AddressCheck
await Dispatcher.UIThread.InvokeAsync(() => await Dispatcher.UIThread.InvokeAsync(() =>
{ {
if (hasFaults) if (hasFaults)
_progress.AddToLog($"Person mit id {person.id} ist fehlerhaft", Convert.ToInt32(percent).ToString()); _progress.AddToLog($"Person mit id {person.id} ist fehlerhaft",
Convert.ToInt32(percent).ToString());
_progress.ChangePercentage(percent); _progress.ChangePercentage(percent);
}); });
@@ -261,5 +265,14 @@ 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)
{
Logger.Log($"Error while performing address check: {ex.Message}", Logger.LogType.Error);
}
return null;
}
} }
+29 -1
View File
@@ -43,7 +43,8 @@ public static class AddressCreator
public static string? CreateFinalMarkdownString(int id) public static string? CreateFinalMarkdownString(int id)
{ {
// Maximum seven lines of information // Maximum seven lines of information
try
{
// find the address // find the address
KasPerson? address = null; KasPerson? address = null;
var string_address = ""; var string_address = "";
@@ -197,9 +198,18 @@ public static class AddressCreator
if (address_line_count > 1) return string_address; if (address_line_count > 1) return string_address;
return null; return null;
} }
catch (Exception ex)
{
Logger.Log($"Error while creating markdown string: {ex.Message}", Logger.LogType.Error);
}
return null;
}
public static string CreateNameLine(string anredezus, string anrede, string titel, string vorname, string adel, public static string CreateNameLine(string anredezus, string anrede, string titel, string vorname, string adel,
string name, string namezus) string name, string namezus)
{
try
{ {
if (!string.IsNullOrWhiteSpace(anredezus)) if (!string.IsNullOrWhiteSpace(anredezus))
return string.Join(" ", return string.Join(" ",
@@ -215,6 +225,14 @@ public static class AddressCreator
) )
+ (string.IsNullOrWhiteSpace(namezus) ? "" : $" ({namezus.Trim()})"); + (string.IsNullOrWhiteSpace(namezus) ? "" : $" ({namezus.Trim()})");
} }
catch (Exception ex)
{
Logger.Log($"Error while performing address name line creation: {ex.Message}", Logger.LogType.Error);
}
return null;
}
/// <summary> /// <summary>
/// Returns true if a plz (or pplz) is valid /// Returns true if a plz (or pplz) is valid
@@ -223,6 +241,8 @@ public static class AddressCreator
/// <param name="land">country, to check the plz</param> /// <param name="land">country, to check the plz</param>
/// <returns>true or faslse, depending on result :+1:</returns> /// <returns>true or faslse, depending on result :+1:</returns>
public static bool CheckPLZ(string plz, string land) public static bool CheckPLZ(string plz, string land)
{
try
{ {
if (string.IsNullOrWhiteSpace(plz)) return false; if (string.IsNullOrWhiteSpace(plz)) return false;
@@ -249,4 +269,12 @@ public static class AddressCreator
// For non-German countries, accept any non-empty postal code // For non-German countries, accept any non-empty postal code
return true; return true;
} }
catch (Exception ex)
{
Logger.Log($"Error while performing address plz check: {ex.Message}", Logger.LogType.Error);
}
return false;
}
} }
+22
View File
@@ -3,6 +3,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using Logof_Client;
public class AddressPatch public class AddressPatch
{ {
@@ -57,6 +58,8 @@ public class AddressPatch
public bool has_funktionad { get; set; } public bool has_funktionad { get; set; }
public static AddressPatch Import(Uri filename) public static AddressPatch Import(Uri filename)
{
try
{ {
var patch = new AddressPatch(); var patch = new AddressPatch();
@@ -92,9 +95,20 @@ public class AddressPatch
return patch; return patch;
} }
catch (Exception ex)
{
Logger.Log($"Error while importing address patch: {ex.Message}", Logger.LogType.Error);
}
return null;
}
public override string ToString() public override string ToString()
{
try
{ {
var properties = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); var properties = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
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"));
@@ -115,4 +129,12 @@ public class AddressPatch
return lines.ToString().TrimEnd(); return lines.ToString().TrimEnd();
} }
catch (Exception ex)
{
Logger.Log($"Error while parsing: {ex.Message}", Logger.LogType.Error);
}
return "Error while parsing";
}
} }
+11 -9
View File
@@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Logof_Client; namespace Logof_Client;
@@ -9,15 +10,16 @@ public class AddressRepair(ProgressWindow progressWindow)
public KasAddressList Perform(KasAddressList all_addresses, public KasAddressList Perform(KasAddressList all_addresses,
List<(int, List<AddressCheck.ErrorTypes>)> failed_addresses) List<(int, List<AddressCheck.ErrorTypes>)> failed_addresses)
{ {
// foreach (var k in all_addresses.KasPersons) try
// foreach (var p in failed_addresses) {
// {
// if (k.refsid != p.Item1) continue; }
// catch (Exception ex)
// if (p.Item1.Contains(AddressCheck.WarningTypes.DoubledRefsid)) {
// { Logger.Log($"Error while performing address repair: {ex.Message}", Logger.LogType.Error);
// } }
// }
return null;
return null; return null;
} }
+7 -2
View File
@@ -12,7 +12,8 @@ public class AddressShortener(ProgressWindow progressWindow)
public async Task Perform(KasAddressList list) public async Task Perform(KasAddressList list)
{ {
// find doubled addresses by refsid 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++)
{ {
@@ -73,7 +74,11 @@ public class AddressShortener(ProgressWindow progressWindow)
// does this remove both of the doubled addresses? // does this remove both of the doubled addresses?
list.KasPersons.Remove(list.KasPersons.Find(x => x.id == id)); list.KasPersons.Remove(list.KasPersons.Find(x => x.id == id));
} }
}
catch (Exception ex)
{
Logger.Log($"Error while performing address shortener: {ex.Message}", Logger.LogType.Error);
}
//return null;
} }
} }
+61
View File
@@ -25,6 +25,8 @@ public class CombineAddresses
public async Task<(KasAddressList, KasAddressList)> Perform(List<KasAddressList> address_lists, string type, CombineType comb_type, public async Task<(KasAddressList, KasAddressList)> Perform(List<KasAddressList> address_lists, string type, CombineType comb_type,
bool? exportUnused, bool? deleteOld) bool? exportUnused, bool? deleteOld)
{
try
{ {
var result = await Execute(address_lists,type,comb_type,exportUnused); var result = await Execute(address_lists,type,comb_type,exportUnused);
@@ -37,11 +39,21 @@ public class CombineAddresses
} }
return result; return result;
}
catch (Exception ex)
{
Logger.Log($"Error while performing address combining: {ex.Message}", Logger.LogType.Error);
}
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,
bool? exportUnused) bool? exportUnused)
{
try
{ {
if (type == "difference") return await Difference(address_lists, comb_type, 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 == "union") return await Union(address_lists, comb_type, exportUnused);
@@ -49,6 +61,14 @@ public class CombineAddresses
if (type == "symdiff") return await SymmetricDifference(address_lists, comb_type, exportUnused); if (type == "symdiff") return await SymmetricDifference(address_lists, comb_type, exportUnused);
return (null, null); return (null, null);
} }
catch (Exception ex)
{
Logger.Log($"Error while executing address combining: {ex.Message}", Logger.LogType.Error);
}
return (null,null);
}
/// <summary> /// <summary>
@@ -60,6 +80,7 @@ public class CombineAddresses
/// <returns></returns> /// <returns></returns>
public bool CompareAddresses(KasPerson first, KasPerson second, CombineType comb_type) public bool CompareAddresses(KasPerson first, KasPerson second, CombineType comb_type)
{ {
// A refsid of 0 means "missing", so it must not collapse unrelated entries. // A refsid of 0 means "missing", so it must not collapse unrelated entries.
if(comb_type == CombineType.refsid) if(comb_type == CombineType.refsid)
if (first.refsid != 0 && second.refsid != 0 && first.refsid == second.refsid) return true; if (first.refsid != 0 && second.refsid != 0 && first.refsid == second.refsid) return true;
@@ -95,6 +116,8 @@ public class CombineAddresses
public async Task<(KasAddressList, KasAddressList)> Difference(List<KasAddressList> address_lists, CombineType comb_type, public async Task<(KasAddressList, KasAddressList)> Difference(List<KasAddressList> address_lists, CombineType comb_type,
bool? return_unused, bool? return_unused,
Progress? progress = null) Progress? progress = null)
{
try
{ {
if (address_lists == null || address_lists.Count == 0) if (address_lists == null || address_lists.Count == 0)
return (new KasAddressList(await KasAddressList.GenerateName("difference")), null); return (new KasAddressList(await KasAddressList.GenerateName("difference")), null);
@@ -133,10 +156,20 @@ public class CombineAddresses
if (return_unused == true) return (result, second_result); if (return_unused == true) return (result, second_result);
return (result, null); return (result, null);
} }
catch (Exception ex)
{
Logger.Log($"Error while performing difference-combining: {ex.Message}", Logger.LogType.Error);
}
return (null,null);
}
public async Task<(KasAddressList, KasAddressList)> Union(List<KasAddressList> address_lists, CombineType comb_type, bool? return_unused, public async Task<(KasAddressList, KasAddressList)> Union(List<KasAddressList> address_lists, CombineType comb_type, bool? return_unused,
Progress progress = null) Progress progress = null)
{
try
{ {
var result = new KasAddressList(await KasAddressList.GenerateName("union")); var result = new KasAddressList(await KasAddressList.GenerateName("union"));
var second_result = new KasAddressList("none"); var second_result = new KasAddressList("none");
@@ -172,6 +205,14 @@ public class CombineAddresses
if (return_unused == true) return (result, second_result); if (return_unused == true) return (result, second_result);
return (result, null); return (result, null);
} }
catch (Exception ex)
{
Logger.Log($"Error while performing union-combining: {ex.Message}", Logger.LogType.Error);
}
return (null,null);
}
public async Task<KasAddressList> MoveDuplicatesToNew() public async Task<KasAddressList> MoveDuplicatesToNew()
@@ -181,6 +222,8 @@ public class CombineAddresses
public async Task<(KasAddressList, KasAddressList)> Intersection(List<KasAddressList> address_lists, CombineType comb_type, public async Task<(KasAddressList, KasAddressList)> Intersection(List<KasAddressList> address_lists, CombineType comb_type,
bool? return_unused, Progress progress = null) bool? return_unused, Progress progress = null)
{
try
{ {
var result = new KasAddressList(await KasAddressList.GenerateName("intersection")); var result = new KasAddressList(await KasAddressList.GenerateName("intersection"));
var second_result = new KasAddressList("none"); var second_result = new KasAddressList("none");
@@ -225,10 +268,20 @@ public class CombineAddresses
if (return_unused == true) return (result, second_result); if (return_unused == true) return (result, second_result);
return (result, null); return (result, null);
} }
catch (Exception ex)
{
Logger.Log($"Error while performing intersection-combining: {ex.Message}", Logger.LogType.Error);
}
return (null,null);
}
public async Task<(KasAddressList, KasAddressList)> SymmetricDifference(List<KasAddressList> address_lists, CombineType comb_type, public async Task<(KasAddressList, KasAddressList)> SymmetricDifference(List<KasAddressList> address_lists, CombineType comb_type,
bool? return_unused, Progress progress = null) bool? return_unused, Progress progress = null)
{
try
{ {
var result = new KasAddressList(await KasAddressList.GenerateName("symmetric_difference")); var result = new KasAddressList(await KasAddressList.GenerateName("symmetric_difference"));
var second_result = new KasAddressList("none"); var second_result = new KasAddressList("none");
@@ -284,6 +337,14 @@ public class CombineAddresses
if (return_unused == true) return (result, second_result); if (return_unused == true) return (result, second_result);
return (result, null); return (result, null);
} }
catch (Exception ex)
{
Logger.Log($"Error while performing symdiff-combining: {ex.Message}", Logger.LogType.Error);
}
return (null,null);
}
} }
-66
View File
@@ -104,17 +104,7 @@ public class PdfBuilder
addresses.Add(addr); addresses.Add(addr);
} }
if (addresses.Count == 0)
{
MessageBox.Show(MainWindow._instance, "Keine validen Adressen konnten generiert werden. Abbruch.", "Fehler");
return;
}
CreateAddressLabelPdfWithPlaceholder(addresses, placeholderText, outputPath); CreateAddressLabelPdfWithPlaceholder(addresses, placeholderText, outputPath);
if (_settings.exportRunningSheets)
{
ExportRunningSheets(addressSetId, outputPath);
}
} }
/// <summary> /// <summary>
@@ -397,60 +387,4 @@ public class PdfBuilder
if (left < 0 || top < 0 || right < 0 || bottom < 0) if (left < 0 || top < 0 || right < 0 || bottom < 0)
throw new ArgumentException("Margins cannot be negative"); throw new ArgumentException("Margins cannot be negative");
} }
public void ExportRunningSheets(int setID, string path)
{
if (path.EndsWith(".pdf"))
{
path = path.Substring(0, path.Length - 4);
path = path + "-Laufzettel.pdf";
}
else
{
path = path + "-Laufzettel.pdf";
}
CreateRunningSheets(setID, path);
}
public void CreateRunningSheets(int setID, string path)
{
KasAddressList list = Settings._instance.addressSets.GetAddressSetByID(setID);
var document = new PdfDocument();
document.Info.Title = $"Laufzettel für {list.Name}";
document.Info.Subject = "powered by logofclient";
document.Info.Author = "logofclient";
int margin = 50;
List<(int, int)> grouped_nums = GroupAddresses(setID);
var page = document.AddPage();
page.Size = PageSize.A4;
var gfx = XGraphics.FromPdfPage(page);
var width = page.Width.Point-margin;
var height = page.Height.Point-margin;
gfx.DrawLine(XPens.Black, margin, margin, margin, height);
gfx.DrawLine(XPens.Black, margin, margin, width, margin);
gfx.DrawLine(XPens.Black, width, margin, margin, height);
gfx.DrawLine(XPens.Black, margin, height, width, margin);
var font = new XFont("Times New Roman", 20, XFontStyleEx.BoldItalic);
gfx.DrawString($"Versand {list.Name}", font, XBrushes.Black,
new XRect(0, 0, page.Width.Point, page.Height.Point), XStringFormats.Center);
document.Save(path);
}
public List<(int, int)> GroupAddresses(int setID)
{
return null;
}
} }