Exemple #1
0
        ///<summary>
        ///</summary>
        ///<param name="initialCollection"></param>
        ///<param name="resultCollection"></param>
        private void FilterItems(IEnumerable <WorkPackage> initialCollection, ICommonCollection <WorkPackage> resultCollection)
        {
            if (_filter == null || _filter.All(i => i.Values.Length == 0))
            {
                resultCollection.Clear();
                resultCollection.AddRange(initialCollection);
                return;
            }

            resultCollection.Clear();

            foreach (var pd in initialCollection)
            {
                //if (pd.MaintenanceCheck != null && pd.MaintenanceCheck.Name == "2C")
                //{
                //    pd.MaintenanceCheck.ToString();
                //}
                if (_filter.FilterTypeAnd)
                {
                    var acceptable = true;
                    foreach (var filter in _filter)
                    {
                        acceptable = filter.Acceptable(pd); if (!acceptable)
                        {
                            break;
                        }
                    }
                    if (acceptable)
                    {
                        resultCollection.Add(pd);
                    }
                }
                else
                {
                    var acceptable = true;
                    foreach (var filter in _filter)
                    {
                        if (filter.Values == null || filter.Values.Length == 0)
                        {
                            continue;
                        }
                        acceptable = filter.Acceptable(pd); if (acceptable)
                        {
                            break;
                        }
                    }
                    if (acceptable)
                    {
                        resultCollection.Add(pd);
                    }
                }
            }
        }
Exemple #2
0
        ///<summary>
        ///</summary>
        ///<param name="initialCollection"></param>
        ///<param name="resultCollection"></param>
        protected void FilterItems(ICommonCollection initialCollection, ICommonCollection resultCollection)
        {
            if (_filter == null || _filter.All(i => i.Values.Length == 0))
            {
                resultCollection.Clear();
                resultCollection.AddRange(initialCollection);
                return;
            }

            resultCollection.Clear();

            foreach (BaseEntityObject pd in initialCollection)
            {
                //if (pd.MaintenanceCheck != null && pd.MaintenanceCheck.Name == "2C")
                //{
                //    pd.MaintenanceCheck.ToString();
                //}
                if (_filter.FilterTypeAnd)
                {
                    bool acceptable = true;
                    foreach (ICommonFilter filter in _filter)
                    {
                        acceptable = filter.Acceptable(pd); if (!acceptable)
                        {
                            break;
                        }
                    }
                    if (acceptable)
                    {
                        resultCollection.Add(pd);
                    }
                }
                else
                {
                    bool acceptable = true;
                    foreach (ICommonFilter filter in _filter)
                    {
                        if (filter.Values == null || filter.Values.Length == 0)
                        {
                            continue;
                        }
                        acceptable = filter.Acceptable(pd); if (acceptable)
                        {
                            break;
                        }
                    }
                    if (acceptable)
                    {
                        resultCollection.Add(pd);
                    }
                }
            }
        }
        ///<summary>
        ///</summary>
        ///<param name="initialCollection"></param>
        ///<param name="resultCollection"></param>
        private void AdditionalFilterItems(IEnumerable <BaseEntityObject> initialCollection, ICommonCollection <BaseEntityObject> resultCollection)
        {
            if (_additionalfilter == null || _additionalfilter.Count == 0)
            {
                resultCollection.Clear();
                resultCollection.AddRange(initialCollection);
                return;
            }

            resultCollection.Clear();

            foreach (BaseEntityObject pd in initialCollection)
            {
                //if (pd.MaintenanceCheck != null && pd.MaintenanceCheck.Name == "2C")
                //{
                //    pd.MaintenanceCheck.ToString();
                //}
                if (_additionalfilter.FilterTypeAnd)
                {
                    bool acceptable = true;
                    foreach (ICommonFilter filter in _additionalfilter)
                    {
                        acceptable = filter.Acceptable(pd); if (!acceptable)
                        {
                            break;
                        }
                    }
                    if (acceptable)
                    {
                        resultCollection.Add(pd);
                    }
                }
                else
                {
                    bool acceptable = true;
                    foreach (ICommonFilter filter in _additionalfilter)
                    {
                        if (filter.Values == null || filter.Values.Length == 0)
                        {
                            continue;
                        }
                        acceptable = filter.Acceptable(pd); if (acceptable)
                        {
                            break;
                        }
                    }
                    if (acceptable)
                    {
                        resultCollection.Add(pd);
                    }
                }
            }
        }
