/// <summary>
        /// Данные у директивы обновляются по введенным данным
        /// </summary>
        public void ApplyChanges(MaintenanceDirective directive)
        {
            textboxTaskNumberCheck.Focus();
            directive.ATAChapter = ATAChapter;
            if (directive.TaskNumberCheck != TaskNumberCheck)
            {
                directive.TaskNumberCheck = TaskNumberCheck;

                string caption = "";
                if (directive.ParentBaseComponent != null)
                {
                    if (directive.ParentBaseComponent.BaseComponentType == BaseComponentType.Frame)
                    {
                        caption = directive.ParentBaseComponent.GetParentAircraftRegNumber();
                    }
                    else
                    {
                        if (directive.ParentBaseComponent.ParentAircraftId > 0)
                        {
                            caption = directive.ParentBaseComponent.GetParentAircraftRegNumber() + ". " +
                                      directive.ParentBaseComponent;
                        }
                        else
                        {
                            caption = directive.ParentBaseComponent.ToString();
                        }
                    }
                    caption += ". MPD. " + directive.WorkType.CommonName + ". " + directive.TaskNumberCheck;
                }
                if (DisplayerRequested != null)
                {
                    DisplayerRequested(this,
                                       new ReferenceEventArgs(null,
                                                              ReflectionTypes.ChangeTextOfContainingDisplayer,
                                                              caption));
                }
            }

            directive.IsApplicability         = checkBoxIsApplicability.Checked;
            directive.IsOperatorTask          = checkBoxOperatorTask.Checked;
            directive.HiddenRemarks           = HiddenRemarks;
            directive.Threshold.EffectiveDate = EffectiveDate;
            directive.EngineeringOrders       = EngOrderNumber;
            directive.MPDTaskNumber           = textBoxMpdTaskNumber.Text;
            directive.MaintenanceManual       = textBoxMaintenanceManual.Text;
            directive.Zone           = textBoxZone.Text;
            directive.Access         = textBoxAccess.Text;
            directive.TaskCardNumber = textBoxTaskCardNumber.Text;
            directive.MRB            = textBoxMRB.Text;
            directive.Applicability  = Applicability;

            if (checkBoxIsApplicability.Checked)
            {
                directive.Applicability = directive.Applicability.Replace("APL", "").TrimStart();
            }
            else
            {
                directive.Applicability = directive.Applicability.Replace("N/A", "").TrimStart();
            }

            directive.Description      = Subject;
            directive.Remarks          = Remarks;
            directive.CriticalSystem   = comboBoxCriticalSystem.SelectedItem as CriticalSystemList;
            directive.Program          = comboBoxProgram.SelectedItem as MaintenanceDirectiveProgramType;
            directive.ProgramIndicator = comboBoxProgramIndicator.SelectedItem as MaintenanceDirectiveProgramIndicator;

            directive.JobCard = lookupComboboxJobCard.SelectedItem as JobCard;


            directive.MpdRef               = textBoxMpdRef.Text;
            directive.MpdRevisionNum       = textBoxMpdRevNum.Text;
            directive.ScheduleRef          = textBoxScheuleRef.Text;
            directive.ScheduleRevisionNum  = textBoxScheuleRev.Text;
            directive.ScheduleItem         = textBoxScheduleItem.Text;
            directive.MpdRevisionDate      = dateTimePickerRevDate.Value;
            directive.ScheduleRevisionDate = dateTimePickerScheuleDate.Value;
            directive.MpdOldTaskCard       = textBoxOldTaslCard.Text;
            directive.Workarea             = textBoxWorkArea.Text;
            directive.Category             = comboBoxCategory.SelectedItem as MpdCategory;


            if (fileControlTaskNumberCheck.GetChangeStatus())
            {
                fileControlTaskNumberCheck.ApplyChanges();
                directive.TaskNumberCheckFile = fileControlTaskNumberCheck.AttachedFile;
            }

            if (fileControlEO.GetChangeStatus())
            {
                fileControlEO.ApplyChanges();
                directive.EngineeringOrderFile = fileControlEO.AttachedFile;
            }

            if (fileControlTaskCardNumber.GetChangeStatus())
            {
                fileControlTaskCardNumber.ApplyChanges();
                directive.TaskCardNumberFile = fileControlTaskCardNumber.AttachedFile;
            }

            if (fileControlMaintenanceManual.GetChangeStatus())
            {
                fileControlMaintenanceManual.ApplyChanges();
                directive.MaintenanceManualFile = fileControlMaintenanceManual.AttachedFile;
            }

            if (FileControlMRB.GetChangeStatus())
            {
                FileControlMRB.ApplyChanges();
                directive.MRBFile = FileControlMRB.AttachedFile;
            }
        }
        /// <summary>
        /// Возвращает значение, показывающее является ли значение элемента управления допустимым
        /// </summary>
        /// <returns></returns>
        public bool ValidateData(out string message)
        {
            message = "";
            if (ATAChapter == null || ATAChapter.ItemId <= 0)
            {
                if (message != "")
                {
                    message += "\n ";
                }
                message += "Please select ATA chapter";
            }
            if (TaskNumberCheck == "")
            {
                if (message != "")
                {
                    message += "\n ";
                }
                message += "You should enter Title";
            }
            if (comboBoxCategory.SelectedItem == null)
            {
                if (message != "")
                {
                    message += "\n ";
                }
                message += "Please select Category";
            }
            string validateFiles;

            if (!fileControlTaskNumberCheck.ValidateData(out validateFiles))
            {
                if (message != "")
                {
                    message += "\n ";
                }
                message += "MPD Task File: " + validateFiles;
            }

            if (!fileControlEO.ValidateData(out validateFiles))
            {
                if (message != "")
                {
                    message += "\n ";
                }
                message += "MPD EO File: " + validateFiles;
            }

            if (!fileControlMaintenanceManual.ValidateData(out validateFiles))
            {
                if (message != "")
                {
                    message += "\n ";
                }
                message += "MPD Maintenance Manual File: " + validateFiles;
            }

            if (!fileControlTaskCardNumber.ValidateData(out validateFiles))
            {
                if (message != "")
                {
                    message += "\n ";
                }
                message += "MPD Task Card Number File: " + validateFiles;
            }

            if (!FileControlMRB.ValidateData(out validateFiles))
            {
                if (message != "")
                {
                    message += "\n ";
                }
                message += "MPD MRB File: " + validateFiles;
            }

            if (message != "")
            {
                return(false);
            }
            return(true);
        }
        /// <summary>
        /// Заполняет поля для редактирования директивы
        /// </summary>
        private void UpdateInformation(MaintenanceDirective directive)
        {
            if (directive == null)
            {
                return;
            }

            var parentAircraft = GlobalObjects.AircraftsCore.GetAircraftById(directive.ParentBaseComponent.ParentAircraftId);    //TODO:(Evgenii Babak) пересмотреть использование ParentAircrafId здесь
            MSG aircraftMSG    = parentAircraft != null
                                  ? parentAircraft.MSG
                                                                  : MSG.MSG2;

            comboBoxCriticalSystem.Items.Clear();
            comboBoxCriticalSystem.Items.AddRange(CriticalSystemList.Items.ToArray());

            comboBoxProgram.Items.Clear();
            comboBoxProgram.Items.AddRange(MaintenanceDirectiveProgramType.Items.ToArray());

            comboBoxProgramIndicator.Items.Clear();
            comboBoxProgramIndicator.Items.AddRange(MaintenanceDirectiveProgramIndicator.Items.ToArray());


            dateTimePickerEffDate.ValueChanged -= DateTimePickerEffDateValueChanged;

            ATAChapter                            = directive.ATAChapter;
            TaskNumberCheck                       = directive.TaskNumberCheck;
            textBoxMpdTaskNumber.Text             = directive.MPDTaskNumber;
            textBoxMaintenanceManual.Text         = directive.MaintenanceManual;
            textBoxZone.Text                      = directive.Zone;
            textBoxAccess.Text                    = directive.Access;
            textBoxTaskCardNumber.Text            = directive.TaskCardNumber;
            textBoxMRB.Text                       = directive.MRB;
            comboBoxProgram.SelectedItem          = directive.Program;
            comboBoxProgramIndicator.SelectedItem = directive.ProgramIndicator;
            comboBoxCriticalSystem.SelectedItem   = directive.CriticalSystem;
            dateTimePickerEffDate.Value           = directive.ItemId > 0 ? directive.Threshold.EffectiveDate : DateTime.Today;
            EngOrderNumber                        = directive.EngineeringOrders;
            Subject       = directive.Description;
            Remarks       = directive.Remarks;
            HiddenRemarks = directive.HiddenRemarks;
            checkBoxIsApplicability.Checked = directive.IsApplicability;
            Applicability                   = directive.IsApplicability ? $"APL  {directive.Applicability}" : $"N/A  {directive.Applicability}";
            textBoxMpdRef.Text              = directive.MpdRef;
            textBoxMpdRevNum.Text           = directive.MpdRevisionNum;
            textBoxScheuleRef.Text          = directive.ScheduleRef;
            textBoxScheuleRev.Text          = directive.ScheduleRevisionNum;
            textBoxScheduleItem.Text        = directive.ScheduleItem;
            dateTimePickerRevDate.Value     = directive.MpdRevisionDate;
            dateTimePickerScheuleDate.Value = directive.ScheduleRevisionDate;
            textBoxOldTaslCard.Text         = directive.MpdOldTaskCard;
            textBoxWorkArea.Text            = directive.Workarea;

            checkBoxOperatorTask.Checked = directive.IsOperatorTask;

            comboBoxCategory.Items.Clear();
            comboBoxCategory.Items.AddRange(MpdCategory.Items.ToArray());
            comboBoxCategory.SelectedItem = directive.Category;

            #region Job Card

            lookupComboboxJobCard.SelectedIndexChanged -= LookupComboboxMaintenanceCheckSelectedIndexChanged;

            if (parentAircraft != null)
            {
                var maintenanceScreenDisplayerText =
                    $"{directive.ParentBaseComponent.GetParentAircraftRegNumber()} Job Cards";
                lookupComboboxJobCard.SetItemsScreenControl <CommonListScreen>(new[] { parentAircraft }, maintenanceScreenDisplayerText);
                lookupComboboxJobCard.SetEditScreenControl <JobCardScreen>(maintenanceScreenDisplayerText);
                lookupComboboxJobCard.SetAddScreenControl <JobCardScreen>(new object[] { directive }, directive + ". New Job Card");
                lookupComboboxJobCard.LoadObjectsFunc = GlobalObjects.CasEnvironment.NewLoader.GetJobCard;
                lookupComboboxJobCard.FilterParam1    = directive;
                lookupComboboxJobCard.SelectedItemId  = directive.JobCard != null
                    ? directive.JobCard.ItemId
                    : -1;
                lookupComboboxJobCard.UpdateInformation();
            }

            lookupComboboxJobCard.SelectedIndexChanged += LookupComboboxMaintenanceCheckSelectedIndexChanged;

            #endregion

            fileControlTaskNumberCheck.UpdateInfo(directive.TaskNumberCheckFile,
                                                  "Adobe PDF Files|*.pdf",
                                                  "This record does not contain a file proving the Task Number Check. Enclose PDF file to prove the compliance.",
                                                  "Attached file proves the Task Number Check.");
            fileControlEO.UpdateInfo(directive.EngineeringOrderFile,
                                     "Adobe PDF Files|*.pdf",
                                     "This record does not contain a file proving the Engineering order. Enclose PDF file to prove the compliance.",
                                     "Attached file proves the Engineering order.");

            fileControlMaintenanceManual.UpdateInfo(directive.MaintenanceManualFile,
                                                    "Adobe PDF Files|*.pdf",
                                                    "This record does not contain a file proving the Maintenance Manual. Enclose PDF file to prove the compliance.",
                                                    "Attached file proves the Maintenance Manual.");

            FileControlMRB.UpdateInfo(directive.MRBFile,
                                      "Adobe PDF Files|*.pdf",
                                      "This record does not contain a file proving the MRB file. Enclose PDF file to prove the compliance.",
                                      "Attached file proves the MRB file.");

            fileControlTaskCardNumber.UpdateInfo(directive.TaskCardNumberFile,
                                                 "Adobe PDF Files|*.pdf",
                                                 "This record does not contain a file proving the Task Card Number. Enclose PDF file to prove the compliance.",
                                                 "Attached file proves the Task Card Number.");
            dateTimePickerEffDate.ValueChanged += DateTimePickerEffDateValueChanged;
        }
        ///<summary>
        ///Возвращает значение, показывающее были ли изменения в данном элементе управления
        ///</summary>
        ///<param name="directive">Директива для которой производится проверка</param>
        ///<returns></returns>
        public bool GetChangeStatus(MaintenanceDirective directive)
        {
            DateTime oldEffDate = directive.Threshold.EffectiveDate;

            if (directive.ItemId > 0)
            {
                return(ATAChapter != directive.ATAChapter ||
                       HiddenRemarks != directive.HiddenRemarks ||
                       comboBoxCategory.SelectedItem != directive.Category ||
                       TaskNumberCheck != directive.TaskNumberCheck ||
                       textBoxMpdTaskNumber.Text != directive.MPDTaskNumber ||
                       textBoxMaintenanceManual.Text != directive.MaintenanceManual ||
                       textBoxZone.Text != directive.Zone ||
                       textBoxAccess.Text != directive.Access ||
                       textBoxMpdRef.Text != directive.MpdRef ||
                       textBoxMpdRevNum.Text != directive.MpdRevisionNum ||
                       checkBoxIsApplicability.Checked != directive.IsApplicability ||
                       checkBoxOperatorTask.Checked != directive.IsOperatorTask ||
                       textBoxScheuleRef.Text != directive.ScheduleRef ||
                       textBoxScheuleRev.Text != directive.ScheduleRevisionNum ||
                       comboBoxCriticalSystem.SelectedItem != directive.CriticalSystem ||
                       comboBoxProgram.SelectedItem != directive.Program ||
                       comboBoxProgramIndicator.SelectedItem != directive.ProgramIndicator ||
                       textBoxScheduleItem.Text != directive.ScheduleItem ||
                       dateTimePickerEffDate.Value != oldEffDate ||
                       EngOrderNumber != directive.EngineeringOrders ||
                       textBoxTaskCardNumber.Text != directive.TaskCardNumber ||
                       textBoxMRB.Text != directive.MRB ||
                       EngOrderNumber != directive.EngineeringOrders ||
                       Subject != directive.Description ||
                       Remarks != directive.Remarks ||
                       Applicability != directive.Applicability ||
                       directive.JobCard == null && lookupComboboxJobCard.SelectedItemId > 0 ||
                       directive.JobCard != null && lookupComboboxJobCard.SelectedItemId != directive.JobCard.ItemId ||
                       fileControlEO.GetChangeStatus() ||
                       fileControlTaskNumberCheck.GetChangeStatus() ||
                       fileControlMaintenanceManual.GetChangeStatus() ||
                       fileControlTaskCardNumber.GetChangeStatus() ||
                       FileControlMRB.GetChangeStatus());
            }
            return(ATAChapter != null ||
                   Paragraph != "" ||
                   TaskNumberCheck != "" ||
                   textBoxMpdTaskNumber.Text != "" ||
                   textBoxMaintenanceManual.Text != "" ||
                   textBoxMpdTaskNumber.Text != "" ||
                   textBoxTaskCardNumber.Text != "" ||
                   textBoxMpdRef.Text != "" ||
                   textBoxMpdRevNum.Text != "" ||
                   textBoxScheuleRef.Text != "" ||
                   textBoxScheuleRev.Text != "" ||
                   textBoxZone.Text != "" ||
                   textBoxAccess.Text != "" ||
                   dateTimePickerEffDate.Value.Date != DateTime.Today ||
                   EngOrderNumber != "" ||
                   References != "" ||
                   Applicability != "" ||
                   BiWeeklyReport != "" ||
                   Subject != "" ||
                   Applicability != "" ||
                   Remarks != "" ||
                   comboBoxCriticalSystem.SelectedItem != null ||
                   comboBoxProgramIndicator.SelectedItem != null ||
                   comboBoxProgram.SelectedItem != null ||
                   fileControlTaskNumberCheck.GetChangeStatus() ||
                   fileControlEO.GetChangeStatus() ||
                   fileControlMaintenanceManual.GetChangeStatus() ||
                   FileControlMRB.GetChangeStatus() ||
                   fileControlTaskCardNumber.GetChangeStatus());
        }