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 ListViewItem GetListViewItem(MaintenanceCheckRecordGroup grouping) { string name = "N/A"; string type = "N/A"; string resource = "N/A"; string group = "N/A"; string num = "N/A"; string recordDate = "N/A"; string performanceSource = "N/A"; string remarksString = "N/A"; Color backColor = Color.White; if (grouping.Records.Count > 0) { grouping.Sort(); MaintenanceCheckRecord mcr = grouping.LastOrDefault(); MaintenanceCheck mc = grouping.GetMaxIntervalCheck(); type = mc.Schedule ? " (Schedule) " : " (Store) "; resource = mc.Resource.ToString(); group = mc.Grouping ? " (Group)" : ""; backColor = mc.Schedule ? Color.White : Color.Gainsboro; if (mcr != null) { num = mc.Grouping ? mcr.NumGroup.ToString() : "N/A"; name = _currentAircraft != null && _currentAircraft.MaintenanceProgramCheckNaming ? (!string.IsNullOrEmpty(grouping.First().ComplianceCheckName) ? mcr.ComplianceCheckName : mc.Name) : mc.Name; recordDate = UsefulMethods.NormalizeDate(mcr.RecordDate); performanceSource = mcr.OnLifelength.ToRepeatIntervalsFormat(); remarksString = mcr.Remarks; if (mc.Grouping) { MaintenanceProgramChangeRecord mpcr = mc.ParentAircraft != null ? mc.ParentAircraft.MaintenanceProgramChangeRecords. GetLastKnownRecord(Convert.ToDateTime(mcr.RecordDate)) : null; if (mpcr == null || mpcr.MSG < MSG.MSG3) { var complianceItems = from compliance in grouping orderby compliance.OnLifelength.Hours descending select compliance; name += " (" + complianceItems.Aggregate("", (current, compliance) => current + (compliance.ParentCheck.Name + " ")) + ")"; } } } } ListViewItem listViewItem = new ListViewItem(num + type + resource + group) { Tag = grouping.ToList(), Group = listViewCompliance.Groups["last"], BackColor = backColor }; listViewItem.SubItems.Add(name); listViewItem.SubItems.Add(recordDate); listViewItem.SubItems.Add(performanceSource); listViewItem.SubItems.Add(remarksString); return(listViewItem); }
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"); }
//protected override void SetItemColor(ListViewItem listViewItem, BaseEntityObject item) //{ // if (item is NextPerformance) // { // NextPerformance nextPerformance = item as NextPerformance; // if(_currentDirective.Status != WorkPackageStatus.Closed) // { // if (nextPerformance.BlockedByPackage != null) // { // listViewItem.ToolTipText = "This performance blocked by work package:" + // nextPerformance.BlockedByPackage.Title; // listViewItem.BackColor = Color.FromArgb(Highlight.Grey.Color); // } // else if (nextPerformance.Condition == ConditionState.Notify) // listViewItem.BackColor = Color.FromArgb(Highlight.Yellow.Color); // else if (nextPerformance.Condition == ConditionState.Overdue) // listViewItem.BackColor = Color.FromArgb(Highlight.Red.Color); // } // else // { // //Если это следующее выполнение, но рабочий пакет при этом закрыт // //значит, выполнение для данной задачи в рамках данного рабочего пакета // //не было введено // //пометка этого выполнения краным цветом // listViewItem.BackColor = Color.FromArgb(Highlight.Red.Color); // //подсказка о том, что выполнение не было введено // listViewItem.ToolTipText = "Performance for this directive within this work package is not entered."; // if (nextPerformance.BlockedByPackage != null) // { // //дополнитльная подсказака, если предшествующее выполнение // //имеется в другом открытом рабочем пакете // listViewItem.ToolTipText += "\nThis performance blocked by work package:" + // nextPerformance.BlockedByPackage.Title + // "\nFirst, enter the performance of this directive as part of this work package "; // } // } // if (nextPerformance.Parent.IsDeleted) // { // //запись так же может быть удаленной // //шрифт серым цветом // listViewItem.ForeColor = Color.Gray; // if (listViewItem.ToolTipText.Trim() != "") // listViewItem.ToolTipText += "\n"; // listViewItem.ToolTipText += string.Format("This {0} is deleted",nextPerformance.Parent.SmartCoreObjectType); // } // } // else if (item is AbstractPerformanceRecord) // { // AbstractPerformanceRecord apr = (AbstractPerformanceRecord) item; // if (apr.Parent.IsDeleted) // { // //запись так же может быть удаленной // //шрифт серым цветом // listViewItem.ForeColor = Color.Gray; // if (listViewItem.ToolTipText.Trim() != "") // listViewItem.ToolTipText += "\n"; // listViewItem.ToolTipText += string.Format("This {0} is deleted", apr.Parent.SmartCoreObjectType); // } // } // else // { // if(!(item is NonRoutineJob)) // { // //Если это не следующее выполнение, не запись о выполнении, и не рутинная работа // //значит, выполнение для данной задачи расчитать нельзя // //пометка этого выполнения синим цветом // listViewItem.BackColor = Color.FromArgb(Highlight.Blue.Color); // //подсказка о том, что выполнение не возможео расчитать // listViewItem.ToolTipText = "Performance for this directive can not be calculated"; // } // if (item.IsDeleted) // { // //запись так же может быть удаленной // //шрифт серым цветом // listViewItem.ForeColor = Color.Gray; // if (listViewItem.ToolTipText.Trim() != "") // listViewItem.ToolTipText += "\n"; // listViewItem.ToolTipText += string.Format("This {0} is deleted", item.SmartCoreObjectType); // } // } //} #endregion #region protected override ListViewItem.ListViewSubItem[] GetListViewSubItems(BaseSmartCoreObject item) protected override List <CustomCell> GetListViewSubItems(BaseEntityObject item) { var temp = ListViewGroupHelper.GetGroupString(item); var subItems = new List <CustomCell>() { CreateRow(temp, temp) }; var author = GlobalObjects.CasEnvironment.GetCorrector(item); //if(item.ItemId == 41043) //{ //} if (item is NextPerformance) { NextPerformance np = (NextPerformance)item; double manHours = np.Parent is IEngineeringDirective ? ((IEngineeringDirective)np.Parent).ManHours : 0; double cost = np.Parent is IEngineeringDirective ? ((IEngineeringDirective)np.Parent).Cost : 0; subItems.Add(CreateRow(np.ATAChapter.ToString(), np.ATAChapter)); subItems.Add(CreateRow(np.Title, np.Title)); subItems.Add(CreateRow(np.Description, np.Description)); subItems.Add(CreateRow(np.KitsToString, np.Kits.Count)); subItems.Add(CreateRow(np.PerformanceSource.ToString(), np.PerformanceSource)); subItems.Add(CreateRow(np.Parent.Threshold.RepeatInterval.ToString(), np.Parent.Threshold.RepeatInterval)); subItems.Add(CreateRow(np.Remains.ToString(), np.Remains)); subItems.Add(CreateRow(np.WorkType, Tag = np.WorkType)); subItems.Add(CreateRow(np.PerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)np.PerformanceDate), np.PerformanceDate)); subItems.Add(CreateRow(manHours.ToString(), manHours)); subItems.Add(CreateRow(cost.ToString(), cost)); subItems.Add(CreateRow(author, author)); } else if (item is AbstractPerformanceRecord) { //DirectiveRecord directiveRecord = (DirectiveRecord)item; AbstractPerformanceRecord apr = (AbstractPerformanceRecord)item; Lifelength remains = Lifelength.Null; double manHours = apr.Parent is IEngineeringDirective ? ((IEngineeringDirective)apr.Parent).ManHours : 0; double cost = apr.Parent is IEngineeringDirective ? ((IEngineeringDirective)apr.Parent).Cost : 0; subItems.Add(CreateRow(apr.ATAChapter.ToString(), apr.ATAChapter)); subItems.Add(CreateRow(apr.Title, apr.Title)); subItems.Add(CreateRow(apr.Description, apr.Description)); subItems.Add(CreateRow(apr.KitsToString, apr.Kits.Count)); subItems.Add(CreateRow(apr.OnLifelength.ToString(), apr.OnLifelength)); subItems.Add(CreateRow(apr.Parent.Threshold.RepeatInterval.ToString(), apr.Parent.Threshold.RepeatInterval)); subItems.Add(CreateRow(remains.ToString(), remains)); subItems.Add(CreateRow(apr.WorkType, apr.WorkType)); subItems.Add(CreateRow(SmartCore.Auxiliary.Convert.GetDateFormat(apr.RecordDate), apr.RecordDate)); subItems.Add(CreateRow(manHours.ToString(), manHours)); subItems.Add(CreateRow(cost.ToString(), cost)); subItems.Add(CreateRow(author, author)); } else if (item is Directive) { Directive directive = (Directive)item; AtaChapter ata = directive.ATAChapter; subItems.Add(CreateRow(ata.ToString(), ata)); subItems.Add(CreateRow(directive.Title, directive.Title)); subItems.Add(CreateRow(directive.Description, directive.Description)); #region Определение текста для колонки "КИТы" subItems.Add(CreateRow(directive.Kits.Count > 0 ? directive.Kits.Count + " kits" : "", directive.Kits.Count)); #endregion #region Определение текста для колонки "Первое выполнение" var subItem = new CustomCell(); if (directive.Threshold.FirstPerformanceSinceNew != null && !directive.Threshold.FirstPerformanceSinceNew.IsNullOrZero()) { subItem.Text = "s/n: " + directive.Threshold.FirstPerformanceSinceNew; subItem.Tag = directive.Threshold.FirstPerformanceSinceNew; } if (directive.Threshold.FirstPerformanceSinceEffectiveDate != null && !directive.Threshold.FirstPerformanceSinceEffectiveDate.IsNullOrZero()) { if (subItem.Text != "") { subItem.Text += " or "; } else { subItem.Text = ""; subItem.Tag = directive.Threshold.FirstPerformanceSinceEffectiveDate; } subItem.Text += "s/e.d: " + directive.Threshold.FirstPerformanceSinceEffectiveDate; } subItems.Add(subItem); #endregion #region Определение текста для колонки "повторяющийся интервал" subItem = new CustomCell(); if (!directive.Threshold.RepeatInterval.IsNullOrZero()) { subItem.Text = directive.Threshold.RepeatInterval.ToString(); subItem.Tag = directive.Threshold.RepeatInterval; } else { subItem.Text = ""; subItem.Tag = Lifelength.Null; } subItems.Add(subItem); #endregion #region Определение текста для колонки "Остаток/Просрочено на сегодня" subItems.Add(CreateRow(directive.Remains.ToString(), directive.Remains)); #endregion #region Определение текста для колонки "Тип работ" subItems.Add(CreateRow(directive.WorkType.ToString(), directive.WorkType)); #endregion #region Определение текста для колонки "Следующее выполнение" subItems.Add(CreateRow(directive.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)directive.NextPerformanceDate), directive.NextPerformanceDate)); #endregion #region Определение текста для колонки "Человек/Часы" subItems.Add(CreateRow(directive.ManHours.ToString(), directive.ManHours)); #endregion #region Определение текста для колонки "Стоимость" subItems.Add(CreateRow(directive.Cost.ToString(), directive.Cost)); #endregion subItems.Add(CreateRow(author, author)); } else if (item is BaseComponent) { BaseComponent bd = (BaseComponent)item; AtaChapter ata = bd.ATAChapter; subItems.Add(CreateRow(ata.ToString(), ata)); subItems.Add(CreateRow(bd.PartNumber, bd.PartNumber)); subItems.Add(CreateRow(bd.Description, bd.Description)); subItems.Add(CreateRow(bd.Kits.Count > 0 ? bd.Kits.Count + " kits" : "", bd.Kits.Count)); subItems.Add(CreateRow(bd.LifeLimit.ToString(), bd.LifeLimit)); subItems.Add(CreateRow("", Lifelength.Null)); subItems.Add(CreateRow(bd.Remains.ToString(), bd.Remains)); subItems.Add(CreateRow(ComponentRecordType.Remove.ToString(), ComponentRecordType.Remove)); subItems.Add(CreateRow(bd.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)bd.NextPerformanceDate), bd.NextPerformanceDate)); subItems.Add(CreateRow(bd.ManHours.ToString(), bd.ManHours)); subItems.Add(CreateRow(bd.Cost.ToString(), bd.Cost)); subItems.Add(CreateRow(author, author)); } else if (item is Component) { Component d = (Component)item; AtaChapter ata = d.ATAChapter; subItems.Add(CreateRow(ata.ToString(), ata)); subItems.Add(CreateRow(d.PartNumber, d.PartNumber)); subItems.Add(CreateRow(d.Description, d.Description)); subItems.Add(CreateRow(d.Kits.Count > 0 ? d.Kits.Count + " kits" : "", d.Kits.Count)); subItems.Add(CreateRow(d.LifeLimit != null ? d.LifeLimit.ToString() : "", d.LifeLimit)); subItems.Add(CreateRow("", Lifelength.Null)); subItems.Add(CreateRow(d.Remains != null ? d.Remains.ToString() : "", d.Remains)); subItems.Add(CreateRow(ComponentRecordType.Remove.ToString(), ComponentRecordType.Remove)); subItems.Add(CreateRow(d.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)d.NextPerformanceDate), d.NextPerformanceDate)); subItems.Add(CreateRow(d.ManHours.ToString(), d.ManHours)); subItems.Add(CreateRow(d.Cost.ToString(), d.Cost)); subItems.Add(CreateRow(author, Tag = author)); } else if (item is ComponentDirective) { ComponentDirective dd = (ComponentDirective)item; AtaChapter ata = dd.ParentComponent.ATAChapter; subItems.Add(CreateRow(ata != null ? ata.ToString() : "", ata)); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow(dd.Remarks, dd.Remarks)); subItems.Add(CreateRow(dd.Kits.Count > 0 ? dd.Kits.Count + " kits" : "", dd.Kits.Count)); #region Определение текста для колонки "Первое выполнение" var subItem = new CustomCell(); if (dd.Threshold.FirstPerformanceSinceNew != null && !dd.Threshold.FirstPerformanceSinceNew.IsNullOrZero()) { subItem.Text = "s/n: " + dd.Threshold.FirstPerformanceSinceNew; subItem.Tag = dd.Threshold.FirstPerformanceSinceNew; } subItems.Add(subItem); #endregion #region Определение текста для колонки "повторяющийся интервал" subItem = new CustomCell(); if (!dd.Threshold.RepeatInterval.IsNullOrZero()) { subItem.Text = dd.Threshold.RepeatInterval.ToString(); subItem.Tag = dd.Threshold.RepeatInterval; } else { subItem.Text = ""; subItem.Tag = Lifelength.Null; } subItems.Add(subItem); #endregion subItems.Add(CreateRow(dd.Remains.ToString(), dd.Remains)); subItems.Add(CreateRow(dd.DirectiveType.ToString(), dd.DirectiveType)); subItems.Add(CreateRow(dd.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)dd.NextPerformanceDate), dd.NextPerformanceDate)); subItems.Add(CreateRow(dd.ManHours.ToString(), dd.ManHours)); subItems.Add(CreateRow(dd.Cost.ToString(), dd.Cost)); subItems.Add(CreateRow(author, author)); } else if (item is MaintenanceCheck) { MaintenanceCheck mc = (MaintenanceCheck)item; subItems.Add(CreateRow("", null)); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow(mc.Name + (mc.Schedule ? " Shedule" : " Unshedule"), mc.Name)); subItems.Add(CreateRow(mc.Kits.Count > 0 ? mc.Kits.Count + " kits" : "", mc.Kits.Count)); subItems.Add(CreateRow(mc.Interval.ToString(), mc.Interval)); subItems.Add(CreateRow("", Lifelength.Null)); subItems.Add(CreateRow(mc.Remains.ToString(), mc.Remains)); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow(mc.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)mc.NextPerformanceDate), mc.NextPerformanceDate)); subItems.Add(CreateRow(mc.ManHours.ToString(), mc.ManHours)); subItems.Add(CreateRow(mc.Cost.ToString(), mc.Cost)); subItems.Add(CreateRow(author, author)); } else if (item is MaintenanceDirective) { MaintenanceDirective md = (MaintenanceDirective)item; AtaChapter ata = md.ATAChapter; subItems.Add(CreateRow(ata != null ? ata.ToString() : "", ata)); subItems.Add(CreateRow(md.ToString(), md.ToString())); subItems.Add(CreateRow(md.Description, md.Description)); subItems.Add(CreateRow(md.Kits.Count > 0 ? md.Kits.Count + " kits" : "", md.Kits.Count)); #region Определение текста для колонки "Первое выполнение" var subItem = new CustomCell(); if (md.Threshold.FirstPerformanceSinceNew != null && !md.Threshold.FirstPerformanceSinceNew.IsNullOrZero()) { subItem.Text = "s/n: " + md.Threshold.FirstPerformanceSinceNew; subItem.Tag = md.Threshold.FirstPerformanceSinceNew; } if (md.Threshold.FirstPerformanceSinceEffectiveDate != null && !md.Threshold.FirstPerformanceSinceEffectiveDate.IsNullOrZero()) { if (subItem.Text != "") { subItem.Text += " or "; } else { subItem.Text = ""; subItem.Tag = md.Threshold.FirstPerformanceSinceEffectiveDate; } subItem.Text += "s/e.d: " + md.Threshold.FirstPerformanceSinceEffectiveDate; } subItems.Add(subItem); #endregion #region Определение текста для колонки "повторяющийся интервал" subItem = new CustomCell(); if (!md.Threshold.RepeatInterval.IsNullOrZero()) { subItem.Text = md.Threshold.RepeatInterval.ToString(); subItem.Tag = md.Threshold.RepeatInterval; } else { subItem.Text = ""; subItem.Tag = Lifelength.Null; } subItems.Add(subItem); #endregion subItems.Add(CreateRow(md.Remains.ToString(), md.Remains)); subItems.Add(CreateRow(md.WorkType.ToString(), md.WorkType)); subItems.Add(CreateRow(md.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)md.NextPerformanceDate), md.NextPerformanceDate)); subItems.Add(CreateRow(md.ManHours.ToString(), md.ManHours)); subItems.Add(CreateRow(md.Cost.ToString(), md.Cost)); subItems.Add(CreateRow(author, author)); } else if (item is Procedure) { Procedure md = (Procedure)item; subItems.Add(CreateRow("", "")); subItems.Add(CreateRow(md.ToString(), md.ToString())); subItems.Add(CreateRow(md.Description, md.Description)); subItems.Add(CreateRow(md.Kits.Count > 0 ? md.Kits.Count + " kits" : "", md.Kits.Count)); #region Определение текста для колонки "Первое выполнение" var subItem = new CustomCell(); if (md.Threshold.FirstPerformanceSinceNew != null && !md.Threshold.FirstPerformanceSinceNew.IsNullOrZero()) { subItem.Text = "s/n: " + md.Threshold.FirstPerformanceSinceNew; subItem.Tag = md.Threshold.FirstPerformanceSinceNew; } if (md.Threshold.FirstPerformanceSinceEffectiveDate != null && !md.Threshold.FirstPerformanceSinceEffectiveDate.IsNullOrZero()) { if (subItem.Text != "") { subItem.Text += " or "; } else { subItem.Text = ""; subItem.Tag = md.Threshold.FirstPerformanceSinceEffectiveDate; } subItem.Text += "s/e.d: " + md.Threshold.FirstPerformanceSinceEffectiveDate; } subItems.Add(subItem); #endregion #region Определение текста для колонки "повторяющийся интервал" subItem = new CustomCell(); if (!md.Threshold.RepeatInterval.IsNullOrZero()) { subItem.Text = md.Threshold.RepeatInterval.ToString(); subItem.Tag = md.Threshold.RepeatInterval; } else { subItem.Text = ""; subItem.Tag = Lifelength.Null; } subItems.Add(subItem); #endregion subItems.Add(CreateRow(md.Remains.ToString(), md.Remains)); subItems.Add(CreateRow(md.ProcedureType.ToString(), md.ProcedureType)); subItems.Add(CreateRow(md.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)md.NextPerformanceDate), md.NextPerformanceDate)); subItems.Add(CreateRow(md.ManHours.ToString(), md.ManHours)); subItems.Add(CreateRow(md.Cost.ToString(), md.Cost)); subItems.Add(CreateRow(author, author)); } else if (item is NonRoutineJob) { NonRoutineJob job = (NonRoutineJob)item; AtaChapter ata = job.ATAChapter; subItems.Add(CreateRow(ata != null ? ata.ToString() : "", ata)); subItems.Add(CreateRow(job.Title, job.Title)); subItems.Add(CreateRow(job.Description, job.Description)); subItems.Add(CreateRow(job.Kits.Count > 0 ? job.Kits.Count + " kits" : "", job.Kits.Count)); subItems.Add(CreateRow("", Lifelength.Null)); subItems.Add(CreateRow("", Lifelength.Null)); subItems.Add(CreateRow("", Lifelength.Null)); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", DateTimeExtend.GetCASMinDateTime())); subItems.Add(CreateRow(job.ManHours.ToString(), job.ManHours)); subItems.Add(CreateRow(job.Cost.ToString(), job.Cost)); subItems.Add(CreateRow(author, author)); } else { throw new ArgumentOutOfRangeException($"1135: Takes an argument has no known type {item.GetType()}"); } return(subItems); }
private void HeaderControlButtonPrintDisplayerRequested(object sender, Interfaces.ReferenceEventArgs e) { if (sender == _itemPrintReportGeneralData) { AircraftGeneralDataReportBuilder builder = new AircraftGeneralDataReportBuilder(); string caption = CurrentAircraft.RegistrationNumber + "." + "General data report"; builder.ReportedAircraft = CurrentAircraft; builder.LifelengthAircraftSinceNew = GlobalObjects.CasEnvironment.Calculator.GetCurrentFlightLifelength(CurrentAircraft); e.DisplayerText = caption; e.TypeOfReflection = ReflectionTypes.DisplayInNew; e.RequestedEntity = new ReportScreen(builder); GlobalObjects.AuditRepository.WriteReportAsync(GlobalObjects.CasEnvironment.IdentityUser, "AircraftSummaryScreen (Aircraft General Data)"); } else if (sender == _itemPrintReportTechnicalCondition) { var maintenanceChecks = GlobalObjects.CasEnvironment.NewLoader.GetObjectListAll <MaintenanceCheckDTO, MaintenanceCheck> (new List <Filter> { new Filter("ParentAircraft", CurrentAircraft.ItemId), new Filter("Schedule", true) }, true); var workPackages = GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Closed, maintenanceChecks.Select(m => (IDirective)m).ToList()); MaintenanceCheck minCCheck = maintenanceChecks.Where(mc => mc.CheckType.ShortName == "C" && mc.Schedule && mc.Grouping && mc.Resource == LifelengthSubResource.Hours) .OrderBy(mc => mc.Interval.GetSubresource(LifelengthSubResource.Hours)) .FirstOrDefault(); MaintenanceCheckRecord lastCCheckRecord = maintenanceChecks.Where(mc => mc.CheckType.ShortName == "C" && mc.Schedule && mc.Grouping && mc.Resource == LifelengthSubResource.Hours) .SelectMany(mc => mc.PerformanceRecords) .Where(pr => pr.RecordDate.Date <= DateTime.Now) .OrderByDescending(pr => pr.RecordDate) .FirstOrDefault(); MaintenanceCheckRecord lastACheckRecord = maintenanceChecks.Where(mc => mc.CheckType.ShortName == "A" && mc.Schedule && mc.Grouping && mc.Resource == LifelengthSubResource.Hours) .SelectMany(mc => mc.PerformanceRecords) .Where(pr => pr.RecordDate.Date <= DateTime.Now) .OrderByDescending(pr => pr.RecordDate) .FirstOrDefault(); if (lastACheckRecord.NumGroup == lastCCheckRecord.NumGroup) { lastACheckRecord = null; } List <MaintenanceCheckRecord> dCheckRecords = maintenanceChecks.Where(mc => mc.CheckType.ShortName == "D") .SelectMany(mc => mc.PerformanceRecords) .ToList(); List <MaintenanceCheckRecordGroup> maintenanceCheckRecordGroups = new List <MaintenanceCheckRecordGroup>(); foreach (MaintenanceCheckRecord record in dCheckRecords) { //Поиск коллекции групп, в которую входят группы с нужными критериями //по плану, группировка и основному ресурсу if (record.ParentCheck.Grouping) { MaintenanceCheckRecordGroup recordGroup = maintenanceCheckRecordGroups .FirstOrDefault(g => g.Schedule == record.ParentCheck.Schedule && g.Grouping == record.ParentCheck.Grouping && g.Resource == record.ParentCheck.Resource && g.GroupComplianceNum == record.NumGroup); if (recordGroup != null) { //Коллекция найдена //Поиск в ней группы чеков с нужным типом recordGroup.Records.Add(record); } else { //Коллекции с нужными критериями нет //Созадние и добавление recordGroup = new MaintenanceCheckRecordGroup(record.ParentCheck.Schedule, record.ParentCheck.Grouping, record.ParentCheck.Resource, record.NumGroup); recordGroup.Records.Add(record); maintenanceCheckRecordGroups.Add(recordGroup); } } else { MaintenanceCheckRecordGroup recordGroup = new MaintenanceCheckRecordGroup(record.ParentCheck.Schedule, record.ParentCheck.Grouping, record.ParentCheck.Resource); recordGroup.Records.Add(record); maintenanceCheckRecordGroups.Add(recordGroup); } } AircraftTechnicalConditionReportBuilder reportBuilder = new AircraftTechnicalConditionReportBuilder(CurrentAircraft, minCCheck, GlobalObjects.ComponentCore.GetAicraftBaseComponents(CurrentAircraft.ItemId), lastACheckRecord, lastCCheckRecord, workPackages, maintenanceCheckRecordGroups.Count); e.TypeOfReflection = ReflectionTypes.DisplayInNew; e.DisplayerText = CurrentAircraft.RegistrationNumber + " Operation Time Report"; e.RequestedEntity = new ReportScreen(reportBuilder); GlobalObjects.AuditRepository.WriteReportAsync(GlobalObjects.CasEnvironment.IdentityUser, "AircraftSummaryScreen (Technical Condition)"); } else { e.Cancel = true; } }
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); }
/// <summary> /// ??????????? ??????? ? ??????? ?????? /// </summary> /// <param name="grouping">?????????? ?????????</param> /// <param name="destinationDataSet">???????, ? ??????? ??????????? ???????</param> private void AddItemDataset(MaintenanceCheckRecordGroup grouping, OperationTimeDataSet destinationDataSet) { if (grouping == null) { return; } string checkName = ""; string performanceSourceHours = ""; string performanceSourceCycles = ""; string station = ""; string checkStartEndString = ""; if (grouping.Records.Count > 0) { grouping.Sort(); MaintenanceCheckRecord mcr = grouping.LastOrDefault(); MaintenanceCheck mc = grouping.GetMaxIntervalCheck(); if (mcr != null) { checkName = _currentAircraft != null && _currentAircraft.MaintenanceProgramCheckNaming ? (!string.IsNullOrEmpty(grouping.First().ComplianceCheckName) ? mcr.ComplianceCheckName : mc.Name) : mc.Name; performanceSourceHours = mcr.OnLifelength.ToHoursMinutesFormat(""); performanceSourceCycles = mcr.OnLifelength.Cycles != null?mcr.OnLifelength.Cycles.ToString() : ""; if (mcr.DirectivePackage == null) { mcr.DirectivePackage = _workPackages != null ? _workPackages.FirstOrDefault(wp => wp.ItemId == mcr.DirectivePackageId) : null; } if (mcr.DirectivePackage != null) { if (mcr.DirectivePackage.Status == WorkPackageStatus.Published) { checkStartEndString = mcr.DirectivePackage.PublishingDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()); checkStartEndString += " - Present day"; } if (mcr.DirectivePackage.Status == WorkPackageStatus.Closed) { checkStartEndString = mcr.DirectivePackage.PublishingDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()); checkStartEndString += " - " + mcr.DirectivePackage.ClosingDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()); } station = mcr.DirectivePackage.Station; } else { checkStartEndString = mcr.RecordDate.ToString(new GlobalTermsProvider()["DateFormat"].ToString()); station = "--"; } } } var sinceLastCCheckHours = "--"; var sinceLastCCheckCycles = "--"; //TODO:???????????? ?????? //if(_lastC?heckRecord != null && // _aircraftBaseDetails != null && // _aircraftBaseDetails.FirstOrDefault(bd => bd.BaseComponentType == BaseComponentType.Frame) != null) //{ // BaseComponent frame = _aircraftBaseDetails.First(bd => bd.BaseComponentType == BaseComponentType.Frame); // Lifelength current = GlobalObjects.CasEnvironment.Calculator.GetFlightLifelengthOnEndOfDay(frame, grouping.LastOrDefault() != null ? grouping.Last().RecordDate : DateTime.Today); // Lifelength sinceLast = current - _lastC?heckRecord.OnLifelength; // sinceLastCCheckHours = sinceLast.TotalMinutes != null ? sinceLast.ToHoursMinutesFormat("") : ""; // sinceLastCCheckCycles = sinceLast.Cycles != null ? sinceLast.Cycles.ToString() : ""; //} destinationDataSet.MaintenanceTable.AddMaintenanceTableRow(checkName, checkStartEndString, station, performanceSourceHours, performanceSourceCycles, sinceLastCCheckHours, sinceLastCCheckCycles); }
protected override ListViewItem.ListViewSubItem[] GetListViewSubItems(NextPerformance item) { List <ListViewItem.ListViewSubItem> subItems = new List <ListViewItem.ListViewSubItem>(); Color tcnColor = itemsListView.ForeColor; int index; if (item is MaintenanceNextPerformance) { MaintenanceCheck mc = item.Parent as MaintenanceCheck; if (mc != null && mc.GetPergormanceGroupWhereCheckIsSenior().FirstOrDefault() != null) { index = mc.GetPergormanceGroupWhereCheckIsSenior().First() == item ? 0 : item.Parent.NextPerformances.IndexOf(item); } else { index = item.Parent.NextPerformances.IndexOf(item); } } else { index = item.Parent.NextPerformances.IndexOf(item); } string timesString = index == 0 ? item.Parent.TimesToString : "#" + (index + 1); int times = index == 0 ? item.Parent.Times : index + 1; double manHours = item.Parent is IEngineeringDirective ? ((IEngineeringDirective)item.Parent).ManHours : 0; double cost = item.Parent is IEngineeringDirective ? ((IEngineeringDirective)item.Parent).Cost : 0; var author = GlobalObjects.CasEnvironment.GetCorrector(item); var title = item.Title; if (item.Parent is Directive) { var directive = item.Parent as Directive; if (directive.DirectiveType == DirectiveType.SB) { title = directive.ServiceBulletinNo; } else if (directive.DirectiveType == DirectiveType.EngineeringOrders) { title = directive.EngineeringOrders; } } if (item.Parent is MaintenanceDirective) { var d = item.Parent as MaintenanceDirective; if (d.TaskCardNumberFile == null) { tcnColor = Color.MediumVioletRed; } } subItems.Add(new ListViewItem.ListViewSubItem { Text = item.ATAChapter?.ToString(), Tag = item.ATAChapter }); subItems.Add(new ListViewItem.ListViewSubItem { ForeColor = tcnColor, Text = title, Tag = title }); subItems.Add(new ListViewItem.ListViewSubItem { Text = item.Description, Tag = item.Description }); subItems.Add(new ListViewItem.ListViewSubItem { Text = timesString, Tag = times }); subItems.Add(new ListViewItem.ListViewSubItem { Text = item.WorkType, Tag = item.WorkType }); subItems.Add(new ListViewItem.ListViewSubItem { Text = item.MaintenanceCheck != null ? item.MaintenanceCheck.ToString() : "", Tag = item.MaintenanceCheck }); subItems.Add(new ListViewItem.ListViewSubItem { Text = item.PerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)item.PerformanceDate), Tag = item.PerformanceDate }); subItems.Add(new ListViewItem.ListViewSubItem { Text = item.PerformanceSource?.ToString(), Tag = item.PerformanceSource }); if (item.Parent is MaintenanceDirective) { var d = item.Parent as MaintenanceDirective; subItems.Add(new ListViewItem.ListViewSubItem { Text = d.PhaseRepeat?.ToString(), Tag = d.PhaseRepeat }); } else { subItems.Add(new ListViewItem.ListViewSubItem { Text = item.Parent.Threshold.RepeatInterval.ToString(), Tag = item.Parent.Threshold.RepeatInterval }); } subItems.Add(new ListViewItem.ListViewSubItem { Text = item.Remains.ToString(), Tag = item.Remains }); subItems.Add(new ListViewItem.ListViewSubItem { Text = item.Parent.LastPerformance?.ToString(), Tag = item.Parent.LastPerformance }); subItems.Add(new ListViewItem.ListViewSubItem { Text = item.KitsToString, Tag = item.Kits?.Count }); subItems.Add(new ListViewItem.ListViewSubItem { Text = manHours.ToString(), Tag = manHours }); subItems.Add(new ListViewItem.ListViewSubItem { Text = cost.ToString(), Tag = cost }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = "" }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = "" }); subItems.Add(new ListViewItem.ListViewSubItem { Text = item.BeforeForecastResourceRemain != null ? item.BeforeForecastResourceRemain?.ToString() : "", Tag = item.BeforeForecastResourceRemain }); subItems.Add(new ListViewItem.ListViewSubItem { Text = item.Parent?.ForecastLifelength?.ToString(), Tag = item.Parent?.ForecastLifelength }); subItems.Add(new ListViewItem.ListViewSubItem { Text = item.Parent.AfterForecastResourceRemain != null ? item.Parent.AfterForecastResourceRemain?.ToString() : "", Tag = item.Parent.AfterForecastResourceRemain }); subItems.Add(new ListViewItem.ListViewSubItem { Text = author, Tag = author }); return(subItems.ToArray()); }
protected override ListViewItem.ListViewSubItem[] GetListViewSubItems(BaseEntityObject item) { List <ListViewItem.ListViewSubItem> subItems = new List <ListViewItem.ListViewSubItem>(); //if(item.ItemId == 41043) //{ //} if (item is NextPerformance) { NextPerformance np = (NextPerformance)item; double manHours = np.Parent is IEngineeringDirective ? ((IEngineeringDirective)np.Parent).ManHours : 0; double cost = np.Parent is IEngineeringDirective ? ((IEngineeringDirective)np.Parent).Cost : 0; subItems.Add(new ListViewItem.ListViewSubItem { Text = np.ATAChapter.ToString(), Tag = np.ATAChapter }); subItems.Add(new ListViewItem.ListViewSubItem { Text = np.Title, Tag = np.Title }); subItems.Add(new ListViewItem.ListViewSubItem { Text = np.Description, Tag = np.Description }); subItems.Add(new ListViewItem.ListViewSubItem { Text = np.Type, Tag = np.Type }); subItems.Add(new ListViewItem.ListViewSubItem { Text = np.KitsToString, Tag = np.Kits.Count }); subItems.Add(new ListViewItem.ListViewSubItem { Text = np.PerformanceSource.ToString(), Tag = np.PerformanceSource }); subItems.Add(new ListViewItem.ListViewSubItem { Text = np.Parent.Threshold.RepeatInterval.ToString(), Tag = np.Parent.Threshold.RepeatInterval }); subItems.Add(new ListViewItem.ListViewSubItem { Text = np.Remains.ToString(), Tag = np.Remains }); subItems.Add(new ListViewItem.ListViewSubItem { Text = np.WorkType, Tag = np.WorkType }); subItems.Add(new ListViewItem.ListViewSubItem { Text = np.PerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)np.PerformanceDate), Tag = np.PerformanceDate }); subItems.Add(new ListViewItem.ListViewSubItem { Text = manHours.ToString(), Tag = manHours }); subItems.Add(new ListViewItem.ListViewSubItem { Text = cost.ToString(), Tag = cost }); } else if (item is AbstractPerformanceRecord) { AbstractPerformanceRecord apr = (AbstractPerformanceRecord)item; Lifelength remains = Lifelength.Null; double manHours = apr.Parent is IEngineeringDirective ? ((IEngineeringDirective)apr.Parent).ManHours : 0; double cost = apr.Parent is IEngineeringDirective ? ((IEngineeringDirective)apr.Parent).Cost : 0; subItems.Add(new ListViewItem.ListViewSubItem { Text = apr.ATAChapter.ToString(), Tag = apr.ATAChapter }); subItems.Add(new ListViewItem.ListViewSubItem { Text = apr.Title, Tag = apr.Title }); subItems.Add(new ListViewItem.ListViewSubItem { Text = apr.Description, Tag = apr.Description }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = "" }); subItems.Add(new ListViewItem.ListViewSubItem { Text = apr.KitsToString, Tag = apr.Kits.Count }); subItems.Add(new ListViewItem.ListViewSubItem { Text = apr.OnLifelength.ToString(), Tag = apr.OnLifelength }); subItems.Add(new ListViewItem.ListViewSubItem { Text = apr.Parent.Threshold.RepeatInterval.ToString(), Tag = apr.Parent.Threshold.RepeatInterval }); subItems.Add(new ListViewItem.ListViewSubItem { Text = remains.ToString(), Tag = remains }); subItems.Add(new ListViewItem.ListViewSubItem { Text = apr.WorkType, Tag = apr.WorkType }); subItems.Add(new ListViewItem.ListViewSubItem { Text = SmartCore.Auxiliary.Convert.GetDateFormat(apr.RecordDate), Tag = apr.RecordDate }); subItems.Add(new ListViewItem.ListViewSubItem { Text = manHours.ToString(), Tag = manHours }); subItems.Add(new ListViewItem.ListViewSubItem { Text = cost.ToString(), Tag = cost }); } else if (item is Directive) { Directive directive = (Directive)item; AtaChapter ata = directive.ATAChapter; DirectiveType pdType = directive.DirectiveType; subItems.Add(new ListViewItem.ListViewSubItem { Text = ata.ToString(), Tag = ata }); subItems.Add(new ListViewItem.ListViewSubItem { Text = directive.Title, Tag = directive.Title }); subItems.Add(new ListViewItem.ListViewSubItem { Text = directive.Description, Tag = directive.Description }); subItems.Add(new ListViewItem.ListViewSubItem { Text = pdType.ShortName, Tag = pdType.ShortName }); #region Определение текста для колонки "КИТы" subItems.Add(new ListViewItem.ListViewSubItem { Text = directive.Kits.Count > 0 ? directive.Kits.Count + " kits" : "", Tag = directive.Kits.Count }); #endregion #region Определение текста для колонки "Первое выполнение" ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem(); if (directive.Threshold.FirstPerformanceSinceNew != null && !directive.Threshold.FirstPerformanceSinceNew.IsNullOrZero()) { subItem.Text = "s/n: " + directive.Threshold.FirstPerformanceSinceNew; subItem.Tag = directive.Threshold.FirstPerformanceSinceNew; } if (directive.Threshold.FirstPerformanceSinceEffectiveDate != null && !directive.Threshold.FirstPerformanceSinceEffectiveDate.IsNullOrZero()) { if (subItem.Text != "") { subItem.Text += " or "; } else { subItem.Text = ""; subItem.Tag = directive.Threshold.FirstPerformanceSinceEffectiveDate; } subItem.Text += "s/e.d: " + directive.Threshold.FirstPerformanceSinceEffectiveDate; } subItems.Add(subItem); #endregion #region Определение текста для колонки "повторяющийся интервал" subItem = new ListViewItem.ListViewSubItem(); if (!directive.Threshold.RepeatInterval.IsNullOrZero()) { subItem.Text = directive.Threshold.RepeatInterval.ToString(); subItem.Tag = directive.Threshold.RepeatInterval; } else { subItem.Text = ""; subItem.Tag = Lifelength.Null; } subItems.Add(subItem); #endregion #region Определение текста для колонки "Остаток/Просрочено на сегодня" subItems.Add(new ListViewItem.ListViewSubItem { Text = directive.Remains.ToString(), Tag = directive.Remains }); #endregion #region Определение текста для колонки "Тип работ" subItems.Add(new ListViewItem.ListViewSubItem { Text = directive.WorkType.ToString(), Tag = directive.WorkType }); #endregion #region Определение текста для колонки "Следующее выполнение" subItems.Add(new ListViewItem.ListViewSubItem { Text = directive.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)directive.NextPerformanceDate), Tag = directive.NextPerformanceDate }); #endregion #region Определение текста для колонки "Человек/Часы" subItems.Add(new ListViewItem.ListViewSubItem { Text = directive.ManHours.ToString(), Tag = directive.ManHours }); #endregion #region Определение текста для колонки "Стоимость" subItems.Add(new ListViewItem.ListViewSubItem { Text = directive.Cost.ToString(), Tag = directive.Cost }); #endregion } else if (item is BaseComponent) { BaseComponent bd = (BaseComponent)item; AtaChapter ata = bd.ATAChapter; subItems.Add(new ListViewItem.ListViewSubItem { Text = ata.ToString(), Tag = ata }); subItems.Add(new ListViewItem.ListViewSubItem { Text = bd.PartNumber, Tag = bd.PartNumber }); subItems.Add(new ListViewItem.ListViewSubItem { Text = bd.Description, Tag = bd.Description }); subItems.Add(new ListViewItem.ListViewSubItem { Text = bd.MaintenanceControlProcess.ShortName, Tag = bd.MaintenanceControlProcess.ShortName }); subItems.Add(new ListViewItem.ListViewSubItem { Text = bd.Kits.Count > 0 ? bd.Kits.Count + " kits" : "", Tag = bd.Kits.Count }); subItems.Add(new ListViewItem.ListViewSubItem { Text = bd.LifeLimit.ToString(), Tag = bd.LifeLimit }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = Lifelength.Null }); subItems.Add(new ListViewItem.ListViewSubItem { Text = bd.Remains.ToString(), Tag = bd.Remains }); subItems.Add(new ListViewItem.ListViewSubItem { Text = ComponentRecordType.Remove.ToString(), Tag = ComponentRecordType.Remove }); subItems.Add(new ListViewItem.ListViewSubItem { Text = bd.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)bd.NextPerformanceDate), Tag = bd.NextPerformanceDate }); subItems.Add(new ListViewItem.ListViewSubItem { Text = bd.ManHours.ToString(), Tag = bd.ManHours }); subItems.Add(new ListViewItem.ListViewSubItem { Text = bd.Cost.ToString(), Tag = bd.Cost }); } else if (item is Component) { Component d = (Component)item; AtaChapter ata = d.ATAChapter; subItems.Add(new ListViewItem.ListViewSubItem { Text = ata.ToString(), Tag = ata }); subItems.Add(new ListViewItem.ListViewSubItem { Text = d.PartNumber, Tag = d.PartNumber }); subItems.Add(new ListViewItem.ListViewSubItem { Text = d.Description, Tag = d.Description }); subItems.Add(new ListViewItem.ListViewSubItem { Text = d.MaintenanceControlProcess.ShortName, Tag = d.MaintenanceControlProcess.ShortName }); subItems.Add(new ListViewItem.ListViewSubItem { Text = d.Kits.Count > 0 ? d.Kits.Count + " kits" : "", Tag = d.Kits.Count }); subItems.Add(new ListViewItem.ListViewSubItem { Text = d.LifeLimit != null ? d.LifeLimit.ToString() : "", Tag = d.LifeLimit }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = Lifelength.Null }); subItems.Add(new ListViewItem.ListViewSubItem { Text = d.Remains != null ? d.Remains.ToString() : "", Tag = d.Remains }); subItems.Add(new ListViewItem.ListViewSubItem { Text = ComponentRecordType.Remove.ToString(), Tag = ComponentRecordType.Remove }); subItems.Add(new ListViewItem.ListViewSubItem { Text = d.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)d.NextPerformanceDate), Tag = d.NextPerformanceDate }); subItems.Add(new ListViewItem.ListViewSubItem { Text = d.ManHours.ToString(), Tag = d.ManHours }); subItems.Add(new ListViewItem.ListViewSubItem { Text = d.Cost.ToString(), Tag = d.Cost }); } else if (item is ComponentDirective) { ComponentDirective dd = (ComponentDirective)item; AtaChapter ata = dd.ParentComponent.ATAChapter; subItems.Add(new ListViewItem.ListViewSubItem { Text = ata != null ? ata.ToString() : "", Tag = ata }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = "" }); subItems.Add(new ListViewItem.ListViewSubItem { Text = dd.Remarks, Tag = dd.Remarks }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = "" }); subItems.Add(new ListViewItem.ListViewSubItem { Text = dd.Kits.Count > 0 ? dd.Kits.Count + " kits" : "", Tag = dd.Kits.Count }); #region Определение текста для колонки "Первое выполнение" ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem(); if (dd.Threshold.FirstPerformanceSinceNew != null && !dd.Threshold.FirstPerformanceSinceNew.IsNullOrZero()) { subItem.Text = "s/n: " + dd.Threshold.FirstPerformanceSinceNew; subItem.Tag = dd.Threshold.FirstPerformanceSinceNew; } subItems.Add(subItem); #endregion #region Определение текста для колонки "повторяющийся интервал" subItem = new ListViewItem.ListViewSubItem(); if (!dd.Threshold.RepeatInterval.IsNullOrZero()) { subItem.Text = dd.Threshold.RepeatInterval.ToString(); subItem.Tag = dd.Threshold.RepeatInterval; } else { subItem.Text = ""; subItem.Tag = Lifelength.Null; } subItems.Add(subItem); #endregion subItems.Add(new ListViewItem.ListViewSubItem { Text = dd.Remains.ToString(), Tag = dd.Remains }); subItems.Add(new ListViewItem.ListViewSubItem { Text = dd.DirectiveType.ToString(), Tag = dd.DirectiveType }); subItems.Add(new ListViewItem.ListViewSubItem { Text = dd.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)dd.NextPerformanceDate), Tag = dd.NextPerformanceDate }); subItems.Add(new ListViewItem.ListViewSubItem { Text = dd.ManHours.ToString(), Tag = dd.ManHours }); subItems.Add(new ListViewItem.ListViewSubItem { Text = dd.Cost.ToString(), Tag = dd.Cost }); } else if (item is MaintenanceCheck) { MaintenanceCheck mc = (MaintenanceCheck)item; subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = null }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = "" }); subItems.Add(new ListViewItem.ListViewSubItem { Text = mc.Name + (mc.Schedule ? " Shedule" : " Unshedule"), Tag = mc.Name }); subItems.Add(new ListViewItem.ListViewSubItem { Text = mc.Name, Tag = mc.Name }); subItems.Add(new ListViewItem.ListViewSubItem { Text = mc.Kits.Count > 0 ? mc.Kits.Count + " kits" : "", Tag = mc.Kits.Count }); subItems.Add(new ListViewItem.ListViewSubItem { Text = mc.Interval.ToString(), Tag = mc.Interval }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = Lifelength.Null }); subItems.Add(new ListViewItem.ListViewSubItem { Text = mc.Remains.ToString(), Tag = mc.Remains }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = "" }); subItems.Add(new ListViewItem.ListViewSubItem { Text = mc.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)mc.NextPerformanceDate), Tag = mc.NextPerformanceDate }); subItems.Add(new ListViewItem.ListViewSubItem { Text = mc.ManHours.ToString(), Tag = mc.ManHours }); subItems.Add(new ListViewItem.ListViewSubItem { Text = mc.Cost.ToString(), Tag = mc.Cost }); } else if (item is MaintenanceDirective) { MaintenanceDirective md = (MaintenanceDirective)item; AtaChapter ata = md.ATAChapter; string type = md.MaintenanceCheck != null ? md.MaintenanceCheck.Name : "MPD"; subItems.Add(new ListViewItem.ListViewSubItem { Text = ata != null ? ata.ToString() : "", Tag = ata }); subItems.Add(new ListViewItem.ListViewSubItem { Text = md.TaskNumberCheck, Tag = md.TaskNumberCheck }); subItems.Add(new ListViewItem.ListViewSubItem { Text = md.Description, Tag = md.Description, }); subItems.Add(new ListViewItem.ListViewSubItem { Text = type, Tag = type, }); subItems.Add(new ListViewItem.ListViewSubItem { Text = md.Kits.Count > 0 ? md.Kits.Count + " kits" : "", Tag = md.Kits.Count }); #region Определение текста для колонки "Первое выполнение" ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem(); if (md.Threshold.FirstPerformanceSinceNew != null && !md.Threshold.FirstPerformanceSinceNew.IsNullOrZero()) { subItem.Text = "s/n: " + md.Threshold.FirstPerformanceSinceNew; subItem.Tag = md.Threshold.FirstPerformanceSinceNew; } if (md.Threshold.FirstPerformanceSinceEffectiveDate != null && !md.Threshold.FirstPerformanceSinceEffectiveDate.IsNullOrZero()) { if (subItem.Text != "") { subItem.Text += " or "; } else { subItem.Text = ""; subItem.Tag = md.Threshold.FirstPerformanceSinceEffectiveDate; } subItem.Text += "s/e.d: " + md.Threshold.FirstPerformanceSinceEffectiveDate; } subItems.Add(subItem); #endregion #region Определение текста для колонки "повторяющийся интервал" subItem = new ListViewItem.ListViewSubItem(); if (!md.Threshold.RepeatInterval.IsNullOrZero()) { subItem.Text = md.Threshold.RepeatInterval.ToString(); subItem.Tag = md.Threshold.RepeatInterval; } else { subItem.Text = ""; subItem.Tag = Lifelength.Null; } subItems.Add(subItem); #endregion subItems.Add(new ListViewItem.ListViewSubItem { Text = md.Remains.ToString(), Tag = md.Remains }); subItems.Add(new ListViewItem.ListViewSubItem { Text = md.MaintenanceCheck?.ToString(), Tag = md.MaintenanceCheck }); subItems.Add(new ListViewItem.ListViewSubItem { Text = md.WorkType.ToString(), Tag = md.WorkType }); subItems.Add(new ListViewItem.ListViewSubItem { Text = md.NextPerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)md.NextPerformanceDate), Tag = md.NextPerformanceDate }); subItems.Add(new ListViewItem.ListViewSubItem { Text = md.ManHours.ToString(), Tag = md.ManHours }); subItems.Add(new ListViewItem.ListViewSubItem { Text = md.Cost.ToString(), Tag = md.Cost }); } else if (item is NonRoutineJob) { NonRoutineJob job = (NonRoutineJob)item; AtaChapter ata = job.ATAChapter; subItems.Add(new ListViewItem.ListViewSubItem { Text = ata != null ? ata.ToString() : "", Tag = ata }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = "" }); subItems.Add(new ListViewItem.ListViewSubItem { Text = job.Description, Tag = job.Description }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "NRC", Tag = "NRC" }); subItems.Add(new ListViewItem.ListViewSubItem { Text = job.Kits.Count > 0 ? job.Kits.Count + " kits" : "", Tag = job.Kits.Count }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = Lifelength.Null }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = Lifelength.Null }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = Lifelength.Null }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = "" }); subItems.Add(new ListViewItem.ListViewSubItem { Text = "", Tag = DateTimeExtend.GetCASMinDateTime() }); subItems.Add(new ListViewItem.ListViewSubItem { Text = job.ManHours.ToString(), Tag = job.ManHours }); subItems.Add(new ListViewItem.ListViewSubItem { Text = job.Cost.ToString(), Tag = job.Cost }); } else { throw new ArgumentOutOfRangeException($"1135: Takes an argument has no known type {item.GetType()}"); } return(subItems.ToArray()); }
/// <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()); }
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} {wp.Number}"); 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 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); } } }
/// <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); } }
private void AddToWorkPackageItemClick(object sender, EventArgs e) { if (listViewCompliance.SelectedItems.Count <= 0 || _currentAircraft == null) { return; } WorkPackage wp = (WorkPackage)((ToolStripMenuItem)sender).Tag; if (MessageBox.Show("Add item to Work Package: " + wp.Title + "?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { List <NextPerformance> nextPerformances = listViewCompliance.SelectedItems .Cast <ListViewItem>() .Where(lvi => lvi.Tag is NextPerformance) .Select(lvi => lvi.Tag as NextPerformance) .ToList(); List <NextPerformance> bindedDirectivesPerformances = new List <NextPerformance>(); foreach (NextPerformance wpItem in nextPerformances) { 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 mc.BindMpds.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 (nextPerformances.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0) { bindedDirectivesPerformances.Add(performance); } } } } else if (mnp.Parent is MaintenanceCheck) { MaintenanceCheck mc = mnp.Parent as MaintenanceCheck; foreach (MaintenanceDirective mpd in mc.BindMpds.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 (nextPerformances.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 mc.BindMpds.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 (nextPerformances.Count(wpi => wpi.Parent != null && wpi.Parent == mpd) == 0) { bindedDirectivesPerformances.Add(performance); } } } } nextPerformances.AddRange(bindedDirectivesPerformances); if (nextPerformances.Count == 0) { MessageBox.Show("Not select next compliance to adding", (string)new GlobalTermsProvider()["SystemName"], MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } try { string message; if (!GlobalObjects.WorkPackageCore.AddToWorkPakage(nextPerformances, wp.ItemId, _currentAircraft, out message)) { MessageBox.Show(message, (string)new GlobalTermsProvider()["SystemName"], MessageBoxButtons.OK, MessageBoxIcon.Error); return; } foreach (NextPerformance np in nextPerformances) { np.BlockedByPackage = wp; UpdateItemColor(np); } 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 + "." + wp.Title; refArgs.RequestedEntity = new WorkPackageScreen(wp); InvokeDisplayerRequested(refArgs); } } catch (Exception ex) { Program.Provider.Logger.Log("error while create Work Package", ex); } } }
/// <summary> /// Возвращает группу следующих чеков заданного типа, который должны быть выполнены до назначенного ресурса lifeLenghtSourcе /// если вернет null то значит входные данные неверны /// </summary> /// <param name="checkInput"></param> /// <param name="lastComplianceCheck"></param> /// <param name="lifeLenghtSource"></param> /// <returns></returns> public static MaintenanceCheckGroupByType GetNextCheckBySourceDifference(this IEnumerable <MaintenanceCheck> checkInput, MaintenanceCheck lastComplianceCheck, int?lifeLenghtSource) { if (lifeLenghtSource == null || lifeLenghtSource.Value == 0 || lastComplianceCheck == null) { return(null); } //сортировка коллекции по типу Shedule; MaintenanceCheckCollection sourceCollection = new MaintenanceCheckCollection(checkInput.Where(c => c.Schedule == lastComplianceCheck.Schedule).ToList()); //поиск минимального шага int?minStep = lastComplianceCheck.Interval.Days; if (minStep == null) { return(null); } List <MaintenanceCheckGroupByType> checksGroups = new List <MaintenanceCheckGroupByType>(sourceCollection.GroupingCheckByType(minStep, lastComplianceCheck.Schedule)); if (checksGroups.Count == 0) { return(null); } return(GetCheckPacketBySource(checksGroups, lifeLenghtSource, minStep, lastComplianceCheck)); }
protected override List <CustomCell> GetListViewSubItems(NextPerformance item) { var subItems = new List <CustomCell>(); Color tcnColor = radGridView1.ForeColor; int index; if (item is MaintenanceNextPerformance) { MaintenanceCheck mc = item.Parent as MaintenanceCheck; if (mc != null && mc.GetPergormanceGroupWhereCheckIsSenior().FirstOrDefault() != null) { index = mc.GetPergormanceGroupWhereCheckIsSenior().First() == item ? 0 : item.Parent.NextPerformances.IndexOf(item); } else { index = item.Parent.NextPerformances.IndexOf(item); } } else { index = item.Parent.NextPerformances.IndexOf(item); } string timesString = index == 0 ? item.Parent.TimesToString : "#" + (index + 1); int times = index == 0 ? item.Parent.Times : index + 1; double manHours = item.Parent is IEngineeringDirective ? ((IEngineeringDirective)item.Parent).ManHours : 0; double cost = item.Parent is IEngineeringDirective ? ((IEngineeringDirective)item.Parent).Cost : 0; var author = GlobalObjects.CasEnvironment.GetCorrector(item); var title = item.Title; var card = ""; var description = item.Description; if (item.Parent is Directive directive) { if (directive.DirectiveType == DirectiveType.SB) { title = directive.ServiceBulletinNo; } else if (directive.DirectiveType == DirectiveType.EngineeringOrders) { title = directive.EngineeringOrders; } card = directive.EngineeringOrders; } else if (item.Parent is MaintenanceDirective d) { if (!d.HasTaskCardFile) { tcnColor = Color.MediumVioletRed; } card = d.TaskCardNumber; } else if (item.Parent is ComponentDirective c) { description = item.Title; title = c.MaintenanceDirective?.TaskNumberCheck ?? ""; card = c.MaintenanceDirective?.TaskCardNumber ?? ""; } var temp = ""; if (item.Parent is IMtopCalc) { temp = $"Check: {item.Group}-{item.ParentCheck.Name} ({item.ParentCheck.NextPerformances.FirstOrDefault(i => i.Group == item.Group)?.PerformanceSource})"; } else { temp = $"{ListViewGroupHelper.GetGroupString(item)} | Date: {item.PerformanceDate?.ToString(new GlobalTermsProvider()["DateFormat"].ToString())}"; } subItems.Add(CreateRow(temp, item.ParentCheck.NextPerformances.FirstOrDefault(i => i.Group == item.Group)?.PerformanceSource)); subItems.Add(CreateRow(title, title, tcnColor)); subItems.Add(CreateRow(card, card, tcnColor)); subItems.Add(CreateRow(description, description)); subItems.Add(CreateRow(item.WorkType, item.WorkType)); subItems.Add(CreateRow(item.PerformanceDate == null ? "N/A" : SmartCore.Auxiliary.Convert.GetDateFormat((DateTime)item.PerformanceDate), item.PerformanceDate)); //item.PerformanceSource?.Resemble(item.Parent.Threshold.FirstPerformanceSinceNew); subItems.Add(CreateRow(item.PerformanceSource?.ToString(), item.PerformanceSource)); if (item.Parent is IMtopCalc) { var d = item.Parent as IMtopCalc; d.PhaseRepeat?.Resemble(item.Parent.Threshold.RepeatInterval); subItems.Add(CreateRow(d.PhaseThresh?.ToString(), d.PhaseThresh)); subItems.Add(CreateRow(d.PhaseRepeat?.ToString(), d.PhaseRepeat)); } else { subItems.Add(CreateRow(item.Parent.Threshold.RepeatInterval.ToString(), item.Parent.Threshold.RepeatInterval)); } subItems.Add(CreateRow(item.Remains.ToString(), item.Remains)); subItems.Add(CreateRow(item.Parent.LastPerformance?.OnLifelength.ToString(), item.Parent.LastPerformance)); subItems.Add(CreateRow(item.KitsToString, item.Kits?.Count)); subItems.Add(CreateRow(manHours.ToString(), manHours)); subItems.Add(CreateRow(cost.ToString(), cost)); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow("", "")); subItems.Add(CreateRow(item.Parent.SmartCoreObjectType.ToString(), item.Parent.SmartCoreObjectType)); subItems.Add(CreateRow(item.ATAChapter?.ToString(), item.ATAChapter)); subItems.Add(CreateRow(timesString, times)); subItems.Add(CreateRow(item.MaintenanceCheck != null ? item.MaintenanceCheck.ToString() : "", item.MaintenanceCheck)); subItems.Add(CreateRow(author, author)); return(subItems); }
/// <summary> /// Вернет пакет чеков заданного типа, которые хотя бы раз должны быть выполнены до заданного ресурса /// Исключит из пакета те чеки, которые по группе выполнения будут совпадать с выполненными чеками /// </summary> private static MaintenanceCheckGroupByType GetCheckPacketBySource(List <MaintenanceCheckGroupByType> groupChecks, int?lifeLenghtResource, int?minStep, MaintenanceCheck lastComplianceCheck) { if (lifeLenghtResource == null || lifeLenghtResource == 0 || groupChecks == null || minStep == null) { return(null); } int intervalGroupNum, countCompliance; MaintenanceCheckGroupByType group = new MaintenanceCheckGroupByType(groupChecks[0].Checks[0].Schedule); //список чеков, с которым в последствии будет производится сравнения на группу последнего выполнения //Вычисление разницы ресурсов int differentOfSource = lifeLenghtResource.Value - Convert.ToInt32(lastComplianceCheck.LastPerformance.OnLifelength.Days); //Вычисление количества просроченных групп int countOfOverdueGroup = differentOfSource / minStep.Value; //Вычисление максимального ресурса int maxSource = (lastComplianceCheck.LastPerformance.NumGroup + countOfOverdueGroup) * Convert.ToInt32(lastComplianceCheck.Interval.Hours); //Максимальный ресурс и дальшенйшие вычисления производятся по часам, //т.к. их значение более точно, чем значение дней //Формирование пакета чеков foreach (MaintenanceCheckGroupByType groupCheck in groupChecks) { foreach (MaintenanceCheck check in groupCheck.Checks) { //Вычисление количества, сколько раз должен выполнится чек countCompliance = (maxSource - (maxSource % Convert.ToInt32(check.Interval.Hours))) / Convert.ToInt32(check.Interval.Hours); if (countCompliance != 0) { //чек выолняется хотя бы раз до заданного ресурса //вычисление группы, на которой должен выполнится чек intervalGroupNum = (maxSource - (maxSource % Convert.ToInt32(check.Interval.Hours))) / Convert.ToInt32(lastComplianceCheck.Interval.Hours); //включение чека в пакет check.ComplianceGroupNum = intervalGroupNum; group.Checks.Add(check); } } } if (group.Checks.Count == 0) { return(null); } //исключение из пакета тех чеков, чья группа выполнения совпадает //с группой последнего выполнения заданого чека foreach (MaintenanceCheck maintenanceCheck in group.Checks) { if (maintenanceCheck.LastPerformance != null && maintenanceCheck.LastPerformance.NumGroup == maintenanceCheck.ComplianceGroupNum) { group.Checks.Remove(maintenanceCheck); } } //заполнение дополнительных данных по группе выполнения differentOfSource -= differentOfSource % Convert.ToInt32(lastComplianceCheck.Interval.Days); group.GroupComplianceNum = lastComplianceCheck.LastPerformance.NumGroup + countOfOverdueGroup; group.GroupComplianceDate = lastComplianceCheck.LastPerformance.RecordDate.AddDays(differentOfSource); group.GroupComplianceLifelength = new Lifelength(lastComplianceCheck.LastPerformance.OnLifelength); group.GroupComplianceLifelength.Days += differentOfSource; return(group); }
protected override void SortItems(int columnIndex) { if (OldColumnIndex != columnIndex) { SortMultiplier = -1; } if (SortMultiplier == 1) { SortMultiplier = -1; } else { SortMultiplier = 1; } itemsListView.Items.Clear(); OldColumnIndex = columnIndex; List <ListViewItem> resultList = new List <ListViewItem>(); if (columnIndex != 6) { //SetGroupsToItems(columnIndex); //ListViewItemList.Sort(new BaseListViewComparer(columnIndex, SortMultiplier)); //добавление остальных подзадач foreach (ListViewItem item in ListViewItemList) { resultList.Add(item); NextPerformance np = (NextPerformance)item.Tag; //if (np.Parent is MaintenanceCheck && ((MaintenanceCheck)np.Parent).Grouping) //{ // MaintenanceCheck mc = (MaintenanceCheck)np.Parent; // List<MaintenanceNextPerformance> performances = mc.GetPergormanceGroupWhereCheckIsSenior(); // if (performances == null || performances.Count == 1) continue; // for (int i = 1; i < performances.Count; i++) // { // ListViewItem temp = new ListViewItem(GetListViewSubItems(performances[i]), null) // { // Tag = performances[i], // Group = item.Group // }; // resultList.Add(temp); // } //} if (np.Parent is MaintenanceDirective) { var directive = (MaintenanceDirective)np.Parent; if (directive.MtopNextPerformances == null || directive.MtopNextPerformances.Count <= 1) { continue; } for (int i = 1; i < directive.MtopNextPerformances.Count; i++) { ListViewItem temp = new ListViewItem(GetListViewSubItems(directive.MtopNextPerformances[i]), null) { Tag = directive.MtopNextPerformances[i], Group = item.Group }; resultList.Add(temp); } } else { //первая подзадача описывает саму родитескую задачу, повторно ее добавлять ненадо if (np.Parent.NextPerformances == null || np.Parent.NextPerformances.Count <= 1) { continue; } for (int i = 1; i < np.Parent.NextPerformances.Count; i++) { ListViewItem temp = new ListViewItem(GetListViewSubItems(np.Parent.NextPerformances[i]), null) { Tag = np.Parent.NextPerformances[i], Group = item.Group }; resultList.Add(temp); } } } } else { foreach (ListViewItem item in ListViewItemList) { resultList.Add(item); NextPerformance np = (NextPerformance)item.Tag; if (np.Parent is MaintenanceCheck && ((MaintenanceCheck)np.Parent).Grouping) { MaintenanceCheck mc = (MaintenanceCheck)np.Parent; List <MaintenanceNextPerformance> performances = mc.GetPergormanceGroupWhereCheckIsSenior(); if (performances == null || performances.Count == 1) { continue; } for (int i = 1; i < performances.Count; i++) { ListViewItem temp = new ListViewItem(GetListViewSubItems(performances[i]), null) { Tag = performances[i], Group = item.Group }; resultList.Add(temp); } } else { //первая подзадача описывает саму родитескую задачу, повторно ее добавлять ненадо if (np.Parent.NextPerformances == null || np.Parent.NextPerformances.Count <= 1) { continue; } for (int i = 1; i < np.Parent.NextPerformances.Count; i++) { ListViewItem temp = new ListViewItem(GetListViewSubItems(np.Parent.NextPerformances[i]), null) { Tag = np.Parent.NextPerformances[i], }; resultList.Add(temp); } } } resultList.Sort(new DirectiveListViewComparer(columnIndex, SortMultiplier)); itemsListView.Groups.Clear(); //foreach (ListViewItem item in resultList) //{ // DateTime date = new DateTime(1950, 1, 1); // if (item.Tag is NextPerformance) // { // NextPerformance np = (NextPerformance)item.Tag; // if (np.PerformanceDate != null) // date = np.PerformanceDate.Value.Date; // } // string temp = date.Date > new DateTime(1950, 1, 1).Date ? SmartCore.Auxiliary.Convert.GetDateFormat(date.Date) : ""; // itemsListView.Groups.Add(temp, temp); // item.Group = itemsListView.Groups[temp]; //} //Группировка элементов по датам выполнения IEnumerable <IGrouping <DateTime, ListViewItem> > groupedItems = resultList.Where(lvi => lvi.Tag != null && lvi.Tag is NextPerformance) .GroupBy(lvi => Convert.ToDateTime(((NextPerformance)lvi.Tag).PerformanceDate).Date); foreach (var groupedItem in groupedItems) { //Собрание всех выполнений на данную дату в одну коллекцию var performances = groupedItem.Select(lvi => lvi.Tag as NextPerformance).ToList(); var temp = ListViewGroupHelper.GetGroupStringByPerformanceDate(performances, groupedItem.Key.Date); itemsListView.Groups.Add(temp, temp); foreach (var item in groupedItem) { item.Group = itemsListView.Groups[temp]; } } //SetGroupsToItems(); } SetGroupsToItems(resultList, columnIndex); itemsListView.Items.AddRange(resultList.OrderBy(lvi => Convert.ToDateTime(((NextPerformance)lvi.Tag).PerformanceDate).Date).ToArray()); }
public List <MaintenanceCheckComplianceGroup> GetGroupsWhereCheckIsSenior(MaintenanceCheck check) { return(_checkGroupItems.Where(g => g.GetMaxIntervalCheck() != null && g.GetMaxIntervalCheck() == check).ToList()); }
/// <summary> /// Возвращает DisplayerParams для MaintenanceCheck /// </summary> public static DisplayerParams GetMaintenanceCheckScreen(MaintenanceCheck maintenanceCheck) { string pagecaption = maintenanceCheck.ParentAircraft.RegistrationNumber + ". Maintenance Program"; return(DisplayerParams.CreateScreenParams(ReflectionTypes.DisplayInNew, pagecaption, new MaintenanceScreen(maintenanceCheck.ParentAircraft))); }
///<summary> ///</summary> public CompliancePDFItem(MaintenanceCheck maintenanceCheck) : this() { _currentCheck = maintenanceCheck; UpdateInformation(); }