private void ComboBoxCheckRecordSelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBoxCheckRecord.SelectedItem as MaintenanceCheckRecordGroup == null)
            {
                return;
            }

            MaintenanceCheckRecordGroup maintenanceCheckRecordGroup = comboBoxCheckRecord.SelectedItem as MaintenanceCheckRecordGroup;
            MaintenanceCheckRecord      maintenanceCheckRecord      = maintenanceCheckRecordGroup.GetMinIntervalCheckRecord();

            if (maintenanceCheckRecord == null)
            {
                return;
            }
            lifelengthViewer_LastCompliance.Lifelength = new Lifelength(maintenanceCheckRecord.OnLifelength);
        }
        /// <summary>
        /// Расчитывает последнюю группу записей о выполнении чеков программы обслуживания в которой заданный чек будет старшим
        /// <br/> и возвращает запись о выполнении заданного чека
        /// </summary>
        /// <param name="check">Чек, для которого нужно найти группу</param>
        /// <returns>запись о выполнении или null</returns>
        public MaintenanceCheckRecord GetLastCheckRecordWhereCheckIsSenior(MaintenanceCheck check)
        {
            if (check == null)
            {
                return(null);
            }
            List <MaintenanceCheck> aircraftScheduleChecks =
                Items.Where(c => c.Schedule == check.Schedule &&
                            c.ParentAircraftId == check.ParentAircraftId &&
                            c.Grouping == check.Grouping &&
                            c.Resource == check.Resource).ToList();

            List <MaintenanceCheckRecordGroup> checkGroupsCollections = new List <MaintenanceCheckRecordGroup>();

            foreach (MaintenanceCheck checkItem in aircraftScheduleChecks)
            {
                foreach (MaintenanceCheckRecord record in checkItem.PerformanceRecords)
                {
                    //Поиск коллекции групп, в которую входят группы с нужными критериями
                    //по плану, группировка и основному ресурсу
                    MaintenanceCheckRecordGroup collection = checkGroupsCollections
                                                             .FirstOrDefault(g => g.Schedule == check.Schedule &&
                                                                             g.Grouping == check.Grouping &&
                                                                             g.Resource == check.Resource &&
                                                                             g.GroupComplianceNum == record.NumGroup);
                    if (collection != null)
                    {
                        //Коллекция найдена
                        collection.Records.Add(record);
                    }
                    else
                    {
                        //Коллекции с нужными критериями нет
                        //Созадние и добавление
                        collection = new MaintenanceCheckRecordGroup(check.Schedule, check.Grouping, check.Resource, record.NumGroup);
                        collection.Records.Add(record);
                        checkGroupsCollections.Add(collection);
                    }
                }
            }

            MaintenanceCheckRecordGroup result = checkGroupsCollections
                                                 .OrderByDescending(cg => cg.GroupComplianceNum)
                                                 .FirstOrDefault(cg => cg.CheckIsSenior(check));

            return(result == null ? null : result.Records.FirstOrDefault(r => r.ParentId == check.ItemId));
        }
