public Sungero.Core.StateView GetStateView() { var stateView = StateView.Create(); // Добавить блок информации к блоку задачи. var taskHeader = VerificationTasks.Resources.StateViewTaskBlockHeader; this.AddInformationBlock(stateView, taskHeader, _obj.Started.Value); // Блок информации о задаче. var taskBlock = this.AddTaskBlock(stateView); // Получить все задания по задаче. var taskAssignments = VerificationAssignments.GetAll(a => Equals(a.Task, _obj)).OrderBy(a => a.Created).ToList(); // Статус задачи. var status = _obj.Info.Properties.Status.GetLocalizedValue(_obj.Status); var lastAssignment = taskAssignments.OrderByDescending(a => a.Created).FirstOrDefault(); if (!string.IsNullOrWhiteSpace(status)) { Docflow.PublicFunctions.Module.AddInfoToRightContent(taskBlock, status); } // Блоки информации о заданиях. foreach (var assignment in taskAssignments) { var assignmentBlock = this.GetAssignmentBlock(assignment); taskBlock.AddChildBlock(assignmentBlock); } return(stateView); }
public Sungero.Core.StateView GetStateView() { var stateView = StateView.Create(); stateView.AddDefaultLabel(Docflow.OfficialDocuments.Resources.StateViewDefault); var minutes = Minuteses.GetAll(d => Equals(d.Meeting, _obj)); var documentsGroupGuid = Docflow.PublicConstants.Module.TaskMainGroup.ActionItemExecutionTask; var actionItems = RecordManagement.ActionItemExecutionTasks.GetAll() .Where(t => t.AttachmentDetails.Any(g => g.GroupId == documentsGroupGuid && minutes.Any(m => m.Id == g.AttachmentId))) .OrderBy(task => task.Created); var statusesCache = new Dictionary <Enumeration?, string>(); foreach (var actionItem in actionItems) { if (stateView.Blocks.Any(b => b.HasEntity(actionItem))) { continue; } var stateViewModel = Sungero.RecordManagement.Structures.ActionItemExecutionTask.StateViewModel.Create(); stateViewModel.StatusesCache = statusesCache; var blocks = RecordManagement.PublicFunctions.ActionItemExecutionTask.GetActionItemStateView(actionItem, actionItem, stateViewModel, null, string.Empty, null, null, true, false).Blocks; statusesCache = stateViewModel.StatusesCache; // Убираем первый блок с текстовой информацией по поручению. foreach (var block in blocks.Skip(1)) { stateView.AddBlock(block); } } return(stateView); }
public Sungero.Core.StateView GetStateView() { var stateView = StateView.Create(); var comment = Docflow.PublicFunctions.Module.GetTaskUserComment(_obj, Resources.ConsiderationText); if (_obj.Status != Workflow.Task.Status.Aborted) { if (_obj.Started.HasValue) { Docflow.PublicFunctions.OfficialDocument .AddUserActionBlock(stateView, _obj.Author, DocumentReviewTasks.Resources.StateViewDocumentSent, _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 startDate = this.GetIterationStartDate(); var managerBlock = this.AddReviewManagerBlock(stateView, startDate); if (managerBlock != null) { this.AddPreraringDraftResolutionBlock(managerBlock, startDate); this.AddReviewResolutionBlock(managerBlock, startDate); } return(stateView); }
public Sungero.Core.StateView GetStateView() { var stateView = StateView.Create(); var skipResolutionBlock = false; var statusesCache = new Dictionary <Enumeration?, string>(); foreach (var task in _obj.ResolutionGroup.ActionItemExecutionTasks) { var stateViewModel = Structures.ActionItemExecutionTask.StateViewModel.Create(); stateViewModel.StatusesCache = statusesCache; var blocks = PublicFunctions.ActionItemExecutionTask.GetActionItemStateView(task, task, stateViewModel, null, string.Empty, null, null, skipResolutionBlock, false).Blocks; statusesCache = stateViewModel.StatusesCache; // Убираем первый блок с текстовой информацией по поручению. foreach (var block in blocks.Skip(1)) { stateView.AddBlock(block); } // Строим блок резолюции только для первого поручения. skipResolutionBlock = true; } return(stateView); }
/// <summary> /// Построить модель контрола состояния документа. /// </summary> /// <param name="document">Документ.</param> /// <returns>Модель контрола состояния.</returns> public Sungero.Core.StateView GetStateView(Sungero.Docflow.IOfficialDocument document) { if (_obj.AllAttachments.Any(d => Equals(document, d))) { return(this.GetStateView()); } else { return(StateView.Create()); } }
/// <summary> /// Построить модель состояния процесса ознакомления. /// </summary> /// <param name="document">Документ.</param> /// <returns>Схема модели состояния.</returns> public Sungero.Core.StateView GetStateView(IElectronicDocument document) { if (_obj.DocumentGroup.OfficialDocuments.Any(d => Equals(document, d)) || _obj.AddendaGroup.OfficialDocuments.Any(d => Equals(document, d))) { return(this.GetStateView()); } else { return(StateView.Create()); } }
public Sungero.Core.StateView GetStateView() { var stateView = StateView.Create(); // Добавить блок информации к блоку задачи. var taskHeader = ExchangeDocumentProcessingTasks.Resources.StateViewInformationBlockFormat(ExchangeCore.PublicFunctions.BoxBase.GetExchangeService(_obj.Box)); this.AddInformationBlock(stateView, taskHeader, _obj.Started.Value); // Блок информации о задаче. var taskBlock = this.AddTaskBlock(stateView); // Получить все задания по задаче. var taskAssignments = ExchangeDocumentProcessingAssignments.GetAll(a => Equals(a.Task, _obj)).OrderBy(a => a.Created).ToList(); // Статус задачи. var status = _obj.Info.Properties.Status.GetLocalizedValue(_obj.Status); var lastAssignment = taskAssignments.OrderByDescending(a => a.Created).FirstOrDefault(); // Установить статус отказать, если обработка завершилась с этим результатом. if (lastAssignment.Result == Exchange.ExchangeDocumentProcessingAssignment.Result.Abort) { status = lastAssignment.Info.Properties.Result.GetLocalizedValue(lastAssignment.Result); } if (!string.IsNullOrWhiteSpace(status)) { Docflow.PublicFunctions.Module.AddInfoToRightContent(taskBlock, status); } // Блоки информации о заданиях. foreach (var assignment in taskAssignments) { var assignmentBlock = this.GetAssignmentBlock(assignment); taskBlock.AddChildBlock(assignmentBlock); } return(stateView); }
public StateView GetInstruction() { var instruction = StateView.Create(); var block = instruction.AddBlock(); block.AddLabel(VerificationAssignments.Resources.InstructionStep1); block.AddLineBreak(); block.AddLabel(VerificationAssignments.Resources.InstructionStep2); block.AddLineBreak(); block.AddLabel(VerificationAssignments.Resources.InstructionStep3); block.AddLineBreak(); block.AddLabel(VerificationAssignments.Resources.InstructionStep4); block.AddLineBreak(); block.AddLabel(VerificationAssignments.Resources.InstructionStep5); block.AddLineBreak(); block.AddLabel(VerificationAssignments.Resources.InstructionStep6); block.AddLineBreak(); block.AddLabel(VerificationAssignments.Resources.InstructionStep7); return(instruction); }
/// <summary> /// Сводка по документу. /// </summary> /// <returns>Сводка.</returns> public override StateView GetDocumentSummary() { var documentSummary = StateView.Create(); var block = documentSummary.AddBlock(); // Краткое имя документа. var documentName = _obj.DocumentKind.Name; if (!string.IsNullOrWhiteSpace(_obj.RegistrationNumber)) { documentName += Docflow.OfficialDocuments.Resources.Number + _obj.RegistrationNumber; } if (_obj.RegistrationDate != null) { documentName += Docflow.OfficialDocuments.Resources.DateFrom + _obj.RegistrationDate.Value.ToString("d"); } block.AddLabel(documentName); block.AddLineBreak(); block.AddEmptyLine(); // Контрагент. block.AddLabel(string.Format("{0}: ", _obj.Info.Properties.Counterparty.LocalizedName)); if (_obj.Counterparty != null) { block.AddLabel(Hyperlinks.Get(_obj.Counterparty)); if (_obj.Counterparty.Nonresident == true) { block.AddLabel(string.Format("({0})", _obj.Counterparty.Info.Properties.Nonresident.LocalizedName).ToLower()); } } else { block.AddLabel("-"); } block.AddLineBreak(); // Содержание. var subject = !string.IsNullOrEmpty(_obj.Subject) ? _obj.Subject : "-"; block.AddLabel(string.Format("{0}: {1}", _obj.Info.Properties.Subject.LocalizedName, subject)); block.AddLineBreak(); // Сумма. var amount = this.GetTotalAmountDocumentSummary(_obj.TotalAmount, _obj.Currency); var amountText = string.Format("{0}: {1}", _obj.Info.Properties.TotalAmount.LocalizedName, amount); block.AddLabel(amountText); block.AddLineBreak(); // Оплатить до. var paymentDeadline = _obj.PaymentDueDate.HasValue ? _obj.PaymentDueDate.Value.ToString("d") : "-"; var paymentDeadlineText = string.Format("{0}: {1}", _obj.Info.Properties.PaymentDueDate.LocalizedName, paymentDeadline); block.AddLabel(paymentDeadlineText); block.AddLineBreak(); block.AddEmptyLine(); // Примечание. var note = !string.IsNullOrEmpty(_obj.Note) ? _obj.Note : "-"; block.AddLabel(string.Format("{0}: {1}", _obj.Info.Properties.Note.LocalizedName, note)); return(documentSummary); }
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="assignment">Задание.</param> /// <returns>Новый блок.</returns> public Sungero.Core.StateBlock GetAssignmentBlock(IAssignment assignment) { // Стили. var performerDeadlineStyle = Docflow.PublicFunctions.Module.CreatePerformerDeadlineStyle(); var boldStyle = Docflow.PublicFunctions.Module.CreateStyle(true, false); var grayStyle = Docflow.PublicFunctions.Module.CreateStyle(false, true); var separatorStyle = Docflow.PublicFunctions.Module.CreateSeparatorStyle(); var noteStyle = Docflow.PublicFunctions.Module.CreateNoteStyle(); var block = StateView.Create().AddBlock(); block.Entity = assignment; // Иконка. this.SetIcon(block, ExchangeDocumentProcessingAssignments.As(assignment)); // Заголовок. block.AddLabel(ExchangeDocumentProcessingTasks.Resources.StateViewAssignmentBlockHeader, boldStyle); block.AddLineBreak(); // Кому. var assigneeShortName = Company.PublicFunctions.Employee.GetShortName(Company.Employees.As(assignment.Performer), false); var performerInfo = string.Format("{0}: {1}", Docflow.OfficialDocuments.Resources.StateViewTo, assigneeShortName); block.AddLabel(performerInfo, performerDeadlineStyle); // Срок. if (assignment.Deadline.HasValue) { var deadlineLabel = Docflow.PublicFunctions.Module.ToShortDateShortTime(assignment.Deadline.Value.ToUserTime()); block.AddLabel(string.Format("{0}: {1}", Docflow.OfficialDocuments.Resources.StateViewDeadline, deadlineLabel), performerDeadlineStyle); } // Текст задания. var comment = Docflow.PublicFunctions.Module.GetAssignmentUserComment(Assignments.As(assignment)); if (!string.IsNullOrWhiteSpace(comment)) { // Разделитель. block.AddLineBreak(); block.AddLabel(Docflow.PublicFunctions.Module.GetSeparatorText(), separatorStyle); block.AddLineBreak(); block.AddEmptyLine(Docflow.PublicFunctions.Module.GetEmptyLineMargin()); block.AddLabel(comment, noteStyle); } // Статус. var status = AssignmentBases.Info.Properties.Status.GetLocalizedValue(assignment.Status); // Для непрочитанных заданий указать это. if (assignment.IsRead == false) { status = Docflow.ApprovalTasks.Resources.StateViewUnRead.ToString(); } // Для исполненных заданий указать результат, с которым они исполнены, кроме "Обработано". if (assignment.Status == Workflow.AssignmentBase.Status.Completed && assignment.Result != Exchange.ExchangeDocumentProcessingAssignment.Result.Complete) { status = Exchange.ExchangeDocumentProcessingAssignments.Info.Properties.Result.GetLocalizedValue(assignment.Result); } if (!string.IsNullOrWhiteSpace(status)) { Docflow.PublicFunctions.Module.AddInfoToRightContent(block, status); } // Задержка исполнения. if (assignment.Deadline.HasValue && assignment.Status == Workflow.AssignmentBase.Status.InProcess) { Docflow.PublicFunctions.OfficialDocument.AddDeadlineHeaderToRight(block, assignment.Deadline.Value, assignment.Performer); } return(block); }
public override StateView GetDocumentSummary() { var documentSummary = StateView.Create(); var documentBlock = documentSummary.AddBlock(); // Краткое имя документа. var documentName = _obj.DocumentKind.Name; if (!string.IsNullOrWhiteSpace(_obj.RegistrationNumber)) { documentName += Docflow.OfficialDocuments.Resources.Number + _obj.RegistrationNumber; } if (_obj.RegistrationDate != null) { documentName += Docflow.OfficialDocuments.Resources.DateFrom + _obj.RegistrationDate.Value.ToString("d"); } documentBlock.AddLabel(documentName); // Типовой/Не типовой. var isStandardLabel = _obj.IsStandard.Value ? ContractBases.Resources.isStandartContract : ContractBases.Resources.isNotStandartContract; documentBlock.AddLabel(string.Format("({0})", isStandardLabel)); documentBlock.AddLineBreak(); documentBlock.AddLineBreak(); // Контрагент. documentBlock.AddLabel(string.Format("{0}:", ContractBases.Resources.Counterparty)); if (_obj.Counterparty != null) { documentBlock.AddLabel(Hyperlinks.Get(_obj.Counterparty)); if (_obj.Counterparty.Nonresident == true) { documentBlock.AddLabel(string.Format("({0})", _obj.Counterparty.Info.Properties.Nonresident.LocalizedName).ToLower()); } } else { documentBlock.AddLabel("-"); } documentBlock.AddLineBreak(); // Содержание. var subject = !string.IsNullOrEmpty(_obj.Subject) ? _obj.Subject : "-"; documentBlock.AddLabel(string.Format("{0}: {1}", ContractBases.Resources.Subject, subject)); documentBlock.AddLineBreak(); // Сумма договора. var amount = this.GetTotalAmountDocumentSummary(_obj.TotalAmount, _obj.Currency); var amountText = string.Format("{0}: {1}", _obj.Info.Properties.TotalAmount.LocalizedName, amount); documentBlock.AddLabel(amountText); documentBlock.AddLineBreak(); // Срок действия договора. var validity = "-"; var validFrom = _obj.ValidFrom.HasValue ? string.Format("{0} {1} ", ContractBases.Resources.From, _obj.ValidFrom.Value.Date.ToShortDateString()) : string.Empty; var validTill = _obj.ValidTill.HasValue ? string.Format("{0} {1}", ContractBases.Resources.Till, _obj.ValidTill.Value.Date.ToShortDateString()) : string.Empty; var isAutomaticRenewal = _obj.IsAutomaticRenewal.Value && !string.IsNullOrEmpty(validTill) ? string.Format(", {0}", ContractBases.Resources.Renewal) : string.Empty; if (!string.IsNullOrEmpty(validFrom) || !string.IsNullOrEmpty(validTill)) { validity = string.Format("{0}{1}{2}", validFrom, validTill, isAutomaticRenewal); } var validityText = string.Format("{0}:", ContractBases.Resources.Validity); documentBlock.AddLabel(validityText); documentBlock.AddLabel(validity); documentBlock.AddLineBreak(); documentBlock.AddEmptyLine(); // Примечание. var note = string.IsNullOrEmpty(_obj.Note) ? "-" : _obj.Note; var noteText = string.Format("{0}:", ContractBases.Resources.Note); documentBlock.AddLabel(noteText); documentBlock.AddLabel(note); return(documentSummary); }
public Sungero.Core.StateView GetStateView() { // Добавить заголовок. var stateView = StateView.Create(); var taskBeginText = _obj.Texts.OrderBy(t => t.Created).FirstOrDefault(); var comment = taskBeginText != null ? taskBeginText.Body : string.Empty; comment = comment != FreeApprovalTasks.Resources.ApprovalText ? comment : string.Empty; if (_obj.Started.HasValue) { Docflow.PublicFunctions.OfficialDocument .AddUserActionBlock(stateView, _obj.Author, ApprovalTasks.Resources.StateViewDocumentSentForApproval, _obj.Started.Value, _obj, comment, _obj.StartedBy); } else { Docflow.PublicFunctions.OfficialDocument .AddUserActionBlock(stateView, _obj.Author, ApprovalTasks.Resources.StateViewTaskDrawCreated, _obj.Created.Value, _obj, comment, _obj.Author); } // Добавить основной блок для задачи. var taskBlock = this.AddTaskBlock(stateView); // Получить все задания по задаче. var taskAssignments = Assignments.GetAll().Where(a => Equals(a.Task, _obj)).ToList(); // Определить итерации. var iterations = Functions.Module.GetIterationDates(_obj); // Обработать каждую итерацию. foreach (var iteration in iterations) { var date = iteration.Date; var hasReworkBefore = iteration.IsRework; var hasRestartBefore = iteration.IsRestart; var nextIteration = iterations.Where(d => d.Date > date).FirstOrDefault(); var nextDate = Calendar.Now; if (nextIteration != null) { nextDate = nextIteration.Date; } // Получить задания в рамках круга согласования. var assignments = taskAssignments .Where(a => a.Created >= date && a.Created < nextDate) .OrderBy(a => a.Created) .ToList(); // Если нет заданий, то перейти к следующей итерации. if (!assignments.Any()) { continue; } // Добавить блок отправки. this.AddSendForApprovalBlock(taskBlock, assignments.First(), hasReworkBefore, hasRestartBefore); StateBlock parentBlock = null; // Выделить этап согласования. var approvalAssignments = assignments.Where(a => FreeApprovalAssignments.Is(a)); if (approvalAssignments.Any()) { // Вставить блок для группировки этапа согласования. var iterationBlock = taskBlock.AddChildBlock(); iterationBlock.NeedGroupChildren = true; iterationBlock.IsExpanded = approvalAssignments.Any(a => a.Status == Workflow.AssignmentBase.Status.InProcess); // Заголовок блока итерации. iterationBlock.AddLabel(ApprovalTasks.Resources.StateViewApprovalStage, Docflow.PublicFunctions.Module.CreateHeaderStyle()); iterationBlock.AddLineBreak(); // Добавить информацию по исполнителям группы согласования. var performersLabel = string.Join(", ", approvalAssignments .Select(a => a.Performer) .Distinct() .Select(a => (Sungero.Company.Employees.Is(a) ? Company.PublicFunctions.Employee.GetShortName(Sungero.Company.Employees.As(a), false) : a.Name))); iterationBlock.AddLabel(performersLabel, Docflow.PublicFunctions.Module.CreatePerformerDeadlineStyle()); parentBlock = iterationBlock; } // Добавить задания. assignments = assignments.OrderByDescending(a => a.Result.HasValue).ThenBy(a => a.Completed).ToList(); this.AddAssignmentsBlocks(parentBlock, taskBlock, assignments); // Установить иконку и статус для группировки этапа согласования. var endStatus = string.Empty; if (parentBlock != null) { // Иконка по умолчанию. parentBlock.AssignIcon(FreeApprovalTasks.Resources.FreeApproveStage, StateBlockIconSize.Large); if (approvalAssignments.Any(a => a.Result == Docflow.FreeApprovalAssignment.Result.ForRework)) { parentBlock.AssignIcon(ApprovalTasks.Resources.Notapprove, StateBlockIconSize.Large); endStatus = ApprovalTasks.Resources.StateViewNotApproved; } else if (!approvalAssignments.Any(a => a.Result != Docflow.FreeApprovalAssignment.Result.Approved)) { parentBlock.AssignIcon(ApprovalTasks.Resources.Approve, StateBlockIconSize.Large); endStatus = ApprovalTasks.Resources.StateViewEndorsed; } if (assignments.Any(a => a.Status == Workflow.AssignmentBase.Status.Aborted)) { parentBlock.AssignIcon(StateBlockIconType.Abort, StateBlockIconSize.Large); endStatus = ApprovalTasks.Resources.StateViewAborted; } Functions.Module.AddInfoToRightContent(parentBlock, parentBlock.IsExpanded ? ApprovalTasks.Resources.StateViewInProcess : endStatus); } } return(stateView); }
public static Sungero.Core.StateBlock GetAssignmentBlock(IAssignmentBase assignment) { // Стили. var headerStyle = Docflow.PublicFunctions.Module.CreateHeaderStyle(); var performerDeadlineStyle = Docflow.PublicFunctions.Module.CreatePerformerDeadlineStyle(); // var boldStyle = Docflow.PublicFunctions.Module.CreateStyle(true, false); var grayStyle = Docflow.PublicFunctions.Module.CreateStyle(false, true); var separatorStyle = Docflow.PublicFunctions.Module.CreateSeparatorStyle(); var block = StateView.Create().AddBlock(); block.Entity = assignment; // Заголовок. block.AddLabel("Обработка входящего документа", headerStyle); block.AddLineBreak(); // Кому. var assigneShortName = Company.PublicFunctions.Employee.GetShortName(Company.Employees.As(assignment.Performer), false); var performerInfo = string.Format("{0}: {1}", Docflow.OfficialDocuments.Resources.StateViewTo, assigneShortName); block.AddLabel(performerInfo, performerDeadlineStyle); // Срок. if (assignment.Deadline.HasValue) { var deadlineLabel = Docflow.PublicFunctions.Module.ToShortDateShortTime(assignment.Deadline.Value.ToUserTime()); block.AddLabel(string.Format("{0}: {1}", Docflow.OfficialDocuments.Resources.StateViewDeadline, deadlineLabel), performerDeadlineStyle); } // Разделитель. block.AddLineBreak(); block.AddLabel(Docflow.Constants.Module.SeparatorText, separatorStyle); block.AddLineBreak(); block.AddEmptyLine(Docflow.Constants.Module.EmptyLineMargin); // Текст задания. block.AddLabel(Docflow.PublicFunctions.Module.GetFormatedUserText(assignment.ActiveText), grayStyle); // Статус. var status = AssignmentBases.Info.Properties.Status.GetLocalizedValue(assignment.Status); // Для непрочитанных заданий указать это. if (assignment.IsRead == false) { status = Docflow.ApprovalTasks.Resources.StateViewUnRead.ToString(); } if (!string.IsNullOrWhiteSpace(status)) { Docflow.PublicFunctions.Module.AddInfoToRightContent(block, status); } // Задержка исполнения. if (assignment.Deadline.HasValue && (assignment.Status == Workflow.AssignmentBase.Status.InProcess || assignment.Status == Workflow.AssignmentBase.Status.Completed)) { Docflow.PublicFunctions.OfficialDocument.AddDeadlineHeaderToRight(block, assignment.Deadline.Value, assignment.Performer); } return(block); }
public static StateView CreateApprovalListStateView(IOfficialDocument document) { // Задать текст по умолчанию. var stateView = StateView.Create(); stateView.AddDefaultLabel(OfficialDocuments.Resources.DocumentIsNotSigned); if (document == null) { return(stateView); } // Сформировать список подписей. var filteredSignatures = new List <Structures.ApprovalReviewAssignment.SignaturesInfo>(); var signatures = new List <Structures.ApprovalReviewAssignment.DocumentSignature>(); var signatureList = new List <Domain.Shared.ISignature>(); var externalSignatures = new List <Structures.ApprovalReviewAssignment.DocumentSignature>(); var externalSignatureList = new List <Domain.Shared.ISignature>(); foreach (var version in document.Versions.OrderByDescending(v => v.Created)) { // Получить к версии Согласующие и Утверждающие подписи в порядке подписывания. var versionSignatures = Signatures.Get(version).Where(s => s.SignatureType != SignatureType.NotEndorsing).OrderByDescending(s => s.SigningDate); // Вывести информацию о подписях. foreach (var signature in versionSignatures) { if (signature.IsExternal == true) { externalSignatures.Add(Structures.ApprovalReviewAssignment.DocumentSignature.Create(signature.Id, signature.SigningDate, version.Number)); externalSignatureList.Add(signature); continue; } var signatureTypeString = signature.SignatureType == SignatureType.Approval ? Constants.ApprovalReviewAssignment.ApprovalSignatureType : Constants.ApprovalReviewAssignment.EndorsingSignatureType; if (!filteredSignatures.Where(f => Equals(f.Signatory, signature.Signatory) && Equals(f.SubstitutedUser, signature.SubstitutedUser) && Equals(f.SignatoryType, signatureTypeString)).Any()) { filteredSignatures.Add(Structures.ApprovalReviewAssignment.SignaturesInfo.Create(signature.Signatory, signature.SubstitutedUser, signatureTypeString)); signatures.Add(Structures.ApprovalReviewAssignment.DocumentSignature.Create(signature.Id, signature.SigningDate, version.Number)); signatureList.Add(signature); } } } // Проверить, что подписи есть. if (!signatures.Any()) { return(stateView); } // Добавить подписи: по убыванию даты подписи, без учета версии. foreach (var signatureInfo in signatures.OrderBy(s => s.SigningDate)) { var signingBlock = stateView.AddBlock(); if (externalSignatures.Any() && signatureInfo.Equals(signatures.OrderBy(s => s.SigningDate).Last())) { signingBlock.DockType = DockType.None; } else { signingBlock.DockType = DockType.Bottom; } var signature = signatureList.Single(s => s.Id == signatureInfo.SignatureId); var versionNumber = signatureInfo.VersionNumber; AddSignatureInfoToBlock(signingBlock, signature, versionNumber); } if (externalSignatures.Any()) { // Добавить информацию о внешних подписях. foreach (var signatureInfo in externalSignatures.OrderBy(s => s.SigningDate)) { var signingBlock = stateView.AddBlock(); var signature = externalSignatureList.Single(s => s.Id == signatureInfo.SignatureId); var versionNumber = signatureInfo.VersionNumber; AddExternalSignatureInfoToBlock(signingBlock, signature, versionNumber, document); signingBlock.DockType = DockType.Bottom; } } return(stateView); }