예제 #1
0
        /// <summary>
        /// Обновляет значения полей
        /// </summary>
        public override void FillControls()
        {
            BeginUpdate();

            _specializations.Clear();
            _specializations.AddRange(((CommonDictionaryCollection <Occupation>)GlobalObjects.CasEnvironment.GetDictionary <Occupation>()).ToArray());
            _specialists.Clear();
            _specialists.AddRange(GlobalObjects.CasEnvironment.NewLoader.GetObjectList <SpecialistDTO, Specialist>());
            if (FlightCrewRecord != null)
            {
                comboSpecialization.Items.Clear();
                comboSpecialization.Items.AddRange(_specializations.ToArray());
                comboSpecialist.Items.Clear();

                if (FlightCrewRecord.ItemId > 0)
                {
                    comboSpecialization.SelectedItem = FlightCrewRecord.Occupation;
                    Specialist selectedSpec = _specialists.GetItemById(FlightCrewRecord.Specialist.ItemId);
                    if (selectedSpec != null)
                    {
                        comboSpecialist.SelectedItem = selectedSpec;
                    }
                    else
                    {
                        //Искомый специалист недействителен
                        comboSpecialist.Items.Add(FlightCrewRecord.Specialist);
                        comboSpecialist.SelectedItem = FlightCrewRecord.Specialist;
                    }
                }
                else
                {
                    comboSpecialization.SelectedItem = FlightCrewRecord.Occupation;
                    comboSpecialist.SelectedItem     = FlightCrewRecord.Specialist != null
                        ? _specialists.GetItemById(FlightCrewRecord.Specialist.ItemId)
                        : null;
                }

                if (comboSpecialist.SelectedItem != null && ((Specialist)comboSpecialist.SelectedItem).IsDeleted)
                {
                    comboSpecialist.BackColor = Color.FromArgb(Highlight.Red.Color);
                }
                else
                {
                    comboSpecialist.BackColor = Color.White;
                }
            }
            EndUpdate();
        }
예제 #2
0
        protected override void AnimatedThreadWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                return;
            }
            //TODO:(Evgenii Babak) создать метод для получения названия ATLB по FlightId
            var last = GlobalObjects.AircraftFlightsCore.GetLastAircraftFlight(CurrentAircraft.ItemId);

            if (last != null)
            {
                var lastAtlb = _itemsArray.GetItemById(last.ATLBId);
                labelDateAsOf.Text = lastAtlb != null ? "Current ATLB: " + lastAtlb : "";
            }
            _directivesViewer.SetItemsArray(_itemsArray.ToArray());
            headerControl.PrintButtonEnabled = _directivesViewer.ItemsCount != 0;
            _directivesViewer.Focus();
        }
예제 #3
0
        /// <summary>
        /// Обновляет значения полей
        /// </summary>
        public override void FillControls()
        {
            BeginUpdate();

            _documents.Clear();
            _documents.AddRange(GlobalObjects.DocumentCore.
                                GetDocuments(ProcedureDocumentReference.Procedure.ParentOperator, DocumentType.Other, true));

            comboBoxDocument.Items.Clear();
            comboBoxDocument.Items.AddRange(_documents.ToArray());

            if (ProcedureDocumentReference != null)
            {
                if (ProcedureDocumentReference.ItemId > 0)
                {
                    comboBoxDocument.SelectedItem =
                        _documents.GetItemById(ProcedureDocumentReference.Document != null
                        ? ProcedureDocumentReference.Document.ItemId
                        : -1);
                }
            }
            EndUpdate();
        }
예제 #4
0
파일: RequestControl.cs 프로젝트: jecus/Cas
        /// <summary>
        /// Заполняет поля для редактирования директивы
        /// </summary>
        private void UpdateInformation()
        {
            _specialists.Clear();
            _specialists.AddRange(GlobalObjects.CasEnvironment.NewLoader.GetObjectList <SpecialistDTO, Specialist>());
            _qualifications.Clear();

            var awcs = GlobalObjects.CasEnvironment.GetDictionary <AircraftWorkerCategory>();

            if (awcs != null)
            {
                _qualifications.AddRange(awcs.OfType <AircraftWorkerCategory>());
            }

            comboBoxPreparedBy.Items.Clear();
            comboBoxPreparedBy.Items.AddRange(_specialists.GetValidEntries());
            comboBoxChechedBy.Items.Clear();
            comboBoxChechedBy.Items.AddRange(_specialists.GetValidEntries());
            comboBoxApprovedBy.Items.Clear();
            comboBoxApprovedBy.Items.AddRange(_specialists.GetValidEntries());

            commonListViewControlEqipmentAndMaterials.ViewedType = typeof(AccessoryRequired);
            workOrderViewControl.ViewedType = typeof(BaseEntityObject);

            if (_currentDirective == null)
            {
                return;
            }

            textboxFormRev.Text             = _currentDirective.FormRevision;
            textboxWorkOrderHeader.Text     = _currentDirective.RequestHeader;
            dateTimePickerFormRevDate.Value = _currentDirective.FormDate;
            textboxNumber.Text  = _currentDirective.Number;
            textBoxStation.Text = _currentDirective.Station;
            //textBoxMRO.Text = _currentDirective.MRO;
            textBoxTitle.Text       = _currentDirective.Title;
            textBoxDescription.Text = _currentDirective.Description;
            //textboxFooter.Text = _currentDirective.JobCardFooter;
            //textBoxAccess.Text = _currentDirective.Access;
            //textBoxZone.Text = _currentDirective.Zone;
            textBoxForm.Text = _currentDirective.Form;
            //textBoxApplicability.Text = _currentDirective.Applicability;
            //textBoxPhase.Text = _currentDirective.Phase;
            //textBoxWorkArea.Text = _currentDirective.WorkArea;
            //textBoxMMRevisionNumber.Text = _currentDirective.MaintenanceManualRevision;
            //dateTimePickerMMRevisionDate.Value = _currentDirective.MaintenanceManualRevisionDate;
            //numericUpDownManHours.Value = (decimal)_currentDirective.ManHours;
            //numericUpDownMan.Value = _currentDirective.Man;
            textBoxAttachedTo.Text           = "";
            dateTimePickerCheckedDate.Value  = _currentDirective.CheckedByDate;
            dateTimePickerApprovedDate.Value = _currentDirective.ApprovedByDate;
            dateTimePickerPreparedDate.Value = _currentDirective.PreparedByDate;

            commonListViewControlEqipmentAndMaterials.SetItemsArray(_currentDirective.Kits.ToArray());

            IEnumerable <IDirective> directives =
                _currentDirective.PackageRecords.Where(pr => pr.Task != null).Select(pr => pr.Task).ToArray();

            workOrderViewControl.SetItemsArray(directives.Select(pr => pr as BaseEntityObject));
            numericUpDownMan.Value      = directives.OfType <IEngineeringDirective>().Sum(d => d.Mans);
            numericUpDownManHours.Value = (Decimal)directives.OfType <IEngineeringDirective>().Sum(d => d.ManHours);
            numericUpDownCost.Value     = (Decimal)directives.OfType <IEngineeringDirective>().Sum(d => d.Cost);

            if (_currentDirective.PreparedBy != null)
            {
                Specialist selectedSpec = _specialists.GetItemById(_currentDirective.PreparedBy.ItemId);
                if (selectedSpec != null)
                {
                    comboBoxPreparedBy.SelectedItem = selectedSpec;
                }
                else
                {
                    //Искомый специалист недействителен
                    comboBoxPreparedBy.Items.Add(_currentDirective.PreparedBy);
                    comboBoxPreparedBy.SelectedItem = _currentDirective.PreparedBy;
                }
            }

            if (_currentDirective.CheckedBy != null)
            {
                Specialist selectedSpec = _specialists.GetItemById(_currentDirective.CheckedBy.ItemId);
                if (selectedSpec != null)
                {
                    comboBoxChechedBy.SelectedItem = selectedSpec;
                }
                else
                {
                    //Искомый специалист недействителен
                    comboBoxChechedBy.Items.Add(_currentDirective.CheckedBy);
                    comboBoxChechedBy.SelectedItem = _currentDirective.CheckedBy;
                }
            }

            if (_currentDirective.ApprovedBy != null)
            {
                Specialist selectedSpec = _specialists.GetItemById(_currentDirective.ApprovedBy.ItemId);
                if (selectedSpec != null)
                {
                    comboBoxApprovedBy.SelectedItem = selectedSpec;
                }
                else
                {
                    //Искомый специалист недействителен
                    comboBoxApprovedBy.Items.Add(_currentDirective.ApprovedBy);
                    comboBoxApprovedBy.SelectedItem = _currentDirective.ApprovedBy;
                }
            }

            //if (_currentDirective.Qualification != null)
            //{
            //    Specialist selectedSpec = _specialists.GetItemById(_currentDirective.Qualification.ItemId);
            //    if(selectedSpec != null)
            //        comboBoxQualification.SelectedItem = selectedSpec;
            //    else
            //    {
            //        //Искомый специалист недействителен
            //        comboBoxQualification.Items.Add(_currentDirective.Qualification);
            //        comboBoxQualification.SelectedItem = _currentDirective.Qualification;
            //    }
            //}

            //comboBoxWorkType.SelectedItem = _currentDirective.WorkType;
            //if (comboBoxWorkType.SelectedItem == null)
            //    comboBoxWorkType.SelectedIndex = 0;

            //comboBoxMMRef.SelectedItem = _currentDirective.MaintenanceManual;
            //if (comboBoxMMRef.SelectedItem == null)
            //    comboBoxMMRef.SelectedIndex = 0;

            //labelACTypeValue;
            //labelACRegValue;
            //labelACTATValue;
            //labelACTACValue;
            //labelRelatedTaskValue;
            //labelDateValue;
            //labelIntervalValue;

            if (comboBoxPreparedBy.SelectedItem != null && ((Specialist)comboBoxPreparedBy.SelectedItem).IsDeleted)
            {
                comboBoxPreparedBy.BackColor = Color.FromArgb(Highlight.Red.Color);
            }
            else
            {
                comboBoxPreparedBy.BackColor = Color.White;
            }

            if (comboBoxChechedBy.SelectedItem != null && ((Specialist)comboBoxChechedBy.SelectedItem).IsDeleted)
            {
                comboBoxChechedBy.BackColor = Color.FromArgb(Highlight.Red.Color);
            }
            else
            {
                comboBoxChechedBy.BackColor = Color.White;
            }

            if (comboBoxApprovedBy.SelectedItem != null && ((Specialist)comboBoxApprovedBy.SelectedItem).IsDeleted)
            {
                comboBoxApprovedBy.BackColor = Color.FromArgb(Highlight.Red.Color);
            }
            else
            {
                comboBoxApprovedBy.BackColor = Color.White;
            }
        }
