diff --git a/Beispieldaten/211213-Bezeichnungen für Neubestand.pdf b/Beispieldaten/211213-Bezeichnungen für Neubestand.pdf new file mode 100644 index 0000000..f398a14 Binary files /dev/null and b/Beispieldaten/211213-Bezeichnungen für Neubestand.pdf differ diff --git a/Beispieldaten/Haltungen.hal b/Beispieldaten/Haltungen.hal new file mode 100644 index 0000000..6d900f8 --- /dev/null +++ b/Beispieldaten/Haltungen.hal @@ -0,0 +1,4 @@ +KANHAL6.0 + S0269900 76992006 S0269900 K S IB PP 1 200 200 16.553 1 -0.013 1 -0.03 1 Luebbert 21.10.2022 + S0269900 76992006 S0269900 K S IB PP 1 200 200 16.553 1 -0.013 1 -0.03 1 + Luebbert 21.10.2022 diff --git a/Beispieldaten/Koordinatendatei.csv b/Beispieldaten/Koordinatendatei.csv new file mode 100644 index 0000000..251aa28 --- /dev/null +++ b/Beispieldaten/Koordinatendatei.csv @@ -0,0 +1,15 @@ +Schachtnummer;Rechtswert;Hochwert;Höhe +11204001;444932.93;5883935.519;5.155 +11204002;444932.906;5883935.689;3.462 +11203001;444899.818;5883939.262;5.056 +11203002;444899.787;5883939.131;3.478 +11267001;444884.352;5883892.304;4.828 +11267002;444884.447;5883892.28;3.575 +11266001;444871.604;5883853.74;4.777 +11266002;444871.658;5883853.724;3.63 +2111101;444869.48;5883851.658;4.802 +2111102;444869.415;5883851.701;3.109 +21112001;444882.238;5883890.294;4.781 +21112002;444882.18;5883890.313;2.841 +21113001;444896.159;5883933.946;4.969 +21113002;444896.024;5883933.817;2.449 diff --git a/Beispieldaten/Schächte.sch b/Beispieldaten/Schächte.sch new file mode 100644 index 0000000..d57e1c4 --- /dev/null +++ b/Beispieldaten/Schächte.sch @@ -0,0 +1,3 @@ +KANSCH6.0 + S0269900 S IB RESC B 1.690 1 -0.013 1 479665.481 5966015.976 1 479665.490 5966015.912 1 Luebbert 22.10.2022 + S0269900 S IB RESC B 1.690 1 -0.013 1 479665.481 5966015.976 1 479665.490 5966015.912 1 \ No newline at end of file diff --git a/Beispieldaten/novaKANDIS10_Schnittstellen-Formatbeschreibung.pdf b/Beispieldaten/novaKANDIS10_Schnittstellen-Formatbeschreibung.pdf new file mode 100644 index 0000000..f0a9b4c Binary files /dev/null and b/Beispieldaten/novaKANDIS10_Schnittstellen-Formatbeschreibung.pdf differ diff --git a/SewerStammGen.DAL/Services/PostgresqlData/SchachtDataService.cs b/SewerStammGen.DAL/Services/PostgresqlData/SchachtDataService.cs index 7d12f27..587742b 100644 --- a/SewerStammGen.DAL/Services/PostgresqlData/SchachtDataService.cs +++ b/SewerStammGen.DAL/Services/PostgresqlData/SchachtDataService.cs @@ -104,5 +104,14 @@ namespace SewerStammGen.DAL.Services.PostgresqlData return entity; } + + public async Task InsertSchachtBulk(List schacht) + { + foreach(var item in schacht) + { + await Create(item); + } + return true; + } } } diff --git a/SewerStammGen.Shared/Contracts/IImport.cs b/SewerStammGen.Shared/Contracts/IImport.cs index 34e8e5d..32fdd15 100644 --- a/SewerStammGen.Shared/Contracts/IImport.cs +++ b/SewerStammGen.Shared/Contracts/IImport.cs @@ -1,4 +1,5 @@ -using System; +using SewerStammGen.Shared.Domain; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,8 +7,8 @@ using System.Threading.Tasks; namespace Shared.Contracts { - internal interface IImport + public interface IImport { - + List LoadSchaechte(string filename, EEntwaeserung entwaeserung); } } diff --git a/SewerStammGen.Shared/Contracts/ISchachtDataService.cs b/SewerStammGen.Shared/Contracts/ISchachtDataService.cs index cbc81f1..4f002d9 100644 --- a/SewerStammGen.Shared/Contracts/ISchachtDataService.cs +++ b/SewerStammGen.Shared/Contracts/ISchachtDataService.cs @@ -13,5 +13,6 @@ namespace SewerStammGen.Shared.Contracts { Task> GetAllByProjekt(int projektID); Task> GetAllByProjekt(Projekt projekt); + Task InsertSchachtBulk(List schacht); } } diff --git a/SewerStammGen.WPF/HostBuilders/AddViewModelsHostBuilderExtensions.cs b/SewerStammGen.WPF/HostBuilders/AddViewModelsHostBuilderExtensions.cs index 5d8211b..a65f986 100644 --- a/SewerStammGen.WPF/HostBuilders/AddViewModelsHostBuilderExtensions.cs +++ b/SewerStammGen.WPF/HostBuilders/AddViewModelsHostBuilderExtensions.cs @@ -32,6 +32,7 @@ namespace SewerStammGen.HostBuilders services.AddSingleton>(); services.AddSingleton>(); + services.AddSingleton>(); services.AddSingleton>(); services.AddSingleton>(); @@ -47,8 +48,8 @@ namespace SewerStammGen.HostBuilders return () => new ManholeListViewModel( services.GetRequiredService(), services.GetRequiredService>(), - services.GetRequiredService() - + services.GetRequiredService(), + services.GetRequiredService>() ); }); @@ -60,6 +61,15 @@ namespace SewerStammGen.HostBuilders services.GetRequiredService>() ); }); + + services.AddSingleton>(services => + { + return () => new ManholeImportViewModel( + services.GetRequiredService(), + services.GetRequiredService>(), + services.GetRequiredService() + ); + }); #endregion #region Haltungen diff --git a/SewerStammGen.WPF/MainWindow.xaml b/SewerStammGen.WPF/MainWindow.xaml index 6cf958b..f43dc3f 100644 --- a/SewerStammGen.WPF/MainWindow.xaml +++ b/SewerStammGen.WPF/MainWindow.xaml @@ -22,6 +22,9 @@ + + + diff --git a/SewerStammGen.WPF/Services/OpenFileDialogService.cs b/SewerStammGen.WPF/Services/OpenFileDialogService.cs new file mode 100644 index 0000000..648bba8 --- /dev/null +++ b/SewerStammGen.WPF/Services/OpenFileDialogService.cs @@ -0,0 +1,26 @@ +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SewerStammGen.WPF.Services +{ + internal class OpenFileDialogService + { + public string OpenFileDialog() + { + OpenFileDialog dialog = new OpenFileDialog(); + dialog.Filter = "CSV Files(.csv)|.csv"; + dialog.FilterIndex = 1; + dialog.Multiselect = false; + if(dialog.ShowDialog() == true) + { + return dialog.FileName; + } + return string.Empty; + + } + } +} diff --git a/SewerStammGen.WPF/SewerStammGen.WPF.csproj b/SewerStammGen.WPF/SewerStammGen.WPF.csproj index 2af8338..56ceb46 100644 --- a/SewerStammGen.WPF/SewerStammGen.WPF.csproj +++ b/SewerStammGen.WPF/SewerStammGen.WPF.csproj @@ -16,6 +16,7 @@ + diff --git a/SewerStammGen.WPF/SewerStammGen.WPF.csproj.user b/SewerStammGen.WPF/SewerStammGen.WPF.csproj.user index 909da7c..a0c989f 100644 --- a/SewerStammGen.WPF/SewerStammGen.WPF.csproj.user +++ b/SewerStammGen.WPF/SewerStammGen.WPF.csproj.user @@ -25,6 +25,9 @@ Code + + Code + Code @@ -57,6 +60,9 @@ Designer + + Designer + Designer diff --git a/SewerStammGen.WPF/ViewModel/Schacht/ManholeImportViewModel.cs b/SewerStammGen.WPF/ViewModel/Schacht/ManholeImportViewModel.cs new file mode 100644 index 0000000..994ce1e --- /dev/null +++ b/SewerStammGen.WPF/ViewModel/Schacht/ManholeImportViewModel.cs @@ -0,0 +1,69 @@ +using SewerStammGen.Shared.Contracts; +using SewerStammGen.Shared.Domain; +using SewerStammGen.WPF.Interface.Navigator; +using SewerStammGen.WPF.Services; +using SewerStammGen.WPF.ViewModel.State; +using Shared.Contracts; +using System; +using System.CodeDom; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; +using WWTech_KanalSchnittstelle.Importer; + +namespace SewerStammGen.WPF.ViewModel +{ + public class ManholeImportViewModel : BaseViewModel + { + private readonly ISchachtDataService schachtDataService; + private readonly IRenavigator renavigator; + private OpenFileDialogService fileDialogService; + + private string filename = string.Empty; + public string FileName + { + get => filename; + set + { + if (filename == value) return; + filename = value; + OnPropertyChanged(); + } + } + + public ICommand LoadFile { get; set; } + public ICommand OpenFileDialogCommand { get; set; } + + private readonly IImport importer; + + public ManholeImportViewModel(ISchachtDataService schachtDataService, IRenavigator renavigator, IActualState actualState) + { +#if DEBUG + FileName = @"C:\Users\damia\source\repos\Stammdatengenerator\Beispieldaten\Koordinatendatei.csv"; +#endif + LoadFile = new RelayCommand((x) => importFile()); + this.schachtDataService = schachtDataService; + + importer = new CSVImporter(actualState.ProjektID); + this.renavigator = renavigator; + this.fileDialogService = new OpenFileDialogService(); + this.OpenFileDialogCommand = new RelayCommand((x) => + { + FileName = fileDialogService.OpenFileDialog(); + }); + } + + private async void importFile() + { + var schaechte = importer.LoadSchaechte(FileName, EEntwaeserung.Mischwasser); + if (schaechte != null) + { + await schachtDataService.InsertSchachtBulk(schaechte); + } + renavigator.Renavigate(); + } + } +} diff --git a/SewerStammGen.WPF/ViewModel/Schacht/ManholeListViewModel.cs b/SewerStammGen.WPF/ViewModel/Schacht/ManholeListViewModel.cs index d916098..274d619 100644 --- a/SewerStammGen.WPF/ViewModel/Schacht/ManholeListViewModel.cs +++ b/SewerStammGen.WPF/ViewModel/Schacht/ManholeListViewModel.cs @@ -19,7 +19,8 @@ namespace SewerStammGen.WPF.ViewModel private readonly ISchachtDataService _schachtDataService; private readonly ObservableCollection _schaechte; private readonly IActualState _actualState; - + private readonly IRenavigator renavigateToImport; + public ObservableCollection Schaechte { get => _schaechte; } public Schacht? SelectedSchacht { get; set; } @@ -27,20 +28,27 @@ namespace SewerStammGen.WPF.ViewModel public ICommand AddSchachtCommand { get; set; } public ICommand EditSchachtCommand { get; set; } public ICommand DeleteSchachtCommand { get; set; } + public ICommand ImportSchachtCommand { get; set; } + - public ManholeListViewModel(ISchachtDataService schachtDataService, IRenavigator renavigator ,IActualState actualState) + public ManholeListViewModel(ISchachtDataService schachtDataService, IRenavigator renavigator ,IActualState actualState, IRenavigator navigatetoImport) { _schachtDataService = schachtDataService; _actualState = actualState; _schaechte = new ObservableCollection(); - + renavigateToImport = navigatetoImport; AddSchachtCommand = new SchachtAddCommand(actualState,renavigator); EditSchachtCommand = new SchachtEditCommand(actualState, renavigator,this); DeleteSchachtCommand = new SchachtDeleteCommand(schachtDataService, actualState, renavigator, this); + ImportSchachtCommand = new RelayCommand((x) => + { + navigatetoImport.Renavigate(); + }); + LoadSchaechte(); } diff --git a/SewerStammGen.WPF/Views/Schacht/SchachtImportView.xaml b/SewerStammGen.WPF/Views/Schacht/SchachtImportView.xaml new file mode 100644 index 0000000..658c24d --- /dev/null +++ b/SewerStammGen.WPF/Views/Schacht/SchachtImportView.xaml @@ -0,0 +1,24 @@ + + + + + + + + + + +