/// <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(); }
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(); }
/// <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(); }
/// <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; } }
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); }
/// <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(); }
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); }
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; }
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"); }
/// <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; } }
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); }
/// <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); }
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"); }