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()); } }