Esempio n. 1
0
        public TimeProductivityViewModel(IEmployeeProductivity productivity, IEnumerable <Operation> operations)
            : base(operations.First(o => o.Group == OperationGroups.Time))
        {
            SpeedLabeling = SPEED_IN_TIME;
            var dt = productivity.GetTotalDowntimeHours();
            var wt = productivity.GetTotalWorkHours();

            Speed    = wt + dt;
            SpeedTip = "Общее время работы (с простоями)";


            List <(double, string)> timeList = new List <(double, string)>(
                productivity.GetOperationTimes(operations.Where(o => o.Id > 0))
                .Where(t => t.hours > 0.0)
                .Select(t => (Convert.ToDouble(t.hours), $"{t.operation.Name}: {t.hours:F1}"))
                );

            if (dt > 0.0)
            {
                timeList.Add((Convert.ToDouble(dt), $"Время бездействия: {dt:F1}"));
            }

            _queue.Enqueue(new AspectsViewModel {
                Aspects      = new ObservableCollection <(double, string)>(timeList),
                Indicator    = wt,
                IndicatorTip = "Время работы",
                Annotation   = "время"
            });
        public EmployeeProductivityViewModel(IEmployeeProductivity employeeProductivity,
                                             ReadOnlyObservableCollection <FilterViewModel> filters,
                                             ReadOnlyObservableCollection <Category> categories
                                             )
        {
            EmployeeProductivity = employeeProductivity ?? throw new ArgumentNullException(nameof(EmployeeProductivity), @"EmployeeProductivity cannot be null.");
            _filterVmCollection  = filters ?? throw new ArgumentNullException(nameof(filters), @"filters cannot be null.");

            EmployeeVm = new EmployeeViewModel(employeeProductivity.Employee);

            _productivityVmCollection = CreateProductivityVmCollection();
            ProductivityVmCollection  = _productivityVmCollection.Where(PredicateFunc).OrderBy(o => o.OperationId).ToArray();

            ProductivityViewModel[] CreateProductivityVmCollection()
            {
                var operations = _filterVmCollection[( int )FilterIndexes.Operation].FilterItemVmCollection.Select(fi => ( Operation )fi.Entity).ToArray();

                // Concrete productivities plus TimeProductivityViewModel
                var vmColl = new List <ProductivityViewModel>(operations.Length + 1);

                foreach (var operation in operations)
                {
                    switch (operation.Group)
                    {
                    case OperationGroups.Reception:
                        vmColl.Add(new ReceptionProductivityViewModel(employeeProductivity[operation], operation, categories));
                        break;

                    case OperationGroups.Shipment:
                        vmColl.Add(new ShipmentProductivityViewModel(employeeProductivity[operation], operation));
                        break;

                    case OperationGroups.Other:
                        vmColl.Add(new OtherProductivityViewModel(employeeProductivity[operation], operation));
                        break;

                    case OperationGroups.Time:
                        vmColl.Add(new TimeProductivityViewModel(employeeProductivity, operations));
                        break;

                    default:
                        vmColl.Add(new GatheringProductivityViewModel(employeeProductivity[operation], operation, categories));
                        break;
                    }
                }

                return(vmColl.ToArray());
            }
        }