using SewerStammGen.DAL.Services.PostgresqlData; using SewerStammGen.Shared.Contracts; using SewerStammGen.Shared.Domain; using Shared.Contracts; using StammGenerator.Interface; using StammGenerator.Views; using System; using System.Collections.Generic; using System.Diagnostics; using System.Windows; using System.Windows.Input; namespace StammGenerator.ViewModel { internal class ProjektEditViewModel : BaseViewModel { private Projekt _model; private int ProjektID; private readonly IDataService _projectDataService; private readonly IAuftraggeberDataService _auftraggeberDataService; private Auftraggeber auftraggeber = new Auftraggeber(); private readonly IRenavigator _renavigator; private bool AuftraggeberChanged = false; public ProjektSettingsViewModel ProjektSettingsViewModel { get; set; } public ICommand Speichern { get; set; } public ICommand AuftraggeberChange { get; set; } public Auftraggeber Auftraggeber { get => _model.Auftraggeber; set { if(_model.Auftraggeber == value) return; _model.Auftraggeber = value; OnPropertyChanged(); } } public string ProjektName { get => _model.Projektname; set { if(_model.Projektname != value) { _model.Projektname = value; OnPropertyChanged(); } } } public string Erstelldatum { get => _model.Erstelldatum; set { if (_model.Erstelldatum != value) { _model.Erstelldatum = value; OnPropertyChanged(); } } } public string Strasse { get => _model.Strasse; set { if (_model.Strasse != value) { _model.Strasse = value; OnPropertyChanged(); } } } public string Ort { get => _model.Ort; set { if (_model.Ort != value) { _model.Ort = value; OnPropertyChanged(); } } } public ProjektEditViewModel(IProjektDataService projektDataService,IAuftraggeberDataService auftraggeberDataService, IActualState actualState, IRenavigator renavigator) { _projectDataService = projektDataService; _auftraggeberDataService = auftraggeberDataService; _renavigator = renavigator; ProjektID = actualState.ProjektID; _model = new Projekt(); Speichern = new RelayCommand((x) => this.SaveProject()); AuftraggeberChange = new RelayCommand((x) => this.ChangeAuftraggeber()); this.ProjektSettingsViewModel = new ProjektSettingsViewModel(); LoadProjekt(); } private void ChangeAuftraggeber() { var win = new AuftraggeberShow(); win.DataContext = new AuftraggeberEditFrmViewModel(_model.Auftraggeber, _auftraggeberDataService); win.Closed += AuftraggeberWin_Closed; win.ShowDialog(); } private void AuftraggeberWin_Closed(object? sender, EventArgs e) { AuftraggeberShow? shw = sender as AuftraggeberShow; if (shw == null) return; AuftraggeberEditFrmViewModel? mdl = shw.DataContext as AuftraggeberEditFrmViewModel; if (mdl == null) return; if (mdl.SelectedAuftraggber == null) return; if (!_model.Auftraggeber.Id.Equals(mdl.SelectedAuftraggber.Id)) { _model.Auftraggeber = mdl.SelectedAuftraggber; AuftraggeberChanged = true; } OnPropertyChanged(nameof(Auftraggeber)); } private async void LoadProjekt() { _model = await _projectDataService.Get(ProjektID); if(_model == null) { _model = new Projekt() { Auftraggeber = new Auftraggeber(), }; } this.ProjektSettingsViewModel.Projekt = _model; OnPropertyChanged(nameof(ProjektName)); OnPropertyChanged(nameof(Erstelldatum)); OnPropertyChanged(nameof(Strasse)); OnPropertyChanged(nameof(Ort)); OnPropertyChanged(nameof(ProjektSettingsViewModel)); OnPropertyChanged(nameof(Auftraggeber)); } private void SaveProject() { // Zur Zeit ohne Funktion da die Klasse so nicht bearbeitet wird. State geht verloren //if (_model.AuftraggeberTemporar && !_model.Auftraggeber.DataChanged) // ChangeAuftraggeber(); if (_model.Auftraggeber.DataChanged && !AuftraggeberChanged) _auftraggeberDataService.Update(_model.Auftraggeber); _projectDataService.Update(_model); _renavigator.Renavigate(); } } }