Example #1
0
        public virtual IQueryable <Sungero.Workflow.IAssignmentBase> OnChekingDataQuery(IQueryable <Sungero.Workflow.IAssignmentBase> query)
        {
            // Фильтр по типу.
            var typeFilterEnabled = _filter != null && (_filter.ActionItem || _filter.Other);
            var showActionItems   = !typeFilterEnabled || _filter.ActionItem;
            var showOthers        = !typeFilterEnabled || _filter.Other;

            var result = query
                         .Where(a => showActionItems && ActionItemSupervisorAssignments.Is(a) ||
                                showOthers && (Docflow.DeadlineExtensionAssignments.Is(a) ||
                                               RecordManagement.DeadlineExtensionAssignments.Is(a) ||
                                               ReportRequestCheckAssignments.Is(a) ||
                                               Workflow.ReviewAssignments.Is(a) ||
                                               CheckReturnCheckAssignments.Is(a) ||
                                               AcquaintanceFinishAssignments.Is(a)));

            // Запрос непрочитанных без фильтра.
            if (_filter == null)
            {
                return(RecordManagement.PublicFunctions.Module.ApplyCommonSubfolderFilters(result));
            }

            // Фильтры по статусу, замещению и периоду.
            result = RecordManagement.PublicFunctions.Module.ApplyCommonSubfolderFilters(result, _filter.InProcess,
                                                                                         _filter.Last30Days, _filter.Last90Days, _filter.Last180Days, false);

            return(result);
        }
Example #2
0
        public Sungero.Core.StateView GetStateView()
        {
            var stateView = StateView.Create();

            // Блок "От кого".
            var taskBeginText = _obj.Texts.OrderByDescending(t => t.Created).FirstOrDefault();
            var comment       = taskBeginText != null ? taskBeginText.Body : string.Empty;

            comment = comment != AcquaintanceTasks.Resources.TaskAutoText ? comment : string.Empty;
            if (_obj.Started.HasValue)
            {
                Docflow.PublicFunctions.OfficialDocument
                .AddUserActionBlock(stateView, _obj.Author, AcquaintanceTasks.Resources.StateViewDocumentSendFromAcquaintance, _obj.Started.Value, _obj, comment, _obj.StartedBy);
            }
            else
            {
                Docflow.PublicFunctions.OfficialDocument
                .AddUserActionBlock(stateView, _obj.Author, Docflow.ApprovalTasks.Resources.StateViewTaskDrawCreated, _obj.Created.Value, _obj, comment, _obj.Author);
            }

            // Блок "Задача".
            var taskBlock = this.AddTaskBlock(stateView);

            // "Ознакомление в электронном виде".
            var assignments = AcquaintanceAssignments.GetAll()
                              .Where(a => Equals(a.Task, _obj))
                              .Where(a => a.Created >= _obj.Started)
                              .ToList();
            var acquaintantedAssignments = assignments
                                           .Where(a => a.Status == Workflow.AssignmentBase.Status.Completed)
                                           .Where(a => Equals(a.CompletedBy, a.Performer))
                                           .ToList();
            var attentionAssignments = assignments
                                       .Where(a => a.Status == Workflow.AssignmentBase.Status.Completed)
                                       .Where(a => !Equals(a.CompletedBy, a.Performer))
                                       .ToList();

            // "Ознакомление под собственноручную подпись".
            var isElectronicAcquaintance = _obj.IsElectronicAcquaintance == true;

            if (!isElectronicAcquaintance)
            {
                // Задания выполненные не лично считаются также ознакомленными.
                acquaintantedAssignments = assignments
                                           .Where(a => a.Status == Workflow.AssignmentBase.Status.Completed)
                                           .ToList();

                // Заданий требующих внимания нет.
                attentionAssignments = new List <IAcquaintanceAssignment>();
            }

            // Блок "Ознакомленные".
            if (acquaintantedAssignments.Count > 1)
            {
                this.AddSelfCompletedAssignmentsBlocks(taskBlock, acquaintantedAssignments, isElectronicAcquaintance);
            }
            else
            {
                this.AddAssignmentBlock(taskBlock,
                                        acquaintantedAssignments.FirstOrDefault(),
                                        isElectronicAcquaintance,
                                        StateBlockIconSize.Large,
                                        AcquaintanceTasks.Resources.StateViewAsquaintance);
            }

            // Блок "Задания требующие внимания".
            foreach (var assignment in attentionAssignments)
            {
                this.AddAssignmentBlock(taskBlock,
                                        assignment,
                                        isElectronicAcquaintance,
                                        StateBlockIconSize.Large,
                                        AcquaintanceTasks.Resources.StateViewAsquaintance);
            }

            // Блок "Задания в работе".
            var inProcessAssignments = assignments
                                       .Where(a => a.Status != Workflow.AssignmentBase.Status.Completed)
                                       .ToList();

            this.AddInProcessAssignmentsBlock(taskBlock, inProcessAssignments);

            // Блок "Задание-контроль".
            var finishAssignments = AcquaintanceFinishAssignments.GetAll()
                                    .Where(a => Equals(a.Task, _obj))
                                    .Where(a => a.Created >= _obj.Started)
                                    .ToList();

            foreach (var assignment in finishAssignments)
            {
                this.AddAssignmentBlock(taskBlock,
                                        assignment,
                                        isElectronicAcquaintance,
                                        StateBlockIconSize.Large,
                                        AcquaintanceTasks.Resources.StateViewFinishAssignment);
            }

            return(stateView);
        }
