//protected override void SetGroupsToItems(int columnIndex) // { // itemsListView.Groups.Clear(); // foreach (var item in ListViewItemList) // { // var temp = ListViewGroupHelper.GetGroupString(item.Tag); // itemsListView.Groups.Add(temp, temp); // item.Group = itemsListView.Groups[temp]; // } // } #endregion #region protected override void SetItemColor(ListViewItem listViewItem, NextPerformance item) protected override void SetItemColor(GridViewRowInfo listViewItem, NextPerformance item) { if (item is MaintenanceNextPerformance) { MaintenanceNextPerformance mnp = item as MaintenanceNextPerformance; foreach (GridViewCellInfo cell in listViewItem.Cells) { cell.Style.ForeColor = mnp == ((MaintenanceCheck)item.Parent).GetPergormanceGroupWhereCheckIsSenior()[0] ? Color.Black : Color.Gray; } if (mnp.CalcForHight) { foreach (GridViewCellInfo cell in listViewItem.Cells) { cell.Style.CustomizeFill = true; cell.Style.BackColor = Color.FromArgb(Highlight.PurpleLight.Color); } } } else { IDirective imd = item.Parent; foreach (GridViewCellInfo cell in listViewItem.Cells) { cell.Style.ForeColor = imd.NextPerformances.IndexOf(item) == 0 ? Color.Black : Color.Gray; if (imd.Condition == ConditionState.Notify) { cell.Style.BackColor = Color.FromArgb(Highlight.Yellow.Color); } if (imd.Percents != null && imd.Percents > 0) { cell.Style.BackColor = Color.FromArgb(Highlight.Green.Color); } } } if (item.BlockedByPackage != null) { foreach (GridViewCellInfo cell in listViewItem.Cells) { cell.Style.CustomizeFill = true; cell.Style.BackColor = Color.FromArgb(Highlight.Grey.Color); } } }
private void AnimatedThreadWorkerDoLoad(object sender, DoWorkEventArgs e) { if (_maintenanceCheck == null || _currentAircraft == null) { e.Cancel = true; return; } if (_records == null) { _records = new CommonCollection <MaintenanceCheckBindTaskRecord>(); } _records.Clear(); if (_recordsTasks == null) { _recordsTasks = new CommonCollection <BaseEntityObject>(); } _recordsTasks.Clear(); if (_mpdForSelect == null) { _mpdForSelect = new CommonCollection <MaintenanceDirective>(); } _mpdForSelect.Clear(); _animatedThreadWorker.ReportProgress(0, "load binded tasks"); var preResult = new List <MaintenanceCheckBindTaskRecord>(); try { preResult.AddRange(GlobalObjects.WorkPackageCore.GetMaintenanceBingTasksRecords(_workPackage.ItemId)); _records.AddRange(preResult.Where(r => r.CheckId == _maintenanceCheck.ItemId)); _recordsTasks.AddRange(_records.Where(r => r.Task != null && r.Task is BaseEntityObject).Select(r => r.Task as BaseEntityObject)); if (_maintenanceCheck.Grouping) { MaintenanceNextPerformance mnp = _maintenanceCheck.GetNextPergormanceGroupWhereCheckIsSenior(); if (mnp != null && mnp.PerformanceGroup != null && mnp.PerformanceGroup.Checks.Count > 0) { _recordsTasks.AddRange(mnp.PerformanceGroup.Checks.SelectMany(mc => mc.BindMpds).ToArray()); } else { _recordsTasks.AddRange(_maintenanceCheck.BindMpds.ToArray()); } } else { _recordsTasks.AddRange(_maintenanceCheck.BindMpds.ToArray()); } } catch (Exception ex) { Program.Provider.Logger.Log("Error while load Maintenance check bing tasks records", ex); } if (_animatedThreadWorker.CancellationPending) { e.Cancel = true; return; } _animatedThreadWorker.ReportProgress(50, "calculation of Maintenance Directives"); try { _mpdForSelect.AddRange(_workPackage.MaintenanceDirectives); _mpdForSelect.AddRange(_workPackage.ComponentDirectives.Where(dd => dd.MaintenanceDirective != null) .Select(dd => dd.MaintenanceDirective).Distinct()); foreach (MaintenanceCheckBindTaskRecord record in preResult.Where(record => record.TaskType == SmartCoreType.MaintenanceDirective && _mpdForSelect.FirstOrDefault(m => m.ItemId == record.TaskId) != null)) { _mpdForSelect.RemoveById(record.TaskId); } foreach (MaintenanceDirective mpd in _allWpChecks.SelectMany(mc => mc.BindMpds)) { _mpdForSelect.RemoveById(mpd.ItemId); } } catch (Exception ex) { Program.Provider.Logger.Log("Error while load directives for select", ex); } if (_animatedThreadWorker.CancellationPending) { e.Cancel = true; return; } _animatedThreadWorker.ReportProgress(75, "calculate directives for select"); //try //{ // _mpdForSelect.AddRange(GlobalObjects.CasEnvironment.Loader.GetMaintenanceDirectives(_maintenanceCheck.ParentAircraft)); //} //catch (Exception ex) //{ // Program.Provider.Logger.Log("Error while calculate directives for select", ex); //} if (_animatedThreadWorker.CancellationPending) { e.Cancel = true; return; } _animatedThreadWorker.ReportProgress(100, "binding complete"); }
private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e) { if (_selectedWorkPackage == null) { e.Cancel = true; return; } _itemsArray.Clear(); backgroundWorker.ReportProgress(0, "Load Work Package"); if (!_selectedWorkPackage.WorkPackageItemsLoaded) { GlobalObjects.WorkPackageCore.GetWorkPackageItemsWithCalculate(_selectedWorkPackage); } if (_selectedWorkPackage.MaxClosingDate < _selectedWorkPackage.MinClosingDate) { _selectedWorkPackage.CanClose = false; } CommonCollection <BaseEntityObject> wpItems = new CommonCollection <BaseEntityObject>(); foreach (WorkPackageRecord record in _selectedWorkPackage.WorkPakageRecords) { wpItems.Add((BaseEntityObject)record.Task); } if (backgroundWorker.CancellationPending) { e.Cancel = true; return; } double currentProc = 20; int countDirectives = wpItems.Count; if (countDirectives == 0) { countDirectives = 1; } double delay = (100 - currentProc) / countDirectives; if (_selectedWorkPackage.Status != WorkPackageStatus.Closed) { backgroundWorker.ReportProgress(10, "load related Work Packages"); foreach (WorkPackageRecord record in _selectedWorkPackage.WorkPakageRecords) { backgroundWorker.ReportProgress((int)(currentProc += delay), "calculation of directives"); if (record.Task.SmartCoreObjectType == SmartCoreType.MaintenanceCheck) { MaintenanceCheck mc = (MaintenanceCheck)record.Task; MaintenanceNextPerformance mnp = mc.GetPergormanceGroupWhereCheckIsSeniorByGroupNum(record.PerformanceNumFromStart); if (mnp != null) { _itemsArray.Add(mnp); } } else if (record.Task.SmartCoreObjectType == SmartCoreType.NonRoutineJob) { _itemsArray.Add((BaseEntityObject)record.Task); } else if (record.Task.SmartCoreObjectType == SmartCoreType.Component) { if (record.Task.NextPerformances.Count > 0) { _itemsArray.Add(record.Task.NextPerformances[0]); } else { _itemsArray.Add((BaseEntityObject)record.Task); } } else { if (record.Task.NextPerformances.Count > 0) { _itemsArray.Add(record.Task.NextPerformances[0]); } else { _itemsArray.Add((BaseEntityObject)record.Task); } } } } else { //При закоытом Рабочем пакете, в список попадают записи о выполении //сделанные в рамках данного рабочего пакета backgroundWorker.ReportProgress(10, "load related Work Packages"); AbstractPerformanceRecord apr; foreach (WorkPackageRecord record in _selectedWorkPackage.WorkPakageRecords) { backgroundWorker.ReportProgress((int)(currentProc += delay), "check records"); if (record.Task.SmartCoreObjectType == SmartCoreType.MaintenanceCheck) { backgroundWorker.ReportProgress((int)(currentProc += delay), "calculation of Maintenance checks"); apr = record.Task.PerformanceRecords .Cast <AbstractPerformanceRecord>() .FirstOrDefault(pr => pr.DirectivePackageId == _selectedWorkPackage.ItemId); if (apr != null) { _itemsArray.Add(apr); } else { MaintenanceCheck mc = (MaintenanceCheck)record.Task; if (mc.NextPerformances.OfType <MaintenanceNextPerformance>().Any(np => np.PerformanceGroupNum == record.PerformanceNumFromStart)) { MaintenanceNextPerformance mnp = mc.GetPergormanceGroupWhereCheckIsSeniorByGroupNum(record.PerformanceNumFromStart); if (mnp != null) { _itemsArray.Add(mnp); } } else { _itemsArray.Add((BaseEntityObject)record.Task); } } } else if (record.Task.SmartCoreObjectType == SmartCoreType.NonRoutineJob) { _itemsArray.Add((BaseEntityObject)record.Task); } else { apr = record.Task.PerformanceRecords .Cast <AbstractPerformanceRecord>() .FirstOrDefault(pr => pr.DirectivePackageId == _selectedWorkPackage.ItemId); if (apr != null) { _itemsArray.Add(apr); } else { if (record.Task.NextPerformances.Count > 0) { _itemsArray.Add(record.Task.NextPerformances[0]); } else { _itemsArray.Add((BaseEntityObject)record.Task); } } } if (_selectedWorkPackage.WorkPakageRecords.Where(wpr => wpr.Task != null && wpr.Task is Component) .Select(wpr => wpr.Task as Component) .Any(d => d.TransferRecords.Any(tr => tr.DirectivePackageId == _selectedWorkPackage.ItemId && tr.DODR))) { //Поиск записи в рабочем пакете по деталям(базовым деталям) //в записях о перемещении которых есть запись сделанная в рамках данного //рабочего пакета, и подтвержденная на стороне получателя //Если такие записи есть, то рабочий пакет перепубликовать нельзя _selectedWorkPackage.CanPublish = false; if (_selectedWorkPackage.BlockPublishReason != "") { _selectedWorkPackage.BlockPublishReason += "\n"; } _selectedWorkPackage.BlockPublishReason = "This work package has in its task of moving component," + "\nwhich was confirmed on the destination side"; } } } backgroundWorker.ReportProgress(100, "calculation over"); }
protected override void SetItemColor(ListViewItem listViewItem, NextPerformance item) { Color itemForeColor = Color.Black; if (item is MaintenanceNextPerformance) { MaintenanceNextPerformance mnp = item as MaintenanceNextPerformance; listViewItem.ForeColor = mnp == ((MaintenanceCheck)item.Parent).GetPergormanceGroupWhereCheckIsSenior()[0] ? Color.Black : Color.Gray; if (mnp.CalcForHight) { listViewItem.ForeColor = itemForeColor; listViewItem.BackColor = Color.FromArgb(Highlight.PurpleLight.Color); } } else { IDirective imd = item.Parent; listViewItem.ForeColor = imd.NextPerformances.IndexOf(item) == 0 ? Color.Black : Color.Gray; if (imd.Condition == ConditionState.Notify) { listViewItem.BackColor = Color.FromArgb(Highlight.Yellow.Color); } if (imd.Condition == ConditionState.Overdue) { listViewItem.BackColor = Color.FromArgb(Highlight.Red.Color); } if (imd.Percents != null && imd.Percents > 0) { listViewItem.BackColor = Color.FromArgb(Highlight.Green.Color); } listViewItem.ForeColor = itemForeColor; } if (item.BlockedByPackage != null) { listViewItem.ForeColor = itemForeColor; listViewItem.BackColor = Color.FromArgb(Highlight.Grey.Color); listViewItem.ToolTipText = "This performance is involved on Work Package:" + item.BlockedByPackage.Title; } Color itemBacBlackolor = ItemListView.BackColor; if (item.Parent is MaintenanceDirective) { var mpd = item.Parent as MaintenanceDirective; if (mpd.RecalculateTenPercent) { itemBacBlackolor = Color.DodgerBlue; listViewItem.BackColor = itemBacBlackolor; } } Color listViewForeColor = ItemListView.ForeColor; Color listViewBackColor = ItemListView.BackColor; listViewItem.UseItemStyleForSubItems = true; foreach (ListViewItem.ListViewSubItem subItem in listViewItem.SubItems) { if (subItem.ForeColor.ToArgb() == listViewForeColor.ToArgb()) { subItem.ForeColor = itemForeColor; } if (subItem.BackColor.ToArgb() == listViewBackColor.ToArgb()) { subItem.BackColor = itemBacBlackolor; } } }
/// <summary> /// Добавление директив в таблицу данных /// </summary> /// <param name="dataset">Таблица, в которую добавляются данные</param> protected virtual void AddDirectivesToDataSet(MaintenancePlanDataSet dataset) { //группировка по родительскому самолету IEnumerable <IGrouping <Aircraft, BaseEntityObject> > groupByAircraft = _reportedDirectives.GroupBy(GlobalObjects.AircraftsCore.GetParentAircraft) .OrderBy(g => g.Key.ToString() + " " + g.Key.Model.ToString()); foreach (IGrouping <Aircraft, BaseEntityObject> byAircraft in groupByAircraft) { IEnumerable <IGrouping <DateTime, BaseEntityObject> > groupedItems = byAircraft.GroupBy(GetDate) .OrderBy(g => g.Key); //сбор всех китов ВС в одну коллекцию List <AbstractAccessory> aircraftKits = byAircraft.Select(ba => ba) .Select(GetParent) .Where(i => i is IKitRequired) .SelectMany(i => ((IKitRequired)i).Kits) .Cast <AbstractAccessory>() .ToList(); foreach (IGrouping <DateTime, BaseEntityObject> groupedItem in groupedItems) { //Группировка элементов по датам выполнения DateTime dateTime = groupedItem.Key.Date; //Формирование первой части названия группы, состоящей из даты выполнения string temp = ""; string kitString = ""; double manHours = 0; //Собрание всех выполнений на данную дату в одну коллекцию IEnumerable <BaseEntityObject> performances = groupedItem.Select(lvi => lvi).ToArray(); //Собрание всех КИТов на данную дату в одну коллекцию IEnumerable <AccessoryRequired> kits = performances.Select(GetParent) .Where(i => i is IKitRequired) .SelectMany(i => ((IKitRequired)i).Kits); IEnumerable <IGrouping <string, AccessoryRequired> > groupByType = kits.GroupBy(GetAccessoryTypeString); foreach (IGrouping <string, AccessoryRequired> grouping in groupByType) { if (!string.IsNullOrEmpty(kitString)) { kitString += Environment.NewLine; } kitString += grouping.Key + Environment.NewLine; kitString = grouping.Select(g => g) .Distinct(new AccessoryRequired()) .Aggregate(kitString, (current, kit) => current + (kit.ToString() + "; ")); } //Добавление в название присутствующих на данную дату чеков программы обслуживания IEnumerable <BaseEntityObject> maintenanceCheckPerformances = performances.Where(np => GetParent(np) is MaintenanceCheck); foreach (BaseEntityObject mcp in maintenanceCheckPerformances) { if (mcp is MaintenanceNextPerformance) { MaintenanceNextPerformance mnp = mcp as MaintenanceNextPerformance; temp += mnp.PerformanceGroup.GetGroupName(); if (byAircraft.Key != null && byAircraft.Key.MSG < MSG.MSG3) { temp += "( " + mnp.PerformanceGroup.ToStringCheckNames() + ")"; } } else if (mcp is NextPerformance) { NextPerformance np = mcp as NextPerformance; temp += ((MaintenanceCheck)np.Parent).Name; } else if (mcp is MaintenanceCheckRecord) { MaintenanceCheckRecord mcr = mcp as MaintenanceCheckRecord; temp += string.IsNullOrEmpty(mcr.ComplianceCheckName) ? mcr.ParentCheck.Name : mcr.ComplianceCheckName; } else if (mcp is MaintenanceCheck) { MaintenanceCheck mc = (MaintenanceCheck)mcp; if (mc.Grouping) { MaintenanceNextPerformance mnp = mc.GetNextPergormanceGroupWhereCheckIsSenior(); if (mnp != null) { temp += mnp.PerformanceGroup.GetGroupName(); } else { temp += mc.Name; } } else { temp += mc.Name; } } temp += " "; } IEnumerable <IBaseEntityObject> allDirectives = performances.Select(GetParent).ToArray(); //Добавление в название присутствующих на данную дату директив летной годности IEnumerable <Directive> directivesPerformances = allDirectives.OfType <Directive>().ToArray(); if (directivesPerformances.Any()) { IEnumerable <IGrouping <DirectiveType, Directive> > groupByDirectiveType = directivesPerformances.GroupBy(d => d.DirectiveType); foreach (IGrouping <DirectiveType, Directive> grouping in groupByDirectiveType) { if (!string.IsNullOrEmpty(temp)) { temp += Environment.NewLine; } temp += grouping.Key.ShortName + " " + Environment.NewLine; foreach (Directive ad in grouping) { temp += ad.Title + " § " + ad.Paragraph + " " + ad.WorkType; temp += "; "; } } manHours += directivesPerformances.Sum(dp => dp.ManHours); } //Добавление в название присутствующих на данную дату компонентов или задач по ним IEnumerable <IBaseEntityObject> componentPerformances = allDirectives.Where(np => np is Component || np is ComponentDirective).ToArray(); if (componentPerformances.Any()) { if (!string.IsNullOrEmpty(temp)) { temp += Environment.NewLine; } temp += "Component" + Environment.NewLine; foreach (IBaseEntityObject componentPerformance in componentPerformances) { Component d; if (componentPerformance is ComponentDirective) { ComponentDirective dd = (ComponentDirective)componentPerformance; d = ((ComponentDirective)componentPerformance).ParentComponent; if (d != null) { temp += "P/N:" + d.PartNumber + " S/N:" + d.SerialNumber + " " + dd.DirectiveType; } else { temp += dd.DirectiveType; } manHours += dd.ManHours; if (dd.DirectiveType == ComponentRecordType.Remove || dd.DirectiveType == ComponentRecordType.Discard || dd.DirectiveType == ComponentRecordType.Overhaul) { //типом работ является удаление или уничтожение компонента //Добавление в коллекцию Китов ВС данного компонента, //т.к. его необходимо будет приобрести aircraftKits.Add(d); } } else { d = componentPerformance as Component; if (d != null) { temp += "P/N:" + d.PartNumber + " S/N:" + d.SerialNumber + " Discard"; manHours += d.ManHours; //Добавление в коллекцию Китов ВС данного компонента, //т.к. его необходимо будет приобрести aircraftKits.Add(d); } } temp += "; "; } } //Добавление в название присутствующих на данную дату MPD //Вывод только тех MPD что не привязаны к чекам IEnumerable <MaintenanceDirective> mpdPerformances = allDirectives.OfType <MaintenanceDirective>().ToArray(); if (mpdPerformances.Any()) { if (!string.IsNullOrEmpty(temp)) { temp += Environment.NewLine; } temp += "MPD " + Environment.NewLine; foreach (MaintenanceDirective mpd in mpdPerformances) { temp += mpd.TaskNumberCheck + " " + mpd.WorkType.ShortName + "; "; manHours += mpd.ManHours; } } dataset.ItemsTable.AddItemsTableRow("", "", temp, dateTime, manHours, 0, kitString, byAircraft.Key != null ? byAircraft.Key + " " + byAircraft.Key.Model : "Unk"); } IEnumerable <IGrouping <Product, AbstractAccessory> > products = aircraftKits.GroupBy(ak => ak.Product ?? new Product { GoodsClass = ak.GoodsClass, Standart = ak.Standart, PartNumber = ak.ParentString, Description = ak.Description } ); foreach (IGrouping <Product, AbstractAccessory> product in products) { string type = GetAccessoryTypeString(product.First()); double quantity = 0; double totalProductCost = 0; if (product.Key.GoodsClass.IsNodeOrSubNodeOf(GoodsClass.Tools) || product.Key.GoodsClass.IsNodeOrSubNodeOf(GoodsClass.ControlTestEquipment)) { quantity = product.Max(p => p.Quantity); totalProductCost = 0; } else if (product.Key.GoodsClass.IsNodeOrSubNodeOf(GoodsClass.ComponentsAndParts)) { foreach (AbstractAccessory accessoryRequired in product) { int qty = accessoryRequired.Quantity < 1 ? 1 : (int)accessoryRequired.Quantity; quantity += qty; totalProductCost += (qty * accessoryRequired.CostNew); } } else { foreach (AbstractAccessory accessoryRequired in product) { quantity += accessoryRequired.Quantity; totalProductCost += (accessoryRequired.Quantity * accessoryRequired.CostNew); } } dataset.KitsTable.AddKitsTableRow(product.Key.ToString(), quantity, totalProductCost, byAircraft.Key != null ? byAircraft.Key + " " + byAircraft.Key.Model : "Unk", type); } } }
/// <summary> /// Выставляет колонки в списке чеков текущей программы обслуживания /// </summary> private void SetHeaders() { _min = Convert.ToInt32(_maintenanceCheckItems[0].Interval.GetSubresource(_subResource)); foreach (MaintenanceCheck liminationItem in _maintenanceCheckItems) { _min = Math.Min(Convert.ToInt32(liminationItem.Interval.GetSubresource(_subResource)), _min); _max = Math.Max(Convert.ToInt32(liminationItem.Interval.GetSubresource(_subResource)), _max); } ColumnHeader column = new ColumnHeader { Text = "Name", TextAlign = HorizontalAlignment.Right, Width = 50 }; listViewProgramChecks.Columns.Add(column); column = new ColumnHeader { Text = "Interval", TextAlign = HorizontalAlignment.Left, Width = 130 }; listViewProgramChecks.Columns.Add(column); column = new ColumnHeader { Text = "Cost", TextAlign = HorizontalAlignment.Left, Width = 50 }; listViewProgramChecks.Columns.Add(column); column = new ColumnHeader { Text = "ManHours", TextAlign = HorizontalAlignment.Left, Width = 64 }; listViewProgramChecks.Columns.Add(column); if (_grouping) { //Определение кол-ва колонок списка if (_upperCheckTypeMinResource == -1) { //Если это самая вышестоящий тип чеков //то делится максимальный на минимальный интервал _countColumns = _max / _min; } else { //Если это самая НЕ вышестоящий тип чеков //то делится минимальный ресурс вышестоящего типа на минимальный интервал _countColumns = _upperCheckTypeMinResource / _min; } MaintenanceCheckCollection mcc = new MaintenanceCheckCollection(_maintenanceCheckItems); MaintenanceCheck mc = mcc.GetMinStepCheck(_maintenanceCheckItems[0].Schedule); if (mc == null) { return; } MSG msg = mc.ParentAircraft != null && mc.ParentAircraft.MaintenanceProgramChangeRecords.Count > 0 ? mc.ParentAircraft.MaintenanceProgramChangeRecords.GetLast().MSG : MSG.MSG2; if (msg < MSG.MSG3) { for (int i = 1; i <= _countColumns; i++) { //ColumnHeader viewColumn = new ColumnHeader // { // Text = i + " [" + (i*_min) + "]", // TextAlign = HorizontalAlignment.Center, // Width = 65 // // }; //listViewProgramChecks.Columns.Add(viewColumn); ColumnHeader viewColumn; //выполняется проверка, достаточно ли расчитано "след.выполнений" //что бы заполнить их данными названия колонок if (mc.NextPerformances.Count >= i) { //Если кол-во расчитанных выполнений достаточно для заполнения //названия тек. колонки, то название колонки берется из ресурса "след. выполнения" int performanceSource = Convert.ToInt32(mc.NextPerformances[i - 1].PerformanceSource.GetSubresource(mc.Resource)); MaintenanceNextPerformance mnp = mc.NextPerformances[i - 1] as MaintenanceNextPerformance; if (mnp != null) { string checkName = mnp.PerformanceGroup != null?mnp.PerformanceGroup.GetGroupName() : i.ToString(); viewColumn = new ColumnHeader { Text = checkName + " [" + performanceSource + "]", TextAlign = HorizontalAlignment.Center, Width = 85 }; } else { viewColumn = new ColumnHeader { Text = i + " [" + performanceSource + "]", TextAlign = HorizontalAlignment.Center, Width = 85 }; } } else { //Если кол-во расчитанных выполнений недостаточно //то название колонки расчитывается на освоне ресурса последнего выполнения //данного чека и номера тек. колонки viewColumn = new ColumnHeader { Text = i + " [" + (i * _min) + "]", TextAlign = HorizontalAlignment.Center, Width = 85 }; } listViewProgramChecks.Columns.Add(viewColumn); } } else { MaintenanceCheckComplianceGroup mccg = mcc.GetLastComplianceCheckGroup(mc.Schedule, mc.ParentAircraftId, mc.Grouping, mc.Resource); if (mccg == null) { for (int i = 1; i <= _countColumns; i++) { MaintenanceNextPerformance mnp = mc.NextPerformances[i - 1] as MaintenanceNextPerformance; string checkName = mnp != null && mnp.PerformanceGroup != null ? mnp.PerformanceGroup.GetGroupName() : ""; ColumnHeader viewColumn = new ColumnHeader { Text = checkName + " [" + (i * _min) + "]", TextAlign = HorizontalAlignment.Center, Width = 65 }; listViewProgramChecks.Columns.Add(viewColumn); } } else { MaintenanceCheck mic = mccg.GetMinIntervalCheck(); for (int i = 1; i <= _countColumns; i++) { ColumnHeader viewColumn; //выполняется проверка, достаточно ли расчитано "след.выполнений" //что бы заполнить их данными названия колонок if (mic.NextPerformances.Count >= i) { //Если кол-во расчитанных выполнений достаточно для заполнения //названия тек. колонки, то название колонки берется из ресурса "след. выполнения" MaintenanceNextPerformance mnp = mc.NextPerformances[i - 1] as MaintenanceNextPerformance; string checkName = mnp != null && mnp.PerformanceGroup != null ? mnp.PerformanceGroup.GetGroupName() : ""; int performanceSource = Convert.ToInt32(mic.NextPerformances[i - 1].PerformanceSource.GetSubresource(mic.Resource)); viewColumn = new ColumnHeader { Text = checkName + " [" + performanceSource + "]", TextAlign = HorizontalAlignment.Center, Width = 85 }; } else { //Если кол-во расчитанных выполнений недостаточно //то название колонки расчитывается на освоне ресурса последнего выполнения //данного чека и номера тек. колонки int lastPerformaceSource = Convert.ToInt32(mic.LastPerformance.CalculatedPerformanceSource.GetSubresource(mic.Resource)); if (lastPerformaceSource == 0) { lastPerformaceSource = Convert.ToInt32(mic.LastPerformance.OnLifelength.GetSubresource(mic.Resource)); } viewColumn = new ColumnHeader { Text = " [" + (lastPerformaceSource + i * _min) + "]", TextAlign = HorizontalAlignment.Center, Width = 85 }; } listViewProgramChecks.Columns.Add(viewColumn); } } } mcc.Clear(); } else { _countColumns = 2; //Если чеки НЕ группируются по части порогового значения //то выводится ресурс пред. и след. выполнения column = new ColumnHeader { Text = "Last", TextAlign = HorizontalAlignment.Left, Width = 100 }; listViewProgramChecks.Columns.Add(column); column = new ColumnHeader { Text = "Next", TextAlign = HorizontalAlignment.Left, Width = 100 }; listViewProgramChecks.Columns.Add(column); } }
/// <summary> /// Добавление директив в таблицу данных /// </summary> /// <param name="dataset">Таблица, в которую добавляются данные</param> protected virtual void AddDirectivesToDataSet(MonthlyPlanDataSet dataset) { //Группировка элементов по датам выполнения IEnumerable <IGrouping <DateTime, NextPerformance> > groupedItems = _reportedDirectives.GroupBy(np => Convert.ToDateTime(np.PerformanceDate).Date) .OrderBy(g => g.Key); foreach (IGrouping <DateTime, NextPerformance> groupedItem in groupedItems) { DateTime dateTime = groupedItem.Key.Date; string dateString = groupedItem.Key.Date > DateTimeExtend.GetCASMinDateTime().Date ? SmartCore.Auxiliary.Convert.GetDateFormat(groupedItem.Key.Date) + " " : ""; //группировка по родительскому самолету IEnumerable <IGrouping <string, NextPerformance> > groupByAircraft = groupedItem.GroupBy(GetParent) .OrderBy(g => g.Key.ToString()); foreach (IGrouping <string, NextPerformance> byAircraft in groupByAircraft) { //Формирование первой части названия группы, состоящей из даты выполнения string temp = ""; //Собрание всех выполнений на данную дату в одну коллекцию IEnumerable <NextPerformance> performances = byAircraft.Select(lvi => lvi); //Добавление в название присутствующих на данную дату чеков программы обслуживания IEnumerable <NextPerformance> maintenanceCheckPerformances = performances.Where(np => np.Parent != null && np.Parent is MaintenanceCheck); foreach (NextPerformance maintenanceCheckPerformance in maintenanceCheckPerformances) { if (maintenanceCheckPerformance is MaintenanceNextPerformance) { MaintenanceNextPerformance mnp = maintenanceCheckPerformance as MaintenanceNextPerformance; temp += mnp.PerformanceGroup.GetGroupName(); } else { temp += ((MaintenanceCheck)maintenanceCheckPerformance.Parent).Name; } temp += " "; } //Добавление в название присутствующих на данную дату директив летной годности IEnumerable <NextPerformance> adPerformances = performances.Where(np => np.Parent != null && np.Parent is Directive); if (adPerformances.Count() > 0) { temp += "AD "; } //Добавление в название присутствующих на данную дату компонентов или задач по ним IEnumerable <NextPerformance> componentPerformances = performances.Where(np => np.Parent != null && (np.Parent is Component || np.Parent is ComponentDirective)); if (componentPerformances.Count() > 0) { temp += "Comp "; } //Добавление в название присутствующих на данную дату MPD IEnumerable <NextPerformance> mpdPerformances = performances.Where(np => np.Parent != null && np.Parent is MaintenanceDirective); if (maintenanceCheckPerformances.Count() == 0 && mpdPerformances.Count() > 0) { temp += "MPD "; } string destinationString = byAircraft.Key; dataset.ItemsTable.AddItemsTableRow(dateString, destinationString, temp, dateTime.Ticks, destinationString); } } }
protected override void AnimatedThreadWorkerDoWork(object sender, DoWorkEventArgs e) { _itemsArray.Clear(); _relatedWorkPackages.Clear(); AnimatedThreadWorker.ReportProgress(0, "load Audit"); //GlobalObjects.CasEnvironment.Loader.LoadWorkPackageItems(_currentWorkPackage); GlobalObjects.AuditCore.GetAuditItemsWithCalculate(_currentDirective); if (_currentDirective.MaxClosingDate < _currentDirective.MinClosingDate) { _currentDirective.CanClose = false; } CommonCollection <BaseEntityObject> wpItems = new CommonCollection <BaseEntityObject>(); foreach (AuditRecord record in _currentDirective.AuditRecords) { wpItems.Add((BaseEntityObject)record.Task); } if (AnimatedThreadWorker.CancellationPending) { e.Cancel = true; return; } double currentProc = 20; int countDirectives = wpItems.Count; if (countDirectives == 0) { countDirectives = 1; } double delay = (100 - currentProc) / countDirectives; if (_currentDirective.Status != WorkPackageStatus.Closed) { AnimatedThreadWorker.ReportProgress(10, "load related Audit"); foreach (AuditRecord record in _currentDirective.AuditRecords) { AnimatedThreadWorker.ReportProgress((int)(currentProc += delay), "calculation of directives"); if (record.Task.SmartCoreObjectType == SmartCoreType.MaintenanceCheck) { MaintenanceCheck mc = (MaintenanceCheck)record.Task; MaintenanceNextPerformance mnp = mc.GetPergormanceGroupWhereCheckIsSeniorByGroupNum(record.PerformanceNumFromStart); if (mnp != null) { _itemsArray.Add(mnp); } } else if (record.Task.SmartCoreObjectType == SmartCoreType.NonRoutineJob) { _itemsArray.Add((BaseEntityObject)record.Task); } else if (record.Task.SmartCoreObjectType == SmartCoreType.Component) { if (record.Task.NextPerformances.Count > 0) { _itemsArray.Add(record.Task.NextPerformances[0]); } else { _itemsArray.Add((BaseEntityObject)record.Task); } } else { if (record.Task.NextPerformances.Count > 0) { _itemsArray.Add(record.Task.NextPerformances[0]); } else { _itemsArray.Add((BaseEntityObject)record.Task); } } } } else { //При закоытом Рабочем пакете, в список попадают записи о выполении //сделанные в рамках данного рабочего пакета AnimatedThreadWorker.ReportProgress(10, "load related Audits"); _relatedWorkPackages.AddRange(GlobalObjects.AuditCore.GetAudits(CurrentOperator, WorkPackageStatus.Closed, true, wpItems)); //сбор всех записей рабочих пакетов для удобства фильтрации AbstractPerformanceRecord apr; foreach (AuditRecord record in _currentDirective.AuditRecords) { AnimatedThreadWorker.ReportProgress((int)(currentProc += delay), "check records"); apr = record.Task.PerformanceRecords .Cast <AbstractPerformanceRecord>() .FirstOrDefault(pr => pr.DirectivePackageId == _currentDirective.ItemId); if (apr != null) { _itemsArray.Add(apr); } else { if (record.Task.NextPerformances.Count > 0) { _itemsArray.Add(record.Task.NextPerformances[0]); } else { _itemsArray.Add((BaseEntityObject)record.Task); } } } } AnimatedThreadWorker.ReportProgress(100, "calculation over"); }
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; }
private void BackgroundWorkerRunWorkerLoadCompleted(object sender, RunWorkerCompletedEventArgs e) { dataGridViewItems.Rows.Clear(); if (_workPackage == null) { return; } #region Чеки программы обслуживания и директивы программы обслуживания List <MaintenanceDirective> checkDirectives = new List <MaintenanceDirective>(); foreach (MaintenanceCheck maintenanceCheck in _workPackage.MaintenanceChecks) { DataGridViewRow row; DataGridViewCell discCell; DataGridViewCell taskCardCell; DataGridViewCell compntCell; if (_workPackage.Aircraft.MSG >= MSG.MSG3) { MaintenanceCheckRecord mcr = maintenanceCheck.PerformanceRecords.FirstOrDefault(pr => pr.DirectivePackageId == _workPackage.ItemId); if (mcr != null) { row = new DataGridViewRow { Tag = maintenanceCheck }; discCell = new DataGridViewTextBoxCell { Value = string.IsNullOrEmpty(mcr.ComplianceCheckName) ? maintenanceCheck.Name : mcr.ComplianceCheckName }; taskCardCell = new DataGridViewTextBoxCell { Value = "" }; compntCell = new DataGridViewCheckBoxCell { Value = maintenanceCheck.PrintInWorkPackage }; } else { if (maintenanceCheck.Grouping) { MaintenanceNextPerformance mnp = maintenanceCheck.GetNextPergormanceGroupWhereCheckIsSenior(); if (mnp != null) { row = new DataGridViewRow { Tag = maintenanceCheck }; discCell = new DataGridViewTextBoxCell { Value = mnp.PerformanceGroup.GetGroupName() }; taskCardCell = new DataGridViewTextBoxCell { Value = "" }; compntCell = new DataGridViewCheckBoxCell { Value = maintenanceCheck.PrintInWorkPackage }; } else { continue; } } else { row = new DataGridViewRow { Tag = maintenanceCheck }; discCell = new DataGridViewTextBoxCell { Value = maintenanceCheck.Name }; taskCardCell = new DataGridViewTextBoxCell { Value = "" }; compntCell = new DataGridViewCheckBoxCell { Value = maintenanceCheck.PrintInWorkPackage }; } } } else { row = new DataGridViewRow { Tag = maintenanceCheck }; discCell = new DataGridViewTextBoxCell { Value = maintenanceCheck.Name }; taskCardCell = new DataGridViewTextBoxCell { Value = "" }; compntCell = new DataGridViewCheckBoxCell { Value = maintenanceCheck.PrintInWorkPackage }; } row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell }); discCell.ReadOnly = true; taskCardCell.ReadOnly = true; dataGridViewItems.Rows.Add(row); List <MaintenanceDirective> checkMpds = (from record in _workPackage.MaintenanceCheckBindTaskRecords where record.TaskType == SmartCoreType.MaintenanceDirective && record.CheckId == maintenanceCheck.ItemId select record.Task as MaintenanceDirective) .OrderBy(cm => cm.TaskNumberCheck) .ToList(); checkMpds.AddRange(maintenanceCheck.BindMpds .Where(bmpd => _workPackage.WorkPakageRecords .FirstOrDefault(r => r.WorkPackageItemType == SmartCoreType.MaintenanceDirective.ItemId && r.DirectiveId == bmpd.ItemId) != null)); checkDirectives.AddRange(checkMpds); foreach (MaintenanceDirective checkMpd in checkMpds) { //TODO:(Evgenii Babak) избавиться от кода if (checkMpd.ItemRelations.Count == 0) { checkMpd.ItemRelations .AddRange(_workPackage.ComponentDirectives.Where(bdd => bdd.ItemRelations.IsAllRelationWith(checkMpd)).SelectMany(bdd => bdd.ItemRelations)); } DataGridViewRow checkMpdRow = new DataGridViewRow { Tag = checkMpd }; DataGridViewCell checkMpdDiscCell; DataGridViewCell checkMpdTaskCardCell; DataGridViewCell checkMpdCompntCell; string checkMpdTaskCardCellValue; Color checkMpdTaskCardCellBackColor = Color.White; if (string.IsNullOrEmpty(checkMpd.TaskCardNumber) && checkMpd.TaskCardNumberFile == null) { checkMpdTaskCardCellValue = "Not set Task Card file."; checkMpdTaskCardCellBackColor = Color.Red; } else if (!string.IsNullOrEmpty(checkMpd.TaskCardNumber) && checkMpd.TaskCardNumberFile == null) { checkMpdTaskCardCellValue = $"Not set Task Card file. (Task Card No {checkMpd.TaskCardNumber}.)"; checkMpdTaskCardCellBackColor = Color.Red; } else if (string.IsNullOrEmpty(checkMpd.TaskCardNumber) && checkMpd.TaskCardNumberFile != null) { checkMpdTaskCardCellValue = $"Not set Task Card name. (File name {checkMpd.TaskCardNumberFile.FileName}.)"; checkMpdTaskCardCellBackColor = Color.Red; } else { checkMpdTaskCardCellValue = checkMpd.TaskCardNumber; } if (checkMpd.ItemRelations.Count > 0) { checkMpdDiscCell = new DataGridViewTextBoxCell { Value = $"{maintenanceCheck.Name}--{checkMpd.TaskNumberCheck} for {checkMpd.ItemRelations.Count} components" }; checkMpdTaskCardCell = new DataGridViewTextBoxCell { Value = checkMpdTaskCardCellValue, Style = { BackColor = checkMpdTaskCardCellBackColor }, }; checkMpdCompntCell = new DataGridViewCheckBoxCell { Value = checkMpd.PrintInWorkPackage }; checkMpdRow.Cells.AddRange(new[] { checkMpdDiscCell, checkMpdTaskCardCell, checkMpdCompntCell }); checkMpdDiscCell.ReadOnly = true; checkMpdTaskCardCell.ReadOnly = true; } else { checkMpdDiscCell = new DataGridViewTextBoxCell { Value = maintenanceCheck.Name + "--" + checkMpd.TaskNumberCheck }; checkMpdTaskCardCell = new DataGridViewTextBoxCell { Value = checkMpdTaskCardCellValue, Style = { BackColor = checkMpdTaskCardCellBackColor }, }; checkMpdCompntCell = new DataGridViewCheckBoxCell { Value = checkMpd.PrintInWorkPackage }; checkMpdRow.Cells.AddRange(new[] { checkMpdDiscCell, checkMpdTaskCardCell, checkMpdCompntCell }); checkMpdDiscCell.ReadOnly = true; checkMpdTaskCardCell.ReadOnly = true; } dataGridViewItems.Rows.Add(checkMpdRow); } } List <MaintenanceDirective> nonCheckMpds = _workPackage.MaintenanceDirectives.Where(md => checkDirectives.FirstOrDefault(dd => dd.ItemId == md.ItemId) == null) .OrderBy(md => md.TaskNumberCheck) .ToList(); foreach (MaintenanceDirective item in nonCheckMpds) { string taskCardCellValue; Color taskCardCellBackColor = Color.White; if (string.IsNullOrEmpty(item.TaskCardNumber) && item.TaskCardNumberFile == null) { taskCardCellValue = "Not set Task Card file."; taskCardCellBackColor = Color.Red; } else if (!string.IsNullOrEmpty(item.TaskCardNumber) && item.TaskCardNumberFile == null) { taskCardCellValue = $"Not set Task Card file. (Task Card No {item.TaskCardNumber}.)"; taskCardCellBackColor = Color.Red; } else if (string.IsNullOrEmpty(item.TaskCardNumber) && item.TaskCardNumberFile != null) { taskCardCellValue = $"Not set Task Card name. (File name {item.TaskCardNumberFile.FileName}.)"; taskCardCellBackColor = Color.Red; } else { taskCardCellValue = item.TaskCardNumber; } DataGridViewRow row = new DataGridViewRow { Tag = item }; DataGridViewCell discCell = new DataGridViewTextBoxCell { Value = item.TaskNumberCheck }; DataGridViewCell taskCardCell = new DataGridViewTextBoxCell { Value = taskCardCellValue, Style = { BackColor = taskCardCellBackColor }, }; DataGridViewCell compntCell = new DataGridViewCheckBoxCell { Value = item.PrintInWorkPackage }; row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell }); discCell.ReadOnly = true; taskCardCell.ReadOnly = true; dataGridViewItems.Rows.Add(row); } #endregion #region Директивы летной годности foreach (Directive item in _workPackage.AdStatus) { string taskCardCellValue; Color taskCardCellBackColor = Color.White; if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null) { taskCardCellValue = "Not set Engineering Order file."; taskCardCellBackColor = Color.Red; } else if (!string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null) { taskCardCellValue = $"Not set Engineering Order File. (Engineering Order No {item.EngineeringOrders}.)"; taskCardCellBackColor = Color.Red; } else if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile != null) { taskCardCellValue = $"Not set Engineering Order name. (File name {item.EngineeringOrderFile.FileName}.)"; taskCardCellBackColor = Color.Red; } else { taskCardCellValue = item.EngineeringOrders; } DataGridViewRow row = new DataGridViewRow { Tag = item }; DataGridViewCell discCell = new DataGridViewTextBoxCell(); DataGridViewCell taskCardCell = new DataGridViewTextBoxCell { Value = taskCardCellValue, Style = { BackColor = taskCardCellBackColor }, }; DataGridViewCell compntCell = new DataGridViewCheckBoxCell { Value = item.PrintInWorkPackage }; discCell.Value = "(AD)" + item.Title + " " + item.WorkType + " §:" + item.Paragraph; row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell }); discCell.ReadOnly = true; taskCardCell.ReadOnly = true; dataGridViewItems.Rows.Add(row); } #endregion #region SB foreach (Directive item in _workPackage.SbStatus) { string taskCardCellValue; Color taskCardCellBackColor = Color.White; if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null) { taskCardCellValue = "Not set Engineering Order file."; taskCardCellBackColor = Color.Red; } else if (!string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null) { taskCardCellValue = $"Not set Engineering Order File. (Engineering Order No {item.EngineeringOrders}.)"; taskCardCellBackColor = Color.Red; } else if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile != null) { taskCardCellValue = $"Not set Engineering Order name. (File name {item.EngineeringOrderFile.FileName}.)"; taskCardCellBackColor = Color.Red; } else { taskCardCellValue = item.EngineeringOrders; } DataGridViewRow row = new DataGridViewRow { Tag = item }; DataGridViewCell discCell = new DataGridViewTextBoxCell(); DataGridViewCell taskCardCell = new DataGridViewTextBoxCell { Value = taskCardCellValue, Style = { BackColor = taskCardCellBackColor }, }; DataGridViewCell compntCell = new DataGridViewCheckBoxCell { Value = item.PrintInWorkPackage }; discCell.Value = "(SB)" + item.Title + " " + item.WorkType + " §:" + item.Paragraph; row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell }); discCell.ReadOnly = true; taskCardCell.ReadOnly = true; dataGridViewItems.Rows.Add(row); } #endregion #region EO foreach (Directive item in _workPackage.EoStatus) { string taskCardCellValue; Color taskCardCellBackColor = Color.White; if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null) { taskCardCellValue = "Not set Engineering Order file."; taskCardCellBackColor = Color.Red; } else if (!string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null) { taskCardCellValue = $"Not set Engineering Order File. (Engineering Order No {item.EngineeringOrders}.)"; taskCardCellBackColor = Color.Red; } else if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile != null) { taskCardCellValue = $"Not set Engineering Order name. (File name {item.EngineeringOrderFile.FileName}.)"; taskCardCellBackColor = Color.Red; } else { taskCardCellValue = item.EngineeringOrders; } DataGridViewRow row = new DataGridViewRow { Tag = item }; DataGridViewCell discCell = new DataGridViewTextBoxCell(); DataGridViewCell taskCardCell = new DataGridViewTextBoxCell { Value = taskCardCellValue, Style = { BackColor = taskCardCellBackColor }, }; DataGridViewCell compntCell = new DataGridViewCheckBoxCell { Value = item.PrintInWorkPackage }; discCell.Value = "(EO)" + item.Title + " " + item.WorkType + " §:" + item.Paragraph; row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell }); discCell.ReadOnly = true; taskCardCell.ReadOnly = true; dataGridViewItems.Rows.Add(row); } #endregion #region Повреждения foreach (Directive item in _workPackage.Damages) { string taskCardCellValue; Color taskCardCellBackColor = Color.White; if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null) { taskCardCellValue = "Not set Engineering Order file."; taskCardCellBackColor = Color.Red; } else if (!string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null) { taskCardCellValue = $"Not set Engineering Order File. (Engineering Order No {item.EngineeringOrders}.)"; taskCardCellBackColor = Color.Red; } else if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile != null) { taskCardCellValue = $"Not set Engineering Order name. (File name {item.EngineeringOrderFile.FileName}.)"; taskCardCellBackColor = Color.Red; } else { taskCardCellValue = item.EngineeringOrders; } DataGridViewRow row = new DataGridViewRow { Tag = item }; DataGridViewCell discCell = new DataGridViewTextBoxCell(); DataGridViewCell taskCardCell = new DataGridViewTextBoxCell { Value = taskCardCellValue, Style = { BackColor = taskCardCellBackColor }, }; DataGridViewCell compntCell = new DataGridViewCheckBoxCell { Value = item.PrintInWorkPackage }; discCell.Value = "(DRI)" + item.Title + " " + item.WorkType + " §:" + item.Paragraph; row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell }); discCell.ReadOnly = true; taskCardCell.ReadOnly = true; dataGridViewItems.Rows.Add(row); } #endregion #region OutOfPhaseItems foreach (Directive item in _workPackage.OutOfPhaseItems) { string taskCardCellValue; Color taskCardCellBackColor = Color.White; if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null) { taskCardCellValue = "Not set Engineering Order file."; taskCardCellBackColor = Color.Red; } else if (!string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null) { taskCardCellValue = $"Not set Engineering Order File. (Engineering Order No {item.EngineeringOrders}.)"; taskCardCellBackColor = Color.Red; } else if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile != null) { taskCardCellValue = $"Not set Engineering Order name. (File name {item.EngineeringOrderFile.FileName}.)"; taskCardCellBackColor = Color.Red; } else { taskCardCellValue = item.EngineeringOrders; } DataGridViewRow row = new DataGridViewRow { Tag = item }; DataGridViewCell discCell = new DataGridViewTextBoxCell(); DataGridViewCell taskCardCell = new DataGridViewTextBoxCell { Value = taskCardCellValue, Style = { BackColor = taskCardCellBackColor }, }; DataGridViewCell compntCell = new DataGridViewCheckBoxCell { Value = item.PrintInWorkPackage }; discCell.Value = "(OP)" + item.Title + " " + item.WorkType + " §:" + item.Paragraph; row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell }); discCell.ReadOnly = true; taskCardCell.ReadOnly = true; dataGridViewItems.Rows.Add(row); } #endregion #region Отложенные дефекты foreach (Directive item in _workPackage.DefferedItems) { string taskCardCellValue; Color taskCardCellBackColor = Color.White; if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null) { taskCardCellValue = "Not set Engineering Order file."; taskCardCellBackColor = Color.Red; } else if (!string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile == null) { taskCardCellValue = $"Not set Engineering Order File. (Engineering Order No {item.EngineeringOrders}.)"; taskCardCellBackColor = Color.Red; } else if (string.IsNullOrEmpty(item.EngineeringOrders) && item.EngineeringOrderFile != null) { taskCardCellValue = $"Not set Engineering Order name. (File name {item.EngineeringOrderFile.FileName}.)"; taskCardCellBackColor = Color.Red; } else { taskCardCellValue = item.EngineeringOrders; } DataGridViewRow row = new DataGridViewRow { Tag = item }; DataGridViewCell discCell = new DataGridViewTextBoxCell(); DataGridViewCell taskCardCell = new DataGridViewTextBoxCell { Value = taskCardCellValue, Style = { BackColor = taskCardCellBackColor }, }; DataGridViewCell compntCell = new DataGridViewCheckBoxCell { Value = item.PrintInWorkPackage }; discCell.Value = "(DI)" + item.Title + " " + item.WorkType + " §:" + item.Paragraph; row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell }); discCell.ReadOnly = true; taskCardCell.ReadOnly = true; dataGridViewItems.Rows.Add(row); } #endregion #region Компоненты и задачи по компонентам var componentDirectives = _workPackage.ComponentDirectives.ToList(); foreach (var item in _workPackage.Components) { List <ComponentDirective> dds = componentDirectives.Where(dd => dd.ParentComponent != null && dd.ParentComponent.ItemId == item.ItemId).ToList(); foreach (var componentDirective in dds) { componentDirectives.Remove(componentDirective); } DataGridViewRow row = new DataGridViewRow { Tag = item }; DataGridViewCell discCell = new DataGridViewTextBoxCell(); DataGridViewCell taskCardCell = new DataGridViewTextBoxCell(); DataGridViewCell compntCell = new DataGridViewCheckBoxCell { Value = item.PrintInWorkPackage }; discCell.Value = "CCO:" + item.Description + " " + item.PartNumber + " " + item.SerialNumber; row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell }); discCell.ReadOnly = true; taskCardCell.ReadOnly = true; dataGridViewItems.Rows.Add(row); } foreach (ComponentDirective item in componentDirectives) { Component d = item.ParentComponent; DataGridViewRow row = new DataGridViewRow { Tag = item }; DataGridViewCell discCell = new DataGridViewTextBoxCell(); DataGridViewCell taskCardCell = new DataGridViewTextBoxCell(); DataGridViewCell compntCell = new DataGridViewCheckBoxCell { Value = item.PrintInWorkPackage }; discCell.Value = "CCO:" + item.DirectiveType + " for " + d.Description + " " + d.PartNumber + " " + d.SerialNumber; row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell }); discCell.ReadOnly = true; taskCardCell.ReadOnly = true; dataGridViewItems.Rows.Add(row); } #endregion #region Нерутинные задачи foreach (NonRoutineJob item in _workPackage.NonRoutines) { DataGridViewRow row = new DataGridViewRow { Tag = item }; DataGridViewCell discCell = new DataGridViewTextBoxCell { Value = "(Non-Routine)" + item.Title }; DataGridViewCell taskCardCell = new DataGridViewTextBoxCell(); DataGridViewCell compntCell = new DataGridViewCheckBoxCell { Value = item.PrintInWorkPackage }; row.Cells.AddRange(new[] { discCell, taskCardCell, compntCell }); discCell.ReadOnly = true; taskCardCell.ReadOnly = true; dataGridViewItems.Rows.Add(row); } #endregion }
///<summary> ///</summary> public void Save() { foreach (CompliancePDFItem pdFitem in flowLayoutPanelContainer.Controls) { pdFitem.ApplyChanges(); MaintenanceCheckRecord lastPerformance; if (_isEdit == false) { lastPerformance = new MaintenanceCheckRecord { ParentCheck = pdFitem.Check }; if (pdFitem.Check.Grouping) { MaintenanceNextPerformance mnp = _performances.FirstOrDefault(p => p.Parent != null && p.Parent.ItemId == pdFitem.Check.ItemId); lastPerformance.PerformanceNum = mnp != null ? mnp.PerformanceNum : _numGroup; } else { lastPerformance.PerformanceNum = _numGroup; } lastPerformance.NumGroup = _numGroup; lastPerformance.CalculatedPerformanceSource = lastPerformance.ParentCheck.Interval * lastPerformance.PerformanceNum; } else { lastPerformance = pdFitem.Record; } lastPerformance.AttachedFile = pdFitem.AttachedFile; lastPerformance.ComplianceCheckName = textBoxCheckName.Text.Trim(); lastPerformance.RecordDate = dateTimePicker1.Value; lastPerformance.OnLifelength = lifelengthViewer_LastCompliance.Lifelength; lastPerformance.IsControlPoint = checkBoxControlPoint.Checked; lastPerformance.Remarks = textBox_Remarks.Text.Trim(); try { GlobalObjects.PerformanceCore.RegisterPerformance(pdFitem.Check, lastPerformance); IEnumerable <DirectiveRecord> bindedDirectivesRecord = pdFitem.BindDirectivesRecords; foreach (DirectiveRecord record in bindedDirectivesRecord) { if (record.ItemId > 0 && record.IsDeleted) { GlobalObjects.PerformanceCore.Delete(record); } else { record.MaintenanceCheckRecordId = lastPerformance.ItemId; record.OnLifelength = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthOnStartOfDay(_currentAircraft, record.RecordDate); record.Remarks = string.IsNullOrEmpty(lastPerformance.Remarks) ? "This performance added by " + pdFitem.Check.Name + " on " + UsefulMethods.NormalizeDate(lastPerformance.RecordDate) : lastPerformance.Remarks; GlobalObjects.CasEnvironment.Manipulator.Save(record, false); } } } catch (Exception ex) { Program.Provider.Logger.Log("Error while save performance for maintenance check", ex); break; } } }
/// <summary> /// This sample adds a consecutive number in the middle of each page. /// It shows how you can add graphics to an imported page. /// </summary> private void ConcatenatePdfDocuments() { List <MaintenanceCheck> selectedChecks = new List <MaintenanceCheck>(_workPackage.MaintenanceChecks); List <MaintenanceDirective> selectedMpds = new List <MaintenanceDirective>(_workPackage.MaintenanceDirectives); selectedMpds.AddRange((from record in _workPackage.MaintenanceCheckBindTaskRecords where record.TaskType == SmartCoreType.MaintenanceDirective select record.Task as MaintenanceDirective)); selectedMpds = selectedMpds.Distinct().OrderBy(cm => cm.TaskNumberCheck).ToList(); List <Directive> selectedADs = new List <Directive>(_workPackage.AdStatus); selectedADs.AddRange(_workPackage.SbStatus); selectedADs.AddRange(_workPackage.EoStatus); List <Directive> selectedDamages = new List <Directive>(_workPackage.Damages); List <Directive> selectedOofs = new List <Directive>(_workPackage.OutOfPhaseItems); List <Directive> selectedDeffereds = new List <Directive>(_workPackage.DefferedItems); List <ComponentDirective> selectedComponentDirectives = new List <ComponentDirective>(_workPackage.ComponentDirectives); List <Component> selectedComponents = new List <Component>(_workPackage.Components); List <NonRoutineJob> selectedNrjs = new List <NonRoutineJob>(_workPackage.NonRoutines); _animatedThreadWorker.ReportProgress(10, "Sample of Maintenance checks and MPD"); #region Выборка Чеков и директив программы обслуживания foreach (DataGridViewRow row in dataGridViewItems.Rows) { if (!(row.Tag is MaintenanceCheck)) { continue; } if (row.Cells.Count < 3 || !(row.Cells[2] is DataGridViewCheckBoxCell)) { continue; } MaintenanceCheck check = row.Tag as MaintenanceCheck; DataGridViewCheckBoxCell printCell = (DataGridViewCheckBoxCell)row.Cells[2]; if (!(bool)printCell.Value) { //Если чек не выбран для распечатки, //то из результирующей коллекции для распечатки нужно исключить как сам чек, //так и его элементы selectedChecks.Remove(check); if (check.Grouping) { MaintenanceNextPerformance mnp = check.GetNextPergormanceGroupWhereCheckIsSenior(); if (mnp != null && mnp.PerformanceGroup != null && mnp.PerformanceGroup.Checks.Count > 0 && _workPackage.Aircraft != null && _workPackage.Aircraft.MSG == MSG.MSG3) { foreach (MaintenanceCheck mc in mnp.PerformanceGroup.Checks) { List <MaintenanceDirective> checkMpds = (from record in _workPackage.MaintenanceCheckBindTaskRecords where record.TaskType == SmartCoreType.MaintenanceDirective && record.CheckId == mc.ItemId select record.Task as MaintenanceDirective) .OrderBy(cm => cm.TaskNumberCheck) .ToList(); checkMpds.AddRange(mc.BindMpds); foreach (MaintenanceDirective checkMpd in checkMpds) { selectedMpds.Remove(checkMpd); } } } else { List <MaintenanceDirective> checkMpds = (from record in _workPackage.MaintenanceCheckBindTaskRecords where record.TaskType == SmartCoreType.MaintenanceDirective && record.CheckId == check.ItemId select record.Task as MaintenanceDirective) .OrderBy(cm => cm.TaskNumberCheck) .ToList(); checkMpds.AddRange(check.BindMpds); foreach (MaintenanceDirective checkMpd in checkMpds) { selectedMpds.Remove(checkMpd); } } } else { List <MaintenanceDirective> checkMpds = (from record in _workPackage.MaintenanceCheckBindTaskRecords where record.TaskType == SmartCoreType.MaintenanceDirective && record.CheckId == check.ItemId select record.Task as MaintenanceDirective) .OrderBy(cm => cm.TaskNumberCheck) .ToList(); checkMpds.AddRange(check.BindMpds); foreach (MaintenanceDirective checkMpd in checkMpds) { selectedMpds.Remove(checkMpd); } } } } foreach (DataGridViewRow row in dataGridViewItems.Rows) { if (!(row.Tag is MaintenanceDirective)) { continue; } if (row.Cells.Count < 3 || !(row.Cells[2] is DataGridViewCheckBoxCell)) { continue; } MaintenanceDirective mpd = row.Tag as MaintenanceDirective; DataGridViewCheckBoxCell printCell = (DataGridViewCheckBoxCell)row.Cells[2]; if (!(bool)printCell.Value) { //Если директива программы обслуживания не выбрана для распечатки, //то ее нужно исключить из результирующей коллекции для распечатки MaintenanceDirective directive = selectedMpds.FirstOrDefault(sm => sm.ItemId == mpd.ItemId); if (directive != null) { selectedMpds.Remove(directive); } } else { if (row.Cells.Count < 4 || !(row.Cells[3] is DataGridViewComboBoxCell)) { continue; } //Если директива программы обслуживания имеет связные с ней задачи по //компонентам и Выбрана для распечатки, //то нужно определить, сколько копий директивы надо включить в распечатку //1. По одной на каждую связную задачу по компоненту //2. Одну на все связные задачи по компонентам MaintenanceDirective directive = selectedMpds.FirstOrDefault(sm => sm.ItemId == mpd.ItemId); if (directive != null) { DataGridViewComboBoxCell countCell = (DataGridViewComboBoxCell)row.Cells[3]; if (countCell.EditedFormattedValue.ToString() == _comboBoxItemOneToOne) { directive.CountForPrint = directive.ItemRelations.Count; } else if (countCell.EditedFormattedValue.ToString() == _comboBoxItemOneForAll) { directive.CountForPrint = 1; } } } } #endregion _animatedThreadWorker.ReportProgress(15, "Sample of AD"); #region Выборка Директив летной годности foreach (DataGridViewRow row in dataGridViewItems.Rows) { if (!(row.Tag is Directive)) { continue; } if (row.Cells.Count < 3 || !(row.Cells[2] is DataGridViewCheckBoxCell)) { continue; } Directive directive = row.Tag as Directive; DataGridViewCheckBoxCell printCell = (DataGridViewCheckBoxCell)row.Cells[2]; if (!(bool)printCell.Value) { if (directive.DirectiveType == DirectiveType.AirworthenessDirectives && selectedADs.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null) { selectedADs.Remove(directive); } if (directive.DirectiveType == DirectiveType.DamagesRequiring && selectedDamages.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null) { selectedDamages.Remove(directive); } if (directive.DirectiveType == DirectiveType.DeferredItems && selectedDeffereds.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null) { selectedDeffereds.Remove(directive); } if (directive.DirectiveType == DirectiveType.OutOfPhase && selectedOofs.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null) { selectedOofs.Remove(directive); } if (directive.DirectiveType == DirectiveType.SB && selectedOofs.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null) { selectedOofs.Remove(directive); } if (directive.DirectiveType == DirectiveType.EngineeringOrders && selectedOofs.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null) { selectedOofs.Remove(directive); } } } #endregion _animatedThreadWorker.ReportProgress(20, "Sample of Component directives"); #region Выборка Задач по компонентам foreach (DataGridViewRow row in dataGridViewItems.Rows) { if (!(row.Tag is ComponentDirective)) { continue; } if (row.Cells.Count < 3 || !(row.Cells[2] is DataGridViewCheckBoxCell)) { continue; } ComponentDirective directive = row.Tag as ComponentDirective; DataGridViewCheckBoxCell printCell = (DataGridViewCheckBoxCell)row.Cells[2]; if (!(bool)printCell.Value && selectedComponentDirectives.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null) { selectedComponentDirectives.Remove(directive); } } #endregion _animatedThreadWorker.ReportProgress(25, "Sample of Components"); #region Выборка компонентов foreach (DataGridViewRow row in dataGridViewItems.Rows) { if (!(row.Tag is Component)) { continue; } if (row.Cells.Count < 3 || !(row.Cells[2] is DataGridViewCheckBoxCell)) { continue; } Component directive = row.Tag as Component; DataGridViewCheckBoxCell printCell = (DataGridViewCheckBoxCell)row.Cells[2]; if (!(bool)printCell.Value && selectedComponents.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null) { selectedComponents.Remove(directive); } } #endregion _animatedThreadWorker.ReportProgress(30, "Sample of Non-routine jobs"); #region Выборка нерутинных работ foreach (DataGridViewRow row in dataGridViewItems.Rows) { if (!(row.Tag is NonRoutineJob)) { continue; } if (row.Cells.Count < 3 || !(row.Cells[2] is DataGridViewCheckBoxCell)) { continue; } NonRoutineJob directive = row.Tag as NonRoutineJob; DataGridViewCheckBoxCell printCell = (DataGridViewCheckBoxCell)row.Cells[2]; if (!(bool)printCell.Value && selectedNrjs.FirstOrDefault(sm => sm.ItemId == directive.ItemId) != null) { selectedNrjs.Remove(directive); } } #endregion _selectedItems.Clear(); _selectedItems.AddRange(selectedChecks.ToArray()); _selectedItems.AddRange(selectedMpds.ToArray()); _selectedItems.AddRange(selectedADs.ToArray()); _selectedItems.AddRange(selectedDamages.ToArray()); _selectedItems.AddRange(selectedOofs.ToArray()); _selectedItems.AddRange(selectedDeffereds.ToArray()); _selectedItems.AddRange(selectedComponentDirectives.ToArray()); _selectedItems.AddRange(selectedComponents.ToArray()); _selectedItems.AddRange(selectedNrjs.ToArray()); }
protected override void SetItemColor(GridViewRowInfo listViewItem, NextPerformance item) { Color itemForeColor = Color.Black; if (item is MaintenanceNextPerformance) { MaintenanceNextPerformance mnp = item as MaintenanceNextPerformance; foreach (GridViewCellInfo cell in listViewItem.Cells) { cell.Style.CustomizeFill = true; cell.Style.ForeColor = mnp == ((MaintenanceCheck)item.Parent).GetPergormanceGroupWhereCheckIsSenior()[0] ? Color.Black : Color.Gray; } if (mnp.CalcForHight) { foreach (GridViewCellInfo cell in listViewItem.Cells) { cell.Style.CustomizeFill = true; cell.Style.BackColor = Color.FromArgb(Highlight.PurpleLight.Color); if (cell.Style.ForeColor != Color.MediumVioletRed) { cell.Style.ForeColor = itemForeColor; } } } } else { IDirective imd = item.Parent; foreach (GridViewCellInfo cell in listViewItem.Cells) { cell.Style.CustomizeFill = true; cell.Style.BackColor = Color.White; if (imd.Condition == ConditionState.Notify) { cell.Style.BackColor = Color.FromArgb(Highlight.Yellow.Color); } if (imd.Condition == ConditionState.Overdue) { cell.Style.BackColor = Color.FromArgb(Highlight.Red.Color); } if (imd.Percents != null && imd.Percents > 0) { cell.Style.BackColor = Color.FromArgb(Highlight.Green.Color); } if (cell.Style.ForeColor != Color.MediumVioletRed) { cell.Style.ForeColor = imd.NextPerformances.IndexOf(item) == 0 ? Color.Black : Color.Gray; } ; } } var itemBacBlackolor = listViewItem.Cells[0].Style.BackColor; if (item.Parent is MaintenanceDirective) { var mpd = item.Parent as MaintenanceDirective; if (mpd.IsExtension) { itemBacBlackolor = Color.DodgerBlue; foreach (GridViewCellInfo cell in listViewItem.Cells) { cell.Style.CustomizeFill = true; cell.Style.BackColor = itemBacBlackolor; } } } if (item.BlockedByPackage != null) { foreach (GridViewCellInfo cell in listViewItem.Cells) { cell.Style.CustomizeFill = true; cell.Style.BackColor = Color.FromArgb(Highlight.Grey.Color); if (cell.Style.ForeColor != Color.MediumVioletRed) { cell.Style.ForeColor = itemForeColor; } } } }
private void GenerateRows() { listViewProgramChecks.Items.Clear(); if (_grouping) { MaintenanceCheckCollection mcc = new MaintenanceCheckCollection(_maintenanceCheckItems); MaintenanceCheck mc = mcc.GetMinStepCheck(_maintenanceCheckItems[0].Schedule); if (mc == null) { return; } MSG msg = mc.ParentAircraft != null && mc.ParentAircraft.MaintenanceProgramChangeRecords.Count > 0 ? mc.ParentAircraft.MaintenanceProgramChangeRecords.GetLast().MSG : MSG.MSG2; if (msg < MSG.MSG3) { MaintenanceCheckComplianceGroup mccg = mcc.GetLastComplianceCheckGroup(mc.Schedule, mc.ParentAircraftId, mc.Grouping, mc.Resource); int lastPerformanceGroupNum = mccg != null ? mccg.LastComplianceGroupNum : 0; int countMinStepInMinCheck = Convert.ToInt32(mc.Interval.GetSubresource(mc.Resource)) / _minCheckResource; foreach (MaintenanceCheck t in _maintenanceCheckItems) { ListViewItem listViewItem = new ListViewItem { Text = t.Name }; listViewItem.SubItems.Add(t.Interval.ToRepeatIntervalsFormat()); listViewItem.SubItems.Add(t.Cost.ToString()); listViewItem.SubItems.Add(t.ManHours.ToString()); for (int j = 1; j <= _countColumns; j++) { MaintenanceNextPerformance mnp = t.GetPergormanceGroupByGroupNum(lastPerformanceGroupNum + j * countMinStepInMinCheck); listViewItem.SubItems.Add(mnp != null ? "X" : ""); } listViewProgramChecks.Items.Add(listViewItem); } } else { MaintenanceCheckComplianceGroup mccg = mcc.GetLastComplianceCheckGroup(mc.Schedule, mc.ParentAircraftId, mc.Grouping, mc.Resource); int lastPerformanceGroupNum = mccg != null ? mccg.LastComplianceGroupNum : 0; int countMinStepInMinCheck = Convert.ToInt32(mc.Interval.GetSubresource(mc.Resource)) / _minCheckResource; foreach (MaintenanceCheck t in _maintenanceCheckItems) { ListViewItem listViewItem = new ListViewItem { Text = t.Name }; listViewItem.SubItems.Add(t.Interval.ToRepeatIntervalsFormat()); listViewItem.SubItems.Add(t.Cost.ToString()); listViewItem.SubItems.Add(t.ManHours.ToString()); for (int j = 1; j <= _countColumns; j++) { MaintenanceNextPerformance mnp = t.GetPergormanceGroupWhereCheckIsSeniorByGroupNum(lastPerformanceGroupNum + j * countMinStepInMinCheck); listViewItem.SubItems.Add(mnp != null ? "X" : ""); } listViewProgramChecks.Items.Add(listViewItem); } } mcc.Clear(); } else { foreach (MaintenanceCheck t in _maintenanceCheckItems) { ListViewItem listViewItem = new ListViewItem { Text = t.Name }; listViewItem.SubItems.Add(t.Interval.ToRepeatIntervalsFormat()); listViewItem.SubItems.Add(t.Cost.ToString()); listViewItem.SubItems.Add(t.ManHours.ToString()); Lifelength lastPerformance = t.LastPerformance != null ? new Lifelength(t.LastPerformance.OnLifelength) : Lifelength.Null; int?last = lastPerformance.GetSubresource(_subResource); listViewItem.SubItems.Add(last != null ? lastPerformance.ToString(_subResource, true) : ""); if (t.Schedule == _schedule) { Lifelength nextPerformance = lastPerformance + t.Interval; int? next = nextPerformance.GetSubresource(_subResource); listViewItem.SubItems.Add(next != null ? nextPerformance.ToString(_subResource, true) : ""); } else { listViewItem.SubItems.Add("N/A"); } listViewProgramChecks.Items.Add(listViewItem); } } }
private void AddToWorkPackageItemClick(object sender, EventArgs e) { if (_directivesViewer.SelectedItems.Count <= 0) { return; } WorkPackage wp = (WorkPackage)((RadMenuItem)sender).Tag; if (MessageBox.Show("Add item to Work Package: " + wp.Title + "?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { List <NextPerformance> wpItems = _directivesViewer.SelectedItems.ToList(); List <NextPerformance> bindedDirectivesPerformances = new List <NextPerformance>(); foreach (NextPerformance wpItem in wpItems) { if (wpItem is MaintenanceNextPerformance) { MaintenanceNextPerformance mnp = wpItem as MaintenanceNextPerformance; if (mnp.PerformanceGroup.Checks.Count > 0) { foreach (MaintenanceCheck mc in mnp.PerformanceGroup.Checks) { foreach (MaintenanceDirective mpd in _currentForecast.MaintenanceDirectives .Where(mpd => mpd.MaintenanceCheck != null && mpd.MaintenanceCheck.ItemId == mc.ItemId)) { NextPerformance performance = mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null && p.PerformanceDate.Value.Date == wpItem.PerformanceDate.Value.Date) ?? mpd.NextPerformances.LastOrDefault(p => p.PerformanceDate != null && p.PerformanceDate < wpItem.PerformanceDate) ?? mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null && p.PerformanceDate > wpItem.PerformanceDate); if (performance == null) { continue; } if (wpItems.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0) { bindedDirectivesPerformances.Add(performance); } } } } else if (wpItem.Parent is MaintenanceCheck) { MaintenanceCheck mc = wpItem.Parent as MaintenanceCheck; foreach (MaintenanceDirective mpd in _currentForecast.MaintenanceDirectives .Where(mpd => mpd.MaintenanceCheck != null && mpd.MaintenanceCheck.ItemId == mc.ItemId)) { NextPerformance performance = mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null && p.PerformanceDate.Value.Date == wpItem.PerformanceDate.Value.Date) ?? mpd.NextPerformances.LastOrDefault(p => p.PerformanceDate != null && p.PerformanceDate < wpItem.PerformanceDate) ?? mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null && p.PerformanceDate > wpItem.PerformanceDate); if (performance == null) { continue; } if (wpItems.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0) { bindedDirectivesPerformances.Add(performance); } } } } else if (wpItem.Parent is MaintenanceCheck) { MaintenanceCheck mc = wpItem.Parent as MaintenanceCheck; foreach (MaintenanceDirective mpd in _currentForecast.MaintenanceDirectives .Where(mpd => mpd.MaintenanceCheck != null && mpd.MaintenanceCheck.ItemId == mc.ItemId)) { NextPerformance performance = mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null && p.PerformanceDate.Value.Date == wpItem.PerformanceDate.Value.Date) ?? mpd.NextPerformances.LastOrDefault(p => p.PerformanceDate != null && p.PerformanceDate < wpItem.PerformanceDate) ?? mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null && p.PerformanceDate > wpItem.PerformanceDate); if (performance == null) { continue; } if (wpItems.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0) { bindedDirectivesPerformances.Add(performance); } } } } wpItems.AddRange(bindedDirectivesPerformances); try { string message; if (!GlobalObjects.WorkPackageCore.AddToWorkPakage(wpItems, wp.ItemId, CurrentAircraft, out message)) { MessageBox.Show(message, (string)new GlobalTermsProvider()["SystemName"], MessageBoxButtons.OK, MessageBoxIcon.Error); return; } foreach (NextPerformance nextPerformance in wpItems) { nextPerformance.BlockedByPackage = wp; _directivesViewer.UpdateItemColor(); } if (MessageBox.Show("Items added successfully. Open work package?", (string)new GlobalTermsProvider()["SystemName"], MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { ReferenceEventArgs refArgs = new ReferenceEventArgs(); refArgs.TypeOfReflection = ReflectionTypes.DisplayInNew; refArgs.DisplayerText = CurrentAircraft != null ? CurrentAircraft.RegistrationNumber + "." + wp.Title : wp.Title; refArgs.RequestedEntity = new WorkPackageScreen(wp); InvokeDisplayerRequested(refArgs); } } catch (Exception ex) { Program.Provider.Logger.Log("error while create Work Package", ex); } } }
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 void ButtonCreateWorkPakageClick(object sender, EventArgs e) { if (_directivesViewer.SelectedItems.Count <= 0) { return; } if (MessageBox.Show("Create and save a Work Package?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { List <NextPerformance> wpItems = _directivesViewer.SelectedItems.ToList(); List <NextPerformance> bindedDirectivesPerformances = new List <NextPerformance>(); foreach (NextPerformance wpItem in wpItems) { if (wpItem is MaintenanceNextPerformance) { MaintenanceNextPerformance mnp = wpItem as MaintenanceNextPerformance; if (mnp.PerformanceGroup.Checks.Count > 0) { foreach (MaintenanceCheck mc in mnp.PerformanceGroup.Checks) { foreach (MaintenanceDirective mpd in _currentForecast.MaintenanceDirectives .Where(mpd => mpd.MaintenanceCheck != null && mpd.MaintenanceCheck.ItemId == mc.ItemId)) { NextPerformance performance = mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null && p.PerformanceDate.Value.Date == wpItem.PerformanceDate.Value.Date) ?? mpd.NextPerformances.LastOrDefault(p => p.PerformanceDate != null && p.PerformanceDate < wpItem.PerformanceDate) ?? mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null && p.PerformanceDate > wpItem.PerformanceDate); if (performance == null) { continue; } if (wpItems.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0) { bindedDirectivesPerformances.Add(performance); } } } } else if (wpItem.Parent is MaintenanceCheck) { MaintenanceCheck mc = wpItem.Parent as MaintenanceCheck; foreach (MaintenanceDirective mpd in _currentForecast.MaintenanceDirectives .Where(mpd => mpd.MaintenanceCheck != null && mpd.MaintenanceCheck.ItemId == mc.ItemId)) { NextPerformance performance = mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null && p.PerformanceDate.Value.Date == wpItem.PerformanceDate.Value.Date) ?? mpd.NextPerformances.LastOrDefault(p => p.PerformanceDate != null && p.PerformanceDate < wpItem.PerformanceDate) ?? mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null && p.PerformanceDate > wpItem.PerformanceDate); if (performance == null) { continue; } if (wpItems.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0) { bindedDirectivesPerformances.Add(performance); } } } } else if (wpItem.Parent is MaintenanceCheck) { MaintenanceCheck mc = wpItem.Parent as MaintenanceCheck; foreach (MaintenanceDirective mpd in _currentForecast.MaintenanceDirectives .Where(mpd => mpd.MaintenanceCheck != null && mpd.MaintenanceCheck.ItemId == mc.ItemId)) { NextPerformance performance = mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null && p.PerformanceDate.Value.Date == wpItem.PerformanceDate.Value.Date) ?? mpd.NextPerformances.LastOrDefault(p => p.PerformanceDate != null && p.PerformanceDate < wpItem.PerformanceDate) ?? mpd.NextPerformances.FirstOrDefault(p => p.PerformanceDate != null && p.PerformanceDate > wpItem.PerformanceDate); if (performance == null) { continue; } if (wpItems.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0) { bindedDirectivesPerformances.Add(performance); } } } } wpItems.AddRange(bindedDirectivesPerformances); try { string message; WorkPackage wp = GlobalObjects.WorkPackageCore.AddWorkPakage(wpItems, _currentAircraft, out message); if (wp == null) { MessageBox.Show(message, (string)new GlobalTermsProvider()["SystemName"], MessageBoxButtons.OK, MessageBoxIcon.Error); return; } //Добавление нового рабочего пакета в коллекцию открытых рабочих пакетов _openPubWorkPackages.Add(wp); //Создание пункта в меню открытых рабочих пакетов var item = new RadMenuItem(wp.Title); item.Click += AddToWorkPackageItemClick; item.Tag = wp; _toolStripMenuItemsWorkPackages.Items.Add(item); foreach (NextPerformance nextPerformance in wpItems) { nextPerformance.BlockedByPackage = wp; _directivesViewer.UpdateItemColor(); } ReferenceEventArgs refArgs = new ReferenceEventArgs(); refArgs.TypeOfReflection = ReflectionTypes.DisplayInNew; refArgs.DisplayerText = CurrentAircraft != null ? CurrentAircraft.RegistrationNumber + "." + wp.Title : wp.Title; refArgs.RequestedEntity = new WorkPackageScreen(wp); InvokeDisplayerRequested(refArgs); } catch (Exception ex) { Program.Provider.Logger.Log("error while create Work Package", ex); } } }
private ListViewItem GetListViewItem(MaintenanceCheck check) { ListViewItem listViewItem = new ListViewItem { Tag = check, Text = check.Name }; if (check.Grouping) { MaintenanceNextPerformance np = check.NextPerformances.FirstOrDefault() as MaintenanceNextPerformance; MaintenanceProgramChangeRecord mpcr = np != null && np.PerformanceDate != null ? _currentAircraft.MaintenanceProgramChangeRecords. GetLastKnownRecord(Convert.ToDateTime(np.PerformanceDate)) : null; if (mpcr != null && mpcr.MSG >= MSG.MSG3) { string lastPerformanceDate = "N/A"; string lastPerformanceSource = "N/A"; string lastPerformaceGroup = "N/A"; string lastCheckName = "N/A"; string nextPerformanceDate = "N/A"; string nextPerformanceSource = "N/A"; string nextPerformaceGroup = "N/A"; string nextCheckName = "N/A"; string remains = "N/A"; MaintenanceNextPerformance mnp = check.GetNextPergormanceGroupWhereCheckIsSenior(); if (mnp != null) { nextPerformanceDate = UsefulMethods.NormalizeDate(Convert.ToDateTime(mnp.PerformanceDate)); nextPerformanceSource = mnp.PerformanceSource.ToString(); nextPerformaceGroup = mnp.PerformanceGroupNum + "/" + mnp.PerformanceNum; nextCheckName = mnp.PerformanceGroup.GetGroupName(); remains = mnp.Remains.ToString(); } if (check.LastPerformance != null) { MaintenanceCheckRecord mcr = _checkItems.GetLastCheckRecordWhereCheckIsSenior(check); if (mcr != null) { lastPerformanceDate = UsefulMethods.NormalizeDate(mcr.RecordDate); lastPerformanceSource = mcr.OnLifelength.ToString(); lastPerformaceGroup = mcr.NumGroup + "/" + mcr.PerformanceNum; lastCheckName = _currentAircraft != null && _currentAircraft.MaintenanceProgramCheckNaming ? (!string.IsNullOrEmpty(mcr.ComplianceCheckName) ? mcr.ComplianceCheckName : check.Name) : check.Name; } } listViewItem.SubItems.Add(lastPerformanceDate); listViewItem.SubItems.Add(lastPerformanceSource); listViewItem.SubItems.Add(lastPerformaceGroup); listViewItem.SubItems.Add(lastCheckName); listViewItem.SubItems.Add(nextPerformanceDate); listViewItem.SubItems.Add(nextPerformanceSource); listViewItem.SubItems.Add(nextPerformaceGroup); listViewItem.SubItems.Add(nextCheckName); listViewItem.SubItems.Add(remains); } else { if (check.LastPerformance == null) { listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add(np != null && np.PerformanceDate != null ? UsefulMethods.NormalizeDate((DateTime)np.PerformanceDate) : "N/A"); listViewItem.SubItems.Add(np != null ? np.PerformanceSource.ToString() : "N/A"); listViewItem.SubItems.Add(np != null ? np.PerformanceGroupNum + "/" + np.PerformanceNum : "N/A"); listViewItem.SubItems.Add(np != null ? np.PerformanceGroup.GetGroupName() : "N/A"); listViewItem.SubItems.Add(np != null ? np.Remains.ToString() : "N/A"); } else { string lastCheckName = _currentAircraft != null && _currentAircraft.MaintenanceProgramCheckNaming ? (!string.IsNullOrEmpty(check.LastPerformance.ComplianceCheckName) ? check.LastPerformance.ComplianceCheckName : check.Name) : check.Name; listViewItem.SubItems.Add(UsefulMethods.NormalizeDate(check.LastPerformance.RecordDate)); listViewItem.SubItems.Add(check.LastPerformance.OnLifelength.ToString()); listViewItem.SubItems.Add(check.LastPerformance.NumGroup + "/" + check.LastPerformance.PerformanceNum); listViewItem.SubItems.Add(lastCheckName); listViewItem.SubItems.Add(np != null && np.PerformanceDate != null ? UsefulMethods.NormalizeDate((DateTime)np.PerformanceDate) : "N/A"); listViewItem.SubItems.Add(np != null ? np.PerformanceSource.ToString() : "N/A"); listViewItem.SubItems.Add(np != null ? np.PerformanceGroupNum + "/" + np.PerformanceNum : "N/A"); listViewItem.SubItems.Add(np != null ? np.PerformanceGroup.GetGroupName() : "N/A"); listViewItem.SubItems.Add(np != null ? np.Remains.ToString() : "N/A"); } } if (np != null && np.Condition == ConditionState.Overdue) { listViewItem.BackColor = Color.FromArgb(255, 170, 170); } else if (np != null && np.Condition == ConditionState.Notify) { listViewItem.BackColor = Color.FromArgb(255, 255, 170); } else if (np == null || np.Condition == ConditionState.NotEstimated) { listViewItem.BackColor = Color.FromArgb(170, 170, 255); } } else { NextPerformance np = check.NextPerformances.FirstOrDefault(); if (check.LastPerformance == null) { listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add(np != null && np.PerformanceDate != null ? UsefulMethods.NormalizeDate((DateTime)np.PerformanceDate) : "N/A"); listViewItem.SubItems.Add(np != null ? np.PerformanceSource.ToString() : "N/A"); listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add(np != null ? np.Remains.ToString() : "N/A"); } else { listViewItem.SubItems.Add(UsefulMethods.NormalizeDate(check.LastPerformance.RecordDate)); listViewItem.SubItems.Add(check.LastPerformance.OnLifelength.ToString()); listViewItem.SubItems.Add(check.LastPerformance.NumGroup.ToString()); listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add(np != null && np.PerformanceDate != null ? UsefulMethods.NormalizeDate((DateTime)np.PerformanceDate) : "N/A"); listViewItem.SubItems.Add(np != null ? np.PerformanceSource.ToString() : "N/A"); listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add("N/A"); listViewItem.SubItems.Add(np != null ? np.Remains.ToString() : "N/A"); } if (np != null && np.Condition == ConditionState.Overdue) { listViewItem.BackColor = Color.FromArgb(255, 170, 170); } else if (np != null && np.Condition == ConditionState.Notify) { listViewItem.BackColor = Color.FromArgb(255, 255, 170); } else if (np == null || np.Condition == ConditionState.NotEstimated) { listViewItem.BackColor = Color.FromArgb(170, 170, 255); } } listViewItem.Group = GetGroup(check); return(listViewItem); }