/// <summary>
        /// Установить обязательность свойств.
        /// </summary>
        /// <param name="refreshParameters">Информация по этапам для обновления формы задачи на согласование по регламенту.</param>
        public virtual void SetRequiredProperties(Structures.ApprovalTask.RefreshParameters refreshParameters)
        {
            var taskProperties = _obj.State.Properties;

            taskProperties.Addressee.IsRequired       = refreshParameters.AddresseeIsRequired;
            taskProperties.Signatory.IsRequired       = refreshParameters.SignatoryIsRequired;
            taskProperties.ExchangeService.IsRequired = refreshParameters.ExchangeServiceIsRequired;
        }
        /// <summary>
        /// Установить видимость свойств.
        /// </summary>
        /// <param name="refreshParameters">Информация по этапам для обновления формы задачи на согласование по регламенту.</param>
        public virtual void SetVisibleProperties(Structures.ApprovalTask.RefreshParameters refreshParameters)
        {
            var taskProperties = _obj.State.Properties;

            taskProperties.AddApprovers.IsVisible    = refreshParameters.AddApproversIsVisible;
            taskProperties.Addressee.IsVisible       = refreshParameters.AddresseeIsVisible;
            taskProperties.Signatory.IsVisible       = refreshParameters.SignatoryIsVisible;
            taskProperties.DeliveryMethod.IsVisible  = refreshParameters.DeliveryMethodIsVisible;
            taskProperties.ExchangeService.IsVisible = refreshParameters.ExchangeServiceIsVisible;
        }
        /// <summary>
        /// Установить доступность свойств.
        /// </summary>
        /// <param name="refreshParameters">Информация по этапам для обновления формы задачи на согласование по регламенту.</param>
        public virtual void SetEnabledProperties(Structures.ApprovalTask.RefreshParameters refreshParameters)
        {
            var taskProperties = _obj.State.Properties;

            taskProperties.Addressee.IsEnabled    = false;
            taskProperties.ReqApprovers.IsEnabled = false;

            if (_obj.ApprovalRule != null)
            {
                taskProperties.Addressee.IsEnabled = refreshParameters.AddresseeIsEnabled;
            }

            var isExchange = _obj.DeliveryMethod != null && _obj.DeliveryMethod.Sid == Constants.MailDeliveryMethod.Exchange;

            taskProperties.ExchangeService.IsEnabled = refreshParameters.ExchangeServiceIsEnabled;
            var document = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault();

            if (isExchange && OfficialDocuments.Is(document))
            {
                if (document.Versions.Any())
                {
                    var isIncomingDocument   = Docflow.PublicFunctions.OfficialDocument.Remote.CanSendAnswer(document);
                    var isFormalizedDocument = Docflow.AccountingDocumentBases.Is(document) && Docflow.AccountingDocumentBases.As(document).IsFormalized == true;
                    taskProperties.DeliveryMethod.IsEnabled  = refreshParameters.DeliveryMethodIsEnabled;
                    taskProperties.ExchangeService.IsEnabled = refreshParameters.ExchangeServiceIsEnabled;
                }
            }

            // Не давать менять адресата в согласовании служебных записок.
            if (Memos.Is(document))
            {
                taskProperties.Addressee.IsEnabled = false;
            }

            // Не давать изменять способ доставки для исходящих писем на несколько адресатов.
            if (OutgoingDocumentBases.Is(document) && OutgoingDocumentBases.As(document).IsManyAddressees == true)
            {
                taskProperties.DeliveryMethod.IsEnabled = false;
            }
        }
 /// <summary>
 /// Обновить видимость, доступность и обязательность полей в карточке задачи.
 /// </summary>
 /// <param name="refreshParameters">Структура с данными по этапам согласования.</param>
 public void RefreshProperties(Structures.ApprovalTask.RefreshParameters refreshParameters)
 {
     Functions.ApprovalTask.SetEnabledProperties(_obj, refreshParameters);
     Functions.ApprovalTask.SetVisibleProperties(_obj, refreshParameters);
     Functions.ApprovalTask.SetRequiredProperties(_obj, refreshParameters);
 }