using BeWo.Data.Entities;
using BS.Shared.DataContracts.GkvAbrechnung;
using BS.Shared.DataContracts;
using NHibernate.Criterion;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BS.Shared.Interface;
using BeWo.Data.Entities.Light;
using BS.Shared;
namespace BeWo.Data.Access
{
///
///
/// Ggf Gkv in eigene DAO auslagern
///
///
public class FinanceDAO : AbstractBaseDAO
{
public bool HaveIKDatenannahmestelleChanged(IGkvAbrechnung gkvAbrechnung, string ikdatenannahmestelle)
{
if (gkvAbrechnung.TransferProtokolle is IEnumerable list && list.Any())
{
var last_prot_w_daten = list.Select(x => x.IKDatenannahmestelle).Where((x) => !string.IsNullOrEmpty(x)).LastOrDefault();
if (!string.IsNullOrEmpty(last_prot_w_daten) && last_prot_w_daten != ikdatenannahmestelle)
{
return true;
}
}
return false;
}
public IEnumerable GetGkvAbrechnungen(DateTime? startDate, DateTime? endDate, bool useInvoiceDate = true)
{
if (endDate.HasValue)
endDate = endDate.Value.Date.AddDays(1).AddMilliseconds(-1);
var lCriteria = CreateCriteriaIsActive();
if (useInvoiceDate)
{
if (startDate.HasValue)
lCriteria.Add(Restrictions.Ge(nameof(GkvAbrechnungLight.ErstelltAm), startDate));
if (endDate.HasValue)
lCriteria.Add(Restrictions.Le(nameof(GkvAbrechnungLight.ErstelltAm), endDate));
}
else
{
if (startDate.HasValue)
lCriteria.Add(Restrictions.Ge(nameof(GkvAbrechnungLight.AbrechnungsZeitraumEnde), startDate));
if (endDate.HasValue)
lCriteria.Add(Restrictions.Le(nameof(GkvAbrechnungLight.AbrechnungsZeitraumStart), endDate));
}
return lCriteria.List();
}
public IEnumerable GetGkvTransferProtokollByDateRange(DateTime? start, DateTime? end)
{
var lCriteria = CreateCriteria();
if (start.HasValue)
lCriteria.Add(Restrictions.Ge(nameof(GkvTransferProtokoll.ErstelltAm), start));
if (end.HasValue)
lCriteria.Add(Restrictions.Le(nameof(GkvTransferProtokoll.ErstelltAm), end));
return lCriteria.List();
}
public long GetGkvParentByProtokollOid(long oid)
{
return oid;
}
public string GetGkvRawData(long oid, GkvRawDataType gkvRawData)
{
var criteria = CreateCriteria()
.Add(Restrictions.Where(x => x.Oid == oid));
if (gkvRawData == GkvRawDataType.Auftragsdatei)
{
criteria = criteria.SetProjection(Projections.Property(nameof(GkvTransferProtokoll.Auftragsdatei)));
}
else if (gkvRawData == GkvRawDataType.Nutzdatendatei)
{
criteria = criteria.SetProjection(Projections.Property(nameof(GkvTransferProtokoll.Nutzdatendatei)));
}
else
{
throw new ArgumentOutOfRangeException(nameof(gkvRawData), $"GkvRawDataType \'{gkvRawData}\' unbekannt.");
}
var t = criteria.List().SingleOrDefault();
return t;
}
}
}