/// <summary>
        /// Валидация задания на доработку.
        /// </summary>
        /// <param name="approvalStages">Этапы регламента.</param>
        /// <param name="e">Аргументы действия.</param>
        /// <returns>True, если валидация прошла успешно, и False, если были ошибки.</returns>
        public virtual bool ValidateApprovalReworkAssignment(Structures.Module.DefinedApprovalStages approvalStages, Sungero.Core.IValidationArgs e)
        {
            var hasError         = false;
            var deletedApprovers = _obj.State.Properties.Approvers.Deleted;
            var addedApprovers   = _obj.State.Properties.Approvers.Added;

            // Запрещено изменять действие, если результат согласования отрицателен.
            if (_obj.Approvers.Any(a => a.Approved == Sungero.Docflow.ApprovalReworkAssignmentApprovers.Approved.NotApproved &&
                                   a.Action != Sungero.Docflow.ApprovalReworkAssignmentApprovers.Action.SendForApproval))
            {
                e.AddError(ApprovalReworkAssignments.Resources.CannotChangeAction);
                hasError = true;
            }

            // Запрещено удалять обязательных согласующих.
            if (deletedApprovers.Any(app => app.IsRequiredApprover == true))
            {
                e.AddError(ApprovalReworkAssignments.Resources.CannotDeleteRequiredApprovers);
                hasError = true;
            }

            // Запрещено добавлять согласующих, если нет этапа согласования с дополнительными согласующими.
            if (addedApprovers.Any(a => a.IsRequiredApprover != true) &&
                !approvalStages.Stages.Any(s => s.StageType == Docflow.ApprovalStage.StageType.Approvers && s.Stage.AllowAdditionalApprovers == true))
            {
                e.AddError(ApprovalReworkAssignments.Resources.CannotAddApproversIfNoAdditionalInRule);
                hasError = true;
            }

            return(!hasError);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Валидация старта задачи на ознакомление.
        /// </summary>
        /// <param name="e">Аргументы действия.</param>
        /// <returns>True, если валидация прошла успешно, и False, если были ошибки.</returns>
        public virtual bool ValidateAcquaintanceTaskStart(Sungero.Core.IValidationArgs e)
        {
            var errorMessages = Sungero.RecordManagement.Functions.AcquaintanceTask.Remote.GetStartValidationMessage(_obj);

            if (errorMessages.Any())
            {
                foreach (var error in errorMessages)
                {
                    if (error.IsShowNotAutomatedEmployeesMessage)
                    {
                        e.AddError(error.Message, _obj.Info.Actions.ShowNotAutomatedEmployees);
                    }
                    else if (error.IsCantSendTaskByNonEmployeeMessage)
                    {
                        e.AddError(_obj.Info.Properties.Author, error.Message);
                    }
                    else
                    {
                        e.AddError(error.Message);
                    }
                }
                return(false);
            }

            return(true);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Валидация сохранения задачи на исполнение поручения.
        /// </summary>
        /// <param name="e">Аргументы действия.</param>
        /// <returns>True, если валидация прошла успешно, и False, если были ошибки.</returns>
        public virtual bool ValidateActionItemExecutionTaskSave(Sungero.Core.IValidationArgs e)
        {
            var isValid = true;

            // Проверить заполненость Общего срока (а также корректность), исполнителей, текста поручения у составного поручения.
            var isCompoundActionItem = _obj.IsCompoundActionItem ?? false;

            if (isCompoundActionItem)
            {
                if (_obj.ActionItemParts.Count == 0)
                {
                    e.AddError(_obj.Info.Properties.ActionItemParts, ActionItemExecutionTasks.Resources.ActionItemsNotFilled);
                    isValid = false;
                }

                if (_obj.FinalDeadline == null && _obj.ActionItemParts.Any(i => i.Deadline == null))
                {
                    e.AddError(_obj.Info.Properties.FinalDeadline, ActionItemExecutionTasks.Resources.EmptyFinalDeadline);
                    isValid = false;
                }

                if (string.IsNullOrEmpty(_obj.ActionItem) && _obj.ActionItemParts.Any(i => string.IsNullOrEmpty(i.ActionItemPart)))
                {
                    e.AddError(_obj.Info.Properties.ActionItem, ActionItemExecutionTasks.Resources.EmptyActionItem);
                    isValid = false;
                }
            }

            return(isValid);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Валидация старта задачи на исполнение поручения.
        /// </summary>
        /// <param name="e">Аргументы действия.</param>
        /// <param name="startedFromUI">Признак того, что задача была стартована через UI.</param>
        /// <returns>True, если валидация прошла успешно, и False, если были ошибки.</returns>
        public virtual bool ValidateActionItemExecutionTaskStart(Sungero.Core.IValidationArgs e, bool startedFromUI)
        {
            var isValid = Docflow.PublicFunctions.Module.ValidateTaskAuthor(_obj, e);

            // Проверить корректность заполнения свойства Выдал.
            if (!(Sungero.Company.Employees.Current == null && Users.Current.IncludedIn(Roles.Administrators)) &&
                !Docflow.PublicFunctions.Module.Remote.IsUsersCanBeResolutionAuthor(_obj.DocumentsGroup.OfficialDocuments.SingleOrDefault(), _obj.AssignedBy))
            {
                e.AddError(_obj.Info.Properties.AssignedBy, ActionItemExecutionTasks.Resources.ActionItemCanNotAssignedByUser);
                isValid = false;
            }

            // Проверить количество исполнителей по поручению.
            if (_obj.ActionItemParts.Count() + _obj.CoAssignees.Count() > Constants.ActionItemExecutionTask.MaxActionItemAssignee)
            {
                e.AddError(Sungero.RecordManagement.ActionItemExecutionTasks.Resources.ActionItemAsigneeTooMatchFormat(Constants.ActionItemExecutionTask.MaxActionItemAssignee));
                isValid = false;
            }

            // Проверить корректность срока (только при старте через UI).
            if (startedFromUI && Functions.ActionItemExecutionTask.CheckOverdueActionItemExecutionTask(_obj))
            {
                e.AddError(RecordManagement.Resources.ImpossibleSpecifyDeadlineLessThanToday);
                isValid = false;
            }

            return(isValid);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Валидация задания на приемку работ контролером при отправке на доработку.
        /// </summary>
        /// <param name="e">Аргументы действия.</param>
        /// <returns>True, если валидация прошла успешно, и False, если были ошибки.</returns>
        public virtual bool ValidateActionItemSupervisorAssignment(Sungero.Core.IValidationArgs e)
        {
            bool isValid = true;

            if (string.IsNullOrWhiteSpace(_obj.ActiveText))
            {
                e.AddError(ActionItemSupervisorAssignments.Resources.ReportCommentIsEmpty);
                isValid = false;
            }
            if (_obj.NewDeadline == null)
            {
                e.AddError(_obj.Info.Properties.NewDeadline, ActionItemSupervisorAssignments.Resources.EmptyNewDeadline);
                isValid = false;
            }
            return(isValid);
        }
Ejemplo n.º 6
0
        public static bool ValidateTaskAuthor(ITask task, Sungero.Core.IValidationArgs e)
        {
            var authorIsNonEmployeeMessage = ValidateTaskAuthor(task);

            if (!string.IsNullOrWhiteSpace(authorIsNonEmployeeMessage))
            {
                e.AddError(task.Info.Properties.Author, authorIsNonEmployeeMessage);
                return(false);
            }
            return(true);
        }