Files
SewerGenerator/StammGenerator/ViewModel/Projekt/ProjektEditViewModel.cs

172 lines
5.3 KiB
C#

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<Projekt> _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 AuftraggeberEditViewModel(_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;
AuftraggeberEditViewModel? mdl = shw.DataContext as AuftraggeberEditViewModel;
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();
}
}
}