예제 #5
0
        protected override void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            backgroundWorker.ReportProgress(50);

            try
            {
                Invoke(new Action(() => listViewCompliance.Items.Clear()));
            }
            catch (Exception)
            {
            }

            if (_currentComponent == null)
            {
                e.Cancel = true;
                return;
            }
            var parentAircraft   = GlobalObjects.AircraftsCore.GetParentAircraft(_currentComponent);
            var lastRecords      = new List <AbstractRecord>();
            var nextPerformances = new List <NextPerformance>();

            var allWorkPackagesIncludedTask     = new CommonCollection <WorkPackage>();
            var openPubWorkPackagesIncludedTask = new CommonCollection <WorkPackage>();
            var closedWorkPackages           = new CommonCollection <WorkPackage>();
            var taskThatIncludeInWorkPackage = new List <IDirective>();

            lastRecords.AddRange(_currentComponent.TransferRecords.ToArray());
            lastRecords.AddRange(_currentComponent.ChangeLLPCategoryRecords.ToArray());
            lastRecords.AddRange(_currentComponent.ActualStateRecords.ToArray());

            //Объекты для в котороые будет извлекаться информация
            //из записеи о перемещении
            var lastDestination = "";
            //прогнозируемый ресурс
            //если известна родительская деталь данной директивы,
            //то ее текущая наработка и средняя утилизация
            //используются в качестве ресурсов прогноза
            //для расчета всех просроченных выполнений
            var forecastData = new ForecastData(DateTime.Now,
                                                GlobalObjects.AverageUtilizationCore.GetAverageUtillization(_currentComponent),
                                                GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_currentComponent));

            foreach (var directive in _currentComponent.ComponentDirectives)
            {
                if (directive.IsAffect().GetValueOrDefault(true))
                {
                    //расчет след. выполнений директивы.
                    //если известен ресурс прогноза, то будут расчитаны все просрочнные выполнения
                    //если неизвестне, то только первое
                    //GlobalObjects.PerformanceCalculator.GetNextPerformance(directive, forecastData);
                    nextPerformances.AddRange(directive.NextPerformances);
                    lastRecords.AddRange(directive.PerformanceRecords.ToArray());

                    if (backgroundWorker.CancellationPending)
                    {
                        e.Cancel = true;
                        return;
                    }
                    taskThatIncludeInWorkPackage.Add(directive);
                }
                else
                {
                    var bindedItems = GlobalObjects.BindedItemsCore.GetBindedItemsFor(parentAircraft.ItemId, directive);
                    foreach (var bindedItem in bindedItems)
                    {
                        if (bindedItem is MaintenanceDirective)
                        {
                            var mpd = (MaintenanceDirective)bindedItem;
                            //прогнозируемый ресурс
                            //если известна родительская деталь данной директивы,
                            //то ее текущая наработка и средняя утилизация
                            //используются в качестве ресурсов прогноза
                            //для расчета всех просроченных выполнений
                            //расчет след. выполнений директивы.
                            //если известен ресурс прогноза, то будут расчитаны все просрочнные выполнения
                            //если неизвестне, то только первое
                            GlobalObjects.PerformanceCalculator.GetNextPerformance(mpd, forecastData);
                            nextPerformances.AddRange(mpd.NextPerformances);
                            lastRecords.AddRange(mpd.PerformanceRecords.ToArray());

                            taskThatIncludeInWorkPackage.Add(mpd);
                        }
                    }
                }
            }

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

            //загрузка рабочих пакетов для определения
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Opened));
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Published));

            allWorkPackagesIncludedTask.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.All, taskThatIncludeInWorkPackage));

            #region Добавление в список просроченных выполнений

            //и сравнение их с открытыми и опубликованными рабочими пакетами
            openPubWorkPackagesIncludedTask.AddRange(
                allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Opened ||
                                                  wp.Status == WorkPackageStatus.Published));
            //сбор всех записей рабочих пакетов для удобства фильтрации
            var openPubWpRecords =
                openPubWorkPackagesIncludedTask.SelectMany(wp => wp.WorkPakageRecords).ToList();
            //LINQ запрос для сортировки записей по дате
            var sortNextRecords = (from record in nextPerformances
                                   orderby GetDate(record) descending
                                   select record).ToList();
            for (int i = 0; i < sortNextRecords.Count; i++)
            {
                if (backgroundWorker.CancellationPending)
                {
                    allWorkPackagesIncludedTask.Clear();
                    openPubWorkPackagesIncludedTask.Clear();
                    closedWorkPackages.Clear();

                    e.Cancel = true;
                    return;
                }

                //поиск записи в рабочих пакетах по данному чеку
                //чей номер группы выполнения (по записи) совпадает с расчитанным
                var parentDirective = sortNextRecords[i].Parent;
                //номер выполнения
                int parentCountPerf;
                if (parentDirective.LastPerformance != null)
                {
                    parentCountPerf = parentDirective.LastPerformance.PerformanceNum <= 0
                                                ? 1
                                                : parentDirective.LastPerformance.PerformanceNum;
                }
                else
                {
                    parentCountPerf = 0;
                }
                parentCountPerf += parentDirective.NextPerformances.IndexOf(sortNextRecords[i]);
                parentCountPerf += 1;

                var wpr = openPubWpRecords.FirstOrDefault(r => r.PerformanceNumFromStart == parentCountPerf &&
                                                          r.WorkPackageItemType == parentDirective.SmartCoreObjectType.ItemId &&
                                                          r.DirectiveId == parentDirective.ItemId);
                if (wpr != null)
                {
                    var wp = openPubWorkPackagesIncludedTask.GetItemById(wpr.WorkPakageId);
                    //запись о выполнении блокируется найденым пакетом
                    sortNextRecords[i].BlockedByPackage = wp;
                    //последующие записи о выполнении так же должны быть заблокированы
                    for (int j = i - 1; j >= 0; j--)
                    {
                        //блокировать нужно все рабочие записи, или до первой записи,
                        //заблокированной другим рабочим пакетом
                        if (sortNextRecords[j].BlockedByPackage != null ||
                            sortNextRecords[j].Condition != ConditionState.Overdue)
                        {
                            break;
                        }
                        if (sortNextRecords[j].Parent == parentDirective)
                        {
                            sortNextRecords[j].BlockedByPackage = wp;
                            Invoke(new Action <int, Color>(SetItemColor), j, Color.FromArgb(Highlight.GrayLight.Color));
                        }
                    }
                }
                Invoke(new Action <NextPerformance>(AddListViewItem), sortNextRecords[i]);
            }

            #endregion

            #region Добавление в список записей о произведенных выполнениях

            //и сравнение их с закрытыми рабочими пакетами
            closedWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Closed));

            //LINQ запрос для сортировки записей по дате
            var sortLastRecords = (from record in lastRecords
                                   orderby record.RecordDate ascending
                                   select record).ToList();

            var items = new List <KeyValuePair <AbstractRecord, string[]> >();

            for (int i = 0; i < sortLastRecords.Count; i++)
            {
                if (backgroundWorker.CancellationPending)
                {
                    allWorkPackagesIncludedTask.Clear();
                    openPubWorkPackagesIncludedTask.Clear();
                    closedWorkPackages.Clear();

                    e.Cancel = true;
                    return;
                }

                string[] subs;
                if (sortLastRecords[i] is DirectiveRecord)
                {
                    var directiveRecord = (DirectiveRecord)sortLastRecords[i];
                    subs = new[]
                    {
                        directiveRecord.WorkType,
                        UsefulMethods.NormalizeDate(directiveRecord.RecordDate),
                        directiveRecord.OnLifelength != null
                                                                        ? directiveRecord.OnLifelength.ToString()
                                                                        : "",
                        "",
                        "",
                        directiveRecord.Remarks
                    };
                }
                else if (sortLastRecords[i] is TransferRecord)
                {
                    TransferRecord transferRecord = (TransferRecord)sortLastRecords[i];

                    string currentDestination, destinationObject;
                    DestinationHelper.GetDestination(transferRecord, out currentDestination, out destinationObject);

                    subs = new[]
                    {
                        lastDestination != ""
                                                                        ? "Transfered " + destinationObject + " from " + lastDestination + " to " + currentDestination
                                                                        : "Transfered " + destinationObject + " to " + currentDestination,
                        UsefulMethods.NormalizeDate(transferRecord.TransferDate),
                        transferRecord.OnLifelength.ToString(),
                        "",
                        "",
                        transferRecord.Remarks,
                    };
                    lastDestination = currentDestination;
                }
                else if (sortLastRecords[i] is ComponentLLPCategoryChangeRecord)
                {
                    ComponentLLPCategoryChangeRecord llpRecord  = (ComponentLLPCategoryChangeRecord)sortLastRecords[i];
                    LLPLifeLimitCategory             toCategory = llpRecord.ToCategory;
                    subs = new[]
                    {
                        "Changed to " + toCategory,
                        UsefulMethods.NormalizeDate(llpRecord.RecordDate),
                        llpRecord.OnLifelength.ToString(),
                        "",
                        "",
                        llpRecord.Remarks,
                    };
                }
                else if (sortLastRecords[i] is ActualStateRecord)
                {
                    ActualStateRecord actualStateRecord = (ActualStateRecord)sortLastRecords[i];
                    subs = new[]
                    {
                        "Actual state:",
                        UsefulMethods.NormalizeDate(actualStateRecord.RecordDate.Date),
                        actualStateRecord.OnLifelength != null
                                                                        ? actualStateRecord.OnLifelength.ToString()
                                                                        : "",
                        "",
                        "",
                        actualStateRecord.Remarks,
                    };
                }
                else
                {
                    subs = new[]
                    {
                        "Unknown record ",
                        UsefulMethods.NormalizeDate(sortLastRecords[i].RecordDate),
                        sortLastRecords[i].OnLifelength.ToString(),
                        "",
                        "",
                        sortLastRecords[i].Remarks,
                    };
                }
                items.Add(new KeyValuePair <AbstractRecord, string[]>(sortLastRecords[i], subs));
            }

            #endregion

            for (int i = items.Count - 1; i >= 0; i--)
            {
                WorkPackage workPackage = null;
                if (items[i].Key is AbstractPerformanceRecord)
                {
                    var apr = items[i].Key as AbstractPerformanceRecord;
                    workPackage = closedWorkPackages.FirstOrDefault(wp => wp.ItemId == apr.DirectivePackageId);
                }
                Invoke(new Action <AbstractRecord, string[], WorkPackage>(AddListViewItem), items[i].Key, items[i].Value, workPackage);
            }

            allWorkPackagesIncludedTask.Clear();
            openPubWorkPackagesIncludedTask.Clear();
            closedWorkPackages.Clear();

            backgroundWorker.ReportProgress(100);
        }
