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 PrintActionItem(Sungero.Domain.Client.ExecuteActionArgs e) { var report = Reports.GetActionItemPrintReport(); report.Task = ActionItemExecutionTasks.As(_obj.Task); report.Assignment = ActionItemExecutionAssignments.As(_obj); report.Open(); }
public virtual bool Monitoring9Result() { return((_obj.IsCompoundActionItem ?? false) || _obj.CoAssignees.Count == 0 || ActionItemExecutionAssignments.GetAll() .Where(j => j.Task == _obj) .Where(j => j.Status == Workflow.AssignmentBase.Status.InProcess) .Where(j => j.Performer == _obj.Assignee) .Where(j => j.TaskStartId == _obj.StartId) .Any()); }
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 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.IAssignmentBase> ForExecutionDataQuery(IQueryable <Sungero.Workflow.IAssignmentBase> query) { var result = query.Where(a => ActionItemExecutionAssignments.Is(a)); // Запрос количества непрочитанных без фильтра. if (_filter == null) { return(Functions.Module.ApplyCommonSubfolderFilters(result)); } // Фильтры по статусу, замещению и периоду. result = Functions.Module.ApplyCommonSubfolderFilters(result, _filter.InProcess, _filter.Last30Days, _filter.Last90Days, _filter.Last180Days, false); return(result); }
private void CheckDeadline(Sungero.Presentation.DateTimeValueInputEventArgs e, IUser user) { var warnMessage = Docflow.PublicFunctions.Module.CheckDeadlineByWorkCalendar(user, e.NewValue); if (!string.IsNullOrEmpty(warnMessage)) { e.AddWarning(warnMessage); } // Предупреждение на установку даты больше даты основного поручения. var parentAssignment = ActionItemExecutionAssignments.As(_obj.ParentAssignment); if (parentAssignment != null && Docflow.PublicFunctions.Module.CheckDeadline(e.NewValue, parentAssignment.Deadline)) { e.AddWarning(ActionItemExecutionTasks.Resources.DeadlineSubActionItemExecutionFormat(parentAssignment.Deadline.Value.ToUserTime().ToShortDateString())); } _obj.State.Controls.Control.Refresh(); }
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 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 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 static IQueryable <IActionItemExecutionAssignment> GetActionItems(IActionItemExecutionAssignment entity) { return(ActionItemExecutionAssignments.GetAll(j => entity.Equals(j.Task.ParentAssignment) && j.Status == Workflow.AssignmentBase.Status.InProcess)); }