Beispiel #1
0
 /// <summary>
 /// Получить задание на подготовку проекта резолюции.
 /// </summary>
 /// <param name="startDate">Дата начала текущей итерации рассмотрения.</param>
 /// <returns>Задание на подготовку проекта резолюции.</returns>
 private IAssignment GetPreparingDraftResolutionAssignment(DateTime startDate)
 {
     return(Assignments.GetAll()
            .Where(a => Equals(a.Task, _obj))
            .Where(a => a.Created >= startDate)
            .Where(a => PreparingDraftResolutionAssignments.Is(a))
            .OrderByDescending(a => a.Created)
            .FirstOrDefault());
 }
Beispiel #2
0
        public override void BeforeStart(Sungero.Workflow.Server.BeforeStartEventArgs e)
        {
            // Если задача была стартована через UI, то проверяем корректность срока.
            bool startedFromUI;

            if (e.Params.TryGetValue(PublicConstants.ActionItemExecutionTask.CheckDeadline, out startedFromUI) && startedFromUI)
            {
                e.Params.Remove(PublicConstants.ActionItemExecutionTask.CheckDeadline);
            }

            if (!Functions.ActionItemExecutionTask.ValidateActionItemExecutionTaskStart(_obj, e, startedFromUI))
            {
                return;
            }

            // Задать текст в переписке.
            if (_obj.IsCompoundActionItem == true)
            {
                _obj.ActiveText    = string.IsNullOrEmpty(_obj.ActionItem) ? Sungero.RecordManagement.ActionItemExecutionTasks.Resources.DefaultActionItem : _obj.ActionItem;
                _obj.ThreadSubject = Sungero.RecordManagement.ActionItemExecutionTasks.Resources.CompoundActionItemThreadSubject;
            }
            else if (_obj.ActionItemType != ActionItemType.Component)
            {
                _obj.ThreadSubject = Sungero.RecordManagement.ActionItemExecutionTasks.Resources.ActionItemThreadSubject;
            }

            if (_obj.ActionItemType == ActionItemType.Component)
            {
                _obj.ActiveText = _obj.ActionItem;
                // При рестарте поручения обновляется текст, срок и исполнитель в табличной части составного поручения.
                var actionItem = ActionItemExecutionTasks.As(_obj.ParentTask).ActionItemParts.FirstOrDefault(s => Equals(s.ActionItemPartExecutionTask, _obj));
                // Обновить текст поручения, если изменен индивидуальный текст или указан общий текст вместо индивидуального.
                if (actionItem.ActionItemExecutionTask.ActionItem != _obj.ActionItem && actionItem.ActionItemPart != _obj.ActionItem ||
                    actionItem.ActionItemExecutionTask.ActionItem == _obj.ActionItem && !string.IsNullOrEmpty(actionItem.ActionItemPart))
                {
                    actionItem.ActionItemPart = _obj.ActionItem;
                }
                // Обновить срок поручения, если изменен индивидуальный срок или указан общий срок вместо индивидуального.
                if (actionItem.ActionItemExecutionTask.FinalDeadline != _obj.Deadline && actionItem.Deadline != _obj.Deadline ||
                    actionItem.ActionItemExecutionTask.FinalDeadline == _obj.Deadline && actionItem.Deadline.HasValue)
                {
                    actionItem.Deadline = _obj.Deadline;
                }
                // Обновить исполнителя, если он изменен при рестарте.
                if (actionItem.ActionItemExecutionTask.Assignee != _obj.Assignee && actionItem.Assignee != _obj.Assignee)
                {
                    actionItem.Assignee = _obj.Assignee;
                }
            }

            if (_obj.ActionItemType == ActionItemType.Additional)
            {
                _obj.ActiveText = ActionItemExecutionTasks.Resources.SentToCoAssignee;
            }

            // Выдать права на изменение для возможности прекращения задачи.
            Functions.ActionItemExecutionTask.GrantAccessRightToTask(_obj, _obj);

            if (_obj.IsDraftResolution == true && !_obj.DocumentsGroup.OfficialDocuments.Any())
            {
                if (ReviewDraftResolutionAssignments.Is(_obj.ParentAssignment))
                {
                    _obj.DocumentsGroup.OfficialDocuments.Add(ReviewDraftResolutionAssignments.As(_obj.ParentAssignment).DocumentForReviewGroup.OfficialDocuments.FirstOrDefault());
                }
                else
                {
                    _obj.DocumentsGroup.OfficialDocuments.Add(PreparingDraftResolutionAssignments.As(_obj.ParentAssignment).DocumentForReviewGroup.OfficialDocuments.FirstOrDefault());
                }
            }
        }
