<< Click to Display Table of Contents >> Разработка > Примеры разработки > Документы Как создать постраничную отметку для парафирования договорных документов
|
![]() ![]() ![]() |
Ситуация
Необходимо создать постраничную отметку, которая будет использоваться для парафирования договорных документов. Отметка подтверждает, что каждая страница согласована нашей организацией, и обеспечивает целостность всего документа.
Требования к положению отметки:
•отступ от левого края страницы – 0,3 см;
•отступ от нижнего края страницы – 2 см;
•поворот отметки – 90 градусов против часовой стрелки.
Отметка содержит:
•надпись «Согласовано»;
•название нашей организации;
•версию согласованного документа.
Решение
1.Перекройте тип документа «Договорной документ» (ContractualDocument).
2.Отметка формируется на основе данных, получаемых из HTML-кода. В ресурсах типа документа «Договорной документ» добавьте HTML-код отметки. Для этого в дереве решений в контекстном меню перекрытого типа документа выберите пункт Открыть ресурсы. Далее в контекстном меню табличной части выберите пункт Добавить строку. Укажите название нового ресурса, например HtmlMarkTemplatePaginalApprove, и добавьте код для изображения отметки:
Пример для ресурса с кодом отметки
|
3.В тип документа «Договорной документ»:
•добавьте серверные функции:
GetOrCreateContractPaginalApproveMark() – создает или обновляет экземпляр постраничной отметки для утвержденных договорных документов;
GetContractualApprovedMarkAsHtml() – получает изображение отметки в виде HTML-кода для утвержденных договорных документов.
/// <summary>
/// Создать или обновить экземпляр постраничной отметки для парафирования договорных документов.
/// </summary>
[Public]
public virtual void GetOrCreateContractPaginalApproveMark()
{
var markKindSid = DEV.Stamp.PublicConstants.Contracts.ContractualDocument.PaginalApproveMarkKindSid;
if (_obj.LastVersionApproved == true)
{
var mark = GetOrCreateMark(markKindSid);
mark.XIndent = 0.1;
mark.YIndent = -2;
mark.Page = 0;
mark.RotateAngle = 90;
mark.Save();
}
else
{
var paginalApproveMark = GetVersionMarks(_obj.LastVersion.Id, markKindSid).SingleOrDefault();
Sungero.Docflow.PublicFunctions.Module.DeleteMark(_obj, paginalApproveMark);
}
}
/// <summary>
/// Получить изображение отметки в виде HTML-кода для договорных документов с состоянием "Утверждено".
/// </summary>
/// <param name="versionId">ИД версии.</param>
/// <returns>Изображение отметки в виде HTML.</returns>
[Public]
public virtual string GetContractualApprovedMarkAsHtml(long versionId)
{
var version = _obj.Versions.Where(x => x.Id == versionId).FirstOrDefault();
var signature = Sungero.Docflow.PublicFunctions.OfficialDocument.GetSignatureForMark(_obj, versionId, false);
var html = string.Empty;
using (Sungero.Core.CultureInfoExtensions.SwitchTo(TenantInfo.Culture))
{
html = Stamp.ContractualDocuments.Resources.HtmlMarkTemplatePaginalApprove;
html = html.Replace("{version}", version.Number.ToString());
var employee = Sungero.Company.Employees.As(signature.Signatory);
html = html.Replace("{approvedOrganization}", employee.Department.BusinessUnit.Name);
}
return html;
}
•переопределите серверную функцию ConvertToPdfWithMarks() типа документа «Официальный документ» (OfficialDocument), которая используется для преобразования документа в PDF с добавлением отметок:
/// <summary>
/// Преобразовать документ в PDF с добавлением отметок.
/// </summary>
/// <param name="versionId">ИД версии документа, на который будут проставлены отметки.</param>
/// <returns>Результат преобразования.</returns>
public override Sungero.Docflow.Structures.OfficialDocument.IConversionToPdfResult ConvertToPdfWithMarks(long versionId)
{
/// Пример перекрытия, в котором при выполнении действия
/// "Создать PDF-документ с отметками" для договорных документов с состоянием "Утверждено"
/// добавляется отметка "Утверждено" на преобразованный в PDF документ.
this.GetOrCreateContractPaginalApproveMark()
return base.ConvertToPdfWithMarks(versionId);
}
4.Перекройте тип документа «Договор» (Contract) и добавьте для него серверную функцию GetApprovedMarkAsHtml(), которая получает отметку для договора с состоянием «Утверждено»:
/// <summary>
/// Получить изображение отметки в виде HTML-кода для договорных документов с состоянием "Утверждено".
/// </summary>
/// <param name="versionId">ИД версии.</param>
/// <returns>Изображение отметки в виде HTML-кода.</returns>
public virtual string GetApprovedMarkAsHtml(long versionId)
{
return PublicFunctions.ContractualDocument.GetContractualApprovedMarkAsHtml(_obj, versionId);
}
5.Перекройте тип документа «Дополнительное соглашение» (SupAgreement) и добавьте для него аналогичную серверную функцию.
6.В перекрытый тип документа «Договорной документ» добавьте константы:
•PaginalApproveMarkKindSid – уникальный идентификатор отметки;
•PaginalApproveMarkKindClass – полное имя класса, из которого вызывается метод получения отметки;
•PaginalApproveMarkKindMethod – имя метода получения отметки.
public static class ContractualDocument
{// SID отметки "Утверждено".
[Public]
public const string PaginalApproveMarkKindSid = "3cdb9932-708f-4079-bc50-890b700202c6";
// Полное имя класса, из которого вызывается метод получения отметки "Утверждено".
[Public]
public const string PaginalApproveMarkKindClass = "DEV.Stamp.Functions.Contract";
// Имя метода получения отметки "Утверждено".
[Public]
public const string PaginalApproveMarkKindMethod = "GetApprovedMarkAsHtml";
}
7.Задайте название для нового вида отметки (MarkKind). Для этого добавьте строку в ресурсах типа документа «Договорной документ»:
8.Перекройте модуль «Документооборот» (Docflow). В нем переопределите функцию инициализации Initializing() и добавьте функцию CreateCustomMarkKinds(), чтобы новый вид отметки создался в системе автоматически:
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
base.Initializing(e);
CreateCustomMarkKinds();
}
public static void CreateCustomMarkKinds()
{
InitializationLogger.Debug("Init: Create custom mark kinds.");
CreateMarkKind(DEV.Stamp.ContractualDocuments.Resources.PaginalApproveMarkName, DEV.Stamp.Constants.Contracts.ContractualDocument.PaginalApproveMarkKindSid,
DEV.Stamp.Constants.Contracts.ContractualDocument.PaginalApproveMarkKindClass, DEV.Stamp.Constants.Contracts.ContractualDocument.PaginalApproveMarkKindMethod);
}
В результате при преобразовании договоров и дополнительных соглашений в формат PDF на каждую страницу документа будет добавляться отметка:
© Компания Directum, 2024 |