public List <Document> GetDocuments(BaseEntityObject parent, DocumentType docType, bool onlyOperatorDocs = false) { if (parent is Aircraft) { var filters = new List <Filter> { new Filter("ParentAircraftId", parent.ItemId) }; if (docType != DocumentType.Other) { filters.Add(new Filter("DocTypeId", docType.ItemId)); } var result = _newLoader.GetObjectListAll <DocumentDTO, Document>(filters, true); foreach (Document doc in result) { doc.Parent = parent; } return(result.ToList()); } if (parent is Specialist || parent is Supplier) { var filters = new List <Filter> { new Filter("ParentTypeId", parent.SmartCoreObjectType.ItemId), new Filter("ParentID", parent.ItemId) }; if (docType != DocumentType.Other) { filters.Add(new Filter("DocTypeId", docType.ItemId)); } var result = _newLoader.GetObjectListAll <DocumentDTO, Document>(filters, true); foreach (Document doc in result) { doc.Parent = parent; } return(result.ToList()); } else { var filters = new List <Filter>(); if (docType != DocumentType.Other) { filters.Add(new Filter("DocTypeId", docType.ItemId)); } if (onlyOperatorDocs) { filters.AddRange(new[] { new Filter("ParentTypeId", parent.SmartCoreObjectType.ItemId), new Filter("ParentID", parent.ItemId) }); } else { var types = new[] { SmartCoreType.Aircraft.ItemId, SmartCoreType.Operator.ItemId, SmartCoreType.Employee.ItemId, SmartCoreType.Component.ItemId, SmartCoreType.WorkPackage.ItemId, SmartCoreType.ComponentDirective.ItemId, SmartCoreType.DirectiveRecord.ItemId, SmartCoreType.AircraftFlight.ItemId, SmartCoreType.FlightNumberPeriod.ItemId, SmartCoreType.FlightPlanOpsRecords.ItemId }; filters.AddRange(new[] { new Filter("ParentTypeId", types) }); } var emp = new List <Specialist>(); var directiveRecords = new List <DirectiveRecord>(); var result = _newLoader.GetObjectListAll <DocumentDTO, Document>(filters, true); var empDocumentIds = result.Where(x => x.ParentTypeId == SmartCoreType.Employee.ItemId).Select(x => x.ParentId).ToArray(); if (empDocumentIds.Length > 0) { emp.AddRange(_newLoader.GetObjectListAll <SpecialistDTO, Specialist>(new Filter("ItemId", empDocumentIds))); } var directiveRecorIds = result.Where(x => x.ParentTypeId == SmartCoreType.DirectiveRecord.ItemId).Select(x => x.ParentId).ToArray(); if (directiveRecorIds.Length > 0) { directiveRecords.AddRange(_newLoader.GetObjectListAll <DirectiveRecordDTO, DirectiveRecord>(new Filter("ItemId", directiveRecorIds))); } //TODO:(Важно) Зря грузим компоненты и рабочие пакеты только для того что бы взять воздушное судно(подумать в сторону того чтобы Parent присваивать компнент либо раб пакет) var compDocumentIds = result.Where(x => x.ParentTypeId == SmartCoreType.Component.ItemId).Select(x => x.ParentId).ToArray(); var components = new List <Entities.General.Accessory.Component>(); if (compDocumentIds.Length > 0) { components = _newLoader.GetObjectListAll <ComponentDTO, Entities.General.Accessory.Component>(new List <Filter>() { new Filter("IsBaseComponent", false), new Filter("ItemId", compDocumentIds) }, true).ToList(); } var compDirectiveIds = result.Where(x => x.ParentTypeId == SmartCoreType.ComponentDirective.ItemId).Select(x => x.ParentId).ToList(); compDirectiveIds.AddRange(directiveRecords.Where(d => d.ParentType.ItemId == SmartCoreType.ComponentDirective.ItemId).Select(x => x.ParentId)); var componentDirctivess = new List <ComponentDirective>(); if (compDirectiveIds.Count > 0) { componentDirctivess = _componentCore.GetComponentDirectives(compDirectiveIds); } var directiveIds = directiveRecords.Where(d => d.ParentType.ItemId == SmartCoreType.Directive.ItemId).Select(x => x.ParentId).ToArray(); var dirctives = new List <Directive>(); //if (directiveIds.Length > 0) //dirctives = _newLoader.GetObjectListAll<DirectiveDTO, Directive>(new Filter("ItemId", directiveIds)).ToList(); if (directiveIds.Length > 0) { dirctives = _loader.GetObjectListAll <Directive>(new ICommonFilter[] { new CommonFilter <int>(Directive.ItemIdProperty, FilterType.In, directiveIds), }).ToList(); } var wptIds = result.Where(x => x.ParentTypeId == SmartCoreType.WorkPackage.ItemId).Select(x => x.ParentId).ToArray(); var wps = new List <WorkPackage>(); if (wptIds.Length > 0) { wps.AddRange(_newLoader.GetObjectListAll <WorkPackageDTO, WorkPackage>(new Filter("ItemId", wptIds))); } var resId = result.Select(r => r.ItemId); var links = _newLoader.GetObjectListAll <ItemFileLinkDTO, ItemFileLink>(new List <Filter>() { new Filter("ParentTypeId", SmartCoreType.Document.ItemId), new Filter("ParentId", resId) }); var aircraftFlights = new List <AircraftFlight>(); var aircraftFlightids = result.Where(x => x.ParentTypeId == SmartCoreType.AircraftFlight.ItemId).Select(x => x.ParentId).ToArray(); if (aircraftFlightids.Length > 0) { aircraftFlights.AddRange(_newLoader.GetObjectListAll <AircraftFlightDTO, AircraftFlight>(new Filter("ItemId", aircraftFlightids))); } var planOpsRecordIds = result.Where(x => x.ParentTypeId == SmartCoreType.FlightPlanOpsRecords.ItemId).Select(x => x.ParentId).ToArray(); var planOpsRecords = new List <FlightPlanOpsRecords>(); if (planOpsRecordIds.Length > 0) { planOpsRecords.AddRange(_newLoader.GetObjectListAll <FlightPlanOpsRecordsDTO, FlightPlanOpsRecords>(new Filter("ItemId", planOpsRecordIds))); } foreach (Document document in result) { document.HaveFile = links.FirstOrDefault(l => l.ParentId == document.ItemId) != null; if (document.ParentTypeId == SmartCoreType.Aircraft.ItemId) { var a = _aircraftsCore.GetAircraftById(document.ParentId); if (a != null) { document.Parent = a; } else { document.Parent = new Aircraft { IsDeleted = true, RegistrationNumber = "Can't find aircraft with id = " + document.ParentId } }; } else if (document.ParentTypeId == SmartCoreType.Employee.ItemId) { document.Specialist = emp.FirstOrDefault(e => e.ItemId == document.ParentId); } else if (document.ParentTypeId == SmartCoreType.Component.ItemId) { var comp = components.FirstOrDefault(e => e.ItemId == document.ParentId); if (comp != null) { _newLoader.SetDestinations(comp); if (comp.ParentAircraftId > 0) { document.Parent = _aircraftsCore.GetAircraftById(comp.ParentAircraftId); } else if (comp.ParentStoreId > 0) { document.Parent = _casEnvironment.Stores.GetItemById(comp.ParentStoreId); } } } else if (document.ParentTypeId == SmartCoreType.ComponentDirective.ItemId) { var cd = componentDirctivess.FirstOrDefault(c => c.ItemId == document.ParentId); if (cd != null) { try { if (cd.ParentComponent?.ParentAircraftId > 0) { document.Parent = _aircraftsCore.GetAircraftById(cd.ParentComponent.ParentAircraftId); } else if (cd.ParentComponent?.ParentStoreId > 0) { document.Parent = _casEnvironment.Stores.GetItemById(cd.ParentComponent.ParentStoreId); } } catch (Exception e) { Console.WriteLine(e); throw; } } } else if (document.ParentTypeId == SmartCoreType.WorkPackage.ItemId) { var wp = wps.FirstOrDefault(w => w.ItemId == document.ParentId); if (wp != null) { document.Parent = _aircraftsCore.GetAircraftById(wp.ParentId); } } else if (document.ParentTypeId == SmartCoreType.DirectiveRecord.ItemId) { var directive = directiveRecords.FirstOrDefault(d => d.ItemId == document.ParentId); if (directive != null) { if (directive.ParentType == SmartCoreType.ComponentDirective) { var cd = componentDirctivess.FirstOrDefault(e => e.ItemId == directive.ParentId); if (cd != null) { if (cd.ParentComponent.ParentAircraftId > 0) { document.Parent = _aircraftsCore.GetAircraftById(cd.ParentComponent.ParentAircraftId); } else if (cd.ParentComponent.ParentStoreId > 0) { document.Parent = _casEnvironment.Stores.GetItemById(cd.ParentComponent.ParentStoreId); } } } else if (directive.ParentType == SmartCoreType.Directive) { var d = dirctives.FirstOrDefault(e => e.ItemId == directive.ParentId); if (d != null) { if (d.ParentBaseComponent?.ParentAircraftId > 0) { document.Parent = _aircraftsCore.GetAircraftById(d.ParentBaseComponent.ParentAircraftId); } } } } } else if (document.ParentTypeId == SmartCoreType.AircraftFlight.ItemId) { var flight = aircraftFlights.FirstOrDefault(d => d.ItemId == document.ParentId); if (flight != null) { document.Parent = _aircraftsCore.GetAircraftById(flight.AircraftId); } } else if (document.ParentTypeId == SmartCoreType.FlightPlanOpsRecords.ItemId) { document.Parent = planOpsRecords.FirstOrDefault(d => d.ItemId == document.ParentId); } else { var a = _casEnvironment.Operators.GetItemById(document.ParentId); if (a != null) { document.Parent = a; } else { document.Parent = new Operator { IsDeleted = true, Name = "Can't find operator with id = " + document.ParentId } }; } } return(result.ToList()); } }
/// <summary> /// Удаление TransferRecord /// </summary> /// <param name="transferRecord"></param> public void Delete(TransferRecord transferRecord) { // Ограничение - если у агрегата только одна transfer record - мы не можем ее удалить ... // Добавление & удаление transfer record влияет на математический аппарат // Обнуляем математический аппарат if (transferRecord.ParentComponent != null) { if (transferRecord.ParentComponent.TransferRecords.Count == 1) { throw new Exception("1153: Can not delete single transfer record"); } if (transferRecord.ConsumableId > 0) { //Поиск комплектующего, часть которого была перемещена данной записью Entities.General.Accessory.Component fromConsumable = _componentCore.GetBaseComponentById(transferRecord.ConsumableId) ?? _componentCore.GetComponentById(transferRecord.ConsumableId); if (fromConsumable != null) { //комплектующее найдено //Проверка, находится ли то комплектующее, часть которого была перемещена //на той же локации, с которой была перемещена данная часть TransferRecord consumLocation = fromConsumable.TransferRecords.GetLast(); if (consumLocation != null && ((consumLocation.DestinationObjectType == SmartCoreType.BaseComponent && consumLocation.DestinationObjectId == transferRecord.FromBaseComponentId) || (consumLocation.DestinationObjectType == SmartCoreType.Aircraft && consumLocation.DestinationObjectId == transferRecord.FromAircraftId) || (consumLocation.DestinationObjectType == SmartCoreType.Store && consumLocation.DestinationObjectId == transferRecord.FromStoreId))) { //Если последняя точка назначения исходного комплектующего //совпадает с отправной точкой данной части исходного комплектующего //то необходимо удалить данную часть комплектующуго, а кол-во //перемещенных единиц добавить к исходному комплектующему transferRecord.ParentComponent.IsDeleted = true; _newKeeper.Delete(transferRecord.ParentComponent, true, false); fromConsumable.Quantity += transferRecord.ParentComponent.Quantity > 0 ? transferRecord.ParentComponent.Quantity : 1; _componentCore.Save(fromConsumable); } else { // Иначе, если не найдена последняя запись о перемещении // исходного расходника или // если исходный расходник был перемещен с отправной точки данной части // то нужно произвести простой откат данной записи о перемещении // Сохраняем запись transferRecord.IsDeleted = true; _newKeeper.Save(transferRecord); transferRecord.ParentComponent.TransferRecords.Remove(transferRecord); // Обновляем состояние объекта _newLoader.SetDestinations(transferRecord.ParentComponent); if (transferRecord.ParentComponent is BaseComponent) { _calculator.ResetMath((BaseComponent)transferRecord.ParentComponent); } } } else { // если исходный расходник не найден // то нужно произвести простой откат данной записи о перемещении // Сохраняем запись transferRecord.IsDeleted = true; _newKeeper.Save(transferRecord); transferRecord.ParentComponent.TransferRecords.Remove(transferRecord); // Обновляем состояние объекта _newLoader.SetDestinations(transferRecord.ParentComponent); if (transferRecord.ParentComponent is BaseComponent) { _calculator.ResetMath((BaseComponent)transferRecord.ParentComponent); } } } else { // Сохраняем запись transferRecord.IsDeleted = true; _newKeeper.Save(transferRecord); transferRecord.ParentComponent.TransferRecords.Remove(transferRecord); // Обновляем состояние объекта _newLoader.SetDestinations(transferRecord.ParentComponent); if (transferRecord.ParentComponent is BaseComponent) { _calculator.ResetMath((BaseComponent)transferRecord.ParentComponent); } } } else { throw new Exception("1000: Failed to specify tranfer record parent type"); } }