Ejemplo n.º 1
0
        public DirectiveCollection GetDirectivesFromAllAircrafts(DirectiveType directiveType, string text, string paragraph)
        {
            if (directiveType == null)
            {
                directiveType = DirectiveType.AirworthenessDirectives;
            }

            var qrs = DirectiveQueries.GetSelectQuery(directiveType, text, paragraph, loadChild: true);

            var directives = new DirectiveCollection();

            directives.AddRange(_loader.GetObjectListAll <Directive>(qrs, true));

            if (directives.Count == 0)
            {
                return(directives);
            }

            var directiveIds   = directives.Select(d => d.ItemId).ToList();
            var itemsRelations = _itemsRelationsDataAccess.GetRelations(directiveIds, SmartCoreType.Directive.ItemId);

            if (itemsRelations.Count > 0)
            {
                foreach (var directive in directives)
                {
                    directive.ItemRelations.AddRange(itemsRelations.Where(i => i.FirstItemId == directive.ItemId || i.SecondItemId == directive.ItemId));
                }
            }

            return(directives);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Возвращает все повреждения базового агрегата, самолета, или задачи созданные в рамках страницы бортжурнала
        /// </summary>
        /// <returns></returns>
        public DirectiveCollection GetDamageItems(BaseComponent parentBaseComponent = null,
                                                  Aircraft parentAircraft           = null,
                                                  ICommonFilter[] filters           = null)
        {
            if (parentAircraft == null && parentBaseComponent == null)
            {
                throw new ArgumentNullException();
            }

            List <DbQuery> qrs;

            if (parentBaseComponent != null)
            {
                qrs = DirectiveQueries.GetDamageItemSelectQuery(parentBaseComponent, filters, true);
            }
            else
            {
                qrs = DirectiveQueries.GetAircraftDamageItemSelectQuery(parentAircraft.ItemId, filters, true);
            }

            var directives = new DirectiveCollection();

            directives.AddRange(_loader.GetObjectListAll <DamageItem>(qrs, true).ToArray());

            if (directives.Count == 0)
            {
                return(directives);
            }


            var links = _newLoader.GetObjectListAll <ItemFileLinkDTO, ItemFileLink>(new List <Filter>()
            {
                new Filter("ParentId", directives.Select(i => i.ItemId)),
                new Filter("ParentTypeId", 3053)
            }, true);

            foreach (var directive in directives)
            {
                directive.Files.AddRange(links.Where(i => i.ParentId == directive.ItemId));
            }

            var directiveIds   = directives.Select(d => d.ItemId).ToList();
            var itemsRelations = _itemsRelationsDataAccess.GetRelations(directiveIds, SmartCoreType.Directive.ItemId);

            if (itemsRelations.Count > 0)
            {
                foreach (var directive in directives)
                {
                    directive.ItemRelations.AddRange(itemsRelations.Where(i => i.FirstItemId == directive.ItemId || i.SecondItemId == directive.ItemId));
                }
            }

            return(directives);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Возвращает все директивы базового агрегата, самолета, или задачи созданные в рамках страницы бортжурнала
        /// </summary>
        /// <returns></returns>
        private DirectiveCollection GetDirectives(BaseComponent parentBaseComponent,
                                                  Aircraft parentAircraft,
                                                  AircraftFlight parentFlight,
                                                  DirectiveType directiveType)
        {
            if (parentAircraft == null && parentBaseComponent == null && parentFlight == null)
            {
                throw new ArgumentNullException();
            }
            if (directiveType == null)
            {
                directiveType = DirectiveType.AirworthenessDirectives;
            }

            List <DbQuery> qrs;

            if (parentBaseComponent != null)
            {
                qrs = DirectiveQueries.GetSelectQuery(parentBaseComponent, directiveType, loadChild: true);
            }
            else if (parentAircraft != null)
            {
                qrs = DirectiveQueries.GetAircraftDirectivesSelectQuery(parentAircraft.ItemId, directiveType, loadChild: true);
            }
            else
            {
                qrs = DirectiveQueries.GetSelectQuery(parentFlight, directiveType, loadChild: true);
            }

            var directives = new DirectiveCollection();

            directives.AddRange(_loader.GetObjectListAll <Directive>(qrs, true));

            if (directives.Count == 0)
            {
                return(directives);
            }

            var directiveIds   = directives.Select(d => d.ItemId).ToList();
            var itemsRelations = _itemsRelationsDataAccess.GetRelations(directiveIds, SmartCoreType.Directive.ItemId);

            if (itemsRelations.Count > 0)
            {
                foreach (var directive in directives)
                {
                    directive.ItemRelations.AddRange(itemsRelations.Where(i => i.FirstItemId == directive.ItemId || i.SecondItemId == directive.ItemId));
                }
            }

            return(directives);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Полность загружает директиву делая запрос по заданному ID
        /// </summary>
        /// <param name="itemId"></param>
        /// <param name="directiveType"></param>
        /// <param name="loadChild"></param>
        public Directive GetDirectiveById(Int32 itemId, DirectiveType directiveType, bool loadChild = true)
        {
            if (directiveType == null)
            {
                directiveType = DirectiveType.AirworthenessDirectives;
            }

            var qrs = DirectiveQueries.GetSelectQueryById(itemId, directiveType, loadChild: loadChild);

            var directive = _loader.GetObjectListAll <Directive>(qrs, true).FirstOrDefault();

            if (directive == null)
            {
                return(null);
            }

            var itemsRelations = _itemsRelationsDataAccess.GetRelations(directive.ItemId, directive.SmartCoreObjectType.ItemId);

            var fileIds = directive.Files.Where(i => i.FileId.HasValue).Select(i => i.FileId.Value);

            if (fileIds.Any())
            {
                var files = _newLoader.GetObjectList <AttachedFileDTO, AttachedFile>(new Filter("ItemId", values: fileIds));
                foreach (var file in directive.Files)
                {
                    var f = files.FirstOrDefault(i => i.ItemId == file.FileId)?.GetCopyUnsaved(false);
                    if (f == null)
                    {
                        continue;
                    }
                    f.ItemId  = file.FileId.Value;
                    file.File = (AttachedFile)f;
                }
            }

            directive.ItemRelations.AddRange(itemsRelations);

            return(directive);

            // Примечание - загрузка всех связанных данных должна идти вместе с выставлением Parent
        }
Ejemplo n.º 5
0
        public IList <Directive> GetDirectivesList(int aircraftId, DirectiveType directiveType, IList <int> directiveIds, bool loadDeleted = false)
        {
            var directives = new List <Directive>();

            if (directiveIds.Count == 0)
            {
                return(directives);
            }

            var qrs = DirectiveQueries.GetAircraftDirectivesSelectQuery(aircraftId, directiveType,
                                                                        new ICommonFilter[]
            {
                new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In,
                                       directiveIds.ToArray())
            }, true, loadDeleted);

            directives.AddRange(_loader.GetObjectListAll <Directive>(qrs, true));

            if (directives.Count == 0)
            {
                return(directives);
            }

            var itemsRelations = _itemsRelationsDataAccess.GetRelations(directiveIds, SmartCoreType.Directive.ItemId);

            if (itemsRelations.Count > 0)
            {
                foreach (var directive in directives)
                {
                    directive.ItemRelations.AddRange(
                        itemsRelations.Where(i => i.FirstItemId == directive.ItemId || i.SecondItemId == directive.ItemId));
                }
                //TODO:(Evgenii Babak)не использовать Where
            }

            return(directives);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Полность загружает директиву делая запрос по заданному ID
        /// </summary>
        /// <param name="itemId"></param>
        /// <param name="directiveType"></param>
        /// <param name="loadChild"></param>
        public Directive GetDirectiveById(Int32 itemId, DirectiveType directiveType, bool loadChild = true)
        {
            if (directiveType == null)
            {
                directiveType = DirectiveType.AirworthenessDirectives;
            }

            var qrs = DirectiveQueries.GetSelectQueryById(itemId, directiveType, loadChild: loadChild);

            var directive = _loader.GetObjectListAll <Directive>(qrs, true).FirstOrDefault();

            if (directive == null)
            {
                return(null);
            }

            var itemsRelations = _itemsRelationsDataAccess.GetRelations(directive.ItemId, directive.SmartCoreObjectType.ItemId);

            directive.ItemRelations.AddRange(itemsRelations);

            return(directive);

            // Примечание - загрузка всех связанных данных должна идти вместе с выставлением Parent
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Возвращает все директивы базового агрегата, самолета, или задачи созданные в рамках страницы бортжурнала
        /// </summary>
        /// <returns></returns>
        private DirectiveCollection GetDirectives(BaseComponent parentBaseComponent,
                                                  Aircraft parentAircraft,
                                                  AircraftFlight parentFlight,
                                                  DirectiveType directiveType)
        {
            if (parentAircraft == null && parentBaseComponent == null && parentFlight == null)
            {
                throw new ArgumentNullException();
            }
            if (directiveType == null)
            {
                directiveType = DirectiveType.AirworthenessDirectives;
            }

            List <DbQuery> qrs;

            if (parentBaseComponent != null)
            {
                qrs = DirectiveQueries.GetSelectQuery(parentBaseComponent, directiveType, loadChild: true);
            }
            else if (parentAircraft != null)
            {
                qrs = DirectiveQueries.GetAircraftDirectivesSelectQuery(parentAircraft.ItemId, directiveType, loadChild: true);
            }
            else
            {
                qrs = DirectiveQueries.GetSelectQuery(parentFlight, directiveType, loadChild: true);
            }

            var directives = new DirectiveCollection();

            directives.AddRange(_loader.GetObjectListAll <Directive>(qrs, true));

            if (directives.Count == 0)
            {
                return(directives);
            }

            var directiveIds     = directives.Select(d => d.ItemId).ToList();
            var itemsRelations   = _itemsRelationsDataAccess.GetRelations(directiveIds, SmartCoreType.Directive.ItemId);
            var mpdCompRelations = _itemsRelationsDataAccess.GetCustomRelations(itemsRelations.Select(i => i.FirstItemId).Concat(itemsRelations.Select(i => i.SecondItemId)), SmartCoreType.ComponentDirective.ItemId);


            if (itemsRelations.Count > 0)
            {
                foreach (var directive in directives)
                {
                    directive.ItemRelations.AddRange(itemsRelations.Where(i => i.FirstItemId == directive.ItemId || i.SecondItemId == directive.ItemId));

                    var mpdLink = directive.ItemRelations.FirstOrDefault(i =>
                                                                         i.FirtsItemTypeId == SmartCoreType.MaintenanceDirective.ItemId ||
                                                                         i.SecondItemTypeId == SmartCoreType.MaintenanceDirective.ItemId);
                    if (mpdLink != null)
                    {
                        var mpdId = mpdLink.FirtsItemTypeId == SmartCoreType.MaintenanceDirective.ItemId
                                                        ? mpdLink.FirstItemId
                                                        : mpdLink.SecondItemId;
                        var mpdComLink = mpdCompRelations.FirstOrDefault(i => i.FirstItemId == mpdId || i.SecondItemId == mpdId);
                        directive.LinkComp = mpdComLink?.AdditionalInformation?.Component;
                    }
                }
            }

            return(directives);
        }
Ejemplo n.º 8
0
        public List <AbstractAccessory> GetAllAircraftKits(int aircraftId, int aircraftModelId)
        {
            var resultKits = new List <AbstractAccessory>();

            #region Поиск Директив летной годности с КИТами

            //Строка запроса, выдающая идентификаторы родительских задач КИТов
            var accessoryParentId = BaseQueries.GetSelectQueryColumnOnly <AccessoryRequired>
                                        (AccessoryRequired.ParentIdProperty,
                                        new ICommonFilter[] { new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.Directive.ItemId) }
                                        );
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов родительских задач КИТов
            ICommonFilter idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                               FilterType.In,
                                                               new[] { accessoryParentId });
            //создаются запросы на выборку задач по компонентам с заданного ВС
            //дополнительно фильтрую ключевое поле. значение ключевого поля
            //задач по компонентам ВС должно быть среди идентификатор родительских задач КИТов
            var qrs = DirectiveQueries.GetAircraftDirectivesSelectQuery(aircraftId, DirectiveType.All,
                                                                        new[] { idFilter }, true);

            var directives = _loader.GetObjectListAll <Directive>(qrs, true);
            //связь КИТов с родительскими деталями
            foreach (var directive in directives)
            {
                resultKits.AddRange(directive.Kits.ToArray());
            }

            #endregion

            #region Поиск Директив деталей с КИТами
            //Строка запроса, выдающая идентификаторы родительских задач КИТов
            accessoryParentId = BaseQueries.GetSelectQueryColumnOnly <AccessoryRequired>
                                    (AccessoryRequired.ParentIdProperty,
                                    new ICommonFilter[] { new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.ComponentDirective.ItemId) }
                                    );
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов родительских задач КИТов
            idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                 FilterType.In,
                                                 new[] { accessoryParentId });
            //создаются запросы на выборку задач по компонентам с заданного ВС
            //дополнительно фильтрую ключевое поле. значение ключевого поля
            //задач по компонентам ВС должно быть среди идентификатор родительских задач КИТов
            qrs = ComponentDirectiveQueries.GetAircraftDirectivesSelectQuery(aircraftId,
                                                                             new[] { idFilter },
                                                                             true);

            var componentDirectives = _loader.GetObjectListAll <ComponentDirective>(qrs, true);
            //связь КИТов с родительскими деталями
            foreach (var dd in componentDirectives)
            {
                dd.ParentComponent = _componentCore.GetComponentById(dd.ComponentId);
                resultKits.AddRange(dd.Kits.ToArray());
            }

            #endregion

            #region Поиск КИТ-ов Maintenance чеков

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

            //связь КИТов с родительскими деталями
            foreach (var dd in checks)
            {
                resultKits.AddRange(dd.Kits.ToArray());
            }
            #endregion

            #region Поиск КИТ-ов NonRoutine Job-ов

            var jobDTOs = _nonRoutineJobDataAccess.GetNonRoutineJobDTOsWithKits();

            //связь КИТов с родительскими деталями
            foreach (var jobDTO in jobDTOs)
            {
                var nonRoutineJob = NonRoutineJobHelper.Convert(jobDTO, _casEnvironment);
                resultKits.AddRange(nonRoutineJob.Kits.ToArray());
            }


            #endregion

            #region Поиск КИТ-ов Базовых деталей
            //TODO:(Evgenii Babak) выделить в отдельный класс и не использовать рукописные запросы
            //TODO:(Evgenii Babak) нужно реализовать TablePrefix в методе BaseComponentQueries.GetSelectQueryPrimaryColumnOnly

            var bdFilter =
                $"Select ComponentsItemId from ({BaseQueries.GetSelectQueryWithWhere<BaseComponent>() + $" and (Select top 1 DestinationObjectId from dbo.TransferRecords Where \r\n            \t\t\t\t\tParentType = {SmartCoreType.BaseComponent.ItemId} \r\n            \t\t\t\t\tand ParentId = dbo.Components.ItemId  \r\n            \t\t\t\t\tand IsDeleted = 0\r\n            \t\t\t\t\torder by dbo.TransferRecords.TransferDate Desc) = {aircraftId}"}) directiveSelect ";

            var preResult = _loader.GetObjectListAll <AccessoryRequired>(new ICommonFilter[]
            {
                new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.BaseComponent.ItemId),
                new CommonFilter <string>(AccessoryRequired.ParentIdProperty, FilterType.In, new [] { bdFilter })
            });


            // поиск поставщиков и связей с ними
            var kitsIds = preResult.Select(k => k.ItemId).ToArray();
            var ksrs    = new List <KitSuppliersRelation>();
            if (kitsIds.Length > 0)
            {
                _loader.GetObjectListAll <KitSuppliersRelation>(new CommonFilter <int>(KitSuppliersRelation.KitIdProperty, FilterType.In, kitsIds));
            }

            var kitSupplierIds = ksrs.Select(k => k.SupplierId).ToArray();
            var suppliers      = new List <Supplier>();
            if (kitSupplierIds.Length > 0)
            {
                suppliers = _loader.GetObjectListAll <Supplier>(new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, kitSupplierIds));
            }

            foreach (var kit in preResult)
            {
                var supls = (from sup in suppliers
                             from k in ksrs
                             where k.KitId == kit.ItemId &&
                             sup.ItemId == k.SupplierId
                             select sup).ToList();
                kit.Suppliers.AddRange(supls.ToArray());
            }

            //поиск чеков, который пренадлежат КИТы
            var kitParentIds   = preResult.Select(k => k.ParentId).ToArray();
            var baseComponents = new List <BaseComponent>();
            if (kitParentIds.Length > 0)
            {
                baseComponents = _loader.GetObjectListAll <BaseComponent>(new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, kitParentIds));
            }

            //связь КИТов с родительскими деталями
            foreach (var baseComponent in baseComponents)
            {
                baseComponent.Kits.Clear();
                baseComponent.Kits.AddRange(preResult.Where(k => k.ParentId == baseComponent.ItemId));
                foreach (var kit in baseComponent.Kits)
                {
                    kit.ParentObject = baseComponent;
                }
            }
            resultKits.AddRange(preResult.ToArray());
            #endregion

            #region поиск КИТ-ов деталей

            var componentQuery = $"(Select ComponentsItemId from ({ComponentQueries.GetSelectQuery(aircraftId)}) directiveSelect )";
            preResult = _loader.GetObjectListAll <AccessoryRequired>(new ICommonFilter[]
            {
                new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.Component.ItemId),
                new CommonFilter <string>(AccessoryRequired.ParentIdProperty, FilterType.In, new [] { componentQuery }),
            });

            //поиск деталей, который пренадлежат КИТы
            kitParentIds = preResult.Select(k => k.ParentId).ToArray();
            var components = new List <BaseComponent>();
            if (kitParentIds.Length > 0)
            {
                components = _loader.GetObjectListAll <BaseComponent>(new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, kitParentIds));
            }

            //связь КИТов с родительскими деталями
            foreach (var baseComponent in components)
            {
                baseComponent.Kits.Clear();
                baseComponent.Kits.AddRange(preResult.Where(k => k.ParentId == baseComponent.ItemId));
                foreach (var kit in baseComponent.Kits)
                {
                    kit.ParentObject = baseComponent;
                }
            }
            resultKits.AddRange(preResult.ToArray());

            #endregion

            #region Поиск MPD с КИТами
            //Строка запроса, выдающая идентификаторы родительских задач КИТов
            accessoryParentId = BaseQueries.GetSelectQueryColumnOnly <AccessoryRequired>
                                    (AccessoryRequired.ParentIdProperty,
                                    new ICommonFilter[] { new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.MaintenanceDirective.ItemId) }
                                    );
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов родительских задач КИТов
            idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                 FilterType.In,
                                                 new[] { accessoryParentId });
            //создаются запросы на выборку задач с заданного ВС
            //дополнительно фильтруя ключевое поле. значение ключевого поля
            //задач по компонентам ВС должно быть среди идентификатор родительских задач КИТов
            qrs = MaintenanceDirectiveQueries.GetAircraftDirectivesSelectQuery(aircraftId,
                                                                               new[] { idFilter },
                                                                               true);

            var maintenanceDirectives = _loader.GetObjectListAll <MaintenanceDirective>(qrs, true);
            //связь КИТов с родительскими деталями
            foreach (var mpd in maintenanceDirectives)
            {
                resultKits.AddRange(mpd.Kits.ToArray());
            }

            #endregion

            #region Поиск Нерутинных КИТов
            //добавление не рутинных кит-ов
            preResult = _loader.GetObjectListAll <AccessoryRequired>(new CommonFilter <int>(AccessoryRequired.AircraftModelIdProperty, aircraftModelId));

            // поиск поставщиков и связей с ними
            kitsIds = preResult.Select(k => k.ItemId).ToArray();
            if (kitsIds.Length > 0)
            {
                ksrs = _loader.GetObjectListAll <KitSuppliersRelation>(new CommonFilter <int>(KitSuppliersRelation.KitIdProperty, FilterType.In, kitsIds));
            }

            kitSupplierIds = ksrs.Select(k => k.SupplierId).ToArray();
            if (kitSupplierIds.Length > 0)
            {
                suppliers = _loader.GetObjectListAll <Supplier>(new CommonFilter <int>(BaseEntityObject.ItemIdProperty, FilterType.In, kitSupplierIds));
            }
            foreach (var kit in preResult)
            {
                var supls = (from sup in suppliers
                             from k in ksrs
                             where k.KitId == kit.ItemId &&
                             sup.ItemId == k.SupplierId
                             select sup).ToList();
                kit.Suppliers.AddRange(supls.ToArray());
            }


            resultKits.AddRange(preResult.ToArray());

            #endregion

            return(resultKits);
        }
