public static IDeadlineExtensionTask GetDeadlineExtension(Sungero.RecordManagement.IActionItemExecutionAssignment executionAssignment) { // Проверить наличие старой задачи на продление срока. var oldTask = DeadlineExtensionTasks.GetAll() .Where(j => Equals(j.ParentAssignment, executionAssignment)) .Where(j => j.Status == Workflow.Task.Status.InProcess || j.Status == Workflow.Task.Status.Draft) .FirstOrDefault(); if (oldTask != null) { return(oldTask); } var task = DeadlineExtensionTasks.CreateAsSubtask(executionAssignment); task.ActionItemExecutionAssignment = executionAssignment; task.MaxDeadline = (executionAssignment.Deadline < Calendar.Now) ? Calendar.Today : executionAssignment.Deadline; task.NeedsReview = false; task.ActionItem = executionAssignment.ActionItem; var itemExecution = ActionItemExecutionTasks.As(executionAssignment.Task); var document = ActionItemExecutionTasks.Get(itemExecution.Id).DocumentsGroup.OfficialDocuments.FirstOrDefault(); if (document != null) { task.DocumentsGroup.OfficialDocuments.Add(document); } task.Subject = Functions.DeadlineExtensionTask.GetDeadlineExtensionSubject(task, DeadlineExtensionTasks.Resources.ExtendDeadlineTaskSubject); // Определить исполнителя. Для составного поручения взять ведущую задачу. var leadItemExecution = itemExecution; var parentItemExecution = ActionItemExecutionTasks.As(itemExecution.ParentTask); if (parentItemExecution != null && parentItemExecution.IsCompoundActionItem == true) { leadItemExecution = parentItemExecution; } // Исполнителем указать контролёра, если его нет, то стартовавшего задачу, если и его нет, то автора. // Если контроля не было, то стартовавшего задачу. if (itemExecution.IsUnderControl == true) { task.Assignee = leadItemExecution.Supervisor ?? leadItemExecution.StartedBy; } else { task.Assignee = leadItemExecution.StartedBy; } if (task.Assignee == null || task.Assignee.IsSystem == true) { task.Assignee = leadItemExecution.Author; } task.CurrentDeadline = executionAssignment.Deadline; task.Author = executionAssignment.Performer; return(task); }
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(); } } }