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)); }
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 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()); } } }
public Sungero.Core.StateView GetStateView() { var parentTask = ActionItemExecutionTasks.As(_obj.ParentAssignment.Task); return(Functions.ActionItemExecutionTask.GetStateView(parentTask)); }
/// <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); } }
/// <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)); }