UNPKG

@simonbackx/paynl-node

Version:

Simple PayNL SDK for Node.js that uses promises and no singletons

117 lines 5.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TransactionStart = void 0; const tslib_1 = require("tslib"); const dateformat = tslib_1.__importStar(require("dateformat")); class TransactionStart { constructor(options) { this.options = options; } formatDate(date) { return dateformat(date, "dd-mm-yyyy"); } formatDateTime(date) { return dateformat(date, "dd-mm-yyyy hh:MM:ss"); } calculateVatCode(priceIncl, vatAmount) { var vatCodes = { 0: "N", 9: "L", 21: "H" }; var priceExcl = priceIncl - vatAmount; if (!vatAmount || vatAmount == 0 || !priceIncl || priceIncl == 0) { return vatCodes[0]; } var vatRate = (vatAmount / priceExcl) * 100; var closest = Object.keys(vatCodes).reduce((prev, curr) => { var prevFloat = parseFloat(prev); var currFloat = parseFloat(curr); return Math.abs(currFloat - vatRate) < Math.abs(prevFloat - vatRate) ? curr : prev; }); return vatCodes[closest]; } getForApi() { var data = {}; data["amount"] = Math.round(this.options.amount); data["finishUrl"] = this.options.returnUrl; data["ipAddress"] = this.options.ipAddress; if (this.options.paymentMethodId) data["paymentOptionId"] = this.options.paymentMethodId; if (this.options.bankId) data["paymentOptionSubId"] = this.options.bankId; if (this.options.terminalId) data["paymentOptionSubId"] = this.options.terminalId; if (this.options.testMode) data["testMode"] = 1; data["transaction"] = {}; if (this.options.currency) data["transaction"]["currency"] = this.options.currency; if (this.options.expireDate) data["transaction"]["expireDate"] = this.formatDateTime(this.options.expireDate); if (this.options.exchangeUrl) data["transaction"]["orderExchangeUrl"] = this.options.exchangeUrl; if (this.options.description) data["transaction"]["description"] = this.options.description; if (this.options.orderNumber) data["transaction"]["orderNumber"] = this.options.orderNumber; data["statsData"] = {}; if (this.options.extra1) data["statsData"]["extra1"] = this.options.extra1; if (this.options.extra2) data["statsData"]["extra2"] = this.options.extra2; if (this.options.extra3) data["statsData"]["extra3"] = this.options.extra3; data["statsData"]["object"] = "nodejssdk"; if (Object.keys(data["statsData"]).length == 0) { delete data["statsData"]; } data["enduser"] = {}; if (this.options.language) data["enduser"]["language"] = this.options.language; if (this.options.enduser) { if (this.options.enduser.initials) data["enduser"]["initials"] = this.options.enduser.initials; if (this.options.enduser.lastName) data["enduser"]["lastName"] = this.options.enduser.lastName; if (this.options.enduser.gender) data["enduser"]["gender"] = this.options.enduser.gender; if (this.options.enduser.dob) data["enduser"]["dob"] = this.formatDate(this.options.enduser.dob); if (this.options.enduser.phoneNumber) data["enduser"]["phoneNumber"] = this.options.enduser.phoneNumber; if (this.options.enduser.emailAddress) data["enduser"]["emailAddress"] = this.options.enduser.emailAddress; } if (this.options.address) { data["enduser"]["address"] = this.options.address; data["enduser"]["address"]["streetNumber"] = data["enduser"]["address"]["houseNumber"]; delete data["enduser"]["address"]["houseNumber"]; data["enduser"]["address"]["streetNumberExtension"] = data["enduser"]["address"]["houseNumberExtension"]; delete data["enduser"]["address"]["houseNumberExtension"]; } if (this.options.invoiceAddress) { data["enduser"]["invoiceAddress"] = this.options.invoiceAddress; data["enduser"]["invoiceAddress"]["streetNumber"] = data["enduser"]["invoiceAddress"]["houseNumber"]; delete data["enduser"]["invoiceAddress"]["houseNumber"]; data["enduser"]["invoiceAddress"]["streetNumberExtension"] = data["enduser"]["invoiceAddress"]["houseNumberExtension"]; delete data["enduser"]["address"]["houseNumberExtension"]; } data["saleData"] = {}; if (this.options.invoiceDate) data["saleData"]["invoiceDate"] = this.formatDate(this.options.invoiceDate); if (this.options.deliveryDate) data["saleData"]["deliveryDate"] = this.formatDate(this.options.deliveryDate); if (this.options.products) { data["saleData"]["orderData"] = this.options.products.map((product) => { return { productId: product.id, description: product.name, price: Math.round(product.price), quantity: product.qty, vatCode: this.calculateVatCode(product.price, product.tax), productType: product.type, }; }); } return data; } } exports.TransactionStart = TransactionStart; //# sourceMappingURL=TransactionStart.js.map