Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        public virtual void StartBlock6(Sungero.RecordManagement.Server.ActionItemSupervisorAssignmentArguments e)
        {
            // Задать тему, исполнителей и срок.
            e.Block.Subject = Functions.ActionItemExecutionTask.GetActionItemExecutionSubject(_obj, ActionItemExecutionTasks.Resources.ControlWorkFromJob);
            var controller = _obj.Supervisor;

            if (controller != null)
            {
                e.Block.Performers.Add(controller);
            }

            var assignmentsDeadLine = 1;

            e.Block.RelativeDeadlineDays = assignmentsDeadLine;

            // Задать состояние поручения.
            _obj.ExecutionState = ExecutionState.OnControl;

            // Заполнить даты поручения.
            e.Block.ScheduledDate = _obj.Deadline;

            // Для подзадач соисполнителям заполнять данными из основной задачи.
            if (_obj.ActionItemType != ActionItemType.Main)
            {
                var mainActionItemExecution = ActionItemExecutionTasks.As(_obj.MainTask);
                if (mainActionItemExecution != null && !(mainActionItemExecution.IsCompoundActionItem ?? false))
                {
                    // Задать автора.
                    e.Block.AssignedBy = mainActionItemExecution.AssignedBy;
                }
            }

            Docflow.PublicFunctions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, _obj.DocumentsGroup.OfficialDocuments.FirstOrDefault());
        }
Exemplo n.º 3
0
        public Sungero.Core.StateView GetStateView()
        {
            var parent     = _obj.ParentAssignment != null ? _obj.ParentAssignment.Task : _obj.ParentTask;
            var parentTask = ActionItemExecutionTasks.As(parent);

            return(Functions.ActionItemExecutionTask.GetStateView(parentTask));
        }
Exemplo n.º 4
0
        public virtual void ForRework(Sungero.Workflow.Client.ExecuteResultActionArgs e)
        {
            if (!RecordManagement.Functions.ActionItemSupervisorAssignment.ValidateActionItemSupervisorAssignment(_obj, e))
            {
                return;
            }

            var dialogID = Constants.ActionItemExecutionTask.ActionItemSupervisorAssignmentConfirmDialogID.ForRework;

            if (Docflow.PublicFunctions.Module.CheckDeadline(ActionItemExecutionTasks.As(_obj.Task).Assignee, _obj.NewDeadline, Calendar.Now))
            {
                if (!Docflow.PublicFunctions.Module.ShowDialogGrantAccessRightsWithConfirmationDialog(_obj, _obj.OtherGroup.All.ToList(), e.Action, dialogID))
                {
                    e.Cancel();
                }
            }
            else
            {
                // Если срок вышел, рисуем диалог с дополнительным описанием.
                if (Docflow.PublicFunctions.Module.ShowDialogGrantAccessRights(_obj, _obj.OtherGroup.All.ToList()) != false)
                {
                    var description = ActionItemSupervisorAssignments.Resources.NewDeadlineLessThenTodayDescription;
                    if (!Docflow.PublicFunctions.Module.ShowConfirmationDialog(e.Action.ConfirmationMessage, description, null, dialogID))
                    {
                        e.Cancel();
                    }
                }
            }
        }
