From 65ce5e237cccef30714a1123bac32ae280da3de6 Mon Sep 17 00:00:00 2001 From: Rene Evertz Date: Fri, 26 Apr 2024 12:39:39 +0200 Subject: [PATCH] =?UTF-8?q?Bemerkung=20=20+=20Bezahlt=20in=20der=20GUI=20U?= =?UTF-8?q?pdatebar=20-=20Problem:=20Wenn=20man=20die=20InvoiceBase=20List?= =?UTF-8?q?=20=C3=BCberschreibt=20mit=20der=20alten,=20so=20wird=20versuch?= =?UTF-8?q?t,=20Eintr=C3=A4ge=20doppelt=20zu=20speichern=20->=20duplicated?= =?UTF-8?q?=20key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWo/ServiceProxy/Generated.cs | 9 +++ BeWo/ServiceProxy/ServiceFacade.cs | 14 ++++ .../Accounting/GkvAbrechnungOverview.xaml | 36 ++++----- .../Accounting/GkvAbrechnungOverview.xaml.cs | 28 ++++++- BeWo/ViewModel/GkvAbrechnungVM.cs | 74 ++++++++++++++++++- Data/Entities/GkvAbrechnung.cs | 2 + Data/Mappings/GkvAbrechnung.hbm.xml | 1 + .../GkvAbrechnungDC_GkvAbrechnung.cs | 9 ++- .../ServiceContracts/IAccountingService.cs | 4 + .../AccountingServiceImp.cs | 20 +++++ Shared/DataContracts/GkvAbrechnungDC.cs | 6 ++ 11 files changed, 180 insertions(+), 23 deletions(-) diff --git a/BeWo/ServiceProxy/Generated.cs b/BeWo/ServiceProxy/Generated.cs index c7dc3d24b..f8c3468ed 100644 --- a/BeWo/ServiceProxy/Generated.cs +++ b/BeWo/ServiceProxy/Generated.cs @@ -9404,6 +9404,10 @@ namespace BeWo.ServiceProxy [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/CreateNewGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/CreateNewGkvAbrechnungResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/CreateNewGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] BS.Shared.DataContracts.GkvAbrechnungResponseDC CreateNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnungRequestDC request); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/UpdateGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/UpdateGkvAbrechnungResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/UpdateGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + BS.Shared.DataContracts.GkvAbrechnungDC UpdateGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnungDC abrechnung); } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] @@ -9619,6 +9623,11 @@ namespace BeWo.ServiceProxy { return base.Channel.CreateNewGkvAbrechnung(request); } + + public BS.Shared.DataContracts.GkvAbrechnungDC UpdateGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnungDC abrechnung) + { + return base.Channel.UpdateGkvAbrechnung(abrechnung); + } } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] diff --git a/BeWo/ServiceProxy/ServiceFacade.cs b/BeWo/ServiceProxy/ServiceFacade.cs index 60555648c..5177f5751 100644 --- a/BeWo/ServiceProxy/ServiceFacade.cs +++ b/BeWo/ServiceProxy/ServiceFacade.cs @@ -86,6 +86,20 @@ namespace BeWo.ServiceProxy DoAsync(pAction, callback, true); } + public static T DoAccountingServiceSync(Func pFunc) + { + try + { + return pFunc.Invoke(GetInstance()); + } + catch (Exception e) + { + ShowErrorMessage(e); + } + + return default(T); + } + public static void DoAnalysisServiceAsync(Func pFunc, Action pCallBack) { DoAsync(pFunc, pCallBack, true); diff --git a/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml b/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml index 48fe81c8e..3848d0221 100644 --- a/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml +++ b/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml @@ -43,10 +43,10 @@ - - - - @@ -110,16 +106,22 @@ + + + + + - + + @@ -140,15 +142,13 @@ - - - + + Margin="3,22,3,3" CellValueChanged="gridView_CellValueChanged_1"/> diff --git a/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml.cs b/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml.cs index 60bb59f6c..8e71b0016 100644 --- a/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml.cs +++ b/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml.cs @@ -181,7 +181,6 @@ namespace BeWo.View.Detail.Accounting _NewGkvAbrechnungPopUpView.ViewModel = gkvAbrechnungVM; this.MainControl.ShowControlAsModalPopup(this._NewGkvAbrechnungPopUpView); } - private void ReloadButton_OnClick(object sender, RoutedEventArgs e) { RefreshGkvAbrechnungenList(); @@ -201,11 +200,11 @@ namespace BeWo.View.Detail.Accounting } private void gridView_CellValueChanged(object sender, CellValueChangedEventArgs e) { - if (e.Column != null && e.Column.FieldName == "IsPaid") + if (e.Column != null && e.Column.FieldName == "Bezahlt") { if (e.Value is bool b && e.Row is GkvAbrechnungVM vm) { - // SaveIsPaidChange(vm, b); + SaveBezahltChange(vm, b); } } } @@ -229,6 +228,29 @@ namespace BeWo.View.Detail.Accounting UpdateDataGridFilter(); } + private void SaveBezahltChange(GkvAbrechnungVM vm, bool b) + { + + } + + private void SaveNoticeChange(GkvAbrechnungVM vm, string notice) + { + var dc = ServiceFacade.DoAccountingServiceSync(x => x.UpdateGkvAbrechnung(vm.CommitToDataContract())); + + vm.Update(dc); + } + + private void gridView_CellValueChanged_1(object sender, CellValueChangedEventArgs e) + { + if (e.Column != null && e.Column.FieldName == "Notice") + { + if (e.Value is string s && e.Row is GkvAbrechnungVM vm) + { + SaveNoticeChange(vm, s); + } + } + } + //private void btn_delete_Click(object sender, RoutedEventArgs e) //{ // mIgnoreCheckChanges = true; diff --git a/BeWo/ViewModel/GkvAbrechnungVM.cs b/BeWo/ViewModel/GkvAbrechnungVM.cs index 34792085d..f5a6e99c9 100644 --- a/BeWo/ViewModel/GkvAbrechnungVM.cs +++ b/BeWo/ViewModel/GkvAbrechnungVM.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Linq; using BeWo.Validation; using BS.Shared.DataContracts; @@ -64,10 +65,13 @@ AntwortEntschluesseltAm private DateTime? _AntwortEntschluesseltAm; private decimal _Betrag; + private bool _Bezahlt; internal bool _IsChecked; + private List _InvoiceBases2; private BindingList _InvoiceBases; + private OrganisationDC _Organisation; public GkvAbrechnungVM(GkvAbrechnungDC pDC) : base(pDC, !pDC.GkvAbrechnungOid.HasValue) @@ -75,6 +79,7 @@ AntwortEntschluesseltAm _InvoiceBases = new BindingList(); } + #region [Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)] public string IKVersichertenKarte { @@ -383,6 +388,22 @@ AntwortEntschluesseltAm } } + [Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)] + public bool Bezahlt + { + get { return this._Bezahlt; } + + set + { + if (this.AreDifferent(this._Bezahlt, value)) + { + this._Bezahlt = value; + this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Bezahlt, value), nameof(Bezahlt)); + this.FirePropertyChanged(nameof(Bezahlt)); + } + } + } + public bool IsChecked { get { return _IsChecked; } @@ -403,6 +424,36 @@ AntwortEntschluesseltAm set { _InvoiceBases = value; } } + [Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)] + public OrganisationDC Organisation + { + get { return this._Organisation; } + + set + { + if (this.AreDifferent(this._Organisation, value)) + { + this._Organisation = value; + this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Organisation, value), nameof(Organisation)); + this.FirePropertyChanged(nameof(Organisation)); + } + } + } + #endregion + + public string RecipientString + { + get + { + if(_InvoiceBases2 != null && _InvoiceBases2.Any()) + { + return _InvoiceBases2.First().RecipientString; + } + + return string.Empty; + } + } + protected override void InitByDataContract(GkvAbrechnungDC pDataContract) { _IKDatenannahmestelle = pDataContract.IKDatenannahmestelle; @@ -426,8 +477,16 @@ AntwortEntschluesseltAm _Notice = pDataContract.Notice; _Betrag = pDataContract.Betrag; - } + _Bezahlt = pDataContract.Bezahlt; + if(pDataContract.InvoiceBases != null) + { + _InvoiceBases2 = pDataContract.InvoiceBases.Select(x => new InvoiceBaseVM(x)).ToList(); + _InvoiceBases = new BindingList(_InvoiceBases2); + } + + _Organisation = pDataContract.Organisation; + } protected override GkvAbrechnungDC MapToDataContract(GkvAbrechnungDC pDataContract, bool doCommit) { pDataContract.IKDatenannahmestelle = _IKDatenannahmestelle; @@ -449,9 +508,22 @@ AntwortEntschluesseltAm pDataContract.Notice = _Notice; pDataContract.Betrag = _Betrag; + pDataContract.Bezahlt = _Bezahlt; pDataContract.Datenaustauschreferenz = _Datenaustauschreferenz; + pDataContract.InvoiceBases = _InvoiceBases2.Select(vm => vm.CommitToDataContract()).ToList(); + pDataContract.Organisation = _Organisation; return pDataContract; } + + internal void Update(GkvAbrechnungDC dc) + { + _GkvAbrechnungVersion = dc.GkvAbrechnungVersion; + + if(Notice != dc.Notice || Bezahlt != dc.Bezahlt) + { + + } + } } } \ No newline at end of file diff --git a/Data/Entities/GkvAbrechnung.cs b/Data/Entities/GkvAbrechnung.cs index f13da8e3e..abf98dfd3 100644 --- a/Data/Entities/GkvAbrechnung.cs +++ b/Data/Entities/GkvAbrechnung.cs @@ -46,6 +46,8 @@ namespace BeWo.Data.Entities public virtual decimal Betrag { get; set; } + public virtual bool Bezahlt { get; set; } + public virtual IList InvoiceBases { get; set; } // Kundennummer nur bei App8 diff --git a/Data/Mappings/GkvAbrechnung.hbm.xml b/Data/Mappings/GkvAbrechnung.hbm.xml index c5d7c6d0a..5ef3b69c2 100644 --- a/Data/Mappings/GkvAbrechnung.hbm.xml +++ b/Data/Mappings/GkvAbrechnung.hbm.xml @@ -30,6 +30,7 @@ + diff --git a/Service/DCEntityMapper/GkvAbrechnungDC_GkvAbrechnung.cs b/Service/DCEntityMapper/GkvAbrechnungDC_GkvAbrechnung.cs index 7fd72c769..9ddc0e307 100644 --- a/Service/DCEntityMapper/GkvAbrechnungDC_GkvAbrechnung.cs +++ b/Service/DCEntityMapper/GkvAbrechnungDC_GkvAbrechnung.cs @@ -4,6 +4,7 @@ using BeWo.Data.Entities; using BS.Shared.DataContracts; using NHibernate.Linq; using System.Collections.Generic; +using System.Linq; namespace BeWo.Service.DCEntityMapper { @@ -11,6 +12,8 @@ namespace BeWo.Service.DCEntityMapper { public override GkvAbrechnungDC MergeWithDC(GkvAbrechnung pEntity, GkvAbrechnungDC pDataContract) { + var orga = pEntity.InvoiceBases.First().CostBearer2SupportConcept.CostBearer.Organisation; + pDataContract.GkvAbrechnungOid = pEntity.Oid; pDataContract.GkvAbrechnungVersion = pEntity.Version; pDataContract.Notice = pEntity.Notice; @@ -35,9 +38,12 @@ namespace BeWo.Service.DCEntityMapper pDataContract.ErstelltAm = pEntity.ErstelltAm; pDataContract.Betrag = pEntity.Betrag; + pDataContract.Bezahlt = pEntity.Bezahlt; pDataContract.InvoiceBases = MapperFactory.InvoiceBaseDC_InvoiceBase.MapToNewDCs(pEntity.InvoiceBases); + pDataContract.Organisation = MapperFactory.OrganisationDC_OrganisationMapper.MapToNewDC(orga); + return pDataContract; } @@ -69,6 +75,7 @@ namespace BeWo.Service.DCEntityMapper pEntity.AntwortEntschluesseltAm = pDataContract.AntwortEntschluesseltAm; pEntity.Betrag = pDataContract.Betrag; + pEntity.Bezahlt = pDataContract.Bezahlt; if (pEntity.InvoiceBases is null) pEntity.InvoiceBases = new List(); @@ -78,7 +85,7 @@ namespace BeWo.Service.DCEntityMapper { var original = DAOFactory.GenericDAO.LoadByID(i.InvoiceBaseOid.Value); - MapperFactory.InvoiceBaseDC_InvoiceBase.MergeWithEntity(i, original); + // MapperFactory.InvoiceBaseDC_InvoiceBase.MergeWithEntity(i, original); pEntity.InvoiceBases.Add(original); } diff --git a/Service/ServiceContracts/IAccountingService.cs b/Service/ServiceContracts/IAccountingService.cs index b0fac330e..d717640b7 100644 --- a/Service/ServiceContracts/IAccountingService.cs +++ b/Service/ServiceContracts/IAccountingService.cs @@ -155,5 +155,9 @@ namespace BeWo.Service.ServiceContracts [FaultContract(typeof(BeWoFault))] [OperationContract] GkvAbrechnungResponseDC CreateNewGkvAbrechnung(GkvAbrechnungRequestDC request); + + [FaultContract(typeof(BeWoFault))] + [OperationContract] + GkvAbrechnungDC UpdateGkvAbrechnung(GkvAbrechnungDC abrechnung); } } \ No newline at end of file diff --git a/Service/ServiceImplementations/AccountingServiceImp.cs b/Service/ServiceImplementations/AccountingServiceImp.cs index 11414d8a4..b5ee3e86c 100644 --- a/Service/ServiceImplementations/AccountingServiceImp.cs +++ b/Service/ServiceImplementations/AccountingServiceImp.cs @@ -816,6 +816,26 @@ namespace BeWo.Service.ServiceImplementations return response; } + public GkvAbrechnungDC UpdateGkvAbrechnung(GkvAbrechnungDC abrechnung) + { + try + { + var entity = DAOFactory.GenericDAO.GetByID(abrechnung.GkvAbrechnungOid.Value); + + entity.Notice = abrechnung.Notice; + entity.Bezahlt = abrechnung.Bezahlt; + + DAOFactory.GenericDAO.Update(entity); + + return MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity); + } + catch (Exception e) + { + throw Utils.CreateBeWoFaultException(e); + } + } + + public List InsertNewGkvAbrechnungen(List dcList) { try diff --git a/Shared/DataContracts/GkvAbrechnungDC.cs b/Shared/DataContracts/GkvAbrechnungDC.cs index b73cae65b..cfcb6adb9 100644 --- a/Shared/DataContracts/GkvAbrechnungDC.cs +++ b/Shared/DataContracts/GkvAbrechnungDC.cs @@ -65,7 +65,13 @@ namespace BS.Shared.DataContracts [DataMember] public decimal Betrag { get; set; } + [DataMember] + public bool Bezahlt { get; set; } + [DataMember] public IList InvoiceBases { get; set; } + + [DataMember] + public OrganisationDC Organisation { get; set; } } } \ No newline at end of file