Example #3
0
        /// <summary>
        /// Добавить задания на ознакомление.
        /// </summary>
        /// <param name="parentBlock">Родительский блок.</param>
        /// <param name="assignment">Задание на ознакомление.</param>
        /// <param name="isElectronicAcquaintance">Признак электронного ознакомления.</param>
        /// <param name="iconSize">Размер иконки.</param>
        /// <param name="header">Заголовок.</param>
        public void AddAssignmentBlock(Sungero.Core.StateBlock parentBlock,
                                       IAssignment assignment,
                                       bool isElectronicAcquaintance,
                                       Sungero.Core.StateBlockIconSize iconSize,
                                       string header)
        {
            if (assignment == null)
            {
                return;
            }

            var headerStyle            = Docflow.PublicFunctions.Module.CreateHeaderStyle(false);
            var noteStyle              = Docflow.PublicFunctions.Module.CreateNoteStyle();
            var separatorStyle         = Docflow.PublicFunctions.Module.CreateSeparatorStyle();
            var performerDeadlineStyle = Docflow.PublicFunctions.Module.CreatePerformerDeadlineStyle();

            // Сущность (ссылка).
            var block = parentBlock.AddChildBlock();

            block.Entity = assignment;

            // Иконка.
            block.AssignIcon(Docflow.ApprovalRuleBases.Resources.Assignment, iconSize);
            var selfCompleted = !isElectronicAcquaintance || Equals(assignment.Performer, assignment.CompletedBy);

            if (assignment.Result != null)
            {
                block.AssignIcon(Docflow.ApprovalTasks.Resources.Completed, iconSize);
                if (iconSize == StateBlockIconSize.Small)
                {
                    block.AssignIcon(StateBlockIconType.Completed, iconSize);
                }

                if (!selfCompleted)
                {
                    block.AssignIcon(AcquaintanceTasks.Resources.SubstitutionAccept, iconSize);
                }
            }

            // Заголовок.
            if (!string.IsNullOrWhiteSpace(header))
            {
                block.AddLabel(header, headerStyle);
                block.AddLineBreak();
            }

            // Исполнитель.
            var performerName = Docflow.PublicFunctions.OfficialDocument.GetAuthor(assignment.Performer, assignment.CompletedBy);

            block.AddLabel(performerName, performerDeadlineStyle);

            // Срок.
            var deadline = assignment.Deadline.HasValue
        ? Docflow.PublicFunctions.Module.ToShortDateShortTime(assignment.Deadline.Value.ToUserTime())
        : Docflow.OfficialDocuments.Resources.StateViewWithoutTerm;

            deadline = string.Format("{0}: {1}", Docflow.OfficialDocuments.Resources.StateViewDeadline, deadline);
            if (assignment.Completed.HasValue)
            {
                var completed = Docflow.PublicFunctions.Module.ToShortDateShortTime(assignment.Completed.Value.ToUserTime());
                deadline = string.Format("{0}: {1}", Docflow.OfficialDocuments.Resources.StateViewDate, completed);
            }
            block.AddLabel(deadline, performerDeadlineStyle);

            // Комментарий.
            var comment = Docflow.PublicFunctions.Module.GetAssignmentUserComment(assignment);

            if (!string.IsNullOrWhiteSpace(comment))
            {
                block.AddLineBreak();
                block.AddLabel(Docflow.PublicConstants.Module.SeparatorText, separatorStyle);
                block.AddLineBreak();
                block.AddEmptyLine(Docflow.PublicConstants.Module.EmptyLineMargin);
                block.AddLabel(comment, noteStyle);
            }

            // Статус.
            var status = string.Empty;

            if (assignment.Status == Workflow.AssignmentBase.Status.InProcess)
            {
                status = Docflow.ApprovalTasks.Resources.StateViewInProcess;
                if (assignment.IsRead != true)
                {
                    status = Docflow.ApprovalTasks.Resources.StateViewUnRead;
                }
            }

            if (assignment.Status == Workflow.AssignmentBase.Status.Aborted ||
                assignment.Status == Workflow.AssignmentBase.Status.Suspended)
            {
                status = Docflow.ApprovalTasks.Resources.StateViewAborted.ToString();
            }

            if (assignment.Status == Workflow.AssignmentBase.Status.Completed)
            {
                status = AcquaintanceTasks.Resources.StateViewAcquainted;
                if (!selfCompleted || AcquaintanceFinishAssignments.Is(assignment))
                {
                    status = AcquaintanceTasks.Resources.StateViewCompleted;
                }
            }

            Docflow.PublicFunctions.Module.AddInfoToRightContent(block, status);
            if (assignment.Status == Workflow.AssignmentBase.Status.InProcess && assignment.Deadline.HasValue)
            {
                Docflow.PublicFunctions.OfficialDocument.AddDeadlineHeaderToRight(block, assignment.Deadline.Value, assignment.Performer);
            }
        }
