From 65ce5e237cccef30714a1123bac32ae280da3de6 Mon Sep 17 00:00:00 2001 From: Rene Evertz Date: Fri, 26 Apr 2024 12:39:39 +0200 Subject: [PATCH 01/19] =?UTF-8?q?Bemerkung=20=20+=20Bezahlt=20in=20der=20G?= =?UTF-8?q?UI=20Updatebar=20-=20Problem:=20Wenn=20man=20die=20InvoiceBase?= =?UTF-8?q?=20List=20=C3=BCberschreibt=20mit=20der=20alten,=20so=20wird=20?= =?UTF-8?q?versucht,=20Eintr=C3=A4ge=20doppelt=20zu=20speichern=20->=20dup?= =?UTF-8?q?licated=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 From d251957cb2dccd46388ff2256903a56970711824 Mon Sep 17 00:00:00 2001 From: Rene Evertz Date: Mon, 29 Apr 2024 12:37:18 +0200 Subject: [PATCH 02/19] GKV Abrechnung Detail --- BeWo/BeWo.csproj | 7 + BeWo/View/BeWoWindowBuilder.cs | 12 +- .../Controls/GkvAbrechnungDetailControl.xaml | 132 ++++++++++++++++++ .../GkvAbrechnungDetailControl.xaml.cs | 54 +++++++ BeWo/View/Controls/TextViewer.xaml.cs | 19 ++- .../Accounting/GkvAbrechnungOverview.xaml | 5 +- .../Accounting/GkvAbrechnungOverview.xaml.cs | 6 + .../Detail/Accounting/InvoiceOverview.xaml | 17 ++- BeWo/ViewModel/GkvAbrechnungVM.cs | 6 + .../ListViewModel/InvoiceBaseListVM.cs | 11 +- 10 files changed, 263 insertions(+), 6 deletions(-) create mode 100644 BeWo/View/Controls/GkvAbrechnungDetailControl.xaml create mode 100644 BeWo/View/Controls/GkvAbrechnungDetailControl.xaml.cs diff --git a/BeWo/BeWo.csproj b/BeWo/BeWo.csproj index 9643dfa4d..58ad0f0a5 100644 --- a/BeWo/BeWo.csproj +++ b/BeWo/BeWo.csproj @@ -306,6 +306,10 @@ MSBuild:Compile Designer + + Designer + MSBuild:Compile + MSBuild:Compile Designer @@ -1073,6 +1077,9 @@ + + GkvAbrechnungDetailControl.xaml + MonthPicker.xaml diff --git a/BeWo/View/BeWoWindowBuilder.cs b/BeWo/View/BeWoWindowBuilder.cs index da9a31c0a..c27725aaa 100644 --- a/BeWo/View/BeWoWindowBuilder.cs +++ b/BeWo/View/BeWoWindowBuilder.cs @@ -1,4 +1,5 @@ using BeWo.View.Controls; +using BeWo.ViewModel; using System; using System.Collections.Generic; using System.Linq; @@ -24,7 +25,6 @@ namespace BeWo.View return GetTextViewer(title, text, min_height, height, max_height, min_width, width, max_width); } - public static BeWoWindow GetTextViewer(string title, string text, double min_height, double height, double max_height, double min_width, double width, double max_width) { var control = new TextViewer(); @@ -36,6 +36,16 @@ namespace BeWo.View return beWoWindow; } + public static BeWoWindow GetGkvAbrechnungDetailWindow(GkvAbrechnungVM vM, double height = 600, double width = 550) + { + var detail = new GkvAbrechnungDetailControl(vM); + + var beWoWindow = GetGenericBeWoWindow("Gkv Abrechnung Details", 100, height, 1000, 100, width, 1600); + beWoWindow.GroupBoxContent = detail; + + return beWoWindow; + } + public static void ShowErrorMessageBox(string text) { MessageBox.Show(text, "Fehler", MessageBoxButton.OK, MessageBoxImage.Asterisk); diff --git a/BeWo/View/Controls/GkvAbrechnungDetailControl.xaml b/BeWo/View/Controls/GkvAbrechnungDetailControl.xaml new file mode 100644 index 000000000..05c61b710 --- /dev/null +++ b/BeWo/View/Controls/GkvAbrechnungDetailControl.xaml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BeWo/View/Controls/GkvAbrechnungDetailControl.xaml.cs b/BeWo/View/Controls/GkvAbrechnungDetailControl.xaml.cs new file mode 100644 index 000000000..0d8aec6c0 --- /dev/null +++ b/BeWo/View/Controls/GkvAbrechnungDetailControl.xaml.cs @@ -0,0 +1,54 @@ +using BeWo.Core; +using BeWo.ViewModel; +using BeWo.ViewModel.ListViewModel; +using DevExpress.Xpf.Grid; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace BeWo.View.Controls +{ + /// + /// Interaktionslogik für GkvAbrechnungDetailControl.xaml + /// + public partial class GkvAbrechnungDetailControl : UserControl + { + public GkvAbrechnungVM GkvAbrechnungVM { get; set; } + + public GkvAbrechnungDetailControl(GkvAbrechnungVM vm) + { + InitializeComponent(); + + GkvAbrechnungVM = vm; + DataContext = vm; + } + + private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e) + { + BeWoUtils.NavigateToReportUri(((Hyperlink)sender).NavigateUri.ToString(), "Druckvorschau"); + } + + private void gridView_Loaded(object sender, RoutedEventArgs e) + { + var tableView = sender as TableView; + if (tableView != null) + { + foreach (var item in tableView.VisibleColumns) + { + tableView.BestFitColumn(item); + } + } + } + } +} diff --git a/BeWo/View/Controls/TextViewer.xaml.cs b/BeWo/View/Controls/TextViewer.xaml.cs index a4883d1b6..fcfb73cbf 100644 --- a/BeWo/View/Controls/TextViewer.xaml.cs +++ b/BeWo/View/Controls/TextViewer.xaml.cs @@ -20,12 +20,29 @@ namespace BeWo.View.Controls /// public partial class TextViewer : UserControl { + public static readonly DependencyProperty TextViewerTextProperty = DependencyProperty.Register( + "Text", + typeof(string), + typeof(TextViewer), + new UIPropertyMetadata( + (s, e) => + { + var info = (string)e.NewValue; + var textViewer = (TextViewer)s; + + textViewer.txt.Text = info; + })); + public TextViewer() { InitializeComponent(); } - public string Text { get => txt.Text; set => txt.Text = value; } + public string Text + { + get => (string)GetValue(TextViewerTextProperty); + set => SetValue(TextViewerTextProperty, value); + } private void Button_Click(object sender, RoutedEventArgs e) { diff --git a/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml b/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml index 3848d0221..daf536411 100644 --- a/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml +++ b/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml @@ -56,8 +56,9 @@ - - - - - + + + + +