/// <summary> /// Получить все завершенные задания последней итерации с результатом на доработку, для которых не созданы уведомления. /// </summary> /// <param name="task">Задача.</param> /// <param name="lastIterationId">Ид последней итерации.</param> /// <returns>Список заданий.</returns> public static List <IFreeApprovalAssignment> GetLastAssignmentWithoutNotice(IFreeApprovalTask task, int?lastIterationId) { return(FreeApprovalAssignments.GetAll(asg => asg.Task.Equals(task) && asg.TaskStartId == task.StartId && asg.IterationId == lastIterationId && asg.Status == Sungero.Workflow.AssignmentBase.Status.Completed && asg.Result == Sungero.Docflow.FreeApprovalAssignment.Result.ForRework && !FreeApprovalNotifications.GetAll().Any(n => Equals(n.LinkedFreeApprovalAssignment, asg))).ToList()); }
/// <summary> /// Выдать права на вложения, не выше прав инициатора задачи. /// </summary> /// <param name="task">Задача.</param> /// <param name="performers">Исполнители.</param> public static void GrantRightForAttachmentsToPerformers(IFreeApprovalTask task, List <IRecipient> performers) { foreach (var performer in performers) { // На основной документ - на изменение. var approvalDocument = task.ForApprovalGroup.ElectronicDocuments.First(); if (!approvalDocument.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.FullAccess, performer)) { approvalDocument.AccessRights.Grant(performer, DefaultAccessRightsTypes.Change); } // На приложения - на изменение, но не выше, чем у инициатора. foreach (var document in task.AddendaGroup.ElectronicDocuments) { if (document.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.FullAccess, performer)) { continue; } var rightType = document.AccessRights.CanUpdate(task.Author) ? DefaultAccessRightsTypes.Change : DefaultAccessRightsTypes.Read; document.AccessRights.Grant(performer, rightType); } } }
/// <summary> /// Получить номер последней итерации заданий на согласование. /// </summary> /// <param name="task">Задача.</param> /// <returns>Номер итерации.</returns> public static int?GetApprovalAssignmentLastIterationId(IFreeApprovalTask task) { return(FreeApprovalAssignments.GetAll(asg => asg.Task.Equals(task) && asg.TaskStartId == task.StartId).Select(asg => asg.IterationId).Max()); }