Files
BeWoPlaner/Shared/Extensions/GkvAbrechnungExtensions.cs

78 lines
2.4 KiB
C#

using BS.Shared.DataContracts.GkvAbrechnung;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BS.Shared.Extensions
{
public static class GkvAbrechnungExtensions
{
public static GkvState GetState(this GkvAbrechnungDC gkvAbrechnungDC) => GetState(
gkvAbrechnungDC,
() => gkvAbrechnungDC.Bezahlt,
() => gkvAbrechnungDC.TransferProtokolle,
(x) => x.Fehlerdatum,
(x) => x.Fehlerlevel,
(x) => x.ErstelltAm.Value);
public static GkvState GetState<T2>(
object gkvAbrechnung,
Func<bool> bezahlt,
Func<IList<T2>> protokoll,
Func<T2, DateTime?> fehlerdatum,
Func<T2, GkvTransferFehlerlevel> fehlerlevel,
Func<T2, DateTime> created)
{
if (gkvAbrechnung is null)
throw new ArgumentNullException(nameof(gkvAbrechnung));
if (bezahlt())
return GkvState.Paid;
var protokolle = protokoll();
if (protokolle is null || !protokolle.Any())
return GkvState.NoSend;
var last_transfer = protokolle.Last();
if (fehlerdatum(last_transfer).HasValue)
{
if (fehlerlevel(last_transfer) == GkvTransferFehlerlevel.Fatal)
return GkvState.ErrorFatal;
else
return GkvState.Error;
}
// Kein Fehler
if (DateTime.Now - created(last_transfer) > TimeSpan.FromDays(28))
{
return GkvState.OldAndNoFeedback;
}
return GkvState.Waiting;
}
public static bool IsWaiting(this GkvAbrechnungDC gkvAbrechnungDC)
{
var state = gkvAbrechnungDC.GetState();
if (state == GkvState.Waiting || state == GkvState.OldAndNoFeedback)
return true;
return false;
}
public static bool IsSend(this GkvAbrechnungDC gkvAbrechnung)
{
return gkvAbrechnung.TransferProtokolle is object && gkvAbrechnung.TransferProtokolle.Any();
}
public static bool IsUpToDate(this GkvAbrechnungDC gkvAbrechnungDC, GkvAbrechnungDC compareTo)
{
return gkvAbrechnungDC.GetState() == compareTo.GetState();
}
}
}