Skip to content

Commit ff59f64

Browse files
GonalsOSBotify
authored andcommitted
Merge pull request #75433 from Expensify/revert-72674-alberto-reZero
[CP Staging] Revert "Allow zero amount expenses - second try" (cherry picked from commit 0c93c37) (cherry-picked to staging by mountiny)
1 parent 92164a5 commit ff59f64

34 files changed

+125
-148
lines changed

__mocks__/reportData/transactions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ const transactionR14932: Transaction = {
3030
reimbursable: true,
3131
hasEReceipt: true,
3232
cardID: 0,
33-
modifiedAmount: '',
33+
modifiedAmount: 0,
3434
originalAmount: 0,
3535
comment: {},
3636
bank: '',
@@ -59,7 +59,7 @@ const transactionR98765: Transaction = {
5959
hasEReceipt: true,
6060
managedCard: false,
6161
billable: false,
62-
modifiedAmount: '',
62+
modifiedAmount: 0,
6363
cardID: 0,
6464
originalAmount: 0,
6565
comment: {},

src/components/ReportActionItem/MoneyRequestReportPreview/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ function MoneyRequestReportPreview({
9696
}
9797

9898
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
99-
return transactions.some((transaction) => (Number(transaction?.modifiedAmount) || transaction?.amount) < 0);
99+
return transactions.some((transaction) => (transaction?.modifiedAmount || transaction?.amount) < 0);
100100
}, [transactions, action.childType, iouReport]);
101101

102102
const openReportFromPreview = useCallback(() => {

src/components/ReportActionItem/MoneyRequestView.tsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,7 @@ function MoneyRequestView({
205205
originalCurrency: transactionOriginalCurrency,
206206
postedDate: transactionPostedDate,
207207
} = useMemo<Partial<TransactionDetails>>(() => getTransactionDetails(transaction, undefined, undefined, allowNegativeAmount) ?? {}, [allowNegativeAmount, transaction]);
208-
const isEmptyMerchant =
209-
transactionMerchant === '' || transactionMerchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT || transactionMerchant === CONST.TRANSACTION.DEFAULT_MERCHANT;
208+
const isEmptyMerchant = transactionMerchant === '' || transactionMerchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT;
210209
const isDistanceRequest = isDistanceRequestTransactionUtils(transaction);
211210
const isManualDistanceRequest = isManualDistanceRequestTransactionUtils(transaction);
212211
const isMapDistanceRequest = isDistanceRequest && !isManualDistanceRequest;
@@ -219,10 +218,9 @@ function MoneyRequestView({
219218
// Use the updated transaction amount in merge flow to have correct positive/negative sign
220219
const actualAmount = isFromMergeTransaction && updatedTransaction ? updatedTransaction.amount : transactionAmount;
221220
const actualCurrency = updatedTransaction ? getCurrency(updatedTransaction) : transactionCurrency;
222-
const shouldDisplayTransactionAmount = (isDistanceRequest && hasRoute) || !isDistanceRequest;
221+
const shouldDisplayTransactionAmount = ((isDistanceRequest && hasRoute) || !!actualAmount) && actualAmount !== undefined;
223222
const formattedTransactionAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount, actualCurrency) : '';
224-
const formattedPerAttendeeAmount =
225-
shouldDisplayTransactionAmount && actualAmount !== undefined ? convertToDisplayString(actualAmount / (transactionAttendees?.length ?? 1), actualCurrency) : '';
223+
const formattedPerAttendeeAmount = shouldDisplayTransactionAmount ? convertToDisplayString(actualAmount / (actualAttendees?.length ?? 1), actualCurrency) : '';
226224

227225
const formattedOriginalAmount = transactionOriginalAmount && transactionOriginalCurrency && convertToDisplayString(transactionOriginalAmount, transactionOriginalCurrency);
228226
const isCardTransaction = isCardTransactionTransactionUtils(transaction);
@@ -313,7 +311,7 @@ function MoneyRequestView({
313311
let rateToDisplay = isCustomUnitOutOfPolicy ? translate('common.rateOutOfPolicy') : DistanceRequestUtils.getRateForDisplay(unit, rate, currency, translate, toLocaleDigit, isOffline);
314312
const distanceToDisplay = DistanceRequestUtils.getDistanceForDisplay(hasRoute, distance, unit, rate, translate);
315313
let merchantTitle = isEmptyMerchant ? '' : transactionMerchant;
316-
let amountTitle = formattedTransactionAmount?.toString() || '';
314+
let amountTitle = formattedTransactionAmount ? formattedTransactionAmount.toString() : '';
317315
if (isTransactionScanning) {
318316
merchantTitle = translate('iou.receiptStatusTitle');
319317
amountTitle = translate('iou.receiptStatusTitle');
@@ -327,10 +325,7 @@ function MoneyRequestView({
327325
}
328326
return getDescription(updatedTransaction ?? null);
329327
}, [updatedTransaction]);
330-
const isEmptyUpdatedMerchant =
331-
updatedTransaction?.modifiedMerchant === '' ||
332-
updatedTransaction?.modifiedMerchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT ||
333-
updatedTransaction?.modifiedMerchant === CONST.TRANSACTION.DEFAULT_MERCHANT;
328+
const isEmptyUpdatedMerchant = updatedTransaction?.modifiedMerchant === '' || updatedTransaction?.modifiedMerchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT;
334329
const updatedMerchantTitle = isEmptyUpdatedMerchant ? '' : (updatedTransaction?.modifiedMerchant ?? merchantTitle);
335330

336331
const saveBillable = useCallback(
@@ -398,6 +393,10 @@ function MoneyRequestView({
398393
// Checks applied when creating a new expense
399394
// NOTE: receipt field can return multiple violations, so we need to handle it separately
400395
const fieldChecks: Partial<Record<ViolationField, {isError: boolean; translationPath: TranslationPaths}>> = {
396+
amount: {
397+
isError: transactionAmount === 0,
398+
translationPath: canEditAmount ? 'common.error.enterAmount' : 'common.error.missingAmount',
399+
},
401400
merchant: {
402401
isError: !isSettled && !isCancelled && isPolicyExpenseChat && isEmptyMerchant,
403402
translationPath: canEditMerchant ? 'common.error.enterMerchant' : 'common.error.missingMerchantName',
@@ -432,6 +431,7 @@ function MoneyRequestView({
432431
return '';
433432
},
434433
[
434+
transactionAmount,
435435
isSettled,
436436
isCancelled,
437437
isPolicyExpenseChat,
@@ -442,6 +442,7 @@ function MoneyRequestView({
442442
hasViolations,
443443
translate,
444444
getViolationsForField,
445+
canEditAmount,
445446
canEditDate,
446447
canEditMerchant,
447448
canEdit,

src/components/ReportActionItem/TransactionPreview/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ function TransactionPreview(props: TransactionPreviewProps) {
9292

9393
// See description of `transactionRawAmount` prop for more context
9494
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
95-
const transactionRawAmount = (Number(transaction?.modifiedAmount) || transaction?.amount) ?? 0;
95+
const transactionRawAmount = (transaction?.modifiedAmount || transaction?.amount) ?? 0;
9696

9797
const shouldDisableOnPress = isBillSplit && isEmptyObject(transaction);
9898
const isTransactionMadeWithCard = isManagedCardTransaction(transaction);

src/components/Search/index.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ import {
5555
shouldShowEmptyState,
5656
shouldShowYear as shouldShowYearUtil,
5757
} from '@libs/SearchUIUtils';
58-
import {hasValidModifiedAmount, isOnHold, isTransactionPendingDelete, mergeProhibitedViolations, shouldShowViolation} from '@libs/TransactionUtils';
58+
import {isOnHold, isTransactionPendingDelete, mergeProhibitedViolations, shouldShowViolation} from '@libs/TransactionUtils';
5959
import Navigation, {navigationRef} from '@navigation/Navigation';
6060
import type {SearchFullscreenNavigatorParamList} from '@navigation/types';
6161
import EmptySearchView from '@pages/Search/EmptySearchView';
@@ -115,7 +115,7 @@ function mapTransactionItemToSelectedEntry(item: TransactionListItemType, outsta
115115
convertedCurrency: item.convertedCurrency,
116116
reportID: item.reportID,
117117
policyID: item.report?.policyID,
118-
amount: hasValidModifiedAmount(item) ? Number(item.modifiedAmount) : item.amount,
118+
amount: item.modifiedAmount ?? item.amount,
119119
convertedAmount: item.convertedAmount,
120120
currency: item.currency,
121121
isFromOneTransactionReport: item.isFromOneTransactionReport,
@@ -194,7 +194,7 @@ function prepareTransactionsList(item: TransactionListItemType, selectedTransact
194194
action: item.action,
195195
reportID: item.reportID,
196196
policyID: item.policyID,
197-
amount: hasValidModifiedAmount(item) ? Number(item.modifiedAmount) : item.amount,
197+
amount: Math.abs(item.modifiedAmount || item.amount),
198198
convertedAmount: item.convertedAmount,
199199
convertedCurrency: item.convertedCurrency,
200200
currency: item.currency,
@@ -486,7 +486,7 @@ function Search({
486486
canDelete: transactionItem.canDelete,
487487
reportID: transactionItem.reportID,
488488
policyID: transactionItem.report?.policyID,
489-
amount: hasValidModifiedAmount(transactionItem) ? Number(transactionItem.modifiedAmount) : transactionItem.amount,
489+
amount: transactionItem.modifiedAmount ?? transactionItem.amount,
490490
convertedAmount: transactionItem.convertedAmount,
491491
convertedCurrency: transactionItem.convertedCurrency,
492492
currency: transactionItem.currency,
@@ -523,7 +523,7 @@ function Search({
523523
canDelete: transactionItem.canDelete,
524524
reportID: transactionItem.reportID,
525525
policyID: transactionItem.report?.policyID,
526-
amount: hasValidModifiedAmount(transactionItem) ? Number(transactionItem.modifiedAmount) : transactionItem.amount,
526+
amount: transactionItem.modifiedAmount ?? transactionItem.amount,
527527
convertedAmount: transactionItem.convertedAmount,
528528
convertedCurrency: transactionItem.convertedCurrency,
529529
currency: transactionItem.currency,

src/components/TransactionItemRow/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ function getMerchantName(transactionItem: TransactionWithOptionalSearchFields, t
126126
}
127127

128128
const merchantName = StringUtils.getFirstLine(merchant);
129-
return merchantName !== CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT && merchantName !== CONST.TRANSACTION.DEFAULT_MERCHANT ? merchantName : '';
129+
return merchantName !== CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT ? merchantName : '';
130130
}
131131

132132
function TransactionItemRow({

src/libs/API/parameters/TrackExpenseParams.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ type TrackExpenseParams = {
3232
customUnitRateID?: string;
3333
description?: string;
3434
distance?: number;
35-
isDistance?: boolean;
3635
};
3736

3837
export default TrackExpenseParams;

src/libs/DistanceRequestUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ function getDistanceForDisplay(
175175
translate: LocaleContextProps['translate'],
176176
useShortFormUnit?: boolean,
177177
): string {
178-
if (!hasRoute || !unit) {
178+
if (!hasRoute || !unit || !distanceInMeters) {
179179
return translate('iou.fieldPending');
180180
}
181181

src/libs/ReportUtils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5351,7 +5351,7 @@ function getModifiedExpenseOriginalMessage(
53515351
originalMessage.oldMerchant = getMerchant(oldTransaction);
53525352

53535353
// For the originalMessage, we should use the non-negative amount, similar to what getAmount does for oldAmount
5354-
originalMessage.amount = Math.abs(Number(updatedTransaction?.modifiedAmount ?? 0));
5354+
originalMessage.amount = Math.abs(updatedTransaction?.modifiedAmount ?? 0);
53555355
originalMessage.currency = updatedTransaction?.modifiedCurrency ?? CONST.CURRENCY.USD;
53565356
originalMessage.merchant = updatedTransaction?.modifiedMerchant;
53575357
}
@@ -11980,7 +11980,7 @@ function hasExportError(reportActions: OnyxEntry<ReportActions> | ReportAction[]
1198011980
function doesReportContainRequestsFromMultipleUsers(iouReport: OnyxEntry<Report>): boolean {
1198111981
const transactions = getReportTransactions(iouReport?.reportID);
1198211982
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
11983-
return isIOUReport(iouReport) && transactions.some((transaction) => (Number(transaction?.modifiedAmount) || transaction?.amount) <= 0);
11983+
return isIOUReport(iouReport) && transactions.some((transaction) => (transaction?.modifiedAmount || transaction?.amount) < 0);
1198411984
}
1198511985

1198611986
/**

src/libs/SearchUIUtils.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ function getTransactionItemCommonFormattedProperties(
639639
const formattedTotal = getTransactionAmount(transactionItem, isExpenseReport);
640640
const date = transactionItem?.modifiedCreated ? transactionItem.modifiedCreated : transactionItem?.created;
641641
const merchant = getTransactionMerchant(transactionItem, policy);
642-
const formattedMerchant = merchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT || merchant === CONST.TRANSACTION.DEFAULT_MERCHANT ? '' : merchant;
642+
const formattedMerchant = merchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT ? '' : merchant;
643643

644644
return {
645645
formattedFrom,
@@ -697,7 +697,7 @@ function getShouldShowMerchant(data: OnyxTypes.SearchResults['data']): boolean {
697697
if (isTransactionEntry(key)) {
698698
const item = data[key];
699699
const merchant = item.modifiedMerchant ? item.modifiedMerchant : (item.merchant ?? '');
700-
return merchant !== '' && merchant !== CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT && merchant !== CONST.TRANSACTION.DEFAULT_MERCHANT;
700+
return merchant !== '' && merchant !== CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT;
701701
}
702702
return false;
703703
});
@@ -767,7 +767,7 @@ function isAmountTooLong(amount: number, maxLength = 8): boolean {
767767

768768
function isTransactionAmountTooLong(transactionItem: TransactionListItemType | SearchTransaction | OnyxTypes.Transaction) {
769769
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
770-
const amount = Math.abs(Number(transactionItem.modifiedAmount) || transactionItem.amount);
770+
const amount = Math.abs(transactionItem.modifiedAmount || transactionItem.amount);
771771
return isAmountTooLong(amount);
772772
}
773773

@@ -2461,7 +2461,7 @@ function getColumnsToShow(
24612461
const reportActionsByTransactionIDMap = Array.isArray(data) ? undefined : createReportActionsByTransactionIDMap(data);
24622462
const updateColumns = (transaction: OnyxTypes.Transaction | SearchTransaction) => {
24632463
const merchant = transaction.modifiedMerchant ? transaction.modifiedMerchant : (transaction.merchant ?? '');
2464-
if ((merchant !== '' && merchant !== CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT && merchant !== CONST.TRANSACTION.DEFAULT_MERCHANT) || isScanning(transaction)) {
2464+
if ((merchant !== '' && merchant !== CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT) || isScanning(transaction)) {
24652465
columns[CONST.REPORT.TRANSACTION_LIST.COLUMNS.MERCHANT] = true;
24662466
}
24672467

0 commit comments

Comments
 (0)