173 lines
5.3 KiB
C#
173 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 AuftraggeberEditFrmViewModel(_model.Auftraggeber, _auftraggeberDataService);
|
|
win.Closed += AuftraggeberWin_Closed;
|
|
win.ShowDialog();
|
|
|
|
}
|
|
|
|
private void AuftraggeberWin_Closed(object? sender, EventArgs e)
|
|
{
|
|
OnPropertyChanged(nameof(Auftraggeber));
|
|
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()
|
|
{
|
|
// TODO: 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();
|
|
}
|
|
}
|
|
}
|