Exemple #4
0
        ///<summary>
        ///</summary>
        ///<param name="initialCollection"></param>
        ///<param name="resultCollection"></param>
        private void FilterItems(IEnumerable <NextPerformance> initialCollection, ICommonCollection <NextPerformance> resultCollection)
        {
            if (_filter == null || _filter.All(i => i.Values.Length == 0))
            {
                resultCollection.Clear();
                resultCollection.AddRange(initialCollection);
                return;
            }

            resultCollection.Clear();

            foreach (NextPerformance pd in initialCollection)
            {
                //if (pd.Parent != null && pd.Parent is MaintenanceCheck && ((MaintenanceCheck)pd.Parent).Name == "C02")
                //{
                //    pd.ToString();
                //}
                if (_filter.FilterTypeAnd)
                {
                    bool acceptable = true;
                    foreach (ICommonFilter filter in _filter)
                    {
                        acceptable = filter.Acceptable(pd); if (!acceptable)
                        {
                            break;
                        }
                    }
                    if (acceptable)
                    {
                        resultCollection.Add(pd);
                    }
                }
                else
                {
                    bool acceptable = true;
                    foreach (ICommonFilter filter in _filter)
                    {
                        if (filter.Values == null || filter.Values.Length == 0)
                        {
                            continue;
                        }
                        acceptable = filter.Acceptable(pd); if (acceptable)
                        {
                            break;
                        }
                    }
                    if (acceptable)
                    {
                        resultCollection.Add(pd);
                    }
                }
            }
        }
Exemple #5
0
        public void RegisterAircraft(Aircraft aircraft, int operatorId)
        {
            if (operatorId <= 0)
            {
                throw new Exception("1650: Can not add aircraft to not existing operator");
            }

            // Сохраняем воздушное судно в базе
            aircraft.OperatorId = operatorId;
            _newKeeper.Save(aircraft);

            _aircrafts.Add(aircraft);
        }
Exemple #6
0
        ///<summary>
        ///</summary>
        ///<param name="initialCollection"></param>
        ///<param name="resultCollection"></param>
        private void FilterItems(IEnumerable <ILogistic> initialCollection, ICommonCollection <ILogistic> resultCollection)
        {
            if (_filter == null || _filter.All(i => i.Values.Length == 0))
            {
                resultCollection.Clear();
                resultCollection.AddRange(initialCollection);
                return;
            }

            resultCollection.Clear();

            foreach (var pd in initialCollection)
            {
                if (_filter.FilterTypeAnd)
                {
                    var acceptable = true;
                    foreach (var filter in _filter)
                    {
                        acceptable = filter.Acceptable(pd as BaseEntityObject);
                    }
                    if (!acceptable)
                    {
                        break;
                    }

                    if (acceptable)
                    {
                        resultCollection.Add(pd);
                    }
                }
                else
                {
                    var acceptable = true;
                    foreach (var filter in _filter)
                    {
                        if (filter.Values == null || filter.Values.Length == 0)
                        {
                            continue;
                        }
                        acceptable = filter.Acceptable(pd as BaseEntityObject); if (acceptable)
                        {
                            break;
                        }
                    }
                    if (acceptable)
                    {
                        resultCollection.Add(pd);
                    }
                }
            }
        }
