diff --git a/SewerStammGen.DAL/Services/PostgresqlData/ProjektDataService.cs b/SewerStammGen.DAL/Services/PostgresqlData/ProjektDataService.cs index ae554f6..f85e80e 100644 --- a/SewerStammGen.DAL/Services/PostgresqlData/ProjektDataService.cs +++ b/SewerStammGen.DAL/Services/PostgresqlData/ProjektDataService.cs @@ -29,7 +29,14 @@ namespace SewerStammGen.DAL.Services.PostgresqlData IAuftraggeberDataService auftraggeberDataService = new AuftraggeberDataService(connString); var s = await auftraggeberDataService.GetAll(); // TODO : Auftraggeber verwaltung - entity.Auftraggeber = s.ToList().Last(); + if (s.Count() < 1) + { + entity.Auftraggeber = await auftraggeberDataService.Create(new Auftraggeber() { Name = "Anonym" }); + } + else + { + entity.Auftraggeber = s.ToList().Last(); + } } await using (var cmd = new NpgsqlCommand(command, conn)) @@ -45,6 +52,7 @@ namespace SewerStammGen.DAL.Services.PostgresqlData reader.Read(); entity.Id = reader.GetInt32(0); } + entity.AuftraggeberTemporar = true; return entity; } @@ -100,7 +108,7 @@ namespace SewerStammGen.DAL.Services.PostgresqlData public async Task Update(Projekt entity) { - string command = "UPDATE "+tableName+" SET projektname=@1, erstelldatum=@2, strasse=@3, ort=@4, exporttype=@5, kodierungssystem=@6 WHERE projekt_id = @8"; + string command = "UPDATE "+tableName+ " SET projektname=@1, erstelldatum=@2, strasse=@3, ort=@4, exporttype=@5, kodierungssystem=@6,ref_auftraggeber_id=@7 WHERE projekt_id = @8"; using (var cmd = new NpgsqlCommand(command, conn)) { cmd.Parameters.AddWithValue("1", entity.Projektname); @@ -109,6 +117,7 @@ namespace SewerStammGen.DAL.Services.PostgresqlData cmd.Parameters.AddWithValue("4", entity.Ort); cmd.Parameters.AddWithValue("5", (int)entity.ExportType); cmd.Parameters.AddWithValue("6", (int)entity.Kodierungssystem); + cmd.Parameters.AddWithValue("7", entity.Auftraggeber.Id); cmd.Parameters.AddWithValue("8", entity.Id); int res = await cmd.ExecuteNonQueryAsync(); Trace.WriteLine(res); diff --git a/SewerStammGen.Shared/Domain/Auftraggeber.cs b/SewerStammGen.Shared/Domain/Auftraggeber.cs index cca5b47..7121091 100644 --- a/SewerStammGen.Shared/Domain/Auftraggeber.cs +++ b/SewerStammGen.Shared/Domain/Auftraggeber.cs @@ -16,5 +16,10 @@ namespace SewerStammGen.Shared.Domain public string Telefonnummer { get; set; } = String.Empty; public bool DataChanged { get; set; } = false; + + public override string ToString() + { + return string.Format("{0} [{1}]", Name, Ansprechpartner); + } } } diff --git a/SewerStammGen.Shared/Domain/Projekt.cs b/SewerStammGen.Shared/Domain/Projekt.cs index 4685a51..1bdad6e 100644 --- a/SewerStammGen.Shared/Domain/Projekt.cs +++ b/SewerStammGen.Shared/Domain/Projekt.cs @@ -19,5 +19,9 @@ namespace SewerStammGen.Shared.Domain public EKodierungssystem Kodierungssystem { get; set; } public IList Kanaele { get; set; } = new List(); public IList Schaechte { get; set;} = new List(); + + + + public bool AuftraggeberTemporar { get; set; } = false; } } diff --git a/StammGenerator/ViewModel/Auftraggeber/AuftraggeberEditViewModel.cs b/StammGenerator/ViewModel/Auftraggeber/AuftraggeberEditViewModel.cs index 4efd800..4a6a868 100644 --- a/StammGenerator/ViewModel/Auftraggeber/AuftraggeberEditViewModel.cs +++ b/StammGenerator/ViewModel/Auftraggeber/AuftraggeberEditViewModel.cs @@ -1,10 +1,13 @@ -using SewerStammGen.Shared.Domain; +using SewerStammGen.Shared.Contracts; +using SewerStammGen.Shared.Domain; +using Shared.Contracts; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; +using System.Windows.Input; namespace StammGenerator.ViewModel { @@ -84,15 +87,58 @@ namespace StammGenerator.ViewModel } } + public Auftraggeber? SelectedAuftraggber { get; set; } = null; + + public ICommand ApplyCommand { get; set; } + + private readonly IAuftraggeberDataService _auftraggeberDataService; + + private IList verfuegbareAuftraggeber = new List(); + public IList VerfuegbareAuftraggeber + { + get => verfuegbareAuftraggeber; + set + { + verfuegbareAuftraggeber = value; + OnPropertyChanged(); + } + } + protected override void OnPropertyChanged([CallerMemberName] string? propertyName = null) { _model.DataChanged = true; base.OnPropertyChanged(propertyName); } - public AuftraggeberEditViewModel(Auftraggeber model) + public AuftraggeberEditViewModel(Auftraggeber model, IAuftraggeberDataService auftraggeberDataService) { _model = model; + _auftraggeberDataService = auftraggeberDataService; + ApplyCommand = new RelayCommand((x) => this.Apply()); + + + LoadAuftraggebers(); + } + + private void Apply() + { + if (SelectedAuftraggber == null) return; + _model = SelectedAuftraggber; + OnPropertyChanged(nameof(Name)); + OnPropertyChanged(nameof(Strasse)); + OnPropertyChanged(nameof(Ort)); + OnPropertyChanged(nameof(Postleitzahl)); + OnPropertyChanged(nameof(Telefonnummer)); + OnPropertyChanged(nameof(Ansprechpartner)); + } + + private async void LoadAuftraggebers() + { + VerfuegbareAuftraggeber.Clear(); + IEnumerable s = await _auftraggeberDataService.GetAll(); + VerfuegbareAuftraggeber = s.ToList(); + OnPropertyChanged(nameof(VerfuegbareAuftraggeber)); + } } diff --git a/StammGenerator/ViewModel/Projekt/ProjektEditViewModel.cs b/StammGenerator/ViewModel/Projekt/ProjektEditViewModel.cs index 7c5d74f..f80924b 100644 --- a/StammGenerator/ViewModel/Projekt/ProjektEditViewModel.cs +++ b/StammGenerator/ViewModel/Projekt/ProjektEditViewModel.cs @@ -1,4 +1,5 @@ -using SewerStammGen.Shared.Contracts; +using SewerStammGen.DAL.Services.PostgresqlData; +using SewerStammGen.Shared.Contracts; using SewerStammGen.Shared.Domain; using Shared.Contracts; @@ -6,6 +7,7 @@ using StammGenerator.Interface; using StammGenerator.Views; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Windows; using System.Windows.Input; @@ -16,9 +18,10 @@ namespace StammGenerator.ViewModel private Projekt _model; private int ProjektID; private readonly IDataService _projectDataService; - private readonly IDataService _auftraggeberDataService; + private readonly IAuftraggeberDataService _auftraggeberDataService; private Auftraggeber auftraggeber = new Auftraggeber(); private readonly IRenavigator _renavigator; + private bool AuftraggeberChanged = false; public ProjektSettingsViewModel ProjektSettingsViewModel { get; set; } @@ -109,7 +112,7 @@ namespace StammGenerator.ViewModel private void ChangeAuftraggeber() { var win = new AuftraggeberShow(); - win.DataContext = new AuftraggeberEditViewModel(_model.Auftraggeber); + win.DataContext = new AuftraggeberEditViewModel(_model.Auftraggeber, _auftraggeberDataService); win.Closed += AuftraggeberWin_Closed; win.ShowDialog(); @@ -117,6 +120,17 @@ namespace StammGenerator.ViewModel 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)); } @@ -144,7 +158,10 @@ namespace StammGenerator.ViewModel private void SaveProject() { - if (_model.Auftraggeber.DataChanged) + // 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); diff --git a/StammGenerator/Views/Auftraggeber/AuftraggeberShow.xaml b/StammGenerator/Views/Auftraggeber/AuftraggeberShow.xaml index a3adc93..cd3312a 100644 --- a/StammGenerator/Views/Auftraggeber/AuftraggeberShow.xaml +++ b/StammGenerator/Views/Auftraggeber/AuftraggeberShow.xaml @@ -10,6 +10,7 @@ + @@ -33,5 +34,11 @@ + + +