diff --git a/Dakota/Models/Infos/InfoParameterInvoiceItem.cs b/Dakota/Models/Infos/InfoParameterInvoiceItem.cs index a21129002..9b96aa75d 100644 --- a/Dakota/Models/Infos/InfoParameterInvoiceItem.cs +++ b/Dakota/Models/Infos/InfoParameterInvoiceItem.cs @@ -1,5 +1,6 @@ using BeWo.Data.Models; using BS.Shared.DataContracts; +using BS.Shared.Exceptions; using Dakota.Models.Schlüssels; using System; using System.Collections.Generic; @@ -33,7 +34,7 @@ namespace Dakota.Models.Infos AddressInformation = addressInformation; // Todo: Valid prüfen - Abrechnungsposition = invoiceItem.UnitDescription?.Substring(6) ?? "TODO"; + Abrechnungsposition = invoiceItem.UnitDescription.Substring(6); } } } diff --git a/Data/Entities/InvoiceBase.cs b/Data/Entities/InvoiceBase.cs index 18cbf2f7f..cd108fc75 100644 --- a/Data/Entities/InvoiceBase.cs +++ b/Data/Entities/InvoiceBase.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; - +using System.Linq; using BS.Shared; using BS.Shared.Interface; @@ -830,5 +830,6 @@ namespace BeWo.Data.Entities public virtual string SenderStreet => SenderAddress?.Street; public virtual string SenderTown => SenderAddress?.Town; public virtual string SenderPostCode => SenderAddress?.PostalCode; - } + public virtual IList IInvoiceItems => InvoiceItems.Select(x => x as IInvoiceItem).ToList(); + } } \ No newline at end of file diff --git a/Data/Entities/InvoiceItem.cs b/Data/Entities/InvoiceItem.cs index eee763828..56bce4e01 100644 --- a/Data/Entities/InvoiceItem.cs +++ b/Data/Entities/InvoiceItem.cs @@ -2,11 +2,12 @@ using System.Collections.Generic; using System.Diagnostics; using BS.Shared; +using BS.Shared.Interface; namespace BeWo.Data.Entities { [DebuggerDisplay("{ItemDescription}: {AmountPerUnit} x {UnitCount} = {AmountTotal}")] - public class InvoiceItem : BeWoEntityBase + public class InvoiceItem : BeWoEntityBase, IInvoiceItem { public static string PropertyName_AmountPerUnit = "AmountPerUnit"; diff --git a/Shared/Core/ValidatorExtended.cs b/Shared/Core/ValidatorExtended.cs index 25f3f0ccd..7114fa30f 100644 --- a/Shared/Core/ValidatorExtended.cs +++ b/Shared/Core/ValidatorExtended.cs @@ -21,6 +21,8 @@ namespace BS.Shared.Core error = "Keine Rechnungen gefunden"; else if (!AreAllAddressSame(invoiceBases)) error = "Unterschiedliche Rechnungspositionen"; + else if (GetInvalidUnitDescription(invoiceBases) is IInvoiceItem invalid) + error = $"Ungültige Rechnungsposition: {invalid.ItemDescription}:{invalid.UnitDescription}"; if(error is string) throw new GkvException(error, "Validierung"); @@ -42,5 +44,21 @@ namespace BS.Shared.Core public static bool AreAllAddressSame(IEnumerable invoiceBases) => invoiceBases.Select(x => x.SenderAddressToString()).AreAllTheSame(); + + public static IInvoiceItem GetInvalidUnitDescription(IEnumerable invoiceBases){ + foreach(var invoiceBase in invoiceBases) + { + foreach (var invoiceitem in invoiceBase.IInvoiceItems) + { + // GPos. 123456 + // 0123456 + var desc = invoiceitem.UnitDescription; + if (desc.Length < 8) + return invoiceitem; + } + } + + return null; + } } } diff --git a/Shared/DataContracts/InvoiceItemDC.cs b/Shared/DataContracts/InvoiceItemDC.cs index 5b480256f..254c2123e 100644 --- a/Shared/DataContracts/InvoiceItemDC.cs +++ b/Shared/DataContracts/InvoiceItemDC.cs @@ -1,3 +1,4 @@ +using BS.Shared.Interface; using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/Shared/Interface/IInvoiceBase.cs b/Shared/Interface/IInvoiceBase.cs index 01d69f634..251f24e39 100644 --- a/Shared/Interface/IInvoiceBase.cs +++ b/Shared/Interface/IInvoiceBase.cs @@ -11,5 +11,6 @@ namespace BS.Shared.Interface string SenderStreet { get; } string SenderTown { get; } string SenderPostCode { get; } + IList IInvoiceItems { get; } } } diff --git a/Shared/Interface/IInvoiceItem.cs b/Shared/Interface/IInvoiceItem.cs new file mode 100644 index 000000000..f9e150a90 --- /dev/null +++ b/Shared/Interface/IInvoiceItem.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.Interface +{ + public interface IInvoiceItem + { + string UnitDescription { get; } + string ItemDescription { get; } + } +} diff --git a/Shared/Shared.csproj b/Shared/Shared.csproj index b031cc5e9..d0fefee7c 100644 --- a/Shared/Shared.csproj +++ b/Shared/Shared.csproj @@ -385,6 +385,7 @@ +