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; } } }