diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 78c19cd51180..0b1467c52738 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -61,7 +61,6 @@ import { getCurrency, getDescription, getDistanceInMeters, - getOriginalTransactionWithSplitInfo, getTagForDisplay, getTaxName, hasMissingSmartscanFields, @@ -70,6 +69,7 @@ import { hasRoute as hasRouteTransactionUtils, isCardTransaction as isCardTransactionTransactionUtils, isDistanceRequest as isDistanceRequestTransactionUtils, + isExpenseSplit, isPerDiemRequest as isPerDiemRequestTransactionUtils, isScanning, shouldShowAttendees as shouldShowAttendeesTransactionUtils, @@ -176,6 +176,9 @@ function MoneyRequestView({ const transactionViolations = useTransactionViolations(transaction?.transactionID); const [outstandingReportsByPolicyID] = useOnyx(ONYXKEYS.DERIVED.OUTSTANDING_REPORTS_BY_POLICY_ID, {canBeMissing: true}); + const originalTransactionIDFromComment = transaction?.comment?.originalTransactionID; + const [originalTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionIDFromComment ?? ''}`, {canBeMissing: true}); + const { created: transactionDate, amount: transactionAmount, @@ -327,6 +330,9 @@ function MoneyRequestView({ if (formattedOriginalAmount) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.original')} ${formattedOriginalAmount}`; } + if (isExpenseSplit(transaction, originalTransaction)) { + amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.split')}`; + } if (isCancelled) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.canceled')}`; } @@ -334,7 +340,7 @@ function MoneyRequestView({ if (!isDistanceRequest && !isPerDiemRequest) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.cash')}`; } - if (getOriginalTransactionWithSplitInfo(transaction).isExpenseSplit) { + if (isExpenseSplit(transaction, originalTransaction)) { amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.split')}`; } if (isCancelled) { diff --git a/src/libs/TransactionUtils/index.ts b/src/libs/TransactionUtils/index.ts index 445e1a7ec51a..4ab47fc02151 100644 --- a/src/libs/TransactionUtils/index.ts +++ b/src/libs/TransactionUtils/index.ts @@ -1814,6 +1814,17 @@ function shouldShowRTERViolationMessage(transactions?: Transaction[]) { return transactions?.length === 1 && hasPendingUI(transactions?.at(0), getTransactionViolations(transactions?.at(0), allTransactionViolations)); } +function isExpenseSplit(transaction: OnyxEntry, originalTransaction: OnyxEntry): boolean { + const {originalTransactionID, source, splits} = transaction?.comment ?? {}; + + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + if ((splits && splits.length > 0) || !originalTransactionID || source !== CONST.IOU.TYPE.SPLIT) { + return false; + } + + return !originalTransaction?.comment?.splits; +} + const getOriginalTransactionWithSplitInfo = (transaction: OnyxEntry) => { const {originalTransactionID, source, splits} = transaction?.comment ?? {}; const originalTransaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionID}`]; @@ -1828,7 +1839,7 @@ const getOriginalTransactionWithSplitInfo = (transaction: OnyxEntry // To determine if it’s a split bill or a split expense, we check for the presence of `comment.splits` on the original transaction. // Since both splits use `comment.originalTransaction`, but split expenses won’t have `comment.splits`. - return {isBillSplit: !!originalTransaction?.comment?.splits, isExpenseSplit: !originalTransaction?.comment?.splits, originalTransaction: originalTransaction ?? transaction}; + return {isBillSplit: !!originalTransaction?.comment?.splits, isExpenseSplit: isExpenseSplit(transaction, originalTransaction), originalTransaction: originalTransaction ?? transaction}; }; /** @@ -1975,6 +1986,7 @@ export { shouldShowViolation, isUnreportedAndHasInvalidDistanceRateTransaction, getTransactionViolationsOfTransaction, + isExpenseSplit, }; export type {TransactionChanges};