Пример #1
0
        /// <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);

                            // Обновляем состояние объекта
                            _componentCore.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);

                        // Обновляем состояние объекта
                        _componentCore.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);

                    // Обновляем состояние объекта
                    _componentCore.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");
            }
        }
Пример #2
0
        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);
                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)
                });

                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).Distinct().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).Distinct().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).Distinct().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)
                {
                    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)
                        {
                            _componentCore.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
                            }
                        };
                    }


                    document.Files = new CommonCollection <ItemFileLink>(links.Where(i => i.ParentId == document.ItemId));
                }
                return(result.ToList());
            }
        }