using System; using System.Collections.Generic; using System.IO; 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(); _instance = this; WindowState = WindowState.Maximized; Global.Load(); Settings.Load(); } private async void StartAddressCheck(KasAddressList addresses) { //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(addresses); progressWindow.Close(); new ResultWindow(result, addresses).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 MnuSettings_OnClick(object? sender, RoutedEventArgs e) { throw new NotImplementedException(); } private void MnuHelp_OnClick(object? sender, RoutedEventArgs e) { throw new NotImplementedException(); } private void MnuGithub_OnClick(object? sender, RoutedEventArgs e) { throw new NotImplementedException(); } 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) { 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.Name == LstCustomerAdressSets.SelectedItem.ToString()) set = adset; StartAddressCheck(set); // 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) { if (filePath == null) { MessageBox.Show(null, "Bitte zunächst eine Datei auswählen", "Datei fehlt"); return; } StartCombine(filePath); } private async void StartCombine(Uri path) { 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 void BtnSettingsAddCustomer_OnClick(object? sender, RoutedEventArgs e) { Settings._instance.customers.customers.Add(new Customer()); TbSettingsCustomerDescription.Text = ""; TbSettingsCustomerName.Text = ""; TbSettingsCustomerPatchInfo.Text = ""; //Settings.Save(); //RefreshCustomerItems(); } 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; TbSettingsCustomerCsvSeparator.Text = customer.separator.ToString(); if (customer.patch != null) TbSettingsCustomerPatchInfo.Text = customer.patch.ToString(); else TbSettingsCustomerPatchInfo.Text = ""; } } public void RefreshCustomerItems() { 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); } } 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(); } private void LstCustomers_OnSelectionChanged(object? sender, SelectionChangedEventArgs e) { 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) { 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) { 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.Name); } private void LstCustomerAdressSets_OnSelectionChanged(object? sender, SelectionChangedEventArgs e) { 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"); } } }