예제 #6
0
        /// <summary>
        /// Обновляет значения полей
        /// </summary>
        public override void FillControls()
        {
            BeginUpdate();


            ataChapterComboBox.UpdateInformation();

            TemplateComboBox.Items.Clear();
            TemplateComboBox.Items.AddRange(_discrepancies.ToArray());

            TemplateComboBox.SelectedItem = _discrepancies.FirstOrDefault(
                d => d.ATAChapter != null && d.ATAChapter.Equals(Discrepancy.ATAChapter) &&
                d.CertificateOfReleaseToService != null &&
                d.CertificateOfReleaseToService.AuthorizationB1.Equals(d.CertificateOfReleaseToService.AuthorizationB1) &&
                d.CertificateOfReleaseToService.AuthorizationB2.Equals(d.CertificateOfReleaseToService.AuthorizationB2) &&
                d.CertificateOfReleaseToService.Station.Equals(d.CertificateOfReleaseToService.Station) &&
                d.CorrectiveAction != null &&
                d.CorrectiveAction.Description.Equals(d.CorrectiveAction.Description) &&
                d.CorrectiveAction.PartNumberOff.Equals(d.CorrectiveAction.PartNumberOff) &&
                d.CorrectiveAction.PartNumberOn.Equals(d.CorrectiveAction.PartNumberOn) &&
                d.CorrectiveAction.SerialNumberOff.Equals(d.CorrectiveAction.SerialNumberOff) &&
                d.CorrectiveAction.SerialNumberOn.Equals(d.CorrectiveAction.SerialNumberOn));

            #region lookupComboboxDeferred

            if (Discrepancy != null)
            {
                var aircraft = GlobalObjects.AircraftsCore.GetAircraftById(Discrepancy.ParentFlight.AircraftId);

                string displayerText =
                    aircraft.RegistrationNumber + ". " +
                    DirectiveType.DeferredItems.CommonName;
            }

            #endregion

            #region lookupComboboxFlight

            if (Discrepancy != null && Discrepancy.ItemId > 0 && Discrepancy.DirectiveId > 0)
            {
                var aircraft = GlobalObjects.AircraftsCore.GetAircraftById(Discrepancy.ParentFlight.AircraftId);

                ATLB parentAtlb = null;
                try
                {
                    parentAtlb = GlobalObjects.CasEnvironment.NewLoader.GetObjectById <ATLBDTO, ATLB>(Discrepancy.ParentFlight.ATLBId);
                }
                catch (Exception ex)
                {
                    Program.Provider.Logger.Log("Error while load linked ATLB fo Discrepancy", ex);
                }
            }

            #endregion

            _specialists.Clear();
            try
            {
                _specialists.AddRange(GlobalObjects.CasEnvironment.Loader.GetObjectListAll <Specialist>(loadChild: true).Where(i => i.Occupation?.Department?.FullName == "Line Maintenance"));
            }
            catch (Exception ex)
            {
                Program.Provider.Logger.Log("Error while load Specialist fo Discrepancy", ex);
            }

            if (Discrepancy != null)
            {
                comboSpecialist1.Items.AddRange(_specialists.ToArray());
                comboSpecialist2.Items.AddRange(_specialists.ToArray());
                radioCrew.Checked             = Discrepancy.FilledBy == false; // DiscrepancyFilledByEnum.Crew;
                radioMaintenanceStaff.Checked = Discrepancy.FilledBy;          //DiscrepancyFilledByEnum.MaintenanceStaff;
                ataChapterComboBox.ATAChapter = Discrepancy.ATAChapter;
                //  radioOpen.Checked = Discrepancy.correctiveAction.Status == CorrectiveActionStatus.Open;
                //  radioClose.Checked = Discrepancy.correctiveAction.Status == CorrectiveActionStatus.Close;
                textDescription.Text        = Discrepancy.Description ?? "No";
                checkBoxReliability.Checked = Discrepancy.IsReliability;
                if (Discrepancy.Num > numericUpDownIndex.Maximum)
                {
                    numericUpDownIndex.Value = numericUpDownIndex.Maximum;
                }
                else if (Discrepancy.Num < numericUpDownIndex.Minimum)
                {
                    numericUpDownIndex.Value = numericUpDownIndex.Minimum;
                }
                else
                {
                    numericUpDownIndex.Value = Discrepancy.Num;
                }

                if (Discrepancy.DeferredItem != null)
                {
                    ataChapterComboBox.Enabled    = false;
                    ataChapterComboBox.ATAChapter = Discrepancy.DeferredItem.ATAChapter;

                    _showDeferredInfoPanel = true;
                }
                else
                {
                    _showDeferredInfoPanel = false;
                }

                if (Discrepancy.CorrectiveAction != null)
                {
                    textCorrectiveAction.Text = Discrepancy.CorrectiveAction.Description ?? "No";
                    textPNOff.Text            = Discrepancy.CorrectiveAction.PartNumberOff;
                    textSNOff.Text            = Discrepancy.CorrectiveAction.SerialNumberOff;
                    textPNOn.Text             = Discrepancy.CorrectiveAction.PartNumberOn;
                    textSNOn.Text             = Discrepancy.CorrectiveAction.SerialNumberOn;
                }
                else
                {
                    textCorrectiveAction.Text = "No";
                    textPNOff.Text            = textSNOff.Text = textPNOn.Text = textSNOn.Text = "";
                }

                if (Discrepancy.CertificateOfReleaseToService != null)
                {
                    textStation.Text            = Discrepancy.CertificateOfReleaseToService.Station;
                    dateTimePickerRTSDate.Value = Discrepancy.CertificateOfReleaseToService.RecordDate;
                    if (Discrepancy.CertificateOfReleaseToService.AuthorizationB1 != null)
                    {
                        Specialist selectedSpec = _specialists.GetItemById(Discrepancy.CertificateOfReleaseToService.AuthorizationB1.ItemId);
                        if (selectedSpec != null)
                        {
                            comboSpecialist1.SelectedItem = selectedSpec;
                        }
                        else
                        {
                            //Искомый специалист недействителен
                            comboSpecialist1.Items.Add(Discrepancy.CertificateOfReleaseToService.AuthorizationB1);
                            comboSpecialist1.SelectedItem = Discrepancy.CertificateOfReleaseToService.AuthorizationB1;
                        }
                        comboSpecialist1.BackColor =
                            ((Specialist)comboSpecialist1.SelectedItem).IsDeleted
                          ? Color.FromArgb(Highlight.Red.Color)
                          : Color.White;
                    }
                    if (Discrepancy.CertificateOfReleaseToService.AuthorizationB2 != null)
                    {
                        Specialist selectedSpec = _specialists.GetItemById(Discrepancy.CertificateOfReleaseToService.AuthorizationB2.ItemId);
                        if (selectedSpec != null)
                        {
                            comboSpecialist2.SelectedItem = selectedSpec;
                        }
                        else
                        {
                            //Искомый специалист недействителен
                            comboSpecialist2.Items.Add(Discrepancy.CertificateOfReleaseToService.AuthorizationB2);
                            comboSpecialist2.SelectedItem = Discrepancy.CertificateOfReleaseToService.AuthorizationB2;
                        }
                        comboSpecialist2.BackColor =
                            ((Specialist)comboSpecialist2.SelectedItem).IsDeleted
                                    ? Color.FromArgb(Highlight.Red.Color)
                                    : Color.White;
                    }
                }
                else
                {
                    textStation.Text = "";
                    comboSpecialist1.SelectedItem = null;
                    comboSpecialist2.SelectedItem = null;
                    dateTimePickerRTSDate.Value   = DateTime.Today;
                }
            }
            else
            {
                dateTimePickerRTSDate.Value   = DateTime.Today;
                comboSpecialist1.SelectedItem = null;
                comboSpecialist2.SelectedItem = null;
                textDescription.Text          = "What Where When Extent";
            }

            SetExtendableControlCaption();


            EndUpdate();
        }
