Exemple #1
0
        /// <summary>
        /// Возвращает все комплектующие, находящиеся в определенном ордере запроса
        /// </summary>
        /// <returns></returns>
        private List <Product> GetProducts(InitialOrder rfq)
        {
            #region Поиск Продуктов

            //Строка запроса, производящая выборку идентификаторов Продуктов среди записей котировочных ордеров
            //пренадлежащих переданному котировочному ордеру и указывающих на котировки КИТов
            var accessoryParentId =
                BaseQueries.GetSelectQueryColumnOnly <InitialOrderRecord>
                    (InitialOrderRecord.ProductIdProperty,
                    new ICommonFilter[]
            {
                new CommonFilter <int>(BasePackageRecord.ParentPackageIdProperty, rfq.ItemId),
                new CommonFilter <int>(InitialOrderRecord.ProductTypeProperty, SmartCoreType.Product.ItemId)
            });
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов КИТов
            ICommonFilter idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                               FilterType.In,
                                                               new[] { accessoryParentId });
            //создаются запросы на выборку задач по компонентам с заданного ВС
            //дополнительно фильтрую ключевое поле. значение ключевого поля
            //задач по компонентам ВС должно быть среди идентификатор родительских задач КИТов
            var kits = _loader.GetObjectListAll <Product>(idFilter, true, true);

            #endregion

            #region загрузка деталей

            //Строка запроса, производящая выборку идентификаторов Продуктов среди записей котировочных ордеров
            //пренадлежащих переданному котировочному ордеру и указывающих на котировки КИТов
            accessoryParentId =
                BaseQueries.GetSelectQueryColumnOnly <InitialOrderRecord>
                    (InitialOrderRecord.ProductIdProperty,
                    new ICommonFilter[]
            {
                new CommonFilter <int>(BasePackageRecord.ParentPackageIdProperty, rfq.ItemId),
                new CommonFilter <int>(InitialOrderRecord.ProductTypeProperty, SmartCoreType.Product.ItemId)
            });
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов КИТов
            idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                 FilterType.In,
                                                 new[] { accessoryParentId });
            //создаются запросы на выборку задач по компонентам с заданного ВС
            //дополнительно фильтрую ключевое поле. значение ключевого поля
            //задач по компонентам ВС должно быть среди идентификатор родительских задач КИТов
            var componentModels = _loader.GetObjectListAll <ComponentModel>(idFilter, true, true);
            #endregion

            var accessories = new List <Product>();

            accessories.AddRange(kits.ToArray());
            accessories.AddRange(componentModels.ToArray());

            return(accessories);
        }
Exemple #2
0
        /// <summary>
        /// Загружает все элементы рабочего пакета
        /// </summary>
        /// <param name="rfq"></param>
        public void LoadInitionalOrderItems(InitialOrder rfq)
        {
            if (rfq == null)
            {
                return;
            }

            rfq.Products = GetProducts(rfq);

            _packageCore.LoadPackageItems <InitialOrder, InitialOrderRecord>(rfq);
            _packageCore.SetParents(rfq);

            foreach (var record in rfq.PackageRecords)
            {
                record.Product = rfq.Products.FirstOrDefault(a => a.ItemId == record.ProductId);
            }
        }