Ejemplo n.º 9
0
        public List <AbstractAccessory> GetAllWorkPackageKits(int workPackageId)
        {
            var resultKits = new List <AbstractAccessory>();

            #region Поиск Директив летной годности с КИТами

            //Строка запроса, выдающая идентификаторы родительских задач КИТов
            var accessoryParentId = BaseQueries.GetSelectQueryColumnOnly <AccessoryRequired>
                                        (AccessoryRequired.ParentIdProperty,
                                        new ICommonFilter[] { new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.Directive.ItemId) }
                                        );
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов родительских задач КИТов
            ICommonFilter idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                               FilterType.In,
                                                               new[] { accessoryParentId });
            //создаются запросы на выборку задач по компонентам с заданного рабочего пакета
            //дополнительно фильтрую ключевое поле. значение ключевого поля
            //задач по компонентам рабочего пакета должно быть среди идентификатор родительских задач КИТов
            var qrs        = DirectiveQueries.GetSelectQueryForWp(workPackageId, DirectiveType.All, new[] { idFilter }, true);
            var directives = _loader.GetObjectListAll <Directive>(qrs, true);
            //связь КИТов с родительскими деталями
            foreach (var directive in directives)
            {
                resultKits.AddRange(directive.Kits.ToArray());
            }

            #endregion

            #region Поиск Директив деталей с КИТами

            //Строка запроса, выдающая идентификаторы родительских задач КИТов
            accessoryParentId = BaseQueries.GetSelectQueryColumnOnly <AccessoryRequired>
                                    (AccessoryRequired.ParentIdProperty,
                                    new ICommonFilter[]
                                    { new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.ComponentDirective.ItemId) }
                                    );
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов родительских задач КИТов
            idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                 FilterType.In,
                                                 new[] { accessoryParentId });
            //создаются запросы на выборку задач по компонентам с заданного рабочего пакета
            //дополнительно фильтрую ключевое поле. значение ключевого поля
            //задач по компонентам рабочего пакета должно быть среди идентификатор родительских задач КИТов
            qrs = ComponentDirectiveQueries.GetSelectQueryForWp(workPackageId, new[] { idFilter }, true);

            var componentDirectives = _loader.GetObjectListAll <ComponentDirective>(qrs, true);
            //связь КИТов с родительскими деталями
            foreach (var dd in componentDirectives)
            {
                dd.ParentComponent = _componentCore.GetComponentById(dd.ComponentId);
                resultKits.AddRange(dd.Kits.ToArray());
            }

            #endregion

            #region Поиск КИТ-ов Maintenance чеков

            //Строка запроса, выдающая идентификаторы родительских задач КИТов
            accessoryParentId = BaseQueries.GetSelectQueryColumnOnly <AccessoryRequired>
                                    (AccessoryRequired.ParentIdProperty,
                                    new ICommonFilter[]
                                    { new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.MaintenanceCheck.ItemId) }
                                    );
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов родительских задач КИТов
            idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                 FilterType.In,
                                                 new[] { accessoryParentId });

            var directiveIn = BaseQueries.GetSelectQueryColumnOnly <WorkPackageRecord>(WorkPackageRecord.DirectiveIdProperty,
                                                                                       new ICommonFilter[]
            {
                new CommonFilter <int>(WorkPackageRecord.WorkPakageIdProperty, workPackageId),
                new CommonFilter <int>(WorkPackageRecord.WorkPackageItemTypeProperty, SmartCoreType.MaintenanceCheck.ItemId)
            });

            //создаются запросы на выборку чеков с заданного рабочего пакета
            //дополнительно фильтрую ключевое поле. значение ключевого поля
            //чека рабочего пакета должно быть среди идентификатор родительских задач КИТов
            var checks =
                _loader.GetObjectListAll <MaintenanceCheck>(new[]
            {
                new CommonFilter <string>(BaseEntityObject.ItemIdProperty, FilterType.In, new[] { directiveIn }),
                idFilter
            }, true);

            //связь КИТов с родительскими деталями
            foreach (var dd in checks)
            {
                resultKits.AddRange(dd.Kits.ToArray());
            }

            #endregion

            #region Поиск КИТ-ов NonRoutine Job-ов

            var jobDTOs = _nonRoutineJobDataAccess.GetNonRoutineJobDTOsWithKitsByWorkPackageId(workPackageId);

            //связь КИТов с родительскими деталями
            foreach (var jobDTO in jobDTOs)
            {
                var nonRoutineJob = NonRoutineJobHelper.Convert(jobDTO, _casEnvironment);
                resultKits.AddRange(nonRoutineJob.Kits.ToArray());
            }


            #endregion

            #region Поиск КИТ-ов Базовых деталей

            directiveIn = BaseQueries.GetSelectQueryColumnOnly <WorkPackageRecord>(WorkPackageRecord.DirectiveIdProperty,
                                                                                   new ICommonFilter[]
            {
                new CommonFilter <int>(WorkPackageRecord.WorkPakageIdProperty, workPackageId),
                new CommonFilter <int>(WorkPackageRecord.WorkPackageItemTypeProperty, SmartCoreType.BaseComponent.ItemId)
            });

            var kitQrs = BaseQueries.GetSelectQueryWithWhereAll <AccessoryRequired>(new ICommonFilter[]
            {
                new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.BaseComponent.ItemId),
                new CommonFilter <string>(BaseEntityObject.ItemIdProperty, FilterType.In, new[] { directiveIn })
            }, true);

            var kits = _loader.GetObjectListAll <AccessoryRequired>(kitQrs, true);

            var baseComponents = _loader.GetObjectList <BaseComponent>(new CommonFilter <string>(BaseEntityObject.ItemIdProperty, FilterType.In, new[] { directiveIn }));

            //связь КИТов с родительскими деталями
            foreach (var baseComponent in baseComponents)
            {
                baseComponent.Kits.Clear();
                baseComponent.Kits.AddRange(kits.Where(k => k.ParentId == baseComponent.ItemId));
                foreach (var kit in baseComponent.Kits)
                {
                    kit.ParentObject = baseComponent;
                }
            }
            resultKits.AddRange(kits.ToArray());

            #endregion

            #region поиск КИТ-ов деталей

            directiveIn = BaseQueries.GetSelectQueryColumnOnly <WorkPackageRecord>(WorkPackageRecord.DirectiveIdProperty,
                                                                                   new ICommonFilter[]
            {
                new CommonFilter <int>(WorkPackageRecord.WorkPakageIdProperty, workPackageId),
                new CommonFilter <int>(WorkPackageRecord.WorkPackageItemTypeProperty, SmartCoreType.Component.ItemId)
            });

            kitQrs = BaseQueries.GetSelectQueryWithWhereAll <AccessoryRequired>(new ICommonFilter[]
            {
                new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.Component.ItemId),
                new CommonFilter <string>(BaseEntityObject.ItemIdProperty, FilterType.In, new[] { directiveIn })
            }, true);

            kits = _loader.GetObjectListAll <AccessoryRequired>(kitQrs, true);
            var components = _loader.GetObjectList <Entities.General.Accessory.Component>(new CommonFilter <string>(BaseEntityObject.ItemIdProperty, FilterType.In, new[] { directiveIn }));

            //связь КИТов с родительскими деталями
            foreach (var component in components)
            {
                component.Kits.Clear();
                component.Kits.AddRange(kits.Where(k => k.ParentId == component.ItemId));
                foreach (var kit in component.Kits)
                {
                    kit.ParentObject = component;
                }
            }
            resultKits.AddRange(kits.ToArray());

            #endregion

            #region Поиск MPD с КИТами

            //Строка запроса, выдающая идентификаторы родительских задач КИТов
            accessoryParentId = BaseQueries.GetSelectQueryColumnOnly <AccessoryRequired>
                                    (AccessoryRequired.ParentIdProperty,
                                    new ICommonFilter[]
                                    { new CommonFilter <int>(AccessoryRequired.ParentTypeIdProperty, SmartCoreType.MaintenanceDirective.ItemId) }
                                    );
            //Фильтр по ключевому полю таблицы обозначающий
            //что значения ключевого поля таблицы должны быть
            //среди идентификаторов родительских задач КИТов
            idFilter = new CommonFilter <string>(BaseEntityObject.ItemIdProperty,
                                                 FilterType.In,
                                                 new[] { accessoryParentId });
            //создаются запросы на выборку задач с заданного рабочего пакета
            //дополнительно фильтруя ключевое поле. значение ключевого поля
            //задач по компонентам рабочего пакета должно быть среди идентификатор родительских задач КИТов
            qrs = MaintenanceDirectiveQueries.GetSelectQueryForWp(workPackageId, new[] { idFilter }, true);

            var maintenanceDirectives = _loader.GetObjectListAll <MaintenanceDirective>(qrs, true);
            //связь КИТов с родительскими деталями
            foreach (var mpd in maintenanceDirectives)
            {
                resultKits.AddRange(mpd.Kits.ToArray());
            }

            #endregion

            return(resultKits);
        }