Exemplo n.º 5
0
        public static IDeadlineExtensionTask GetDeadlineExtension(Sungero.RecordManagement.IActionItemExecutionAssignment executionAssignment)
        {
            // Проверить наличие старой задачи на продление срока.
            var oldTask = DeadlineExtensionTasks.GetAll()
                          .Where(j => Equals(j.ParentAssignment, executionAssignment))
                          .Where(j => j.Status == Workflow.Task.Status.InProcess || j.Status == Workflow.Task.Status.Draft)
                          .FirstOrDefault();

            if (oldTask != null)
            {
                return(oldTask);
            }

            var task = DeadlineExtensionTasks.CreateAsSubtask(executionAssignment);

            task.ActionItemExecutionAssignment = executionAssignment;

            task.MaxDeadline = (executionAssignment.Deadline < Calendar.Now) ? Calendar.Today : executionAssignment.Deadline;
            task.NeedsReview = false;
            task.ActionItem  = executionAssignment.ActionItem;
            var itemExecution = ActionItemExecutionTasks.As(executionAssignment.Task);
            var document      = ActionItemExecutionTasks.Get(itemExecution.Id).DocumentsGroup.OfficialDocuments.FirstOrDefault();

            if (document != null)
            {
                task.DocumentsGroup.OfficialDocuments.Add(document);
            }
            task.Subject = Functions.DeadlineExtensionTask.GetDeadlineExtensionSubject(task, DeadlineExtensionTasks.Resources.ExtendDeadlineTaskSubject);

            // Определить исполнителя. Для составного поручения взять ведущую задачу.
            var leadItemExecution   = itemExecution;
            var parentItemExecution = ActionItemExecutionTasks.As(itemExecution.ParentTask);

            if (parentItemExecution != null && parentItemExecution.IsCompoundActionItem == true)
            {
                leadItemExecution = parentItemExecution;
            }

            // Исполнителем указать контролёра, если его нет, то стартовавшего задачу, если и его нет, то автора.
            // Если контроля не было, то стартовавшего задачу.
            if (itemExecution.IsUnderControl == true)
            {
                task.Assignee = leadItemExecution.Supervisor ?? leadItemExecution.StartedBy;
            }
            else
            {
                task.Assignee = leadItemExecution.StartedBy;
            }

            if (task.Assignee == null || task.Assignee.IsSystem == true)
            {
                task.Assignee = leadItemExecution.Author;
            }

            task.CurrentDeadline = executionAssignment.Deadline;
            task.Author          = executionAssignment.Performer;

            return(task);
        }
Exemplo n.º 6
0
        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();
        }
Exemplo n.º 7
0
 public static List <IActionItemExecutionTask> GetSubActionItemExecution(IActionItemExecutionAssignment entity)
 {
     return(ActionItemExecutionTasks
            .GetAll()
            .Where(j => j.Status.Value == Workflow.Task.Status.InProcess)
            .Where(j => j.ActionItemType == ActionItemType.Additional)
            .Where(j => j.ParentAssignment == entity)
            .ToList());
 }
Exemplo n.º 8
0
        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;
                    }
                }
            }
        }
Exemplo n.º 9
0
        public virtual bool Monitoring11Result()
        {
            if (_obj.IsCompoundActionItem != true)
            {
                return(true);
            }

            return(!ActionItemExecutionTasks.GetAll(j => Equals(j.ParentTask, _obj) &&
                                                    j.ActionItemType != ActionItemType.Main &&
                                                    j.Status.Value == Workflow.Task.Status.InProcess &&
                                                    j.ParentStartId == _obj.StartId).Any());
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        public virtual IQueryable <Sungero.Workflow.ITask> ActionItemsDataQuery(IQueryable <Sungero.Workflow.ITask> query)
        {
            query = query.Where(t => ActionItemExecutionTasks.Is(t));
            if (_filter == null)
            {
                return(Functions.Module.ApplyCommonSubfolderFilters(query));
            }

            // Фильтры по статусу и периоду.
            query = Functions.Module.ApplyCommonSubfolderFilters(query, _filter.InProcess,
                                                                 _filter.Last30Days, _filter.Last90Days, _filter.Last180Days, false);
            return(query);
        }
Exemplo n.º 12
0
        public virtual void CompleteAssignment6(Sungero.RecordManagement.IReviewResolutionAssignment assignment, Sungero.RecordManagement.Server.ReviewResolutionAssignmentArguments e)
        {
            var document = _obj.DocumentForReviewGroup.OfficialDocuments.First();

            // Если поручения не созданы, то изменить статус исполнения - не требует исполнения.
            if (!ActionItemExecutionTasks.GetAll(t => t.Status == Workflow.Task.Status.InProcess && Equals(t.ParentAssignment, assignment)).Any())
            {
                document.ExecutionState = ExecutionState.WithoutExecut;
            }
            else
            {
                document.ExecutionState = ExecutionState.OnExecution;
            }
        }
Exemplo n.º 13
0
        /// <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));
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
        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));
            }
        }
Exemplo n.º 16
0
        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);
                }
            }
        }
Exemplo n.º 17
0
        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;
                    }
                }
            }
        }
Exemplo n.º 18
0
        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);
        }
Exemplo n.º 19
0
        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);
            }
        }
