poster-prro-kit
Version:
Цей Kit призначений для роботи з PRRO, а саме для генерації XML документів для податкової, генерації фіскальних чеків для термопринтерів, генерації документів для PRRO в офлайн режимі, розрахунку податків та генераціі посилання на фіскальний чек в кабін
259 lines (229 loc) • 9.81 kB
Markdown
# Опис форматерів
Для генерації чеків ми використовуємо бібліотеку `receipt`, яка за замовчуванням
має наступні формати:
- `ruler`
- `text`
- `empty`
- `propeties`
- `table`
Ці формати мають обмеження, наприклад, `table` підтримує лише певні (захардкоджені
імена стовпців). Але також ця бібліотека підтримує можливість розширення кастомними
форматами.
Таким чином, ми додали ще декілька форматів:
- `smartTable` - форматер для таблиці, яка використовує під капотом або `narrowTable`,
- або `wideTable`, залежно від ширини чека.
- `smartProperties`.
- `summary`
Розглянемо кожен з них детальніше.
## Ruler
Це просто рядок символів, які вказані в конфігурації, за замовчуванням це `-`.
Використовується для розділення різних блоків чека.
```
Data example:
[
{ type: 'ruler'}
]
Receipt example:
'--------------------'
```
## Text
Текст з можливістю вирівнювання по лівому, центральному та правому краю.
```
Data example:
[
{
type: 'text',
value: 'Test value left',
align: 'left',
},
{
type: 'text',
value: [
'Test value center line1',
'Test value center line2',
],
align: 'center',
},
{
type: 'text',
value: 'Test value right',
align: 'right',
}
]
Receipt example:
'Test value left ',
' Test value center line1 ',
' Test value center line2 ',
' Test value right',
```
## Empty
Порожній рядок, який використовується для розділення різних блоків чека.
```
Data example:
[
{ type: 'empty'}
]
Receipt example:
' ',
```
## SmartProperties
Формує таблицю з двома колонками: назва та значення. На відміну від стандартного
`properties`, де колонка назв отримує ширину найдовшого рядка назви, ширина колонок
буде у пропорції 4:6. Також є можливість приховувати деякі рядки.
```
Data example:
[
{
type: 'smartProperties',
lines: [
{ name: "Официан", value: "Сергей" },
{ name: "Цех", value: "Кухня" },
{ name: "Стіл №", value: "1 (Основний зал)" },
{ name: "Тип замовлення", value: "У закладі" },
{ name: "Комментарии", value: "", hide: true },
],
},
]
Receipt example:
'Официан Сергей ',
'Цех Кухня ',
'Стіл № 1 (Основний зал) ',
'Тип замовлення У закладі ',
```
## Summary
```
Data example:
{
type: 'summary',
lines: [
{name: 'Загальний обіг', value: priceFormat(12.20)},
{name: 'Готівка', value: priceFormat(5.10)},
{name: 'Картка', value: priceFormat(7.10)},
{name: 'Кількість чеків', value: 20},
],
delimeter: '.',
hideTopBorder: false,
hideBottomBorder: false,
}
Receipt example:
'--------------------------------------------------',
'Загальний обіг ............................. 12,20',
'Готівка ..................................... 5,10',
'Картка ...................................... 7,10',
'Кількість чеків 20',
'--------------------------------------------------',
```
## SmartTable
Під капотом вона застосовує або `narrowTable`, або `wideTable` в залежності від
ширини чека.
### NarrowTable
NarrowTable - таблиця для чеків малої ширини. Вирівнює назву по лівому краю, а
кількість, ціну та загальну суму - по правому. Якщо вся позиція не поміщається в
одному рядку, назва друкується в першому, а кількість, ціна та загальна сума - в
другому рядку. Ігнорує заголовок таблиці. (Повторює старий формат текстового чека).
Дані однакові як для `narrowTable`, так і для `wideTable`.
```
Data example with long line:
[
{
type: 'smartTable',
headers: [
{name: 'Назва', relation: 10},
{name: 'Кількість', relation: 10},
{name: 'Ціна', relation: 10},
{name: 'Сума', relation: 10},
],
items: [
{ row: ['Сирна паличка', '1 шт.', '200.00грн.', '200.00грн.'] },
{ row: ['Морозиво', '2 шт.', '92.13грн.', '184.26грн.'] },
],
},
]
Receipt example:
'------------------------------',
'Сирна паличка ',
' 1 шт. 200.00грн. 200.00грн.',
'Морозиво ',
' 2 шт. 92.13грн. 184.26грн.',
Data example short line:
[
{
type: 'smartTable',
items: [
['Сирна паличка', '1шт.'],
['Морозиво', '2шт.'],
],
},
]
Receipt example:
'------------------------------',
'Сирна паличка 1шт.',
'Морозиво 2шт.',
```
### WideTable
WideTable - таблиця для чеків "широкої" ширини. Формує повноцінну таблицю як з
заголовком, так і без нього. Ширину стовбців можна задати за допомогою властивості
relation.
```
Data example whit header:
[
{
type: 'smartTable',
headers: [
{name: 'Назва', relation: 10},
{name: 'Кількість', relation: 5},
{name: 'Ціна', relation: 5},
],
items: [
{ row: ['Сирна паличка', '1 шт.', '200.00'] },
{ row: ['Морозиво', '2 шт.', '92.13'] },
],
},
]
Receipt example:
'---------------------------------',
'Назва Кількість Ціна ',
' ',
'Сирна паличка 1 шт. 200.00',
'Морозиво 2 шт. 92.13',
'---------------------------------',
Data example without header:
[
{
type: 'smartTable',
items: [
['Сирна паличка', 200.00'],
['Морозиво', '92.13'],
],
},
]
Receipt example:
'---------------------------------',
'Сирна паличка 200.00',
'Морозиво 92.13',
```
### Summary
Формує таблицю з двома колонками: назва та значення та точками між ними.
Якщо значення не строка, то значеться рендериться одразу після назви.
```
Data example:
{
type: 'summary',
lines: [
{name: 'Загальний обіг', value: priceFormat(12.20)},
{name: 'Готівка', value: priceFormat(5.10)},
{name: 'Картка', value: priceFormat(7.10)},
{name: 'Кількість чеків', value: 20},
],
delimeter: '.',
hideTopBorder: false,
hideBottomBorder: false,
}
Receipt example:
'--------------------------------------------------',
'Загальний обіг ............................. 12,20',
'Готівка ..................................... 5,10',
'Картка ...................................... 7,10',
'Кількість чеків 20',
'--------------------------------------------------',
```