diff --git a/BeWo/View/Detail/WohnheimView.xaml.cs b/BeWo/View/Detail/WohnheimView.xaml.cs index e92f70dfd..0b96e1dc0 100644 --- a/BeWo/View/Detail/WohnheimView.xaml.cs +++ b/BeWo/View/Detail/WohnheimView.xaml.cs @@ -465,7 +465,7 @@ namespace BeWo.View.Detail private void Button_NewBuchung_Click(object sender, RoutedEventArgs e) { - popup_newBuchung.ViewModel = + popup_newBuchung.ViewModel = new WohneinheitBelegungVM(); popup_newBuchung.IsOpen = true; diff --git a/BeWo/ViewModel/AbstractBaseVM.cs b/BeWo/ViewModel/AbstractBaseVM.cs index 2cd37092a..e5aa4082e 100644 --- a/BeWo/ViewModel/AbstractBaseVM.cs +++ b/BeWo/ViewModel/AbstractBaseVM.cs @@ -51,13 +51,33 @@ namespace BeWo.ViewModel protected virtual void FirePropertyChanged(string pPropertyName) { - FirePropertyChanged(PropertyChanged, pPropertyName); + FirePropertyChanged(PropertyChanged, this, pPropertyName); } protected void FirePropertyChanged(PropertyChangedEventHandler handler, string pPropertyName) + { + FirePropertyChanged(handler, this, pPropertyName); + } + + protected void FirePropertyChanged(object sender, string pPropertyName) + { + FirePropertyChanged(PropertyChanged, sender, pPropertyName); + } + + protected void FirePropertyChanged(object sender, PropertyChangedEventArgs e) + { + FirePropertyChanged(PropertyChanged, sender, e); + } + + protected void FirePropertyChanged(PropertyChangedEventHandler handler, object sender, string pPropertyName) + { + FirePropertyChanged(handler, sender, new PropertyChangedEventArgs(pPropertyName)); + } + + protected void FirePropertyChanged(PropertyChangedEventHandler handler, object sender, PropertyChangedEventArgs e) { _IsDirty = true; - handler?.Invoke(this, new PropertyChangedEventArgs(pPropertyName)); + handler?.Invoke(sender, e); } } } \ No newline at end of file diff --git a/BeWo/ViewModel/ListViewModel/WohneinheitBelegungListVM.cs b/BeWo/ViewModel/ListViewModel/WohneinheitBelegungListVM.cs index e0385e9a5..b1dfd6fe9 100644 --- a/BeWo/ViewModel/ListViewModel/WohneinheitBelegungListVM.cs +++ b/BeWo/ViewModel/ListViewModel/WohneinheitBelegungListVM.cs @@ -11,26 +11,21 @@ namespace BeWo.ViewModel.ListViewModel { public class WohneinheitBelegungListVM : AbstractDCListMapperVM { - private WohnheimVM _Wohnheim; - private WohneinheitBelegungVM _CurrentVM; + public WohneinheitVM Parent { get; set; } + public WohneinheitBelegungVM Current { get; set; } - private WohneinheitVM _ParentVM; - - public WohneinheitBelegungListVM(List pDCs, WohneinheitVM parentVm) : base(pDCs) + public WohneinheitBelegungListVM(List vms) : base() { - _ParentVM = parentVm; + VMList = new BindingList(vms); } - public WohneinheitBelegungVM CurrentVM + public WohneinheitBelegungListVM(List pDCs, WohneinheitVM wohneinheitVM) : base(pDCs) { - get => _CurrentVM; - set - { - if (!AreDifferent(_CurrentVM, value)) - return; + Parent = wohneinheitVM; - _CurrentVM = value; - FirePropertyChanged(nameof(CurrentVM)); + foreach (var beleg in VMList) + { + beleg.Parent = Parent; } } @@ -38,23 +33,10 @@ namespace BeWo.ViewModel.ListViewModel { var vm = base.AddNewVMToList(); - CurrentVM = null; + Parent.Belegungen.VMList.Add(vm); + Parent.Wohnheim.WohneinheitListVM.WohneinheitBelegungListVM.VMList.Add(vm); return vm; } - - public void CloseEditVM() - { - EditVM = null; - - CurrentVM = null; - } - - public void CloseNewVM() - { - NewVM = null; - - CurrentVM = null; - } } } \ No newline at end of file diff --git a/BeWo/ViewModel/ListViewModel/WohneinheitListVM.cs b/BeWo/ViewModel/ListViewModel/WohneinheitListVM.cs index dd7070abd..c747c4aa9 100644 --- a/BeWo/ViewModel/ListViewModel/WohneinheitListVM.cs +++ b/BeWo/ViewModel/ListViewModel/WohneinheitListVM.cs @@ -13,24 +13,56 @@ namespace BeWo.ViewModel.ListViewModel { private WohnheimVM _Wohnheim; private WohneinheitVM _CurrentVM; - private BindingList _Belegungen; private BindingList _Wohnungsnamen; + private WohneinheitBelegungListVM _WohneinheitBelegungListVM; + public WohneinheitListVM(List pDCs, WohnheimVM parentVm) : base(pDCs) { _Wohnheim = parentVm; - var belegungen = new List(); + var list = new List(); VMList.DoForEach(x => { x.Wohnheim = _Wohnheim; - - belegungen.AddRange(x.Belegungen.VMList); + list.AddRange(x.Belegungen.VMList); + //x.Belegungen = new BindingList(belegListVM.VMList.Where(beleg => beleg.Parent == x).ToList()); }); - _Belegungen = new BindingList(belegungen); + WohneinheitBelegungListVM = new WohneinheitBelegungListVM(list); + _Wohnungsnamen = new BindingList(GetWohnungsnamen()); + + //var belegungs_dcs = pDCs.SelectMany(x => x.Belegungen).ToList(); + //var belegung_list_vm = new WohneinheitBelegungListVM(belegungs_dcs); + // + //Dictionary beleg2parent = new Dictionary(); + //foreach (var einheit_vm in VMList) + //{ + // foreach (var beleg_dc in einheit_vm.DataContract.Belegungen) + // { + // beleg2parent.Add(beleg_dc.Oid.Value, einheit_vm); + // } + //} + // + //foreach (var belegung_vm in belegung_list_vm.VMList) + //{ + // belegung_vm.Parent = beleg2parent[belegung_vm.Oid.Value]; + //} + // + //_Belegungen = new BindingList(belegungen); + } + + public WohneinheitBelegungListVM WohneinheitBelegungListVM + { + get { return _WohneinheitBelegungListVM; } + + set + { + _WohneinheitBelegungListVM = value; + FirePropertyChanged(nameof(WohneinheitBelegungListVM)); + } } public WohneinheitVM CurrentVM @@ -70,6 +102,8 @@ namespace BeWo.ViewModel.ListViewModel return vm; } + public override bool IsDirty => base.IsDirty || WohneinheitBelegungListVM.IsDirty; + public void CloseEditVM() { EditVM = null; diff --git a/BeWo/ViewModel/VMFactory.cs b/BeWo/ViewModel/VMFactory.cs index de6d9910b..9101635a1 100644 --- a/BeWo/ViewModel/VMFactory.cs +++ b/BeWo/ViewModel/VMFactory.cs @@ -869,5 +869,15 @@ namespace BeWo.ViewModel return folderList; } + public static WohneinheitListVM CreateWohneinheitListVMs(List dcs, WohnheimVM parent) + { + // var belegung_dcs = dcs.SelectMany(x => x.Belegungen).ToList(); + + //var belegung_list_vm = new WohneinheitBelegungListVM(belegung_dcs); + + var einheit_list_vm = new WohneinheitListVM(dcs, parent); + + return einheit_list_vm; + } } } \ No newline at end of file diff --git a/BeWo/ViewModel/WohneinheitBelegungVM.cs b/BeWo/ViewModel/WohneinheitBelegungVM.cs index b9475ec3b..a46aa1999 100644 --- a/BeWo/ViewModel/WohneinheitBelegungVM.cs +++ b/BeWo/ViewModel/WohneinheitBelegungVM.cs @@ -20,6 +20,10 @@ namespace BeWo.ViewModel private DateTime? _EndDate; private string _Kommentar; + public WohneinheitBelegungVM() : base(new WohneinheitBelegungDC(), true) + { + + } public WohneinheitBelegungVM(WohneinheitBelegungDC dc) : base(dc, dc.Oid == null) { @@ -27,6 +31,25 @@ namespace BeWo.ViewModel public long? Oid => _Oid; + public WohneinheitVM Parent + { + get { return _Parent; } + set + { + if (!AreDifferent(Parent, value)) + return; + + if (_Parent is object) + _Parent.PropertyChanged -= FirePropertyChanged; + + _Parent = value; + + if (_Parent is object) + _Parent.PropertyChanged += FirePropertyChanged; + + FirePropertyChanged(nameof(Parent)); + } + } public long? CustomerOid { get { return _CustomerOid; } @@ -39,7 +62,6 @@ namespace BeWo.ViewModel FirePropertyChanged(nameof(CustomerOid)); } } - public DateTime StartDate { get { return _StartDate; } @@ -53,7 +75,6 @@ namespace BeWo.ViewModel FirePropertyChanged(nameof(StartDate)); } } - public DateTime? EndDate { get { return _EndDate; } diff --git a/BeWo/ViewModel/WohnheimVM.cs b/BeWo/ViewModel/WohnheimVM.cs index f314e6ce8..fd30aa689 100644 --- a/BeWo/ViewModel/WohnheimVM.cs +++ b/BeWo/ViewModel/WohnheimVM.cs @@ -70,8 +70,8 @@ namespace BeWo.ViewModel { get { - return base.IsDirty || WohnheimEmployeeRelations.IsDirty - || WohnheimCustomerRelations.IsDirty + return base.IsDirty || WohnheimEmployeeRelations.IsDirty + || WohnheimCustomerRelations.IsDirty || WohneinheitListVM.IsDirty; } } @@ -108,7 +108,6 @@ namespace BeWo.ViewModel FirePropertyChanged(PropertyName_WohnheimName); } } - public String Strasse { @@ -123,7 +122,6 @@ namespace BeWo.ViewModel FirePropertyChanged(PropertyName_Street); } } - public String PLZ { get @@ -137,7 +135,6 @@ namespace BeWo.ViewModel FirePropertyChanged(PropertyName_PLZ); } } - public String Ort { get @@ -151,7 +148,6 @@ namespace BeWo.ViewModel FirePropertyChanged(PropertyName_Ort); } } - public String Bemerkung { @@ -167,7 +163,6 @@ namespace BeWo.ViewModel FirePropertyChanged(PropertyName_Bemerkung); } } - public String PflichtbesetzungStart { @@ -326,7 +321,7 @@ namespace BeWo.ViewModel WohnheimEmployeeRelations = VMFactory.CreateWohnheimEmployeeRelationListVM(pDataContract.RelatedEmployees ?? (pDataContract.RelatedEmployees = new List())); WohnheimCustomerRelations = VMFactory.CreateWohnheimCustomerRelationListVM(pDataContract.RelatedCustomers ?? (pDataContract.RelatedCustomers = new List())); - WohneinheitListVM = new WohneinheitListVM(pDataContract.Wohneinheiten ?? (pDataContract.Wohneinheiten = new List()), this); + WohneinheitListVM = VMFactory.CreateWohneinheitListVMs(pDataContract.Wohneinheiten ?? (pDataContract.Wohneinheiten = new List()), this); } protected override WohnheimDC MapToDataContract(WohnheimDC pDataContract, bool doCommit)