From 8ced1f08497f3dcb6c26af1e284790c8c4c15055 Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Thu, 7 Aug 2025 15:39:21 +0700 Subject: [PATCH 1/4] fix: invalid rate error not automatically seen when moving distance expense to new report --- src/libs/Violations/ViolationsUtils.ts | 8 ++++++++ src/pages/iou/request/step/IOURequestStepReport.tsx | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libs/Violations/ViolationsUtils.ts b/src/libs/Violations/ViolationsUtils.ts index e15112106c38..b10f9518385a 100644 --- a/src/libs/Violations/ViolationsUtils.ts +++ b/src/libs/Violations/ViolationsUtils.ts @@ -294,6 +294,14 @@ const ViolationsUtils = { newTransactionViolations = reject(newTransactionViolations, {name: CONST.VIOLATIONS.CUSTOM_UNIT_OUT_OF_POLICY}); } + if (updatedTransaction?.comment?.customUnit?.customUnitRateID && !getDistanceRateCustomUnitRate(policy, updatedTransaction.comment.customUnit.customUnitRateID)) { + newTransactionViolations.push({ + name: CONST.VIOLATIONS.CUSTOM_UNIT_OUT_OF_POLICY, + type: CONST.VIOLATION_TYPES.VIOLATION, + showInReview: true, + }); + } + const isControlPolicy = policy.type === CONST.POLICY.TYPE.CORPORATE; const inputDate = new Date(updatedTransaction.modifiedCreated ?? updatedTransaction.created); const shouldDisplayFutureDateViolation = !isInvoiceTransaction && DateUtils.isFutureDay(inputDate) && isControlPolicy; diff --git a/src/pages/iou/request/step/IOURequestStepReport.tsx b/src/pages/iou/request/step/IOURequestStepReport.tsx index 8500ae69118d..f0b1770b223c 100644 --- a/src/pages/iou/request/step/IOURequestStepReport.tsx +++ b/src/pages/iou/request/step/IOURequestStepReport.tsx @@ -28,6 +28,7 @@ function IOURequestStepReport({route, transaction}: IOURequestStepReportProps) { const isUnreported = transaction?.reportID === CONST.REPORT.UNREPORTED_REPORT_ID; const reportID = isUnreported ? transaction?.participants?.at(0)?.reportID : transaction?.reportID; const [transactionReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${getNonEmptyStringOnyxID(reportID)}`, {canBeMissing: false}); + const [policies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true}); const isEditing = action === CONST.IOU.ACTION.EDIT; const isCreateReport = action === CONST.IOU.ACTION.CREATE; @@ -91,7 +92,8 @@ function IOURequestStepReport({route, transaction}: IOURequestStepReportProps) { ); if (isEditing) { - changeTransactionsReport([transaction.transactionID], item.value); + const policy = policies?.[`${ONYXKEYS.COLLECTION.POLICY}${item.policyID}`]; + changeTransactionsReport([transaction.transactionID], item.value, policy); } }); }; From 8c62d0215bd6bc3539abc292e5a61f403f944e4e Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Wed, 13 Aug 2025 11:14:12 +0700 Subject: [PATCH 2/4] refactor code --- src/libs/Violations/ViolationsUtils.ts | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/libs/Violations/ViolationsUtils.ts b/src/libs/Violations/ViolationsUtils.ts index b10f9518385a..8ee6a8d17094 100644 --- a/src/libs/Violations/ViolationsUtils.ts +++ b/src/libs/Violations/ViolationsUtils.ts @@ -290,16 +290,18 @@ const ViolationsUtils = { : getTagViolationsForMultiLevelTags(updatedTransaction, newTransactionViolations, policyTagList, hasDependentTags); } - if (updatedTransaction?.comment?.customUnit?.customUnitRateID && !!getDistanceRateCustomUnitRate(policy, updatedTransaction?.comment?.customUnit?.customUnitRateID)) { - newTransactionViolations = reject(newTransactionViolations, {name: CONST.VIOLATIONS.CUSTOM_UNIT_OUT_OF_POLICY}); - } - - if (updatedTransaction?.comment?.customUnit?.customUnitRateID && !getDistanceRateCustomUnitRate(policy, updatedTransaction.comment.customUnit.customUnitRateID)) { - newTransactionViolations.push({ - name: CONST.VIOLATIONS.CUSTOM_UNIT_OUT_OF_POLICY, - type: CONST.VIOLATION_TYPES.VIOLATION, - showInReview: true, - }); + const customUnitRateID = updatedTransaction?.comment?.customUnit?.customUnitRateID; + if (customUnitRateID) { + const distanceRateCustomRate = getDistanceRateCustomUnitRate(policy, customUnitRateID); + if (!!distanceRateCustomRate) { + newTransactionViolations = reject(newTransactionViolations, {name: CONST.VIOLATIONS.CUSTOM_UNIT_OUT_OF_POLICY}); + } else { + newTransactionViolations.push({ + name: CONST.VIOLATIONS.CUSTOM_UNIT_OUT_OF_POLICY, + type: CONST.VIOLATION_TYPES.VIOLATION, + showInReview: true, + }); + } } const isControlPolicy = policy.type === CONST.POLICY.TYPE.CORPORATE; From 9d211e29efc93903eedf9aed352a865a0156e327 Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Wed, 13 Aug 2025 11:23:49 +0700 Subject: [PATCH 3/4] fix lint --- src/libs/Violations/ViolationsUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/Violations/ViolationsUtils.ts b/src/libs/Violations/ViolationsUtils.ts index 8ee6a8d17094..4806bc844e44 100644 --- a/src/libs/Violations/ViolationsUtils.ts +++ b/src/libs/Violations/ViolationsUtils.ts @@ -293,7 +293,7 @@ const ViolationsUtils = { const customUnitRateID = updatedTransaction?.comment?.customUnit?.customUnitRateID; if (customUnitRateID) { const distanceRateCustomRate = getDistanceRateCustomUnitRate(policy, customUnitRateID); - if (!!distanceRateCustomRate) { + if (distanceRateCustomRate) { newTransactionViolations = reject(newTransactionViolations, {name: CONST.VIOLATIONS.CUSTOM_UNIT_OUT_OF_POLICY}); } else { newTransactionViolations.push({ From c70a6c745599880ec610a6873e00e9cd1cd6844e Mon Sep 17 00:00:00 2001 From: thelullabyy Date: Sun, 17 Aug 2025 10:17:24 +0700 Subject: [PATCH 4/4] update code --- src/libs/Violations/ViolationsUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/Violations/ViolationsUtils.ts b/src/libs/Violations/ViolationsUtils.ts index 4806bc844e44..520a30712fb5 100644 --- a/src/libs/Violations/ViolationsUtils.ts +++ b/src/libs/Violations/ViolationsUtils.ts @@ -291,7 +291,7 @@ const ViolationsUtils = { } const customUnitRateID = updatedTransaction?.comment?.customUnit?.customUnitRateID; - if (customUnitRateID) { + if (customUnitRateID && customUnitRateID.length > 0) { const distanceRateCustomRate = getDistanceRateCustomUnitRate(policy, customUnitRateID); if (distanceRateCustomRate) { newTransactionViolations = reject(newTransactionViolations, {name: CONST.VIOLATIONS.CUSTOM_UNIT_OUT_OF_POLICY});