Пример #3
0
        private void ButtonRegisterActualStateClick(object sender, EventArgs e)
        {
            List <MaintenanceCheckRecord> records =
                CheckItems.Where(c => c.Grouping)
                .SelectMany(c => c.PerformanceRecords)
                .ToList();
            List <MaintenanceCheckRecordGroup> maintenanceCheckRecordGroups = new List <MaintenanceCheckRecordGroup>();

            foreach (MaintenanceCheckRecord record in records)
            {
                MaintenanceCheckRecordGroup recordGroup = maintenanceCheckRecordGroups
                                                          .FirstOrDefault(g => g.Schedule == record.ParentCheck.Schedule &&
                                                                          g.Grouping == record.ParentCheck.Grouping &&
                                                                          g.Resource == record.ParentCheck.Resource &&
                                                                          g.GroupComplianceNum == record.NumGroup);
                if (recordGroup != null)
                {
                    //Коллекция найдена
                    //Поиск в ней группы чеков с нужным типом
                    recordGroup.Records.Add(record);
                }
                else
                {
                    //Коллекции с нужными критериями нет
                    //Созадние и добавление
                    recordGroup =
                        new MaintenanceCheckRecordGroup(record.ParentCheck.Schedule, record.ParentCheck.Grouping,
                                                        record.ParentCheck.Resource, record.NumGroup);
                    recordGroup.Records.Add(record);
                    maintenanceCheckRecordGroups.Add(recordGroup);
                }
            }

            MaintenanceProgramChangeDialog actualStateDialog =
                new MaintenanceProgramChangeDialog(_currentAircraft, maintenanceCheckRecordGroups)
            {
                Text = "Add new Maintenance program change record"
            };

            actualStateDialog.ShowDialog();
            if (actualStateDialog.DialogResult == DialogResult.OK)
            {
                InvokeComplianceAdded(null);
            }
        }
        /// <summary>
        /// Обновление информации ЭУ
        /// </summary>
        private void UpdateInformation()
        {
            comboBoxMSG.Items.Clear();
            foreach (object o in Enum.GetValues(typeof(MSG)).Cast <MSG>().Where(msg => msg != MSG.Unknown))
            {
                comboBoxMSG.Items.Add(o);
            }
            comboBoxMSG.Enabled = true;

            comboBoxCheckRecord.Items.Clear();
            comboBoxCheckRecord.Items.AddRange(_maintenanceCheckRecordGroups.Where(crg => crg.Grouping).ToArray());

            if (_currentMaintenanceProgramChangeRecord == null)
            {
                return;
            }

            if (_currentMaintenanceProgramChangeRecord.OnLifelength != null)
            {
                lifelengthViewer_LastCompliance.Lifelength = _currentMaintenanceProgramChangeRecord.OnLifelength;
            }

            textBox_Remarks.Text = _currentMaintenanceProgramChangeRecord.Remarks ?? "";

            if (comboBoxMSG.Items.Contains(_currentMaintenanceProgramChangeRecord.MSG))
            {
                comboBoxMSG.SelectedItem = _currentMaintenanceProgramChangeRecord.MSG;
            }

            MaintenanceCheckRecordGroup rg = _maintenanceCheckRecordGroups.FirstOrDefault(mcrg => mcrg.Records.Any(r => r.ItemId == _currentMaintenanceProgramChangeRecord.MaintenanceCheckRecordId));

            if (rg != null && comboBoxCheckRecord.Items.Contains(rg))
            {
                comboBoxCheckRecord.SelectedItem = rg;
            }

            if (_currentMaintenanceProgramChangeRecord.OnLifelength != null)
            {
                lifelengthViewer_LastCompliance.Lifelength = _currentMaintenanceProgramChangeRecord.OnLifelength;
            }
        }
        /// <summary>
        /// Данные работы обновляются по введенным значениям
        /// </summary>
        private bool SaveData()
        {
            MaintenanceCheckRecordGroup mcrg = (MaintenanceCheckRecordGroup)comboBoxCheckRecord.SelectedItem;
            MaintenanceCheckRecord      mcr  = mcrg.GetMinIntervalCheckRecord();

            if (mcr != null)
            {
                _currentMaintenanceProgramChangeRecord.CalculatedPerformanceSource =
                    mcr.CalculatedPerformanceSource.IsNullOrZero()
                    ? new Lifelength(mcr.ParentCheck.Interval * mcr.PerformanceNum)
                    : new Lifelength(mcr.CalculatedPerformanceSource);
                _currentMaintenanceProgramChangeRecord.PerformanceNum           = mcr.PerformanceNum;
                _currentMaintenanceProgramChangeRecord.RecordDate               = mcr.RecordDate;
                _currentMaintenanceProgramChangeRecord.MaintenanceCheckRecordId = mcr.ItemId;
            }
            _currentMaintenanceProgramChangeRecord.Remarks      = textBox_Remarks.Text;
            _currentMaintenanceProgramChangeRecord.OnLifelength = lifelengthViewer_LastCompliance.Lifelength;

            if (comboBoxMSG.SelectedItem is MSG)
            {
                _currentMaintenanceProgramChangeRecord.MSG = (MSG)comboBoxMSG.SelectedItem;
            }
            else
            {
                _currentMaintenanceProgramChangeRecord.MSG = MSG.MSG2;
            }
            try
            {
                GlobalObjects.MaintenanceCore.RegisterMaintenanceProgramChangeRecord(_currentAircraft, _currentMaintenanceProgramChangeRecord);
            }
            catch (Exception ex)
            {
                Program.Provider.Logger.Log("Error while saving maintenance program change record", ex);
                return(false);
            }

            return(true);
        }