예제 #7
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");
        }
        protected override void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            //TODO:(Evgenii Babak) много повторяющегося кода, требуется оптимизация
            backgroundWorker.ReportProgress(50);

            Invoke(new Action(() => listViewCompliance.Items.Clear()));

            if (_currentDirective == null)
            {
                e.Cancel = true;
                return;
            }

            var lastRecords      = new List <AbstractPerformanceRecord>();
            var nextPerformances = new List <NextPerformance>();

            if (_openPubWorkPackages == null)
            {
                _openPubWorkPackages = new CommonCollection <WorkPackage>();
            }
            _openPubWorkPackages.Clear();

            var parentAircraft = GlobalObjects.AircraftsCore.GetAircraftById(_currentDirective.ParentBaseComponent.ParentAircraftId);    //TODO:(Evgenii Babak) пересмотреть использование ParentAircrafId здесь

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

            var allWorkPackagesIncludedTask = new CommonCollection <WorkPackage>();
            var openPubWorkPackages         = new CommonCollection <WorkPackage>();
            var closedWorkPackages          = new CommonCollection <WorkPackage>();

            if (_currentDirective.IsAffect().GetValueOrDefault(true))
            {
                //Поиск и заполнение просроченных директив и записей о перемещении
                //Объекты для в которые будет извлекаться информация
                //из записеи о перемещении

                //прогнозируемый ресурс
                var forecastData = new ForecastData(DateTime.Now,
                                                    _currentDirective.ParentBaseComponent.AverageUtilization,
                                                    GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_currentDirective.ParentBaseComponent));

                //расчет след. выполнений директивы.
                //если известен ресурс прогноза, то будут расчитаны все просрочнные выполнения
                //если неизвестне, то только первое
                //GlobalObjects.PerformanceCalculator.GetNextPerformance(_currentDirective, forecastData);
                nextPerformances.AddRange(_currentDirective.NextPerformances);
                lastRecords.AddRange(_currentDirective.PerformanceRecords.ToArray());
                ////////////////////////////////////////////
                //загрузка рабочих пакетов для определения
                //перекрытых ими выполнений задач
                _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackages(parentAircraft, WorkPackageStatus.Opened, true));
                _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackages(parentAircraft, WorkPackageStatus.Published, true));

                allWorkPackagesIncludedTask.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft,
                                                                                                       WorkPackageStatus.All,
                                                                                                       new IDirective[] { _currentDirective }));


                #region Добавление в список просроченных выполнений
                //и сравнение их с открытыми и опубликованными рабочими пакетами
                openPubWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Opened ||
                                                                               wp.Status == WorkPackageStatus.Published));
                //сбор всех записей рабочих пакетов для удобства фильтрации
                List <WorkPackageRecord> openPubWpRecords = openPubWorkPackages.SelectMany(wp => wp.WorkPakageRecords).ToList();
                //LINQ запрос для сортировки записей по дате
                List <NextPerformance> sortNextRecords = (from record in nextPerformances
                                                          orderby GetDate(record) descending
                                                          select record).ToList();

                for (int i = 0; i < sortNextRecords.Count; i++)
                {
                    if (backgroundWorker.CancellationPending)
                    {
                        allWorkPackagesIncludedTask.Clear();
                        openPubWorkPackages.Clear();
                        closedWorkPackages.Clear();

                        e.Cancel = true;
                        return;
                    }

                    //поиск записи в рабочих пакетах по данному чеку
                    //чей номер группы выполнения (по записи) совпадает с расчитанным
                    MaintenanceDirective directive = (MaintenanceDirective)sortNextRecords[i].Parent;
                    //номер выполнения
                    int parentCountPerf;
                    if (directive.LastPerformance != null)
                    {
                        parentCountPerf = directive.LastPerformance.PerformanceNum <= 0
                            ? 1
                            : directive.LastPerformance.PerformanceNum;
                    }
                    else
                    {
                        parentCountPerf = 0;
                    }
                    parentCountPerf += directive.NextPerformances.IndexOf(sortNextRecords[i]);
                    parentCountPerf += 1;

                    WorkPackageRecord wpr =
                        openPubWpRecords.FirstOrDefault(r => r.PerformanceNumFromStart == parentCountPerf &&
                                                        r.WorkPackageItemType == directive.SmartCoreObjectType.ItemId &&
                                                        r.DirectiveId == directive.ItemId);
                    if (wpr != null)
                    {
                        WorkPackage wp = openPubWorkPackages.GetItemById(wpr.WorkPakageId);
                        //запись о выполнении блокируется найденым пакетом
                        sortNextRecords[i].BlockedByPackage = wp;
                        //последующие записи о выполнении так же должны быть заблокированы
                        for (int j = i - 1; j >= 0; j--)
                        {
                            //блокировать нужно все рабочие записи, или до первой записи,
                            //заблокированной другим рабочим пакетом
                            if (sortNextRecords[j].BlockedByPackage != null ||
                                sortNextRecords[j].Condition != ConditionState.Overdue)
                            {
                                break;
                            }
                            if (sortNextRecords[j].Parent == directive)
                            {
                                sortNextRecords[j].BlockedByPackage = wp;
                                Invoke(new Action <int, Color>(SetItemColor), new object[] { j, Color.FromArgb(Highlight.GrayLight.Color) });
                            }
                        }
                    }
                    Invoke(new Action <NextPerformance>(AddListViewItem), sortNextRecords[i]);
                }
                #endregion

                #region Добавление в список записей о произведенных выполнениях
                //и сравнение их с закрытыми рабочими пакетами
                closedWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Closed));

                //LINQ запрос для сортировки записей по дате
                List <AbstractPerformanceRecord> sortLastRecords = (from record in lastRecords
                                                                    orderby record.RecordDate descending
                                                                    select record).ToList();
                ////////////////////////////////////////////

                for (int i = 0; i < sortLastRecords.Count(); i++)
                {
                    if (backgroundWorker.CancellationPending)
                    {
                        allWorkPackagesIncludedTask.Clear();
                        openPubWorkPackages.Clear();
                        closedWorkPackages.Clear();

                        e.Cancel = true;
                        return;
                    }

                    DirectiveRecord directiveRecord = (DirectiveRecord)sortLastRecords[i];
                    WorkPackage     workPackage     =
                        closedWorkPackages.Where(wp => wp.ItemId == directiveRecord.DirectivePackageId).FirstOrDefault();
                    if (workPackage != null)
                    {
                        Invoke(new Action <AbstractPerformanceRecord, WorkPackage, MaintenanceCheckRecord>(AddListViewItem),
                               new object[] { sortLastRecords[i], workPackage, null });
                    }
                    else if (directiveRecord.MaintenanceCheckRecordId > 0)
                    {
                        var mcr = GlobalObjects.CasEnvironment.NewLoader.GetObject <DirectiveRecordDTO, MaintenanceCheckRecord>(new Filter("ItemId", directiveRecord.MaintenanceCheckRecordId));

                        if (mcr != null)
                        {
                            mcr.ParentCheck = GlobalObjects.CasEnvironment.NewLoader.GetObjectById <MaintenanceCheckDTO, MaintenanceCheck>(mcr.ParentId);
                        }

                        Invoke(new Action <AbstractPerformanceRecord, WorkPackage, MaintenanceCheckRecord>(AddListViewItem),
                               new object[] { sortLastRecords[i], workPackage, mcr });
                    }
                    else
                    {
                        Invoke(new Action <AbstractPerformanceRecord, WorkPackage>(AddListViewItem),
                               new object[] { sortLastRecords[i], workPackage });
                    }
                }
                #endregion
            }
            else
            {
                //Поиск и заполнение просроченных директив и записей о перемещении
                //Объекты для в которые будет извлекаться информация
                //из записеи о перемещении

                //прогнозируемый ресурс
                foreach (var directive in _bindedItems)
                {
                    if (directive is ComponentDirective)
                    {
                        var componentDirective = (ComponentDirective)directive;
                        var detail             = componentDirective.ParentComponent ?? _currentDirective.ParentBaseComponent;
                        //прогнозируемый ресурс
                        //если известна родительская деталь данной директивы,
                        //то ее текущая наработка и средняя утилизация
                        //используются в качестве ресурсов прогноза
                        //для расчета всех просроченных выполнений
                        var forecastData = new ForecastData(DateTime.Now,
                                                            GlobalObjects.AverageUtilizationCore.GetAverageUtillization(detail),
                                                            GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(detail));
                        //расчет след. выполнений директивы.
                        //если известен ресурс прогноза, то будут расчитаны все просрочнные выполнения
                        //если неизвестне, то только первое
                        GlobalObjects.PerformanceCalculator.GetNextPerformance(componentDirective, forecastData);
                        nextPerformances.AddRange(componentDirective.NextPerformances);
                        lastRecords.AddRange(componentDirective.PerformanceRecords.ToArray());
                    }
                }
                var directiveRecords = _bindedItems.SelectMany(dd => dd.PerformanceRecords.Cast <DirectiveRecord>());
                lastRecords.AddRange(_currentDirective.PerformanceRecords
                                     .Where(performanceRecord => directiveRecords.Count(d => d.MaintenanceDirectiveRecordId == performanceRecord.ItemId) == 0)
                                     .Cast <AbstractPerformanceRecord>());
                ////////////////////////////////////////////
                //загрузка рабочих пакетов для определения
                _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Opened));
                _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Published));

                allWorkPackagesIncludedTask.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft,
                                                                                                       WorkPackageStatus.All,
                                                                                                       _bindedItems));

                #region Добавление в список просроченных выполнений
                //и сравнение их с открытыми и опубликованными рабочими пакетами
                openPubWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Opened ||
                                                                               wp.Status == WorkPackageStatus.Published));
                //сбор всех записей рабочих пакетов для удобства фильтрации
                List <WorkPackageRecord> openPubWpRecords = new List <WorkPackageRecord>();
                foreach (WorkPackage openWorkPackage in openPubWorkPackages)
                {
                    openPubWpRecords.AddRange(openWorkPackage.WorkPakageRecords);
                }

                //LINQ запрос для сортировки записей по дате
                List <NextPerformance> sortNextRecords = (from record in nextPerformances
                                                          orderby GetDate(record) descending
                                                          select record).ToList();

                for (int i = 0; i < sortNextRecords.Count; i++)
                {
                    if (backgroundWorker.CancellationPending)
                    {
                        allWorkPackagesIncludedTask.Clear();
                        openPubWorkPackages.Clear();
                        closedWorkPackages.Clear();

                        e.Cancel = true;
                        return;
                    }

                    //поиск записи в рабочих пакетах по данному чеку
                    //чей номер группы выполнения (по записи) совпадает с расчитанным
                    ComponentDirective directive = (ComponentDirective)sortNextRecords[i].Parent;
                    //номер выполнения
                    int parentCountPerf;
                    if (directive.LastPerformance != null)
                    {
                        parentCountPerf = directive.LastPerformance.PerformanceNum <= 0
                            ? 1
                            : directive.LastPerformance.PerformanceNum;
                    }
                    else
                    {
                        parentCountPerf = 0;
                    }
                    parentCountPerf += directive.NextPerformances.IndexOf(sortNextRecords[i]);
                    parentCountPerf += 1;

                    WorkPackageRecord wpr =
                        openPubWpRecords.Where(r => r.PerformanceNumFromStart == parentCountPerf &&
                                               r.WorkPackageItemType == directive.SmartCoreObjectType.ItemId &&
                                               r.DirectiveId == directive.ItemId).FirstOrDefault();
                    if (wpr != null)
                    {
                        WorkPackage wp = openPubWorkPackages.GetItemById(wpr.WorkPakageId);
                        //запись о выполнении блокируется найденым пакетом
                        sortNextRecords[i].BlockedByPackage = wp;
                        //последующие записи о выполнении так же должны быть заблокированы
                        for (int j = i - 1; j >= 0; j--)
                        {
                            //блокировать нужно все рабочие записи, или до первой записи,
                            //заблокированной другим рабочим пакетом
                            if (sortNextRecords[j].BlockedByPackage != null ||
                                sortNextRecords[j].Condition != ConditionState.Overdue)
                            {
                                break;
                            }
                            if (sortNextRecords[j].Parent == directive)
                            {
                                sortNextRecords[j].BlockedByPackage = wp;
                                Invoke(new Action <int, Color>(SetItemColor), new object[] { j, Color.FromArgb(Highlight.GrayLight.Color) });
                            }
                        }
                    }
                    Invoke(new Action <NextPerformance>(AddListViewItem), sortNextRecords[i]);
                }
                #endregion

                #region Добавление в список записей о произведенных выполнениях
                //и сравнение их с закрытыми рабочими пакетами
                closedWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Closed));

                //LINQ запрос для сортировки записей по дате
                List <AbstractPerformanceRecord> sortLastRecords = (from record in lastRecords
                                                                    orderby record.RecordDate descending
                                                                    select record).ToList();
                ////////////////////////////////////////////

                for (int i = 0; i < sortLastRecords.Count; i++)
                {
                    if (backgroundWorker.CancellationPending)
                    {
                        allWorkPackagesIncludedTask.Clear();
                        openPubWorkPackages.Clear();
                        closedWorkPackages.Clear();

                        e.Cancel = true;
                        return;
                    }
                    WorkPackage workPackage =
                        closedWorkPackages.FirstOrDefault(wp => wp.ItemId == sortLastRecords[i].DirectivePackageId);
                    Invoke(new Action <AbstractPerformanceRecord, WorkPackage>(AddListViewItem),
                           new object[] { sortLastRecords[i], workPackage });
                }
                #endregion
            }

            allWorkPackagesIncludedTask.Clear();
            openPubWorkPackages.Clear();
            closedWorkPackages.Clear();

            backgroundWorker.ReportProgress(100);
        }
