/// <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); }
/// <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); } }
/// <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); } } } } }
/// <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); }
/// <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); }
public int CompareTo(InitialOrder y) { return(ItemId.CompareTo(y.ItemId)); }