UNPKG

poster-prro-kit

Version:

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

122 lines (106 loc) 3.1 kB
import { getHeader, getRowNum, rowsToMapper } from "./commonXMLTagGenerator.js"; import { formatToFixedDecimal } from "../../../helpers/round.js"; import { convertKopecksToGrivnas, getPaymentSum, getTaxSourceSum, getTaxSum, getTaxTurnover, getTaxTurnoverDiscount, } from "../../../helpers/centsFormat.js"; import { sortByProgram, sortByPayFormCode } from "../../../helpers/common.js"; import { addVersionInEntities } from "../helpers/xmlGenerator.js"; const paymentMapper = (payment, index) => { const PAYFORMCD = payment.payFormCode; const PAYFORMNM = payment.payFormName; const SUM = formatToFixedDecimal(getPaymentSum(payment)); return { $: getRowNum(index), PAYFORMCD, PAYFORMNM, SUM, }; }; const taxesMapper = (tax, index) => { const { type: TYPE, name: NAME, program: LETTER, percent } = tax; const PRC = formatToFixedDecimal(percent); const TURNOVER = formatToFixedDecimal(getTaxTurnover(tax)); const SUM = formatToFixedDecimal(getTaxSum(tax)); const TURNOVERDISCOUNT = formatToFixedDecimal(getTaxTurnoverDiscount(tax)); const SOURCESUM = formatToFixedDecimal(getTaxSourceSum(tax)); return { $: getRowNum(index), TYPE, NAME, LETTER, PRC, TURNOVER, TURNOVERDISCOUNT, SOURCESUM, SUM, }; }; const getZReportPaymentsAndTaxes = (data) => { if (!data) { return null; } const { sum, receiptCount: ORDERSCNT, payments, taxes, version } = data; const sortedPayments = [...payments].sort(sortByPayFormCode); const paymentsWithVersion = addVersionInEntities(sortedPayments, version); const PAYFORMS = rowsToMapper(paymentsWithVersion, paymentMapper); const sortedTaxes = [...taxes].sort(sortByProgram); const taxesWithVersion = addVersionInEntities(sortedTaxes, version); const TAXES = taxesWithVersion.length ? { TAXES: rowsToMapper(taxesWithVersion, taxesMapper) } : {}; const currentSum = convertKopecksToGrivnas(sum); const SUM = formatToFixedDecimal(currentSum); return { SUM, ORDERSCNT, PAYFORMS, ...TAXES, }; }; const getZReportBody = ({ serviceInput, serviceOutput }) => { const serviceInputData = serviceInput?.sum || 0; const serviceOutputData = serviceOutput?.sum || 0; return { SERVICEINPUT: formatToFixedDecimal( convertKopecksToGrivnas(serviceInputData), ), SERVICEOUTPUT: formatToFixedDecimal( convertKopecksToGrivnas(serviceOutputData), ), }; }; const getZReportDocument = (data) => { const { version = 0, ...rest } = data; const ZREPHEAD = getHeader(rest); const zRepRealiz = rest.realiz ? { ZREPREALIZ: getZReportPaymentsAndTaxes({ ...rest.realiz, version, }), } : {}; const zRepReturn = rest.return ? { ZREPRETURN: getZReportPaymentsAndTaxes({ ...rest.return, version, }), } : {}; const ZREPBODY = getZReportBody({ ...rest, version }); return { ZREP: { ZREPHEAD, ...zRepRealiz, ...zRepReturn, ZREPBODY, }, }; }; export default getZReportDocument;