Exemple #7
0
        ///<summary>
        ///</summary>
        ///<param name="initialCollection"></param>
        ///<param name="resultCollection"></param>
        private void FilterItems(IEnumerable <MailRecords> initialCollection, ICommonCollection <MailRecords> resultCollection)
        {
            if (_filter == null || _filter.All(i => i.Values.Length == 0))
            {
                resultCollection.Clear();
                resultCollection.AddRange(initialCollection);
                return;
            }

            resultCollection.Clear();

            foreach (var pd in initialCollection)
            {
                if (_filter.FilterTypeAnd)
                {
                    bool acceptable = true;
                    foreach (ICommonFilter filter in _filter)
                    {
                        acceptable = filter.Acceptable(pd); if (!acceptable)
                        {
                            break;
                        }
                    }
                    if (acceptable)
                    {
                        resultCollection.Add(pd);
                    }
                }
                else
                {
                    bool acceptable = true;
                    foreach (ICommonFilter filter in _filter)
                    {
                        if (filter.Values == null || filter.Values.Length == 0)
                        {
                            continue;
                        }
                        acceptable = filter.Acceptable(pd); if (acceptable)
                        {
                            break;
                        }
                    }
                    if (acceptable)
                    {
                        resultCollection.Add(pd);
                    }
                }
            }
        }
Exemple #8
0
        public void CalculateMaintenanceDirectives(IList <MaintenanceDirective> maintenanceDirectives, Dictionary <IBindedItem, List <IDirective> > bindedItemsDict)
        {
            foreach (var mpd in maintenanceDirectives)
            {
                GlobalObjects.MTOPCalculator.CalculateDirectiveNew(mpd);

                if (bindedItemsDict.ContainsKey(mpd))
                {
                    var bindedItems = bindedItemsDict[mpd];
                    foreach (var bindedItem in bindedItems)
                    {
                        if (bindedItem is ComponentDirective)
                        {
                            GlobalObjects.MTOPCalculator.CalculateDirectiveNew(bindedItem as ComponentDirective);

                            var firstNextPerformance =
                                bindedItemsDict[mpd].SelectMany(t => t.NextPerformances).OrderBy(n => n.NextPerformanceDate).FirstOrDefault();

                            if (firstNextPerformance == null)
                            {
                                continue;
                            }
                            mpd.BindedItemNextPerformance       = firstNextPerformance;
                            mpd.BindedItemNextPerformanceSource = firstNextPerformance.NextPerformanceSource ?? Lifelength.Null;
                            mpd.BindedItemRemains             = firstNextPerformance.Remains ?? Lifelength.Null;
                            mpd.BindedItemNextPerformanceDate = firstNextPerformance.NextPerformanceDate;
                            mpd.BindedItemCondition           = firstNextPerformance.Condition ?? ConditionState.NotEstimated;
                        }
                    }
                }

                _initialDirectiveArray.Add(mpd);
            }
        }
