private void ComboBoxCheckRecordSelectedIndexChanged(object sender, EventArgs e) { if (comboBoxCheckRecord.SelectedItem as MaintenanceCheckRecordGroup == null) { return; } MaintenanceCheckRecordGroup maintenanceCheckRecordGroup = comboBoxCheckRecord.SelectedItem as MaintenanceCheckRecordGroup; MaintenanceCheckRecord maintenanceCheckRecord = maintenanceCheckRecordGroup.GetMinIntervalCheckRecord(); if (maintenanceCheckRecord == null) { return; } lifelengthViewer_LastCompliance.Lifelength = new Lifelength(maintenanceCheckRecord.OnLifelength); }
/// <summary> /// Расчитывает последнюю группу записей о выполнении чеков программы обслуживания в которой заданный чек будет старшим /// <br/> и возвращает запись о выполнении заданного чека /// </summary> /// <param name="check">Чек, для которого нужно найти группу</param> /// <returns>запись о выполнении или null</returns> public MaintenanceCheckRecord GetLastCheckRecordWhereCheckIsSenior(MaintenanceCheck check) { if (check == null) { return(null); } List <MaintenanceCheck> aircraftScheduleChecks = Items.Where(c => c.Schedule == check.Schedule && c.ParentAircraftId == check.ParentAircraftId && c.Grouping == check.Grouping && c.Resource == check.Resource).ToList(); List <MaintenanceCheckRecordGroup> checkGroupsCollections = new List <MaintenanceCheckRecordGroup>(); foreach (MaintenanceCheck checkItem in aircraftScheduleChecks) { foreach (MaintenanceCheckRecord record in checkItem.PerformanceRecords) { //Поиск коллекции групп, в которую входят группы с нужными критериями //по плану, группировка и основному ресурсу MaintenanceCheckRecordGroup collection = checkGroupsCollections .FirstOrDefault(g => g.Schedule == check.Schedule && g.Grouping == check.Grouping && g.Resource == check.Resource && g.GroupComplianceNum == record.NumGroup); if (collection != null) { //Коллекция найдена collection.Records.Add(record); } else { //Коллекции с нужными критериями нет //Созадние и добавление collection = new MaintenanceCheckRecordGroup(check.Schedule, check.Grouping, check.Resource, record.NumGroup); collection.Records.Add(record); checkGroupsCollections.Add(collection); } } } MaintenanceCheckRecordGroup result = checkGroupsCollections .OrderByDescending(cg => cg.GroupComplianceNum) .FirstOrDefault(cg => cg.CheckIsSenior(check)); return(result == null ? null : result.Records.FirstOrDefault(r => r.ParentId == check.ItemId)); }
private void ButtonRegisterActualStateClick(object sender, EventArgs e) { List <MaintenanceCheckRecord> records = CheckItems.Where(c => c.Grouping) .SelectMany(c => c.PerformanceRecords) .ToList(); List <MaintenanceCheckRecordGroup> maintenanceCheckRecordGroups = new List <MaintenanceCheckRecordGroup>(); foreach (MaintenanceCheckRecord record in records) { 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); } } MaintenanceProgramChangeDialog actualStateDialog = new MaintenanceProgramChangeDialog(_currentAircraft, maintenanceCheckRecordGroups) { Text = "Add new Maintenance program change record" }; actualStateDialog.ShowDialog(); if (actualStateDialog.DialogResult == DialogResult.OK) { InvokeComplianceAdded(null); } }
/// <summary> /// Обновление информации ЭУ /// </summary> private void UpdateInformation() { comboBoxMSG.Items.Clear(); foreach (object o in Enum.GetValues(typeof(MSG)).Cast <MSG>().Where(msg => msg != MSG.Unknown)) { comboBoxMSG.Items.Add(o); } comboBoxMSG.Enabled = true; comboBoxCheckRecord.Items.Clear(); comboBoxCheckRecord.Items.AddRange(_maintenanceCheckRecordGroups.Where(crg => crg.Grouping).ToArray()); if (_currentMaintenanceProgramChangeRecord == null) { return; } if (_currentMaintenanceProgramChangeRecord.OnLifelength != null) { lifelengthViewer_LastCompliance.Lifelength = _currentMaintenanceProgramChangeRecord.OnLifelength; } textBox_Remarks.Text = _currentMaintenanceProgramChangeRecord.Remarks ?? ""; if (comboBoxMSG.Items.Contains(_currentMaintenanceProgramChangeRecord.MSG)) { comboBoxMSG.SelectedItem = _currentMaintenanceProgramChangeRecord.MSG; } MaintenanceCheckRecordGroup rg = _maintenanceCheckRecordGroups.FirstOrDefault(mcrg => mcrg.Records.Any(r => r.ItemId == _currentMaintenanceProgramChangeRecord.MaintenanceCheckRecordId)); if (rg != null && comboBoxCheckRecord.Items.Contains(rg)) { comboBoxCheckRecord.SelectedItem = rg; } if (_currentMaintenanceProgramChangeRecord.OnLifelength != null) { lifelengthViewer_LastCompliance.Lifelength = _currentMaintenanceProgramChangeRecord.OnLifelength; } }
/// <summary> /// Данные работы обновляются по введенным значениям /// </summary> private bool SaveData() { MaintenanceCheckRecordGroup mcrg = (MaintenanceCheckRecordGroup)comboBoxCheckRecord.SelectedItem; MaintenanceCheckRecord mcr = mcrg.GetMinIntervalCheckRecord(); if (mcr != null) { _currentMaintenanceProgramChangeRecord.CalculatedPerformanceSource = mcr.CalculatedPerformanceSource.IsNullOrZero() ? new Lifelength(mcr.ParentCheck.Interval * mcr.PerformanceNum) : new Lifelength(mcr.CalculatedPerformanceSource); _currentMaintenanceProgramChangeRecord.PerformanceNum = mcr.PerformanceNum; _currentMaintenanceProgramChangeRecord.RecordDate = mcr.RecordDate; _currentMaintenanceProgramChangeRecord.MaintenanceCheckRecordId = mcr.ItemId; } _currentMaintenanceProgramChangeRecord.Remarks = textBox_Remarks.Text; _currentMaintenanceProgramChangeRecord.OnLifelength = lifelengthViewer_LastCompliance.Lifelength; if (comboBoxMSG.SelectedItem is MSG) { _currentMaintenanceProgramChangeRecord.MSG = (MSG)comboBoxMSG.SelectedItem; } else { _currentMaintenanceProgramChangeRecord.MSG = MSG.MSG2; } try { GlobalObjects.MaintenanceCore.RegisterMaintenanceProgramChangeRecord(_currentAircraft, _currentMaintenanceProgramChangeRecord); } catch (Exception ex) { Program.Provider.Logger.Log("Error while saving maintenance program change record", ex); return(false); } return(true); }
private void HeaderControlButtonPrintDisplayerRequested(object sender, ReferenceEventArgs e) { if (CurrentAircraft != null) { e.DisplayerText = CurrentAircraft.RegistrationNumber + ". " + ReportText + " Report"; } else { e.DisplayerText = ReportText + " Report"; e.Cancel = true; return; } e.TypeOfReflection = ReflectionTypes.DisplayInNew; if (sender == itemPrintReportMonthlyUtilization) { #if KAC MonthlyUtilizationBuilderKAC reportBuilder = new MonthlyUtilizationBuilderKAC(CurrentAircraft, dateTimePickerDateFrom.Value, dateTimePickerDateTo.Value, _initialDirectiveArray.TotalHoursClear, _initialDirectiveArray.TotalCyclesClear); #else MonthlyUtilizationBuilder reportBuilder = new MonthlyUtilizationBuilder(CurrentAircraft, dateTimePickerDateFrom.Value, dateTimePickerDateTo.Value, GlobalObjects.CasEnvironment.Calculator.GetTotalHours(_initialDirectiveArray), GlobalObjects.CasEnvironment.Calculator.GetTotalCycles(_initialDirectiveArray)); #endif reportBuilder.Flights = _initialDirectiveArray.OrderByDescending(f => f.FlightDate.AddMinutes(f.FlightTime.TotalMinutes)).ToList(); e.TypeOfReflection = ReflectionTypes.DisplayInNew; e.DisplayerText = CurrentAircraft.RegistrationNumber + " Monthly Utilization Report"; e.RequestedEntity = new ReportScreen(reportBuilder); GlobalObjects.AuditRepository.WriteReportAsync(GlobalObjects.CasEnvironment.IdentityUser, "MonthlyUtilizationListScreen (Monthly Utilization)"); } else if (sender == itemPrintReportOperationTime) { _workPackages = GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Closed, _maintenanceChecks.Select(m => (IDirective)m).ToList()); var records = _maintenanceChecks.SelectMany(mc => mc.PerformanceRecords) .Where(pr => pr.RecordDate.Date >= dateTimePickerDateFrom.Value.Date && pr.RecordDate.Date <= dateTimePickerDateTo.Value.Date) .ToList(); var lastCCheckRecord = _maintenanceChecks.SelectMany(mc => mc.PerformanceRecords) .Where(pr => pr.RecordDate.Date <= dateTimePickerDateTo.Value.Date) .OrderByDescending(pr => pr.RecordDate) .FirstOrDefault(); var maintenanceCheckRecordGroups = new List <MaintenanceCheckRecordGroup>(); foreach (MaintenanceCheckRecord record in records) { //Поиск коллекции групп, в которую входят группы с нужными критериями //по плану, группировка и основному ресурсу 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); } } OperationTimeReportBuilder reportBuilder = new OperationTimeReportBuilder(CurrentAircraft, maintenanceCheckRecordGroups, GlobalObjects.ComponentCore.GetAicraftBaseComponents(CurrentAircraft.ItemId), lastCCheckRecord, _workPackages, dateTimePickerDateFrom.Value.Date, dateTimePickerDateTo.Value.Date); e.TypeOfReflection = ReflectionTypes.DisplayInNew; e.DisplayerText = CurrentAircraft.RegistrationNumber + " Operation Time Report"; e.RequestedEntity = new ReportScreen(reportBuilder); GlobalObjects.AuditRepository.WriteReportAsync(GlobalObjects.CasEnvironment.IdentityUser, "MonthlyUtilizationListScreen (Operation Time)"); } else { e.Cancel = true; } }
private void HeaderControlButtonPrintDisplayerRequested(object sender, Interfaces.ReferenceEventArgs e) { if (sender == itemPrintReportGeneralData) { AircraftGeneralDataReportBuilder builder = new AircraftGeneralDataReportBuilder(); string caption = CurrentAircraft.RegistrationNumber + "." + "General data report"; builder.ReportedAircraft = CurrentAircraft; builder.LifelengthAircraftSinceNew = GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(CurrentAircraft); e.DisplayerText = caption; e.TypeOfReflection = ReflectionTypes.DisplayInNew; e.RequestedEntity = new ReportScreen(builder); GlobalObjects.AuditRepository.WriteReportAsync(GlobalObjects.CasEnvironment.IdentityUser, "AircraftGeneralDaraScreen (Aircraft General Data)"); } else if (sender == itemPrintReportTechnicalCondition) { var maintenanceChecks = GlobalObjects.MaintenanceCore.GetMaintenanceCheck(CurrentAircraft, true); var workPackages = GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Closed, maintenanceChecks.Select(m => (IDirective)m).ToList()); var minCCheck = maintenanceChecks.Where(mc => mc.CheckType.ShortName == "C" && mc.Schedule && mc.Grouping && mc.Resource == LifelengthSubResource.Hours) .OrderBy(mc => mc.Interval.GetSubresource(LifelengthSubResource.Hours)) .FirstOrDefault(); var lastCCheckRecord = maintenanceChecks.Where(mc => mc.CheckType.ShortName == "C" && mc.Schedule && mc.Grouping && mc.Resource == LifelengthSubResource.Hours) .SelectMany(mc => mc.PerformanceRecords) .Where(pr => pr.RecordDate.Date <= DateTime.Now) .OrderByDescending(pr => pr.RecordDate) .FirstOrDefault(); var lastACheckRecord = maintenanceChecks.Where(mc => mc.CheckType.ShortName == "A" && mc.Schedule && mc.Grouping && mc.Resource == LifelengthSubResource.Hours) .SelectMany(mc => mc.PerformanceRecords) .Where(pr => pr.RecordDate.Date <= DateTime.Now) .OrderByDescending(pr => pr.RecordDate) .FirstOrDefault(); if (lastCCheckRecord != null) { if (lastACheckRecord.NumGroup == lastCCheckRecord.NumGroup) { lastACheckRecord = null; } } var dCheckRecords = maintenanceChecks.Where(mc => mc.CheckType.ShortName == "D") .SelectMany(mc => mc.PerformanceRecords) .ToList(); var maintenanceCheckRecordGroups = new List <MaintenanceCheckRecordGroup>(); foreach (MaintenanceCheckRecord record in dCheckRecords) { //Поиск коллекции групп, в которую входят группы с нужными критериями //по плану, группировка и основному ресурсу 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); } } AircraftTechnicalConditionReportBuilder reportBuilder = new AircraftTechnicalConditionReportBuilder(CurrentAircraft, minCCheck, GlobalObjects.ComponentCore.GetAicraftBaseComponents(CurrentAircraft.ItemId), lastACheckRecord, lastCCheckRecord, workPackages, maintenanceCheckRecordGroups.Count); e.TypeOfReflection = ReflectionTypes.DisplayInNew; e.DisplayerText = CurrentAircraft.RegistrationNumber + " Operation Time Report"; e.RequestedEntity = new ReportScreen(reportBuilder); GlobalObjects.AuditRepository.WriteReportAsync(GlobalObjects.CasEnvironment.IdentityUser, "AircraftGeneralDaraScreen (Technical Condition)"); } else { e.Cancel = true; } }
private void Edit() { DialogResult dlgResult = DialogResult.None; if (listViewCompliance.SelectedItems[0].Group == listViewCompliance.Groups["overdue"]) { MaintenanceComplainceForm complainceForm = new MaintenanceComplainceForm(_currentAircraft, (MaintenanceCheckGroupByType)listViewCompliance.SelectedItems[0].Tag); dlgResult = complainceForm.ShowDialog(this); } else if (listViewCompliance.SelectedItems[0].Group == listViewCompliance.Groups["next"]) { if (listViewCompliance.SelectedItems[0].Tag is NextPerformance) { NextPerformance np = (NextPerformance)listViewCompliance.SelectedItems[0].Tag; //if (np.Condition != ConditionState.Overdue || np.PerformanceDate > DateTime.Now) //{ // MessageBox.Show("You can not enter a record for not delayed performance", // (string)new GlobalTermsProvider()["SystemName"], // MessageBoxButtons.OK, // MessageBoxIcon.Warning, // MessageBoxDefaultButton.Button1); // return; //} if (np.BlockedByPackage != null) { MessageBox.Show("Perform of the task:" + listViewCompliance.SelectedItems[0].Text + "\nblocked by Work Package:" + "\n" + np.BlockedByPackage.Title, (string)new GlobalTermsProvider()["SystemName"], MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); return; } } if (listViewCompliance.SelectedItems[0].Tag is MaintenanceNextPerformance) { MaintenanceNextPerformance mnp = listViewCompliance.SelectedItems[0].Tag as MaintenanceNextPerformance; if (mnp.PerformanceGroup == null) { return; } MaintenanceCheckGroupByType pg = mnp.PerformanceGroup; MaintenanceComplainceForm complainceForm = new MaintenanceComplainceForm(_currentAircraft, pg); dlgResult = complainceForm.ShowDialog(this); } else if (listViewCompliance.SelectedItems[0].Tag is NextPerformance) { NextPerformance np = listViewCompliance.SelectedItems[0].Tag as NextPerformance; if (np.Parent == null) { return; } MaintenanceComplainceForm complainceForm = new MaintenanceComplainceForm(_currentAircraft, np); dlgResult = complainceForm.ShowDialog(this); } } else if (listViewCompliance.SelectedItems[0].Group == listViewCompliance.Groups["last"]) { if (listViewCompliance.SelectedItems[0].Tag is List <MaintenanceCheckRecord> ) { MaintenanceComplainceForm complainceForm = new MaintenanceComplainceForm(_currentAircraft, (List <MaintenanceCheckRecord>)listViewCompliance.SelectedItems[0].Tag); dlgResult = complainceForm.ShowDialog(this); } else if (listViewCompliance.SelectedItems[0].Tag is MaintenanceProgramChangeRecord) { List <MaintenanceCheckRecord> records = CheckItems.Where(c => c.Grouping) .SelectMany(c => c.PerformanceRecords) .ToList(); List <MaintenanceCheckRecordGroup> maintenanceCheckRecordGroups = new List <MaintenanceCheckRecordGroup>(); foreach (MaintenanceCheckRecord record in records) { 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); } } MaintenanceProgramChangeDialog complainceForm = new MaintenanceProgramChangeDialog((MaintenanceProgramChangeRecord)listViewCompliance.SelectedItems[0].Tag, maintenanceCheckRecordGroups); dlgResult = complainceForm.ShowDialog(this); } //MaintenanceComplainceForm complainceForm = new MaintenanceComplainceForm //{ // PerformanceRecords = ((List<MaintenanceCheckRecord>) // listViewCompliance.SelectedItems[0].Tag), // CurrentAircraft = this.CurentAircraft, // NumGroup = ((List<MaintenanceCheckRecord>) // listViewCompliance.SelectedItems[0].Tag)[0].NumGroup //}; // dlgResult = complainceForm.ShowDialog(this); } if (dlgResult == DialogResult.OK) { InvokeComplianceAdded(null); } }
private ListViewItem GetListViewItem(MaintenanceCheckRecordGroup grouping) { string name = "N/A"; string type = "N/A"; string resource = "N/A"; string group = "N/A"; string num = "N/A"; string recordDate = "N/A"; string performanceSource = "N/A"; string remarksString = "N/A"; Color backColor = Color.White; if (grouping.Records.Count > 0) { grouping.Sort(); MaintenanceCheckRecord mcr = grouping.LastOrDefault(); MaintenanceCheck mc = grouping.GetMaxIntervalCheck(); type = mc.Schedule ? " (Schedule) " : " (Store) "; resource = mc.Resource.ToString(); group = mc.Grouping ? " (Group)" : ""; backColor = mc.Schedule ? Color.White : Color.Gainsboro; if (mcr != null) { num = mc.Grouping ? mcr.NumGroup.ToString() : "N/A"; name = _currentAircraft != null && _currentAircraft.MaintenanceProgramCheckNaming ? (!string.IsNullOrEmpty(grouping.First().ComplianceCheckName) ? mcr.ComplianceCheckName : mc.Name) : mc.Name; recordDate = UsefulMethods.NormalizeDate(mcr.RecordDate); performanceSource = mcr.OnLifelength.ToRepeatIntervalsFormat(); remarksString = mcr.Remarks; if (mc.Grouping) { MaintenanceProgramChangeRecord mpcr = mc.ParentAircraft != null ? mc.ParentAircraft.MaintenanceProgramChangeRecords. GetLastKnownRecord(Convert.ToDateTime(mcr.RecordDate)) : null; if (mpcr == null || mpcr.MSG < MSG.MSG3) { var complianceItems = from compliance in grouping orderby compliance.OnLifelength.Hours descending select compliance; name += " (" + complianceItems.Aggregate("", (current, compliance) => current + (compliance.ParentCheck.Name + " ")) + ")"; } } } } ListViewItem listViewItem = new ListViewItem(num + type + resource + group) { Tag = grouping.ToList(), Group = listViewCompliance.Groups["last"], BackColor = backColor }; listViewItem.SubItems.Add(name); listViewItem.SubItems.Add(recordDate); listViewItem.SubItems.Add(performanceSource); listViewItem.SubItems.Add(remarksString); return(listViewItem); }
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; }
/// <summary> /// ??????????? ??????? ? ??????? ?????? /// </summary> /// <param name="grouping">?????????? ?????????</param> /// <param name="destinationDataSet">???????, ? ??????? ??????????? ???????</param> private void AddItemDataset(MaintenanceCheckRecordGroup grouping, OperationTimeDataSet destinationDataSet) { if (grouping == null) { return; } string checkName = ""; string performanceSourceHours = ""; string performanceSourceCycles = ""; string station = ""; string checkStartEndString = ""; if (grouping.Records.Count > 0) { grouping.Sort(); MaintenanceCheckRecord mcr = grouping.LastOrDefault(); MaintenanceCheck mc = grouping.GetMaxIntervalCheck(); if (mcr != null) { checkName = _currentAircraft != null && _currentAircraft.MaintenanceProgramCheckNaming ? (!string.IsNullOrEmpty(grouping.First().ComplianceCheckName) ? mcr.ComplianceCheckName : mc.Name) : mc.Name; performanceSourceHours = mcr.OnLifelength.ToHoursMinutesFormat(""); performanceSourceCycles = mcr.OnLifelength.Cycles != null?mcr.OnLifelength.Cycles.ToString() : ""; if (mcr.DirectivePackage == null) { mcr.DirectivePackage = _workPackages != null ? _workPackages.FirstOrDefault(wp => wp.ItemId == mcr.DirectivePackageId) : null; } if (mcr.DirectivePackage != null) { if (mcr.DirectivePackage.Status == WorkPackageStatus.Published) { checkStartEndString = mcr.DirectivePackage.PublishingDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()); checkStartEndString += " - Present day"; } if (mcr.DirectivePackage.Status == WorkPackageStatus.Closed) { checkStartEndString = mcr.DirectivePackage.PublishingDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()); checkStartEndString += " - " + mcr.DirectivePackage.ClosingDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()); } station = mcr.DirectivePackage.Station; } else { checkStartEndString = mcr.RecordDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()); station = "--"; } } } var sinceLastCCheckHours = "--"; var sinceLastCCheckCycles = "--"; //TODO:???????????? ?????? //if(_lastC?heckRecord != null && // _aircraftBaseDetails != null && // _aircraftBaseDetails.FirstOrDefault(bd => bd.BaseComponentType == BaseComponentType.Frame) != null) //{ // BaseComponent frame = _aircraftBaseDetails.First(bd => bd.BaseComponentType == BaseComponentType.Frame); // Lifelength current = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthOnEndOfDay(frame, grouping.LastOrDefault() != null ? grouping.Last().RecordDate : DateTime.Today); // Lifelength sinceLast = current - _lastC?heckRecord.OnLifelength; // sinceLastCCheckHours = sinceLast.TotalMinutes != null ? sinceLast.ToHoursMinutesFormat("") : ""; // sinceLastCCheckCycles = sinceLast.Cycles != null ? sinceLast.Cycles.ToString() : ""; //} destinationDataSet.MaintenanceTable.AddMaintenanceTableRow(checkName, checkStartEndString, station, performanceSourceHours, performanceSourceCycles, sinceLastCCheckHours, sinceLastCCheckCycles); }