Files
BeWoPlaner/Shared/Core/ValidatorExtended.cs

65 lines
1.8 KiB
C#

using BS.Shared.DataContracts;
using BS.Shared.DataContracts.GkvAbrechnung;
using BS.Shared.Exceptions;
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 void ValidateGkvAbrechnung(IGkvAbrechnung gkvAbrechnung, IEnumerable<IInvoiceBase> invoiceBases, bool testInvoicesEmpty = true)
{
string error = null;
if (testInvoicesEmpty && !invoiceBases.Any())
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");
}
public static bool TryValidateGkvAbrechnung(IGkvAbrechnung gkvAbrechnung, IEnumerable<IInvoiceBase> invoiceBases, bool testInvoicesEmpty = true)
{
try
{
ValidateGkvAbrechnung(gkvAbrechnung, invoiceBases, testInvoicesEmpty);
}
catch (Exception)
{
return false;
}
return true;
}
public static bool AreAllAddressSame(IEnumerable<IInvoiceBase> invoiceBases)
=> invoiceBases.Select(x => x.SenderAddressToString()).AreAllTheSame();
public static IInvoiceItem GetInvalidUnitDescription(IEnumerable<IInvoiceBase> 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;
}
}
}