[CP Staging] Add payer admin logic for manual reimbursement payers #95547
Conversation
|
@NikkiWines we have TS and ESLint failures here |
|
Sure, I'm working on it |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / Safari2026-07-08.17-37-51.mp4 |
|
@NikkiWines My payment admins aren't receiving any expenses to pay. Does this happen on your side as well? 2026-07-08.16-56-59.mp4 |
|
@dmkt9 hmm no, my payments admin sees the report under |
In your video, you use the payments admin as the submitter, right? However, I think the bug reported in #95537 is different. In that case, the owner of the policy submits and approves an expense, but the expense does not appear on the payments admin's side for payment. So I think this could be a backend bug. Our PR is actually fixing #95561 instead. |
no in my video the submitter is just a normal member on the policy. Then there are two admins: admin@dev.com who is the policy owner and admin2@dev.com who is the payments admin |
hmmm possibly 🤔 |
I just tried with a regular member, and the issue still happens on my side. Could you please recheck one more time? |
|
@mjasikowski @NikkiWines This PR looks good to me. However, we need to update the QA steps to reflect that it fixes #95561. I've tried reverting #92787, but the issue in #95537 still occurs on my side. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 mjasikowski 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! 🧪🧪
|
[CP Staging] Add payer admin logic for manual reimbursement payers (cherry picked from commit 31e0bcf) (cherry-picked to staging by roryabraham)
|
🚀 Cherry-picked to staging by https://github.com/roryabraham in version: 9.4.29-1 🚀
|
|
🤖 Help site review: no changes required I reviewed the changes in this PR against the help site articles under Why: This PR is a bug fix (a The existing docs already describe payers/reimbursers generically and don't state that a Payments Admin can't be a designated payer, so they remain accurate:
Because no changes are required, I did not create a draft help site PR. @NikkiWines, please confirm this assessment reflects the current behavior. If you feel the Payer / Payments Admin permissions should be documented more explicitly on the help site, let me know and I'll open a draft PR for it. |
|
🚀 Cherry-picked to staging by https://github.com/roryabraham in version: 9.4.31-0 🚀
|
|
🤖 Help site review: no changes required. I reviewed the changes in this PR against the existing help-site articles under Why: This PR is a permissions bug fix (issue #95561) — it makes the Pay button appear for a Payments Admin who has been designated as the Payer in Workflows while using manual reimbursement (Mark as Paid). It corrects who is recognized as an authorized payer ( The relevant articles already document the underlying behavior accurately at the appropriate level of detail:
None of these describe Pay-button visibility rules at the granularity this fix touches, so they remain correct as written. No draft docs PR was created. @NikkiWines, please confirm you agree no help-site changes are required. If you'd like me to add or adjust any article to call out that a Payments Admin can be set as the Payer, reply with |
|
🚀 Deployed to production by https://github.com/grgia in version: 9.4.31-0 🚀
Bundle Size Analysis (Sentry): |
|
🚀 Cherry-picked to staging by https://github.com/roryabraham in version: 9.4.32-0 🚀
|
|
🤖 Re-reviewed on re-trigger — determination unchanged: no help-site changes required, no draft PR created. I re-checked the diff against the help-site articles and the authoring guidelines ( This PR is a permissions bug fix for issue #95561: it makes the Pay button appear for a Payments Admin who is set as the Payer in Workflows while using Mark as Paid (manual reimbursement). It restores already-shipped, intended behavior — it does not introduce or change any user-facing feature, setting, label, or flow that the help site documents. Pay-button visibility at this per-role granularity isn't something the public articles describe, so they remain accurate as written:
The one adjacent gap I noticed is that the Workflows article describes the payer narrowly as "a Workspace Admin," without noting a Payments Admin can also be designated as the payer. That gap predates this PR (the payer-designation feature shipped earlier) and isn't caused by this change, so I didn't open a PR for it here. @NikkiWines, if you'd like me to update the Workflows article to explicitly state that a Payments Admin can be set as the Payer, reply with |
Explanation of Change
Fixed Issues
$ #95561
PROPOSAL:
Tests
Same as QA
Offline tests
N/A
QA Steps
Setup
Repro / verify
Create a Control workspace.
Invite user as payments admin to the workspace.
Change Payer to payments admin in workspace settings > Workflows > Payer.
Go to staging.new.expensify.com
[Payments admin] Create an expense in workspace chat.
[Payments admin] Click Submit.
[Owner] Approve payments admin's report.
[Payments admin] Open the report.
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-08.at.00.34.32.mov