From 6a7a65885e84d5ab8ffd03f183c513a8344ac6f7 Mon Sep 17 00:00:00 2001 From: Scott Deeter Date: Fri, 9 May 2025 16:41:00 -0700 Subject: [PATCH 1/5] Add the framework for the RECEIPTSCANFAILED action --- src/CONST.ts | 1 + src/languages/en.ts | 1 + src/libs/ReportUtils.ts | 3 +++ 3 files changed, 5 insertions(+) diff --git a/src/CONST.ts b/src/CONST.ts index 448af0b44569..a8c0cf40b193 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -1380,6 +1380,7 @@ const CONST = { CORPORATE_UPGRADE: 'POLICYCHANGELOG_CORPORATE_UPGRADE', TEAM_DOWNGRADE: 'POLICYCHANGELOG_TEAM_DOWNGRADE', }, + RECEIPTSCANFAILED: 'RECEIPTSCANFAILED', RESOLVED_DUPLICATES: 'RESOLVEDDUPLICATES', ROOM_CHANGE_LOG: { INVITE_TO_ROOM: 'INVITETOROOM', diff --git a/src/languages/en.ts b/src/languages/en.ts index b5adf3db2d2e..7645694cd264 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -897,6 +897,7 @@ const translations = { deleteReceipt: 'Delete receipt', deleteConfirmation: 'Are you sure you want to delete this receipt?', addReceipt: 'Add receipt', + scanFailed: "The receipt couldn't be scanned, as it's missing a merchant, date, or amount.", }, quickAction: { scanReceipt: 'Scan receipt', diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 9d27087b7a1b..d2bbf9bb4bf9 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -4555,6 +4555,9 @@ function getReportActionMessage({ personalDetails, }); } + if (reportAction.actionName === CONST.REPORT.ACTIONS.TYPE.RECEIPTSCANFAILED) { + return translateLocal('receipt.scanFailed'); + } return parseReportActionHtmlToText(reportAction, reportID, childReportID); } From ea71e97a3d28ac3f82245cb22de91e5a3ce87034 Mon Sep 17 00:00:00 2001 From: Scott Deeter Date: Mon, 12 May 2025 15:56:14 -0700 Subject: [PATCH 2/5] Add getReceiptScanFailedMessage --- src/languages/es.ts | 1 + src/libs/OptionsListUtils.ts | 3 +++ src/libs/ReportActionsUtils.ts | 5 +++++ src/pages/home/report/PureReportActionItem.tsx | 2 ++ 4 files changed, 11 insertions(+) diff --git a/src/languages/es.ts b/src/languages/es.ts index dc4cdc9fa59a..260aa3dc93ef 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -892,6 +892,7 @@ const translations = { deleteReceipt: 'Eliminar recibo', deleteConfirmation: '¿Estás seguro de que quieres borrar este recibo?', addReceipt: 'Añadir recibo', + scanFailed: 'El recibo no pudo ser escaneado, ya que falta el comerciante, la fecha o el monto.', }, quickAction: { scanReceipt: 'Escanear recibo', diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index 251a0db581b9..03cd5d139c18 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -55,6 +55,7 @@ import { getMessageOfOldDotReportAction, getOneTransactionThreadReportID, getOriginalMessage, + getReceiptScanFailedMessage, getReportActionHtml, getReportActionMessageText, getSortedReportActions, @@ -810,6 +811,8 @@ function getLastMessageTextForReport( lastMessageTextFromReport = getReportActionMessageText(lastReportAction); } else if (lastReportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.EXPORTED_TO_INTEGRATION) { lastMessageTextFromReport = getExportIntegrationLastMessageText(lastReportAction); + } else if (lastReportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.RECEIPTSCANFAILED) { + lastMessageTextFromReport = getReceiptScanFailedMessage(); } else if (lastReportAction?.actionName && isOldDotReportAction(lastReportAction)) { lastMessageTextFromReport = getMessageOfOldDotReportAction(lastReportAction, false); } else if (lastReportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.ROOM_CHANGE_LOG.LEAVE_ROOM) { diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index b13bca41c964..0b3c3029b75d 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -1536,6 +1536,10 @@ function getLeaveRoomMessage() { return translateLocal('report.actions.type.leftTheChat'); } +function getReceiptScanFailedMessage() { + return translateLocal('receipt.scanFailed'); +} + function getUpdateRoomDescriptionFragment(reportAction: ReportAction): Message { const html = getUpdateRoomDescriptionMessage(reportAction); return { @@ -2519,6 +2523,7 @@ export { getWorkspaceReportFieldDeleteMessage, getReportActions, getLeaveRoomMessage, + getReceiptScanFailedMessage, }; export type {LastVisibleMessage}; diff --git a/src/pages/home/report/PureReportActionItem.tsx b/src/pages/home/report/PureReportActionItem.tsx index b9df0269d1d1..914fc02e5c6f 100644 --- a/src/pages/home/report/PureReportActionItem.tsx +++ b/src/pages/home/report/PureReportActionItem.tsx @@ -1098,6 +1098,8 @@ function PureReportActionItem({ ); } else if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.EXPORTED_TO_INTEGRATION)) { children = ; + } else if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.RECEIPTSCANFAILED)) { + children = ; } else if (isRenamedAction(action)) { const message = getRenamedAction(action, isExpenseReport(report)); children = ; From 52867d7ad2530ef4d6ef5ed53c4687f3a7fc76d4 Mon Sep 17 00:00:00 2001 From: Scott Deeter Date: Thu, 22 May 2025 09:53:22 -0700 Subject: [PATCH 3/5] Style fix --- src/libs/OptionsListUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index 7054af1f4f80..6b05fc1027ea 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -59,8 +59,8 @@ import { getMessageOfOldDotReportAction, getOneTransactionThreadReportID, getOriginalMessage, - getReopenedMessage, getReceiptScanFailedMessage, + getReopenedMessage, getReportActionHtml, getReportActionMessageText, getSortedReportActions, From 8388c289bdd3458c0f46c1c2a70b6f4062546329 Mon Sep 17 00:00:00 2001 From: Krishna Chaitanya Date: Thu, 12 Jun 2025 12:43:55 +0530 Subject: [PATCH 4/5] add the framework for the RECEIPTSCANFAILED action --- src/CONST.ts | 2 +- src/libs/OptionsListUtils.ts | 2 +- src/libs/ReportUtils.ts | 2 +- src/pages/home/report/PureReportActionItem.tsx | 2 +- src/types/onyx/OriginalMessage.ts | 1 + 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/CONST.ts b/src/CONST.ts index d3cd5a5f34a7..ab4457db88ea 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -1441,7 +1441,7 @@ const CONST = { CORPORATE_UPGRADE: 'POLICYCHANGELOG_CORPORATE_UPGRADE', TEAM_DOWNGRADE: 'POLICYCHANGELOG_TEAM_DOWNGRADE', }, - RECEIPTSCANFAILED: 'RECEIPTSCANFAILED', + RECEIPT_SCAN_FAILED: 'RECEIPTSCANFAILED', RESOLVED_DUPLICATES: 'RESOLVEDDUPLICATES', ROOM_CHANGE_LOG: { INVITE_TO_ROOM: 'INVITETOROOM', diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index a9f75d9d83e6..939fe50d2c7c 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -821,7 +821,7 @@ function getLastMessageTextForReport( lastMessageTextFromReport = getReportActionMessageText(lastReportAction); } else if (lastReportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.EXPORTED_TO_INTEGRATION) { lastMessageTextFromReport = getExportIntegrationLastMessageText(lastReportAction); - } else if (lastReportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.RECEIPTSCANFAILED) { + } else if (lastReportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.RECEIPT_SCAN_FAILED) { lastMessageTextFromReport = getReceiptScanFailedMessage(); } else if (lastReportAction?.actionName && isOldDotReportAction(lastReportAction)) { lastMessageTextFromReport = getMessageOfOldDotReportAction(lastReportAction, false); diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 11cfd627265d..50cbd623309b 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -4632,7 +4632,7 @@ function getReportActionMessage({ personalDetails, }); } - if (reportAction.actionName === CONST.REPORT.ACTIONS.TYPE.RECEIPTSCANFAILED) { + if (reportAction.actionName === CONST.REPORT.ACTIONS.TYPE.RECEIPT_SCAN_FAILED) { return translateLocal('receipt.scanFailed'); } diff --git a/src/pages/home/report/PureReportActionItem.tsx b/src/pages/home/report/PureReportActionItem.tsx index e9353a0c3eca..13b28c5b5983 100644 --- a/src/pages/home/report/PureReportActionItem.tsx +++ b/src/pages/home/report/PureReportActionItem.tsx @@ -1170,7 +1170,7 @@ function PureReportActionItem({ ); } else if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.EXPORTED_TO_INTEGRATION)) { children = ; - } else if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.RECEIPTSCANFAILED)) { + } else if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.RECEIPT_SCAN_FAILED)) { children = ; } else if (isRenamedAction(action)) { const message = getRenamedAction(action, isExpenseReport(report)); diff --git a/src/types/onyx/OriginalMessage.ts b/src/types/onyx/OriginalMessage.ts index 19a8a014e515..9a4b402c8e5d 100644 --- a/src/types/onyx/OriginalMessage.ts +++ b/src/types/onyx/OriginalMessage.ts @@ -905,6 +905,7 @@ type OriginalMessageMap = { [CONST.REPORT.ACTIONS.TYPE.CONCIERGE_CATEGORY_OPTIONS]: OriginalMessageConciergeCategoryOptions; [CONST.REPORT.ACTIONS.TYPE.RETRACTED]: never; [CONST.REPORT.ACTIONS.TYPE.REOPENED]: never; + [CONST.REPORT.ACTIONS.TYPE.RECEIPT_SCAN_FAILED]: never; } & OldDotOriginalMessageMap & { [T in ValueOf]: OriginalMessagePolicyChangeLog; } & { From 4fa2c3916503af13bbe936de944ce988b5bbe684 Mon Sep 17 00:00:00 2001 From: Krishna Chaitanya Date: Tue, 17 Jun 2025 17:53:25 +0530 Subject: [PATCH 5/5] update strings for all languages --- src/languages/de.ts | 1 + src/languages/fr.ts | 1 + src/languages/it.ts | 1 + src/languages/ja.ts | 2 ++ src/languages/nl.ts | 1 + src/languages/pl.ts | 1 + src/languages/pt-BR.ts | 1 + src/languages/zh-hans.ts | 1 + 8 files changed, 9 insertions(+) diff --git a/src/languages/de.ts b/src/languages/de.ts index d81832236d38..eabd2dbc2f90 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -977,6 +977,7 @@ const translations = { deleteReceipt: 'Beleg l\u00F6schen', deleteConfirmation: 'M\u00F6chten Sie diesen Beleg wirklich l\u00F6schen?', addReceipt: 'Beleg hinzuf\u00FCgen', + scanFailed: 'Der Beleg konnte nicht gescannt werden, da Händler, Datum oder Betrag fehlen.', }, quickAction: { scanReceipt: 'Beleg scannen', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 0a7d1def6304..6776d0275539 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -979,6 +979,7 @@ const translations = { deleteReceipt: 'Supprimer le re\u00E7u', deleteConfirmation: '\u00CAtes-vous s\u00FBr de vouloir supprimer ce re\u00E7u ?', addReceipt: 'Ajouter un re\u00E7u', + scanFailed: 'Le reçu n’a pas pu être scanné, car il manque le commerçant, la date ou le montant.', }, quickAction: { scanReceipt: 'Scanner le re\u00E7u', diff --git a/src/languages/it.ts b/src/languages/it.ts index 8b7f37ba54ff..bfbafa850000 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -969,6 +969,7 @@ const translations = { deleteReceipt: 'Elimina ricevuta', deleteConfirmation: 'Sei sicuro di voler eliminare questa ricevuta?', addReceipt: 'Aggiungi ricevuta', + scanFailed: 'La ricevuta non può essere scansionata perché mancano il commerciante, la data o l’importo.', }, quickAction: { scanReceipt: 'Scansiona ricevuta', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index f1487c2b2b98..d2beb27729dc 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -1044,6 +1044,8 @@ const translations = { deleteReceipt: '\u9818\u53CE\u66F8\u3092\u524A\u9664', deleteConfirmation: '\u3053\u306E\u9818\u53CE\u66F8\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F', addReceipt: '\u9818\u53CE\u66F8\u3092\u8FFD\u52A0', + scanFailed: + '\u8CA9\u58F2\u8005\u3001\u65E5\u4ED8\u3001\u307E\u305F\u306F\u91D1\u984D\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u308B\u305F\u3081\u3001\u30EC\u30B7\u30FC\u30C8\u3092\u30B9\u30AD\u30E3\u30F3\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002', }, quickAction: { scanReceipt: '\u9818\u53CE\u66F8\u3092\u30B9\u30AD\u30E3\u30F3', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 15eb1ec1f5ed..324afc15526b 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -967,6 +967,7 @@ const translations = { deleteReceipt: 'Verwijder ontvangstbewijs', deleteConfirmation: 'Weet je zeker dat je dit ontvangstbewijs wilt verwijderen?', addReceipt: 'Bon toevoegen', + scanFailed: 'De bon kon niet worden gescand omdat de handelaar, datum of het bedrag ontbreekt.', }, quickAction: { scanReceipt: 'Scan bonnetje', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 56c729a50614..b35bd7293fa9 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -978,6 +978,7 @@ const translations = { deleteReceipt: 'Usu\u0144 paragon', deleteConfirmation: 'Czy na pewno chcesz usun\u0105\u0107 ten paragon?', addReceipt: 'Dodaj paragon', + scanFailed: 'Paragon nie może być zeskanowany, ponieważ brakuje sprzedawcy, daty lub kwoty.', }, quickAction: { scanReceipt: 'Zeskanuj paragon', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 8b77ef5b2768..88b9fa763d3b 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -973,6 +973,7 @@ const translations = { deleteReceipt: 'Excluir recibo', deleteConfirmation: 'Tem certeza de que deseja excluir este recibo?', addReceipt: 'Adicionar recibo', + scanFailed: 'O recibo não pôde ser escaneado, pois está faltando o comerciante, a data ou o valor.', }, quickAction: { scanReceipt: 'Digitalizar recibo', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index d37a54c42ba4..ecf033dbaf14 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -989,6 +989,7 @@ const translations = { deleteReceipt: '\u5220\u9664\u6536\u636E', deleteConfirmation: '\u60A8\u786E\u5B9A\u8981\u5220\u9664\u6B64\u6536\u636E\u5417\uFF1F', addReceipt: '\u6DFB\u52A0\u6536\u636E', + scanFailed: '\u65E0\u6CD5\u626B\u63CF\u6536\u636E\uFF0C\u56E0\u4E3A\u7F3A\u5C11\u5546\u5BB6\u3001\u65E5\u671F\u6216\u91D1\u989D\u3002', }, quickAction: { scanReceipt: '\u626B\u63CF\u6536\u636E',