예제 #9
0
        private void UpdateInformation()
        {
            if (_contextMenuStrip == null)
            {
                InitToolStripMenuItems();
            }

            listViewCompliance.Items.Clear();

            if (CheckItems == null)
            {
                return;
            }

            var lastRecords      = new List <MaintenanceCheckRecord>();
            var nextPerformances = new List <NextPerformance>();

            //Поиск и заполнение просроченных директив и записей о перемещении
            //Объекты для в которые будет извлекаться информация
            //из записеи о перемещении

            string[]     subs;
            ListViewItem newItem;

            var aircraftFrame = GlobalObjects.ComponentCore.GetBaseComponentById(_currentAircraft.AircraftFrameId);
            //прогнозируемый ресурс
            var forecastData = new ForecastData(DateTime.Now, aircraftFrame.AverageUtilization,
                                                GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_currentAircraft));

            //GlobalObjects.CasEnvironment.Calculator.GetNextPerformanceGroup(CheckItems, _currentAircraft.Schedule, forecastData);

            foreach (MaintenanceCheck check in CheckItems)
            {
                if (check.Grouping)
                {
                    foreach (MaintenanceNextPerformance mnp in check.GetPergormanceGroupWhereCheckIsSenior())
                    {
                        //Добавляются все выполнения, дата которых меньше нынешней
                        //плюс еще одно выполнение дата которого выше нынешней
                        nextPerformances.Add(mnp);

                        if (mnp.PerformanceDate != null && mnp.PerformanceDate > DateTime.Now)
                        {
                            break;
                        }
                    }
                }
                else
                {
                    foreach (NextPerformance mnp in check.NextPerformances)
                    {
                        //Добавляются все выполнения, дата которых меньше нынешней
                        //плюс еще одно выполнение дата которого выше нынешней
                        nextPerformances.Add(mnp);

                        if (mnp.PerformanceDate != null && mnp.PerformanceDate > DateTime.Now)
                        {
                            break;
                        }
                    }
                }

                lastRecords.AddRange(check.PerformanceRecords.ToArray());

                foreach (MaintenanceDirective mpd in check.BindMpds)
                {
                    GlobalObjects.PerformanceCalculator.GetNextPerformance(mpd, forecastData);
                }
            }
            ////////////////////////////////////////////
            //загрузка рабочих пакетов для определения
            //перекрытых ими выполнений задач
            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));

            var allWorkPackagesIncludedTask = new CommonCollection <WorkPackage>();
            var openPubWorkPackages         = new CommonCollection <WorkPackage>();
            var closedWorkPackages          = new CommonCollection <WorkPackage>();

            allWorkPackagesIncludedTask.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(_currentAircraft,
                                                                                                   WorkPackageStatus.All,
                                                                                                   CheckItems.Select(m => (IDirective)m).ToList()));

            #region Добавление в список просроченных выполнений
            //и сравнение их с открытыми и опубликованными рабочими пакетами
            openPubWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Opened ||
                                                                           wp.Status == WorkPackageStatus.Published));
            //сбор всех записей рабочих пакетов для удобства фильтрации
            List <WorkPackageRecord> openPubWPRecords = new List <WorkPackageRecord>();
            foreach (WorkPackage openWorkPackage in openPubWorkPackages)
            {
                openPubWPRecords.AddRange(openWorkPackage.WorkPakageRecords);
            }

            //LINQ запрос для сортировки записей по дате
            List <NextPerformance> sortNextRecords = (from record in nextPerformances
                                                      orderby record.GetPerformanceDateOrDefault() descending
                                                      select record).ToList();

            for (int i = 0; i < sortNextRecords.Count; i++)
            {
                //поиск записи в рабочих пакетах по данному чеку
                //чей номер группы выполнения (по записи) совпадает с расчитанным
                MaintenanceCheck check = (MaintenanceCheck)sortNextRecords[i].Parent;

                //if (check.Name == "5C")
                //{

                //}
                //номер выполнения
                int parentCountPerf;
                if (check.LastPerformance != null)
                {
                    parentCountPerf = check.LastPerformance.NumGroup <= 0
                        ? 1
                        : check.LastPerformance.NumGroup;
                }
                else
                {
                    parentCountPerf = 0;
                }

                if (check.Grouping)
                {
                    MaintenanceNextPerformance mnp = sortNextRecords[i] as MaintenanceNextPerformance;
                    if (mnp != null)
                    {
                        parentCountPerf = mnp.PerformanceGroupNum;
                    }
                    else
                    {
                        parentCountPerf += check.NextPerformances.IndexOf(sortNextRecords[i]);
                        parentCountPerf += 1;
                    }
                }
                else
                {
                    parentCountPerf += check.NextPerformances.IndexOf(sortNextRecords[i]);
                    parentCountPerf += 1;
                }

                WorkPackageRecord wpr =
                    openPubWPRecords.Where(r => r.PerformanceNumFromStart == parentCountPerf &&
                                           r.WorkPackageItemType == check.SmartCoreObjectType.ItemId &&
                                           r.DirectiveId == check.ItemId).FirstOrDefault();
                if (wpr != null)
                {
                    WorkPackage wp = openPubWorkPackages.GetItemById(wpr.WorkPakageId);
                    //запись о выполнении блокируется найденым пакетом
                    sortNextRecords[i].BlockedByPackage = wp;
                    //последующие записи о выполнении так же должны быть заблокированы
                    for (int j = i - 1; j >= 0; j--)
                    {
                        //блокировать нужно все рабочие записи, или до первой записи,
                        //заблокированной другим рабочим пакетом
                        if (sortNextRecords[j].BlockedByPackage != null &&
                            sortNextRecords[j].Parent == check ||
                            sortNextRecords[j].Condition != ConditionState.Overdue)
                        {
                            break;
                        }
                        if (sortNextRecords[j].Parent == check)
                        {
                            sortNextRecords[j].BlockedByPackage   = wp;
                            listViewCompliance.Items[j].BackColor = Color.FromArgb(Highlight.GrayLight.Color);
                        }
                    }
                }

                string type        = check.Schedule ? " (Schedule) " : " (Store) ";
                string resource    = check.Resource.ToString();
                string grouping    = check.Grouping ? " (Group)" : "";
                string stringNumGr = (sortNextRecords[i] is MaintenanceNextPerformance
                    ? ((MaintenanceNextPerformance)sortNextRecords[i]).PerformanceGroupNum.ToString()
                    : "N/A") + type + resource + grouping;

                subs = new[]  {
                    stringNumGr,
                    sortNextRecords[i].Title,
                    sortNextRecords[i].PerformanceDate != null
                                       ? UsefulMethods.NormalizeDate((DateTime)sortNextRecords[i].PerformanceDate)
                                       : "N/A",
                    sortNextRecords[i].PerformanceSource.ToString(),
                    "",
                };
                newItem = new ListViewItem(subs)
                {
                    Group     = listViewCompliance.Groups["next"],
                    Tag       = sortNextRecords[i],
                    BackColor = UsefulMethods.GetColor(sortNextRecords[i])
                };

                listViewCompliance.Items.Add(newItem);
            }
            #endregion

            #region Добавление в список записей о произведенных выполнениях
            //и сравнение их с закрытыми рабочими пакетами
            closedWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Closed));
            //сбор всех записей рабочих пакетов для удобства фильтрации
            List <WorkPackageRecord> closedWPRecords = new List <WorkPackageRecord>();
            foreach (WorkPackage closedWorkPackage in closedWorkPackages)
            {
                closedWPRecords.AddRange(closedWorkPackage.WorkPakageRecords);
            }

            List <MaintenanceCheckRecordGroup> maintenanceCheckRecordGroups = new List <MaintenanceCheckRecordGroup>();

            foreach (MaintenanceCheckRecord record in lastRecords)
            {
                //Поиск коллекции групп, в которую входят группы с нужными критериями
                //по плану, группировка и основному ресурсу
                if (record.ParentCheck.Grouping)
                {
                    MaintenanceCheckRecordGroup recordGroup = maintenanceCheckRecordGroups
                                                              .FirstOrDefault(g => g.Schedule == record.ParentCheck.Schedule &&
                                                                              g.Grouping == record.ParentCheck.Grouping &&
                                                                              g.Resource == record.ParentCheck.Resource &&
                                                                              g.GroupComplianceNum == record.NumGroup);
                    if (recordGroup != null)
                    {
                        //Коллекция найдена
                        //Поиск в ней группы чеков с нужным типом
                        recordGroup.Records.Add(record);
                    }
                    else
                    {
                        //Коллекции с нужными критериями нет
                        //Созадние и добавление
                        recordGroup =
                            new MaintenanceCheckRecordGroup(record.ParentCheck.Schedule, record.ParentCheck.Grouping,
                                                            record.ParentCheck.Resource, record.NumGroup);
                        recordGroup.Records.Add(record);
                        maintenanceCheckRecordGroups.Add(recordGroup);
                    }
                }
                else
                {
                    MaintenanceCheckRecordGroup recordGroup =
                        new MaintenanceCheckRecordGroup(record.ParentCheck.Schedule, record.ParentCheck.Grouping,
                                                        record.ParentCheck.Resource);
                    recordGroup.Records.Add(record);
                    maintenanceCheckRecordGroups.Add(recordGroup);
                }
            }

            List <object> tempRecords = new List <object>();
            tempRecords.AddRange(maintenanceCheckRecordGroups.ToArray());
            tempRecords.AddRange(_currentAircraft.MaintenanceProgramChangeRecords.ToArray());

            List <object> sortLastRecords =
                tempRecords.OrderByDescending(tr => (tr is MaintenanceCheckRecordGroup
                                                        ? ((MaintenanceCheckRecordGroup)tr).LastGroupComplianceDate
                                                        : tr is AbstractRecord
                                                            ? ((AbstractRecord)tr).RecordDate
                                                            : DateTimeExtend.GetCASMinDateTime()))
                .ToList();
            foreach (object t in sortLastRecords)
            {
                if (t is MaintenanceCheckRecordGroup)
                {
                    MaintenanceCheckRecordGroup mcrg            = (MaintenanceCheckRecordGroup)t;
                    MaintenanceCheckRecord      directiveRecord = mcrg.Records.First();
                    MaintenanceCheck            parentDirective = (MaintenanceCheck)directiveRecord.Parent;
                    newItem = GetListViewItem(mcrg);

                    WorkPackage workPackage =
                        closedWorkPackages.Where(wp => wp.ItemId == directiveRecord.DirectivePackageId).FirstOrDefault();
                    if (workPackage != null)
                    {
                        //запись о выполнении блокируется найденым пакетом
                        directiveRecord.DirectivePackage = workPackage;
                        newItem.BackColor   = Color.FromArgb(Highlight.Grey.Color);
                        newItem.ToolTipText =
                            "Perform of the task:" + parentDirective.Name +
                            "\nadded by Work Package:" +
                            "\n" + directiveRecord.DirectivePackage.Title +
                            "\nTo remove a performance of task, you need to exclude task from this work package," +
                            "\nor delete the work package ";
                    }
                    listViewCompliance.Items.Add(newItem);
                }
                else if (t is MaintenanceProgramChangeRecord)
                {
                    MaintenanceProgramChangeRecord mpcr = (MaintenanceProgramChangeRecord)t;
                    subs = new[]
                    {
                        "N/A",
                        "Changet to " + mpcr.MSG,
                        UsefulMethods.NormalizeDate(mpcr.RecordDate),
                        mpcr.OnLifelength.ToString(),
                        "",
                    };
                    newItem = new ListViewItem(subs)
                    {
                        Group     = listViewCompliance.Groups["last"],
                        Tag       = mpcr,
                        BackColor = Color.FromArgb(Highlight.GrayLight.Color)
                    };

                    listViewCompliance.Items.Add(newItem);
                }
            }
            #endregion

            if (_toolStripMenuItemsWorkPackages != null)
            {
                foreach (ToolStripMenuItem item in _toolStripMenuItemsWorkPackages.DropDownItems)
                {
                    item.Click -= AddToWorkPackageItemClick;
                }

                _toolStripMenuItemsWorkPackages.DropDownItems.Clear();

                foreach (WorkPackage workPackage in _openPubWorkPackages)
                {
                    ToolStripMenuItem item = new ToolStripMenuItem(workPackage.Title);
                    item.Click += AddToWorkPackageItemClick;
                    item.Tag    = workPackage;
                    _toolStripMenuItemsWorkPackages.DropDownItems.Add(item);
                }
            }

            ButtonAdd.Enabled = false;
        }
예제 #10
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");
        }
