From d08c9cef78b6293239ed5d9528f935df859ad9d4 Mon Sep 17 00:00:00 2001 From: zgong-gov <123983557+zgong-gov@users.noreply.github.com> Date: Thu, 4 Sep 2025 13:54:35 -0700 Subject: [PATCH 1/3] ORV2-5102: Hot Fix for zero dollar amount amendment failure (#2181) --- .../src/common/helper/permit-fee.helper.ts | 20 +++++++++++++++++++ .../payment/payment.service.ts | 14 +++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/vehicles/src/common/helper/permit-fee.helper.ts b/vehicles/src/common/helper/permit-fee.helper.ts index e2c6dc891a..e84490c548 100644 --- a/vehicles/src/common/helper/permit-fee.helper.ts +++ b/vehicles/src/common/helper/permit-fee.helper.ts @@ -16,6 +16,7 @@ import { import { differenceBetween } from './date-time.helper'; import * as dayjs from 'dayjs'; import { Nullable } from '../types/common'; +import { PaymentMethodType } from '../enum/payment-method-type.enum'; /** * Calculates the permit fee based on the application and old amount. @@ -155,6 +156,25 @@ export const currentPermitFee = ( : pricePerTerm * permitTerms + oldAmount; }; +/** + * Determines whether or not transaction is valid based on payment method and if it's approved. + * @param paymentMethod Payment method used + * @param transactionApproved Approval status of the transaction + * @returns Whether or not the transaction is valid + */ +export const isValidTransaction = ( + paymentMethod: PaymentMethodType, + transactionApproved?: Nullable, +) => { + // For payment methods using payment gateways (ie. PayBC), a payment is considered to have succeeded only if its + // pgApproved flag is 1, and transactions using all other payment methods (ie. IcePay) is automatically considered + // to have succeeded + return ( + paymentMethod !== PaymentMethodType.WEB || + (Boolean(transactionApproved) && transactionApproved > 0) + ); +}; + export const calculatePermitAmount = ( permitPaymentHistory: PermitHistoryDto[], ): number => { diff --git a/vehicles/src/modules/permit-application-payment/payment/payment.service.ts b/vehicles/src/modules/permit-application-payment/payment/payment.service.ts index 3d8cd7329a..c786542e49 100644 --- a/vehicles/src/modules/permit-application-payment/payment/payment.service.ts +++ b/vehicles/src/modules/permit-application-payment/payment/payment.service.ts @@ -38,6 +38,7 @@ import { PaymentMethodType } from './entities/payment-method-type.entity'; import { LogAsyncMethodExecution } from '../../../common/decorator/log-async-method-execution.decorator'; import { calculatePermitAmount, + isValidTransaction, permitFee, validAmount, } from 'src/common/helper/permit-fee.helper'; @@ -856,11 +857,20 @@ export class PaymentService { queryRunner, companyId, ); + + const validPermitPaymentHistory = permitPaymentHistory.filter( + historyItem => isValidTransaction( + historyItem.paymentMethodTypeCode, + historyItem.pgApproved, + ), + ); + const isNoFee = await this.specialAuthService.findNoFee(companyId); const oldAmount = - permitPaymentHistory.length > 0 - ? calculatePermitAmount(permitPaymentHistory) + validPermitPaymentHistory.length > 0 + ? calculatePermitAmount(validPermitPaymentHistory) : undefined; + if (application.permitStatus === ApplicationStatus.VOIDED) return -oldAmount; const fee = permitFee(application, isNoFee, oldAmount); From 63550eea4db97cad423526a233db6c9cbf77ef7b Mon Sep 17 00:00:00 2001 From: Abhishek Dere Date: Thu, 4 Sep 2025 14:03:00 -0700 Subject: [PATCH 2/3] clone branch --- frontend/src/features/permits/pages/Amend/AmendPermit.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/features/permits/pages/Amend/AmendPermit.tsx b/frontend/src/features/permits/pages/Amend/AmendPermit.tsx index 0d13014908..4425ce5bf7 100644 --- a/frontend/src/features/permits/pages/Amend/AmendPermit.tsx +++ b/frontend/src/features/permits/pages/Amend/AmendPermit.tsx @@ -97,6 +97,7 @@ export const AmendPermit = () => { // Query for permit data whenever this page is rendered, for the permit id const { data: permit } = usePermitDetailsQuery(companyId, permitId); + // Get original permit id for the permit const originalPermitId = getDefaultRequiredVal("", permit?.originalPermitId); From fbe3ee91bdd3c90f69d2a5b0dedabf1624ec4ec2 Mon Sep 17 00:00:00 2001 From: Abhishek Dere Date: Thu, 4 Sep 2025 14:07:17 -0700 Subject: [PATCH 3/3] Update AmendPermit.tsx Signed-off-by: Abhishek Dere --- frontend/src/features/permits/pages/Amend/AmendPermit.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/features/permits/pages/Amend/AmendPermit.tsx b/frontend/src/features/permits/pages/Amend/AmendPermit.tsx index 4425ce5bf7..0d13014908 100644 --- a/frontend/src/features/permits/pages/Amend/AmendPermit.tsx +++ b/frontend/src/features/permits/pages/Amend/AmendPermit.tsx @@ -97,7 +97,6 @@ export const AmendPermit = () => { // Query for permit data whenever this page is rendered, for the permit id const { data: permit } = usePermitDetailsQuery(companyId, permitId); - // Get original permit id for the permit const originalPermitId = getDefaultRequiredVal("", permit?.originalPermitId);