public virtual void StartBlock5(Sungero.RecordManagement.Server.DeadlineExtensionNotificationArguments e) { var desiredDeadline = _obj.NewDeadline.Value; var desiredDeadlineLabel = Functions.DeadlineExtensionTask.GetDesiredDeadlineLabel(desiredDeadline); var subjectFormat = DeadlineExtensionTasks.Resources.ExtensionDeadlineFormat(desiredDeadlineLabel); var subject = Functions.DeadlineExtensionTask.GetDeadlineExtensionSubject(_obj, subjectFormat); e.Block.Subject = Docflow.PublicFunctions.Module.TrimSpecialSymbols(subject); e.Block.Performers.Add(_obj.Author); e.Block.PreviousDeadline = _obj.CurrentDeadline; e.Block.NewDeadline = desiredDeadline; // Отправить уведомления соисполнителям. var actionItemAssignment = ActionItemExecutionAssignments.Get(_obj.ParentAssignment.Id); var actionItemExecution = ActionItemExecutionTasks.Get(actionItemAssignment.Task.Id); if (actionItemExecution.CoAssignees.Count > 0) { foreach (var performer in actionItemExecution.CoAssignees) { e.Block.Performers.Add(performer.Assignee); } } Docflow.PublicFunctions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, _obj.DocumentsGroup.OfficialDocuments.FirstOrDefault()); }
public virtual void StartBlock6(Sungero.RecordManagement.Server.ActionItemSupervisorAssignmentArguments e) { // Задать тему, исполнителей и срок. e.Block.Subject = Functions.ActionItemExecutionTask.GetActionItemExecutionSubject(_obj, ActionItemExecutionTasks.Resources.ControlWorkFromJob); var controller = _obj.Supervisor; if (controller != null) { e.Block.Performers.Add(controller); } var assignmentsDeadLine = 1; e.Block.RelativeDeadlineDays = assignmentsDeadLine; // Задать состояние поручения. _obj.ExecutionState = ExecutionState.OnControl; // Заполнить даты поручения. e.Block.ScheduledDate = _obj.Deadline; // Для подзадач соисполнителям заполнять данными из основной задачи. if (_obj.ActionItemType != ActionItemType.Main) { var mainActionItemExecution = ActionItemExecutionTasks.As(_obj.MainTask); if (mainActionItemExecution != null && !(mainActionItemExecution.IsCompoundActionItem ?? false)) { // Задать автора. e.Block.AssignedBy = mainActionItemExecution.AssignedBy; } } Docflow.PublicFunctions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, _obj.DocumentsGroup.OfficialDocuments.FirstOrDefault()); }
public Sungero.Core.StateView GetStateView() { var parent = _obj.ParentAssignment != null ? _obj.ParentAssignment.Task : _obj.ParentTask; var parentTask = ActionItemExecutionTasks.As(parent); return(Functions.ActionItemExecutionTask.GetStateView(parentTask)); }
public virtual void ForRework(Sungero.Workflow.Client.ExecuteResultActionArgs e) { if (!RecordManagement.Functions.ActionItemSupervisorAssignment.ValidateActionItemSupervisorAssignment(_obj, e)) { return; } var dialogID = Constants.ActionItemExecutionTask.ActionItemSupervisorAssignmentConfirmDialogID.ForRework; if (Docflow.PublicFunctions.Module.CheckDeadline(ActionItemExecutionTasks.As(_obj.Task).Assignee, _obj.NewDeadline, Calendar.Now)) { if (!Docflow.PublicFunctions.Module.ShowDialogGrantAccessRightsWithConfirmationDialog(_obj, _obj.OtherGroup.All.ToList(), e.Action, dialogID)) { e.Cancel(); } } else { // Если срок вышел, рисуем диалог с дополнительным описанием. if (Docflow.PublicFunctions.Module.ShowDialogGrantAccessRights(_obj, _obj.OtherGroup.All.ToList()) != false) { var description = ActionItemSupervisorAssignments.Resources.NewDeadlineLessThenTodayDescription; if (!Docflow.PublicFunctions.Module.ShowConfirmationDialog(e.Action.ConfirmationMessage, description, null, dialogID)) { e.Cancel(); } } } }
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 PrintActionItem(Sungero.Domain.Client.ExecuteActionArgs e) { var report = Reports.GetActionItemPrintReport(); report.Task = ActionItemExecutionTasks.As(_obj.Task); report.Assignment = ActionItemExecutionAssignments.As(_obj); report.Open(); }
public static List <IActionItemExecutionTask> GetSubActionItemExecution(IActionItemExecutionAssignment entity) { return(ActionItemExecutionTasks .GetAll() .Where(j => j.Status.Value == Workflow.Task.Status.InProcess) .Where(j => j.ActionItemType == ActionItemType.Additional) .Where(j => j.ParentAssignment == entity) .ToList()); }
public virtual void Script4Execute() { var desiredDeadline = _obj.NewDeadline; // Обновить срок у задания. var actionItemAssignment = ActionItemExecutionAssignments.Get(_obj.ParentAssignment.Id); actionItemAssignment.Deadline = desiredDeadline; actionItemAssignment.ScheduledDate = desiredDeadline; actionItemAssignment.Save(); // Обновить срок у задачи. var actionItemExecution = ActionItemExecutionTasks.Get(actionItemAssignment.Task.Id); actionItemExecution.Deadline = desiredDeadline; actionItemExecution.MaxDeadline = desiredDeadline; // Обновить срок у составной задачи. if (actionItemExecution.ActionItemType == ActionItemType.Component) { var component = ActionItemExecutionTasks.Get(actionItemExecution.ParentTask.Id); var actionItem = component.ActionItemParts.FirstOrDefault(j => Equals(j.Assignee, actionItemExecution.Assignee) && Equals(j.ActionItemPart, actionItemExecution.ActionItem) && j.Deadline == _obj.CurrentDeadline); if (actionItem != null) { actionItem.Deadline = desiredDeadline; } } // Продлить сроки соисполнителей. foreach (var performer in actionItemExecution.CoAssignees) { var subTasks = ActionItemExecutionTasks.GetAll(t => Equals(t.MainTask, actionItemExecution) && t.Status == Sungero.Workflow.Task.Status.InProcess && Equals(t.Assignee, performer.Assignee)); foreach (var subTask in subTasks) { subTask.Deadline = desiredDeadline; subTask.MaxDeadline = desiredDeadline; // Продлить срок у активного задания соисполнителя. var assignment = ActionItemExecutionAssignments.GetAll() .FirstOrDefault(a => Equals(a.Task, subTask) && a.Status == Sungero.Workflow.AssignmentBase.Status.InProcess); if (assignment != null) { assignment.Deadline = desiredDeadline; assignment.ScheduledDate = desiredDeadline; } } } }
public virtual bool Monitoring11Result() { if (_obj.IsCompoundActionItem != true) { return(true); } return(!ActionItemExecutionTasks.GetAll(j => Equals(j.ParentTask, _obj) && j.ActionItemType != ActionItemType.Main && j.Status.Value == Workflow.Task.Status.InProcess && j.ParentStartId == _obj.StartId).Any()); }
public bool IsCoAssigneeAssignamentCreated() { var task = ActionItemExecutionTasks.As(_obj.Task); var taskAssignees = task.CoAssignees.Select(c => c.Assignee).Distinct().ToList(); var asgAssignees = ActionItemExecutionAssignments .GetAll(j => j.Task.ParentAssignment != null && Equals(task, j.Task.ParentAssignment.Task) && Equals(task.StartId, j.Task.ParentAssignment.TaskStartId) && Equals(ActionItemExecutionTasks.As(j.Task).ActionItemType, ActionItemType.Additional)) .Select(c => c.Performer).Distinct().ToList(); return(taskAssignees.Count == asgAssignees.Count); }
public virtual IQueryable <Sungero.Workflow.ITask> ActionItemsDataQuery(IQueryable <Sungero.Workflow.ITask> query) { query = query.Where(t => ActionItemExecutionTasks.Is(t)); if (_filter == null) { return(Functions.Module.ApplyCommonSubfolderFilters(query)); } // Фильтры по статусу и периоду. query = Functions.Module.ApplyCommonSubfolderFilters(query, _filter.InProcess, _filter.Last30Days, _filter.Last90Days, _filter.Last180Days, false); return(query); }
public virtual void CompleteAssignment6(Sungero.RecordManagement.IReviewResolutionAssignment assignment, Sungero.RecordManagement.Server.ReviewResolutionAssignmentArguments e) { var document = _obj.DocumentForReviewGroup.OfficialDocuments.First(); // Если поручения не созданы, то изменить статус исполнения - не требует исполнения. if (!ActionItemExecutionTasks.GetAll(t => t.Status == Workflow.Task.Status.InProcess && Equals(t.ParentAssignment, assignment)).Any()) { document.ExecutionState = ExecutionState.WithoutExecut; } else { document.ExecutionState = ExecutionState.OnExecution; } }
/// <summary> /// Получить тему запроса отчета. /// </summary> /// <param name="task">Задача.</param> /// <param name="beginningSubject">Начальная тема.</param> /// <returns>Сформированная тема.</returns> public static string GetStatusReportRequestSubject(Sungero.RecordManagement.IStatusReportRequestTask task, CommonLibrary.LocalizedString beginningSubject) { var actionItemExecution = ActionItemExecutionTasks.As(task.ParentTask) ?? ActionItemExecutionTasks.As(task.ParentAssignment.Task); if (actionItemExecution.IsCompoundActionItem.Value && task.Assignee != null) { var assignment = Functions.ActionItemExecutionTask.Remote.GetActionItems(actionItemExecution) .Where(j => Equals(j.Performer, task.Assignee)) .Where(a => ActionItemExecutionTasks.Is(a.Task)) .First(); actionItemExecution = ActionItemExecutionTasks.As(assignment.Task); } var subject = Functions.ActionItemExecutionTask.GetActionItemExecutionSubject(actionItemExecution, beginningSubject); return(Docflow.PublicFunctions.Module.TrimSpecialSymbols(subject)); }
public virtual void StartBlock4(Sungero.RecordManagement.Server.ActionItemExecutionAssignmentArguments e) { // Задать тему, исполнителей и срок. if (_obj.ExecutionState == ExecutionState.OnControl) { e.Block.Subject = Functions.ActionItemExecutionTask.GetActionItemExecutionSubject(_obj, ActionItemExecutionTasks.Resources.ActionItemReworkSubject); } else { e.Block.Subject = Functions.ActionItemExecutionTask.GetActionItemExecutionSubject(_obj, ActionItemExecutionTasks.Resources.ActionItemExecutionSubject); } e.Block.Performers.Add(_obj.Assignee); if (_obj.Deadline.HasValue) { e.Block.AbsoluteDeadline = _obj.Deadline.Value; e.Block.ScheduledDate = _obj.Deadline.Value; } // Выдать права на документ. var document = _obj.DocumentsGroup.OfficialDocuments.FirstOrDefault(); if (document != null) { Docflow.PublicFunctions.OfficialDocument.GrantAccessRightsToActionItemAttachment(document, _obj.Assignee); } // Для подзадач соисполнителям заполнять "Выдал" из основной задачи. IActionItemExecutionTask actionItemTask = null; if (_obj.ActionItemType != ActionItemType.Main) { var mainActionItemExecution = ActionItemExecutionTasks.As(_obj.MainTask); if (mainActionItemExecution != null && !(mainActionItemExecution.IsCompoundActionItem ?? false)) { actionItemTask = mainActionItemExecution; } } if (actionItemTask == null) { actionItemTask = _obj; } e.Block.AssignedBy = actionItemTask.AssignedBy; Docflow.PublicFunctions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, document); }
public Sungero.Core.StateView GetStateView() { var task = ActionItemExecutionTasks.As(_obj.Task); var additional = task.ActionItemType == ActionItemType.Additional; // Не выделять текущее, если задание прекращено. if (_obj.Status == Workflow.AssignmentBase.Status.Aborted && !additional) { var mainActionItemExecutionTask = Functions.ActionItemExecutionTask.GetMainActionItemExecutionTask(task); var stateViewModel = Structures.ActionItemExecutionTask.StateViewModel.Create(); return(Functions.ActionItemExecutionTask.GetActionItemStateView(mainActionItemExecutionTask, null, stateViewModel, null, string.Empty, null, null, false, true)); } else { return(Functions.ActionItemExecutionTask.GetStateView(task)); } }
public virtual void ResolutionGroupCreated(Sungero.Workflow.Interfaces.AttachmentCreatedEventArgs e) { var task = ActionItemExecutionTasks.As(e.Attachment); if (task != null) { task.IsDraftResolution = true; var document = _obj.DocumentForReviewGroup.OfficialDocuments.FirstOrDefault(); if (document != null) { task.DocumentsGroup.OfficialDocuments.Add(document); } foreach (var otherGroupAttachment in _obj.OtherGroup.All) { task.OtherGroup.All.Add(otherGroupAttachment); } } }
public virtual void EndBlock6(Sungero.RecordManagement.Server.ActionItemSupervisorAssignmentEndBlockEventArguments e) { var assignment = e.CreatedAssignments.FirstOrDefault(); if (assignment != null && assignment.Result == Result.ForRework) { _obj.ExecutionState = ExecutionState.OnRework; var newDeadline = ActionItemSupervisorAssignments.As(assignment).NewDeadline; _obj.Deadline = newDeadline; if (_obj.ActionItemType == ActionItemType.Component && ActionItemExecutionTasks.Is(_obj.ParentTask)) { var rootTask = ActionItemExecutionTasks.As(_obj.ParentTask); var actionItem = rootTask.ActionItemParts.Where(i => Equals(i.ActionItemPartExecutionTask, _obj)).FirstOrDefault(); if (actionItem != null && (actionItem.Deadline != null || rootTask.FinalDeadline != newDeadline)) { actionItem.Deadline = newDeadline; } } } }
public virtual IQueryable <T> AssigneeFiltering(IQueryable <T> query, Sungero.Domain.PropertyFilteringEventArgs e) { e.DisableUiFiltering = true; var parentTask = ActionItemExecutionTasks.As(_obj.ParentTask); var parentAssignment = ActionItemExecutionAssignments.As(_obj.ParentAssignment); if (parentTask != null) { query = parentTask.IsCompoundActionItem ?? false? query.Where(u => Functions.ActionItemExecutionTask.GetActionItemsPerformers(parentTask).Contains(u)) : query.Where(u => u.Equals(parentTask.Assignee)); } if (parentAssignment != null) { query = query.Where(u => Functions.ActionItemExecutionAssignment.GetActionItemsAssignees(parentAssignment).Contains(u)); } return(query); }
public virtual void AssigneeChanged(Sungero.RecordManagement.Shared.StatusReportRequestTaskAssigneeChangedEventArgs e) { var parentTask = ActionItemExecutionTasks.As(_obj.ParentTask); var parentAssignment = ActionItemExecutionAssignments.As(_obj.ParentAssignment); IActionItemExecutionTask newParentTask = null; IActionItemExecutionAssignment newParentAssignment = null; if (e.NewValue != null) { // Определить исполняемое выбранным сотрудником поручение, если отправляем запрос из задачи. if (parentTask != null) { if (parentTask.IsCompoundActionItem.Value) { var assignment = Functions.ActionItemExecutionTask.Remote.GetActionItems(parentTask) .Where(j => Equals(j.Performer, e.NewValue)) .Where(a => ActionItemExecutionTasks.Is(a.Task)) .First(); newParentTask = ActionItemExecutionTasks.As(assignment.Task); } else { newParentTask = parentTask; } } // Определить исполняемое выбранным сотрудником поручение, если отправляем запрос из задания. if (parentAssignment != null) { newParentAssignment = Functions.ActionItemExecutionAssignment.Remote.GetActionItems(parentAssignment) .First(j => Equals(j.Performer, e.NewValue)); } // Обновить тему. _obj.Subject = Functions.ActionItemExecutionTask.GetActionItemExecutionSubject(newParentTask ?? ActionItemExecutionTasks.As(newParentAssignment.Task), StatusReportRequestTasks.Resources.ReportRequestTaskSubject); } else { _obj.Subject = Functions.ActionItemExecutionTask.GetActionItemExecutionSubject(parentTask ?? ActionItemExecutionTasks.As(parentAssignment.Task), StatusReportRequestTasks.Resources.ReportRequestTaskSubject); } }
public virtual void NewDeadlineValueInput(Sungero.Presentation.DateTimeValueInputEventArgs e) { var assignee = ActionItemExecutionTasks.As(_obj.Task).Assignee; var warnMessage = Docflow.PublicFunctions.Module.CheckDeadlineByWorkCalendar(assignee, e.NewValue); if (!string.IsNullOrEmpty(warnMessage)) { e.AddWarning(warnMessage); } // Проверить корректность срока. if (!Docflow.PublicFunctions.Module.CheckDeadline(assignee, e.NewValue, Calendar.Now)) { e.AddWarning(ActionItemSupervisorAssignments.Resources.NewDeadlineLessThenToday); } else if (e.NewValue != null && e.NewValue != _obj.ScheduledDate && !Docflow.PublicFunctions.Module.CheckDeadline(e.NewValue, _obj.ScheduledDate)) { e.AddError(ActionItemSupervisorAssignments.Resources.ImpossibleSpecifyDeadlineLessActionItemDeadline); } }
/// <summary> /// Получить пояснение к заданию. /// </summary> /// <param name="assignment">Задание.</param> /// <returns>Пояснение.</returns> private static string GetDescription(IActionItemExecutionAssignment assignment) { var description = string.Empty; var mainTask = ActionItemExecutionTasks.As(assignment.Task); if (mainTask == null) { return(description); } var supervisor = mainTask.Supervisor; if (supervisor != null) { description += (mainTask.ActionItemType == ActionItemType.Additional) ? RecordManagement.ActionItemExecutionTasks.Resources.OnControlWithResponsibleFormat(Sungero.Company.PublicFunctions.Employee.GetShortName(supervisor, false).TrimEnd('.')) : RecordManagement.ActionItemExecutionTasks.Resources.OnControlFormat(Sungero.Company.PublicFunctions.Employee.GetShortName(supervisor, false).TrimEnd('.')); } if (mainTask.ActionItemType == ActionItemType.Additional) { description += RecordManagement.ActionItemExecutionTasks.Resources.YouAreAdditionalAssignee; } else { if (mainTask.ActionItemType == ActionItemType.Main && mainTask.CoAssignees.Any() && !mainTask.CoAssignees.Any(ca => Equals(ca.Assignee, assignment.Performer))) { description += RecordManagement.ActionItemExecutionTasks.Resources.YouAreResponsibleAssignee; } else { description += RecordManagement.ActionItemExecutionTasks.Resources.YouAreAssignee; } } return(description); }
/// <summary> /// Получить нестандартных исполнитлей задачи. /// </summary> /// <returns>Исполнители.</returns> public virtual List <IRecipient> GetTaskAdditionalAssignees() { var assignees = new List <IRecipient>(); var deadlineExtension = DeadlineExtensionTasks.As(_obj); if (deadlineExtension == null) { return(assignees); } if (deadlineExtension.Assignee != null) { assignees.Add(deadlineExtension.Assignee); } if (ActionItemExecutionTasks.Is(deadlineExtension.ParentAssignment.Task)) { assignees.AddRange(ActionItemExecutionTasks.As(deadlineExtension.ParentAssignment.Task).CoAssignees.Select(ca => ca.Assignee)); } return(assignees.Distinct().ToList()); }
public Sungero.Core.StateView GetStateView() { var task = ActionItemExecutionTasks.As(_obj.Task); return(Functions.ActionItemExecutionTask.GetStateView(task)); }
/// <summary> /// Выдать права на задание. /// </summary> /// <param name="task">Задача.</param> /// <param name="assignment">Задание.</param> public static void GrantRightToAssignment(ITask task, IAssignment assignment) { // Выдать права на задание контролеру, инициатору и группе регистрации инициатора ведущей задачи (включая ведущие ведущего). var leadPerformers = Functions.ActionItemExecutionTask.GetLeadActionItemExecutionPerformers(ActionItemExecutionTasks.As(task)); foreach (var performer in leadPerformers) { assignment.AccessRights.Grant(performer, DefaultAccessRightsTypes.Change); } }
public virtual void Script10Execute() { var subject = Functions.ActionItemExecutionTask.GetActionItemExecutionSubject(_obj, ActionItemExecutionTasks.Resources.TaskSubject); var document = _obj.DocumentsGroup.OfficialDocuments.FirstOrDefault(); Docflow.PublicFunctions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, document); // Задания соисполнителям. if (_obj.CoAssignees != null && _obj.CoAssignees.Count > 0) { var performer = _obj.CoAssignees.FirstOrDefault(ca => ca.AssignmentCreated != true); var parentAssignment = ActionItemExecutionAssignments.GetAll() .Where(j => Equals(j.Task, _obj)) .Where(j => j.Status == Workflow.AssignmentBase.Status.InProcess) .Where(j => Equals(j.Performer, _obj.Assignee)) .Where(j => Equals(_obj.StartId, j.TaskStartId)) .FirstOrDefault(); var actionItemExecution = ActionItemExecutionTasks.CreateAsSubtask(parentAssignment); actionItemExecution.Importance = _obj.Importance; actionItemExecution.ActionItemType = ActionItemType.Additional; // Синхронизировать вложения и выдать права. if (document != null) { actionItemExecution.DocumentsGroup.OfficialDocuments.Add(document); } foreach (var addInformation in _obj.OtherGroup.All) { actionItemExecution.OtherGroup.All.Add(addInformation); } // Задать текст. actionItemExecution.Texts.Last().IsAutoGenerated = true; // Задать поручение. actionItemExecution.ActionItem = _obj.ActionItem; // Задать тему. actionItemExecution.Subject = subject; // Задать исполнителя, ответственного, контролера и инициатора. actionItemExecution.Assignee = performer.Assignee; actionItemExecution.IsUnderControl = true; actionItemExecution.Supervisor = _obj.Assignee; actionItemExecution.AssignedBy = _obj.Assignee; // Задать срок. actionItemExecution.Deadline = _obj.Deadline; actionItemExecution.MaxDeadline = _obj.Deadline; actionItemExecution.Start(); performer.AssignmentCreated = true; } // Составное поручение. if (_obj.ActionItemParts != null && _obj.ActionItemParts.Count > 0) { var job = _obj.ActionItemParts.FirstOrDefault(aip => aip.AssignmentCreated != true); var actionItemExecution = ActionItemExecutionTasks.CreateAsSubtask(_obj); actionItemExecution.Importance = _obj.Importance; actionItemExecution.ActionItemType = ActionItemType.Component; // Синхронизировать вложения и выдать права. if (document != null) { actionItemExecution.DocumentsGroup.OfficialDocuments.Add(document); } foreach (var addInformation in _obj.OtherGroup.All) { actionItemExecution.OtherGroup.All.Add(addInformation); } // Задать поручение и текст. actionItemExecution.ActionItem = string.IsNullOrWhiteSpace(job.ActionItemPart) ? _obj.ActionItem : job.ActionItemPart; // Задать тему. actionItemExecution.Subject = Functions.ActionItemExecutionTask.GetActionItemExecutionSubject(actionItemExecution, ActionItemExecutionTasks.Resources.TaskSubject); actionItemExecution.ThreadSubject = Sungero.RecordManagement.ActionItemExecutionTasks.Resources.ActionItemWithNumberThreadSubject; // Задать исполнителя, ответственного, контролера и инициатора. actionItemExecution.Assignee = job.Assignee; actionItemExecution.IsUnderControl = _obj.IsUnderControl; actionItemExecution.Supervisor = _obj.Supervisor; actionItemExecution.Author = _obj.Author; actionItemExecution.AssignedBy = _obj.AssignedBy; // Задать срок. var actionItemDeadline = job.Deadline.HasValue ? job.Deadline : _obj.FinalDeadline; actionItemExecution.Deadline = actionItemDeadline; actionItemExecution.MaxDeadline = actionItemDeadline; actionItemExecution.Start(); // Добавить составные подзадачи в исходящее. if (actionItemExecution.Status == Sungero.Workflow.Task.Status.InProcess) { Sungero.Workflow.SpecialFolders.GetOutbox(_obj.StartedBy).Items.Add(actionItemExecution); } // Записать ссылку на поручение в составное поручение. job.ActionItemPartExecutionTask = actionItemExecution; job.AssignmentCreated = true; } }
public virtual void StartBlock2(Sungero.RecordManagement.Server.ActionItemSupervisorNotificationArguments e) { // Задать тему. e.Block.Subject = Functions.ActionItemExecutionTask.GetActionItemExecutionSubject(_obj, ActionItemExecutionTasks.Resources.ControlNoticeSubject); // Задать исполнителя. if (_obj.Supervisor != null && _obj.Author != _obj.Supervisor && _obj.StartedBy != _obj.Supervisor && (_obj.ActionItemType == ActionItemType.Main)) { e.Block.Performers.Add(_obj.Supervisor); } Functions.ActionItemExecutionTask.GrantRightsToAttachments(_obj, _obj.DocumentsGroup.All.ToList(), true); Functions.ActionItemExecutionTask.GrantRightsToAttachments(_obj, _obj.AddendaGroup.All.ToList(), true); var document = _obj.DocumentsGroup.OfficialDocuments.FirstOrDefault(); if (document != null) { var documentsGroupGuid = Docflow.PublicConstants.Module.TaskMainGroup.ActionItemExecutionTask; var nonStartedActiveTasks = ActionItemExecutionTasks .GetAll(t => t.AttachmentDetails.Any(a => a.GroupId == documentsGroupGuid && a.AttachmentId == document.Id) && t.Status == Workflow.Task.Status.InProcess && t.Id != _obj.Id) .ToList(); foreach (var task in nonStartedActiveTasks) { var hasAssignments = Workflow.Assignments.GetAll(s => Equals(task, s.Task)).Any(); var hasSubTasks = Workflow.Tasks.GetAll(s => Equals(task, s.ParentTask)).Any(); if (!hasAssignments && !hasSubTasks) { Logger.DebugFormat("Granting rights for task {0}. Current Task: {1}", task.Id, _obj.Id); Functions.ActionItemExecutionTask.GrantRightsToAttachments(task, task.DocumentsGroup.All.ToList(), true); Functions.ActionItemExecutionTask.GrantRightsToAttachments(task, task.AddendaGroup.All.ToList(), true); } } } Docflow.PublicFunctions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, _obj.DocumentsGroup.OfficialDocuments.FirstOrDefault()); // Выдача прав соисполнителям и составным, чтобы Script10Execute в цикле не зависал при блокировках документа if (document != null) { var assignees = _obj.CoAssignees.Select(a => a.Assignee); var partAssignees = _obj.ActionItemParts.Select(p => p.Assignee); foreach (var assignee in assignees.Concat(partAssignees)) { if (!document.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.Read, assignee)) { document.AccessRights.Grant(assignee, DefaultAccessRightsTypes.Read); } } } // Задать состояние поручения. if (_obj.ExecutionState != ExecutionState.OnRework && _obj.Assignee != null) { _obj.ExecutionState = ExecutionState.OnExecution; } // Заполнить исполнителя, если это первое поручение по документу. if (document != null && document.Assignee == null && document.State.Properties.Assignee.IsVisible) { document.Assignee = _obj.Assignee; } // Обновить статус исполнения документа Functions.ActionItemExecutionTask.SetDocumentStates(_obj); }
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(); } } }
/// <summary> /// Добавить блок информации о рассмотрении документа руководителем. /// </summary> /// <param name="stateView">Схема представления.</param> /// <param name="startDate">Дата начала текущей итерации рассмотрения.</param> /// <returns>Полученный блок.</returns> private StateBlock AddReviewManagerBlock(StateView stateView, DateTime startDate) { var managerAssignment = this.GetManagerAssignment(startDate); var resolutionAssignment = this.GetPreparingDraftResolutionAssignment(startDate); var author = managerAssignment != null? Docflow.PublicFunctions.OfficialDocument.GetAuthor(managerAssignment.Performer, managerAssignment.CompletedBy) : Docflow.PublicFunctions.OfficialDocument.GetAuthor(_obj.Addressee, _obj.Addressee); var actionItems = ActionItemExecutionTasks.GetAll() .Where(t => (t.ParentAssignment != null && (Equals(t.ParentAssignment.Task, _obj) || Equals(t.ParentAssignment, managerAssignment))) && t.Status != Workflow.Task.Status.Draft && Equals(t.AssignedBy, DocumentReviewTasks.As(_obj).Addressee)) .OrderBy(t => t.Started); var isCompleted = (managerAssignment != null && managerAssignment.Status == Workflow.AssignmentBase.Status.Completed) || (resolutionAssignment != null && resolutionAssignment.Result == RecordManagement.PreparingDraftResolutionAssignment.Result.AddAssignment); var isReworkresolution = managerAssignment != null && ReviewDraftResolutionAssignments.Is(managerAssignment) && managerAssignment.Result == RecordManagement.ReviewDraftResolutionAssignment.Result.AddResolution && !(resolutionAssignment != null && resolutionAssignment.Result == RecordManagement.PreparingDraftResolutionAssignment.Result.AddAssignment); var isDraft = _obj.Status == Workflow.Task.Status.Draft; var headerStyle = Docflow.PublicFunctions.Module.CreateHeaderStyle(isDraft); var performerStyle = Docflow.PublicFunctions.Module.CreatePerformerDeadlineStyle(isDraft); var labelStyle = Docflow.PublicFunctions.Module.CreateStyle(false, isDraft, false); var separatorStyle = Docflow.PublicFunctions.Module.CreateSeparatorStyle(); // Добавить блок. Установить иконку и сущность. var block = stateView.AddBlock(); block.Entity = _obj; if (isCompleted && !isReworkresolution) { block.AssignIcon(ReviewManagerAssignments.Info.Actions.AddResolution, StateBlockIconSize.Large); } else { block.AssignIcon(StateBlockIconType.OfEntity, StateBlockIconSize.Large); } // Рассмотрение руководителем ещё в работе. if (!isCompleted || isReworkresolution) { // Добавить заголовок. block.AddLabel(Docflow.Resources.StateViewDocumentReview, headerStyle); block.AddLineBreak(); if (managerAssignment != null && !isReworkresolution) { if (managerAssignment.Status == Workflow.AssignmentBase.Status.Aborted) { Docflow.PublicFunctions.Module.AddInfoToRightContent(block, Docflow.ApprovalTasks.Resources.StateViewAborted); } else if (managerAssignment.IsRead == false) { Docflow.PublicFunctions.Module.AddInfoToRightContent(block, Docflow.ApprovalTasks.Resources.StateViewUnRead); } else { this.AddAssignmentStatusInfoToRight(block, labelStyle, managerAssignment); } } else if (_obj.Status == Workflow.Task.Status.Completed) { Docflow.PublicFunctions.Module.AddInfoToRightContent(block, Docflow.ApprovalTasks.Resources.StateViewCompleted); } else if (_obj.Status == Workflow.Task.Status.Aborted) { Docflow.PublicFunctions.Module.AddInfoToRightContent(block, Docflow.ApprovalTasks.Resources.StateViewAborted); } // Адресат. block.AddLabel(string.Format("{0}: {1}", Docflow.Resources.StateViewAddressee, Company.PublicFunctions.Employee.GetShortName(_obj.Addressee, false)), performerStyle); var deadline = managerAssignment != null && !isReworkresolution ? managerAssignment.Deadline : _obj.MaxDeadline; var deadlineString = deadline.HasValue ? Docflow.PublicFunctions.Module.ToShortDateShortTime(deadline.Value.ToUserTime()) : Docflow.OfficialDocuments.Resources.StateViewWithoutTerm; block.AddLabel(string.Format("{0}: {1}", Docflow.OfficialDocuments.Resources.StateViewDeadline, deadlineString), performerStyle); if (!isReworkresolution && managerAssignment != null && managerAssignment.Deadline.HasValue) { Docflow.PublicFunctions.OfficialDocument.AddDeadlineHeaderToRight(block, managerAssignment.Deadline.Value, managerAssignment.Performer); } else if (resolutionAssignment != null && resolutionAssignment.Deadline.HasValue) { Docflow.PublicFunctions.OfficialDocument.AddDeadlineHeaderToRight(block, resolutionAssignment.Deadline.Value, resolutionAssignment.Performer); } } else if (managerAssignment != null || resolutionAssignment != null) { // Рассмотрение завершено. // Добавить заголовок. var completionDate = managerAssignment == null?resolutionAssignment.Completed.Value.ToUserTime() : managerAssignment.Completed.Value.ToUserTime(); var resolutionDate = Docflow.PublicFunctions.Module.ToShortDateShortTime(completionDate); block.AddLabel(Docflow.Resources.StateViewResolution, headerStyle); block.AddLineBreak(); block.AddLabel(string.Format("{0}: {1} {2}: {3}", DocumentReviewTasks.Resources.StateViewAuthor, author, Docflow.OfficialDocuments.Resources.StateViewDate, resolutionDate), performerStyle); block.AddLineBreak(); block.AddLabel(Docflow.Constants.Module.SeparatorText, separatorStyle); block.AddLineBreak(); block.AddEmptyLine(Docflow.Constants.Module.EmptyLineMargin); // Если поручения не созданы, или рассмотрение выполнено с результатом "Вынести резолюцию" или "Принято к сведению" и помощник сам не отправлял поручения в работу. // В старых задачах поручение и рассмотрение не связаны, поэтому обрабатываем такие случаи как резолюцию. if (!actionItems.Any() || (managerAssignment != null && managerAssignment.Result != RecordManagement.ReviewManagerAssignment.Result.AddAssignment && managerAssignment.Result != RecordManagement.ReviewDraftResolutionAssignment.Result.ForExecution && !(resolutionAssignment != null && resolutionAssignment.Result == RecordManagement.PreparingDraftResolutionAssignment.Result.AddAssignment))) { var comment = resolutionAssignment != null && resolutionAssignment.Result == RecordManagement.PreparingDraftResolutionAssignment.Result.AddAssignment ? Docflow.PublicFunctions.Module.GetFormatedUserText(resolutionAssignment.Texts.Last().Body) : Docflow.PublicFunctions.Module.GetFormatedUserText(managerAssignment.Texts.Last().Body); block.AddLabel(comment); block.AddLineBreak(); } else { // Добавить информацию по каждому поручению. foreach (var actionItem in actionItems) { if (actionItem.IsCompoundActionItem == true) { foreach (var item in actionItem.ActionItemParts) { if (item.ActionItemPartExecutionTask != null) { Functions.ActionItemExecutionTask.AddActionItemInfo(block, item.ActionItemPartExecutionTask, author); } } } else { Functions.ActionItemExecutionTask.AddActionItemInfo(block, actionItem, author); } } } } return(block); }
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()); } } }