Beispiel #3
0
        public virtual IQueryable <Sungero.Workflow.IAssignmentBase> OnDocumentProcessingDataQuery(IQueryable <Sungero.Workflow.IAssignmentBase> query)
        {
            // Фильтр по типу.
            var typeFilterEnabled = _filter != null && (_filter.ProcessResolution ||
                                                        _filter.ConfirmSigning ||
                                                        _filter.SendActionItem ||
                                                        _filter.Send ||
                                                        _filter.CheckReturn ||
                                                        _filter.Other);

            var stageTypes = new List <Sungero.Core.Enumeration>();

            if (!typeFilterEnabled || _filter.ProcessResolution)
            {
                stageTypes.Add(Docflow.ApprovalReviewAssignmentCollapsedStagesTypesRe.StageType.ReviewingResult);
            }
            if (!typeFilterEnabled || _filter.ConfirmSigning)
            {
                stageTypes.Add(Docflow.ApprovalReviewAssignmentCollapsedStagesTypesRe.StageType.ConfirmSign);
            }
            if (!typeFilterEnabled || _filter.SendActionItem)
            {
                stageTypes.Add(Docflow.ApprovalReviewAssignmentCollapsedStagesTypesRe.StageType.Execution);
            }
            if (!typeFilterEnabled || _filter.Send)
            {
                stageTypes.Add(Docflow.ApprovalReviewAssignmentCollapsedStagesTypesRe.StageType.Sending);
            }

            var showExecution   = !typeFilterEnabled || _filter.SendActionItem;
            var showCheckReturn = !typeFilterEnabled || _filter.CheckReturn;
            var showOther       = !typeFilterEnabled || _filter.Other;

            var result = query.Where(q =>
                                     // Рассмотрение.
                                     ApprovalReviewAssignments.Is(q) && ApprovalReviewAssignments.As(q).CollapsedStagesTypesRe.Any(s => stageTypes.Contains(s.StageType.Value)) ||
                                     // Подписание.
                                     ApprovalSigningAssignments.Is(q) && ApprovalSigningAssignments.As(q).CollapsedStagesTypesSig.Any(s => stageTypes.Contains(s.StageType.Value)) ||
                                     // Создание поручений.
                                     (ApprovalExecutionAssignments.Is(q) && ApprovalExecutionAssignments.As(q).CollapsedStagesTypesExe.Any(s => stageTypes.Contains(s.StageType.Value)) ||
                                      showExecution && ReviewResolutionAssignments.Is(q)) ||
                                     // Подготовка проекта резолюции.
                                     showExecution && PreparingDraftResolutionAssignments.Is(q) ||
                                     // Регистрация.
                                     ApprovalRegistrationAssignments.Is(q) && ApprovalRegistrationAssignments.As(q).CollapsedStagesTypesReg.Any(s => stageTypes.Contains(s.StageType.Value)) ||
                                     // Печать.
                                     ApprovalPrintingAssignments.Is(q) && ApprovalPrintingAssignments.As(q).CollapsedStagesTypesPr.Any(s => stageTypes.Contains(s.StageType.Value)) ||
                                     // Отправка контрагенту.
                                     ApprovalSendingAssignments.Is(q) && ApprovalSendingAssignments.As(q).CollapsedStagesTypesSen.Any(s => stageTypes.Contains(s.StageType.Value)) ||
                                     // Контроль возврата.
                                     showCheckReturn && ApprovalCheckReturnAssignments.Is(q) ||
                                     // Прочие задания.
                                     showOther && (ApprovalSimpleAssignments.Is(q) || ApprovalCheckingAssignments.Is(q)));

            // Запрос непрочитанных без фильтра.
            if (_filter == null)
            {
                return(RecordManagement.PublicFunctions.Module.ApplyCommonSubfolderFilters(result));
            }

            // Фильтры по статусу, замещению и периоду.
            result = RecordManagement.PublicFunctions.Module.ApplyCommonSubfolderFilters(result, _filter.InProcess,
                                                                                         _filter.Last30Days, _filter.Last90Days, _filter.Last180Days, false);
            return(result);
        }