UNPKG

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
"use strict"; 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 }; } });