public async Task LoadEmployeeProductivitiesAsync(Period period) { IEnumerable <EmployeeProductivity> employeeProductivities = new EmployeeProductivity[0]; var task = Task.Run(() => { lock ( _lock ) { try { employeeProductivities = GetEmployeeProductivities(period); } catch (Exception ex) { ; } } }); try { await task; } catch (Exception ex) { employeeProductivities = new EmployeeProductivity[0]; Debug.WriteLine(ex.Message); Debug.WriteLine(ex.StackTrace); } if (EmployeeProductivityCollections.Any()) { _employeeProductivityCollections.Clear(); } foreach (var emplProd in employeeProductivities) { _employeeProductivityCollections.Add(emplProd); } }
private EmployeeProductivity[] GetEmployeeProductivities(Period period) { var actionGroupingArray = _dbContext.GetEmployeeActions(period.Start, period.End).ToArray(); if (actionGroupingArray.Length == 0) { return(new EmployeeProductivity[0]); } var emplProdColl = new EmployeeProductivity[actionGroupingArray.Length]; _productivityBuilder.Thresholds = Thresholds; Parallel.For(0, actionGroupingArray.Length, i => { var breaks = actionGroupingArray[i].Key.ShortBreakSchedule; var shift = actionGroupingArray[i].Key.Shift; var ep = BuildProductivities(actionGroupingArray[i], breaks, shift); emplProdColl[i] = new EmployeeProductivity(actionGroupingArray[i].Key, ep); }); return(emplProdColl); }
public void BuildProductivities_IntegrationTest() { var service = GetFakeRaportService(); var sheetTable = ExcelImporter.GetSheetTable("test.xlsx".AppendAssemblyPath("Contexts\\IntegrationTests")); TypeRepository.TryGetPropertyMap(sheetTable, typeof(TestImportModel), out var propertyMap); var visitor = new TestImportModelVisitor(_operations); var actions = ExcelImporter.GetDataFromTable(sheetTable, propertyMap, new ImportModelConverter <TestImportModel, EmployeeActionBase>(visitor)); var shortBreaks = new ShortBreakSchedule { Duration = TimeSpan.FromMinutes(10), FirstBreakTime = new TimeSpan(9, 55, 0), Periodicity = TimeSpan.FromHours(2) }; var shift = new Shift { Lunch = TimeSpan.FromMinutes(30), }; var productivities = service.Build(actions, shortBreaks, shift); var employeeProductivity = new EmployeeProductivity(new Employee(), productivities); var totalTime = employeeProductivity.GetTotalWorkHours(); Assert.That(totalTime, Is.GreaterThan(5.7)); var pause = employeeProductivity.DowntimePeriods.Sum(d => d.Duration.TotalSeconds); Assert.That(pause, Is.GreaterThan(16000)); }