@@ -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 ,
0 commit comments