From 98494be3cf5a96cc3811c52e1d3416e978130139 Mon Sep 17 00:00:00 2001 From: HuskyTeufel Date: Thu, 30 Sep 2021 16:27:28 +0200 Subject: [PATCH] Kanalschaden werden richtig geparsed --- .editorconfig | 4 + DaSaSo.Domain/DaSaSo.Domain.csproj | 4 + DaSaSo.Domain/Enums/ESewerWindowViewType.cs | 3 +- DaSaSo.Domain/Model/SewerDamage.cs | 4 +- .../DaSaSoDbContextFactory.cs | 4 +- .../Services/BuildingsiteDataService.cs | 16 ++-- .../Services/ClientDataService.cs | 16 ++-- .../Services/Common/NonQueryDataService.cs | 45 +++++------- DaSaSo.ViewModel/BuildingsiteListViewModel.cs | 2 +- DaSaSo.ViewModel/ClientEditViewModel.cs | 6 +- DaSaSo.ViewModel/ClientListViewModel.cs | 15 +--- .../Commands/SelectClientCommand.cs | 21 ++++-- .../Commands/SelectDamageCommand.cs | 24 ++++++ .../Controls/SewerDamageControllViewModel.cs | 50 +++++++++++++ .../SewerPreperationControllViewModel.cs | 36 +++++++++ .../Factories/SewerWindowViewModelFactory.cs | 7 +- DaSaSo.ViewModel/SewerDamageEditViewModel.cs | 49 +++++++++++++ DaSaSo.ViewModel/SewerMainListViewModel.cs | 52 ++++++++----- .../State/ActualState/ActualProject.cs | 3 + .../Window/MainWindowViewModel.cs | 73 +++++++++++-------- .../Controls/SewerObjectNavigationBar.xaml | 2 +- .../EqualDamageTypeToBooleanConverter.cs | 7 +- DaSaSo.Wpf/DaSaSo.Wpf.csproj.user | 18 +++++ .../AddServicesHostBuilderExtensions.cs | 2 +- .../AddViewModelsHostBuilderExtensions.cs | 7 +- .../Sampledata/SewerDamageListSampleData.cs | 2 +- DaSaSo.Wpf/View/Project/ProjectEditView.xaml | 9 ++- .../SewerObject/Controls/SewerDamage.xaml | 52 +++++++++++++ .../SewerObject/Controls/SewerDamage.xaml.cs | 28 +++++++ .../Controls/SewerDamagePreparation.xaml | 26 +++++++ .../Controls/SewerDamagePreparation.xaml.cs | 28 +++++++ .../View/SewerObject/SewerDamageEditView.xaml | 24 ++++++ .../SewerObject/SewerDamageEditView.xaml.cs | 28 +++++++ .../View/SewerObject/SewerDamageListView.xaml | 2 +- .../View/SewerObject/SewerMainView.xaml | 3 + DaSaSo.Wpf/my_controls.xaml | 35 +++++++++ DaSaSo.sln | 5 ++ 37 files changed, 576 insertions(+), 136 deletions(-) create mode 100644 .editorconfig create mode 100644 DaSaSo.ViewModel/Commands/SelectDamageCommand.cs create mode 100644 DaSaSo.ViewModel/Controls/SewerDamageControllViewModel.cs create mode 100644 DaSaSo.ViewModel/Controls/SewerPreperationControllViewModel.cs create mode 100644 DaSaSo.ViewModel/SewerDamageEditViewModel.cs create mode 100644 DaSaSo.Wpf/View/SewerObject/Controls/SewerDamage.xaml create mode 100644 DaSaSo.Wpf/View/SewerObject/Controls/SewerDamage.xaml.cs create mode 100644 DaSaSo.Wpf/View/SewerObject/Controls/SewerDamagePreparation.xaml create mode 100644 DaSaSo.Wpf/View/SewerObject/Controls/SewerDamagePreparation.xaml.cs create mode 100644 DaSaSo.Wpf/View/SewerObject/SewerDamageEditView.xaml create mode 100644 DaSaSo.Wpf/View/SewerObject/SewerDamageEditView.xaml.cs diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..e68a880 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# CA1416: Validate platform compatibility +dotnet_diagnostic.CA1416.severity = none diff --git a/DaSaSo.Domain/DaSaSo.Domain.csproj b/DaSaSo.Domain/DaSaSo.Domain.csproj index 2b40fef..b001d77 100644 --- a/DaSaSo.Domain/DaSaSo.Domain.csproj +++ b/DaSaSo.Domain/DaSaSo.Domain.csproj @@ -5,4 +5,8 @@ disable + + + + diff --git a/DaSaSo.Domain/Enums/ESewerWindowViewType.cs b/DaSaSo.Domain/Enums/ESewerWindowViewType.cs index 1626b5c..e71ec91 100644 --- a/DaSaSo.Domain/Enums/ESewerWindowViewType.cs +++ b/DaSaSo.Domain/Enums/ESewerWindowViewType.cs @@ -3,6 +3,7 @@ public enum ESewerWindowViewType { SewerStammdaten, - SewerDamageList + SewerDamageList, + SewerDamageEdit } } diff --git a/DaSaSo.Domain/Model/SewerDamage.cs b/DaSaSo.Domain/Model/SewerDamage.cs index 33fc5e0..fc62d32 100644 --- a/DaSaSo.Domain/Model/SewerDamage.cs +++ b/DaSaSo.Domain/Model/SewerDamage.cs @@ -3,6 +3,7 @@ [Flags] public enum EDamageType { + NONE = 0, Riss = 1, Bruch = 2, Scherbe = 4, @@ -18,9 +19,10 @@ [Flags] public enum EPreparationType { + NONE = 0, CleanedHD = 1, CleanedMechanisch = 2, - CleanedRoborter = 4, + CleanedRoboter = 4, FaekalienFrei = 8 } public class SewerDamage : DomainObject diff --git a/DaSaSo.EntityFramework/DaSaSoDbContextFactory.cs b/DaSaSo.EntityFramework/DaSaSoDbContextFactory.cs index 3341ebb..6bbc14f 100644 --- a/DaSaSo.EntityFramework/DaSaSoDbContextFactory.cs +++ b/DaSaSo.EntityFramework/DaSaSoDbContextFactory.cs @@ -22,7 +22,7 @@ namespace DaSaSo.EntityFramework public DaSaSoDbContext CreateDbContext() { - DbContextOptionsBuilder? options = new DbContextOptionsBuilder(); + DbContextOptionsBuilder? options = new(); _configureDbContext(options); //_connectionString = "Host = localhost; Database = dasaso; Username = kansan; Password = kansan"; //options.UseNpgsql(_connectionString); @@ -34,7 +34,7 @@ namespace DaSaSo.EntityFramework { var options = new DbContextOptionsBuilder(); options.UseNpgsql("Host = localhost; Database = dasaso; Username = kansan; Password = kansan"); - DaSaSoDbContext result = new DaSaSoDbContext(options.Options); + DaSaSoDbContext result = new(options.Options); return result; } /* diff --git a/DaSaSo.EntityFramework/Services/BuildingsiteDataService.cs b/DaSaSo.EntityFramework/Services/BuildingsiteDataService.cs index f739623..e52ae0d 100644 --- a/DaSaSo.EntityFramework/Services/BuildingsiteDataService.cs +++ b/DaSaSo.EntityFramework/Services/BuildingsiteDataService.cs @@ -37,12 +37,10 @@ namespace DaSaSo.EntityFramework.Services public async Task Get(int id) { - using (DaSaSoDbContext context = _contextFactory.CreateDbContext()) - { - Buildingsite entity = await context.Buildingsites.FirstOrDefaultAsync((e) => e.Id == id); + using DaSaSoDbContext context = _contextFactory.CreateDbContext(); + Buildingsite entity = await context.Buildingsites.FirstOrDefaultAsync((e) => e.Id == id); - return entity; - } + return entity; } public Task> GetAll() @@ -54,11 +52,9 @@ namespace DaSaSo.EntityFramework.Services { // Get Clientid int id = project.Id; - using (DaSaSoDbContext context = _contextFactory.CreateDbContext()) - { - IEnumerable entities = await context.Buildingsites.Where(x => x.Project.Id == id).ToListAsync(); - return entities; - } + using DaSaSoDbContext context = _contextFactory.CreateDbContext(); + IEnumerable entities = await context.Buildingsites.Where(x => x.Project.Id == id).ToListAsync(); + return entities; } public async Task Update(int id, Buildingsite entity) diff --git a/DaSaSo.EntityFramework/Services/ClientDataService.cs b/DaSaSo.EntityFramework/Services/ClientDataService.cs index e22f91c..0e815c5 100644 --- a/DaSaSo.EntityFramework/Services/ClientDataService.cs +++ b/DaSaSo.EntityFramework/Services/ClientDataService.cs @@ -39,22 +39,18 @@ namespace DaSaSo.EntityFramework.Services public async Task Get(int id) { - using (DaSaSoDbContext context = _contextFactory.CreateDbContext()) - { - Client entity = await context.Clients.Include(a => a.Projects).FirstOrDefaultAsync((e) => e.Id == id); + using DaSaSoDbContext context = _contextFactory.CreateDbContext(); + Client entity = await context.Clients.Include(a => a.Projects).FirstOrDefaultAsync((e) => e.Id == id); - return entity; - } + return entity; } public async Task> GetAll() { - using (DaSaSoDbContext context = _contextFactory.CreateDbContext()) - { - IEnumerable entities = await context.Clients.ToListAsync(); + using DaSaSoDbContext context = _contextFactory.CreateDbContext(); + IEnumerable entities = await context.Clients.ToListAsync(); - return entities; - } + return entities; } public async Task Update(int id, Client entity) diff --git a/DaSaSo.EntityFramework/Services/Common/NonQueryDataService.cs b/DaSaSo.EntityFramework/Services/Common/NonQueryDataService.cs index 802523e..4947e5e 100644 --- a/DaSaSo.EntityFramework/Services/Common/NonQueryDataService.cs +++ b/DaSaSo.EntityFramework/Services/Common/NonQueryDataService.cs @@ -3,6 +3,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -19,43 +20,35 @@ namespace DaSaSo.EntityFramework.Services.Common } public async Task Create(T entity) { - using (DaSaSoDbContext context = _contextFactory.CreateDbContext()) - { - EntityEntry createdEntity = await context.Set().AddAsync(entity); - await context.SaveChangesAsync(); - return createdEntity.Entity; - } + using DaSaSoDbContext context = _contextFactory.CreateDbContext(); + EntityEntry createdEntity = await context.Set().AddAsync(entity); + await context.SaveChangesAsync(); + return createdEntity.Entity; } public T CreateNonAsync(T entity) { - using (DaSaSoDbContext context = _contextFactory.CreateDbContext()) - { - EntityEntry createdEntity = context.Set().Add(entity); - context.SaveChanges(); - return createdEntity.Entity; - } + using DaSaSoDbContext context = _contextFactory.CreateDbContext(); + EntityEntry createdEntity = context.Set().Add(entity); + context.SaveChanges(); + return createdEntity.Entity; } public async Task Delete(int id) { - using (DaSaSoDbContext context = _contextFactory.CreateDbContext()) - { - T entity = await context.Set().FirstOrDefaultAsync((e) => e.Id == id); - context.Set().Remove(entity); - await context.SaveChangesAsync(); - return true; - } + using DaSaSoDbContext context = _contextFactory.CreateDbContext(); + T entity = await context.Set().FirstOrDefaultAsync((e) => e.Id == id); + context.Set().Remove(entity); + await context.SaveChangesAsync(); + return true; } public async Task Update(int id, T entity) { - using (DaSaSoDbContext context = _contextFactory.CreateDbContext()) - { - entity.Id = id; - context.Set().Update(entity); - await context.SaveChangesAsync(); - return entity; - } + using DaSaSoDbContext context = _contextFactory.CreateDbContext(); + entity.Id = id; + context.Set().Update(entity); + await context.SaveChangesAsync(); + return entity; } } } diff --git a/DaSaSo.ViewModel/BuildingsiteListViewModel.cs b/DaSaSo.ViewModel/BuildingsiteListViewModel.cs index 105f415..bc78f61 100644 --- a/DaSaSo.ViewModel/BuildingsiteListViewModel.cs +++ b/DaSaSo.ViewModel/BuildingsiteListViewModel.cs @@ -47,7 +47,7 @@ namespace DaSaSo.ViewModel { _actualProject = actualProject; _renavigator = renavigator; - _buildingSiteDataService = buildingSiteDataService as BuildingsiteDataService; + _buildingSiteDataService = (BuildingsiteDataService)buildingSiteDataService; Buildingsites = new ObservableCollection(); EditCommand = new EditBuildingsiteCommand(buildingSiteDataService,actualProject,renavigator,buildingsiteService,this); SelectCommand = new SelectBuildingsiteCommand(actualProject, this); diff --git a/DaSaSo.ViewModel/ClientEditViewModel.cs b/DaSaSo.ViewModel/ClientEditViewModel.cs index fc88421..b266cd3 100644 --- a/DaSaSo.ViewModel/ClientEditViewModel.cs +++ b/DaSaSo.ViewModel/ClientEditViewModel.cs @@ -14,7 +14,7 @@ namespace DaSaSo.ViewModel public class ClientEditViewModel : BaseViewModel { private Client _model; - private IDataService _dataService; + private readonly IDataService _dataService; private readonly IActualProject _actualProject; private readonly IRenavigator renavigator; @@ -32,9 +32,9 @@ namespace DaSaSo.ViewModel this._model = _actualProject.AktuellClient; } - private void SaveClient() + private async void SaveClient() { - _dataService.Update(Model.Id, Model); + await _dataService.Update(Model.Id, Model); renavigator.Renavigate(); } } diff --git a/DaSaSo.ViewModel/ClientListViewModel.cs b/DaSaSo.ViewModel/ClientListViewModel.cs index 00bb5cc..e980430 100644 --- a/DaSaSo.ViewModel/ClientListViewModel.cs +++ b/DaSaSo.ViewModel/ClientListViewModel.cs @@ -19,9 +19,7 @@ namespace DaSaSo.ViewModel { public ObservableCollection Clients { get; } private Client? _selectedClient; - private IDataService _dataService; - private readonly IRenavigator renavigator; - IEnumerable? result; + private readonly IDataService _dataService; bool _isLoading = true; public ICommand SelectCommand { get; set; } @@ -63,19 +61,14 @@ namespace DaSaSo.ViewModel { Clients = new ObservableCollection(); _dataService = dataService; - this.renavigator = renavigator; + LoadClient(); - SelectCommand = new SelectClientCommand(actualProject, this); //= new RelayCommand(SelectClient, () => SelectedClient != null); + SelectCommand = new SelectClientCommand(dataService,actualProject, this); EditCommand = new EditClientCommand(_dataService,actualProject, editRenavigator, this); AddNewClientCommand = new AddClientCommand(_dataService, actualProject, editRenavigator, this); } - ~ClientListViewModel() - { - - } - public async void LoadClient() { IsLoading = true; @@ -86,7 +79,7 @@ namespace DaSaSo.ViewModel IsLoading = false; } - private void InitCollection(ObservableCollection target, IEnumerable source) + private static void InitCollection(ObservableCollection target, IEnumerable source) { target.Clear(); foreach (var i in source) diff --git a/DaSaSo.ViewModel/Commands/SelectClientCommand.cs b/DaSaSo.ViewModel/Commands/SelectClientCommand.cs index 4546807..0e3e160 100644 --- a/DaSaSo.ViewModel/Commands/SelectClientCommand.cs +++ b/DaSaSo.ViewModel/Commands/SelectClientCommand.cs @@ -1,4 +1,6 @@ -using DaSaSo.ViewModel.Interface; +using DaSaSo.Domain.Model; +using DaSaSo.Domain.Services; +using DaSaSo.ViewModel.Interface; using System; using System.Collections.Generic; using System.ComponentModel; @@ -14,19 +16,24 @@ namespace DaSaSo.ViewModel.Commands private readonly IActualProject _actualProject; private readonly ClientListViewModel _clientListViewModel; + private readonly IDataService _dataservice; public override bool CanExecute(object? parameter) { return _clientListViewModel.CanSelectClient; } - public SelectClientCommand(IActualProject actualProject, ClientListViewModel clientListViewModel) + public SelectClientCommand( + IDataService dataService, + IActualProject actualProject, + ClientListViewModel clientListViewModel) { _actualProject = actualProject; _clientListViewModel = clientListViewModel; - _clientListViewModel.PropertyChanged += _clientListViewModel_PropertyChanged; + _clientListViewModel.PropertyChanged += ClientListViewModel_PropertyChanged; + _dataservice = dataService; } - private void _clientListViewModel_PropertyChanged(object? sender, PropertyChangedEventArgs e) + private void ClientListViewModel_PropertyChanged(object? sender, PropertyChangedEventArgs e) { if(e.PropertyName == nameof(_clientListViewModel.CanSelectClient)) { @@ -36,8 +43,10 @@ namespace DaSaSo.ViewModel.Commands public override async Task ExecuteAsync(object? parameter) { - var s = _clientListViewModel.SelectedClient; - _actualProject.SetClient(s); + Client? _selectedClient = _clientListViewModel.SelectedClient; + if (_selectedClient == null) return; + _selectedClient = await _dataservice.Get(_selectedClient.Id); + _actualProject.SetClient(_selectedClient); } } diff --git a/DaSaSo.ViewModel/Commands/SelectDamageCommand.cs b/DaSaSo.ViewModel/Commands/SelectDamageCommand.cs new file mode 100644 index 0000000..6e275b9 --- /dev/null +++ b/DaSaSo.ViewModel/Commands/SelectDamageCommand.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DaSaSo.ViewModel.Commands +{ + class SelectDamageCommand : AsyncCommandBase + { + private readonly SewerMainListViewModel _sewerMainListViewModel; + + public SelectDamageCommand(SewerMainListViewModel sewerMainListViewModel) + { + _sewerMainListViewModel = sewerMainListViewModel; + } + + public override Task ExecuteAsync(object? parameter) + { + var d = _sewerMainListViewModel; + throw new NotImplementedException(); + } + } +} diff --git a/DaSaSo.ViewModel/Controls/SewerDamageControllViewModel.cs b/DaSaSo.ViewModel/Controls/SewerDamageControllViewModel.cs new file mode 100644 index 0000000..fc09bc3 --- /dev/null +++ b/DaSaSo.ViewModel/Controls/SewerDamageControllViewModel.cs @@ -0,0 +1,50 @@ +using DaSaSo.Domain.Model; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DaSaSo.ViewModel.Controls +{ + public class SewerDamageControllViewModel : BaseViewModel + { + public bool Riss { get; set; } + public bool Bruch { get; set; } + public bool Scherbe { get; set; } + public bool Wurzel { get; set; } + public bool Inkrustation { get; set; } + public bool Ablagerungen { get; set; } + public bool EinrageneStutzen { get; set; } + public bool Infiltration { get; set; } + public SewerDamageControllViewModel(EDamageType damageType) + { + Riss = damageType.HasFlag(EDamageType.Riss); + Bruch = damageType.HasFlag(EDamageType.Bruch); + Scherbe = damageType.HasFlag(EDamageType.Scherbe); + + Wurzel = damageType.HasFlag(EDamageType.Wurzel); + Inkrustation = damageType.HasFlag(EDamageType.Inkrustation); + Ablagerungen = damageType.HasFlag(EDamageType.Ablagerung); + + EinrageneStutzen = damageType.HasFlag(EDamageType.EinrageneStutzen); + Infiltration = damageType.HasFlag(EDamageType.Infiltration); + } + + public EDamageType CalculateDamageFlags() + { + EDamageType result = EDamageType.NONE; + if (Riss) result |= EDamageType.Riss; + if (Bruch) result |= EDamageType.Bruch; + if (Scherbe) result |= EDamageType.Scherbe; + if (Wurzel) result |= EDamageType.Wurzel; + if (Inkrustation) result |= EDamageType.Inkrustation; + if (Ablagerungen) result |= EDamageType.Ablagerung; + if (EinrageneStutzen) result |= EDamageType.EinrageneStutzen; + if (Infiltration) result |= EDamageType.Infiltration; + + return result; + } + } +} diff --git a/DaSaSo.ViewModel/Controls/SewerPreperationControllViewModel.cs b/DaSaSo.ViewModel/Controls/SewerPreperationControllViewModel.cs new file mode 100644 index 0000000..0a52177 --- /dev/null +++ b/DaSaSo.ViewModel/Controls/SewerPreperationControllViewModel.cs @@ -0,0 +1,36 @@ +using DaSaSo.Domain.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DaSaSo.ViewModel.Controls +{ + public class SewerPreperationControllViewModel : BaseViewModel + { + public bool HD { get; set; } + public bool Mechanisch { get; set; } + public bool Roboter { get; set; } + public bool Faekalienfrei { get; set; } + + public SewerPreperationControllViewModel(EPreparationType preparationType) + { + HD = preparationType.HasFlag(EPreparationType.CleanedHD); + Mechanisch = preparationType.HasFlag(EPreparationType.CleanedMechanisch); + Roboter = preparationType.HasFlag(EPreparationType.CleanedRoboter); + Faekalienfrei = preparationType.HasFlag(EPreparationType.FaekalienFrei); + } + + public EPreparationType CalculatePreparationFlags() + { + EPreparationType result = EPreparationType.NONE; + if (HD) result |= EPreparationType.CleanedHD; + if (Mechanisch) result |= EPreparationType.CleanedMechanisch; + if (Roboter) result |= EPreparationType.CleanedRoboter; + if (Faekalienfrei) result |= EPreparationType.FaekalienFrei; + + return result; + } + } +} diff --git a/DaSaSo.ViewModel/Factories/SewerWindowViewModelFactory.cs b/DaSaSo.ViewModel/Factories/SewerWindowViewModelFactory.cs index 771b1c9..c64490b 100644 --- a/DaSaSo.ViewModel/Factories/SewerWindowViewModelFactory.cs +++ b/DaSaSo.ViewModel/Factories/SewerWindowViewModelFactory.cs @@ -12,15 +12,17 @@ namespace DaSaSo.ViewModel.Factories { private CreateViewModel _createSewerStammdatenViewModel; private CreateViewModel _createSewerDamageListViewModel; + private CreateViewModel _createSewerDamageEditViewModel; public SewerWindowViewModelFactory( CreateViewModel createSewerStammdatenViewModel, - CreateViewModel createSewerDamageListViewModel - + CreateViewModel createSewerDamageListViewModel, + CreateViewModel createSewerDamageEditViewModel ) { _createSewerStammdatenViewModel = createSewerStammdatenViewModel; _createSewerDamageListViewModel = createSewerDamageListViewModel; + _createSewerDamageEditViewModel = createSewerDamageEditViewModel; } public BaseViewModel CreateViewModel(ESewerWindowViewType viewType) @@ -29,6 +31,7 @@ namespace DaSaSo.ViewModel.Factories { case ESewerWindowViewType.SewerStammdaten: return _createSewerStammdatenViewModel(); case ESewerWindowViewType.SewerDamageList: return _createSewerDamageListViewModel(); + case ESewerWindowViewType.SewerDamageEdit: return _createSewerDamageEditViewModel(); default: throw new ArgumentException("The Viewtype does not have a ViewModel", "viewType"); } diff --git a/DaSaSo.ViewModel/SewerDamageEditViewModel.cs b/DaSaSo.ViewModel/SewerDamageEditViewModel.cs new file mode 100644 index 0000000..7507190 --- /dev/null +++ b/DaSaSo.ViewModel/SewerDamageEditViewModel.cs @@ -0,0 +1,49 @@ +using DaSaSo.Domain.Model; +using DaSaSo.ViewModel.Controls; +using DaSaSo.ViewModel.Interface; +using Microsoft.Toolkit.Mvvm.Input; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DaSaSo.ViewModel +{ + public class SewerDamageEditViewModel : BaseViewModel + { + private SewerDamage? _damage; + + public SewerDamageControllViewModel damageControllViewModel { get; set; } + public SewerPreperationControllViewModel preperationControllViewModel { get; set; } + public IRelayCommand Berechne { get; set; } + + public SewerDamage? Damage + { + get => _damage; + set + { + _damage = value; + OnPropertyChanged(); + } + } + + public SewerDamageEditViewModel(IActualProject actualProject) + { + if (actualProject.AktuellSewerDamage == null) throw new NullReferenceException(nameof(actualProject.AktuellSewerDamage)); + Damage = actualProject.AktuellSewerDamage; + + damageControllViewModel = new SewerDamageControllViewModel(Damage.DamageType); + preperationControllViewModel = new SewerPreperationControllViewModel(Damage.PreparationType); + Berechne = new RelayCommand(() => + { + Damage.DamageType = damageControllViewModel.CalculateDamageFlags(); + Damage.PreparationType = preperationControllViewModel.CalculatePreparationFlags(); + + }); + + } + + } +} diff --git a/DaSaSo.ViewModel/SewerMainListViewModel.cs b/DaSaSo.ViewModel/SewerMainListViewModel.cs index 8f5581b..e15f8ce 100644 --- a/DaSaSo.ViewModel/SewerMainListViewModel.cs +++ b/DaSaSo.ViewModel/SewerMainListViewModel.cs @@ -17,14 +17,15 @@ namespace DaSaSo.ViewModel { public class SewerMainListViewModel : BaseViewModel { - private ISewerMainNavigator _navigator { get; set; } + private ISewerMainNavigator Navigator { get; set; } private readonly SewerObjectDataService _dataservice; private readonly ISewerObjectService _sewerObjectService; private readonly IRenavigator _renavigator; - private IActualProject _actualProject { get; set; } + private IActualProject ActualProject { get; set; } public ICommand UpdateCurrentSewerViewModelCommand { get; } public ICommand CloseCommand { get; set; } - public BaseViewModel CurrentSewerViewModel => _navigator.CurrentViewModel; + public ICommand SchadenCommand { get; set; } + public BaseViewModel CurrentSewerViewModel => Navigator.CurrentViewModel; public bool IsLoading { @@ -38,8 +39,8 @@ namespace DaSaSo.ViewModel } } } - string _schaden = "llooo"; - public string Schaden + private SewerDamage _schaden; + public SewerDamage Schaden { get => _schaden; set @@ -48,43 +49,54 @@ namespace DaSaSo.ViewModel OnPropertyChanged(); } } - public string Strasse { get => _actualProject.AktuellSewerObject.StreetName; } - public string AktualObject { get => _actualProject.AktuellSewerObject.ObjektName; } + + public string Strasse { get => ActualProject.AktuellSewerObject.StreetName; } + public string AktualObject { get => ActualProject.AktuellSewerObject.ObjektName; } bool _isLoading = true; - public bool CanSaveSewer => !string.IsNullOrEmpty(_actualProject.AktuellSewerObject.StreetName); + public bool CanSaveSewer => !string.IsNullOrEmpty(ActualProject.AktuellSewerObject.StreetName); - public SewerMainListViewModel(IDataService dataService, ISewerMainNavigator navigator,IActualProject actualProject, IViewModelSewerMainFactory viewModelFactory, IRenavigator renavigator, ISewerObjectService sewerObjectService, ISewerpointService sewerpointService) + public SewerMainListViewModel( + IDataService dataService, + ISewerMainNavigator navigator, + IActualProject actualProject, + IViewModelSewerMainFactory viewModelFactory, + IRenavigator renavigator, + ISewerObjectService sewerObjectService, + ISewerpointService sewerpointService + ) { - _navigator = navigator; - _actualProject = actualProject; + Navigator = navigator; + ActualProject = actualProject; _dataservice = (SewerObjectDataService)dataService; _renavigator = renavigator; _sewerObjectService = sewerObjectService; - CloseCommand = new SaveSewerCommand(_dataservice,_actualProject,_sewerObjectService,_renavigator,_navigator); //RelayCommand(SaveSewer); + CloseCommand = new SaveSewerCommand(_dataservice,ActualProject,_sewerObjectService,_renavigator,Navigator); //RelayCommand(SaveSewer); LoadModel(); - UpdateCurrentSewerViewModelCommand = new UpdateCurrentSewerViewModelCommand(_navigator, viewModelFactory); - _navigator.StateChanged += () => OnPropertyChanged(nameof(CurrentSewerViewModel)); - _actualProject.SewerDamageChanged += _actualProject_SewerDamageChanged; + UpdateCurrentSewerViewModelCommand = new UpdateCurrentSewerViewModelCommand(Navigator, viewModelFactory); + Navigator.StateChanged += () => OnPropertyChanged(nameof(CurrentSewerViewModel)); + ActualProject.SewerDamageChanged += ActualProject_SewerDamageChanged; + + //SchadenCommand = UpdateCurrentSewerViewModelCommand.Execute(); // new SelectDamageCommand(this); } - private void _actualProject_SewerDamageChanged(object? sender, EventArgs e) + private void ActualProject_SewerDamageChanged(object? sender, EventArgs e) { - Schaden = _actualProject.AktuellSewerDamage.Distance.ToString(); + Schaden = ActualProject.AktuellSewerDamage; OnPropertyChanged(nameof(Schaden)); } private async void LoadModel() { IsLoading = true; - SewerObject sewer = await _dataservice.Get(_actualProject.AktuellSewerObject.Id); - _actualProject.SetSewerObject(sewer,false); + SewerObject sewer = await _dataservice.Get(ActualProject.AktuellSewerObject.Id); + ActualProject.SetSewerObject(sewer,false); IsLoading = false; } public override void Dispose() { - _navigator.StateChanged -= () => OnPropertyChanged(nameof(CurrentSewerViewModel)); + Navigator.StateChanged -= () => OnPropertyChanged(nameof(CurrentSewerViewModel)); base.Dispose(); } } diff --git a/DaSaSo.ViewModel/State/ActualState/ActualProject.cs b/DaSaSo.ViewModel/State/ActualState/ActualProject.cs index b9ac273..26c6627 100644 --- a/DaSaSo.ViewModel/State/ActualState/ActualProject.cs +++ b/DaSaSo.ViewModel/State/ActualState/ActualProject.cs @@ -48,6 +48,8 @@ namespace DaSaSo.ViewModel.State.ActualState #endregion public void SetClient(Client client, bool notification = true) { + //ResetProject(); + //ResetBuildingSite(); AktuellClient = client; if(notification) OnClientChanged(); @@ -55,6 +57,7 @@ namespace DaSaSo.ViewModel.State.ActualState public void SetProject(Project project, bool notification = true) { + AktuellProjekt = project; if(notification) OnProjectChanged(); diff --git a/DaSaSo.ViewModel/Window/MainWindowViewModel.cs b/DaSaSo.ViewModel/Window/MainWindowViewModel.cs index 786dcb4..2cf65b5 100644 --- a/DaSaSo.ViewModel/Window/MainWindowViewModel.cs +++ b/DaSaSo.ViewModel/Window/MainWindowViewModel.cs @@ -23,6 +23,12 @@ namespace DaSaSo.ViewModel public sealed class MainWindowViewModel : BaseViewModel { private readonly IViewModelAbstractFactory viewModelFactory; + + public MainWindowViewModel(IViewModelAbstractFactory viewModelFactory) + { + this.viewModelFactory = viewModelFactory; + } + private readonly IActualProject _actualProject; private readonly IDataService _clientDataService; private readonly IDataService _projectDataService; @@ -31,15 +37,15 @@ namespace DaSaSo.ViewModel private string _clientname = ""; private string _projektname = ""; private string _buildingsitename = ""; - RegistryKey registry; + private readonly RegistryKey? registry; const string REGISTRYKEY = "HKEY_CURRENT_USER\\Software\\Cosysda\\DaSaSo"; public bool CanSelectProject { get => _actualProject.AktuellClient != null; } public bool CanSelectBuildingSite { get => _actualProject.AktuellProjekt != null; } public bool CanSelectSewerObjects { get => _actualProject.AktuellBaustelle != null; } - public IMainWindowNavigator _navigator { get; set; } + public IMainWindowNavigator Navigator { get; set; } public ICommand UpdateCurrentViewModelCommand { get; } - public BaseViewModel CurrentViewModel => _navigator.CurrentViewModel; + public BaseViewModel CurrentViewModel => Navigator.CurrentViewModel; public string ClientName { @@ -78,13 +84,17 @@ namespace DaSaSo.ViewModel } } } - public string ApplicationTitle + public static string ApplicationTitle { get { string gitVersion; +#pragma warning disable CS8600 // Converting null literal or possible null value to non-nullable type. using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DaSaSo.ViewModel.version.txt")) - using (StreamReader reader = new StreamReader(stream)) +#pragma warning restore CS8600 // Converting null literal or possible null value to non-nullable type. +#pragma warning disable CS8604 // Possible null reference argument. + using (StreamReader reader = new(stream)) +#pragma warning restore CS8604 // Possible null reference argument. { gitVersion = reader.ReadToEnd(); } @@ -99,37 +109,37 @@ namespace DaSaSo.ViewModel IDataService buildingsiteDataService ) { - this._navigator = navigator; + this.Navigator = navigator; this.viewModelFactory = viewModelFactory; _clientDataService = clientDataService; _projectDataService = projectDataService; _buildingsiteDataService = buildingsiteDataService; + + registry = Registry.CurrentUser.OpenSubKey("Software\\Cosysda\\DaSaSo"); + if (registry == null) InitRegistry(); - _navigator.StateChanged += _navigator_StateChanged; + Navigator.StateChanged += Navigator_StateChanged; UpdateCurrentViewModelCommand = new UpdateCurrentViewModelCommand(navigator, viewModelFactory); UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.Home); _actualProject = actualProject; - _actualProject.ClientChanged += _actualProject_ClientChanged; - _actualProject.ProjectChanged += _actualProject_ProjectChanged; - _actualProject.BuildingSiteChanged += _actualProject_BuildingSiteChanged; - _actualProject.SewerObjectChanged += _actualProject_SewerObjectChanged; + _actualProject.ClientChanged += ActualProject_ClientChanged; + _actualProject.ProjectChanged += ActualProject_ProjectChanged; + _actualProject.BuildingSiteChanged += ActualProject_BuildingSiteChanged; + _actualProject.SewerObjectChanged += ActualProject_SewerObjectChanged; - ladeRegistry(); + LadeRegistry(); } - private async void ladeRegistry() + private async void LadeRegistry() { - - registry = Registry.CurrentUser.OpenSubKey("Software\\Cosysda\\DaSaSo"); - if (registry == null) initRegistry(); int clientid = Convert.ToInt32((string)registry.GetValue("lastclient", "-1")); if (clientid == -1) return; Client lastClient = await _clientDataService.Get(clientid); if (lastClient == null) { - saveInRegistry("lastclient", "-1"); + SaveInRegistry("lastclient", "-1"); return; } _actualProject.SetClient(lastClient); @@ -140,64 +150,65 @@ namespace DaSaSo.ViewModel Project lastProject = await _projectDataService.Get(projectid); if(lastProject == null) { - saveInRegistry("lastproject","-1"); + SaveInRegistry("lastproject","-1"); return; } _actualProject.SetProject(lastProject); - int buildingsiteid = Convert.ToInt32((string)registry.GetValue("lastbuildingsite", "-1")); + string? value = registry.GetValue("lastbuildingsite", "-1") as string; + int buildingsiteid = Convert.ToInt32(value); if (buildingsiteid == -1) return; Buildingsite lastBuildingiste = await _buildingsiteDataService.Get(buildingsiteid); if(lastBuildingiste == null) { - saveInRegistry("lastbuildingsite","-1"); + SaveInRegistry("lastbuildingsite","-1"); return; } _actualProject.SetBuildingSite(lastBuildingiste); } - private void saveInRegistry(string key, string value) + private static void SaveInRegistry(string key, string value) { Registry.SetValue(REGISTRYKEY, key, value); } - private void initRegistry() + private void InitRegistry() { Registry.CurrentUser.CreateSubKey("Software\\Cosysda\\DaSaSo"); - ladeRegistry(); + LadeRegistry(); } - private void _actualProject_SewerObjectChanged(object? sender, EventArgs e) + private void ActualProject_SewerObjectChanged(object? sender, EventArgs e) { UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.SewerMainMenu); } - private void _navigator_StateChanged() + private void Navigator_StateChanged() { OnPropertyChanged(nameof(CurrentViewModel)); } - private void _actualProject_BuildingSiteChanged(object? sender, EventArgs e) + private void ActualProject_BuildingSiteChanged(object? sender, EventArgs e) { - saveInRegistry("lastbuildingsite", _actualProject.AktuellBaustelle.Id.ToString()); + SaveInRegistry("lastbuildingsite", _actualProject.AktuellBaustelle.Id.ToString()); Buildingsitename = _actualProject.AktuellBaustelle.BuildingSiteNumber; OnPropertyChanged(nameof(CanSelectSewerObjects)); UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.SewerObjects); } - private void _actualProject_ProjectChanged(object? sender, EventArgs e) + private void ActualProject_ProjectChanged(object? sender, EventArgs e) { - saveInRegistry("lastproject", _actualProject.AktuellProjekt.Id.ToString()); + SaveInRegistry("lastproject", _actualProject.AktuellProjekt.Id.ToString()); Projektname = _actualProject.AktuellProjekt.Name; OnPropertyChanged(nameof(CanSelectBuildingSite)); UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.Buildingsites); } - private void _actualProject_ClientChanged(object? sender, EventArgs e) + private void ActualProject_ClientChanged(object? sender, EventArgs e) { - saveInRegistry("lastclient", _actualProject.AktuellClient.Id.ToString()); + SaveInRegistry("lastclient", _actualProject.AktuellClient.Id.ToString()); ClientName = _actualProject.AktuellClient.Firstname; OnPropertyChanged(nameof(CanSelectProject)); UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.Projects); diff --git a/DaSaSo.Wpf/Controls/SewerObjectNavigationBar.xaml b/DaSaSo.Wpf/Controls/SewerObjectNavigationBar.xaml index 50adb3a..3551e37 100644 --- a/DaSaSo.Wpf/Controls/SewerObjectNavigationBar.xaml +++ b/DaSaSo.Wpf/Controls/SewerObjectNavigationBar.xaml @@ -12,7 +12,7 @@ - + diff --git a/DaSaSo.Wpf/Converters/EqualDamageTypeToBooleanConverter.cs b/DaSaSo.Wpf/Converters/EqualDamageTypeToBooleanConverter.cs index 03217b2..85f8095 100644 --- a/DaSaSo.Wpf/Converters/EqualDamageTypeToBooleanConverter.cs +++ b/DaSaSo.Wpf/Converters/EqualDamageTypeToBooleanConverter.cs @@ -13,13 +13,14 @@ namespace DaSaSo.Wpf.Converters { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - return (((int)value & (int)parameter) == (int)value); - + bool result = (((int)value & (int)parameter) == (int)value); + return result; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { - throw new NotImplementedException(); + //EDamageType result = (EDamageType)parameter; + return null; } } } diff --git a/DaSaSo.Wpf/DaSaSo.Wpf.csproj.user b/DaSaSo.Wpf/DaSaSo.Wpf.csproj.user index f682e0c..da2408f 100644 --- a/DaSaSo.Wpf/DaSaSo.Wpf.csproj.user +++ b/DaSaSo.Wpf/DaSaSo.Wpf.csproj.user @@ -37,6 +37,15 @@ Code + + Code + + + Code + + + Code + Code @@ -84,6 +93,15 @@ Designer + + Designer + + + Designer + + + Designer + Designer diff --git a/DaSaSo.Wpf/HostBuilders/AddServicesHostBuilderExtensions.cs b/DaSaSo.Wpf/HostBuilders/AddServicesHostBuilderExtensions.cs index 950d7e8..4604c9f 100644 --- a/DaSaSo.Wpf/HostBuilders/AddServicesHostBuilderExtensions.cs +++ b/DaSaSo.Wpf/HostBuilders/AddServicesHostBuilderExtensions.cs @@ -21,7 +21,7 @@ namespace DaSaSo.Wpf.HostBuilders { host.ConfigureServices(services => { - services.AddSingleton, ClientDataService>(); + services.AddTransient, ClientDataService>(); services.AddSingleton, ProjectDataService>(); services.AddTransient, BuildingsiteDataService>(); services.AddSingleton, SewerObjectDataService>(); diff --git a/DaSaSo.Wpf/HostBuilders/AddViewModelsHostBuilderExtensions.cs b/DaSaSo.Wpf/HostBuilders/AddViewModelsHostBuilderExtensions.cs index 43742d0..039ca66 100644 --- a/DaSaSo.Wpf/HostBuilders/AddViewModelsHostBuilderExtensions.cs +++ b/DaSaSo.Wpf/HostBuilders/AddViewModelsHostBuilderExtensions.cs @@ -79,7 +79,12 @@ namespace DaSaSo.Wpf.HostBuilders services.GetRequiredService(), services.GetRequiredService>()//, //services.GetRequiredService() - + ); + }); + services.AddTransient>(services => + { + return () => new SewerDamageEditViewModel( + services.GetRequiredService() ); }); diff --git a/DaSaSo.Wpf/Sampledata/SewerDamageListSampleData.cs b/DaSaSo.Wpf/Sampledata/SewerDamageListSampleData.cs index 5ff3577..fa03c91 100644 --- a/DaSaSo.Wpf/Sampledata/SewerDamageListSampleData.cs +++ b/DaSaSo.Wpf/Sampledata/SewerDamageListSampleData.cs @@ -16,7 +16,7 @@ namespace DaSaSo.Wpf.Sampledata Damages.Add(new SewerDamage() { DamageType = EDamageType.Bruch | EDamageType.EinrageneStutzen, - PreparationType = EPreparationType.CleanedHD | EPreparationType.CleanedRoborter, + PreparationType = EPreparationType.CleanedHD | EPreparationType.CleanedRoboter, Distance = 12.5m }); diff --git a/DaSaSo.Wpf/View/Project/ProjectEditView.xaml b/DaSaSo.Wpf/View/Project/ProjectEditView.xaml index 62d4bd5..b3193e4 100644 --- a/DaSaSo.Wpf/View/Project/ProjectEditView.xaml +++ b/DaSaSo.Wpf/View/Project/ProjectEditView.xaml @@ -17,11 +17,12 @@ -