Exemple #9
0
        protected override void AnimatedThreadWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            _initialDirectiveArray.Clear();
            _resultDirectiveArray.Clear();
            AnimatedThreadWorker.ReportProgress(0, "load directives");

            if (!string.IsNullOrEmpty(TextBoxFilter.Text))
            {
                var dir = new List <Directive>();

                try
                {
                    dir.AddRange(GlobalObjects.DirectiveCore.GetDirectivesFromAllAircrafts(DirectiveType.AirworthenessDirectives, TextBoxFilter.Text, TextBoxFilterParagraph.Text));
                }
                catch (Exception ex)
                {
                    Program.Provider.Logger.Log("Error while loading directives", ex);
                }


                AnimatedThreadWorker.ReportProgress(40, "filter directives");

                #region Калькуляция состояния директив

                AnimatedThreadWorker.ReportProgress(60, "calculation of directives");

                foreach (Directive pd in dir)
                {
                    var aircrraft =
                        GlobalObjects.AircraftsCore.GetAircraftById(pd.ParentBaseComponent?.ParentAircraftId ?? -1);

                    if (aircrraft != null)
                    {
                        GlobalObjects.MTOPCalculator.CalculateDirectiveNew(pd);
                        _initialDirectiveArray.Add(pd);
                    }
                }

                AnimatedThreadWorker.ReportProgress(70, "filter directives");

                FilterItems(_initialDirectiveArray, _resultDirectiveArray);

                if (AnimatedThreadWorker.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }


                if (AnimatedThreadWorker.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }
                #endregion

                AnimatedThreadWorker.ReportProgress(100, "Complete");
            }
        }
        private void GetFromClipboard()
        {
            try
            {
                var format = typeof(Document[]).FullName;

                if (string.IsNullOrEmpty(format))
                {
                    return;
                }
                if (!Clipboard.ContainsData(format))
                {
                    return;
                }
                var documents = (Document[])Clipboard.GetData(format);
                if (documents == null)
                {
                    return;
                }

                var objectsToPaste = new List <Document>();
                foreach (var document in documents)
                {
                    document.Parent   = _currentItem;
                    document.ParentId = _currentItem.ItemId;
                    _initialDocumentArray.Add(document);
                    document.ContractNumber += " Copy";
                    objectsToPaste.Add(document);
                }

                if (objectsToPaste.Count > 0)
                {
                    documentationListView.InsertItems(objectsToPaste.ToArray());
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error while inserting new object(s). \n" + ex);
                Program.Provider.Logger.Log(ex);
            }
            finally
            {
                Clipboard.Clear();
            }
        }
Exemple #11
0
        public static void SetFileByFileLinkType(this ICommonCollection <ItemFileLink> files, int typeId, AttachedFile file, FileLinkType fileLinkType)
        {
            var link = files.FirstOrDefault(i => i.LinkType == (short)fileLinkType);

            if (link != null)
            {
                link.File = file;
            }
            else if (file != null)
            {
                files.Add(new ItemFileLink
                {
                    ParentTypeId = typeId,
                    LinkType     = (short)fileLinkType,
                    File         = file
                });
            }
        }
        private void ButtonCreateAircraftClick(object sender, EventArgs e)
        {
            if (listViewMain.SelectedItems.Count == 0)
            {
                return;
            }

            string message;

            if (!ValidateData(out message))
            {
                message += "\nAbort operation";
                MessageBox.Show(message, (string)new GlobalTermsProvider()["SystemName"],
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            string typeName = _type.Name;

            DialogResult confirmResult =
                MessageBox.Show(listViewMain.SelectedItems.Count == 1
                                                ? "Do you really want to delete " + typeName + " " + listViewMain.SelectedItems[0].Tag + "?"
                                                : "Do you really want to delete selected " + typeName + "s?", "Confirm delete operation",
                                MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

            if (confirmResult == DialogResult.Yes)
            {
                _deletedObjects.Clear();

                foreach (ListViewItem directive in listViewMain.SelectedItems)
                {
                    _deletedObjects.Add((BaseEntityObject)directive.Tag);
                }

                _animatedThreadWorker.DoWork             -= AnimatedThreadWorkerDoLoad;
                _animatedThreadWorker.DoWork             += AnimatedThreadWorkerDoCreate;
                _animatedThreadWorker.RunWorkerCompleted -= BackgroundWorkerRunWorkerLoadCompleted;
                _animatedThreadWorker.RunWorkerCompleted += BackgroundWorkerRunWorkerCreateCompleted;
                _animatedThreadWorker.RunWorkerAsync();
            }
        }
 /// <summary>
 /// Метод возвращает массив директив
 /// </summary>
 /// <returns>Массив директив</returns>
 public virtual ICommonCollection GetItemsArray()
 {
     try
     {
         int  count       = itemsListView.Items.Count;
         Type genericType = typeof(CommonCollection <>);
         Type genericList = genericType.MakeGenericType(_viewedType);
         ICommonCollection returnDetailArray = (ICommonCollection)Activator.CreateInstance(genericList);
         if (count > 0)
         {
             for (int i = 0; i < count; i++)
             {
                 returnDetailArray.Add(itemsListView.Items[i].Tag as BaseEntityObject);
             }
         }
         return(returnDetailArray);
     }
     catch (Exception ex)
     {
         Program.Provider.Logger.Log("Error while building collection", ex);
         return(null);
     }
 }
        private void UpdateInformation()
        {
            if (_currentItem == null)
            {
                return;
            }

            _initialDocumentArray.Clear();
            _resultDocumentArray.Clear();

            if (_firstLoad)
            {
                _firstLoad = false;
                if (_currentItem.EmployeeFlights.Count > 0)
                {
                    dateTimePickerDateFrom.Value = _currentItem.EmployeeFlights.FirstOrDefault().RecordDate;
                    dateTimePickerDateTo.Value   = _currentItem.EmployeeFlights.LastOrDefault().RecordDate;
                }
            }

            foreach (var t in _currentItem.EmployeeFlights)
            {
                if (t.FlightDate >= dateTimePickerDateFrom.Value &&
                    t.FlightDate <= dateTimePickerDateTo.Value)
                {
                    _initialDocumentArray.Add(t);
                }
            }

            //_initialDocumentArray.AddRange(_currentItem.EmployeeFlights.ToArray());

            FilterItems(_initialDocumentArray, _resultDocumentArray);

            employeeFlightListView.Flights = new AircraftFlightCollection(_initialDocumentArray.ToArray());
            employeeFlightListView.SetItemsArray(_resultDocumentArray.ToArray());
            employeeFlightListView.Focus();
        }
Exemple #15
0
        protected override void AnimatedThreadWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            _initialDirectiveArray.Clear();
            _resultDirectiveArray.Clear();
            _preResultDirectiveArray.Clear();

            var transfer = new List <TransferRecord>();

            transfer.AddRange(GlobalObjects.TransferRecordCore.GetPreTransferRecordsFrom(_currentBaseComponent));

            var preResult = new List <Component>();

            preResult.AddRange(transfer.Select(i => i.ParentComponent).ToList());

            AnimatedThreadWorker.ReportProgress(50, "filter components");

            InitialFilterItems(preResult, _initialDirectiveArray);

            preResult.Clear();

            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }

            #region Калькуляция состояния компонентов

            AnimatedThreadWorker.ReportProgress(70, "calculation of components");

            foreach (Component detail in _initialDirectiveArray)
            {
                GlobalObjects.PerformanceCalculator.GetNextPerformance(detail);
                _preResultDirectiveArray.Add(detail);

                foreach (ComponentDirective detailDirective in detail.ComponentDirectives)
                {
                    GlobalObjects.PerformanceCalculator.GetNextPerformance(detailDirective);
                    _preResultDirectiveArray.Add(detailDirective);
                }
            }

            AdditionalFilterItems(_preResultDirectiveArray, _resultDirectiveArray);

            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            #endregion

            #region Сравнение с рабочими пакетами

            AnimatedThreadWorker.ReportProgress(90, "comparison with the Work Packages");

            //загрузка рабочих пакетов для определения
            //перекрытых ими выполнений задач
            if (_openPubWorkPackages == null)
            {
                _openPubWorkPackages = new CommonCollection <WorkPackage>();
            }

            _openPubWorkPackages.Clear();
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Opened));
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Published));
            //сбор всех записей рабочих пакетов для удобства фильтрации
            List <WorkPackageRecord> openWPRecords = new List <WorkPackageRecord>();
            foreach (WorkPackage openWorkPackage in _openPubWorkPackages)
            {
                openWPRecords.AddRange(openWorkPackage.WorkPakageRecords);
            }

            foreach (IDirective dir in _resultDirectiveArray)
            {
                if (dir.NextPerformances == null || dir.NextPerformances.Count <= 0)
                {
                    continue;
                }
                BaseEntityObject baseObject = (BaseEntityObject)dir;
                //Проход по всем след. выполнениям чека и записям в рабочих пакетах
                //для поиска перекрывающихся выполнений
                List <NextPerformance> performances = dir.NextPerformances;
                foreach (NextPerformance np in performances)
                {
                    //поиск записи в рабочих пакетах по данному чеку
                    //чей номер группы выполнения (по записи) совпадает с расчитанным
                    WorkPackageRecord wpr =
                        openWPRecords.FirstOrDefault(r => r.PerformanceNumFromStart == np.PerformanceNum &&
                                                     r.WorkPackageItemType == baseObject.SmartCoreObjectType.ItemId &&
                                                     r.DirectiveId == baseObject.ItemId);
                    if (wpr != null)
                    {
                        np.BlockedByPackage = _openPubWorkPackages.GetItemById(wpr.WorkPakageId);
                    }
                }
            }

            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            #endregion

            #region Загрузка Котировочных ордеров

            AnimatedThreadWorker.ReportProgress(95, "Load Quotations");

            //загрузка рабочих пакетов для определения
            //перекрытых ими выполнений задач
            if (_openPubQuotations == null)
            {
                _openPubQuotations = new CommonCollection <RequestForQuotation>();
            }

            _openPubQuotations.Clear();
            _openPubQuotations.AddRange(GlobalObjects.PurchaseCore.GetRequestForQuotation(CurrentAircraft, new[] { WorkPackageStatus.Opened, WorkPackageStatus.Published }));

            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            #endregion

            AnimatedThreadWorker.ReportProgress(100, "Complete");
        }
