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; } } }