Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
3257aed
Add DEW support for approve action
abzokhattab Jan 8, 2026
d02afe3
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 8, 2026
5af837d
fixing prettier
abzokhattab Jan 8, 2026
9224ada
performance improvment for the get dew policy
abzokhattab Jan 8, 2026
1504301
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 11, 2026
aa15ca3
Hide Approve action when DEW approval is pending
abzokhattab Jan 12, 2026
35dcb3c
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 12, 2026
9f587cb
fixing ts
abzokhattab Jan 12, 2026
b208e93
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 20, 2026
4930e42
fixing tests
abzokhattab Jan 20, 2026
72cf658
fix: address review comments for DEW approve action
abzokhattab Jan 20, 2026
1fade11
fix: make reportMetadata required param for canApproveIOU and isAppro…
abzokhattab Jan 20, 2026
c2967a9
fix tests and doing minor code refactoring
abzokhattab Jan 20, 2026
c9b9926
making reportMetadata required in isApproveAction
abzokhattab Jan 21, 2026
e1ccc56
renaming buildOptimisticNextStepForDynamicExternalWorkflowError
abzokhattab Jan 21, 2026
54b0611
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 21, 2026
449c599
fixing ts
abzokhattab Jan 21, 2026
66561c4
hide unapprove button for dew
abzokhattab Jan 22, 2026
7c61c16
fix nextstep when report retracted and submitted again
abzokhattab Jan 22, 2026
04d2ab6
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 22, 2026
427f997
code refactoring
abzokhattab Jan 22, 2026
c1f4b5b
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 22, 2026
9b44e57
minor refactor: removing comments
abzokhattab Jan 22, 2026
abbf420
fixing ts
abzokhattab Jan 22, 2026
e85a9b8
fixing ts
abzokhattab Jan 22, 2026
6607036
fix tests
abzokhattab Jan 22, 2026
0dd9641
fix approval header
abzokhattab Jan 23, 2026
b5004c8
Hide approve button in report preview when DEW approval is pending
abzokhattab Jan 23, 2026
de51fc3
code optimization for the nextstep inside the MoneyReportHeader
abzokhattab Jan 23, 2026
6e7be2c
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 23, 2026
97f7024
fix prettier
abzokhattab Jan 23, 2026
b596683
fix auto approval error next-step
abzokhattab Jan 24, 2026
097a755
fix: show DEW auto-approval error only to the current approver
abzokhattab Jan 27, 2026
76c7be0
fix ts errors
abzokhattab Jan 27, 2026
aa1a642
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 27, 2026
a8c7ca0
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 27, 2026
bbda4c8
fixing ts
abzokhattab Jan 27, 2026
8fb0cad
fixing max lines eslint error
abzokhattab Jan 27, 2026
3623f71
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 27, 2026
2e63892
fixing ts
abzokhattab Jan 27, 2026
a9b205c
fix: show DEW approval error next step only to current approver
abzokhattab Jan 28, 2026
bbdd705
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 28, 2026
2721a24
fixing prettier
abzokhattab Jan 28, 2026
57c21ee
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 28, 2026
04a2b70
fixing ts
abzokhattab Jan 28, 2026
74811f2
minor change
abzokhattab Jan 28, 2026
4f74de0
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 28, 2026
b96121f
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 29, 2026
4047a6a
Minor refactor in getReasonAndReportActionThatRequiresAttention
abzokhattab Jan 29, 2026
231b574
fixing ts
abzokhattab Jan 29, 2026
98a666b
Merge remote-tracking branch 'origin/main' into dew-approve-support
abzokhattab Jan 29, 2026
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
2 changes: 2 additions & 0 deletions src/CONST/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1248,6 +1248,7 @@ const CONST = {
DELETED_ACCOUNT: 'DELETEDACCOUNT', // Deprecated OldDot Action
DELETED_TRANSACTION: 'DELETEDTRANSACTION',
DEW_SUBMIT_FAILED: 'DEWSUBMITFAILED',
DEW_APPROVE_FAILED: 'DEWAPPROVEFAILED',
DISMISSED_VIOLATION: 'DISMISSEDVIOLATION',
DONATION: 'DONATION', // Deprecated OldDot Action
DYNAMIC_EXTERNAL_WORKFLOW_ROUTED: 'DYNAMICEXTERNALWORKFLOWROUTED',
Expand Down Expand Up @@ -7780,6 +7781,7 @@ const CONST = {
HAS_CHILD_REPORT_AWAITING_ACTION: 'hasChildReportAwaitingAction',
HAS_MISSING_INVOICE_BANK_ACCOUNT: 'hasMissingInvoiceBankAccount',
HAS_UNRESOLVED_CARD_FRAUD_ALERT: 'hasUnresolvedCardFraudAlert',
HAS_DEW_APPROVE_FAILED: 'hasDEWApproveFailed',
},

CARD_FRAUD_ALERT_RESOLUTION: {
Expand Down
51 changes: 33 additions & 18 deletions src/components/MoneyReportHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,16 @@ import Navigation from '@libs/Navigation/Navigation';
import type {PlatformStackRouteProp} from '@libs/Navigation/PlatformStackNavigation/types';
import type {ReportsSplitNavigatorParamList, RightModalNavigatorParamList} from '@libs/Navigation/types';
import {
buildOptimisticNextStepForDEWOfflineSubmission,
buildOptimisticNextStepForDynamicExternalWorkflowError,
buildOptimisticNextStepForDEWOffline,
buildOptimisticNextStepForDynamicExternalWorkflowApproveError,
buildOptimisticNextStepForDynamicExternalWorkflowSubmitError,
buildOptimisticNextStepForPreventSelfApprovalsEnabled,
buildOptimisticNextStepForStrictPolicyRuleViolations,
} from '@libs/NextStepUtils';
import type {KYCFlowEvent, TriggerKYCFlow} from '@libs/PaymentUtils';
import {selectPaymentType} from '@libs/PaymentUtils';
import {getConnectedIntegration, getValidConnectedIntegration, hasDynamicExternalWorkflow} from '@libs/PolicyUtils';
import {getIOUActionForReportID, getOriginalMessage, getReportAction, hasPendingDEWSubmit, isMoneyRequestAction} from '@libs/ReportActionsUtils';
import {getIOUActionForReportID, getOriginalMessage, getReportAction, hasPendingDEWApprove, hasPendingDEWSubmit, isMoneyRequestAction} from '@libs/ReportActionsUtils';
import {getAllExpensesToHoldIfApplicable, getReportPrimaryAction, isMarkAsResolvedAction} from '@libs/ReportPrimaryActionUtils';
import {getSecondaryExportReportActions, getSecondaryReportActions} from '@libs/ReportSecondaryActionUtils';
import {
Expand All @@ -70,6 +71,7 @@ import {
getNextApproverAccountID,
getNonHeldAndFullAmount,
getPolicyExpenseChat,
getReasonAndReportActionThatRequiresAttention,
getTransactionsWithReceipts,
hasHeldExpenses as hasHeldExpensesReportUtils,
hasOnlyHeldExpenses as hasOnlyHeldExpensesReportUtils,
Expand Down Expand Up @@ -328,6 +330,7 @@ function MoneyReportHeader({
const {isBetaEnabled} = usePermissions();
const isASAPSubmitBetaEnabled = isBetaEnabled(CONST.BETAS.ASAP_SUBMIT);
const isDEWBetaEnabled = isBetaEnabled(CONST.BETAS.NEW_DOT_DEW);
const isDEWPolicy = isDEWBetaEnabled && hasDynamicExternalWorkflow(policy);
const hasViolations = hasViolationsReportUtils(moneyRequestReport?.reportID, allTransactionViolations, accountID, email ?? '');
const hasCustomUnitOutOfPolicyViolation = hasCustomUnitOutOfPolicyViolationTransactionUtils(transactionViolations);

Expand Down Expand Up @@ -467,8 +470,8 @@ function MoneyReportHeader({
const shouldShowPayButton = isPaidAnimationRunning || canIOUBePaid || onlyShowPayElsewhere;

const shouldShowApproveButton = useMemo(
() => (canApproveIOU(moneyRequestReport, policy, transactions) && !hasOnlyPendingTransactions) || isApprovedAnimationRunning,
[moneyRequestReport, policy, transactions, hasOnlyPendingTransactions, isApprovedAnimationRunning],
() => (canApproveIOU(moneyRequestReport, policy, reportMetadata, transactions) && !hasOnlyPendingTransactions) || isApprovedAnimationRunning,
[moneyRequestReport, policy, reportMetadata, transactions, hasOnlyPendingTransactions, isApprovedAnimationRunning],
);

const shouldDisableApproveButton = shouldShowApproveButton && !isAllowedToApproveExpenseReport(moneyRequestReport);
Expand All @@ -489,19 +492,31 @@ function MoneyReportHeader({

let optimisticNextStep = isBlockSubmitDueToPreventSelfApproval ? buildOptimisticNextStepForPreventSelfApprovalsEnabled() : nextStep;

// Check for DEW submit failed or pending - show appropriate next step
if (isDEWBetaEnabled && hasDynamicExternalWorkflow(policy) && moneyRequestReport?.statusNum === CONST.REPORT.STATUS_NUM.OPEN) {
const reportActionsObject = reportActions.reduce<OnyxTypes.ReportActions>((acc, action) => {
if (action.reportActionID) {
acc[action.reportActionID] = action;
// Check for DEW submit/approve failed or pending - show appropriate next step
if (isDEWPolicy && (moneyRequestReport?.statusNum === CONST.REPORT.STATUS_NUM.OPEN || moneyRequestReport?.statusNum === CONST.REPORT.STATUS_NUM.SUBMITTED)) {
if (moneyRequestReport?.statusNum === CONST.REPORT.STATUS_NUM.OPEN) {
const reportActionsObject = reportActions.reduce<OnyxTypes.ReportActions>((acc, action) => {
if (action.reportActionID) {
acc[action.reportActionID] = action;
}
return acc;
}, {});
const {errors} = getAllReportActionsErrorsAndReportActionThatRequiresAttention(moneyRequestReport, reportActionsObject);

if (errors?.dewSubmitFailed) {
optimisticNextStep = buildOptimisticNextStepForDynamicExternalWorkflowSubmitError(theme.danger);
} else if (isOffline && hasPendingDEWSubmit(reportMetadata, isDEWPolicy)) {
optimisticNextStep = buildOptimisticNextStepForDEWOffline();
}
} else if (moneyRequestReport?.statusNum === CONST.REPORT.STATUS_NUM.SUBMITTED) {
const gbrResult = getReasonAndReportActionThatRequiresAttention(moneyRequestReport, undefined, isArchivedReport);
const hasDEWApproveFailed = gbrResult?.reason === CONST.REQUIRES_ATTENTION_REASONS.HAS_DEW_APPROVE_FAILED;
const isCurrentUserTheApprover = moneyRequestReport?.managerID === accountID;
if (hasDEWApproveFailed && isCurrentUserTheApprover) {
optimisticNextStep = buildOptimisticNextStepForDynamicExternalWorkflowApproveError(theme.danger);
} else if (isOffline && hasPendingDEWApprove(reportMetadata, isDEWPolicy)) {
optimisticNextStep = buildOptimisticNextStepForDEWOffline();
}
return acc;
}, {});
const {errors} = getAllReportActionsErrorsAndReportActionThatRequiresAttention(moneyRequestReport, reportActionsObject);
if (errors?.dewSubmitFailed) {
optimisticNextStep = buildOptimisticNextStepForDynamicExternalWorkflowError(theme.danger);
} else if (isOffline && hasPendingDEWSubmit(reportMetadata, hasDynamicExternalWorkflow(policy))) {
optimisticNextStep = buildOptimisticNextStepForDEWOfflineSubmission();
}
}

Expand Down Expand Up @@ -617,7 +632,7 @@ function MoneyReportHeader({
};

const confirmApproval = () => {
if (hasDynamicExternalWorkflow(policy)) {
if (hasDynamicExternalWorkflow(policy) && !isDEWBetaEnabled) {
showDWEModal();
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ function MoneyRequestReportNavigation({reportID, shouldDisplayNarrowVersion}: Mo

const [cardFeeds] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_DOMAIN_MEMBER, {canBeMissing: true});
const [bankAccountList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST, {canBeMissing: true});
const [allReportMetadata] = useOnyx(ONYXKEYS.COLLECTION.REPORT_METADATA, {canBeMissing: true});

const archivedReportsIdSet = useArchivedReportsIdSet();

Expand All @@ -56,6 +57,7 @@ function MoneyRequestReportNavigation({reportID, shouldDisplayNarrowVersion}: Mo
archivedReportsIDList: archivedReportsIdSet,
isActionLoadingSet,
cardFeeds,
allReportMetadata,
});
results = getSortedSections(type, status ?? '', searchData, localeCompare, translate, sortBy, sortOrder, groupBy).map((value) => value.reportID);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,7 @@ function MoneyRequestReportPreviewContent({
isSubmittingAnimationRunning,
isDEWSubmitPending,
violationsData: transactionViolations,
reportMetadata: iouReportMetadata,
});
}, [
bankAccountList,
Expand All @@ -571,6 +572,7 @@ function MoneyRequestReportPreviewContent({
isSubmittingAnimationRunning,
transactionViolations,
isDEWSubmitPending,
iouReportMetadata,
]);

const addExpenseDropdownOptions = useMemo(
Expand Down
18 changes: 17 additions & 1 deletion src/components/Search/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@ function Search({
const [policies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true});
const {accountID, email, login} = useCurrentUserPersonalDetails();
const [isActionLoadingSet = new Set<string>()] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_METADATA}`, {canBeMissing: true, selector: isActionLoadingSetSelector});
const [allReportMetadata] = useOnyx(ONYXKEYS.COLLECTION.REPORT_METADATA, {canBeMissing: true});
const [visibleColumns] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {canBeMissing: true, selector: columnsSelector});
const [customCardNames] = useOnyx(ONYXKEYS.NVP_EXPENSIFY_COMPANY_CARDS_CUSTOM_NAMES, {canBeMissing: true});

Expand Down Expand Up @@ -427,6 +428,7 @@ function Search({
cardFeeds,
isOffline,
allTransactionViolations: violations,
allReportMetadata,
});
return [filteredData1, filteredData1.length, allLength];
}, [
Expand All @@ -448,6 +450,7 @@ function Search({
policies,
bankAccountList,
violations,
allReportMetadata,
]);

// For group-by views, each grouped item has a transactionsQueryJSON with a hash pointing to a separate snapshot
Expand Down Expand Up @@ -483,12 +486,25 @@ function Search({
translate,
formatPhoneNumber,
isActionLoadingSet,
allReportMetadata,
});
return {...item, transactions: transactions1 as TransactionListItemType[]};
});

return enriched;
}, [validGroupBy, isExpenseReportType, baseFilteredData, groupByTransactionSnapshots, accountID, email, translate, formatPhoneNumber, isActionLoadingSet, bankAccountList]);
}, [
validGroupBy,
isExpenseReportType,
baseFilteredData,
groupByTransactionSnapshots,
accountID,
email,
translate,
formatPhoneNumber,
isActionLoadingSet,
bankAccountList,
allReportMetadata,
]);

const hasLoadedAllTransactions = useMemo(() => {
if (!validGroupBy) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ function TransactionGroupListItem<TItem extends ListItem>({
const [transactionsVisibleLimit, setTransactionsVisibleLimit] = useState(CONST.TRANSACTION.RESULTS_PAGE_SIZE as number);
const [isExpanded, setIsExpanded] = useState(false);
const [isActionLoadingSet = new Set<string>()] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_METADATA}`, {canBeMissing: true, selector: isActionLoadingSetSelector});
const [allReportMetadata] = useOnyx(ONYXKEYS.COLLECTION.REPORT_METADATA, {canBeMissing: true});
const [bankAccountList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST, {canBeMissing: true});

const transactions = useMemo(() => {
Expand All @@ -127,6 +128,7 @@ function TransactionGroupListItem<TItem extends ListItem>({
formatPhoneNumber,
bankAccountList,
isActionLoadingSet,
allReportMetadata,
}) as [TransactionListItemType[], number];
return sectionData.map((transactionItem) => ({
...transactionItem,
Expand All @@ -143,6 +145,7 @@ function TransactionGroupListItem<TItem extends ListItem>({
currentUserDetails.accountID,
isActionLoadingSet,
bankAccountList,
allReportMetadata,
]);

const selectedItemsLength = useMemo(() => {
Expand Down
8 changes: 5 additions & 3 deletions src/hooks/useTodos.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ export default function useTodos() {
const [allReportNameValuePairs] = useOnyx(ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS, {canBeMissing: false});
const [allTransactions] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION, {canBeMissing: false});
const [allReportActions] = useOnyx(ONYXKEYS.COLLECTION.REPORT_ACTIONS, {canBeMissing: false});
const [allReportMetadata] = useOnyx(ONYXKEYS.COLLECTION.REPORT_METADATA, {canBeMissing: false});
const [allTransactionViolations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS, {canBeMissing: true});
const [bankAccountList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST, {canBeMissing: true});
const [personalDetailsList] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {canBeMissing: true});
Expand Down Expand Up @@ -156,11 +157,12 @@ export default function useTodos() {
const reportNameValuePair = allReportNameValuePairs?.[`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${report.chatReportID}`];
const reportActions = Object.values(allReportActions?.[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report.reportID}`] ?? []);
const reportTransactions = transactionsByReportID[report.reportID] ?? [];
const reportMetadata = allReportMetadata?.[`${ONYXKEYS.COLLECTION.REPORT_METADATA}${report.reportID}`];

if (isSubmitAction(report, reportTransactions, policy, reportNameValuePair)) {
if (isSubmitAction(report, reportTransactions, reportMetadata, policy, reportNameValuePair, undefined, login, currentUserAccountID)) {
reportsToSubmit.push(report);
}
if (isApproveAction(report, reportTransactions, currentUserAccountID, policy)) {
if (isApproveAction(report, reportTransactions, currentUserAccountID, reportMetadata, policy)) {
reportsToApprove.push(report);
}
if (isPrimaryPayAction(report, currentUserAccountID, login, bankAccountList, policy, reportNameValuePair)) {
Expand All @@ -172,7 +174,7 @@ export default function useTodos() {
}

return {reportsToSubmit, reportsToApprove, reportsToPay, reportsToExport, transactionsByReportID};
}, [allReports, allTransactions, allPolicies, allReportNameValuePairs, allReportActions, currentUserAccountID, login, bankAccountList]);
}, [allReports, allTransactions, allPolicies, allReportNameValuePairs, allReportActions, currentUserAccountID, login, bankAccountList, allReportMetadata]);

const {reportsToSubmit, reportsToApprove, reportsToPay, reportsToExport, transactionsByReportID} = todos;

Expand Down
2 changes: 2 additions & 0 deletions src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1258,6 +1258,7 @@ const translations: TranslationDeepObject<typeof en> = {
submitted: ({memo}: SubmittedWithMemoParams) => `Eingereicht${memo ? `, mit dem Hinweis ${memo}` : ''}`,
automaticallySubmitted: `eingereicht über <a href="${CONST.SELECT_WORKFLOWS_HELP_URL}">verspätete Einreichungen</a>`,
queuedToSubmitViaDEW: 'in die Warteschlange gestellt zur Einreichung über benutzerdefinierten Genehmigungsworkflow',
queuedToApproveViaDEW: 'in die Warteschlange gestellt zur Genehmigung über benutzerdefinierten Genehmigungsworkflow',
trackedAmount: (formattedAmount: string, comment?: string) => `Verfolgung von ${formattedAmount}${comment ? `für ${comment}` : ''}`,
splitAmount: ({amount}: SplitAmountParams) => `Split ${amount}`,
didSplitAmount: (formattedAmount: string, comment: string) => `aufteilen ${formattedAmount}${comment ? `für ${comment}` : ''}`,
Expand Down Expand Up @@ -7949,6 +7950,7 @@ Fordere Spesendetails wie Belege und Beschreibungen an, lege Limits und Standard
hasChildReportAwaitingAction: 'Untergeordneter Bericht wartet auf Aktion',
hasMissingInvoiceBankAccount: 'Fehlendes Rechnungs-Bankkonto',
hasUnresolvedCardFraudAlert: 'Hat ungelöste Kreditkartenbetrugswarnung',
hasDEWApproveFailed: 'DEW-Genehmigung fehlgeschlagen',
},
reasonRBR: {
hasErrors: 'Enthält Fehler in den Berichtsdaten oder den Berichtsvorgangsdatens',
Expand Down
2 changes: 2 additions & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1258,6 +1258,7 @@ const translations = {
submitted: ({memo}: SubmittedWithMemoParams) => `submitted${memo ? `, saying ${memo}` : ''}`,
automaticallySubmitted: `submitted via <a href="${CONST.SELECT_WORKFLOWS_HELP_URL}">delay submissions</a>`,
queuedToSubmitViaDEW: 'queued to submit via custom approval workflow',
queuedToApproveViaDEW: 'queued to approve via custom approval workflow',
trackedAmount: (formattedAmount: string, comment?: string) => `tracking ${formattedAmount}${comment ? ` for ${comment}` : ''}`,
splitAmount: ({amount}: SplitAmountParams) => `split ${amount}`,
didSplitAmount: (formattedAmount: string, comment: string) => `split ${formattedAmount}${comment ? ` for ${comment}` : ''}`,
Expand Down Expand Up @@ -7910,6 +7911,7 @@ const translations = {
hasChildReportAwaitingAction: 'Has child report awaiting action',
hasMissingInvoiceBankAccount: 'Has missing invoice bank account',
hasUnresolvedCardFraudAlert: 'Has unresolved card fraud alert',
hasDEWApproveFailed: 'Has DEW approve failed',
},
reasonRBR: {
hasErrors: 'Has errors in report or report actions data',
Expand Down
2 changes: 2 additions & 0 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1003,6 +1003,7 @@ const translations: TranslationDeepObject<typeof en> = {
submitted: ({memo}) => `enviado${memo ? `, dijo ${memo}` : ''}`,
automaticallySubmitted: `envió mediante <a href="${CONST.SELECT_WORKFLOWS_HELP_URL}">retrasar envíos</a>`,
queuedToSubmitViaDEW: 'en cola para enviar a través del flujo de aprobación personalizado',
queuedToApproveViaDEW: 'en cola para aprobar a través del flujo de aprobación personalizado',
trackedAmount: (formattedAmount, comment) => `realizó un seguimiento de ${formattedAmount}${comment ? ` para ${comment}` : ''}`,
splitAmount: ({amount}) => `dividir ${amount}`,
didSplitAmount: (formattedAmount, comment) => `dividió ${formattedAmount}${comment ? ` para ${comment}` : ''}`,
Expand Down Expand Up @@ -8062,6 +8063,7 @@ ${amount} para ${merchant} - ${date}`,
hasChildReportAwaitingAction: 'Informe secundario pendiente de acción',
hasMissingInvoiceBankAccount: 'Falta la cuenta bancaria de la factura',
hasUnresolvedCardFraudAlert: 'Tiene una alerta de fraude de tarjeta sin resolver',
hasDEWApproveFailed: 'La aprobación DEW ha fallado',
},
reasonRBR: {
hasErrors: 'Tiene errores en los datos o las acciones del informe',
Expand Down
2 changes: 2 additions & 0 deletions src/languages/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1260,6 +1260,7 @@ const translations: TranslationDeepObject<typeof en> = {
submitted: ({memo}: SubmittedWithMemoParams) => `envoyé${memo ? `, indiquant ${memo}` : ''}`,
automaticallySubmitted: `soumis via <a href="${CONST.SELECT_WORKFLOWS_HELP_URL}">retarder les soumissions</a>`,
queuedToSubmitViaDEW: "en file d'attente pour être soumis via le workflow d'approbation personnalisé",
queuedToApproveViaDEW: "en file d'attente pour approbation via le workflow d'approbation personnalisé",
trackedAmount: (formattedAmount: string, comment?: string) => `suivi de ${formattedAmount}${comment ? `pour ${comment}` : ''}`,
splitAmount: ({amount}: SplitAmountParams) => `diviser ${amount}`,
didSplitAmount: (formattedAmount: string, comment: string) => `Diviser ${formattedAmount}${comment ? `pour ${comment}` : ''}`,
Expand Down Expand Up @@ -7959,6 +7960,7 @@ Exigez des informations de dépense comme les reçus et les descriptions, défin
hasChildReportAwaitingAction: 'A un rapport enfant en attente d’action',
hasMissingInvoiceBankAccount: 'N’a pas de compte bancaire de facture',
hasUnresolvedCardFraudAlert: 'A une alerte de fraude de carte non résolue',
hasDEWApproveFailed: 'L’approbation DEW a échoué',
},
reasonRBR: {
hasErrors: 'Contient des erreurs dans les données du rapport ou des actions de rapport',
Expand Down
Loading
Loading