Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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));
        }