poster-prro-kit
Version:
Цей Kit призначений для роботи з PRRO, а саме для генерації XML документів для податкової, генерації фіскальних чеків для термопринтерів, генерації документів для PRRO в офлайн режимі, розрахунку податків та генераціі посилання на фіскальний чек в кабін
84 lines (71 loc) • 2.26 kB
JavaScript
/* eslint-disable no-magic-numbers, no-control-regex */
import { table, getBorderCharacters } from "table";
import { pipe } from "../../../../helpers/functional.js";
/**
* Data example:
* [
* {
* type: 'smartProperties',
* lines: [
* { name: "Официан", value: "Сергей" },
* { name: "Цех", value: "Кухня" },
* { name: "Стіл №", value: "1 (Основний зал)" },
* { name: "Тип замовлення", value: "У закладі" },
* { name: "Комментарии", value: "", hide: true },
* ],
* },
* ]
*
* Receipt example:
* 'Официан Сергей ',
* 'Цех Кухня ',
* 'Стіл № 1 (Основний зал) ',
* 'Тип замовлення У закладі ',
*/
const smartPropertiesFormatter = (chunk, config) => {
const { lines } = chunk;
const { width } = config;
return table(prepareData(lines), propConfig(width));
};
const propConfig = (width) => ({
columns: [
{
alignment: "left",
width: Math.floor(width * 0.4),
wrapWord: true,
},
{
alignment: "left",
width: Math.floor(width * 0.6),
wrapWord: true,
},
],
border: getBorderCharacters("void"),
columnDefault: {
paddingLeft: 0,
paddingRight: 0,
},
drawHorizontalLine: () => false,
});
const filterByHideField = (line) => !line.hide;
const filterHidden = (data) => data.filter(filterByHideField);
const RE_ASCII_CONTROL_CHARS = /[\x00-\x1F]+/g;
const RE_UNICODE_CONTROL_CHARS = /[\u0001-\u001A]+/g;
const replaceNonPrintableSymbolForValue = (line) => {
if (typeof line.value === "string") {
line.value
.replace(RE_ASCII_CONTROL_CHARS, " ")
.replace(RE_UNICODE_CONTROL_CHARS, " ");
}
return line;
};
const replaceNonPrintableSymbol = (data) =>
data.map(replaceNonPrintableSymbolForValue);
const prepareTableRow = (line) => [line.name, line.value];
const prepareTableData = (data) => data.map(prepareTableRow);
const prepareData = pipe(
filterHidden,
replaceNonPrintableSymbol,
prepareTableData,
);
export default smartPropertiesFormatter;