@simonbackx/paynl-node
Version:
Simple PayNL SDK for Node.js that uses promises and no singletons
117 lines • 5.58 kB
JavaScript
"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