예제 #11
0
        /// <summary>
        /// Заполняет поля для редактирования директивы
        /// </summary>
        private void UpdateInformation()
        {
            ataChapterComboBox.UpdateInformation();

            _specialists.Clear();
            _specialists.AddRange(GlobalObjects.CasEnvironment.NewLoader.GetObjectList <SpecialistDTO, Specialist>());
            _qualifications.Clear();
            var aircraftWorkerCategoties = GlobalObjects.CasEnvironment.GetDictionary <AircraftWorkerCategory>();

            if (aircraftWorkerCategoties != null)
            {
                _qualifications.AddRange(aircraftWorkerCategoties.OfType <AircraftWorkerCategory>());
            }

            comboBoxPreparedBy.Items.Clear();
            comboBoxPreparedBy.Items.AddRange(_specialists.GetValidEntries());
            comboBoxChechedBy.Items.Clear();
            comboBoxChechedBy.Items.AddRange(_specialists.GetValidEntries());
            comboBoxApprovedBy.Items.Clear();
            comboBoxApprovedBy.Items.AddRange(_specialists.GetValidEntries());
            comboBoxQualification.Items.Clear();
            comboBoxQualification.Items.AddRange(_qualifications.ToArray());
            comboBoxMMRef.Items.Clear();
            comboBoxMMRef.Items.AddRange(RefDocType.Items.ToArray());
            comboBoxWorkType.Items.Clear();
            comboBoxWorkType.Items.AddRange(MaintenanceDirectiveTaskType.Items.ToArray());

            commonListViewControlEqipmentAndMaterials.ViewedType = typeof(AccessoryRequired);

            if (_currentDirective == null)
            {
                return;
            }

            ATAChapter                         = _currentDirective.AtaChapter;
            textboxFormRev.Text                = _currentDirective.FormRevision;
            textboxJobCardHeader.Text          = _currentDirective.JobCardHeader;
            dateTimePickerFormRevDate.Value    = _currentDirective.FormDate;
            textboxTitle.Text                  = _currentDirective.Title;
            textBoxStation.Text                = _currentDirective.Station;
            textBoxMRO.Text                    = _currentDirective.MRO;
            textBoxJCRevNumber.Text            = _currentDirective.JobCardRevision;
            textboxFooter.Text                 = _currentDirective.JobCardFooter;
            textBoxAccess.Text                 = _currentDirective.Access;
            textBoxZone.Text                   = _currentDirective.Zone;
            textBoxForm.Text                   = _currentDirective.Form;
            dateTimePickerJCRevDate.Value      = _currentDirective.JobCardRevisionDate;
            textBoxApplicability.Text          = _currentDirective.Applicability;
            textBoxPhase.Text                  = _currentDirective.Phase;
            textBoxWorkArea.Text               = _currentDirective.WorkArea;
            textBoxMMRevisionNumber.Text       = _currentDirective.MaintenanceManualRevision;
            dateTimePickerMMRevisionDate.Value = _currentDirective.MaintenanceManualRevisionDate;
            numericUpDownManHours.Value        = (decimal)_currentDirective.ManHours;
            numericUpDownMan.Value             = _currentDirective.Man;
            textBoxAttachedTo.Text             = "";
            dateTimePickerCheckedDate.Value    = _currentDirective.CheckedByDate;
            dateTimePickerApprovedDate.Value   = _currentDirective.ApprovedByDate;
            dateTimePickerPreparedDate.Value   = _currentDirective.PreparedByDate;

            commonListViewControlEqipmentAndMaterials.SetItemsArray(_currentDirective.Kits.ToArray());

            jobCardTaskListControl.JobCard = _currentDirective;

            if (_currentDirective.PreparedBy != null)
            {
                Specialist selectedSpec = _specialists.GetItemById(_currentDirective.PreparedBy.ItemId);
                if (selectedSpec != null)
                {
                    comboBoxPreparedBy.SelectedItem = selectedSpec;
                }
                else
                {
                    //Искомый специалист недействителен
                    comboBoxPreparedBy.Items.Add(_currentDirective.PreparedBy);
                    comboBoxPreparedBy.SelectedItem = _currentDirective.PreparedBy;
                }
            }

            if (_currentDirective.CheckedBy != null)
            {
                Specialist selectedSpec = _specialists.GetItemById(_currentDirective.CheckedBy.ItemId);
                if (selectedSpec != null)
                {
                    comboBoxChechedBy.SelectedItem = selectedSpec;
                }
                else
                {
                    //Искомый специалист недействителен
                    comboBoxChechedBy.Items.Add(_currentDirective.CheckedBy);
                    comboBoxChechedBy.SelectedItem = _currentDirective.CheckedBy;
                }
            }

            if (_currentDirective.ApprovedBy != null)
            {
                Specialist selectedSpec = _specialists.GetItemById(_currentDirective.ApprovedBy.ItemId);
                if (selectedSpec != null)
                {
                    comboBoxApprovedBy.SelectedItem = selectedSpec;
                }
                else
                {
                    //Искомый специалист недействителен
                    comboBoxApprovedBy.Items.Add(_currentDirective.ApprovedBy);
                    comboBoxApprovedBy.SelectedItem = _currentDirective.ApprovedBy;
                }
            }

            if (_currentDirective.Qualification != null)
            {
                Specialist selectedSpec = _specialists.GetItemById(_currentDirective.Qualification.ItemId);
                if (selectedSpec != null)
                {
                    comboBoxQualification.SelectedItem = selectedSpec;
                }
                else
                {
                    //Искомый специалист недействителен
                    comboBoxQualification.Items.Add(_currentDirective.Qualification);
                    comboBoxQualification.SelectedItem = _currentDirective.Qualification;
                }
            }

            comboBoxWorkType.SelectedItem = _currentDirective.WorkType;
            if (comboBoxWorkType.SelectedItem == null)
            {
                comboBoxWorkType.SelectedIndex = 0;
            }

            comboBoxMMRef.SelectedItem = _currentDirective.MaintenanceManual;
            if (comboBoxMMRef.SelectedItem == null)
            {
                comboBoxMMRef.SelectedIndex = 0;
            }

            //labelACTypeValue;
            //labelACRegValue;
            //labelACTATValue;
            //labelACTACValue;
            //labelRelatedTaskValue;
            //labelDateValue;
            //labelIntervalValue;

            if (comboBoxPreparedBy.SelectedItem != null && ((Specialist)comboBoxPreparedBy.SelectedItem).IsDeleted)
            {
                comboBoxPreparedBy.BackColor = Color.FromArgb(Highlight.Red.Color);
            }
            else
            {
                comboBoxPreparedBy.BackColor = Color.White;
            }

            if (comboBoxChechedBy.SelectedItem != null && ((Specialist)comboBoxChechedBy.SelectedItem).IsDeleted)
            {
                comboBoxChechedBy.BackColor = Color.FromArgb(Highlight.Red.Color);
            }
            else
            {
                comboBoxChechedBy.BackColor = Color.White;
            }

            if (comboBoxApprovedBy.SelectedItem != null && ((Specialist)comboBoxApprovedBy.SelectedItem).IsDeleted)
            {
                comboBoxApprovedBy.BackColor = Color.FromArgb(Highlight.Red.Color);
            }
            else
            {
                comboBoxApprovedBy.BackColor = Color.White;
            }

            if (comboBoxQualification.SelectedItem != null && ((AircraftWorkerCategory)comboBoxQualification.SelectedItem).IsDeleted)
            {
                comboBoxQualification.BackColor = Color.FromArgb(Highlight.Red.Color);
            }
            else
            {
                comboBoxQualification.BackColor = Color.White;
            }
        }
예제 #12
0
        protected override void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            backgroundWorker.ReportProgress(50);

            Invoke(new Action(() => listViewCompliance.Items.Clear()));

            if (_currentDirective == null)
            {
                e.Cancel = true;
                return;
            }

            List <AbstractRecord>  lastRecords      = new List <AbstractRecord>();
            List <NextPerformance> nextPerformances = new List <NextPerformance>();

            //прогнозируемый ресурс
            //если известна родительская деталь данной директивы,
            //то ее текущая наработка и средняя утилизация
            //используются в качестве ресурсов прогноза
            //для расчета всех просроченных выполнений
            ForecastData forecastData   = null;
            Aircraft     parentAircraft = null;

            if (_currentDirective.ParentBaseComponent != null)
            {
                //если известна родительская деталь данной директивы,
                //то ее текущая наработка и средняя утилизация
                //используются в качестве ресурсов прогноза
                //для расчета всех просроченных выполнений
                forecastData = new ForecastData(DateTime.Now,
                                                _currentDirective.ParentBaseComponent.AverageUtilization,
                                                GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(_currentDirective.ParentBaseComponent));
                parentAircraft = GlobalObjects.AircraftsCore.GetAircraftById(_currentDirective.ParentBaseComponent.ParentAircraftId);//TODO:(Evgenii Babak) пересмотреть использование ParentAircrafId здесь
            }
            //расчет след. выполнений директивы.
            //если известен ресурс прогноза, то будут расчитаны все просрочнные выполнения
            //если неизвестне, то только первое
            //GlobalObjects.PerformanceCalculator.GetNextPerformance(_currentDirective, forecastData);
            nextPerformances.AddRange(_currentDirective.NextPerformances);
            lastRecords.AddRange(_currentDirective.PerformanceRecords.ToArray());

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

            if (backgroundWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Opened));

            if (backgroundWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            _openPubWorkPackages.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft, WorkPackageStatus.Published));

            CommonCollection <WorkPackage> allWorkPackagesIncludedTask     = new CommonCollection <WorkPackage>();
            CommonCollection <WorkPackage> openPubWorkPackagesIncludedTask = new CommonCollection <WorkPackage>();
            CommonCollection <WorkPackage> closedWorkPackages = new CommonCollection <WorkPackage>();

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

            allWorkPackagesIncludedTask.AddRange(GlobalObjects.WorkPackageCore.GetWorkPackagesLite(parentAircraft,
                                                                                                   WorkPackageStatus.All,
                                                                                                   new IDirective[] { _currentDirective }));


            #region Добавление в список просроченных выполнений
            //и сравнение их с открытыми и опубликованными рабочими пакетами
            openPubWorkPackagesIncludedTask.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Opened ||
                                                                                       wp.Status == WorkPackageStatus.Published));
            //сбор всех записей рабочих пакетов для удобства фильтрации
            List <WorkPackageRecord> openPubWpRecords = openPubWorkPackagesIncludedTask.SelectMany(wp => wp.WorkPakageRecords).ToList();
            //LINQ запрос для сортировки записей по дате
            List <NextPerformance> sortNextRecords = (from record in nextPerformances
                                                      orderby GetDate(record) descending
                                                      select record).ToList();
            for (int i = 0; i < sortNextRecords.Count; i++)
            {
                if (backgroundWorker.CancellationPending)
                {
                    allWorkPackagesIncludedTask.Clear();
                    openPubWorkPackagesIncludedTask.Clear();
                    closedWorkPackages.Clear();

                    e.Cancel = true;
                    return;
                }

                //поиск записи в рабочих пакетах по данному чеку
                //чей номер группы выполнения (по записи) совпадает с расчитанным
                Directive directive = (Directive)sortNextRecords[i].Parent;
                //номер выполнения
                int parentCountPerf;
                if (directive.LastPerformance != null)
                {
                    parentCountPerf = directive.LastPerformance.PerformanceNum <= 0
                        ? 1
                        : directive.LastPerformance.PerformanceNum;
                }
                else
                {
                    parentCountPerf = 0;
                }
                parentCountPerf += directive.NextPerformances.IndexOf(sortNextRecords[i]);
                parentCountPerf += 1;

                WorkPackageRecord wpr =
                    openPubWpRecords.Where(r => r.PerformanceNumFromStart == parentCountPerf &&
                                           r.WorkPackageItemType == directive.SmartCoreObjectType.ItemId &&
                                           r.DirectiveId == directive.ItemId).FirstOrDefault();
                if (wpr != null)
                {
                    WorkPackage wp = openPubWorkPackagesIncludedTask.GetItemById(wpr.WorkPakageId);
                    //запись о выполнении блокируется найденым пакетом
                    sortNextRecords[i].BlockedByPackage = wp;
                    //последующие записи о выполнении так же должны быть заблокированы
                    for (int j = i - 1; j >= 0; j--)
                    {
                        //блокировать нужно все рабочие записи, или до первой записи,
                        //заблокированной другим рабочим пакетом
                        if (sortNextRecords[j].BlockedByPackage != null ||
                            sortNextRecords[j].Condition != ConditionState.Overdue)
                        {
                            break;
                        }
                        if (sortNextRecords[j].Parent == directive)
                        {
                            sortNextRecords[j].BlockedByPackage = wp;
                            Invoke(new Action <int, Color>(SetItemColor), new object[] { j, Color.FromArgb(Highlight.GrayLight.Color) });
                        }
                    }
                }
                Invoke(new Action <NextPerformance>(AddListViewItem), sortNextRecords[i]);
            }
            #endregion

            #region Добавление в список записей о произведенных выполнениях
            //и сравнение их с закрытыми рабочими пакетами
            closedWorkPackages.AddRange(allWorkPackagesIncludedTask.Where(wp => wp.Status == WorkPackageStatus.Closed));

            //LINQ запрос для сортировки записей по дате
            List <AbstractRecord> sortLastRecords = (from record in lastRecords
                                                     orderby record.RecordDate descending
                                                     select record).ToList();
            ////////////////////////////////////////////

            foreach (AbstractRecord t in sortLastRecords)
            {
                if (backgroundWorker.CancellationPending)
                {
                    allWorkPackagesIncludedTask.Clear();
                    openPubWorkPackagesIncludedTask.Clear();
                    closedWorkPackages.Clear();

                    e.Cancel = true;
                    return;
                }

                DirectiveRecord directiveRecord = (DirectiveRecord)t;
                WorkPackage     workPackage     =
                    closedWorkPackages.Where(wp => wp.ItemId == directiveRecord.DirectivePackageId).FirstOrDefault();
                Invoke(new Action <AbstractPerformanceRecord, WorkPackage>(AddListViewItem),
                       new object[] { t, workPackage });
            }
            #endregion

            allWorkPackagesIncludedTask.Clear();
            openPubWorkPackagesIncludedTask.Clear();
            closedWorkPackages.Clear();

            backgroundWorker.ReportProgress(100);
        }
