diff --git a/src/components/MoneyReportHeader.tsx b/src/components/MoneyReportHeader.tsx index 1654314e576df..0f140ce2a1fdb 100644 --- a/src/components/MoneyReportHeader.tsx +++ b/src/components/MoneyReportHeader.tsx @@ -8,7 +8,6 @@ import useNetwork from '@hooks/useNetwork'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; -import {getCurrentUserAccountID} from '@libs/actions/Report'; import {convertToDisplayString} from '@libs/CurrencyUtils'; import Navigation from '@libs/Navigation/Navigation'; import {getConnectedIntegration, isPolicyAdmin} from '@libs/PolicyUtils'; @@ -30,7 +29,6 @@ import { isClosedExpenseReportWithNoExpenses, isCurrentUserSubmitter, isInvoiceReport, - isOpenExpenseReport, navigateBackOnDeleteTransaction, } from '@libs/ReportUtils'; import { @@ -45,7 +43,17 @@ import { shouldShowBrokenConnectionViolation as shouldShowBrokenConnectionViolationTransactionUtils, } from '@libs/TransactionUtils'; import variables from '@styles/variables'; -import {approveMoneyRequest, canApproveIOU, canIOUBePaid as canIOUBePaidAction, deleteMoneyRequest, deleteTrackExpense, payInvoice, payMoneyRequest, submitReport} from '@userActions/IOU'; +import { + approveMoneyRequest, + canApproveIOU, + canIOUBePaid as canIOUBePaidAction, + canSubmitReport, + deleteMoneyRequest, + deleteTrackExpense, + payInvoice, + payMoneyRequest, + submitReport, +} from '@userActions/IOU'; import {markAsCash as markAsCashAction} from '@userActions/Transaction'; import CONST from '@src/CONST'; import useDelegateUserDetails from '@src/hooks/useDelegateUserDetails'; @@ -134,15 +142,14 @@ function MoneyReportHeader({policy, report: moneyRequestReport, transactionThrea const allTransactions = useMemo(() => getAllReportTransactions(moneyRequestReport?.reportID, transactions), [moneyRequestReport?.reportID, transactions]); const canAllowSettlement = hasUpdatedTotal(moneyRequestReport, policy); const policyType = policy?.type; - const isDraft = isOpenExpenseReport(moneyRequestReport); const connectedIntegration = getConnectedIntegration(policy); const navigateBackToAfterDelete = useRef(); const hasHeldExpenses = hasHeldExpensesReportUtils(moneyRequestReport?.reportID); const hasScanningReceipt = getTransactionsWithReceipts(moneyRequestReport?.reportID).some((t) => isReceiptBeingScanned(t)); const hasOnlyPendingTransactions = allTransactions.length > 0 && allTransactions.every((t) => isExpensifyCardTransaction(t) && isPending(t)); - const transactionIDs = allTransactions.map((t) => t.transactionID); - const hasAllPendingRTERViolations = allHavePendingRTERViolation([transaction?.transactionID]); - const shouldShowBrokenConnectionViolation = shouldShowBrokenConnectionViolationTransactionUtils(transaction?.transactionID, moneyRequestReport, policy); + const transactionIDs = allTransactions.map((t) => t.transactionID) ?? []; + const hasAllPendingRTERViolations = allHavePendingRTERViolation(transactionIDs); + const shouldShowBrokenConnectionViolation = shouldShowBrokenConnectionViolationTransactionUtils(transactionIDs, moneyRequestReport, policy); const hasOnlyHeldExpenses = hasOnlyHeldExpensesReportUtils(moneyRequestReport?.reportID); const isPayAtEndExpense = isPayAtEndExpenseTransactionUtils(transaction); const isArchivedReport = isArchivedReportUtils(moneyRequestReport); @@ -165,17 +172,9 @@ function MoneyReportHeader({policy, report: moneyRequestReport, transactionThrea const shouldDisableApproveButton = shouldShowApproveButton && !isAllowedToApproveExpenseReport(moneyRequestReport); - const currentUserAccountID = getCurrentUserAccountID(); const isAdmin = policy?.role === CONST.POLICY.ROLE.ADMIN; - const shouldShowSubmitButton = - !!moneyRequestReport && - !isArchivedReport && - isDraft && - reimbursableSpend !== 0 && - !hasAllPendingRTERViolations && - !shouldShowBrokenConnectionViolation && - (moneyRequestReport?.ownerAccountID === currentUserAccountID || isAdmin || moneyRequestReport?.managerID === currentUserAccountID); + const shouldShowSubmitButton = canSubmitReport(moneyRequestReport, policy, transactionIDs); const shouldShowExportIntegrationButton = !shouldShowPayButton && !shouldShowSubmitButton && connectedIntegration && isAdmin && canBeExported(moneyRequestReport); @@ -399,7 +398,7 @@ function MoneyReportHeader({policy, report: moneyRequestReport, transactionThrea /> )} - {shouldShowSubmitButton && !shouldUseNarrowLayout && ( + {!!moneyRequestReport && shouldShowSubmitButton && !shouldUseNarrowLayout && (