Exemplo n.º 20
0
        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);
            }
        }
Exemplo n.º 21
0
        /// <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);
        }
Exemplo n.º 22
0
        /// <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());
        }
Exemplo n.º 23
0
        public Sungero.Core.StateView GetStateView()
        {
            var task = ActionItemExecutionTasks.As(_obj.Task);

            return(Functions.ActionItemExecutionTask.GetStateView(task));
        }
Exemplo n.º 24
0
        /// <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);
            }
        }
Exemplo n.º 25
0
        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;
            }
        }
Exemplo n.º 26
0
        public virtual void StartBlock2(Sungero.RecordManagement.Server.ActionItemSupervisorNotificationArguments e)
        {
            // Задать тему.
            e.Block.Subject = Functions.ActionItemExecutionTask.GetActionItemExecutionSubject(_obj, ActionItemExecutionTasks.Resources.ControlNoticeSubject);

            // Задать исполнителя.
            if (_obj.Supervisor != null && _obj.Author != _obj.Supervisor && _obj.StartedBy != _obj.Supervisor && (_obj.ActionItemType == ActionItemType.Main))
            {
                e.Block.Performers.Add(_obj.Supervisor);
            }

            Functions.ActionItemExecutionTask.GrantRightsToAttachments(_obj, _obj.DocumentsGroup.All.ToList(), true);
            Functions.ActionItemExecutionTask.GrantRightsToAttachments(_obj, _obj.AddendaGroup.All.ToList(), true);

            var document = _obj.DocumentsGroup.OfficialDocuments.FirstOrDefault();

            if (document != null)
            {
                var documentsGroupGuid    = Docflow.PublicConstants.Module.TaskMainGroup.ActionItemExecutionTask;
                var nonStartedActiveTasks = ActionItemExecutionTasks
                                            .GetAll(t => t.AttachmentDetails.Any(a => a.GroupId == documentsGroupGuid && a.AttachmentId == document.Id) && t.Status == Workflow.Task.Status.InProcess && t.Id != _obj.Id)
                                            .ToList();

                foreach (var task in nonStartedActiveTasks)
                {
                    var hasAssignments = Workflow.Assignments.GetAll(s => Equals(task, s.Task)).Any();
                    var hasSubTasks    = Workflow.Tasks.GetAll(s => Equals(task, s.ParentTask)).Any();
                    if (!hasAssignments && !hasSubTasks)
                    {
                        Logger.DebugFormat("Granting rights for task {0}. Current Task: {1}", task.Id, _obj.Id);
                        Functions.ActionItemExecutionTask.GrantRightsToAttachments(task, task.DocumentsGroup.All.ToList(), true);
                        Functions.ActionItemExecutionTask.GrantRightsToAttachments(task, task.AddendaGroup.All.ToList(), true);
                    }
                }
            }

            Docflow.PublicFunctions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, _obj.DocumentsGroup.OfficialDocuments.FirstOrDefault());

            // Выдача прав соисполнителям и составным, чтобы Script10Execute в цикле не зависал при блокировках документа
            if (document != null)
            {
                var assignees     = _obj.CoAssignees.Select(a => a.Assignee);
                var partAssignees = _obj.ActionItemParts.Select(p => p.Assignee);
                foreach (var assignee in assignees.Concat(partAssignees))
                {
                    if (!document.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.Read, assignee))
                    {
                        document.AccessRights.Grant(assignee, DefaultAccessRightsTypes.Read);
                    }
                }
            }

            // Задать состояние поручения.
            if (_obj.ExecutionState != ExecutionState.OnRework && _obj.Assignee != null)
            {
                _obj.ExecutionState = ExecutionState.OnExecution;
            }

            // Заполнить исполнителя, если это первое поручение по документу.
            if (document != null && document.Assignee == null && document.State.Properties.Assignee.IsVisible)
            {
                document.Assignee = _obj.Assignee;
            }

            // Обновить статус исполнения документа
            Functions.ActionItemExecutionTask.SetDocumentStates(_obj);
        }
Exemplo n.º 27
0
        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();
                }
            }
        }
