예제 #1
0
 /// <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());
 }
예제 #2
0
        public virtual void CompleteAssignment2(Sungero.Docflow.IFreeApprovalAssignment assignment, Sungero.Docflow.Server.FreeApprovalAssignmentArguments e)
        {
            Functions.FreeApprovalTask.SynchronizeAddendaAndAttachmentsGroup(_obj);

            // Выдать права на приложения.
            var recipientsToGrantRights = Functions.Module.GetTaskAssignees(_obj);

            Functions.FreeApprovalTask.GrantRightForAttachmentsToPerformers(_obj, recipientsToGrantRights);

            var assignmentsInWork = FreeApprovalAssignments.GetAll(asg => asg.Task.Equals(_obj) &&
                                                                   asg.TaskStartId == _obj.StartId &&
                                                                   asg.Status == Sungero.Workflow.AssignmentBase.Status.InProcess);

            if (assignment.Result == Sungero.Docflow.FreeApprovalAssignment.Result.ForRework && _obj.ReceiveNotice == true &&
                _schemeVersion >= SchemeVersions.V2 && assignmentsInWork.Any())
            {
                var notice = FreeApprovalNotifications.Create(_obj);
                notice.Performer = _obj.Author;
                var lastIterationId         = Functions.FreeApprovalTask.GetApprovalAssignmentLastIterationId(_obj);
                var firstApprovalAssignment = Functions.FreeApprovalTask.GetLastAssignmentWithoutNotice(_obj, lastIterationId).First();
                notice.LinkedFreeApprovalAssignment = firstApprovalAssignment;
                notice.Author = firstApprovalAssignment.Performer;
                var subject = Functions.Module.TrimSpecialSymbols(FreeApprovalTasks.Resources.ReworkNoticeSubject, _obj.ForApprovalGroup.ElectronicDocuments.First().Name);
                notice.Subject = subject.Length > FreeApprovalNotifications.Info.Properties.Subject.Length ?
                                 subject.Substring(0, FreeApprovalNotifications.Info.Properties.Subject.Length) :
                                 subject;
            }

            if (assignment.Result == Sungero.Docflow.FreeApprovalAssignment.Result.Forward)
            {
                assignment.Forward(assignment.Addressee, ForwardingLocation.Next, assignment.AddresseeDeadline);
                var approver = _obj.Approvers.Where(x => Equals(x.Approver, assignment.Performer)).FirstOrDefault();
                _obj.Approvers.Remove(approver);

                var newApprover = _obj.Approvers.AddNew();
                newApprover.Approver = assignment.Addressee;
            }
        }