UNPKG

poster-prro-kit

Version:

Цей Kit призначений для роботи з PRRO, а саме для генерації XML документів для податкової, генерації фіскальних чеків для термопринтерів, генерації документів для PRRO в офлайн режимі, розрахунку податків та генераціі посилання на фіскальний чек в кабін

259 lines (229 loc) 9.81 kB
# Опис форматерів Для генерації чеків ми використовуємо бібліотеку `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', '--------------------------------------------------', ```