Пример #6
0
        private void HeaderControlButtonPrintDisplayerRequested(object sender, ReferenceEventArgs e)
        {
            if (CurrentAircraft != null)
            {
                e.DisplayerText = CurrentAircraft.RegistrationNumber + ". " + ReportText + " Report";
            }
            else
            {
                e.DisplayerText = ReportText + " Report";
                e.Cancel        = true;
                return;
            }
            e.TypeOfReflection = ReflectionTypes.DisplayInNew;

            if (sender == itemPrintReportMonthlyUtilization)
            {
#if KAC
                MonthlyUtilizationBuilderKAC reportBuilder =
                    new MonthlyUtilizationBuilderKAC(CurrentAircraft,
                                                     dateTimePickerDateFrom.Value,
                                                     dateTimePickerDateTo.Value,
                                                     _initialDirectiveArray.TotalHoursClear,
                                                     _initialDirectiveArray.TotalCyclesClear);
#else
                MonthlyUtilizationBuilder reportBuilder =
                    new MonthlyUtilizationBuilder(CurrentAircraft,
                                                  dateTimePickerDateFrom.Value,
                                                  dateTimePickerDateTo.Value,
                                                  GlobalObjects.CasEnvironment.Calculator.GetTotalHours(_initialDirectiveArray),
                                                  GlobalObjects.CasEnvironment.Calculator.GetTotalCycles(_initialDirectiveArray));
#endif
                reportBuilder.Flights = _initialDirectiveArray.OrderByDescending(f => f.FlightDate.AddMinutes(f.FlightTime.TotalMinutes)).ToList();
                e.TypeOfReflection    = ReflectionTypes.DisplayInNew;
                e.DisplayerText       = CurrentAircraft.RegistrationNumber + " Monthly Utilization Report";
                e.RequestedEntity     = new ReportScreen(reportBuilder);
                GlobalObjects.AuditRepository.WriteReportAsync(GlobalObjects.CasEnvironment.IdentityUser, "MonthlyUtilizationListScreen (Monthly Utilization)");
            }
            else if (sender == itemPrintReportOperationTime)
            {
                _workPackages = GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Closed, _maintenanceChecks.Select(m => (IDirective)m).ToList());

                var records =
                    _maintenanceChecks.SelectMany(mc => mc.PerformanceRecords)
                    .Where(pr => pr.RecordDate.Date >= dateTimePickerDateFrom.Value.Date &&
                           pr.RecordDate.Date <= dateTimePickerDateTo.Value.Date)
                    .ToList();

                var lastCCheckRecord =
                    _maintenanceChecks.SelectMany(mc => mc.PerformanceRecords)
                    .Where(pr => pr.RecordDate.Date <= dateTimePickerDateTo.Value.Date)
                    .OrderByDescending(pr => pr.RecordDate)
                    .FirstOrDefault();

                var maintenanceCheckRecordGroups = new List <MaintenanceCheckRecordGroup>();

                foreach (MaintenanceCheckRecord record in records)
                {
                    //Поиск коллекции групп, в которую входят группы с нужными критериями
                    //по плану, группировка и основному ресурсу
                    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);
                    }
                }

                OperationTimeReportBuilder reportBuilder =
                    new OperationTimeReportBuilder(CurrentAircraft,
                                                   maintenanceCheckRecordGroups,
                                                   GlobalObjects.ComponentCore.GetAicraftBaseComponents(CurrentAircraft.ItemId),
                                                   lastCCheckRecord,
                                                   _workPackages,
                                                   dateTimePickerDateFrom.Value.Date,
                                                   dateTimePickerDateTo.Value.Date);

                e.TypeOfReflection = ReflectionTypes.DisplayInNew;
                e.DisplayerText    = CurrentAircraft.RegistrationNumber + " Operation Time Report";
                e.RequestedEntity  = new ReportScreen(reportBuilder);
                GlobalObjects.AuditRepository.WriteReportAsync(GlobalObjects.CasEnvironment.IdentityUser, "MonthlyUtilizationListScreen (Operation Time)");
            }
            else
            {
                e.Cancel = true;
            }
        }