예제 #13
0
        /// <summary>
        /// Обновляет значения полей
        /// </summary>
        public override void FillControls()
        {
            BeginUpdate();

            lookupComboboxDeferred.SelectedIndexChanged -= LookupComboboxDeferredSelectedIndexChanged;

            UpdateControls();

            _specialists.Clear();
            try
            {
                _specialists.AddRange(GlobalObjects.CasEnvironment.Loader.GetObjectListAll <Specialist>(loadChild: true).Where(i => i.Specialization?.Department?.FullName == "Line Maintenance"));
            }
            catch (Exception ex)
            {
                Program.Provider.Logger.Log("Error while load Specialist fo Discrepancy", ex);
            }


            if (ShowDeffects)
            {
                comboBoxPhase.Items.Clear();
                comboBoxPhase.Items.AddRange(DeffeсtPhase.Items.ToArray());
                comboBoxPhase.SelectedItem = Discrepancy.DeffeсtPhase;

                comboBoxDeffectCat.Items.Clear();
                comboBoxDeffectCat.Items.AddRange(DeffeсtCategory.Items.ToArray());
                comboBoxDeffectCat.SelectedItem = Discrepancy.DeffeсtCategory;

                comboBoxDeffectConfirm.Items.Clear();
                comboBoxDeffectConfirm.Items.AddRange(DeffectConfirm.Items.ToArray());
                comboBoxDeffectConfirm.SelectedItem = Discrepancy.DeffectConfirm;

                comboBoxActinType.Items.Clear();
                comboBoxActinType.Items.AddRange(ActionType.Items.ToArray());
                comboBoxActinType.SelectedItem = Discrepancy.ActionType;

                comboBoxInterruptionType.Items.Clear();
                comboBoxInterruptionType.Items.AddRange(InterruptionType.Items.ToArray());
                comboBoxInterruptionType.SelectedItem = Discrepancy.InterruptionType;


                checkBoxOccurrence.Checked   = Discrepancy.IsOccurrence;
                checkBoxSubstruction.Checked = Discrepancy.Substruction;

                comboBoxFaultConsequence.Items.Clear();
                comboBoxFaultConsequence.Items.AddRange(ConsequenceFaults.Items.ToArray());
                comboBoxFaultConsequence.SelectedItem = Discrepancy.ConsequenceFault;

                comboBoxOPSConsequence.Items.Clear();
                comboBoxOPSConsequence.Items.AddRange(ConsequenceOPS.Items.ToArray());
                comboBoxOPSConsequence.SelectedItem = Discrepancy.ConsequenceOps;


                comboBoxConsequenceType.Items.Clear();
                comboBoxConsequenceType.Items.AddRange(IncidentType.Items.ToArray());
                comboBoxConsequenceType.SelectedItem = Discrepancy.ConsequenceType;


                comboBoxOccurrence.Items.Clear();
                comboBoxOccurrence.Items.AddRange(OccurrenceType.Items.ToArray());
                comboBoxOccurrence.SelectedItem = Discrepancy.Occurrence;


                comboBoxAuth.Items.Clear();
                comboBoxAuth.Items.AddRange(_specialists.OrderBy(i => i.LastName).ToArray());
                comboBoxAuth.SelectedItem = Discrepancy.Auth;


                var aircraftBaseDetails = GlobalObjects.ComponentCore.GetAicraftBaseComponents(Discrepancy.ParentFlight.AircraftId, BaseComponentType.Engine.ItemId).ToList();
                if (aircraftBaseDetails.Count > 0)
                {
                    comboBoxEngine.Items.Clear();
                    comboBoxEngine.Items.AddRange(aircraftBaseDetails.ToArray());

                    var selected = aircraftBaseDetails.GetItemById(Discrepancy.BaseComponentId);
                    if (selected != null)
                    {
                        comboBoxEngine.SelectedItem = selected;
                    }
                    else
                    {
                        comboBoxEngine.SelectedIndex = 0;
                    }
                }

                numericUpDownDelay.Value = Discrepancy.TimeDelay;
                textBoxRemarks.Text      = Discrepancy.Remark;
                textBoxMessages.Text     = Discrepancy.Messages;
                textBoxFDR.Text          = Discrepancy.FDR;
                textBoxEngineRemark.Text = Discrepancy.EngineRemarks;
                checkBoxEngine.Checked   = Discrepancy.EngineShutUp;
            }

            ataChapterComboBox.UpdateInformation();

            TemplateComboBox.Items.Clear();
            TemplateComboBox.Items.AddRange(_discrepancies.ToArray());

            TemplateComboBox.SelectedItem = _discrepancies.FirstOrDefault(
                d => d.ATAChapter != null && d.ATAChapter.Equals(Discrepancy.ATAChapter) &&
                d.CertificateOfReleaseToService != null &&
                d.CertificateOfReleaseToService.AuthorizationB1.Equals(d.CertificateOfReleaseToService.AuthorizationB1) &&
                d.CertificateOfReleaseToService.AuthorizationB2.Equals(d.CertificateOfReleaseToService.AuthorizationB2) &&
                d.CertificateOfReleaseToService.Station.Equals(d.CertificateOfReleaseToService.Station) &&
                d.CorrectiveAction != null &&
                d.CorrectiveAction.Description.Equals(d.CorrectiveAction.Description) &&
                d.CorrectiveAction.PartNumberOff.Equals(d.CorrectiveAction.PartNumberOff) &&
                d.CorrectiveAction.PartNumberOn.Equals(d.CorrectiveAction.PartNumberOn) &&
                d.CorrectiveAction.SerialNumberOff.Equals(d.CorrectiveAction.SerialNumberOff) &&
                d.CorrectiveAction.SerialNumberOn.Equals(d.CorrectiveAction.SerialNumberOn));

            #region lookupComboboxDeferred

            if (Discrepancy != null)
            {
                var aircraft = GlobalObjects.AircraftsCore.GetAircraftById(Discrepancy.ParentFlight.AircraftId);

                string displayerText =
                    aircraft.RegistrationNumber + ". " +
                    DirectiveType.DeferredItems.CommonName;

                lookupComboboxDeferred.SetAddScreenControl <DeferredScreen>
                    (new object[] { aircraft, Discrepancy.ParentFlight },
                    displayerText + ". New Directive");

                lookupComboboxDeferred.SetEditScreenControl <DeferredScreen>(displayerText);
                lookupComboboxDeferred.SetItemsScreenControl <PrimeDirectiveListScreen>
                    (new object[] { aircraft, DirectiveType.DeferredItems, ADType.None },
                    displayerText);
                lookupComboboxDeferred.LoadObjectsFunc = GlobalObjects.DirectiveCore.GetDeferredItems;
                lookupComboboxDeferred.FilterParam1    = Discrepancy.ParentFlight;
                lookupComboboxDeferred.UpdateInformation();
            }

            #endregion

            #region lookupComboboxFlight

            if (Discrepancy != null && Discrepancy.ItemId > 0 && Discrepancy.DirectiveId > 0)
            {
                var aircraft = GlobalObjects.AircraftsCore.GetAircraftById(Discrepancy.ParentFlight.AircraftId);

                lookupComboboxFlight.SetEditScreenControl <FlightScreen>
                    (aircraft.RegistrationNumber + ". " + Discrepancy.ParentFlight.FlightNo);

                ATLB parentAtlb = null;
                try
                {
                    parentAtlb = GlobalObjects.CasEnvironment.NewLoader.GetObjectById <ATLBDTO, ATLB>(Discrepancy.ParentFlight.ATLBId);
                }
                catch (Exception ex)
                {
                    Program.Provider.Logger.Log("Error while load linked ATLB fo Discrepancy", ex);
                }
                if (parentAtlb != null)
                {
                    //Проверить на значение свойтсва ParentAircraft в parentAtlb
                    lookupComboboxFlight.SetItemsScreenControl <FlightsListScreen>
                        (new object[] { parentAtlb },
                        aircraft.RegistrationNumber + ". ATLB No " + parentAtlb.ATLBNo);

                    lookupComboboxFlight.LoadObjectsFunc = GlobalObjects.AircraftFlightsCore.GetFlightsByAtlb;
                    lookupComboboxFlight.FilterParam1    = Discrepancy.ParentFlight.AircraftId;
                    lookupComboboxFlight.FilterParam2    = parentAtlb.ItemId;
                    lookupComboboxFlight.UpdateInformation();
                }
            }

            #endregion



            if (Discrepancy != null)
            {
                comboSpecialist1.Items.AddRange(_specialists.OrderBy(i => i.LastName).ToArray());
                comboSpecialist2.Items.AddRange(_specialists.OrderBy(i => i.LastName).ToArray());
                radioCrew.Checked             = Discrepancy.FilledBy == false; // DiscrepancyFilledByEnum.Crew;
                radioMaintenanceStaff.Checked = Discrepancy.FilledBy;          //DiscrepancyFilledByEnum.MaintenanceStaff;
                ataChapterComboBox.ATAChapter = Discrepancy.ATAChapter;
                radioOpen.Checked             = Discrepancy.Status == CorrectiveActionStatus.Open;
                radioClose.Checked            = Discrepancy.Status == CorrectiveActionStatus.Close;
                radioButtonPublish.Checked    = Discrepancy.Status == CorrectiveActionStatus.Publish;
                textDescription.Text          = Discrepancy.Description ?? "No";
                checkBoxReliability.Checked   = Discrepancy.IsReliability;
                if (Discrepancy.Num > numericUpDownIndex.Maximum)
                {
                    numericUpDownIndex.Value = numericUpDownIndex.Maximum;
                }
                else if (Discrepancy.Num < numericUpDownIndex.Minimum)
                {
                    numericUpDownIndex.Value = numericUpDownIndex.Minimum;
                }
                else
                {
                    numericUpDownIndex.Value = Discrepancy.Num;
                }

                if (Discrepancy.DirectiveId > 0)
                {
                    lookupComboboxDeferred.SelectedItemId = Discrepancy.DirectiveId;
                    lookupComboboxFlight.SelectedItemId   = Discrepancy.FlightId;
                }
                if (Discrepancy.DeferredItem != null)
                {
                    ataChapterComboBox.Enabled    = false;
                    ataChapterComboBox.ATAChapter = Discrepancy.DeferredItem.ATAChapter;
                    radioOpen.Enabled             = false;
                    radioClose.Enabled            = false;

                    if (Discrepancy.DeferredItem.Status == DirectiveStatus.Closed)
                    {
                        radioClose.Checked = true;
                    }
                    else
                    {
                        radioOpen.Checked = true;
                    }

                    _showDeferredInfoPanel       = true;
                    textBoxMelCdl.Text           = Discrepancy.DeferredItem.DeferredMelCdlItem;
                    textBoxDeferredCategory.Text = Discrepancy.DeferredItem.DeferredCategory.ToString();

                    Directive directive = Discrepancy.DeferredItem;
                    dateTimePickerOpenDate.Visible = true;
                    dateTimePickerOpenDate.Value   = directive.Threshold.EffectiveDate;

                    if (directive.PerformanceRecords.Count > 0)
                    {
                        if (directive.IsClosed)
                        {
                            dateTimePickerClosingDate.Visible = true;
                            dateTimePickerExtension.Visible   = false;
                            numericUpDownExtTimes.Visible     = false;
                            dateTimePickerClosingDate.Value   = directive.PerformanceRecords.GetLast().RecordDate;
                        }
                        else
                        {
                            dateTimePickerClosingDate.Visible = false;
                            dateTimePickerExtension.Visible   = true;
                            numericUpDownExtTimes.Visible     = true;
                            dateTimePickerExtension.Value     = directive.PerformanceRecords.GetLast().RecordDate;

                            try
                            {
                                numericUpDownExtTimes.Value =
                                    GlobalObjects.CasEnvironment.Loader.GetCountPerformanceRecords <DirectiveRecord>(
                                        SmartCoreType.Directive, directive.ItemId);
                            }
                            catch (Exception ex)
                            {
                                Program.Provider.Logger.Log("Error while load count of records for directive id:" + directive.ItemId,
                                                            ex);
                            }

                            GlobalObjects.PerformanceCalculator.GetNextPerformance(directive);
                            lifelengthViewerRemains.Lifelength = directive.Remains;
                        }
                    }
                    else
                    {
                        dateTimePickerClosingDate.Visible = false;
                        dateTimePickerExtension.Visible   = false;
                        numericUpDownExtTimes.Visible     = false;

                        GlobalObjects.PerformanceCalculator.GetNextPerformance(directive);
                        lifelengthViewerRemains.Lifelength = directive.Remains;
                    }
                }
                else
                {
                    _showDeferredInfoPanel = false;
                }

                if (!panelExtendable.Visible)
                {
                    panelDeferredInfo.Visible = _showDeferredInfoPanel;
                }
                else
                {
                    panelDeferredInfo.Visible = _showDeferredInfoPanel && extendableRichContainer.Extended;
                }

                if (Discrepancy.CorrectiveAction != null)
                {
                    textCorrectiveAction.Text = Discrepancy.CorrectiveAction.Description ?? "No";
                    textPNOff.Text            = Discrepancy.CorrectiveAction.PartNumberOff;
                    textSNOff.Text            = Discrepancy.CorrectiveAction.SerialNumberOff;
                    textPNOn.Text             = Discrepancy.CorrectiveAction.PartNumberOn;
                    textSNOn.Text             = Discrepancy.CorrectiveAction.SerialNumberOn;
                    textADDNo.Text            = Discrepancy.CorrectiveAction.AddNo ?? "No";
                }
                else
                {
                    textCorrectiveAction.Text = "No";
                    textADDNo.Text            = "No";
                    textPNOff.Text            = textSNOff.Text = textPNOn.Text = textSNOn.Text = "";
                }

                if (Discrepancy.CertificateOfReleaseToService != null)
                {
                    textStation.Text            = Discrepancy.CertificateOfReleaseToService.Station;
                    dateTimePickerRTSDate.Value = Discrepancy.CertificateOfReleaseToService.RecordDate;
                    if (Discrepancy.CertificateOfReleaseToService.AuthorizationB1 != null)
                    {
                        Specialist selectedSpec = _specialists.GetItemById(Discrepancy.CertificateOfReleaseToService.AuthorizationB1.ItemId);
                        if (selectedSpec != null)
                        {
                            comboSpecialist1.SelectedItem = selectedSpec;
                        }
                        else
                        {
                            //Искомый специалист недействителен
                            comboSpecialist1.Items.Add(Discrepancy.CertificateOfReleaseToService.AuthorizationB1);
                            comboSpecialist1.SelectedItem = Discrepancy.CertificateOfReleaseToService.AuthorizationB1;
                        }
                        comboSpecialist1.BackColor =
                            ((Specialist)comboSpecialist1.SelectedItem).IsDeleted
                          ? Color.FromArgb(Highlight.Red.Color)
                          : Color.White;
                    }
                    if (Discrepancy.CertificateOfReleaseToService.AuthorizationB2 != null)
                    {
                        Specialist selectedSpec = _specialists.GetItemById(Discrepancy.CertificateOfReleaseToService.AuthorizationB2.ItemId);
                        if (selectedSpec != null)
                        {
                            comboSpecialist2.SelectedItem = selectedSpec;
                        }
                        else
                        {
                            //Искомый специалист недействителен
                            comboSpecialist2.Items.Add(Discrepancy.CertificateOfReleaseToService.AuthorizationB2);
                            comboSpecialist2.SelectedItem = Discrepancy.CertificateOfReleaseToService.AuthorizationB2;
                        }
                        comboSpecialist2.BackColor =
                            ((Specialist)comboSpecialist2.SelectedItem).IsDeleted
                                    ? Color.FromArgb(Highlight.Red.Color)
                                    : Color.White;
                    }
                }
                else
                {
                    textStation.Text = "";
                    comboSpecialist1.SelectedItem = null;
                    comboSpecialist2.SelectedItem = null;
                    dateTimePickerRTSDate.Value   = DateTime.Today;
                }
            }
            else
            {
                textADDNo.Text                = textDescription.Text = textCorrectiveAction.Text = textPNOff.Text =
                    textSNOff.Text            = textPNOn.Text = textSNOn.Text = textStation.Text = "";
                radioOpen.Checked             = radioClose.Checked = radioCrew.Checked = radioMaintenanceStaff.Checked = false;
                dateTimePickerRTSDate.Value   = DateTime.Today;
                comboSpecialist1.SelectedItem = null;
                comboSpecialist2.SelectedItem = null;
                textDescription.Text          = "What Where When Extent";
            }


            comboBoxWP.Items.Clear();
            comboBoxWP.Items.AddRange(_workPackages.ToArray());
            comboBoxWP.SelectedItem  = _workPackages.FirstOrDefault(i => i.ItemId == Discrepancy.WorkPackageId);
            comboBoxWP.DisplayMember = "ComboBoxMember";


            comboBoxComp.Items.Clear();
            comboBoxComp.Items.AddRange(_transferRecords.ToArray());
            comboBoxComp.SelectedItem = _transferRecords.FirstOrDefault(i => (bool)i.ParentComponent?.SerialNumber.Equals(textSNOn.Text) && (bool)i.ParentComponent?.PartNumber.Equals(textPNOn.Text) &&
                                                                        (bool)i.ReplaceComponent?.SerialNumber.Equals(textSNOff.Text) && (bool)i.ReplaceComponent?.PartNumber.Equals(textPNOff.Text));
            comboBoxComp.DisplayMember = "ComboBoxMember";

            SetExtendableControlCaption();

            lookupComboboxDeferred.SelectedIndexChanged += LookupComboboxDeferredSelectedIndexChanged;

            EndUpdate();

            comboBoxPhase.Select(comboBoxPhase.Text.Length, 0);
        }
