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(); } }
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); }
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); }
/// <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()); }
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(); } } }
public Sungero.Core.StateView GetStateView() { var task = StatusReportRequestTasks.As(_obj.Task); return(Functions.StatusReportRequestTask.GetStateView(task)); }