using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Caching; using Kreta.BusinessLogic.HelperClasses; using Kreta.Core; using Kreta.Core.Domain; using Kreta.Core.Domain.Interface; using Kreta.Core.KIR.Domain.Model; using Kreta.Core.KIR.Domain.Model.KirExport; using Kreta.Core.KIR.Factory.Interface; using Kreta.Core.KIR.Service.Interface; namespace Kreta.BusinessLogic.Helpers { public partial class KirImportHelper { private const int KirListCacheExpirationInSeconds = 120; private IKirService KirService { get; } public string KretaKod { get; set; } private Func ValidationFor4T(FelhasznaloKirSearchCo felhasznaloKirSearchCo) where T : class, IKirFelhasznalo => kirAlkalmazott => (string.IsNullOrWhiteSpace(felhasznaloKirSearchCo.Nev) || kirAlkalmazott.SzuletesiNev.IndexOf(felhasznaloKirSearchCo.Nev, StringComparison.OrdinalIgnoreCase) >= 0) && (!felhasznaloKirSearchCo.SzuletesiDatumIg.HasValue || kirAlkalmazott.SzuletesiDatum <= felhasznaloKirSearchCo.SzuletesiDatumIg) && (!felhasznaloKirSearchCo.SzuletesiDatumTol.HasValue || kirAlkalmazott.SzuletesiDatum >= felhasznaloKirSearchCo.SzuletesiDatumTol) && (string.IsNullOrWhiteSpace(felhasznaloKirSearchCo.OktatasiAzonosito) || kirAlkalmazott.OktatasiAzonosito.StartsWith(felhasznaloKirSearchCo.OktatasiAzonosito)) && (string.IsNullOrWhiteSpace(felhasznaloKirSearchCo.SzuletesiHely) || kirAlkalmazott.SzuletesiHely.StartsWith(felhasznaloKirSearchCo.SzuletesiHely)); private Func SearchFor4T(string szuletesiNev, string anyjaNeve, DateTime szuletesiDatum, string szuletesiHely) where T : class, IKirFelhasznalo => kirFelhasznalo => kirFelhasznalo.SzuletesiNev == szuletesiNev && kirFelhasznalo.AnyjaNeve == anyjaNeve && kirFelhasznalo.SzuletesiDatum == szuletesiDatum && kirFelhasznalo.SzuletesiHely == szuletesiHely; public KirImportHelper(IKirServiceFactory kirServiceFactory, AuthHeaderModel authHeaderModel) { if (kirServiceFactory == null) { throw new ArgumentNullException(nameof(kirServiceFactory)); } KirService = kirServiceFactory.GetKirService(authHeaderModel ?? throw new ArgumentNullException(nameof(authHeaderModel))); } public List GetKirTelephelyList() => KirService.GetTelephelyList(); public string KretaTelephelyRegisztracio(int telephelyKod) => KirService.KretaTelephelyRegisztracio( new KretaTelephelyRegisztracioRequestModel { TelephelyModel = new TelephelyModel { Kod = telephelyKod } }); public List GetKirFelhasznaloList(string cacheKey) where TOut : class, IKirFelhasznalo, new() { var kirFelhasznaloCacheList = (List)Cache.Get(cacheKey); if (kirFelhasznaloCacheList == null) { var kirRequestModel = new KirRequestModel { KretaKod = KretaKod }; var felhasznalo = new TOut(); if (felhasznalo is KirAlkalmazott) { kirFelhasznaloCacheList = KirService .GetPedagogusList(kirRequestModel) .ConvertAll(new Converter(x => x)) as List; } if (felhasznalo is KirTanulo) { kirFelhasznaloCacheList = KirService .GetTanuloList(kirRequestModel) .ConvertAll(new Converter(x => x)) as List; } Cache.Add(cacheKey, kirFelhasznaloCacheList, new CacheItemPolicy { AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddSeconds(KirListCacheExpirationInSeconds)) }); } return kirFelhasznaloCacheList; } public List GetKirFelhasznaloList(FelhasznaloKirSearchCo felhasznaloKirSearchCo, string cacheKey) where T : class, IKirFelhasznalo, new() => GetKirFelhasznaloList(cacheKey) .Where(ValidationFor4T(felhasznaloKirSearchCo)) .ToList(); public TOut GetKirFelhasznaloAdatok(Converter converter, string cacheKey, string szuletesiNev, string anyjaNeve, DateTime szuletesiDatum, string szuletesiHely) where TIn : class, IKirFelhasznalo, new() where TOut : class => GetKirFelhasznaloList(cacheKey) .Where(SearchFor4T(szuletesiNev, anyjaNeve, szuletesiDatum, szuletesiHely)) .Select(x => converter.Invoke(x)) .FirstOrDefault(); } }