78 lines
2.4 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|