protected override void AnimatedThreadWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Cancelled) { return; } if (_preResult == null) { return; } if (_checkItems == null) { _checkItems = new MaintenanceCheckCollection(); } _checkItems.Clear(); _checkItems.AddRange(_preResult.ToArray()); _preResult.Clear(); statusControl.Aircraft = CurrentAircraft; statusControl.ConditionState = e.Result as ConditionState ?? ConditionState.NotEstimated; maintenanceSummaryControl1.UpdateInformation(_checkItems, CurrentAircraft, CurrentAircraft.Schedule); //обновление главной информацию по директиве maintenanceLimitationControl1.UpdateInformation(_checkItems, CurrentAircraft, _maintenanceDirectives); //обновление информации подзадач директивы maintenancePerformanceControl1.Reload(_checkItems, CurrentAircraft); //обновление информации об выполнении директивы complianceControl.Reload(_checkItems, CurrentAircraft, CurrentAircraft.Schedule); }
/// <summary> /// Добавление директив в таблицу данных /// </summary> /// <param name="dataset">Таблица, в которую добавляются данные</param> protected virtual void AddDirectivesToDataSet(MaintenanceProgramDataSet dataset) { List <MaintenanceCheck> checks = new List <MaintenanceCheck>(_reportedDirectives.ToArray()); List <MaintenanceCheckGroupByType> groups = new List <MaintenanceCheckGroupByType>(); int groupId = 0; var v = from liminationItem in checks where liminationItem.Schedule == _filterSelection group liminationItem by liminationItem.CheckType.FullName into fileGroup orderby fileGroup.Key select fileGroup; foreach (IGrouping <string, MaintenanceCheck> grouping in v) { MaintenanceCheckGroupByType g = new MaintenanceCheckGroupByType(_filterSelection); groups.Add(g); foreach (MaintenanceCheck liminationItem in grouping) { g.Checks.Add(liminationItem); liminationItem.Tag = groupId; groupId++; } } groups.OrderBy(g => g.MinInterval()); int min, max, countGroups; for (int i = 0; i < groups.Count; i++) { if (_filterSelection) { min = groups[i].MinInterval(); max = i != groups.Count - 1 ? groups[i + 1].MinInterval() : groups[i].MaxInterval(); //Вычисление количества групп выполнения для данного типа чеков (A,B or C) countGroups = max / min; //Вычисление интервала выполнения для каждой группы выполнения //если интервал, на котором должен выполнится чек равени интервалу группы //то чек посещается в даннуб группу выполнения for (int j = 0; j < countGroups; j++) { int interval = min * (j + 1); foreach (MaintenanceCheck liminationItem in groups[i].Checks) { if (interval % liminationItem.Interval.Hours == 0) { dataset.ItemsTable.AddItemsTableRow(interval, (int)liminationItem.Tag, liminationItem.Name, "X"); } } if (i <= 0) { continue; } //Если просматривается не базовая группа (groups[0]) //то в набор данных должны быть включены все предыдущие группы чеков for (int k = 0; k < i; k++) { interval = min * (j + 1); int localInterval = k != groups.Count - 1 ? groups[k + 1].MinInterval() : groups[k].MaxInterval(); foreach (MaintenanceCheck liminationItem in groups[k].Checks) { if (localInterval % liminationItem.Interval.Hours == 0) { dataset.ItemsTable.AddItemsTableRow(interval, (int)liminationItem.Tag, liminationItem.Name, "X"); } else { dataset.ItemsTable.AddItemsTableRow(interval, (int)liminationItem.Tag, liminationItem.Name, "[X]"); } } } } } else { min = groups[i].MinInterval(); max = i != groups.Count - 1 ? groups[i + 1].MinInterval() : groups[i].MaxInterval(); //Вычисление количества групп выполнения для данного типа чеков (A,B or C) countGroups = max / min; //Вычисление интервала выполнения для каждой группы выполнения //если интервал, на котором должен выполнится чек равен интервалу группы //то чек посещается в данную группу выполнения for (int j = 0; j < countGroups; j++) { int interval = min * (j + 1); foreach (MaintenanceCheck liminationItem in groups[i].Checks) { if (interval % liminationItem.Interval.Days == 0) { dataset.ItemsTable.AddItemsTableRow(interval, (int)liminationItem.Tag, liminationItem.Name, "X"); } } if (i <= 0) { continue; } //Если просматривается не базовая группа (groups[0]) //то в набор данных должны быть включены все предыдущие группы чеков for (int k = 0; k < i; k++) { interval = min * (j + 1); int localInterval = k != groups.Count - 1 ? groups[k + 1].MinInterval() : groups[k].MaxInterval(); foreach (MaintenanceCheck liminationItem in groups[k].Checks) { if (localInterval % liminationItem.Interval.Days == 0) { dataset.ItemsTable.AddItemsTableRow(interval, (int)liminationItem.Tag, liminationItem.Name, "X"); } else { dataset.ItemsTable.AddItemsTableRow(interval, (int)liminationItem.Tag, liminationItem.Name, "[X]"); } } } } } } }