UNPKG

@angro/nav-connector

Version:

Node.js module which provides an interface for communicating with NAV online invoice service.

76 lines (65 loc) 2.47 kB
const { readFileSync } = require('fs'); const ObjectId = require('bson-objectid'); const { gzipSync } = require('zlib'); const baseInvoiceXml = readFileSync('./test/lib/invoice-create.xml'); /** * Create the given number of invoice operations. * @param {Object} params Function params. * @param {string} params.taxNumber Tax number of the taxpayer using the interface service, to whom the technical user is assigned. * @param {boolean} [params.compress=false] Flag to compress invoice xmls. * @param {number} [params.size=1] The integer of invoice operations to create. * @param {boolean} [params.createInvoiceHash=false] If true electronic invoice hash will be generated * @param {string} [params.invoiceNumber=ObjectId] invoice number [OPTIONAL] * @returns {Array} invoiceOperation */ module.exports = function createInvoiceOperations({ taxNumber, compress = false, size = 1, createInvoiceHash = false, invoiceNumber, }) { const invoiceOperation = []; const today = new Date().toISOString().split('T')[0]; for (let index = 0; index < size; index += 1) { let invoiceXml = baseInvoiceXml; const invoiceNumberAuto = ObjectId().toString(); invoiceXml = invoiceXml .toString() .replace( '<ns2:taxpayerId>68845007</ns2:taxpayerId>', `<ns2:taxpayerId>${taxNumber}</ns2:taxpayerId>` ) .replace( '<invoiceNumber>08185237810576020670</invoiceNumber>', `<invoiceNumber>${invoiceNumber || invoiceNumberAuto}</invoiceNumber>` ) .replace( '<invoiceIssueDate>2020-09-04</invoiceIssueDate>', `<invoiceIssueDate>${today}</invoiceIssueDate>` ) .replace( '<invoiceDeliveryDate>2020-09-04</invoiceDeliveryDate>', `<invoiceDeliveryDate>${today}</invoiceDeliveryDate>` ) .replace( '<paymentDate>2020-09-04</paymentDate>', `<paymentDate>${today}</paymentDate>` ); if (compress) { invoiceXml = gzipSync(invoiceXml); } const invoiceData = Buffer.from(invoiceXml).toString('base64'); const operation = { index: index + 1, invoiceOperation: 'CREATE', invoiceData, }; if (createInvoiceHash) { operation.electronicInvoiceHash = '1F1C1E8BDA6C52CA4F2CF805D402997B7ADD6B57705032F7AEA99308B84C5A9D0FCB70BBD52FEA572F4064D19227C2E78D6ADF047DBB058AAD0A4CE4A457888C'; } invoiceOperation.push(operation); } return invoiceOperation; };