示例#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());
        }
示例#2
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();
        }
示例#3
0
 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());
 }
示例#4
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;
                    }
                }
            }
        }
示例#5
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);
        }
示例#6
0
        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);
        }
示例#7
0
        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();
        }
示例#8
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);
        }
示例#9
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);
            }
        }
示例#10
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;
            }
        }
示例#11
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();
                }
            }
        }
示例#12
0
 public static IQueryable <IActionItemExecutionAssignment> GetActionItems(IActionItemExecutionAssignment entity)
 {
     return(ActionItemExecutionAssignments.GetAll(j => entity.Equals(j.Task.ParentAssignment) && j.Status == Workflow.AssignmentBase.Status.InProcess));
 }