예제 #14
0
파일: LDNDListScreen.cs 프로젝트: jecus/Cas
        protected override void AnimatedThreadWorkerDoWork(object sender, DoWorkEventArgs e)
        {
            _result.Clear();
            _initial.Clear();
            var mtopDirectives = new List <IMtopCalc>();

            AnimatedThreadWorker.ReportProgress(10, "load Directives");


            var baseComponents = GlobalObjects.ComponentCore.GetAicraftBaseComponents(CurrentAircraft.ItemId);
            var components     = GlobalObjects.ComponentCore.GetComponents(baseComponents.ToList())
                                 .Where(i => i.ParentBaseComponent.BaseComponentTypeId != BaseComponentType.LandingGear.ItemId);
            var componentDirectives = components.SelectMany(i => i.ComponentDirectives).ToList();


            var bcDirective = baseComponents.SelectMany(i => i.ComponentDirectives);

            foreach (var directive in bcDirective)
            {
                directive.FromBaseComponent = true;
            }

            componentDirectives.AddRange(bcDirective);

            var mpds        = GlobalObjects.MaintenanceCore.GetMaintenanceDirectives(CurrentAircraft);
            var mpdToRemove = new List <MaintenanceDirective>();

            foreach (var componentDirective in 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;
                    var mpd = mpds.FirstOrDefault(i => i.ItemId == id);

                    if (mpd != null)
                    {
                        componentDirective.MaintenanceDirective = mpd;

                        var bindedItemRelationType = ItemRelationHelper
                                                     .ConvertBLItemRelationToUIITem(componentDirective.WorkItemsRelationType,
                                                                                    componentDirective.IsFirst.HasValue && componentDirective.IsFirst.Value);
                        if (bindedItemRelationType == WorkItemsRelationTypeUI.ThisItemAffectOnAnother)
                        {
                            mpdToRemove.Add(mpd);
                        }
                    }
                }
            }

            foreach (var directive in mpdToRemove)
            {
                mpds.Remove(directive);
            }

            var directives = GlobalObjects.DirectiveCore.GetDirectives(CurrentAircraft, DirectiveType.All);

            mtopDirectives.AddRange(mpds.Where(i => i.Status == DirectiveStatus.Open || i.Status == DirectiveStatus.Repetative));
            mtopDirectives.AddRange(directives.Where(i => i.Status == DirectiveStatus.Open || i.Status == DirectiveStatus.Repetative));
            mtopDirectives.AddRange(componentDirectives.Where(i => i.Status == DirectiveStatus.Open || i.Status == DirectiveStatus.Repetative));



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


            AnimatedThreadWorker.ReportProgress(50, "Calculation");


            GlobalObjects.MTOPCalculator.CalculateDirectiveNew(mtopDirectives, _averageUtilization);

            _initial.AddRange(mtopDirectives.SelectMany(i => i.NextPerformances));

            FilterItems(_initial, _result);

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



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

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

            if (AnimatedThreadWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            #endregion
            AnimatedThreadWorker.ReportProgress(100, "Completed");
        }