/// <summary> /// Добавить задания в работе. /// </summary> /// <param name="taskBlock">Блок задачи.</param> /// <param name="assignments">Задания на ознакомление в работе.</param> public void AddInProcessAssignmentsBlock(Sungero.Core.StateBlock taskBlock, List <IAcquaintanceAssignment> assignments) { if (!assignments.Any()) { return; } // Группировка. var parentBlock = taskBlock.AddChildBlock(); parentBlock.IsExpanded = false; parentBlock.NeedGroupChildren = true; // Добавить ссылку на задание, если оно одно. if (assignments.Count == 1) { parentBlock.Entity = assignments.FirstOrDefault(); } // Иконка. var isAborted = assignments.First().Status == Workflow.AssignmentBase.Status.Aborted; parentBlock.AssignIcon(Docflow.ApprovalRuleBases.Resources.Assignment, StateBlockIconSize.Large); if (isAborted) { parentBlock.AssignIcon(StateBlockIconType.Abort, StateBlockIconSize.Large); } // Заголовок. var headerStyle = Docflow.PublicFunctions.Module.CreateHeaderStyle(false); parentBlock.AddLabel(AcquaintanceTasks.Resources.StateViewAsquaintance, headerStyle); parentBlock.AddLineBreak(); // Исполнители. var performers = assignments.Select(a => Sungero.Company.Employees.As(a.Performer)).ToList(); var performersLabel = Docflow.PublicFunctions.OfficialDocument.GetPerformersInText(performers); parentBlock.AddLabel(performersLabel, Docflow.PublicFunctions.Module.CreatePerformerDeadlineStyle()); // Статус. var status = Docflow.ApprovalTasks.Resources.StateViewInProcess; if (isAborted) { status = Docflow.ApprovalTasks.Resources.StateViewAborted; } Docflow.PublicFunctions.Module.AddInfoToRightContent(parentBlock, status); }
/// <summary> /// Добавить задания на ознакомление. /// </summary> /// <param name="taskBlock">Блок задачи.</param> /// <param name="assignments">Лично выполненые задания на ознакомление.</param> /// <param name="isElectronicAcquaintance">Признак электронного ознакомления.</param> public void AddSelfCompletedAssignmentsBlocks(Sungero.Core.StateBlock taskBlock, List <IAcquaintanceAssignment> assignments, bool isElectronicAcquaintance) { if (!assignments.Any()) { return; } // Группировка. var parentBlock = taskBlock.AddChildBlock(); parentBlock.IsExpanded = false; parentBlock.NeedGroupChildren = true; // Иконка. parentBlock.AssignIcon(Docflow.ApprovalTasks.Resources.Completed, StateBlockIconSize.Large); // Заголовок. var headerStyle = Docflow.PublicFunctions.Module.CreateHeaderStyle(false); parentBlock.AddLabel(AcquaintanceTasks.Resources.StateViewAsquaintance, headerStyle); parentBlock.AddLineBreak(); // Исполнители. var performers = assignments.Select(a => Sungero.Company.Employees.As(a.Performer)).ToList(); var performersLabel = Docflow.PublicFunctions.OfficialDocument.GetPerformersInText(performers); parentBlock.AddLabel(performersLabel, Docflow.PublicFunctions.Module.CreatePerformerDeadlineStyle()); // Статус. var status = AcquaintanceTasks.Resources.StateViewAcquainted; Docflow.PublicFunctions.Module.AddInfoToRightContent(parentBlock, status); // Задания. foreach (var assignment in assignments) { this.AddAssignmentBlock(parentBlock, assignment, isElectronicAcquaintance, StateBlockIconSize.Small, string.Empty); } }
/// <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); } }
/// <summary> /// Добавить задания свободного согласования. /// </summary> /// <param name="parentBlock">Блок группировки.</param> /// <param name="taskBlock">Блок задачи.</param> /// <param name="assignments">Список заданий в рамках этапа согласования.</param> public void AddAssignmentsBlocks(Sungero.Core.StateBlock parentBlock, Sungero.Core.StateBlock taskBlock, List <IAssignment> assignments) { foreach (var assignment in assignments) { var noteStyle = Functions.Module.CreateNoteStyle(); var separatorStyle = Docflow.PublicFunctions.Module.CreateSeparatorStyle(); var performerDeadlineStyle = Docflow.PublicFunctions.Module.CreatePerformerDeadlineStyle(); var performerAndDeadlineAndStatus = this.GetPerformerAndDeadlineAndStatus(assignment); var performer = performerAndDeadlineAndStatus.Performer; var deadline = performerAndDeadlineAndStatus.Deadline; var status = performerAndDeadlineAndStatus.Status; if (string.IsNullOrWhiteSpace(performer)) { continue; } StateBlock block; if (parentBlock != null && FreeApprovalAssignments.Is(assignment)) { block = parentBlock.AddChildBlock(); } else { block = taskBlock.AddChildBlock(); } this.SetIcon(block, assignment); block.Entity = assignment; // Заголовок блока с заданием о завершении или доработке. if (!FreeApprovalAssignments.Is(assignment)) { var blockLabel = string.Empty; if (FreeApprovalFinishAssignments.Is(assignment)) { blockLabel = FreeApprovalTasks.Resources.StateViewCompleteApprovalAssignment; } else if (FreeApprovalReworkAssignments.Is(assignment)) { blockLabel = FreeApprovalTasks.Resources.StateViewReworkByRemarks; } block.AddLabel(blockLabel, Docflow.PublicFunctions.Module.CreateHeaderStyle()); block.AddLineBreak(); } // Заполнить участников. var performerLabel = string.Format("{0}{1}", performer, deadline); block.AddLabel(performerLabel, performerDeadlineStyle); var comment = Docflow.Functions.Module.GetAssignmentUserComment(assignment); if (!string.IsNullOrWhiteSpace(comment)) { block.AddLineBreak(); block.AddLabel(Constants.Module.SeparatorText, separatorStyle); block.AddLineBreak(); block.AddEmptyLine(Constants.Module.EmptyLineMargin); block.AddLabel(comment, noteStyle); } // Заполнить статус задания и просрочку. Functions.Module.AddInfoToRightContent(block, status); if (assignment.Status == Workflow.AssignmentBase.Status.InProcess && assignment.Deadline.HasValue) { Functions.OfficialDocument.AddDeadlineHeaderToRight(block, assignment.Deadline.Value, assignment.Performer); } } }