Add a Paid status expense report filter with those three options#94808
Conversation
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx ts-node ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppandroid.movAndroid: mWeb Chromeandroid-mweb.moviOS: HybridAppios-resize.mp4iOS: mWeb Safariios-mweb.movMacOS: Chrome / Safariweb-resize.mp4 |
|
Running translations for you. 👍 |
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: View the translation diffdiff --git a/src/languages/de.ts b/src/languages/de.ts
index 5014319a354..2ae0f69061c 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -397,7 +397,7 @@ const translations: TranslationDeepObject<typeof en> = {
withdrawalID: 'Auszahlungs-ID',
internationalReimbursementIDs: 'Internationale Erstattungs-IDs',
withdrawalStatus: 'Auszahlungsstatus',
- paidStatus: 'Zahlungsstatus',
+ paidStatus: 'Status: Bezahlt',
bankAccounts: 'Bankkonten',
chooseFile: 'Datei auswählen',
chooseFiles: 'Dateien auswählen',
@@ -8673,11 +8673,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
failedError: ({link}: {link: string}) => `Wir versuchen diese Abrechnung erneut, sobald du <a href="${link}">dein Konto entsperrst</a>.`,
withdrawalInfo: ({date, withdrawalID}: {date: string; withdrawalID: number}) => `${date} • Auszahlungs-ID: ${withdrawalID}`,
},
- paidStatus: {
- markedAsPaid: 'Als bezahlt markiert',
- withdrawing: 'Wird abgebucht',
- confirmed: 'Bestätigt',
- },
+ paidStatus: {markedAsPaid: 'Als bezahlt markiert', withdrawing: 'Wird abgehoben', confirmed: 'Bestätigt'},
reportLayout: {
reportLayout: 'Berichts-Layout',
groupByLabel: 'Gruppieren nach:',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 641d49eb82b..266d380eabc 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -351,7 +351,7 @@ const translations: TranslationDeepObject<typeof en> = {
longReportID: 'ID de informe largo',
withdrawalID: 'ID de retiro',
withdrawalStatus: 'Estado de retiro',
- paidStatus: 'Estado de pago',
+ paidStatus: 'Estado pagado',
bankAccounts: 'Cuentas bancarias',
chooseFile: 'Elegir archivo',
chooseFiles: 'Elegir archivos',
@@ -8455,11 +8455,7 @@ ${amount} para ${merchant} - ${date}`,
failedError: ({link}: {link: string}) => `Reintentaremos esta liquidación cuando <a href="${link}">desbloquees tu cuenta</a>.`,
withdrawalInfo: ({date, withdrawalID}: {date: string; withdrawalID: number}) => `${date} • ID de retiro: ${withdrawalID}`,
},
- paidStatus: {
- markedAsPaid: 'Marcado como pagado',
- withdrawing: 'Retirando',
- confirmed: 'Confirmado',
- },
+ paidStatus: {markedAsPaid: 'Marcado como pagado', withdrawing: 'Retirando', confirmed: 'Confirmado'},
reportLayout: {
reportLayout: 'Diseño del informe',
groupByLabel: 'Agrupar por:',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index e2155ba870b..162d4036440 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -396,7 +396,7 @@ const translations: TranslationDeepObject<typeof en> = {
withdrawalID: 'ID de retrait',
internationalReimbursementIDs: 'ID de remboursement international',
withdrawalStatus: 'Statut de retrait',
- paidStatus: 'Statut de paiement',
+ paidStatus: 'Statut payé',
bankAccounts: 'Comptes bancaires',
chooseFile: 'Choisir un fichier',
chooseFiles: 'Choisir des fichiers',
@@ -8707,11 +8707,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
failedError: ({link}: {link: string}) => `Nous réessaierons ce règlement lorsque vous <a href="${link}">déverrouillerez votre compte</a>.`,
withdrawalInfo: ({date, withdrawalID}: {date: string; withdrawalID: number}) => `${date} • ID de retrait : ${withdrawalID}`,
},
- paidStatus: {
- markedAsPaid: 'Marqué comme payé',
- withdrawing: 'Prélèvement en cours',
- confirmed: 'Confirmé',
- },
+ paidStatus: {markedAsPaid: 'Marqué comme payé', withdrawing: 'Retrait en cours', confirmed: 'Confirmé'},
reportLayout: {
reportLayout: 'Mise en page de la note de frais',
groupByLabel: 'Regrouper par :',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index dbc93e88928..9f6523c13ca 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -397,7 +397,7 @@ const translations: TranslationDeepObject<typeof en> = {
withdrawalID: 'ID prelievo',
internationalReimbursementIDs: 'ID di rimborso internazionale',
withdrawalStatus: 'Stato del prelievo',
- paidStatus: 'Stato del pagamento',
+ paidStatus: 'Stato di pagamento',
bankAccounts: 'Conti bancari',
chooseFile: 'Scegli file',
chooseFiles: 'Scegli file',
@@ -8662,11 +8662,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
failedError: ({link}: {link: string}) => `Riproveremo a effettuare questa liquidazione quando <a href="${link}">sblocchi il tuo conto</a>.`,
withdrawalInfo: ({date, withdrawalID}: {date: string; withdrawalID: number}) => `${date} • ID prelievo: ${withdrawalID}`,
},
- paidStatus: {
- markedAsPaid: 'Contrassegnato come pagato',
- withdrawing: 'Prelievo in corso',
- confirmed: 'Confermato',
- },
+ paidStatus: {markedAsPaid: 'Contrassegnato come pagato', withdrawing: 'Prelievo', confirmed: 'Confermato'},
reportLayout: {
reportLayout: 'Layout del report',
groupByLabel: 'Raggruppa per:',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index dc39bca3c43..423cf347948 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -396,7 +396,7 @@ const translations: TranslationDeepObject<typeof en> = {
withdrawalID: '出金ID',
internationalReimbursementIDs: '国際払い戻しID',
withdrawalStatus: '出金ステータス',
- paidStatus: '支払いステータス',
+ paidStatus: '支払済みステータス',
bankAccounts: '銀行口座',
chooseFile: 'ファイルを選択',
chooseFiles: 'ファイルを選択',
@@ -8551,11 +8551,7 @@ ${reportName}`,
failedError: ({link}: {link: string}) => `<a href="${link}">アカウントのロックを解除</a>すると、この精算を再試行します。`,
withdrawalInfo: ({date, withdrawalID}: {date: string; withdrawalID: number}) => `${date}・出金 ID:${withdrawalID}`,
},
- paidStatus: {
- markedAsPaid: '支払い済みとしてマーク',
- withdrawing: '引き落とし中',
- confirmed: '確認済み',
- },
+ paidStatus: {markedAsPaid: '支払い済みにマークしました', withdrawing: '出金中', confirmed: '確認済み'},
reportLayout: {
reportLayout: 'レポートレイアウト',
groupByLabel: 'グループ化基準:',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 3a3bbdb6a9b..ecb06b6ca38 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -396,7 +396,7 @@ const translations: TranslationDeepObject<typeof en> = {
withdrawalID: 'Opname-ID',
internationalReimbursementIDs: 'Internationale terugbetalings-ID’s',
withdrawalStatus: 'Opnamestatus',
- paidStatus: 'Betaalstatus',
+ paidStatus: 'Betaald-status',
bankAccounts: 'Bankrekeningen',
chooseFile: 'Bestand kiezen',
chooseFiles: 'Bestanden kiezen',
@@ -8633,11 +8633,7 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
failedError: ({link}: {link: string}) => `We proberen deze afrekening opnieuw zodra je <a href="${link}">je account ontgrendelt</a>.`,
withdrawalInfo: ({date, withdrawalID}: {date: string; withdrawalID: number}) => `${date} • Opname-ID: ${withdrawalID}`,
},
- paidStatus: {
- markedAsPaid: 'Gemarkeerd als betaald',
- withdrawing: 'Wordt afgeschreven',
- confirmed: 'Bevestigd',
- },
+ paidStatus: {markedAsPaid: 'Gemarkeerd als betaald', withdrawing: 'Opnemen', confirmed: 'Bevestigd'},
reportLayout: {
reportLayout: 'Rapportindeling',
groupByLabel: 'Groeperen op:',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 9a22487f879..41387cdaeeb 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -396,7 +396,7 @@ const translations: TranslationDeepObject<typeof en> = {
withdrawalID: 'Identyfikator wypłaty',
internationalReimbursementIDs: 'Identyfikatory zwrotów międzynarodowych',
withdrawalStatus: 'Status wypłaty',
- paidStatus: 'Status płatności',
+ paidStatus: 'Status: opłacono',
bankAccounts: 'Konta bankowe',
chooseFile: 'Wybierz plik',
chooseFiles: 'Wybierz pliki',
@@ -8622,11 +8622,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
failedError: ({link}: {link: string}) => `Spróbujemy ponownie rozliczyć tę płatność, gdy <a href="${link}">odblokujesz swoje konto</a>.`,
withdrawalInfo: ({date, withdrawalID}: {date: string; withdrawalID: number}) => `${date} • ID wypłaty: ${withdrawalID}`,
},
- paidStatus: {
- markedAsPaid: 'Oznaczone jako opłacone',
- withdrawing: 'Wypłacanie',
- confirmed: 'Potwierdzone',
- },
+ paidStatus: {markedAsPaid: 'Oznaczone jako opłacone', withdrawing: 'Wypłata', confirmed: 'Potwierdzone'},
reportLayout: {
reportLayout: 'Układ raportu',
groupByLabel: 'Grupuj według:',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index e4fb71e151f..0f9865ccff1 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -396,7 +396,7 @@ const translations: TranslationDeepObject<typeof en> = {
withdrawalID: 'ID do saque',
internationalReimbursementIDs: 'IDs de reembolso internacional',
withdrawalStatus: 'Status do saque',
- paidStatus: 'Status de pagamento',
+ paidStatus: 'Status pago',
bankAccounts: 'Contas bancárias',
chooseFile: 'Escolher arquivo',
chooseFiles: 'Escolher arquivos',
@@ -8620,11 +8620,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
failedError: ({link}: {link: string}) => `Tentaremos processar este acerto novamente quando você <a href="${link}">desbloquear sua conta</a>.`,
withdrawalInfo: ({date, withdrawalID}: {date: string; withdrawalID: number}) => `${date} • ID de saque: ${withdrawalID}`,
},
- paidStatus: {
- markedAsPaid: 'Marcado como pago',
- withdrawing: 'Sacando',
- confirmed: 'Confirmado',
- },
+ paidStatus: {markedAsPaid: 'Marcado como pago', withdrawing: 'Sacando', confirmed: 'Confirmado'},
reportLayout: {
reportLayout: 'Layout do relatório',
groupByLabel: 'Agrupar por:',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 480ff199bba..b57fd83a2c3 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -396,7 +396,7 @@ const translations: TranslationDeepObject<typeof en> = {
withdrawalID: '提现编号',
internationalReimbursementIDs: '国际报销 ID',
withdrawalStatus: '提现状态',
- paidStatus: '支付状态',
+ paidStatus: '已付款状态',
bankAccounts: '银行账户',
chooseFile: '选择文件',
chooseFiles: '选择文件',
@@ -8380,11 +8380,7 @@ ${reportName}`,
failedError: ({link}: {link: string}) => `当你<a href="${link}">解锁你的账户</a>后,我们会重试此结算。`,
withdrawalInfo: ({date, withdrawalID}: {date: string; withdrawalID: number}) => `${date} • 提现 ID:${withdrawalID}`,
},
- paidStatus: {
- markedAsPaid: '标记为已支付',
- withdrawing: '提现中',
- confirmed: '已确认',
- },
+ paidStatus: {markedAsPaid: '标记为已付款', withdrawing: '提现中', confirmed: '已确认'},
reportLayout: {
reportLayout: '报表布局',
groupByLabel: '分组依据:',
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
|
🚧 trjExpensify has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
Can you move the filter in the menu to just after "Exported to", please? |
|
I also take it that adding the column is coming separately is it? |
@trjExpensify Yup, I'll do it in a separate PR |
|
@trjExpensify I updated
|
|
@daledah can you please prioritize this PR? |
|
sure, on my list today |
daledah
left a comment
There was a problem hiding this comment.
the code changes LGTM and tests well
|
All yours @JS00001 |
|
🚧 JS00001 has triggered a test Expensify/App build. You can view the workflow run here. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/JS00001 in version: 9.4.28-0 🚀
|
|
🤖 I reviewed the changes in this PR against the help site files under Docs update required: Yes. This PR adds a new Paid status filter for expense reports in Advanced Search, exposed as the Draft PR created: #95410 — adds What I verified
The other changes in this PR (CONST keys, filter components, autocomplete wiring, and language strings) are internal and don't require additional help site edits. @dukenv0307, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |
|
🚀 Deployed to production by https://github.com/mountiny in version: 9.4.28-2 🚀
Bundle Size Analysis (Sentry): |

Explanation of Change
Fixed Issues
$ #94561
PROPOSAL:
Tests
Offline tests
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)Avatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari
Screen.Recording.2026-07-01.at.10.54.15.PM.mov