Exemple #16
0
        protected override void AnimatedThreadWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            AnimatedThreadWorker.ReportProgress(0, "load components");

            var resultCollection = new ComponentCollection();

            _preResultDirectiveArray.Clear();
            _resultDirectiveArray.Clear();
            _removedComponents.Clear();
            _removedTransfers.Clear();
            _waitRemoveConfirmComponents.Clear();
            _waitRemoveConfirmTransfers.Clear();
            _installedComponents.Clear();
            _installedTransfers.Clear();

            #region Загрузка всех компонентов

            resultCollection = GlobalObjects.ComponentCore.GetSupplierProcessing();


            //////////////////////////////////////////////////////
            //     проверка на установленные компоненты         //
            //////////////////////////////////////////////////////
            var lastInstalledDetails = resultCollection.GetLastInstalledComponentsOnProcessing();
            foreach (var component in lastInstalledDetails)
            {
                _installedComponents.Add(component);
                _installedTransfers.Add(component.TransferRecords.GetLast());

                //удаление данного компонента из коллекции
                //т.к. его отображать не нужно
                resultCollection.Remove(component);
            }

            //////////////////////////////////////////////////////
            //        проверка на удаленные компоненты          //
            //////////////////////////////////////////////////////

            //извлечение из базы данных всех записей о перемещении
            //компонентов с данного базового агрегата
            var records = new TransferRecordCollection();
            records.AddRange(GlobalObjects.TransferRecordCore.GetLastTransferRecordsFromSuppliers().ToArray());
            records.AddRange(GlobalObjects.TransferRecordCore.GetLastTransferRecordsFromSpecialist().ToArray());

            foreach (var record in records)
            {
                //загрузка и БД детали, которой пренадлежит данная запись о перемещении
                var component = GlobalObjects.ComponentCore.GetComponentById(record.ParentId);

                if (component == null)
                {
                    continue;
                }

                if (record.DODR)
                {
                    //если перемещение подтверждено, то деталь записывается в "перемещенные"
                    //окна "TransferedDetails"
                    if (_removedComponents.CompareAndAdd(component))
                    {
                        _removedTransfers.Add(record);
                    }
                }
                else
                {
                    //если перемещение не подтверждено, то деталь записывается в
                    //"ожидабщие подтверждения" окна "TransferedDetails"
                    if (_waitRemoveConfirmComponents.CompareAndAdd(component))
                    {
                        _waitRemoveConfirmTransfers.Add(record);
                    }
                }
            }


            #endregion

            #region Слияние компонентов в одну коллекцию

            AnimatedThreadWorker.ReportProgress(40, "calculation of components");

            foreach (var component in resultCollection)
            {
                _preResultDirectiveArray.Add(component);
            }

            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            #endregion

            AdditionalFilterItems(_preResultDirectiveArray, _resultDirectiveArray);

            AnimatedThreadWorker.ReportProgress(100, "calculation over");
        }
