Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ function MoneyRequestPreviewContent({
merchant,
tag,
category,
} = useMemo<Partial<TransactionDetails>>(() => getTransactionDetails(transaction) ?? {}, [transaction]);
} = useMemo<Partial<TransactionDetails>>(() => getTransactionDetails(transaction, undefined, policy) ?? {}, [transaction, policy]);

const description = truncate(StringUtils.lineBreaksToSpaces(Parser.htmlToText(requestComment ?? '')), {length: CONST.REQUEST_PREVIEW.MAX_LENGTH});
const requestMerchant = truncate(merchant, {length: CONST.REQUEST_PREVIEW.MAX_LENGTH});
Expand Down
2 changes: 1 addition & 1 deletion src/components/ReportActionItem/ReportPreview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ function ReportPreview({
const lastTransactionViolations = useTransactionViolations(lastTransaction?.transactionID);
const showRTERViolationMessage = numberOfRequests === 1 && hasPendingUI(lastTransaction, lastTransactionViolations);
const shouldShowBrokenConnectionViolation = numberOfRequests === 1 && shouldShowBrokenConnectionViolationForMultipleTransactions(transactionIDList, iouReport, policy, violations);
let formattedMerchant = numberOfRequests === 1 ? getMerchant(lastTransaction) : null;
let formattedMerchant = numberOfRequests === 1 ? getMerchant(lastTransaction, policy) : null;
const formattedDescription = numberOfRequests === 1 ? Parser.htmlToMarkdown(getDescription(lastTransaction)) : null;

if (isPartialMerchant(formattedMerchant ?? '')) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import UserInfoCellsWithArrow from '@components/SelectionList/Search/UserInfoCel
import Text from '@components/Text';
import TransactionPreviewSkeletonView from '@components/TransactionPreviewSkeletonView';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import {convertToDisplayString} from '@libs/CurrencyUtils';
Expand All @@ -29,6 +30,7 @@ import {hasReceipt as hasReceiptTransactionUtils, isReceiptBeingScanned} from '@
import ViolationsUtils from '@libs/Violations/ViolationsUtils';
import variables from '@styles/variables';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {TransactionPreviewContentProps} from './types';

function TransactionPreviewContent({
Expand All @@ -55,7 +57,8 @@ function TransactionPreviewContent({
const styles = useThemeStyles();
const {translate} = useLocalize();

const transactionDetails = useMemo<Partial<TransactionDetails>>(() => getTransactionDetails(transaction) ?? {}, [transaction]);
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${iouReport?.policyID}`, {canBeMissing: true});
const transactionDetails = useMemo<Partial<TransactionDetails>>(() => getTransactionDetails(transaction, undefined, policy) ?? {}, [transaction, policy]);
const managerID = iouReport?.managerID ?? reportPreviewAction?.childManagerAccountID ?? CONST.DEFAULT_NUMBER_ID;
const ownerAccountID = iouReport?.ownerAccountID ?? reportPreviewAction?.childOwnerAccountID ?? CONST.DEFAULT_NUMBER_ID;
const isReportAPolicyExpenseChat = isPolicyExpenseChat(chatReport);
Expand Down
11 changes: 7 additions & 4 deletions src/libs/ReportUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,6 @@ import {
getTag,
getTaxAmount,
getTaxCode,
getTransaction,
getAmount as getTransactionAmount,
getWaypoints,
hasMissingSmartscanFields as hasMissingSmartscanFieldsTransactionUtils,
Expand Down Expand Up @@ -2379,7 +2378,7 @@ function canDeleteTransaction(moneyRequestReport: OnyxEntry<Report>): boolean {
* Checks whether the card transaction support deleting based on liability type
*/
function canDeleteCardTransactionByLiabilityType(iouTransactionID?: string): boolean {
const transaction = getTransaction(iouTransactionID ?? CONST.DEFAULT_NUMBER_ID);
const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${iouTransactionID}`];
const isCardTransaction = isCardTransactionTransactionUtils(transaction);
if (!isCardTransaction) {
return true;
Expand Down Expand Up @@ -3715,7 +3714,11 @@ function getMoneyRequestReportName({
* into a flat object. Used for displaying transactions and sending them in API commands
*/

function getTransactionDetails(transaction: OnyxInputOrEntry<Transaction>, createdDateFormat: string = CONST.DATE.FNS_FORMAT_STRING): TransactionDetails | undefined {
function getTransactionDetails(
transaction: OnyxInputOrEntry<Transaction>,
createdDateFormat: string = CONST.DATE.FNS_FORMAT_STRING,
policy: OnyxEntry<Policy> = undefined,
): TransactionDetails | undefined {
if (!transaction) {
return;
}
Expand All @@ -3728,7 +3731,7 @@ function getTransactionDetails(transaction: OnyxInputOrEntry<Transaction>, creat
taxCode: getTaxCode(transaction),
currency: getCurrency(transaction),
comment: getDescription(transaction),
merchant: getMerchant(transaction),
merchant: getMerchant(transaction, policy),
waypoints: getWaypoints(transaction),
customUnitRateID: getRateID(transaction),
category: getCategory(transaction),
Expand Down
9 changes: 6 additions & 3 deletions src/libs/SearchUIUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ function getTransactionItemCommonFormattedProperties(
transactionItem: SearchTransaction,
from: SearchPersonalDetails,
to: SearchPersonalDetails,
policy: SearchPolicy,
): Pick<TransactionListItemType, 'formattedFrom' | 'formattedTo' | 'formattedTotal' | 'formattedMerchant' | 'date'> {
const isExpenseReport = transactionItem.reportType === CONST.REPORT.TYPE.EXPENSE;

Expand All @@ -143,7 +144,7 @@ function getTransactionItemCommonFormattedProperties(
const formattedTo = formatPhoneNumber(getDisplayNameOrDefault(to, '', false) || getDisplayNameOrDefault(getPersonalDetailsForAccountID(to?.accountID)));
const formattedTotal = getTransactionAmount(transactionItem, isExpenseReport);
const date = transactionItem?.modifiedCreated ? transactionItem.modifiedCreated : transactionItem?.created;
const merchant = getTransactionMerchant(transactionItem);
const merchant = getTransactionMerchant(transactionItem, policy as OnyxTypes.Policy);
const formattedMerchant = merchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT ? '' : merchant;

return {
Expand Down Expand Up @@ -323,10 +324,11 @@ function getTransactionsSections(data: OnyxTypes.SearchResults['data'], metadata
const transactionItem = data[key];
const report = data[`${ONYXKEYS.COLLECTION.REPORT}${transactionItem.reportID}`];
const shouldShowBlankTo = isOpenExpenseReport(report);
const policy = data[`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`];
const from = data.personalDetailsList?.[transactionItem.accountID];
const to = transactionItem.managerID && !shouldShowBlankTo ? data.personalDetailsList?.[transactionItem.managerID] : emptyPersonalDetails;

const {formattedFrom, formattedTo, formattedTotal, formattedMerchant, date} = getTransactionItemCommonFormattedProperties(transactionItem, from, to);
const {formattedFrom, formattedTo, formattedTotal, formattedMerchant, date} = getTransactionItemCommonFormattedProperties(transactionItem, from, to, policy);

return {
...transactionItem,
Expand Down Expand Up @@ -598,12 +600,13 @@ function getReportSections(data: OnyxTypes.SearchResults['data'], metadata: Onyx
const transactionItem = {...data[key]};
const reportKey = `${ONYXKEYS.COLLECTION.REPORT}${transactionItem.reportID}`;
const report = data[`${ONYXKEYS.COLLECTION.REPORT}${transactionItem.reportID}`];
const policy = data[`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`];
const shouldShowBlankTo = isOpenExpenseReport(report);

const from = data.personalDetailsList?.[transactionItem.accountID];
const to = transactionItem.managerID && !shouldShowBlankTo ? data.personalDetailsList?.[transactionItem.managerID] : emptyPersonalDetails;

const {formattedFrom, formattedTo, formattedTotal, formattedMerchant, date} = getTransactionItemCommonFormattedProperties(transactionItem, from, to);
const {formattedFrom, formattedTo, formattedTotal, formattedMerchant, date} = getTransactionItemCommonFormattedProperties(transactionItem, from, to, policy);

const transaction = {
...transactionItem,
Expand Down
14 changes: 7 additions & 7 deletions src/libs/TransactionUtils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -649,10 +649,10 @@ function isFetchingWaypointsFromServer(transaction: OnyxInputOrEntry<Transaction
/**
* Return the merchant field from the transaction, return the modifiedMerchant if present.
*/
function getMerchant(transaction: OnyxInputOrEntry<Transaction>): string {
function getMerchant(transaction: OnyxInputOrEntry<Transaction>, policyParam: OnyxEntry<Policy> = undefined): string {
if (transaction && isDistanceRequest(transaction)) {
const report = getReportOrDraftReport(transaction.reportID);
const policy = getPolicy(report?.policyID);
const policy = policyParam ?? getPolicy(report?.policyID);
const mileageRate = DistanceRequestUtils.getRate({transaction, policy});
const {unit, rate} = mileageRate;
const distanceInMeters = getDistanceInMeters(transaction, unit);
Expand Down Expand Up @@ -837,7 +837,7 @@ function hasMissingSmartscanFields(transaction: OnyxInputOrEntry<Transaction>):
* Get all transaction violations of the transaction with given transactionID.
*/
function getTransactionViolations(transactionID: string | undefined, transactionViolations: OnyxCollection<TransactionViolations> | undefined): TransactionViolations | undefined {
const transaction = getTransaction(transactionID);
const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
if (!transactionID || !transactionViolations) {
return undefined;
}
Expand Down Expand Up @@ -1030,7 +1030,7 @@ function getRecentTransactions(transactions: Record<string, string>, size = 2):
* @param checkDismissed - whether to check if the violation has already been dismissed as well
*/
function isDuplicate(transactionID: string | undefined, checkDismissed = false): boolean {
const transaction = getTransaction(transactionID);
const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
if (!transaction) {
return false;
}
Expand Down Expand Up @@ -1120,7 +1120,7 @@ function hasDuplicateTransactions(iouReportID?: string, allReportTransactions?:
* Checks if any violations for the provided transaction are of type 'notice'
*/
function hasNoticeTypeViolation(transactionID: string | undefined, transactionViolations: TransactionViolation[] | OnyxCollection<TransactionViolation[]>, showInReview?: boolean): boolean {
const transaction = getTransaction(transactionID);
const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
if (!doesTransactionSupportViolations(transaction)) {
return false;
}
Expand All @@ -1138,7 +1138,7 @@ function hasNoticeTypeViolation(transactionID: string | undefined, transactionVi
* Checks if any violations for the provided transaction are of type 'warning'
*/
function hasWarningTypeViolation(transactionID: string | undefined, transactionViolations: TransactionViolation[] | OnyxCollection<TransactionViolation[]>, showInReview?: boolean): boolean {
const transaction = getTransaction(transactionID);
const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
if (!doesTransactionSupportViolations(transaction)) {
return false;
}
Expand Down Expand Up @@ -1328,7 +1328,7 @@ function compareDuplicateTransactionFields(
}
const transactionViolations = allTransactionViolations?.[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${reviewingTransactionID}`];
const duplicates = transactionViolations?.find((violation) => violation.name === CONST.VIOLATIONS.DUPLICATED_TRANSACTION)?.data?.duplicates ?? [];
const transactions = removeSettledAndApprovedTransactions([reviewingTransactionID, ...duplicates]).map((item) => getTransaction(item));
const transactions = removeSettledAndApprovedTransactions([reviewingTransactionID, ...duplicates]).map((item) => allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${item}`]);

const fieldsToCompare: FieldsToCompare = {
merchant: ['modifiedMerchant', 'merchant'],
Expand Down