コード例 #1
0
        /// <summary>
        /// Добавить в грид задания на доработке нового сотрудника из задания.
        /// </summary>
        /// <param name="e">Обработчик блока.</param>
        /// <param name="assignment">Задание, которое надо обработать.</param>
        public static void AddToReworkAssigneeNewApprover(Sungero.Docflow.Server.FreeApprovalReworkAssignmentArguments e,
                                                          Sungero.Docflow.IFreeApprovalAssignment assignment)
        {
            var newApprover = e.Block.Approvers.FirstOrDefault(a => Equals(a.Approver, assignment.Performer)) ?? e.Block.Approvers.AddNew();

            newApprover.Approver = Sungero.Company.Employees.As(assignment.Performer);
            if (newApprover.Approver == null)
            {
                e.Block.Approvers.Remove(newApprover);
                return;
            }

            if (assignment.Result == Sungero.Docflow.FreeApprovalAssignment.Result.Approved)
            {
                newApprover.Approved = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Approved.IsApproved;
                newApprover.Action   = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.SendNotice;
            }
            else if (assignment.Result == Sungero.Docflow.FreeApprovalAssignment.Result.Forward)
            {
                newApprover.Approved = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Approved.NotApproved;
                newApprover.Action   = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.DoNotSend;
            }
            else
            {
                newApprover.Approved = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Approved.NotApproved;
                newApprover.Action   = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.SendForApproval;
            }
        }
コード例 #2
0
 public virtual void CompleteAssignment3(Sungero.Docflow.IFreeApprovalReworkAssignment assignment, Sungero.Docflow.Server.FreeApprovalReworkAssignmentArguments e)
 {
 }
コード例 #3
0
        public virtual void StartAssignment3(Sungero.Docflow.IFreeApprovalReworkAssignment assignment, Sungero.Docflow.Server.FreeApprovalReworkAssignmentArguments e)
        {
            var lastAssignment = FreeApprovalAssignments.GetAll()
                                 .Where(ass => Equals(ass.Task, _obj) && ass.Result == Docflow.FreeApprovalAssignment.Result.ForRework)
                                 .OrderByDescending(o => o.Completed)
                                 .FirstOrDefault();

            assignment.Author = lastAssignment.Performer;
        }
コード例 #4
0
        public virtual void StartBlock3(Sungero.Docflow.Server.FreeApprovalReworkAssignmentArguments e)
        {
            // Синхронизировать группу приложений документа.
            var document = _obj.ForApprovalGroup.ElectronicDocuments.FirstOrDefault();

            Functions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, document);
            if (OfficialDocuments.Is(document))
            {
                Functions.OfficialDocument.AddRelatedDocumentsToAttachmentGroup(OfficialDocuments.As(document), _obj.OtherGroup);
            }

            e.Block.Performers.Add(_obj.Author);
            e.Block.RelativeDeadlineDays = 3;
            e.Block.Subject = Functions.Module.TrimSpecialSymbols(FreeApprovalTasks.Resources.RevisionAsgSubject, _obj.ForApprovalGroup.ElectronicDocuments.First().Name);
            if (_obj.MaxDeadline.HasValue)
            {
                e.Block.NewDeadline = _obj.MaxDeadline;
            }

            var approvalAssignments = FreeApprovalAssignments.GetAll(asg => asg.Task.Equals(_obj) && asg.TaskStartId == _obj.StartId);
            var reworkAssignments   = FreeApprovalReworkAssignments.GetAll(asg => asg.Task.Equals(_obj) && asg.TaskStartId == _obj.StartId);
            var lastIterationId     = Functions.FreeApprovalTask.GetApprovalAssignmentLastIterationId(_obj);

            // Если заданий на доработку не было, то заполняем всю таблицу из заданий по задаче,
            // если были - то исполнителей берем из последнего задания на доработку, а результат и действие заполняем по последним заданиям на согласование.
            if (!reworkAssignments.Any())
            {
                foreach (var aprAssignment in approvalAssignments.Where(asg => asg.IterationId == lastIterationId).OrderBy(i => i.Created))
                {
                    Functions.FreeApprovalTask.AddToReworkAssigneeNewApprover(e, aprAssignment);
                }
            }
            else
            {
                var approvalReworkAssignmentFromLastIteration = reworkAssignments.OrderByDescending(asg => asg.Created).First();
                foreach (var asgApprover in approvalReworkAssignmentFromLastIteration.Approvers.OrderBy(asg => asg.Id))
                {
                    // Копируем все значения.
                    var newApprover = e.Block.Approvers.FirstOrDefault(a => Equals(a.Approver, asgApprover.Approver)) ?? e.Block.Approvers.AddNew();
                    newApprover.Approver = asgApprover.Approver;
                    newApprover.Approved = asgApprover.Approved;
                    newApprover.Action   = asgApprover.Action;

                    // Если результат согласования изменился \ согласование не было выполнено - перебиваем данные.
                    var lastApprovalAsg = approvalAssignments.Where(asg => asg.Performer.Equals(asgApprover.Approver)).OrderByDescending(asg => asg.IterationId).ThenByDescending(asg => asg.Modified).FirstOrDefault();
                    if (lastApprovalAsg != null)
                    {
                        if (lastApprovalAsg.Result == Sungero.Docflow.FreeApprovalAssignment.Result.Approved)
                        {
                            newApprover.Approved = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Approved.IsApproved;
                            newApprover.Action   = newApprover.Action == Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.SendForApproval ?
                                                   Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.SendNotice : Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.DoNotSend;
                        }
                        else if (lastApprovalAsg.Result == Sungero.Docflow.FreeApprovalAssignment.Result.Forward)
                        {
                            newApprover.Approved = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Approved.NotApproved;
                            newApprover.Action   = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.DoNotSend;
                        }
                        else
                        {
                            newApprover.Approved = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Approved.NotApproved;
                            newApprover.Action   = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.SendForApproval;
                        }
                    }
                }
                foreach (var newApproval in approvalAssignments.Where(a => a.IterationId == lastIterationId).OrderBy(i => i.Created))
                {
                    Functions.FreeApprovalTask.AddToReworkAssigneeNewApprover(e, newApproval);
                }
            }
        }