Fix: "Waiting for you to pay expenses" shown incorrectly for $0.00 reports without Pay button#88612
Conversation
…0 reports when Pay button is not shown
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.
|
|
@ZhenjaHorbach Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
| } | ||
|
|
||
| if (shouldShowNoFurtherAction) { | ||
| return buildNextStepNew({ |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d9a1fec709
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| case CONST.REPORT.STATUS_NUM.SUBMITTED: { | ||
| if (policy?.approvalMode === CONST.POLICY.APPROVAL_MODE.OPTIONAL) { | ||
| nextStep = nextStepFixOrPayExpense; | ||
| nextStep = reimbursableSpend === 0 ? nextStepNoActionRequired : nextStepFixOrPayExpense; |
There was a problem hiding this comment.
Line 2312 in c4ba24a
@marufsharifi just checking- does the report slip through these checks?
There was a problem hiding this comment.
Yes, it can. getActions() correctly removes PAY for a $0 report, but before this change the section builders could still render the row based on status/type alone, so it could still appear in Ready to Pay.
| const shouldShowNoFurtherAction = | ||
| reimbursableSpend === 0 && | ||
| (moneyRequestReport?.statusNum === CONST.REPORT.STATUS_NUM.APPROVED || | ||
| (moneyRequestReport?.statusNum === CONST.REPORT.STATUS_NUM.SUBMITTED && policy?.approvalMode === CONST.POLICY.APPROVAL_MODE.OPTIONAL)); |
There was a problem hiding this comment.
does this need to be hardcoded? has was it shown before
There was a problem hiding this comment.
Yes, I think this override is needed. The header still reads from the deprecated nextStep object via getReportNextStep(), so fixing only buildOptimisticNextStep() would not update a stale "Waiting to pay" value. This just overrides that stale case for $0 submitted/approved reports while still using the existing legacy builder for the message shape
|
@ZhenjaHorbach kindly bump. thanks. |
|
@ZhenjaHorbach, friendly bump. thanks. |
|
Sorry for the delay @marufsharifi |
Reviewer Checklist
Screenshots/VideosAndroid: HybridApp2026-04-30.09.55.01.movAndroid: mWeb Chrome2026-04-30.09.53.10.moviOS: HybridApp2026-04-30.09.55.01.moviOS: mWeb Safari2026-04-30.09.53.10.movMacOS: Chrome / Safari2026-04-30.09.51.44.mov |
|
@heyjennahay, could you please take a look at this when you get a chance? Thanks. |
|
🚧 @grgia has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/grgia in version: 9.3.66-0 🚀
|
|
No help site changes are required for this PR. I reviewed the following articles against the changes in this PR:
This PR is a bug fix that stops $0.00 reimbursable reports from showing "Waiting for you to pay expenses" and removes them from the Pay filter view. None of the existing help site articles make claims that would become incorrect — the docs describe the general payment workflow without covering this edge case at that granularity. |
Explanation of Change
These changes make the experience for
$0.00expense reports match what users can actually do.Before this update, the app could still tell someone “Waiting for you to pay expenses” or show the report in
Spend> Ready to Payeven when there was nothing to pay and the Pay action was hidden. That created a confusing mismatch between the status shown in the UI and the actions available to the user.This update fixes that by treating zero-value reimbursable reports as requiring no further action once they reach the relevant submitted or approved states, and by removing them from the
Spend > Ready to Payview when they are not truly payable. In product terms, it keeps the report status, header messaging, and Pay list aligned so users only see payment prompts when a payment can actually happen.Fixed Issues
$ #75396
PROPOSAL: #75396 (comment)
Tests
Offline tests
Same as Tests.
QA Steps
Same as Tests.
// TODO: These must be filled out, or the issue title must include "[No QA]."
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, 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.ScrollViewcomponent to make it scrollable when more elements are added to the page.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
Screen.Recording.2026-04-24.at.7.00.17.PM.mp4
Android: mWeb Chrome
REC-2026042461149.PM.mp4
iOS: Native
REC-2026042463350.PM.mp4
iOS: mWeb Safari
REC-2026042460136.PM.mp4
MacOS: Chrome / Safari
REC-2026042431830.PM.mp4