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); }
/// <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); }