From 946872204b4581f4db697fbce1ce0a0a9300666e Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Wed, 25 Sep 2024 12:21:26 +0200 Subject: [PATCH] fix: payment page --- .../server/src/models/PaymentIntegration.ts | 11 ++++++++ .../GetPaymentServicesSpecificInvoice.ts | 2 +- .../Invoices/GetInvoicePaymentLinkMetadata.ts | 1 + .../GetInvoicePaymentLinkTransformer.ts | 28 +++++++++++++++++++ .../PaymentPortal/PaymentPortal.module.scss | 2 +- .../PaymentPortal/PaymentPortal.tsx | 7 +++++ .../PaymentInvoicePreviewContent.tsx | 4 +++ .../webapp/src/hooks/query/payment-link.ts | 7 ++++- 8 files changed, 59 insertions(+), 3 deletions(-) diff --git a/packages/server/src/models/PaymentIntegration.ts b/packages/server/src/models/PaymentIntegration.ts index 04ed8fb31..cb4c8c825 100644 --- a/packages/server/src/models/PaymentIntegration.ts +++ b/packages/server/src/models/PaymentIntegration.ts @@ -25,6 +25,17 @@ export class PaymentIntegration extends Model { return this.paymentEnabled && this.payoutEnabled; } + static get modifiers() { + return { + /** + * Query to filter enabled payment and payout. + */ + fullEnabled(query) { + query.where('paymentEnabled', true).andWhere('payoutEnabled', true); + }, + }; + } + static get jsonSchema() { return { type: 'object', diff --git a/packages/server/src/services/PaymentServices/GetPaymentServicesSpecificInvoice.ts b/packages/server/src/services/PaymentServices/GetPaymentServicesSpecificInvoice.ts index 447f95943..eaab16921 100644 --- a/packages/server/src/services/PaymentServices/GetPaymentServicesSpecificInvoice.ts +++ b/packages/server/src/services/PaymentServices/GetPaymentServicesSpecificInvoice.ts @@ -21,7 +21,7 @@ export class GetPaymentServicesSpecificInvoice { const { PaymentIntegration } = this.tenancy.models(tenantId); const paymentGateways = await PaymentIntegration.query() - .where('active', true) + .modify('fullEnabled') .orderBy('name', 'ASC'); return this.transform.transform( diff --git a/packages/server/src/services/Sales/Invoices/GetInvoicePaymentLinkMetadata.ts b/packages/server/src/services/Sales/Invoices/GetInvoicePaymentLinkMetadata.ts index 362cafa7c..532082d08 100644 --- a/packages/server/src/services/Sales/Invoices/GetInvoicePaymentLinkMetadata.ts +++ b/packages/server/src/services/Sales/Invoices/GetInvoicePaymentLinkMetadata.ts @@ -44,6 +44,7 @@ export class GetInvoicePaymentLinkMetadata { .findById(paymentLink.resourceId) .withGraphFetched('entries.item') .withGraphFetched('customer') + .withGraphFetched('taxes.taxRate') .throwIfNotFound(); return this.transformer.transform( diff --git a/packages/server/src/services/Sales/Invoices/GetInvoicePaymentLinkTransformer.ts b/packages/server/src/services/Sales/Invoices/GetInvoicePaymentLinkTransformer.ts index 268ba0586..15119e436 100644 --- a/packages/server/src/services/Sales/Invoices/GetInvoicePaymentLinkTransformer.ts +++ b/packages/server/src/services/Sales/Invoices/GetInvoicePaymentLinkTransformer.ts @@ -1,4 +1,5 @@ import { ItemEntryTransformer } from './ItemEntryTransformer'; +import { SaleInvoiceTaxEntryTransformer } from './SaleInvoiceTaxEntryTransformer'; import { SaleInvoiceTransformer } from './SaleInvoiceTransformer'; export class GetInvoicePaymentLinkMetaTransformer extends SaleInvoiceTransformer { @@ -37,6 +38,7 @@ export class GetInvoicePaymentLinkMetaTransformer extends SaleInvoiceTransformer 'invoiceMessage', 'termsConditions', 'entries', + 'taxes', ]; }; @@ -62,6 +64,22 @@ export class GetInvoicePaymentLinkMetaTransformer extends SaleInvoiceTransformer } ); }; + + /** + * Retrieves the sale invoice entries. + * @returns {} + */ + protected taxes = (invoice) => { + return this.item( + invoice.taxes, + new GetInvoicePaymentLinkTaxEntryTransformer(), + { + subtotal: invoice.subtotal, + isInclusiveTax: invoice.isInclusiveTax, + currencyCode: invoice.currencyCode, + } + ); + }; } class GetInvoicePaymentLinkEntryMetaTransformer extends ItemEntryTransformer { @@ -94,3 +112,13 @@ class GetInvoicePaymentLinkEntryMetaTransformer extends ItemEntryTransformer { return ['*']; }; } + +class GetInvoicePaymentLinkTaxEntryTransformer extends SaleInvoiceTaxEntryTransformer { + /** + * Included attributes. + * @returns {Array} + */ + public includeAttributes = (): string[] => { + return ['name', 'taxRateCode', 'taxRateAmount', 'taxRateAmountFormatted']; + }; +} diff --git a/packages/webapp/src/containers/PaymentPortal/PaymentPortal.module.scss b/packages/webapp/src/containers/PaymentPortal/PaymentPortal.module.scss index 6870ee413..8401ca7c3 100644 --- a/packages/webapp/src/containers/PaymentPortal/PaymentPortal.module.scss +++ b/packages/webapp/src/containers/PaymentPortal/PaymentPortal.module.scss @@ -1,6 +1,6 @@ .rootBodyPage { - background: #0c103f; + background: #1c1d29; } .root { diff --git a/packages/webapp/src/containers/PaymentPortal/PaymentPortal.tsx b/packages/webapp/src/containers/PaymentPortal/PaymentPortal.tsx index cd8a7bfb9..3f3e2c98d 100644 --- a/packages/webapp/src/containers/PaymentPortal/PaymentPortal.tsx +++ b/packages/webapp/src/containers/PaymentPortal/PaymentPortal.tsx @@ -83,6 +83,13 @@ export function PaymentPortal() { + {sharableLinkMeta?.taxes?.map((tax, key) => ( + + {tax?.name} + {tax?.taxRateAmountFormatted} + + ))} + ({ + label: tax.name, + amount: tax.taxRateAmountFormatted, + }))} /> diff --git a/packages/webapp/src/hooks/query/payment-link.ts b/packages/webapp/src/hooks/query/payment-link.ts index 4750267b5..8857cad81 100644 --- a/packages/webapp/src/hooks/query/payment-link.ts +++ b/packages/webapp/src/hooks/query/payment-link.ts @@ -50,7 +50,6 @@ export function useCreatePaymentLink( ); } - // Get Invoice Payment Link // ----------------------------------------- export interface GetInvoicePaymentLinkResponse { @@ -82,6 +81,12 @@ export interface GetInvoicePaymentLinkResponse { total: number; totalFormatted: string; }>; + taxes: Array<{ + name: string; + taxRateAmount: number; + taxRateAmountFormatted: string; + taxRateCode: string; + }>; } /** * Fetches the sharable invoice link metadata for a given link ID.