vendure-plugin-payment-terms
Version:
This plugin allows certain customers to pay using Payment Terms. Payment Terms are when a customer is allowed to make a payment a certain number of days after an invoice is due.
46 lines (45 loc) • 1.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.paymentWithTermsHandler = void 0;
const core_1 = require("@vendure/core");
let entityHydrator;
let customerService;
exports.paymentWithTermsHandler = new core_1.PaymentMethodHandler({
code: 'payment-terms-handler',
description: [{
languageCode: core_1.LanguageCode.en,
value: 'Payment Terms Handler',
}],
args: {},
init(injector) {
entityHydrator = injector.get(core_1.EntityHydrator);
customerService = injector.get(core_1.CustomerService);
},
createPayment: async (ctx, order, amount, args, metadata) => {
await entityHydrator.hydrate(ctx, order, { relations: ['customer'] });
if (order.customer?.customFields.paymentLimit && order.customer.customFields.paymentLimit >= order.totalWithTax) {
order.customer.customFields.paymentLimit -= order.totalWithTax;
await customerService.update(ctx, order.customer);
return {
amount: order.totalWithTax,
state: 'Settled',
transactionId: metadata.paymentIntentI,
metadata: {
currentPaymentLimit: order.customer.customFields.paymentLimit,
...metadata
},
};
}
return {
amount: order.totalWithTax,
state: 'Declined',
metadata: {
errorMessage: `Payment Limit Exceeded, the current value is ${order?.customer?.customFields.paymentLimit}`,
...metadata
},
};
},
settlePayment: async (ctx, order, payment, args) => {
return { success: true };
}
});