Exemple #3
0
        /// <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);
                        }
                    }
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// Сохранение Первоначального акта ордера
        /// </summary>
        public InitialOrder AddInitialOrder(IEnumerable <InitialOrderRecord> initialList,
                                            BaseEntityObject parent,
                                            out string message)
        {
            if (parent == null)
            {
                message = "Not set parent." +
                          "\nFailed to create empty Initial Order";
                return(null);
            }

            if (!(parent is Aircraft) && !(parent is Operator) && !(parent is Store))
            {
                message = "Parent must be Aircraft or Store or Operator." +
                          "\nFailed to create empty Initial Order";
                return(null);
            }

            if (initialList == null)
            {
                message = "Selected tasks not have a accessories." +
                          "\nFailed to create empty Initial Order";
                return(null);
            }

            var rqst = new InitialOrder
            {
                Description    = "",
                Status         = WorkPackageStatus.Opened,
                Author         = _casEnvironment.Operators[0].Name,
                OpeningDate    = DateTime.Today,
                PublishingDate = new DateTime(1852, 01, 01),
                ClosingDate    = new DateTime(1852, 01, 01),
                Remarks        = "",
                ParentType     = parent.SmartCoreObjectType,
                ParentId       = parent.ItemId,
                Title          = parent + "-IO-" + DateTime.Now
            };

            _newKeeper.Save(rqst);

            #region Формирование записей рабочего пакета
            foreach (var item in initialList)
            {
                rqst.PackageRecords.Add(item);
            }
            #endregion

            #region Сохранение рабочего пакета и его записей

            foreach (var item in rqst.PackageRecords)
            {
                item.ParentPackageId       = rqst.ItemId;
                item.DestinationObjectType = parent.SmartCoreObjectType;
                item.DestinationObjectId   = parent.ItemId;
                item.DestinationObject     = parent;

                _newKeeper.Save(item);
            }

            message = "Items added successfully";

            #endregion

            return(rqst);
        }
Exemple #5
0
        /// <summary>
        /// Сохранение Первоначального акта ордера
        /// </summary>
        public InitialOrder AddInitialOrder(IEnumerable <KeyValuePair <Product, double> > quotationList,
                                            BaseEntityObject parent,
                                            DateTime effDate,
                                            DeferredCategory category,
                                            out string message)
        {
            if (parent == null)
            {
                message = "Not set parent." +
                          "\nFailed to create empty Initial Order";
                return(null);
            }

            if (!(parent is Aircraft) && !(parent is Operator) && !(parent is Store))
            {
                message = "Parent must be Aircraft or Store or Operator." +
                          "\nFailed to create empty Initial Order";
                return(null);
            }

            if (quotationList == null)
            {
                message = "Selected tasks not have a accessories." +
                          "\nFailed to create empty Initial Order";
                return(null);
            }

            var rqst = new InitialOrder
            {
                Description    = "",
                Status         = WorkPackageStatus.Opened,
                Author         = _casEnvironment.Operators[0].Name,
                OpeningDate    = DateTime.Today,
                PublishingDate = new DateTime(1852, 01, 01),
                ClosingDate    = new DateTime(1852, 01, 01),
                Remarks        = "",
                ParentType     = parent.SmartCoreObjectType,
                ParentId       = parent.ItemId,
                Title          = parent + "-IO-" + DateTime.Now
            };

            _newKeeper.Save(rqst);

            #region Формирование записей рабочего пакета
            foreach (var item in quotationList)
            {
                Product product  = item.Key;
                double  quantity = item.Value;

                var record =
                    rqst.PackageRecords.FirstOrDefault(r => r.PackageItemType == product.SmartCoreObjectType &&
                                                       r.PackageItemId == product.ItemId);
                if (record != null)
                {
                    record.Quantity += item.Value;
                }
                else
                {
                    record = new InitialOrderRecord(rqst.ItemId,
                                                    product,
                                                    quantity,
                                                    parent,
                                                    effDate,
                                                    ComponentStatus.New | ComponentStatus.Overhaul | ComponentStatus.Repair | ComponentStatus.Serviceable,
                                                    null,
                                                    category);
                    rqst.PackageRecords.Add(record);
                }
            }
            #endregion

            #region Сохранение рабочего пакета и его записей

            foreach (var item in rqst.PackageRecords)
            {
                item.ParentPackageId = rqst.ItemId;
                _newKeeper.Save(item);
            }

            message = "Items added successfully";

            #endregion

            return(rqst);
        }
Exemple #6
0
 public int CompareTo(InitialOrder y)
 {
     return(ItemId.CompareTo(y.ItemId));
 }