From ffd3a3a9d48811beced47622245fe4c73c98a587 Mon Sep 17 00:00:00 2001 From: Rene Evertz Date: Fri, 6 Dec 2024 12:36:58 +0100 Subject: [PATCH] Clientseitig wird nun auch verschiedene Sender Addressen in Gkv Erstellung ausgeschlossen --- .../Accounting/GkvAbrechnungOverview.xaml.cs | 15 +- BeWo/ViewModel/InvoiceBaseVM.cs | 49 +-- Data/Entities/Address.cs | 1 + Shared/Core/ValidatorExtended.cs | 16 + Shared/DataContracts/InvoiceBaseDC.cs | 346 ++++++------------ Shared/Extensions/StringExtensions.cs | 21 +- Shared/Interface/IInvoiceBase.cs | 15 + Shared/Shared.csproj | 2 + 8 files changed, 188 insertions(+), 277 deletions(-) create mode 100644 Shared/Core/ValidatorExtended.cs create mode 100644 Shared/Interface/IInvoiceBase.cs diff --git a/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml.cs b/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml.cs index e5ab3bbf5..364775a15 100644 --- a/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml.cs +++ b/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml.cs @@ -122,14 +122,22 @@ namespace BeWo.View.Detail.Accounting { var checked_invoice_bases = _NewGkvAbrechnungPopUpView.ViewModel.InvoiceBases.Where(x => x.IsChecked); - // MessageBox.Show("Sie haben keine Rechnung hinzugefügt.", "GKV-Abrechnung erstellen", MessageBoxButton.OK, MessageBoxImage.Warning); if (!checked_invoice_bases.Any()) return; + var same = ValidatorExtended.AreAllAddressSame(checked_invoice_bases); + if (!same) + { + var txt = "Sie haben Rechnungen mit verschiedenen Rechnungsadressen ausgewählt. Die Rechnungs"; + var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OK); + return; + } + var already_used_invoices = checked_invoice_bases.Where(x => x.IsAlreadyInActiveGkvAbrechnung.Value); if (already_used_invoices.Any()) { - var txt = "Sie haben eine oder mehrere Rechnungen ausgewählt, welche bereits in einer anderen aktiven GKV-Abrechnung enthalten sind. Möchten Sie fortfahren?"; + var txt = "Sie haben eine oder mehrere Rechnungen ausgewählt, welche bereits in einer " + + "anderen aktiven GKV-Abrechnung enthalten sind. Möchten Sie fortfahren?"; var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OKCancel); if (result != MessageBoxResult.OK) @@ -139,7 +147,8 @@ namespace BeWo.View.Detail.Accounting var bereits_bezahlt = checked_invoice_bases.Where(x => x.IsPaid); if (bereits_bezahlt.Any()) { - var txt = "Sie haben eine oder mehrere Rechnungen ausgewählt, welche bereits als 'Bezahlt' markiert sind. Möchten Sie fortfahren?"; + var txt = "Sie haben eine oder mehrere Rechnungen ausgewählt, welche bereits als 'Bezahlt' " + + "markiert sind. Möchten Sie fortfahren?"; var result = MessageBox.Show(txt, "Hinweis", MessageBoxButton.OKCancel); if (result != MessageBoxResult.OK) diff --git a/BeWo/ViewModel/InvoiceBaseVM.cs b/BeWo/ViewModel/InvoiceBaseVM.cs index ae32fe6a5..dda1041d1 100644 --- a/BeWo/ViewModel/InvoiceBaseVM.cs +++ b/BeWo/ViewModel/InvoiceBaseVM.cs @@ -9,11 +9,12 @@ using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts; using BS.Shared.Extensions; +using BS.Shared.Interface; using BS.Shared.Translation; namespace BeWo.ViewModel { - public class InvoiceBaseVM : AbstractDCMapperVM + public class InvoiceBaseVM : AbstractDCMapperVM, IInvoiceBase { public static string PropertyName_AccountingPeriodEnd = "AccountingPeriodEnd"; @@ -116,85 +117,45 @@ namespace BeWo.ViewModel }; private DateTime? _AccountingPeriodEnd; - private DateTime? _AccountingPeriodStart; - private string _CreatorFirstName = string.Empty; - private string _CreatorLastName = string.Empty; - private string _CustomerReferenceNumber = string.Empty; - private DateTime? _DueDate; - private int? _DunningLetterCount; - private DateTime? _InvoiceDate; - private InvoiceItemListVM _InvoiceItems; - private string _InvoiceNumber = string.Empty; - private string _InvoiceTitle = string.Empty; - internal bool _IsReviewed; - internal bool _IsSent; - internal bool _IsExported; - internal bool _IsPaid; - private string _PartialPayment = string.Empty; - internal bool _NeuErstellen; - internal bool _DiffErstellen; - internal bool _IsChecked; - private string _Notice = string.Empty; - private long? _RecipientCostBearerOid; - private long? _RecipientCustomerOid; - private string _RecipientDivision = string.Empty; - private string _RecipientOrganisation = string.Empty; - private long? _RecipientOrganisationOid; - private String _RecipientPostBox; - private string _RecipientPersonFirstName = string.Empty; - private string _RecipientPersonLastName = string.Empty; - private long? _RecipientPersonOid; - private string _RecipientPostCode = string.Empty; - private string _RecipientAddressLine1 = string.Empty; - private string _RecipientStreet = string.Empty; - private string _RecipientTown = string.Empty; - private string _SenderDivision = string.Empty; - private string _SenderFax = string.Empty; - private string _SenderFirstName = string.Empty; - private string _SenderLastName = string.Empty; - private string _SenderOrganisation = string.Empty; - private string _SenderPhone = string.Empty; - private long? _SupportConceptOid; - private decimal? _TotalAmount; public InvoiceBaseVM(InvoiceBaseDC pDC) : this(pDC, false) { } @@ -922,6 +883,8 @@ namespace BeWo.ViewModel } } + public string SenderAddressLine1 { get; set; } + public decimal? TotalAmount { get { return _TotalAmount; } @@ -954,6 +917,10 @@ namespace BeWo.ViewModel get; set; } + public string SenderStreet => DataContract.SenderStreet; + public string SenderTown => DataContract.SenderTown; + public string SenderPostCode => DataContract.SenderPostCode; + protected override void InitByDataContract(InvoiceBaseDC pDataContract) { _SupportConceptOid = pDataContract.SupportConceptOid; diff --git a/Data/Entities/Address.cs b/Data/Entities/Address.cs index ce709453e..e73c7fd7d 100644 --- a/Data/Entities/Address.cs +++ b/Data/Entities/Address.cs @@ -1,4 +1,5 @@ using BS.Shared; +using BS.Shared.Interface; using System.Diagnostics; namespace BeWo.Data.Entities diff --git a/Shared/Core/ValidatorExtended.cs b/Shared/Core/ValidatorExtended.cs new file mode 100644 index 000000000..57f53ace4 --- /dev/null +++ b/Shared/Core/ValidatorExtended.cs @@ -0,0 +1,16 @@ +using BS.Shared.Extensions; +using BS.Shared.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.Core +{ + public static class ValidatorExtended + { + public static bool AreAllAddressSame(IEnumerable invoiceBases) + => invoiceBases.Select(x => x.SenderAddressToString()).AreAllTheSame(); + } +} diff --git a/Shared/DataContracts/InvoiceBaseDC.cs b/Shared/DataContracts/InvoiceBaseDC.cs index c3182508d..5e3ca475e 100644 --- a/Shared/DataContracts/InvoiceBaseDC.cs +++ b/Shared/DataContracts/InvoiceBaseDC.cs @@ -3,251 +3,133 @@ using System.Collections.Generic; using System.Runtime.Serialization; using BS.Shared.Core; +using BS.Shared.Interface; namespace BS.Shared.DataContracts { - [DataContract] - public partial class InvoiceBaseDC : IDataContract - { - private List _RecipientContactInformations; + [DataContract] + public partial class InvoiceBaseDC : IDataContract, IInvoiceBase + { + private List _RecipientContactInformations; - private List _SenderContactInformations; + private List _SenderContactInformations; - [DataMember] - public DateTime? AccountingPeriodEnd { get; set; } + [DataMember] public DateTime? AccountingPeriodEnd { get; set; } + [DataMember] public DateTime? AccountingPeriodStart { get; set; } + [DataMember] public string CreatorFirstName { get; set; } + [DataMember] public string CreatorLastName { get; set; } + [DataMember] public bool? IsAlreadyInActiveGkvAbrechnung { get; set; } + [DataMember] public bool IsGkvValid { get; set; } + [DataMember] public string IsGkvValidError { get; set; } + [DataMember] public string CustomerFirstName { get; set; } + [DataMember] public string CustomerLastName { get; set; } + [DataMember] public string CustomerReferenceNumber { get; set; } + [DataMember] public DateTime? DueDate { get; set; } + [DataMember] public int? DunningLetterCount { get; set; } + [DataMember] public long? InvoiceBaseOid { get; set; } + [DataMember] public long? InvoiceBaseVersion { get; set; } + [DataMember] public DateTime? InvoiceDate { get; set; } + [DataMember] public List InvoiceItems { get; set; } + [DataMember] public string InvoiceNumber { get; set; } + [DataMember] public string InvoiceTitle { get; set; } + [DataMember] public bool IsReviewed { get; set; } + [DataMember] public bool IsSent { get; set; } + [DataMember] public bool IsExported { get; set; } + [DataMember] public bool IsPaid { get; set; } + [DataMember] public string PartialPayment { get; set; } + [DataMember] public bool NeuErstellen { get; set; } + [DataMember] public bool DiffErstellen { get; set; } + [DataMember] public string Notice { get; set; } + [DataMember] public string Details { get; set; } + [DataMember] public string Hinweise { get; set; } + [DataMember] public string InvoiceId { get; set; } + [DataMember] public string InvoiceTypeText { get; set; } + public string PeriodString + { + get + { + return this.AccountingPeriodStart.Value.ToShortDateString() + " - " + + this.AccountingPeriodEnd.Value.ToShortDateString(); + } + } - [DataMember] - public DateTime? AccountingPeriodStart { get; set; } - - [DataMember] - public string CreatorFirstName { get; set; } - - [DataMember] - public string CreatorLastName { get; set; } - - [DataMember] - public bool? IsAlreadyInActiveGkvAbrechnung { get; set; } - - [DataMember] - public bool IsGkvValid { get; set; } - - [DataMember] - public string IsGkvValidError { get; set; } - - [DataMember] - public string CustomerFirstName { get; set; } - - [DataMember] - public string CustomerLastName { get; set; } - - [DataMember] - public string CustomerReferenceNumber { get; set; } - - [DataMember] - public DateTime? DueDate { get; set; } - - [DataMember] - public int? DunningLetterCount { get; set; } - - [DataMember] - public long? InvoiceBaseOid { get; set; } - - [DataMember] - public long? InvoiceBaseVersion { get; set; } - - [DataMember] - public DateTime? InvoiceDate { get; set; } - - [DataMember] - public List InvoiceItems { get; set; } - - [DataMember] - public string InvoiceNumber { get; set; } - - [DataMember] - public string InvoiceTitle { get; set; } - - [DataMember] - public bool IsReviewed { get; set; } - - [DataMember] - public bool IsSent { get; set; } - - [DataMember] - public bool IsExported { get; set; } - - [DataMember] - public bool IsPaid { get; set; } - - [DataMember] - public string PartialPayment { get; set; } - - [DataMember] - public bool NeuErstellen { get; set; } - - [DataMember] - public bool DiffErstellen { get; set; } - - [DataMember] - public string Notice { get; set; } - - [DataMember] - public string Details { get; set; } - - [DataMember] - public string Hinweise { get; set; } - - [DataMember] - public string InvoiceId { get; set; } + [DataMember] public long? RecipientAddressOid { get; set; } + [DataMember] public long? RecipientAddressVersion { get; set; } + [DataMember] public long? RecipientCostBearerOid { get; set; } + [DataMember] public long? RecipientCustomerOid { get; set; } + [DataMember] public string RecipientDivision { get; set; } + [DataMember] public string RecipientOrganisation { get; set; } + [DataMember] public long? RecipientOrganisationOid { get; set; } + [DataMember] public string RecipientPersonFirstName { get; set; } + [DataMember] public string RecipientPersonLastName { get; set; } + [DataMember] public string RecipientSalutationAddressField { get; set; } + [DataMember] public long? RecipientPersonOid { get; set; } + [DataMember] public string RecipientPostCode { get; set; } + [DataMember] public string RecipientAddressLine1 { get; set; } + [DataMember] public string RecipientStreet { get; set; } + [DataMember] public string RecipientTown { get; set; } + [DataMember] public long? SenderAddressOid { get; set; } + [DataMember] public long? SenderAddressVersion { get; set; } + [DataMember] public string SenderDivision { get; set; } + [DataMember] public string SenderFirstName { get; set; } + [DataMember] public string SenderLastName { get; set; } + [DataMember] public string SenderOrganisation { get; set; } + [DataMember] public string SenderPostCode { get; set; } + [DataMember] public string SenderStreet { get; set; } + [DataMember] public string SenderTown { get; set; } + [DataMember] public SupportConceptCostBearerRelDC SupportConceptCostBearerRelDc { get; set; } + [DataMember] public long? SupportConceptOid { get; set; } + [DataMember] public decimal? TotalAmount { get; set; } + [DataMember] public InvoiceType Type { get; set; } + [DataMember] public long? StornoInvoiceBaseOid { get; set; } + [DataMember] public String BackgroundColor { get; set; } [DataMember] - public string InvoiceTypeText { get; set; } + public List RecipientContactInformations + { + get + { + if (this._RecipientContactInformations == null) + { + this._RecipientContactInformations = new List(); + } - public string PeriodString - { - get - { - return this.AccountingPeriodStart.Value.ToShortDateString() + " - " - + this.AccountingPeriodEnd.Value.ToShortDateString(); - } - } + return this._RecipientContactInformations; + } - [DataMember] - public long? RecipientAddressOid { get; set; } + set + { + this._RecipientContactInformations = value; + } + } - [DataMember] - public long? RecipientAddressVersion { get; set; } + [DataMember] + public List SenderContactInformations + { + get + { + if (this._SenderContactInformations == null) + { + this._SenderContactInformations = new List(); + } - [DataMember] - public List RecipientContactInformations - { - get - { - if (this._RecipientContactInformations == null) - { - this._RecipientContactInformations = new List(); - } + return this._SenderContactInformations; + } - return this._RecipientContactInformations; - } + set + { + this._SenderContactInformations = value; + } + } - set - { - this._RecipientContactInformations = value; - } - } + public bool ContainsRecipientAddressData() + { + return !Utils.AreAllNullOrEmpty(this.RecipientStreet, this.RecipientPostCode, this.RecipientTown); + } - [DataMember] - public long? RecipientCostBearerOid { get; set; } - - [DataMember] - public long? RecipientCustomerOid { get; set; } - - [DataMember] - public string RecipientDivision { get; set; } - - [DataMember] - public string RecipientOrganisation { get; set; } - - [DataMember] - public long? RecipientOrganisationOid { get; set; } - - [DataMember] - public string RecipientPersonFirstName { get; set; } - - [DataMember] - public string RecipientPersonLastName { get; set; } - - [DataMember] - public string RecipientSalutationAddressField { get; set; } - - [DataMember] - public long? RecipientPersonOid { get; set; } - - [DataMember] - public string RecipientPostCode { get; set; } - - [DataMember] - public string RecipientAddressLine1 { get; set; } - - [DataMember] - public string RecipientStreet { get; set; } - - [DataMember] - public string RecipientTown { get; set; } - - [DataMember] - public long? SenderAddressOid { get; set; } - - [DataMember] - public long? SenderAddressVersion { get; set; } - - [DataMember] - public List SenderContactInformations - { - get - { - if (this._SenderContactInformations == null) - { - this._SenderContactInformations = new List(); - } - - return this._SenderContactInformations; - } - - set - { - this._SenderContactInformations = value; - } - } - - [DataMember] - public string SenderDivision { get; set; } - - [DataMember] - public string SenderFirstName { get; set; } - - [DataMember] - public string SenderLastName { get; set; } - - [DataMember] - public string SenderOrganisation { get; set; } - - [DataMember] - public string SenderPostCode { get; set; } - - [DataMember] - public string SenderStreet { get; set; } - - [DataMember] - public string SenderTown { get; set; } - - [DataMember] - public SupportConceptCostBearerRelDC SupportConceptCostBearerRelDc { get; set; } - - [DataMember] - public long? SupportConceptOid { get; set; } - - [DataMember] - public decimal? TotalAmount { get; set; } - - [DataMember] - public InvoiceType Type { get; set; } - - [DataMember] - public long? StornoInvoiceBaseOid { get; set; } - - [DataMember] - public String BackgroundColor { get; set; } - - public bool ContainsRecipientAddressData() - { - return !Utils.AreAllNullOrEmpty(this.RecipientStreet, this.RecipientPostCode, this.RecipientTown); - } - - public bool ContainsSenderAddressData() - { - return !Utils.AreAllNullOrEmpty(this.SenderStreet, this.SenderPostCode, this.SenderTown); - } - } + public bool ContainsSenderAddressData() + { + return !Utils.AreAllNullOrEmpty(this.SenderStreet, this.SenderPostCode, this.SenderTown); + } + } } \ No newline at end of file diff --git a/Shared/Extensions/StringExtensions.cs b/Shared/Extensions/StringExtensions.cs index 1634cc959..802851889 100644 --- a/Shared/Extensions/StringExtensions.cs +++ b/Shared/Extensions/StringExtensions.cs @@ -1,4 +1,5 @@ -using System; +using BS.Shared.Interface; +using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; @@ -112,5 +113,23 @@ namespace BS.Shared.Extensions return rtn; } + + public static bool AreAllTheSame(this IEnumerable list) + { + if (list is null || !list.Any()) + return true; + + string init = list.First(); + foreach (var str in list) + { + if (str != init) + return false; + } + + return true; + } + + public static string SenderAddressToString(this IInvoiceBase invoiceBase) + => $"{invoiceBase.SenderStreet}, {invoiceBase.SenderTown}, {invoiceBase.SenderPostCode}"; } } \ No newline at end of file diff --git a/Shared/Interface/IInvoiceBase.cs b/Shared/Interface/IInvoiceBase.cs new file mode 100644 index 000000000..01d69f634 --- /dev/null +++ b/Shared/Interface/IInvoiceBase.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.Interface +{ + public interface IInvoiceBase + { + string SenderStreet { get; } + string SenderTown { get; } + string SenderPostCode { get; } + } +} diff --git a/Shared/Shared.csproj b/Shared/Shared.csproj index 1d57c9864..8285ee89e 100644 --- a/Shared/Shared.csproj +++ b/Shared/Shared.csproj @@ -165,6 +165,7 @@ + @@ -364,6 +365,7 @@ +