コード例 #1
0
ファイル: PurchaseCore.cs プロジェクト: mgladilov/Cas
        /// <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);
                        }
                    }
                }
            }
        }