Пример #7
0
        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, "AircraftGeneralDaraScreen (Aircraft General Data)");
            }
            else if (sender == itemPrintReportTechnicalCondition)
            {
                var maintenanceChecks = GlobalObjects.MaintenanceCore.GetMaintenanceCheck(CurrentAircraft, true);
                var workPackages      = GlobalObjects.WorkPackageCore.GetWorkPackagesLite(CurrentAircraft, WorkPackageStatus.Closed, maintenanceChecks.Select(m => (IDirective)m).ToList());

                var minCCheck =
                    maintenanceChecks.Where(mc => mc.CheckType.ShortName == "C" &&
                                            mc.Schedule &&
                                            mc.Grouping &&
                                            mc.Resource == LifelengthSubResource.Hours)
                    .OrderBy(mc => mc.Interval.GetSubresource(LifelengthSubResource.Hours))
                    .FirstOrDefault();

                var 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();

                var 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 (lastCCheckRecord != null)
                {
                    if (lastACheckRecord.NumGroup == lastCCheckRecord.NumGroup)
                    {
                        lastACheckRecord = null;
                    }
                }

                var dCheckRecords =
                    maintenanceChecks.Where(mc => mc.CheckType.ShortName == "D")
                    .SelectMany(mc => mc.PerformanceRecords)
                    .ToList();

                var 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, "AircraftGeneralDaraScreen (Technical Condition)");
            }
            else
            {
                e.Cancel = true;
            }
        }
