Compare commits
7
Commits
7b49ed8b47
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d53dc968de | ||
|
|
c966604b07 | ||
|
|
c0d7053847 | ||
|
|
612a55a070 | ||
|
|
b3e7b64baf | ||
|
|
81ee99ef27 | ||
|
|
59e7d96131 |
@@ -208,7 +208,6 @@ public class KasPerson
|
||||
|
||||
public static int GenerateNewID(int base_id)
|
||||
{
|
||||
//var newid = 100000 + base_id;
|
||||
int highest = 0;
|
||||
foreach (var set in Settings._instance.addressSets.addresses)
|
||||
{
|
||||
@@ -217,8 +216,6 @@ public class KasPerson
|
||||
if(add.id >= highest) highest = add.id+1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return highest + base_id + 1;
|
||||
}
|
||||
|
||||
@@ -228,10 +225,8 @@ public class KasPerson
|
||||
{
|
||||
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)
|
||||
{
|
||||
//refsid = single_result.Item1;
|
||||
errors = single_result.Item1;
|
||||
warnings = single_result.Item2;
|
||||
}
|
||||
|
||||
//public int refsid { get; set; }
|
||||
public List<AddressCheck.ErrorTypes> errors { get; set; } = new();
|
||||
public List<AddressCheck.WarningTypes> warnings { get; set; } = new();
|
||||
|
||||
|
||||
@@ -19,9 +19,6 @@ public class Settings
|
||||
public Customers customers = new();
|
||||
public PdfExportSettings pdfExport { get; set; } = new();
|
||||
|
||||
// public string settingsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
|
||||
// "logofclient", "config.json");
|
||||
|
||||
public Settings()
|
||||
{
|
||||
_instance = this;
|
||||
@@ -32,7 +29,6 @@ public class Settings
|
||||
{
|
||||
if (!Directory.Exists(Global._instance.config_path) && !File.Exists((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
|
||||
_instance.schemaVersion = SchemaMigration.CURRENT_SCHEMA_VERSION;
|
||||
@@ -42,8 +38,6 @@ public class Settings
|
||||
|
||||
public static void Load()
|
||||
{
|
||||
//if (!string.IsNullOrEmpty(Global._instance.config_path)) _instance.settingsPath = Global._instance.config_path;
|
||||
|
||||
try
|
||||
{
|
||||
var contents = File.ReadAllText(Path.Combine(Global._instance.config_path, "config.json"));
|
||||
@@ -158,12 +152,6 @@ public class Global
|
||||
|
||||
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
|
||||
{
|
||||
var contents = File.ReadAllText(Path.Combine(
|
||||
@@ -247,13 +235,6 @@ public class Customer
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
// public static int GetIDByCustomerListItem(string item_content)
|
||||
// {
|
||||
// var id = item_content.Split(" - ")[0];
|
||||
// return int.Parse(id);
|
||||
// }
|
||||
}
|
||||
|
||||
public class AddressSets
|
||||
|
||||
@@ -28,7 +28,6 @@ public static class Logger
|
||||
{
|
||||
Console.WriteLine(ex);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public enum LogType
|
||||
|
||||
+20
-3
@@ -6,7 +6,7 @@
|
||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||
MinWidth="1000" MinHeight="600" IsVisible="False"
|
||||
x:Class="Logof_Client.MainWindow" WindowState="Maximized" Icon="assets/icon.ico"
|
||||
Title="Logof Client">
|
||||
Title="Logofclient">
|
||||
<Border>
|
||||
<Grid RowDefinitions="30,*">
|
||||
<Menu Background="#50888888">
|
||||
@@ -220,7 +220,6 @@
|
||||
<Label FontSize="9"
|
||||
Content="Elemente der ersten Menge ohne Elemente der zweiten Menge" />
|
||||
</StackPanel>
|
||||
|
||||
</Button>
|
||||
<Button HorizontalAlignment="Stretch" MinWidth="240"
|
||||
HorizontalContentAlignment="Center" x:Name="BtnCombineSymmetric"
|
||||
@@ -248,6 +247,24 @@
|
||||
<CheckBox HorizontalAlignment="Left" x:Name="CbMergeDeleteOld" IsChecked="False">Lösche ursprüngliche Sets</CheckBox>
|
||||
</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>
|
||||
</Grid>
|
||||
<Grid Grid.Row="2" Margin="20" ColumnDefinitions="*,5*,*" IsVisible="False" x:Name="GrdExportMarginOptions">
|
||||
@@ -271,7 +288,7 @@
|
||||
<Label Grid.Column="0" Content="Zellenrand rechts (mm)"></Label>
|
||||
<NumericUpDown Grid.Column="1" x:Name="NudExpMargCellPaddingRight" Minimum="0" Maximum="20" Value="5"></NumericUpDown>
|
||||
</Grid>
|
||||
<CheckBox Content="Laufzettel erstellen" x:Name="CbExpRnsEnable"></CheckBox>
|
||||
<CheckBox Content="Bundleitzettel erstellen" x:Name="CbExpRnsEnable"></CheckBox>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Column="1" Orientation="Vertical" Spacing="10">
|
||||
|
||||
+89
-90
@@ -31,7 +31,7 @@ public partial class MainWindow : Window
|
||||
SetSettingsCustomerEnabledState(false);
|
||||
//Hide();
|
||||
|
||||
var s = new StartupWindow();
|
||||
//var s = new StartupWindow();
|
||||
//s.Show();
|
||||
|
||||
_instance = this;
|
||||
@@ -85,74 +85,49 @@ public partial class MainWindow : Window
|
||||
{
|
||||
Logger.Log($"Error while doing wiki stuff: {ex.Message}", Logger.LogType.Error);
|
||||
}
|
||||
|
||||
//Thread.Sleep(3000);
|
||||
//Show();
|
||||
}
|
||||
|
||||
private async void StartAddressCheck(int addresSetID)
|
||||
{
|
||||
//var addresses = DataImport.ImportKasAddressList(path); // Ihr Code hier
|
||||
|
||||
var progressWindow = new ProgressWindow();
|
||||
|
||||
progressWindow.Show(_instance);
|
||||
|
||||
var processor = new AddressCheck(progressWindow);
|
||||
var result = await processor.Perform(addresSetID);
|
||||
|
||||
// foreach (var item in result)
|
||||
// {
|
||||
// }
|
||||
|
||||
progressWindow.Close();
|
||||
|
||||
|
||||
new ResultWindow(result, addresSetID).Show();
|
||||
|
||||
Settings.Save();
|
||||
|
||||
//await MessageBox.Show(_instance, $"{result.Count} Einträge fehlerhaft.", "Fertig");
|
||||
RefreshAddressSetListItems((LstCustomers.SelectedItem as Customer).ID);
|
||||
}
|
||||
|
||||
private async void StartAddressShortener(KasAddressList set)
|
||||
{
|
||||
//var addresses = DataImport.ImportKasAddressList(path); // Ihr Code hier
|
||||
|
||||
var progressWindow = new ProgressWindow();
|
||||
|
||||
progressWindow.Show(_instance);
|
||||
|
||||
var processor = new AddressShortener(progressWindow);
|
||||
await processor.Perform(set);
|
||||
|
||||
// foreach (var item in result)
|
||||
// {
|
||||
// }
|
||||
|
||||
progressWindow.Close();
|
||||
Settings.Save();
|
||||
//await MessageBox.Show(_instance, $"{result.Count} Einträge fehlerhaft.", "Fertig");
|
||||
|
||||
RefreshAddressSetListItems((LstCustomers.SelectedItem as Customer).ID);
|
||||
}
|
||||
|
||||
private async void StartAddressRepairer(KasAddressList set)
|
||||
{
|
||||
//var addresses = DataImport.ImportKasAddressList(path); // Ihr Code hier
|
||||
|
||||
var progressWindow = new ProgressWindow();
|
||||
|
||||
progressWindow.Show(_instance);
|
||||
|
||||
var processor = new AddressRepair(progressWindow);
|
||||
await processor.Perform(set);
|
||||
|
||||
// foreach (var item in result)
|
||||
// {
|
||||
// }
|
||||
|
||||
progressWindow.Close();
|
||||
Settings.Save();
|
||||
//await MessageBox.Show(_instance, $"{result.Count} Einträge fehlerhaft.", "Fertig");
|
||||
|
||||
RefreshAddressSetListItems((LstCustomers.SelectedItem as Customer).ID);
|
||||
}
|
||||
|
||||
|
||||
@@ -170,7 +145,7 @@ public partial class MainWindow : Window
|
||||
Process.Start(new ProcessStartInfo
|
||||
{
|
||||
FileName = "https://mypapercloud.de/logof/",
|
||||
UseShellExecute = true // Wichtig für Plattformübergreifendes Öffnen
|
||||
UseShellExecute = true
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -186,7 +161,7 @@ public partial class MainWindow : Window
|
||||
Process.Start(new ProcessStartInfo
|
||||
{
|
||||
FileName = "https://mypapercloud.de/logof/wiki/",
|
||||
UseShellExecute = true // Wichtig für Plattformübergreifendes Öffnen
|
||||
UseShellExecute = true
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -202,7 +177,7 @@ public partial class MainWindow : Window
|
||||
Process.Start(new ProcessStartInfo
|
||||
{
|
||||
FileName = "https://git.mypapercloud.de/fierke/logofclient",
|
||||
UseShellExecute = true // Wichtig für Plattformübergreifendes Öffnen
|
||||
UseShellExecute = true
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -251,19 +226,6 @@ public partial class MainWindow : Window
|
||||
_selectedWikiFilePath = item.Path;
|
||||
var text = await _wikiService.LoadFileContentAsync(item.Path);
|
||||
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;
|
||||
}
|
||||
else
|
||||
@@ -408,7 +370,6 @@ public partial class MainWindow : Window
|
||||
Global._instance.wiki_storage_path = chosen;
|
||||
Global.Save();
|
||||
|
||||
// reinit wiki service and reload tree
|
||||
_wikiService = new WikiService();
|
||||
PopulateNavTree();
|
||||
}
|
||||
@@ -424,7 +385,6 @@ public partial class MainWindow : Window
|
||||
|
||||
if (folder == null || folder.Count == 0) return;
|
||||
var chosen = PathUtilities.NormalizeFileSystemPath(folder[0].Path);
|
||||
//TbFontPath.Text = chosen;
|
||||
Global._instance.font_path = chosen;
|
||||
Global.Save();
|
||||
}
|
||||
@@ -468,9 +428,6 @@ public partial class MainWindow : Window
|
||||
Settings._instance.addressSets.addresses.Add(result.Item2);
|
||||
Settings.Save();
|
||||
progressWindow.Close();
|
||||
|
||||
|
||||
//new ResultWindow(result, addresSetID).Show();
|
||||
}
|
||||
|
||||
|
||||
@@ -500,8 +457,6 @@ public partial class MainWindow : Window
|
||||
foreach (var customer in Settings._instance.customers.customers)
|
||||
if (customer.ID == Settings._instance.customers.current.ID)
|
||||
customer.name = TbSettingsCustomerName.Text;
|
||||
//Settings.Save();
|
||||
//RefreshCustomerItems();
|
||||
}
|
||||
|
||||
private void LstSettingsCustomers_OnSelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||
@@ -510,9 +465,6 @@ public partial class MainWindow : Window
|
||||
if (LstSettingsCustomers.SelectedIndex < 0) return;
|
||||
Settings._instance.customers.current =
|
||||
((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;
|
||||
TbSettingsCustomerName.Text = Settings._instance.customers.current.name;
|
||||
TbSettingsCustomerSenderAddress.Text = Settings._instance.customers.current.sender_address;
|
||||
@@ -522,12 +474,19 @@ public partial class MainWindow : Window
|
||||
else
|
||||
TbSettingsCustomerPatchInfo.Text = "";
|
||||
SetSettingsCustomerEnabledState();
|
||||
//}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
(obj as Control).IsEnabled = enable;
|
||||
@@ -550,8 +509,6 @@ public partial class MainWindow : Window
|
||||
PopulateNavTree(editedWikiFilePath, editedWikiFilePath);
|
||||
};
|
||||
ew.Show();
|
||||
|
||||
//await MessageBox.Show(this, "Edit feature is currently disabled.", "Edit Disabled");
|
||||
}
|
||||
|
||||
public void RefreshCustomerItems(int index = 0)
|
||||
@@ -618,7 +575,7 @@ public partial class MainWindow : Window
|
||||
{
|
||||
try
|
||||
{
|
||||
MakeCalcManVisible();
|
||||
MakeCalcManVisible();
|
||||
var opts = new FilePickerOpenOptions();
|
||||
opts.Title = "Address-Set importieren...";
|
||||
opts.AllowMultiple = false;
|
||||
@@ -628,14 +585,11 @@ public partial class MainWindow : Window
|
||||
opts.FileTypeFilter = new[] { type };
|
||||
|
||||
var paths = await StorageProvider.OpenFilePickerAsync(opts);
|
||||
|
||||
if (paths?.Count <= 0) return;
|
||||
|
||||
if (LstCustomers.SelectedIndex < 0) return;
|
||||
|
||||
|
||||
var selected_path = paths[0].Path;
|
||||
|
||||
foreach (var customer in Settings._instance.customers.customers)
|
||||
if (customer == ((Customer)LstCustomers.SelectedItems[0]))
|
||||
{
|
||||
@@ -651,8 +605,6 @@ public partial class MainWindow : Window
|
||||
got.Item2.SetOwner(customer.ID);
|
||||
Settings._instance.addressSets.addresses.Add(got.Item2);
|
||||
}
|
||||
|
||||
//var customer_id = int.Parse(LstCustomers.SelectedItem.ToString().Split(" - ")[0]);
|
||||
RefreshAddressSetListItems(customer.ID);
|
||||
}
|
||||
else
|
||||
@@ -667,8 +619,6 @@ public partial class MainWindow : Window
|
||||
got.Item2.SetOwner(customer.ID);
|
||||
Settings._instance.addressSets.addresses.Add(got.Item2);
|
||||
}
|
||||
|
||||
//var customer_id = int.Parse(LstCustomers.SelectedItem.ToString().Split(" - ")[0]);
|
||||
RefreshAddressSetListItems(customer.ID);
|
||||
}
|
||||
}
|
||||
@@ -732,9 +682,15 @@ public partial class MainWindow : Window
|
||||
BtnShorten.IsEnabled = false;
|
||||
BtnRepair.IsEnabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
LstCombineAddressSetSort.Items.Clear();
|
||||
foreach (var selected in LstCustomerAdressSets.SelectedItems)
|
||||
{
|
||||
try
|
||||
{
|
||||
LstCombineAddressSetSort.Items.Add(selected as KasAddressList);
|
||||
} catch {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -753,19 +709,13 @@ public partial class MainWindow : Window
|
||||
opts.FileTypeFilter = new[] { type };
|
||||
|
||||
var paths = await StorageProvider.OpenFilePickerAsync(opts);
|
||||
|
||||
if (paths?.Count <= 0) return;
|
||||
|
||||
//if (LstSettingsCustomers.SelectedIndex < 0) return;
|
||||
|
||||
|
||||
var selected_path = paths[0].Path;
|
||||
|
||||
foreach (var customer in Settings._instance.customers.customers)
|
||||
if (customer.ID == ((Customer)LstSettingsCustomers.SelectedItems[0]).ID)
|
||||
customer.patch = AddressPatch.Import(selected_path);
|
||||
|
||||
|
||||
Settings.Save();
|
||||
} catch (Exception ex)
|
||||
{
|
||||
@@ -796,13 +746,12 @@ public partial class MainWindow : Window
|
||||
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)
|
||||
{
|
||||
var list = new List<KasAddressList>();
|
||||
foreach (var item in LstCustomerAdressSets.SelectedItems)
|
||||
foreach (var item in LstCombineAddressSetSort.Items)
|
||||
list.Add((KasAddressList)item);
|
||||
try
|
||||
{
|
||||
@@ -817,7 +766,7 @@ public partial class MainWindow : Window
|
||||
private void BtnCombineUnion_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var list = new List<KasAddressList>();
|
||||
foreach (var item in LstCustomerAdressSets.SelectedItems)
|
||||
foreach (var item in LstCombineAddressSetSort.Items)
|
||||
list.Add((KasAddressList)item);
|
||||
try
|
||||
{
|
||||
@@ -833,7 +782,7 @@ public partial class MainWindow : Window
|
||||
private void BtnCombineIntersection_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var list = new List<KasAddressList>();
|
||||
foreach (var item in LstCustomerAdressSets.SelectedItems)
|
||||
foreach (var item in LstCombineAddressSetSort.Items)
|
||||
list.Add((KasAddressList)item);
|
||||
try
|
||||
{
|
||||
@@ -850,7 +799,8 @@ public partial class MainWindow : Window
|
||||
if (RbComprefsid.IsChecked == true)
|
||||
{
|
||||
return CombineAddresses.CombineType.refsid;
|
||||
} else if (RbCompfinAd.IsChecked == true)
|
||||
}
|
||||
if (RbCompfinAd.IsChecked == true)
|
||||
{
|
||||
return CombineAddresses.CombineType.final_adress;
|
||||
}
|
||||
@@ -861,7 +811,7 @@ public partial class MainWindow : Window
|
||||
private void BtnCombineSymmetricDifference_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var list = new List<KasAddressList>();
|
||||
foreach (var item in LstCustomerAdressSets.SelectedItems)
|
||||
foreach (var item in LstCombineAddressSetSort.Items)
|
||||
list.Add((KasAddressList)item);
|
||||
|
||||
StartCombine(list, Convert.ToInt32((LstCustomers.SelectedItem as Customer).ID), "symdiff", GetCombiningTyp());
|
||||
@@ -912,8 +862,10 @@ public partial class MainWindow : Window
|
||||
filePath
|
||||
);
|
||||
|
||||
Logger.Log("PDF OK");
|
||||
Logger.Log("PDF seems OK");
|
||||
}
|
||||
|
||||
RefreshAddressSetListItems((LstCustomers.SelectedItem as Customer).ID);
|
||||
}
|
||||
|
||||
catch (Exception ex)
|
||||
@@ -1109,9 +1061,7 @@ public partial class MainWindow : Window
|
||||
}
|
||||
|
||||
if (_selectedCountry == null) return;
|
||||
//Console.WriteLine("Refreshing alternatives...");
|
||||
foreach (var a in _selectedCountry.alternatives) LbSettingsAlternatives.Items.Add(a);
|
||||
//Console.WriteLine(a);
|
||||
TbSettingsCountryName.Text = _selectedCountry.name;
|
||||
TbSettingsCountryTranslation.Text = _selectedCountry.translation;
|
||||
|
||||
@@ -1266,7 +1216,6 @@ public partial class MainWindow : Window
|
||||
if (set.ID == id)
|
||||
{
|
||||
curr_set = set;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1329,7 +1278,6 @@ public partial class MainWindow : Window
|
||||
{
|
||||
Logger.Log($"Error while changing CSV divider: {ex.Message}", Logger.LogType.Error);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private async void MnIAdSetDelete_OnClick(object? sender, RoutedEventArgs e)
|
||||
@@ -1347,14 +1295,14 @@ public partial class MainWindow : Window
|
||||
Settings.Save();
|
||||
RefreshAddressSetListItems(cus_id);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(this, ex.StackTrace, "Fehler");
|
||||
Logger.Log($"Error while deleting address set: {ex.Message}", Logger.LogType.Error);
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Tb_OnTextChanged(object? sender, TextChangedEventArgs e)
|
||||
@@ -1378,4 +1326,55 @@ public partial class MainWindow : Window
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,6 @@ public partial class NamingWindow : Window
|
||||
|
||||
AddButton("Ok");
|
||||
|
||||
|
||||
var tcs = new TaskCompletionSource<string>();
|
||||
wind.Closed += delegate { tcs.TrySetResult(res); };
|
||||
if (parent != null)
|
||||
|
||||
@@ -19,6 +19,5 @@ public partial class ProgressWindow : Window
|
||||
public void AddToLog(string message, string percent)
|
||||
{
|
||||
TbLog.Text = message + $"\n{percent}%";
|
||||
//ScvLog.ScrollToEnd();
|
||||
}
|
||||
}
|
||||
+61
-2
@@ -3,8 +3,9 @@
|
||||
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.ResultWindow"
|
||||
Title="Ergebnis">
|
||||
Title="Ergebnis" x:DataType="local:ResultWindow">
|
||||
<Grid Grid.ColumnDefinitions="200,*">
|
||||
<Grid>
|
||||
<Label Content="Filter" Margin="10,10,10,0" HorizontalAlignment="Stretch" VerticalAlignment="Top" />
|
||||
@@ -21,7 +22,65 @@
|
||||
</Grid>
|
||||
<ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
|
||||
<!-- <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}" 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" /> -->
|
||||
</ScrollViewer>
|
||||
|
||||
|
||||
+68
-72
@@ -1,6 +1,9 @@
|
||||
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;
|
||||
@@ -8,81 +11,74 @@ using Avalonia.Layout;
|
||||
using Avalonia.Media;
|
||||
|
||||
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 KasAddressList ur_addresses = new("Ergebnis_" + DateTime.Now.ToString("ddMMyy_HHmmss"));
|
||||
public List<KasPerson> ur_result;
|
||||
public List<CheckBox> warningtypecheckboxes = new();
|
||||
public List<ResultItem>? SelectedResults { get; set; }
|
||||
|
||||
public ResultWindow(List<KasPerson> result,
|
||||
int addressSetID)
|
||||
public ResultWindow(List<KasPerson> result, int addressSetID)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
DataContext = this;
|
||||
|
||||
ur_result = result;
|
||||
ur_addresses = ur_addresses;
|
||||
|
||||
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
|
||||
{
|
||||
|
||||
|
||||
// Filter to only show persons with errors
|
||||
var result_with_errors = result.Where(p => p.PersonError != null).ToList();
|
||||
LblResultCount.Content = $"{result_with_errors.Count}/{ur_result.Count} Ergebnisse";
|
||||
|
||||
// TbResults.Text = "";
|
||||
// foreach (var person in result_with_errors) TbResults.Text += person.PersonError.GetString()+"\n";
|
||||
LbResults.Items.Clear();
|
||||
foreach (var person in result_with_errors) LbResults.Items.Add(person.PersonError.ToString(person));
|
||||
// StkResults.Children.Clear();
|
||||
// foreach (var person in result_with_errors) StkResults.Children.Add(CreatePersonGrid(person));
|
||||
//LbResults.Items.Clear();
|
||||
// foreach (var person in result_with_errors)
|
||||
// LbResults.Items.Add(person.PersonError.ToString(person));
|
||||
Results = result_with_errors
|
||||
.Select(person => new ResultItem
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
foreach (var result in ur_addresses.KasPersons)
|
||||
@@ -139,7 +135,7 @@ public partial class ResultWindow : Window
|
||||
var cb = new CheckBox();
|
||||
cb.IsChecked = true;
|
||||
cb.Content = errtype.ToString();
|
||||
//cb.Click += (sender, e) => UpdateFilter();
|
||||
|
||||
errortypecheckboxes.Add(cb);
|
||||
StpFilterOptions.Children.Add(cb);
|
||||
}
|
||||
@@ -149,7 +145,7 @@ public partial class ResultWindow : Window
|
||||
var cb = new CheckBox();
|
||||
cb.IsChecked = true;
|
||||
cb.Content = wartype.ToString();
|
||||
//cb.Click += (sender, e) => UpdateFilter();
|
||||
|
||||
warningtypecheckboxes.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()
|
||||
{
|
||||
try
|
||||
@@ -224,12 +216,10 @@ public partial class ResultWindow : Window
|
||||
|
||||
LblResultCount.Content = $"{temp_result.Count}/{ur_result.Count} Ergebnisse";
|
||||
|
||||
LbResults.Items.Clear();
|
||||
foreach (var person in temp_result) LbResults.Items.Add(person.PersonError.ToString(person));
|
||||
// TbResults.Text = "";
|
||||
// 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));
|
||||
//LbResults.Items.Clear();
|
||||
GenerateView(temp_result);
|
||||
//foreach (var person in temp_result) LbResults.Items.Add(person.PersonError.ToString(person));
|
||||
|
||||
} catch (Exception ex)
|
||||
{
|
||||
Logger.Log("Error while updating filter: " + ex.Message, Logger.LogType.Warning);
|
||||
@@ -240,16 +230,7 @@ public partial class ResultWindow : Window
|
||||
|
||||
private void BtnShowSelected_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
// foreach (var selected in DgResult.SelectedItems)
|
||||
// try
|
||||
// {
|
||||
// var _asKas = (KasPerson)selected;
|
||||
// ViewSingle(_asKas.id);
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// Console.WriteLine(ex.Message);
|
||||
// }
|
||||
// once upon a time, there was a feature like this
|
||||
}
|
||||
|
||||
private void BtnExecuteFilter_OnClick(object? sender, RoutedEventArgs e)
|
||||
@@ -257,4 +238,19 @@ public partial class ResultWindow : Window
|
||||
Console.WriteLine("Updating filter...");
|
||||
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!;
|
||||
}
|
||||
@@ -8,6 +8,4 @@ public partial class StartupWindow : Window
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+71
-77
@@ -58,6 +58,33 @@ public class AddressCheck
|
||||
|
||||
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)
|
||||
{
|
||||
var errors = new List<ErrorTypes>();
|
||||
@@ -79,20 +106,6 @@ public class AddressCheck
|
||||
hasFaults = true;
|
||||
errors.Add(ErrorTypes.PlzNotUsable);
|
||||
}
|
||||
// if ((person.plz < 10000 && string.IsNullOrWhiteSpace(person.land)) ||
|
||||
// (person.plz < 10000 && person.land == "GER") ||
|
||||
// (person.plz < 10000 && person.land == "DE"))
|
||||
// {
|
||||
// hasFaults = true;
|
||||
// errors.Add(ErrorTypes.PlzTooShort);
|
||||
// }
|
||||
// else if ((person.plz > 99999 && string.IsNullOrWhiteSpace(person.land)) ||
|
||||
// (person.plz > 99999 && person.land == "GER") ||
|
||||
// (person.plz > 99999 && person.land == "DE"))
|
||||
// {
|
||||
// hasFaults = true;
|
||||
// errors.Add(ErrorTypes.PlzTooLong);
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
@@ -109,21 +122,6 @@ public class AddressCheck
|
||||
hasFaults = true;
|
||||
errors.Add(ErrorTypes.PPlzNotUsable);
|
||||
}
|
||||
|
||||
// if ((person.pplz < 10000 && string.IsNullOrWhiteSpace(person.land)) ||
|
||||
// (person.pplz < 10000 && person.land == "GER") ||
|
||||
// (person.pplz < 10000 && person.land == "DE"))
|
||||
// {
|
||||
// hasFaults = true;
|
||||
// errors.Add(ErrorTypes.PPlzTooShort);
|
||||
// }
|
||||
// else if ((person.pplz > 99999 && string.IsNullOrWhiteSpace(person.land)) ||
|
||||
// (person.pplz > 99999 && person.land == "GER") ||
|
||||
// (person.pplz > 99999 && person.land == "DE"))
|
||||
// {
|
||||
// hasFaults = true;
|
||||
// errors.Add(ErrorTypes.PPlzTooLong);
|
||||
// }
|
||||
}
|
||||
|
||||
if (warnings.Contains(WarningTypes.NoPLZ) && warnings.Contains(WarningTypes.NoPPLZ))
|
||||
@@ -184,47 +182,34 @@ public class AddressCheck
|
||||
}
|
||||
|
||||
// Address-Component-Count
|
||||
if (!string.IsNullOrWhiteSpace(person.strasse2)) address_component_count++;
|
||||
if (!string.IsNullOrWhiteSpace(person.land)) address_component_count++;
|
||||
if (!string.IsNullOrWhiteSpace(person.name1)) address_component_count++;
|
||||
if (!string.IsNullOrWhiteSpace(person.name2)) address_component_count++;
|
||||
if (!string.IsNullOrWhiteSpace(person.name3)) address_component_count++;
|
||||
if (!string.IsNullOrWhiteSpace(person.name4)) address_component_count++;
|
||||
if (!string.IsNullOrWhiteSpace(person.name5)) address_component_count++;
|
||||
if (!string.IsNullOrWhiteSpace(person.funktion)) address_component_count++;
|
||||
if (!string.IsNullOrWhiteSpace(person.funktion2)) address_component_count++;
|
||||
if (!string.IsNullOrWhiteSpace(person.funktionad)) address_component_count++;
|
||||
if (!string.IsNullOrWhiteSpace(person.abteilung)) address_component_count++;
|
||||
|
||||
// Double-Refsid or DoubleAddresses
|
||||
foreach (var person2 in adset.KasPersons)
|
||||
// Double-Refsid
|
||||
if (person.refsid > 0 &&
|
||||
doubledRefsids.ContainsKey(person.refsid))
|
||||
{
|
||||
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;
|
||||
warnings.Add(WarningTypes.DoubledRefsid);
|
||||
}
|
||||
// Double-Address
|
||||
var addressKey = (
|
||||
person.name,
|
||||
person.strasse,
|
||||
person.vorname,
|
||||
person.ort,
|
||||
person.funktion,
|
||||
person.funktion2,
|
||||
person.funktionad,
|
||||
person.abteilung,
|
||||
person.name1,
|
||||
person.name2,
|
||||
person.name3,
|
||||
person.name4,
|
||||
person.name5);
|
||||
|
||||
if (person.name == person2.name &&
|
||||
person.strasse == person2.strasse &&
|
||||
person.vorname == person2.vorname &&
|
||||
person.ort == person2.ort &&
|
||||
person.funktion == person2.funktion &&
|
||||
person.funktion2 == person2.funktion2 &&
|
||||
person.funktionad == person2.funktionad &&
|
||||
person.abteilung == person2.abteilung &&
|
||||
person.name1 == person2.name1 &&
|
||||
person.name2 == person2.name2 &&
|
||||
person.name3 == person2.name3 &&
|
||||
person.name4 == person2.name4 &&
|
||||
person.name5 == person2.name5) //
|
||||
|
||||
{
|
||||
hasFaults = true;
|
||||
errors.Add(ErrorTypes.MayBeSameAddress);
|
||||
}
|
||||
if (doubledAddresses.ContainsKey(addressKey))
|
||||
{
|
||||
hasFaults = true;
|
||||
errors.Add(ErrorTypes.MayBeSameAddress);
|
||||
}
|
||||
|
||||
// Adressen-Länge
|
||||
@@ -246,16 +231,26 @@ public class AddressCheck
|
||||
}
|
||||
|
||||
// Fortschritt aktualisieren
|
||||
Interlocked.Increment(ref current);
|
||||
var percent = current / (double)total * 100;
|
||||
await Dispatcher.UIThread.InvokeAsync(() =>
|
||||
{
|
||||
if (hasFaults)
|
||||
_progress.AddToLog($"Person mit id {person.id} ist fehlerhaft",
|
||||
Convert.ToInt32(percent).ToString());
|
||||
// Interlocked.Increment(ref current);
|
||||
// var percent = current / (double)total * 100;
|
||||
// await Dispatcher.UIThread.InvokeAsync(() =>
|
||||
// {
|
||||
// if (hasFaults)
|
||||
// _progress.AddToLog($"Person mit id {person.id} ist fehlerhaft",
|
||||
// Convert.ToInt32(percent).ToString());
|
||||
//
|
||||
// _progress.ChangePercentage(percent);
|
||||
// });
|
||||
|
||||
_progress.ChangePercentage(percent);
|
||||
});
|
||||
var cd = Interlocked.Increment(ref current);
|
||||
|
||||
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
|
||||
.Where(p => p.PersonError != null)
|
||||
.ToList();
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -5,36 +5,6 @@ namespace Logof_Client;
|
||||
|
||||
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>
|
||||
/// Creates max-seven-lines-long Markdown address-string. Analyzes the KasPerson-Instance to find the best result.
|
||||
/// </summary>
|
||||
@@ -93,7 +63,7 @@ public static class AddressCreator
|
||||
}
|
||||
|
||||
CountryFound:
|
||||
string_address = "**" + countryToShow + "**"; // Needs to be bold
|
||||
string_address = "**" + countryToShow + "**"; // bold
|
||||
address_line_count++;
|
||||
}
|
||||
|
||||
@@ -126,7 +96,6 @@ public static class AddressCreator
|
||||
address_line_count++;
|
||||
}
|
||||
|
||||
// REIHENFOLGE
|
||||
var nameattribs = new[]
|
||||
{ address.name1, address.name2, address.name3, address.name4, address.name5, address.abteilung };
|
||||
|
||||
@@ -153,7 +122,6 @@ public static class AddressCreator
|
||||
string plz = address.plz;
|
||||
if (address.IsGermany()) plz = NormalizeGermanPLZ(address.plz);
|
||||
|
||||
|
||||
KasPerson.SetUsedPLZ(id, plz);
|
||||
string_address = plz + " " + address.ort + "\n" + string_address;
|
||||
address_line_count++;
|
||||
@@ -215,7 +183,6 @@ public static class AddressCreator
|
||||
)
|
||||
+ (string.IsNullOrWhiteSpace(namezus) ? "" : $" ({namezus.Trim()})");
|
||||
|
||||
// else
|
||||
return string.Join(" ",
|
||||
new[] { anrede, titel, vorname, adel, name }
|
||||
.Where(s => !string.IsNullOrWhiteSpace(s))
|
||||
@@ -271,7 +238,6 @@ public static class AddressCreator
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
public static string NormalizeGermanPLZ(string plz)
|
||||
|
||||
+24
-27
@@ -63,37 +63,37 @@ public class AddressPatch
|
||||
{
|
||||
var patch = new AddressPatch();
|
||||
|
||||
// Alle Zeilen aus der Datei laden
|
||||
var lines = File.ReadAllLines(filename.LocalPath);
|
||||
// Alle Zeilen aus der Datei laden
|
||||
var lines = File.ReadAllLines(filename.LocalPath);
|
||||
|
||||
// Alle Properties der Klasse (Strings und bools)
|
||||
var properties = typeof(AddressPatch).GetProperties(BindingFlags.Public | BindingFlags.Instance);
|
||||
// Alle Properties der Klasse (Strings und bools)
|
||||
var properties = typeof(AddressPatch).GetProperties(BindingFlags.Public | BindingFlags.Instance);
|
||||
|
||||
// Nur die Properties, die mit _is enden (also die String-Werte)
|
||||
var stringProps = properties.Where(p => p.PropertyType == typeof(string) && p.Name.EndsWith("_is"));
|
||||
// Nur die Properties, die mit _is enden (also die String-Werte)
|
||||
var stringProps = properties.Where(p => p.PropertyType == typeof(string) && p.Name.EndsWith("_is"));
|
||||
|
||||
foreach (var prop in stringProps)
|
||||
{
|
||||
// Beispiel: prop.Name = "name_is"
|
||||
var baseName = prop.Name.Substring(0, prop.Name.Length - 3); // "name"
|
||||
foreach (var prop in stringProps)
|
||||
{
|
||||
// Beispiel: prop.Name = "name_is"
|
||||
var baseName = prop.Name.Substring(0, prop.Name.Length - 3); // "name"
|
||||
|
||||
// In der Datei wird nach "name:" gesucht (ohne _is)
|
||||
var line = lines.FirstOrDefault(l => l.StartsWith(baseName + ":"));
|
||||
if (line != null)
|
||||
{
|
||||
// Wert extrahieren (alles nach dem Doppelpunkt)
|
||||
var value = line.Substring(line.IndexOf(':') + 1).Trim();
|
||||
// In der Datei wird nach "name:" gesucht (ohne _is)
|
||||
var line = lines.FirstOrDefault(l => l.StartsWith(baseName + ":"));
|
||||
if (line != null)
|
||||
{
|
||||
// Wert extrahieren (alles nach dem Doppelpunkt)
|
||||
var value = line.Substring(line.IndexOf(':') + 1).Trim();
|
||||
|
||||
// Wert im Patch-Objekt setzen
|
||||
prop.SetValue(patch, value);
|
||||
// Wert im Patch-Objekt setzen
|
||||
prop.SetValue(patch, value);
|
||||
|
||||
// Passendes has_ Feld aktivieren, z.B. "has_name"
|
||||
var hasProp = properties.FirstOrDefault(p => p.Name == "has_" + baseName);
|
||||
if (hasProp != null && hasProp.PropertyType == typeof(bool)) hasProp.SetValue(patch, true);
|
||||
}
|
||||
}
|
||||
// Passendes has_ Feld aktivieren, z.B. "has_name"
|
||||
var hasProp = properties.FirstOrDefault(p => p.Name == "has_" + baseName);
|
||||
if (hasProp != null && hasProp.PropertyType == typeof(bool)) hasProp.SetValue(patch, true);
|
||||
}
|
||||
}
|
||||
|
||||
return patch;
|
||||
return patch;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -101,8 +101,6 @@ public class AddressPatch
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -135,6 +133,5 @@ public class AddressPatch
|
||||
}
|
||||
|
||||
return "Error while parsing";
|
||||
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,6 @@ public class AddressRepair(ProgressWindow progressWindow)
|
||||
{
|
||||
foreach (var person in list.KasPersons)
|
||||
{
|
||||
|
||||
// German PLZ too short (e.g. Dresden)
|
||||
if (person.IsGermany() && person.plz.Length <= 4)
|
||||
{
|
||||
@@ -23,13 +22,11 @@ public class AddressRepair(ProgressWindow progressWindow)
|
||||
person.plz = "0" + person.plz;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Log($"Error while performing address shortener: {ex.Message}", Logger.LogType.Error);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+49
-52
@@ -8,72 +8,69 @@ namespace Logof_Client;
|
||||
|
||||
public class AddressShortener(ProgressWindow progressWindow)
|
||||
{
|
||||
private readonly ProgressWindow _progress = progressWindow;
|
||||
|
||||
public async Task Perform(KasAddressList list)
|
||||
{
|
||||
try
|
||||
{
|
||||
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];
|
||||
for (int j = 0; j < list.KasPersons.Count; j++)
|
||||
{
|
||||
if (i == j) continue;
|
||||
var sec_address = list.KasPersons[j];
|
||||
|
||||
if (address.refsid == sec_address.refsid && !doubled_ids.Contains(address.refsid) && address.refsid != 0)
|
||||
{
|
||||
var address = list.KasPersons[i];
|
||||
for (int j = 0; j < list.KasPersons.Count; j++)
|
||||
{
|
||||
if (i == j) continue;
|
||||
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);
|
||||
}
|
||||
}
|
||||
doubled_ids.Add(address.refsid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// delete doubled addresses by refsid
|
||||
foreach (int id in doubled_ids)
|
||||
{
|
||||
// does this remove both of the doubled addresses?
|
||||
list.KasPersons.Remove(list.KasPersons.FirstOrDefault(x => x.refsid == id));
|
||||
}
|
||||
|
||||
// delete doubled addresses by refsid
|
||||
foreach (int id in doubled_ids)
|
||||
List<int> toRemove = new List<int>();
|
||||
foreach (var address in list.KasPersons)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (address.PersonError.errors.Contains(AddressCheck.ErrorTypes.NoPLZorPPLZ))
|
||||
{
|
||||
// does this remove both of the doubled addresses?
|
||||
list.KasPersons.Remove(list.KasPersons.FirstOrDefault(x => x.refsid == id));
|
||||
toRemove.Add(address.id);
|
||||
}
|
||||
|
||||
List<int> toRemove = new List<int>();
|
||||
foreach (var address in list.KasPersons)
|
||||
else if (address.PersonError.errors.Contains(AddressCheck.ErrorTypes.PlzNotUsable) &&
|
||||
address.PersonError.errors.Contains(AddressCheck.ErrorTypes.PPlzNotUsable))
|
||||
{
|
||||
try
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
// delete doubled addresses by refsid
|
||||
foreach (int id in toRemove)
|
||||
toRemove.Add(address.id);
|
||||
} else if (address.PersonError.errors.Contains(AddressCheck.ErrorTypes.PlzNotUsable) &&
|
||||
address.PersonError.warnings.Contains(AddressCheck.WarningTypes.NoPPLZ))
|
||||
{
|
||||
// does this remove both of the doubled addresses?
|
||||
list.KasPersons.Remove(list.KasPersons.Find(x => x.id == id));
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -30,15 +30,15 @@ public class CombineAddresses
|
||||
{
|
||||
var result = await Execute(address_lists,type,comb_type,exportUnused);
|
||||
|
||||
if (deleteOld == true)
|
||||
{
|
||||
foreach (var list in address_lists)
|
||||
{
|
||||
Settings._instance.addressSets.addresses.Remove(list);
|
||||
}
|
||||
}
|
||||
if (deleteOld == true)
|
||||
{
|
||||
foreach (var list in address_lists)
|
||||
{
|
||||
Settings._instance.addressSets.addresses.Remove(list);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -46,8 +46,6 @@ public class CombineAddresses
|
||||
}
|
||||
|
||||
return (null,null);
|
||||
|
||||
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -145,7 +142,6 @@ public class CombineAddresses
|
||||
else
|
||||
second_result.KasPersons.Add(person);
|
||||
|
||||
|
||||
progress.Increment();
|
||||
if (progress.LogAction == null) continue;
|
||||
var logMessage =
|
||||
@@ -162,7 +158,6 @@ public class CombineAddresses
|
||||
}
|
||||
|
||||
return (null,null);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -211,7 +206,6 @@ public class CombineAddresses
|
||||
}
|
||||
|
||||
return (null,null);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -274,7 +268,6 @@ public class CombineAddresses
|
||||
}
|
||||
|
||||
return (null,null);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -343,9 +336,7 @@ public class CombineAddresses
|
||||
}
|
||||
|
||||
return (null,null);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class Progress
|
||||
|
||||
@@ -60,7 +60,6 @@ public class CsvBuilder
|
||||
EscapeCsvField(l.funktionad)
|
||||
}));
|
||||
|
||||
// weitere Cases
|
||||
return result.ToString();
|
||||
}
|
||||
|
||||
@@ -81,6 +80,5 @@ public class CsvBuilder
|
||||
}
|
||||
|
||||
return "";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,8 +131,6 @@ public class DataImport
|
||||
.Where(p => p.PropertyType == typeof(bool) && p.Name.StartsWith("has_", StringComparison.OrdinalIgnoreCase))
|
||||
.ToArray();
|
||||
|
||||
//var last_refsid = 1000000;
|
||||
|
||||
while (!reader.EndOfStream)
|
||||
{
|
||||
var line = reader.ReadLine();
|
||||
@@ -143,8 +141,6 @@ public class DataImport
|
||||
|
||||
var fieldValues = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
//var refsid_existing = false;
|
||||
|
||||
foreach (var hasProp in hasProperties)
|
||||
{
|
||||
var fieldName = hasProp.Name.Substring(4);
|
||||
@@ -241,22 +237,9 @@ public class DataImport
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
private static int ParseInt(string input)
|
||||
{
|
||||
return int.TryParse(input, out var result) ? result : 0;
|
||||
|
||||
+22
-78
@@ -48,8 +48,6 @@ public class PdfBuilder
|
||||
{
|
||||
Logger.Log($"Error while font resolving: {ex.Message}",Logger.LogType.Error);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static void EnsureFontResolverRegistered()
|
||||
@@ -57,14 +55,12 @@ public class PdfBuilder
|
||||
try
|
||||
{
|
||||
if (GlobalFontSettings.FontResolver != null) return;
|
||||
//var fontsDir = Path.Combine(AppContext.BaseDirectory, "fonts");
|
||||
GlobalFontSettings.FontResolver = new StableFontResolver(Global._instance.font_path);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Log($"Error while ensuring font resolver register state: {ex.Message}",Logger.LogType.Error);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static string StripStyleSuffix(string name)
|
||||
@@ -84,7 +80,6 @@ public class PdfBuilder
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -101,11 +96,6 @@ public class PdfBuilder
|
||||
{
|
||||
// Find the AddressSet by ID
|
||||
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)
|
||||
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");
|
||||
|
||||
// Generate markdown addresses from all KasPersons in the set
|
||||
//var addresses = new string?[addressSet.KasPersons.Count];
|
||||
var addresses_german = new List<string>();
|
||||
var addresses_inter = new List<string>();
|
||||
|
||||
@@ -171,8 +160,6 @@ public class PdfBuilder
|
||||
addresses_inter.Add(addr);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (addresses_german.Count == 0 && addresses_inter.Count == 0)
|
||||
{
|
||||
MessageBox.Show(MainWindow._instance, "Keine validen Adressen konnten generiert werden. Abbruch.", "Fehler");
|
||||
@@ -188,17 +175,11 @@ public class PdfBuilder
|
||||
{
|
||||
ExportRunningSheets(addressSetId, outputPath);
|
||||
}
|
||||
//CreateAddressLabelPdfWithPlaceholder(addresses_german, placeholderText, outputPath);
|
||||
//CreateAddressLabelPdfWithPlaceholder(addresses_inter, placeholderText, output_inter);
|
||||
|
||||
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Log($"Error while creating address label pdf from address set with placeholder: {ex.Message}",Logger.LogType.Error);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -211,32 +192,31 @@ public class PdfBuilder
|
||||
{
|
||||
try
|
||||
{
|
||||
if (addresses == null || addresses.Count == 0)
|
||||
throw new ArgumentException("Addresses array cannot be null or empty");
|
||||
if (addresses == null || addresses.Count == 0)
|
||||
throw new ArgumentException("Addresses array cannot be null or empty");
|
||||
|
||||
var document = new PdfDocument();
|
||||
var document = new PdfDocument();
|
||||
|
||||
var addressIndex = 0;
|
||||
var isFirstCell = true;
|
||||
var addressIndex = 0;
|
||||
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();
|
||||
page.Size = PageSize.A4;
|
||||
|
||||
using (var gfx = XGraphics.FromPdfPage(page))
|
||||
{
|
||||
DrawPageWithPlaceholder(gfx, addresses, ref addressIndex, ref isFirstCell, placeholderText, pvst);
|
||||
}
|
||||
DrawPageWithPlaceholder(gfx, addresses, ref addressIndex, ref isFirstCell, placeholderText, pvst);
|
||||
}
|
||||
}
|
||||
|
||||
document.Save(outputPath);
|
||||
document.Save(outputPath);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void InsertDPPressepostImage(XGraphics gfx, XRect cell)
|
||||
@@ -307,7 +285,6 @@ public class PdfBuilder
|
||||
{
|
||||
const double imageSizeX = 47.3; // pt
|
||||
const double imageSizeY = 14.8; // pt
|
||||
//const double margin = 20.0; // pt
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private enum TextStyle
|
||||
@@ -673,7 +649,6 @@ public class PdfBuilder
|
||||
return availableHeightMm / _settings.rowsPerPage;
|
||||
}
|
||||
|
||||
|
||||
public void ExportRunningSheets(int setID, string path)
|
||||
{
|
||||
string international_path = path;
|
||||
@@ -681,18 +656,17 @@ public class PdfBuilder
|
||||
{
|
||||
path = path.Substring(0, path.Length - 4);
|
||||
international_path = path;
|
||||
path = path + "-Laufzettel.pdf";
|
||||
international_path = international_path + "-Laufzettel-International.pdf";
|
||||
path = path + "-Leitzettel.pdf";
|
||||
international_path = international_path + "-Leitzettel-International.pdf";
|
||||
}
|
||||
else
|
||||
{
|
||||
path = path + "-Laufzettel.pdf";
|
||||
international_path = international_path + "-Laufzettel-International.pdf";
|
||||
path = path + "-Leitzettel.pdf";
|
||||
international_path = international_path + "-Leitzettel-International.pdf";
|
||||
}
|
||||
|
||||
CreateGermanyRunningSheets(setID, path);
|
||||
CreateInternationalRunningSheets(setID, international_path);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -700,7 +674,7 @@ public class PdfBuilder
|
||||
{
|
||||
KasAddressList list = Settings._instance.addressSets.GetAddressSetByID(setID);
|
||||
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.Author = "logofclient";
|
||||
|
||||
@@ -792,21 +766,8 @@ public class PdfBuilder
|
||||
document.Save(path);
|
||||
}
|
||||
|
||||
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){
|
||||
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)
|
||||
{
|
||||
double line = 1.0;
|
||||
|
||||
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),
|
||||
XStringFormats.TopLeft);
|
||||
|
||||
// Bottom left labels
|
||||
// Bottom left labels
|
||||
gfx.DrawString("Einlieferungsdatum:", fontLabel, XBrushes.Black,
|
||||
new XRect(x + 5, y + r1 + r2 + r3 + 4, leftBottomW - 10, 14),
|
||||
@@ -1082,22 +1042,7 @@ public class PdfBuilder
|
||||
|
||||
document.Save(path);
|
||||
}
|
||||
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")
|
||||
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")
|
||||
{
|
||||
double line = 1.0;
|
||||
|
||||
@@ -1208,7 +1153,6 @@ public class PdfBuilder
|
||||
new XRect(midSplit + 5, y + r1 + r2 + 4, w - (midSplit - x) - 10, 14),
|
||||
XStringFormats.TopLeft);
|
||||
|
||||
// Bottom left labels
|
||||
// Bottom left labels
|
||||
gfx.DrawString("Einlieferungsdatum:", fontLabel, XBrushes.Black,
|
||||
new XRect(x + 5, y + r1 + r2 + r3 + 4, leftBottomW - 10, 14),
|
||||
|
||||
@@ -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;
|
||||
// }
|
||||
}
|
||||
Reference in New Issue
Block a user