51 lines
5.2 KiB
Plaintext
51 lines
5.2 KiB
Plaintext
---
|
||
description: Добавить документ в фабрику документов. Создать шаблон документа.
|
||
alwaysApply: false
|
||
---
|
||
|
||
## Создание шаблона
|
||
|
||
В библиотеке реестра типов документов находятся шаблоны: cooptypes/src/cooperative/registry/1.WalletAgreement
|
||
|
||
В каждом шаблоне определяется часть Action, которая отвечает за передаваемые извне параметры для модели документа. И Model, которая отвечает за общую модель документа, которая может включать в себя не только данные, которые передаются извне в действии по генерации документа, но и извлекаются самой фабрикой в процессе генерации. Meta данные при этом являются объединением обоих интерфейсов и на основе этих данных можно произвести полную регенерацию документа.
|
||
|
||
Содержание каждого index файла включает в себя интерфейс Action для генерации. Model с теми данными которые могут быть предоставлены самой фабрикой документов. Title, description, context и translations и exampleData.
|
||
|
||
Context включает в себя строковый шаблон jinja2, который использует данные из Action и Meta, а также translations для переводов на русский язык. Кроме того, каждый шаблон содержит стандартную css разметку для заголовка, места подписи, и т.д.
|
||
|
||
exampleData мы прописываем как пример данных, которые программа-визуализатор может подставить и показать визуально-заполненный шаблон. Потому когда ты создаешь новый документ ты должен в точности соблюдать заполнение всех полей. Во-первых ты должен декомпозировать документ на элементы переводов, затем эти элементы переводов вставить в текст и разбавить использованием переменных. Местами ты можешь использовать вот такие конструкции шаблона для передачи переменных прямо в перевод: {% trans 'phone_and_email_notice', individual.phone, individual.email %}
|
||
|
||
В объекте перевода:
|
||
...phone_and_email_notice: 'номер телефона с активированной функцией получения sms: {0}, адрес электронной почты: {1}.',
|
||
|
||
Но обычно достаточно просто использовать переменные из Action и Model напрямую.
|
||
|
||
## Создание схемы
|
||
|
||
После того, как шаблон создан и экспортирован, необходимо создать схему. Схема создается в factory/src/Templates
|
||
|
||
Там реэкспортируются Action, Model как типы. И определяется схема ajv. Там есть стандартные, определенные части схемы, которые находятся в factory/src/Schema. Все части моделей Action и Model должны быть определены в одной схеме данных и затем экспортированы в реестр схем factory/src/Templates/registry.ts.
|
||
|
||
## Создание станка
|
||
|
||
Далее необходимо создать станок для обработки генерации документа в factory/src/Actions. Он дожен включать в себя интерфейс действия и всю подготовительную обработку данных для передачи информации в шаблон согласно схемы. В качестве ФИО/наименование пайщика используем factory/src/Schema/CommonUserSchema.ts.
|
||
|
||
## Экспорт станка
|
||
|
||
Станок необходимо экспортировать в src/index.ts через все реестры. Чтобы в итоге вызов метода генерации был делегирован корректному станку.
|
||
|
||
|
||
## Создание теста
|
||
|
||
В папке factory/src/tests создаем или используем существующий и подходящий по контексту файл теста для генерации. Используем метод для генерации
|
||
|
||
it('генерируем соглашение о капитализации', async () => {
|
||
await testDocumentGeneration({
|
||
registry_id: 1000,
|
||
coopname: 'voskhod',
|
||
username: 'ant',
|
||
lang: 'ru',
|
||
})
|
||
})
|
||
|