Beispiel #1
0
        public override void BeforeAbort(Sungero.Workflow.Server.BeforeAbortEventArgs e)
        {
            _obj.ExecutionState = ExecutionState.Aborted;

            // Если прекращён черновик, прикладную логику по прекращению выполнять не надо.
            if (_obj.State.Properties.Status.OriginalValue == Workflow.Task.Status.Draft)
            {
                return;
            }

            // Обновить статус исполнения документа - исполнен, статус контроля исполнения - снято с контроля.
            if (_obj.DocumentsGroup.OfficialDocuments.Any())
            {
                Functions.ActionItemExecutionTask.SetDocumentStates(_obj);
            }

            // При программном вызове не выполнять рекурсивную остановку подзадач.
            if (!e.Params.Contains(RecordManagement.Constants.ActionItemExecutionTask.WorkingWithGUI))
            {
                return;
            }

            // Рекурсивно прекратить подзадачи.
            Functions.Module.AbortSubtasksAndSendNotices(_obj);

            // Прекратить задачу на запрос отчёта, если она есть.
            var reportRequestTasks = StatusReportRequestTasks.GetAll(r => Equals(r.ParentTask, _obj) &&
                                                                     r.Status == Workflow.Task.Status.InProcess);

            foreach (var reportRequestTask in reportRequestTasks)
            {
                reportRequestTask.Abort();
            }
        }
Beispiel #2
0
        public static IStatusReportRequestTask CreateStatusReportRequest(IActionItemExecutionAssignment job)
        {
            var performers = Functions.ActionItemExecutionAssignment.GetActionItemsAssignees(job).ToList();

            if (!performers.Any())
            {
                return(null);
            }

            var statusReportRequest = StatusReportRequestTasks.CreateAsSubtask(job);

            statusReportRequest.ActionItem = job.ActionItem;
            var document = job.DocumentsGroup.OfficialDocuments.FirstOrDefault();

            if (document != null)
            {
                statusReportRequest.DocumentsGroup.OfficialDocuments.Add(document);
            }
            statusReportRequest.Subject    = Functions.StatusReportRequestTask.GetStatusReportRequestSubject(statusReportRequest, StatusReportRequestTasks.Resources.ReportRequestTaskSubject);
            statusReportRequest.ActiveText = StatusReportRequestTasks.Resources.ReportFromJob;

            if (performers.Count == 1)
            {
                statusReportRequest.Assignee = Company.Employees.As(performers.First());
            }

            statusReportRequest.Author = job.Performer;
            return(statusReportRequest);
        }
Beispiel #3
0
        public static IStatusReportRequestTask CreateStatusReportRequest(IActionItemExecutionTask task)
        {
            var performers = Functions.ActionItemExecutionTask.GetActionItemsPerformers(task).ToList();

            if (!performers.Any())
            {
                return(null);
            }

            var statusReportRequest = StatusReportRequestTasks.CreateAsSubtask(task);

            statusReportRequest.ActionItem = task.ActionItem;
            var document = task.DocumentsGroup.OfficialDocuments.FirstOrDefault();

            if (document != null)
            {
                statusReportRequest.DocumentsGroup.OfficialDocuments.Add(document);
            }
            statusReportRequest.Subject    = Functions.StatusReportRequestTask.GetStatusReportRequestSubject(statusReportRequest, StatusReportRequestTasks.Resources.ReportRequestTaskSubject);
            statusReportRequest.ActiveText = StatusReportRequestTasks.Resources.ReportFromJob;

            if (task.IsCompoundActionItem ?? false)
            {
                if (performers.Count == 1)
                {
                    statusReportRequest.Assignee = Company.Employees.As(performers.First());
                }
            }
            else
            {
                statusReportRequest.Assignee = task.Assignee;
            }

            return(statusReportRequest);
        }
Beispiel #4
0
        /// <summary>
        /// Получить нестандартных исполнителей задачи.
        /// </summary>
        /// <returns>Исполнители.</returns>
        public virtual List <IRecipient> GetTaskAdditionalAssignees()
        {
            var assignees = new List <IRecipient>();

            var statusReport = StatusReportRequestTasks.As(_obj);

            if (statusReport == null)
            {
                return(assignees);
            }

            if (statusReport.Assignee != null)
            {
                assignees.Add(statusReport.Assignee);
            }

            return(assignees.Distinct().ToList());
        }