Example #4
0
        /// <summary>
        /// Добавить блок задачи на ознакомление.
        /// </summary>
        /// <param name="stateView">Схема представления.</param>
        /// <returns>Новый блок.</returns>
        public Sungero.Core.StateBlock AddTaskBlock(Sungero.Core.StateView stateView)
        {
            // Стили.
            var isDraft     = _obj.Status == Workflow.Task.Status.Draft;
            var headerStyle = Docflow.PublicFunctions.Module.CreateHeaderStyle(isDraft);
            var labelStyle  = Docflow.PublicFunctions.Module.CreateStyle(false, isDraft, false);
            var noteStyle   = Docflow.PublicFunctions.Module.CreateNoteStyle(isDraft);

            // Блок задачи.
            var taskBlock = stateView.AddBlock();

            taskBlock.Entity     = _obj;
            taskBlock.IsExpanded = _obj.Status == Workflow.Task.Status.InProcess;

            // Иконка.
            taskBlock.AssignIcon(AcquaintanceTasks.Resources.AcquaintanceTaskIco, StateBlockIconSize.Large);

            // Заголовок.
            var header = AcquaintanceTasks.Resources.StateViewDocumentSelfSignAcquaintance;

            if (_obj.IsElectronicAcquaintance == true)
            {
                header = AcquaintanceTasks.Resources.StateViewDocumentElectonicAcquaintance;
            }
            taskBlock.AddLabel(header, headerStyle);
            taskBlock.AddLineBreak();

            // Срок.
            var deadline = _obj.Deadline.HasValue ?
                           Docflow.PublicFunctions.Module.ToShortDateShortTime(_obj.Deadline.Value.ToUserTime()) :
                           Docflow.OfficialDocuments.Resources.StateViewWithoutTerm;

            taskBlock.AddLabel(string.Format("{0}: {1}", Docflow.OfficialDocuments.Resources.StateViewDeadline, deadline), noteStyle);

            // Статус.
            var status = string.Empty;

            if (_obj.Status == Workflow.Task.Status.InProcess)
            {
                status = Docflow.ApprovalTasks.Resources.StateViewInProcess;
                var onReview = AcquaintanceFinishAssignments.GetAll()
                               .Where(a => Equals(a.Task, _obj))
                               .Where(a => a.Created >= _obj.Started)
                               .Any();
                if (onReview)
                {
                    status = AcquaintanceTasks.Resources.StateViewFinish;
                }
            }
            else if (_obj.Status == Workflow.Task.Status.Completed)
            {
                status = Docflow.ApprovalTasks.Resources.StateViewCompleted;
            }
            else if (_obj.Status == Workflow.Task.Status.Aborted)
            {
                status = Docflow.ApprovalTasks.Resources.StateViewAborted;
            }
            else if (_obj.Status == Workflow.Task.Status.Suspended)
            {
                status = Docflow.ApprovalTasks.Resources.StateViewSuspended;
            }
            else if (_obj.Status == Workflow.Task.Status.Draft)
            {
                status = Docflow.ApprovalTasks.Resources.StateViewDraft;
            }

            Docflow.PublicFunctions.Module.AddInfoToRightContent(taskBlock, status, labelStyle);

            return(taskBlock);
        }