Exemplo n.º 28
0
        /// <summary>
        /// Добавить блок информации о рассмотрении документа руководителем.
        /// </summary>
        /// <param name="stateView">Схема представления.</param>
        /// <param name="startDate">Дата начала текущей итерации рассмотрения.</param>
        /// <returns>Полученный блок.</returns>
        private StateBlock AddReviewManagerBlock(StateView stateView, DateTime startDate)
        {
            var managerAssignment    = this.GetManagerAssignment(startDate);
            var resolutionAssignment = this.GetPreparingDraftResolutionAssignment(startDate);

            var author = managerAssignment != null?
                         Docflow.PublicFunctions.OfficialDocument.GetAuthor(managerAssignment.Performer, managerAssignment.CompletedBy) :
                             Docflow.PublicFunctions.OfficialDocument.GetAuthor(_obj.Addressee, _obj.Addressee);

            var actionItems = ActionItemExecutionTasks.GetAll()
                              .Where(t => (t.ParentAssignment != null && (Equals(t.ParentAssignment.Task, _obj) || Equals(t.ParentAssignment, managerAssignment))) &&
                                     t.Status != Workflow.Task.Status.Draft &&
                                     Equals(t.AssignedBy, DocumentReviewTasks.As(_obj).Addressee))
                              .OrderBy(t => t.Started);
            var isCompleted = (managerAssignment != null && managerAssignment.Status == Workflow.AssignmentBase.Status.Completed) ||
                              (resolutionAssignment != null && resolutionAssignment.Result == RecordManagement.PreparingDraftResolutionAssignment.Result.AddAssignment);
            var isReworkresolution = managerAssignment != null && ReviewDraftResolutionAssignments.Is(managerAssignment) &&
                                     managerAssignment.Result == RecordManagement.ReviewDraftResolutionAssignment.Result.AddResolution &&
                                     !(resolutionAssignment != null && resolutionAssignment.Result == RecordManagement.PreparingDraftResolutionAssignment.Result.AddAssignment);
            var isDraft = _obj.Status == Workflow.Task.Status.Draft;

            var headerStyle    = Docflow.PublicFunctions.Module.CreateHeaderStyle(isDraft);
            var performerStyle = Docflow.PublicFunctions.Module.CreatePerformerDeadlineStyle(isDraft);
            var labelStyle     = Docflow.PublicFunctions.Module.CreateStyle(false, isDraft, false);
            var separatorStyle = Docflow.PublicFunctions.Module.CreateSeparatorStyle();

            // Добавить блок. Установить иконку и сущность.
            var block = stateView.AddBlock();

            block.Entity = _obj;
            if (isCompleted && !isReworkresolution)
            {
                block.AssignIcon(ReviewManagerAssignments.Info.Actions.AddResolution, StateBlockIconSize.Large);
            }
            else
            {
                block.AssignIcon(StateBlockIconType.OfEntity, StateBlockIconSize.Large);
            }

            // Рассмотрение руководителем ещё в работе.
            if (!isCompleted || isReworkresolution)
            {
                // Добавить заголовок.
                block.AddLabel(Docflow.Resources.StateViewDocumentReview, headerStyle);
                block.AddLineBreak();
                if (managerAssignment != null && !isReworkresolution)
                {
                    if (managerAssignment.Status == Workflow.AssignmentBase.Status.Aborted)
                    {
                        Docflow.PublicFunctions.Module.AddInfoToRightContent(block, Docflow.ApprovalTasks.Resources.StateViewAborted);
                    }
                    else if (managerAssignment.IsRead == false)
                    {
                        Docflow.PublicFunctions.Module.AddInfoToRightContent(block, Docflow.ApprovalTasks.Resources.StateViewUnRead);
                    }
                    else
                    {
                        this.AddAssignmentStatusInfoToRight(block, labelStyle, managerAssignment);
                    }
                }
                else if (_obj.Status == Workflow.Task.Status.Completed)
                {
                    Docflow.PublicFunctions.Module.AddInfoToRightContent(block, Docflow.ApprovalTasks.Resources.StateViewCompleted);
                }
                else if (_obj.Status == Workflow.Task.Status.Aborted)
                {
                    Docflow.PublicFunctions.Module.AddInfoToRightContent(block, Docflow.ApprovalTasks.Resources.StateViewAborted);
                }

                // Адресат.
                block.AddLabel(string.Format("{0}: {1}",
                                             Docflow.Resources.StateViewAddressee,
                                             Company.PublicFunctions.Employee.GetShortName(_obj.Addressee, false)), performerStyle);

                var deadline = managerAssignment != null && !isReworkresolution ?
                               managerAssignment.Deadline : _obj.MaxDeadline;
                var deadlineString = deadline.HasValue ?
                                     Docflow.PublicFunctions.Module.ToShortDateShortTime(deadline.Value.ToUserTime()) :
                                     Docflow.OfficialDocuments.Resources.StateViewWithoutTerm;

                block.AddLabel(string.Format("{0}: {1}", Docflow.OfficialDocuments.Resources.StateViewDeadline, deadlineString),
                               performerStyle);

                if (!isReworkresolution && managerAssignment != null && managerAssignment.Deadline.HasValue)
                {
                    Docflow.PublicFunctions.OfficialDocument.AddDeadlineHeaderToRight(block, managerAssignment.Deadline.Value, managerAssignment.Performer);
                }
                else if (resolutionAssignment != null && resolutionAssignment.Deadline.HasValue)
                {
                    Docflow.PublicFunctions.OfficialDocument.AddDeadlineHeaderToRight(block, resolutionAssignment.Deadline.Value, resolutionAssignment.Performer);
                }
            }
            else if (managerAssignment != null || resolutionAssignment != null)
            {
                // Рассмотрение завершено.
                // Добавить заголовок.
                var completionDate = managerAssignment == null?resolutionAssignment.Completed.Value.ToUserTime() : managerAssignment.Completed.Value.ToUserTime();

                var resolutionDate = Docflow.PublicFunctions.Module.ToShortDateShortTime(completionDate);
                block.AddLabel(Docflow.Resources.StateViewResolution, headerStyle);
                block.AddLineBreak();
                block.AddLabel(string.Format("{0}: {1} {2}: {3}",
                                             DocumentReviewTasks.Resources.StateViewAuthor,
                                             author,
                                             Docflow.OfficialDocuments.Resources.StateViewDate,
                                             resolutionDate), performerStyle);
                block.AddLineBreak();
                block.AddLabel(Docflow.Constants.Module.SeparatorText, separatorStyle);
                block.AddLineBreak();
                block.AddEmptyLine(Docflow.Constants.Module.EmptyLineMargin);

                // Если поручения не созданы, или рассмотрение выполнено с результатом "Вынести резолюцию" или "Принято к сведению" и помощник сам не отправлял поручения в работу.
                // В старых задачах поручение и рассмотрение не связаны, поэтому обрабатываем такие случаи как резолюцию.
                if (!actionItems.Any() || (managerAssignment != null && managerAssignment.Result != RecordManagement.ReviewManagerAssignment.Result.AddAssignment &&
                                           managerAssignment.Result != RecordManagement.ReviewDraftResolutionAssignment.Result.ForExecution &&
                                           !(resolutionAssignment != null && resolutionAssignment.Result == RecordManagement.PreparingDraftResolutionAssignment.Result.AddAssignment)))
                {
                    var comment = resolutionAssignment != null && resolutionAssignment.Result == RecordManagement.PreparingDraftResolutionAssignment.Result.AddAssignment ?
                                  Docflow.PublicFunctions.Module.GetFormatedUserText(resolutionAssignment.Texts.Last().Body) :
                                  Docflow.PublicFunctions.Module.GetFormatedUserText(managerAssignment.Texts.Last().Body);
                    block.AddLabel(comment);
                    block.AddLineBreak();
                }
                else
                {
                    // Добавить информацию по каждому поручению.
                    foreach (var actionItem in actionItems)
                    {
                        if (actionItem.IsCompoundActionItem == true)
                        {
                            foreach (var item in actionItem.ActionItemParts)
                            {
                                if (item.ActionItemPartExecutionTask != null)
                                {
                                    Functions.ActionItemExecutionTask.AddActionItemInfo(block, item.ActionItemPartExecutionTask, author);
                                }
                            }
                        }
                        else
                        {
                            Functions.ActionItemExecutionTask.AddActionItemInfo(block, actionItem, author);
                        }
                    }
                }
            }
            return(block);
        }
Exemplo n.º 29
0
        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());
                }
            }
        }