using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Platform.Storage; namespace Logof_Client; public partial class MainWindow : Window { public static MainWindow _instance; public Uri filePath; public MainWindow() { InitializeComponent(); //Hide(); var s = new StartupWindow(); //s.Show(); _instance = this; WindowState = WindowState.Maximized; Global.Load(); Settings.Load(); //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(); //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) { Environment.Exit(0); } private void MnuAbout_OnClick(object? sender, RoutedEventArgs e) { throw new NotImplementedException(); } private void MnuHelp_OnClick(object? sender, RoutedEventArgs e) { throw new NotImplementedException(); } private void MnuGit_OnClick(object? sender, RoutedEventArgs e) { try { Process.Start(new ProcessStartInfo { FileName = "https://git.mypapercloud.de/fierke/logofclient", UseShellExecute = true // Wichtig für Plattformübergreifendes Öffnen }); } catch (Exception ex) { Console.WriteLine($"Fehler beim Öffnen des Links: {ex.Message}"); } } private async void BtnChooseFile_OnClick(object? sender, RoutedEventArgs e) { var topLevel = GetTopLevel(this); var file = await topLevel!.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { Title = "KAS-CSV-Datei auswählen", AllowMultiple = false, FileTypeFilter = new[] { new FilePickerFileType(".csv-Datei") { Patterns = new[] { "*.csv" } //Patterns = new[] { "*" } } } }); if (file == null) return; //TbFilename.Text = file[0].Path.ToString(); filePath = file[0].Path; } private void BtnCheck_OnClick(object? sender, RoutedEventArgs e) { MakeCalcManVisible(); if (LstCustomerAdressSets.SelectedIndex == -1) { MessageBox.Show(null, "Bitte zunächst ein Adress-Set auswählen", "Kein Adress-Set ausgewählt"); return; } //var set = new KasAddressList(""); //foreach (var adset in Settings._instance.addressSets.addresses) //if (adset.ID == KasAddressList.GetIDByAddressSetListItem(LstCustomerAdressSets.SelectedItem.ToString())) StartAddressCheck(KasAddressList.GetIDByAddressSetListItem(LstCustomerAdressSets.SelectedItem.ToString())); // var result = DataImport.ImportKasAddressList(filePath); // if (result.Item1) // { // var check_result = new AddressCheck().Perform(result.Item2); // foreach (var item in check_result.Result) // { // Console.WriteLine(); // Console.Write(item.Item1 + " "); // foreach (var error in item.Item2) Console.Write(error + ", "); // } // } } private void BtnCombine_OnClick(object? sender, RoutedEventArgs e) { GrdCalcMan.IsVisible = false; GrdCombineTypes.IsVisible = true; } private void MakeCalcManVisible() { GrdCalcMan.IsVisible = true; GrdCombineTypes.IsVisible = false; } private async void StartCombine(Uri path) { MakeCalcManVisible(); var addresses = DataImport.ImportKasAddressList(path); var progressWindow = new ProgressWindow(); var address_list = new List { addresses.Item2 }; var topLevel = GetTopLevel(this); var file = await topLevel!.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { Title = "Weitere KAS-CSV-Dateien auswählen", AllowMultiple = true, FileTypeFilter = new[] { new FilePickerFileType(".csv-Dateien") { Patterns = new[] { "*.csv" } //Patterns = new[] { "*" } } } }); if (file == null) return; //filePath = file[0].Path; foreach (var f in file) address_list.Add(DataImport.ImportKasAddressList(f.Path).Item2); progressWindow.Show(_instance); var processor = new CombineAddresses(progressWindow); //var result = await processor.Perform(address_list); progressWindow.Close(); //File.WriteAllText(OpenSettingsSaveAsDialog().Result, //new CsvBuilder( //"refsid,anrede,titel,vorname,adel,name,namezus,anredzus,strasse,strasse2,plz,ort,land,pplz,postfach,name1,name2,name3,name4,name5,funktion,funktion2,abteilung,funktionad,lastupdate", //result).BuildKas()); } private async Task OpenSettingsSaveAsDialog() { var settingsFileName = "KAS-Adress-Liste"; try { var filePicker = new SaveFileDialog { Title = "Datei speichern...", InitialFileName = $"{settingsFileName}.csv", DefaultExtension = ".csv", Filters = new List { new() { Name = "CSV-Datei", Extensions = { "csv" } } } }; var settingsSavePath = await filePicker.ShowAsync(this); if (settingsSavePath == null) { } return settingsSavePath; //SettingsManager.Save(settingsSavePath); //Logger.Log("Settings saved at " + settingsSavePath); } catch (Exception ex) { //Logger.Log("Saving file not successful: " + ex.Message, Logger.LogType.Error); await MessageBox.Show(this, ex.Message, "Fehler beim Speichern der Datei"); return null; } } private async void StartCombine(List address_lists, int owner_id, string type) { var progressWindow = new ProgressWindow(); progressWindow.Show(_instance); var processor = new CombineAddresses(progressWindow); var result = await processor.Perform(address_lists, type, CbMergeExportUnmerged.IsChecked); if (result.Item1 != null) result.Item1.owner_id = owner_id; if (result.Item2 != null) result.Item2.owner_id = owner_id; if (result.Item1 != null) Settings._instance.addressSets.addresses.Add(result.Item1); if (result.Item2 != null) Settings._instance.addressSets.addresses.Add(result.Item2); Settings.Save(); progressWindow.Close(); //new ResultWindow(result, addresSetID).Show(); } private void BtnSettingsAddCustomer_OnClick(object? sender, RoutedEventArgs e) { Settings._instance.customers.customers.Add(new Customer()); TbSettingsCustomerDescription.Text = ""; TbSettingsCustomerName.Text = ""; TbSettingsCustomerPatchInfo.Text = ""; Settings.Save(); RefreshCustomerItems(); try { LstSettingsCustomers.SelectedIndex = LstSettingsCustomers.Items.Count - 1; } catch { } } private void TbSettingsCustomerName_OnTextChanged(object? sender, TextChangedEventArgs e) { if (LstSettingsCustomers.SelectedIndex == null || LstSettingsCustomers.SelectedIndex == -1) return; foreach (var customer in Settings._instance.customers.customers) if (customer.ID == Settings._instance.customers.current) customer.name = TbSettingsCustomerName.Text; //Settings.Save(); //RefreshCustomerItems(); } private void LstSettingsCustomers_OnSelectionChanged(object? sender, SelectionChangedEventArgs e) { if (LstSettingsCustomers.SelectedIndex < 0) return; Settings._instance.customers.current = Customer.GetIDByCustomerListItem(LstSettingsCustomers.SelectedItems[0].ToString()); foreach (var customer in Settings._instance.customers.customers) if (customer.ID == Settings._instance.customers.current) { TbSettingsCustomerDescription.Text = customer.description; TbSettingsCustomerName.Text = customer.name; TbSettingsCustomerSenderAddress.Text = customer.sender_address; TbSettingsCustomerCsvSeparator.Text = customer.separator.ToString(); if (customer.patch != null) TbSettingsCustomerPatchInfo.Text = customer.patch.ToString(); else TbSettingsCustomerPatchInfo.Text = ""; } } public void RefreshCustomerItems(int index = 0) { if (LstCustomers.Items.Count > 0) LstCustomers.SelectedIndex = -1; else LstCustomers.SelectedItem = null; LstCustomers.Items.Clear(); if (LstSettingsCustomers.Items.Count > 0) LstSettingsCustomers.SelectedIndex = -1; else LstSettingsCustomers.SelectedItem = null; LstSettingsCustomers.Items.Clear(); foreach (var customer in Settings._instance.customers.customers) { LstCustomers.Items.Add(customer.ID + " - " + customer.name); LstSettingsCustomers.Items.Add(customer.ID + " - " + customer.name); } try { LstSettingsCustomers.SelectedIndex = index; } catch { } } private void TbSettingsCustomerDescription_OnTextChanged(object? sender, TextChangedEventArgs e) { if (LstSettingsCustomers.SelectedIndex == null || LstSettingsCustomers.SelectedIndex == -1) return; foreach (var customer in Settings._instance.customers.customers) if (customer.ID == Settings._instance.customers.current) customer.description = TbSettingsCustomerDescription.Text; //Settings.Save(); } private void BtnSettingsSaveCustomerData_OnClick(object? sender, RoutedEventArgs e) { Settings.Save(); RefreshCustomerItems(LstSettingsCustomers.SelectedIndex); } private void LstCustomers_OnSelectionChanged(object? sender, SelectionChangedEventArgs e) { MakeCalcManVisible(); if (LstCustomers.SelectedItems == null || LstCustomers.SelectedIndex == -1) return; var customer_id = int.Parse(LstCustomers.SelectedItem.ToString().Split(" - ")[0]); RefreshAddressSetListItems(customer_id); } private async void BtnCustomerAddressSetImport_OnClick(object? sender, RoutedEventArgs e) { MakeCalcManVisible(); var opts = new FilePickerOpenOptions(); opts.Title = "Address-Set importieren..."; opts.AllowMultiple = false; var type = new FilePickerFileType("CSV-Dateien (*.csv)"); type.Patterns = new[] { "*.csv" }; 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.ID == Customer.GetIDByCustomerListItem(LstCustomers.SelectedItems[0].ToString())) { if (customer.patch == null) { var got = DataImport.ImportKasAddressList(selected_path, null, customer.separator); if (!got.Item1) { Console.WriteLine("Error while importing. Please try another file."); } else { 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 { var got = DataImport.ImportKasAddressList(selected_path, customer.patch, customer.separator); if (!got.Item1) { Console.WriteLine("Error while importing. Please try another file."); } else { 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); } } Settings.Save(); } public void RefreshAddressSetListItems(int customer_id) { BtnCheck.IsEnabled = false; BtnCombine.IsEnabled = false; BtnGenerateLabels.IsEnabled = false; BtnRepair.IsEnabled = false; BtnShorten.IsEnabled = false; if (LstCustomers.SelectedIndex < 0) return; LstCustomerAdressSets.SelectedItems = null; LstCustomerAdressSets.Items.Clear(); foreach (var k in Settings._instance.addressSets.addresses) foreach (var customer in Settings._instance.customers.customers) if (customer.ID == k.owner_id && customer.ID == customer_id) LstCustomerAdressSets.Items.Add(k.ID + " - " + k.Name + "(" + k.KasPersons.Count + " Einträge)"); } private void LstCustomerAdressSets_OnSelectionChanged(object? sender, SelectionChangedEventArgs e) { MakeCalcManVisible(); if (LstCustomerAdressSets.SelectedItems == null || LstCustomerAdressSets.SelectedIndex == -1) { BtnCheck.IsEnabled = false; BtnCombine.IsEnabled = false; BtnGenerateLabels.IsEnabled = false; BtnRepair.IsEnabled = false; BtnShorten.IsEnabled = false; } else { BtnCheck.IsEnabled = true; BtnCombine.IsEnabled = true; BtnGenerateLabels.IsEnabled = true; // BtnRepair.IsEnabled = true; // BtnShorten.IsEnabled = true; } } private async void BtnSettingsImportCustomerAddressPatch_OnClick(object? sender, RoutedEventArgs e) { if (LstSettingsCustomers.SelectedIndex == null || LstSettingsCustomers.SelectedIndex == -1) return; var opts = new FilePickerOpenOptions(); opts.Title = "Address-Patch für " + LstSettingsCustomers.SelectedItems[0] + "importieren..."; opts.AllowMultiple = false; var type = new FilePickerFileType("ADPAC-Dateien (*.adpac)"); type.Patterns = new[] { "*.adpac" }; 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.GetIDByCustomerListItem(LstSettingsCustomers.SelectedItems[0].ToString())) customer.patch = AddressPatch.Import(selected_path); Settings.Save(); } private void TbSettingsCustomerCsvSeparator_OnTextChanged(object? sender, TextChangedEventArgs e) { if (LstSettingsCustomers.SelectedIndex == null || LstSettingsCustomers.SelectedIndex == -1) return; var sep = !string.IsNullOrEmpty(TbSettingsCustomerCsvSeparator.Text) ? TbSettingsCustomerCsvSeparator.Text : ","; foreach (var customer in Settings._instance.customers.customers) if (customer.ID == Settings._instance.customers.current) try { customer.separator = Convert.ToChar(sep); } catch (FormatException ex) { MessageBox.Show(this, "Error while converting: " + ex.Message, "Could not parse"); } catch (Exception ex) { MessageBox.Show(this, "Unknown Error: " + ex.Message, "Error"); } } private void BtnCombineDifference_OnClick(object? sender, RoutedEventArgs e) { var list = new List(); foreach (var item in LstCustomerAdressSets.SelectedItems) list.Add(Settings._instance.addressSets.GetAddressSetByID( Convert.ToInt32(item.ToString().Split(" - ")[0]))); StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "difference"); } private void BtnCombineUnion_OnClick(object? sender, RoutedEventArgs e) { var list = new List(); foreach (var item in LstCustomerAdressSets.SelectedItems) list.Add(Settings._instance.addressSets.GetAddressSetByID( Convert.ToInt32(item.ToString().Split(" - ")[0]))); StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "union"); } private void BtnCombineIntersection_OnClick(object? sender, RoutedEventArgs e) { var list = new List(); foreach (var item in LstCustomerAdressSets.SelectedItems) list.Add(Settings._instance.addressSets.GetAddressSetByID( Convert.ToInt32(item.ToString().Split(" - ")[0]))); StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "intersection"); } private void BtnCombineSymmetricDifference_OnClick(object? sender, RoutedEventArgs e) { var list = new List(); foreach (var item in LstCustomerAdressSets.SelectedItems) list.Add(Settings._instance.addressSets.GetAddressSetByID( Convert.ToInt32(item.ToString().Split(" - ")[0]))); StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "symdiff"); } private void BtnGenerateLabels_OnClick(object? sender, RoutedEventArgs e) { var builder = new PdfBuilder(); builder.CreateAddressLabelPdfFromAddressSetWithPlaceholder( Convert.ToInt32(LstCustomerAdressSets.SelectedItems[0].ToString().Split(" - ")[0]), "Company Logo/Info", "output.pdf" ); } private void TbSettingsCustomerSenderAddress_OnTextChanged(object? sender, TextChangedEventArgs e) { if (LstSettingsCustomers.SelectedIndex == null || LstSettingsCustomers.SelectedIndex == -1) return; foreach (var customer in Settings._instance.customers.customers) if (customer.ID == Settings._instance.customers.current) customer.sender_address = TbSettingsCustomerSenderAddress.Text; } }