示例#1
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            // Валидация срока рассмотрения.
            if (_obj.DeadlineInDays.HasValue && _obj.DeadlineInDays < 1)
            {
                e.AddError(DocumentKinds.Resources.IncorrectDeadline);
            }
            if (_obj.DeadlineInHours.HasValue && _obj.DeadlineInHours < 1)
            {
                e.AddError(DocumentKinds.Resources.IncorrectDeadline);
            }
            if (_obj.NumberingType != NumberingType.Numerable)
            {
                _obj.AutoNumbering = false;
            }

            // Нельзя изменить тип документа у видов документов МКДО, созданных инициализацией.
            if (!Equals(_obj.DocumentType, _obj.State.Properties.DocumentType.OriginalValue) && Functions.DocumentKind.IsExchangeNativeDocumentKind(_obj))
            {
                e.AddError(DocumentKinds.Resources.CantChange);
            }

            // Обрезать лишние пробелы.
            _obj.Name      = _obj.Name.Trim();
            _obj.ShortName = _obj.ShortName.Trim();

            if (!string.IsNullOrWhiteSpace(_obj.Code))
            {
                _obj.Code = _obj.Code.Trim();
                if (Regex.IsMatch(_obj.Code, @"\s"))
                {
                    e.AddError(_obj.Info.Properties.Code, Docflow.Resources.NoSpacesInCode);
                }
            }

            // Проверить код на пробелы, если свойство изменено.
            if (!string.IsNullOrEmpty(_obj.Code))
            {
                // При изменении кода e.AddError сбрасывается.
                var codeIsChanged = _obj.State.Properties.Code.IsChanged;
                _obj.Code = _obj.Code.Trim();

                if (codeIsChanged && Regex.IsMatch(_obj.Code, @"\s"))
                {
                    e.AddError(_obj.Info.Properties.Code, Company.Resources.NoSpacesInCode);
                }
            }

            // Нельзя закрывать вид документа по умолчанию.
            if (_obj.IsDefault == true && _obj.Status == Status.Closed)
            {
                e.AddError(DocumentKinds.Resources.ClosedDocumentKindCannotBeDefault);
            }

            // Нельзя закрывать вид документа, если по нему есть настройки или правила.
            var canClose = !Functions.Module.GetDocumentKindSettings(_obj).Any();

            if (_obj.Status == Status.Closed && !canClose)
            {
                e.AddError(DocumentKinds.Resources.CantClose, _obj.Info.Actions.ShowSettings);
            }

            if (_obj.IsDefault == true)
            {
                var defaultKinds = DocumentKinds.GetAll(k => k.Status == Status.Active && !Equals(k, _obj) &&
                                                        Equals(k.DocumentType, _obj.DocumentType) && k.IsDefault == true);
                foreach (var kind in defaultKinds)
                {
                    var lockInfo = Locks.GetLockInfo(kind);
                    if (lockInfo != null && lockInfo.IsLocked)
                    {
                        var error = Commons.Resources.LinkedEntityLockedFormat(
                            kind.Name,
                            kind.Id,
                            lockInfo.OwnerName);
                        e.AddError(error);
                    }

                    kind.IsDefault = false;
                }
            }
        }