/// <summary> /// загружает элементы начального акта, и производит их калькуляцмю. /// </summary> /// <param name="initialOrder"></param> public void GetInitialOrderItemsWithCalculate(InitialOrder initialOrder) { LoadInitionalOrderItems(initialOrder); //записи по чекам обслуживания нужно сгруппировать по типу чеков (Schedule/Store) //и номеру группы выполнения, после, для каждой группы расчитать ресурс и дату выполнения var maintenanceChecksWprs = initialOrder.PackageRecords.Where(w => w.IsSchedule && w.Task.SmartCoreObjectType == SmartCoreType.MaintenanceCheck && w.Task.ItemId > 0); var mcs = new List <MaintenanceCheck>(); var rmcs = new List <MaintenanceCheck>(); foreach (var maintenanceChecksWpr in maintenanceChecksWprs) { var mc = (MaintenanceCheck)maintenanceChecksWpr.Task; var apr = mc.PerformanceRecords .FirstOrDefault(pr => pr.NumGroup == maintenanceChecksWpr.PerformanceNumFromStart); if (apr != null) { mc.ComplianceGroupNum = apr.NumGroup; rmcs.Add(mc); } else { mc.ComplianceGroupNum = maintenanceChecksWpr.PerformanceNumFromStart; mcs.Add(mc); } mc.ResetMathData(); } #region асчет выполнения для чеков не имеющих записи в рамках данного рабочего пакета //группировка по типу (Schedule/Store) var groupByMaintenanceType = mcs.GroupBy(mc => mc.Schedule); foreach (var maintenanceTypeGroup in groupByMaintenanceType) { var groupByMaintenanceNum = maintenanceTypeGroup.GroupBy(mc => mc.ComplianceGroupNum); foreach (var maintenanceComplianceGroup in groupByMaintenanceNum) { var mcg = new MaintenanceCheckGroupByType(maintenanceComplianceGroup.First().Schedule); foreach (var maintenanceCheck in maintenanceComplianceGroup) { mcg.Checks.Add(maintenanceCheck); } //чеки выполнения _performanceCalculator.GetPerformance(mcg, maintenanceComplianceGroup.Key); } } #endregion foreach (var record in initialOrder.PackageRecords) { if (!record.IsSchedule) { _performanceCalculator.GetNextPerformance(record); continue; } if (record.Task == null || record.Task.ItemId < 0) { continue; } AbstractPerformanceRecord apr = null; apr = record.Task.PerformanceRecords .Cast <AbstractPerformanceRecord>() .FirstOrDefault(r => r.PerformanceNum == record.PerformanceNumFromStart); if (apr == null) { IDirective task = record.Task; if (!task.IsClosed) { if (task is Entities.General.Accessory.Component) { _performanceCalculator.GetPerformance((Entities.General.Accessory.Component)task, record.PerformanceNumFromStart); } else { _performanceCalculator.GetPerformance(task, record.PerformanceNumFromStart); } } } } }