예제 #1
0
        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);
        }
예제 #2
0
        /// <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]");
                                }
                            }
                        }
                    }
                }
            }
        }