protected TimesheetEventHandler(IInitEfficiencyRunner initEfficiencyRunner, ICacheRepositoryFactory <ITransactionCacheRepository> transactionCacheRepositoryFactory, ICacheRepositoryFactory <IEmployeeEfficiencyCacheRepository> efficiencyCacheRepositoryFactory, IDataCacheProvider <EfficiencyTimesheetCache> timesheetCacheProvider, ILiveEfficiencyEngine liveEfficiencyEngine) { _initEfficiencyRunner = initEfficiencyRunner; _transactionCacheRepositoryFactory = transactionCacheRepositoryFactory; _efficiencyCacheRepositoryFactory = efficiencyCacheRepositoryFactory; _timesheetCacheProvider = timesheetCacheProvider; _liveEfficiencyEngine = liveEfficiencyEngine; }
public static void ComputeAndUpdateCacheForAllSites( ICacheRepositoryFactory <ITransactionCacheRepository> transactionCacheRepositoryFactory, IDataCacheProvider <EfficiencyTimesheetCache> timesheetCacheProvider, IEmployeeEfficiencyCacheRepository liveEfficiencyCache, ILiveEfficiencyEngine liveEfficiencyEngine, DateTime start, DateTime end) { List <SiteEmployeeCode> siteEmployeeCodes = new List <SiteEmployeeCode>(); var transactionCache = transactionCacheRepositoryFactory.GetCurrent(); var transactionSiteCodes = transactionCache.GetSiteCodes(); foreach (var siteCode in transactionSiteCodes) { siteEmployeeCodes.AddRange(transactionCache.GetTransactionSiteEmployeeCodes(siteCode) .Select(x => new SiteEmployeeCode { SiteCode = siteCode, EmployeeCode = x })); } List <SiteEmployeeCode> tnaEmployeeCodes = new List <SiteEmployeeCode>(); var timeSheetCache = timesheetCacheProvider.GetCurrent(); var timeSheetSiteCodes = timeSheetCache.GetSiteCodes(); foreach (var siteCode in timeSheetSiteCodes) { tnaEmployeeCodes.AddRange(timeSheetCache.GetAll(siteCode) .GroupBy(r => r.TnaEmployeeCode) .Select(x => new SiteEmployeeCode { SiteCode = siteCode, EmployeeCode = x.Key }) .ToArray()); } liveEfficiencyEngine.ComputeForSiteCodesAndExecute( siteEmployeeCodes.GroupBy(x => x.SiteCode).ToDictionary(r => r.Key, r => r.ToArray()), tnaEmployeeCodes.GroupBy(x => x.SiteCode).ToDictionary(r => r.Key, r => r.ToArray()), start, end, (calculatedEfficiency) => EfficiencyCacheHelper.UpdateLiveEfficiencyCache(calculatedEfficiency, liveEfficiencyCache, start, end, true)); }