Пример #8
0
        private void Edit()
        {
            DialogResult dlgResult = DialogResult.None;

            if (listViewCompliance.SelectedItems[0].Group == listViewCompliance.Groups["overdue"])
            {
                MaintenanceComplainceForm complainceForm =
                    new MaintenanceComplainceForm(_currentAircraft, (MaintenanceCheckGroupByType)listViewCompliance.SelectedItems[0].Tag);
                dlgResult = complainceForm.ShowDialog(this);
            }
            else if (listViewCompliance.SelectedItems[0].Group == listViewCompliance.Groups["next"])
            {
                if (listViewCompliance.SelectedItems[0].Tag is NextPerformance)
                {
                    NextPerformance np = (NextPerformance)listViewCompliance.SelectedItems[0].Tag;
                    //if (np.Condition != ConditionState.Overdue || np.PerformanceDate > DateTime.Now)
                    //{
                    //    MessageBox.Show("You can not enter a record for not delayed performance",
                    //                    (string)new GlobalTermsProvider()["SystemName"],
                    //                    MessageBoxButtons.OK,
                    //                    MessageBoxIcon.Warning,
                    //                    MessageBoxDefaultButton.Button1);
                    //    return;
                    //}
                    if (np.BlockedByPackage != null)
                    {
                        MessageBox.Show("Perform of the task:" + listViewCompliance.SelectedItems[0].Text +
                                        "\nblocked by Work Package:" +
                                        "\n" + np.BlockedByPackage.Title,
                                        (string)new GlobalTermsProvider()["SystemName"],
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Warning,
                                        MessageBoxDefaultButton.Button1);
                        return;
                    }
                }

                if (listViewCompliance.SelectedItems[0].Tag is MaintenanceNextPerformance)
                {
                    MaintenanceNextPerformance mnp = listViewCompliance.SelectedItems[0].Tag as MaintenanceNextPerformance;
                    if (mnp.PerformanceGroup == null)
                    {
                        return;
                    }
                    MaintenanceCheckGroupByType pg             = mnp.PerformanceGroup;
                    MaintenanceComplainceForm   complainceForm = new MaintenanceComplainceForm(_currentAircraft, pg);
                    dlgResult = complainceForm.ShowDialog(this);
                }
                else if (listViewCompliance.SelectedItems[0].Tag is NextPerformance)
                {
                    NextPerformance np = listViewCompliance.SelectedItems[0].Tag as NextPerformance;
                    if (np.Parent == null)
                    {
                        return;
                    }
                    MaintenanceComplainceForm complainceForm = new MaintenanceComplainceForm(_currentAircraft, np);
                    dlgResult = complainceForm.ShowDialog(this);
                }
            }
            else if (listViewCompliance.SelectedItems[0].Group == listViewCompliance.Groups["last"])
            {
                if (listViewCompliance.SelectedItems[0].Tag is List <MaintenanceCheckRecord> )
                {
                    MaintenanceComplainceForm complainceForm =
                        new MaintenanceComplainceForm(_currentAircraft, (List <MaintenanceCheckRecord>)listViewCompliance.SelectedItems[0].Tag);
                    dlgResult = complainceForm.ShowDialog(this);
                }
                else if (listViewCompliance.SelectedItems[0].Tag is MaintenanceProgramChangeRecord)
                {
                    List <MaintenanceCheckRecord> records =
                        CheckItems.Where(c => c.Grouping)
                        .SelectMany(c => c.PerformanceRecords)
                        .ToList();
                    List <MaintenanceCheckRecordGroup> maintenanceCheckRecordGroups = new List <MaintenanceCheckRecordGroup>();

                    foreach (MaintenanceCheckRecord record in records)
                    {
                        MaintenanceCheckRecordGroup recordGroup = maintenanceCheckRecordGroups
                                                                  .FirstOrDefault(g => g.Schedule == record.ParentCheck.Schedule &&
                                                                                  g.Grouping == record.ParentCheck.Grouping &&
                                                                                  g.Resource == record.ParentCheck.Resource &&
                                                                                  g.GroupComplianceNum == record.NumGroup);
                        if (recordGroup != null)
                        {
                            //Коллекция найдена
                            //Поиск в ней группы чеков с нужным типом
                            recordGroup.Records.Add(record);
                        }
                        else
                        {
                            //Коллекции с нужными критериями нет
                            //Созадние и добавление
                            recordGroup =
                                new MaintenanceCheckRecordGroup(record.ParentCheck.Schedule, record.ParentCheck.Grouping,
                                                                record.ParentCheck.Resource, record.NumGroup);
                            recordGroup.Records.Add(record);
                            maintenanceCheckRecordGroups.Add(recordGroup);
                        }
                    }
                    MaintenanceProgramChangeDialog complainceForm =
                        new MaintenanceProgramChangeDialog((MaintenanceProgramChangeRecord)listViewCompliance.SelectedItems[0].Tag,
                                                           maintenanceCheckRecordGroups);
                    dlgResult = complainceForm.ShowDialog(this);
                }
                //MaintenanceComplainceForm complainceForm = new MaintenanceComplainceForm
                //{
                //    PerformanceRecords = ((List<MaintenanceCheckRecord>)
                //                     listViewCompliance.SelectedItems[0].Tag),
                //    CurrentAircraft = this.CurentAircraft,
                //    NumGroup = ((List<MaintenanceCheckRecord>)
                //        listViewCompliance.SelectedItems[0].Tag)[0].NumGroup
                //};
                // dlgResult = complainceForm.ShowDialog(this);
            }
            if (dlgResult == DialogResult.OK)
            {
                InvokeComplianceAdded(null);
            }
        }
Пример #9
0
        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);
        }
Пример #10
0
        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;
        }
Пример #11
0
        /// <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);
        }