Beispiel #5
0
        public virtual void CompleteAssignment4(Sungero.RecordManagement.IActionItemExecutionAssignment assignment, Sungero.RecordManagement.Server.ActionItemExecutionAssignmentArguments e)
        {
            // Переписка.
            _obj.Report = assignment.ActiveText;

            // Завершить задание на продление срока, если оно есть.
            var extendDeadlineTasks = DeadlineExtensionTasks.GetAll(j => Equals(j.ParentAssignment, assignment) &&
                                                                    j.Status == Workflow.Task.Status.InProcess);

            foreach (var extendDeadlineTask in extendDeadlineTasks)
            {
                extendDeadlineTask.Abort();
            }

            // Завершить задание на продление срока, если оно есть.
            var newExtendDeadlineTasks = Docflow.DeadlineExtensionTasks.GetAll(j => Equals(j.ParentAssignment, assignment) &&
                                                                               j.Status == Workflow.Task.Status.InProcess);

            foreach (var newExtendDeadlineTask in newExtendDeadlineTasks)
            {
                newExtendDeadlineTask.Abort();
            }

            // Завершить задание на запрос отчёта, если оно есть.
            var reportRequestTasks = StatusReportRequestTasks.GetAll(r => Equals(r.ParentTask, assignment.Task) &&
                                                                     r.Status == Workflow.Task.Status.InProcess);

            foreach (var reportRequestTask in reportRequestTasks)
            {
                reportRequestTask.Abort();
            }

            // Рекурсивно прекратить подзадачи.
            if (assignment.NeedAbortChildActionItems ?? false)
            {
                Functions.Module.AbortSubtasksAndSendNotices(_obj, assignment.Performer, ActionItemExecutionTasks.Resources.AutoAbortingReason);
            }

            // Добавить документы из группы "Результаты исполнения" соисполнителя в группу основновного поручения.
            if (_obj.ActionItemType == ActionItemType.Additional)
            {
                var parentActionItem = ActionItemExecutionTasks.As(_obj.ParentAssignment.Task);
                if (parentActionItem != null)
                {
                    var documentGroup = parentActionItem.ResultGroup.OfficialDocuments;
                    foreach (var document in _obj.ResultGroup.OfficialDocuments)
                    {
                        if (!documentGroup.Contains(document))
                        {
                            documentGroup.Add(document);
                        }
                    }

                    // Выдать права на вложенные документы.
                    Functions.ActionItemExecutionTask.GrantRightsToAttachments(parentActionItem, parentActionItem.ResultGroup.All.ToList(), false);
                }
            }

            // Добавить документы из группы "Результаты исполнения" из подчиненего поручения в задание на исполнение.
            if (_obj.ActionItemType == ActionItemType.Main && _obj.ParentAssignment != null)
            {
                var parentAssignment = ActionItemExecutionAssignments.As(_obj.ParentAssignment);
                if (parentAssignment != null)
                {
                    var parentActionItem = ActionItemExecutionTasks.As(parentAssignment.Task);
                    var documentGroup    = parentAssignment.ResultGroup.OfficialDocuments;
                    foreach (var document in _obj.ResultGroup.OfficialDocuments)
                    {
                        if (!documentGroup.Contains(document))
                        {
                            documentGroup.Add(document);
                        }
                    }

                    // Выдать права на вложенные документы.
                    Functions.ActionItemExecutionTask.GrantRightsToAttachments(parentActionItem, parentActionItem.ResultGroup.All.ToList(), false);
                }
            }

            // Выдать права на вложенные документы.
            Functions.ActionItemExecutionTask.GrantRightsToAttachments(_obj, _obj.ResultGroup.All.ToList(), false);

            // Связать документы из группы "Результаты исполнения" с основным документом.
            var mainDocument = _obj.DocumentsGroup.OfficialDocuments.FirstOrDefault();

            if (mainDocument != null)
            {
                foreach (var document in _obj.ResultGroup.OfficialDocuments.Where(d => !Equals(d, mainDocument)))
                {
                    document.Relations.AddFrom(Constants.Module.SimpleRelationRelationName, mainDocument);
                    document.Save();
                }
            }
        }
Beispiel #6
0
        public Sungero.Core.StateView GetStateView()
        {
            var task = StatusReportRequestTasks.As(_obj.Task);

            return(Functions.StatusReportRequestTask.GetStateView(task));
        }