private DateTime GetNextComplianceDate(MaintenanceCheckComplianceGroup complianceGroup)
        {
            if ((complianceGroup.GetMaxIntervalCheck()) == null)
            {
                return(DateTimeExtend.GetCASMinDateTime());
            }
            complianceGroup.Sort();

            DateTime nextDate = DateTimeExtend.GetCASMinDateTime();

            if (complianceGroup.Grouping)
            {
                MaintenanceCheck lastOrMinCheck =
                    complianceGroup.GetLastComplianceChecks().FirstOrDefault() != null
                        ? complianceGroup.GetLastComplianceChecks().First()
                        : complianceGroup.GetMinIntervalCheck();

                if (lastOrMinCheck.Interval.Days != null && lastOrMinCheck.Interval.Days > 0)
                {
                    nextDate = lastOrMinCheck.NextPerformances.Count != 0 && lastOrMinCheck.NextPerformances[0].PerformanceDate != null
                                            ? lastOrMinCheck.NextPerformances[0].PerformanceDate.Value
                                            : lastOrMinCheck.LastPerformance != null
                                                  ? lastOrMinCheck.LastPerformance.RecordDate.AddDays(Convert.ToInt32(lastOrMinCheck.Interval.Days))
                                                  : lastOrMinCheck.ParentAircraft.ManufactureDate.AddDays(Convert.ToInt32(lastOrMinCheck.Interval.Days));
                }
                else
                {
                    nextDate = lastOrMinCheck.NextPerformances.Count != 0 &&
                               lastOrMinCheck.NextPerformances[0].PerformanceDate != null
                        ? lastOrMinCheck.NextPerformances[0].PerformanceDate.Value
                        : DateTimeExtend.GetCASMinDateTime();
                }
            }
            else
            {
                foreach (MaintenanceCheck maintenanceCheck in complianceGroup.Checks)
                {
                    if (maintenanceCheck.Interval.Days != null && maintenanceCheck.Interval.Days > 0)
                    {
                        nextDate =
                            maintenanceCheck.NextPerformances.Count != 0 && maintenanceCheck.NextPerformances[0].PerformanceDate != null
                                            ? maintenanceCheck.NextPerformances[0].PerformanceDate.Value
                                            : maintenanceCheck.LastPerformance != null
                                                  ? maintenanceCheck.LastPerformance.RecordDate.AddDays(Convert.ToInt32(maintenanceCheck.Interval.Days))
                                                  : maintenanceCheck.ParentAircraft.ManufactureDate.AddDays(Convert.ToInt32(maintenanceCheck.Interval.Days));
                    }
                    else
                    {
                        nextDate = maintenanceCheck.NextPerformanceDate != null
                            ? maintenanceCheck.NextPerformanceDate.Value
                            : DateTimeExtend.GetCASMinDateTime();
                    }
                }
            }

            return(nextDate);
        }
示例#2
0
        /// <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);
            }
        }