Exemple #17
0
        protected override void AnimatedThreadWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            _initialDirectiveArray.Clear();
            _resultDirectiveArray.Clear();

            AnimatedThreadWorker.ReportProgress(0, "load directives");

            try
            {
                if (_currentForecast == null)
                {
                    var aircrafts = GlobalObjects.AircraftsCore.GetAllAircrafts();
                    foreach (var aircraft in aircrafts)
                    {
                        _initialDirectiveArray.AddRange(GlobalObjects.DirectiveCore.GetDeferredItems(null, aircraft));
                    }
                }
                else
                {
                    AnimatedThreadWorker.ReportProgress(20, "calculation directives");

                    GlobalObjects.AnalystCore.GetDirectives(_currentForecast, _currentPrimaryDirectiveType);
                    DirectiveCollection dirC = _currentForecast.DirectiveCollections[_currentPrimaryDirectiveType];
                    foreach (Directive directive in dirC)
                    {
                        _initialDirectiveArray.Add(directive);
                    }
                }
            }
            catch (Exception ex)
            {
                Program.Provider.Logger.Log("Error while loading directives", ex);
            }
            AnimatedThreadWorker.ReportProgress(40, "filter directives");
            if (_adType != ADType.None)
            {
                List <Directive> forDeleting =
                    _initialDirectiveArray.Where(primaryDirective => primaryDirective.ADType != _adType).ToList();

                foreach (Directive directive in forDeleting)
                {
                    _initialDirectiveArray.Remove(_initialDirectiveArray.GetItemById(directive.ItemId));
                }
            }

            #region Калькуляция состояния директив

            AnimatedThreadWorker.ReportProgress(60, "calculation of directives");

            foreach (Directive pd in _initialDirectiveArray)
            {
                //GlobalObjects.PerformanceCalculator.GetNextPerformance(pd);
                GlobalObjects.MTOPCalculator.CalculateDirectiveNew(pd);
            }

            AnimatedThreadWorker.ReportProgress(70, "filter directives");

            FilterItems(_initialDirectiveArray, _resultDirectiveArray);

            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }


            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            #endregion

            #region Сравнение с рабочими пакетами

            AnimatedThreadWorker.ReportProgress(90, "comparison with the Work Packages");

            //загрузка рабочих пакетов для определения
            //перекрытых ими выполнений задач
            if (_openPubWorkPackages == null)
            {
                _openPubWorkPackages = new CommonCollection <WorkPackage>();
            }

            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Opened));
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Published));

            //сбор всех записей рабочих пакетов для удобства фильтрации
            List <WorkPackageRecord> openWPRecords = new List <WorkPackageRecord>();
            foreach (WorkPackage openWorkPackage in _openPubWorkPackages)
            {
                openWPRecords.AddRange(openWorkPackage.WorkPakageRecords);
            }

            foreach (Directive task in _resultDirectiveArray)
            {
                if (task == null || task.NextPerformances == null || task.NextPerformances.Count <= 0)
                {
                    continue;
                }
                //Проход по всем след. выполнениям чека и записям в рабочих пакетах
                //для поиска перекрывающихся выполнений
                List <NextPerformance> performances = task.NextPerformances;
                foreach (NextPerformance np in performances)
                {
                    //поиск записи в рабочих пакетах по данному чеку
                    //чей номер группы выполнения (по записи) совпадает с расчитанным
                    WorkPackageRecord wpr =
                        openWPRecords.Where(r => r.PerformanceNumFromStart == np.PerformanceNum &&
                                            r.WorkPackageItemType == task.SmartCoreObjectType.ItemId &&
                                            r.DirectiveId == task.ItemId).FirstOrDefault();
                    if (wpr != null)
                    {
                        np.BlockedByPackage = _openPubWorkPackages.GetItemById(wpr.WorkPakageId);
                    }
                }
            }

            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            #endregion

            #region Загрузка Котировочных ордеров

            AnimatedThreadWorker.ReportProgress(95, "Load Quotations");

            //загрузка рабочих пакетов для определения
            //перекрытых ими выполнений задач
            if (_openPubQuotations == null)
            {
                _openPubQuotations = new CommonCollection <RequestForQuotation>();
            }

            _openPubQuotations.Clear();
            _openPubQuotations.AddRange(GlobalObjects.PurchaseCore.GetRequestForQuotation(CurrentAircraft, new[] { WorkPackageStatus.Opened, WorkPackageStatus.Published }));

            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            #endregion

            AnimatedThreadWorker.ReportProgress(100, "Complete");
        }
        protected override void AnimatedThreadWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            _initialDirectiveArray.Clear();
            _preResultDirectiveArray.Clear();
            _resultDirectiveArray.Clear();

            if (!string.IsNullOrEmpty(TextBoxFilter.Text))
            {
                ComponentCollection preResult           = new ComponentCollection();
                ComponentCollection componentCollection = new ComponentCollection();

                var temp = GlobalObjects.ComponentCore.GetComponentsAll(TextBoxFilter.Text).ToArray();

                foreach (var component in temp)
                {
                    var a = GlobalObjects.AircraftsCore.GetAircraftById(component.ParentBaseComponent?.ParentAircraftId ?? -1);
                    if (a != null)
                    {
                        componentCollection.Add(component);
                    }
                }

                var ids = new List <int>();

                foreach (var component in componentCollection)
                {
                    var lastTr = component.TransferRecords.GetLast();

                    if (lastTr?.DestinationObjectType == SmartCoreType.BaseComponent)
                    {
                        component.ParentBaseComponent = GlobalObjects.ComponentCore.GetBaseComponentById(lastTr.DestinationObjectId);
                    }

                    foreach (var componentDirective in component.ComponentDirectives)
                    {
                        foreach (var items in componentDirective.ItemRelations.Where(i =>
                                                                                     i.FirtsItemTypeId == SmartCoreType.MaintenanceDirective.ItemId ||
                                                                                     i.SecondItemTypeId == SmartCoreType.MaintenanceDirective.ItemId))
                        {
                            ids.Add(componentDirective.IsFirst == true ? items.SecondItemId : items.FirstItemId);
                        }
                    }
                }


                var mpd = GlobalObjects.MaintenanceCore.GetMaintenanceDirectiveList(ids);
                foreach (var component in componentCollection)
                {
                    foreach (var componentDirective in component.ComponentDirectives)
                    {
                        foreach (var items in componentDirective.ItemRelations.Where(i =>
                                                                                     i.FirtsItemTypeId == SmartCoreType.MaintenanceDirective.ItemId ||
                                                                                     i.SecondItemTypeId == SmartCoreType.MaintenanceDirective.ItemId))
                        {
                            var id = componentDirective.IsFirst == true ? items.SecondItemId : items.FirstItemId;
                            componentDirective.MaintenanceDirective = mpd.FirstOrDefault(i => i.ItemId == id);
                        }
                    }
                }


                AnimatedThreadWorker.ReportProgress(50, "filter components");

                InitialFilterItems(componentCollection, _initialDirectiveArray);

                preResult.Clear();

                if (AnimatedThreadWorker.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }

                #region Калькуляция состояния компонентов

                AnimatedThreadWorker.ReportProgress(70, "calculation of components");

                var lldData = GlobalObjects.CasEnvironment.Loader
                              .GetObjectList <ComponentLLPCategoryData>(new ICommonFilter[]
                {
                    new CommonFilter <int>(ComponentLLPCategoryData.ComponentIdProperty,
                                           SmartCore.Filters.FilterType.In, _initialDirectiveArray.Select(i => i.ItemId).ToArray()),
                });

                var llpchangeRec = GlobalObjects.CasEnvironment.Loader
                                   .GetObjectList <ComponentLLPCategoryChangeRecord>(new ICommonFilter[]
                {
                    new CommonFilter <int>(ComponentLLPCategoryChangeRecord.ParentIdProperty,
                                           SmartCore.Filters.FilterType.In, _initialDirectiveArray.Select(i => i.ItemId).ToArray()),
                });

                foreach (Component detail in _initialDirectiveArray)
                {
                    detail.LLPData.Clear();
                    detail.LLPData.AddRange(lldData.Where(i => i.ComponentId == detail.ItemId));

                    detail.ChangeLLPCategoryRecords.Clear();
                    detail.ChangeLLPCategoryRecords.AddRange(llpchangeRec.Where(i => i.ParentId == detail.ItemId));

                    GlobalObjects.MTOPCalculator.CalculateDirectiveNew(detail);
                    _preResultDirectiveArray.Add(detail);

                    foreach (ComponentDirective detailDirective in detail.ComponentDirectives)
                    {
                        GlobalObjects.MTOPCalculator.CalculateDirectiveNew(detailDirective);
                        _preResultDirectiveArray.Add(detailDirective);
                    }
                }

                AdditionalFilterItems(_preResultDirectiveArray, _resultDirectiveArray);

                if (AnimatedThreadWorker.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }

                #endregion

                AnimatedThreadWorker.ReportProgress(100, "Complete");
            }
        }