Skip to content

fix: show "Waiting for this report to be paid." generic message when a non-admin approver approves request #74647

Closed
etCoderDysto wants to merge 15 commits intoExpensify:mainfrom
etCoderDysto:fix_74281
Closed

fix: show "Waiting for this report to be paid." generic message when a non-admin approver approves request #74647
etCoderDysto wants to merge 15 commits intoExpensify:mainfrom
etCoderDysto:fix_74281

Conversation

@etCoderDysto
Copy link
Contributor

@etCoderDysto etCoderDysto commented Nov 8, 2025

Explanation of Change

Fixed Issues

$ #74281
PROPOSAL: #74281 (comment)

Tests

  • Verify that no errors appear in the JS console

Offline tests

QA Steps

// TODO: These must be filled out, or the issue title must include "[No QA]."

Test 1

Prerequisite1: Account has at least one workspace.
Prerequisite 2: Delayed submissions and approvals enabled.
Prerequisite 3: Owner has invited employee and approver
Prerequisite 4. Make the approver account the only approver of the employee

  1. Employe: Open workspace chat -> Create a manual expense -> Submit the expense
  2. Approver: Open the expense created by employee -> Open the expense thread report -> Change network to offline mode -> Approve the expense
  3. Approver: Verify that you see "Waiting for this report to be paid." next step message
  4. Approver: Change network to online mode
  5. Approver: Verify that you see "Waiting for admin to pay the expense." message
  • Verify that no errors appear in the JS console

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
    • MacOS: Desktop
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I verified there are no new alerts related to the canBeMissing param for useOnyx
  • I followed proper code patterns (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
      • If any non-english text was added/modified, I used JaimeGPT to get English > Spanish translation. I then posted it in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
  • I verified that if a function's arguments changed that all usages have also been updated correctly
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))
  • If new assets were added or existing ones were modified, I verified that:
    • The assets are optimized and compressed (for SVG files, run npm run compress-svg)
    • The assets load correctly across all supported platforms.
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • I added unit tests for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native
Android.Screen.Recording.2025-11-24.at.10.57.30.at.night.mp4
Android: mWeb Chrome
Android.chrome.Screen.Recording.2025-11-24.at.4.31.33.in.the.afternoon.mp4
iOS: Native
ios.Screen.Recording.2025-11-24.at.4.25.46.in.the.afternoon.mp4
iOS: mWeb Safari
ios.safari.Screen.Recording.2025-11-24.at.4.28.27.in.the.afternoon.mp4
MacOS: Chrome / Safari
webScreen.Recording.2025-11-24.at.4.04.39.in.the.afternoon.mp4
MacOS: Desktop
Desktop.Screen.Recording.2025-11-24.at.4.20.39.in.the.afternoon.mp4

@etCoderDysto etCoderDysto marked this pull request as ready for review November 11, 2025 07:14
@etCoderDysto etCoderDysto requested review from a team as code owners November 11, 2025 07:14
@melvin-bot melvin-bot bot requested review from aimane-chnaif and removed request for a team November 11, 2025 07:15
@melvin-bot
Copy link

melvin-bot bot commented Nov 11, 2025

@aimane-chnaif 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]

@melvin-bot melvin-bot bot requested review from JmillsExpensify and removed request for a team November 11, 2025 07:15
@codecov
Copy link

codecov bot commented Nov 11, 2025

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.

Files with missing lines Coverage Δ
src/libs/NextStepUtils.ts 54.13% <100.00%> (-4.14%) ⬇️
... and 100 files with indirect coverage changes

});

it('should mention an admin to pay expenses in optimistic next step message when admin takes control and approves', async () => {
it('should refer an admin as "you" in optimistic next step message when admin takes control and approves', async () => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please also add test case of referring an admin as other person

Copy link
Contributor Author

@etCoderDysto etCoderDysto Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure! @aimane-chnaif I have some failing tests. I will change it to draft pr, and I will ping you once it is ready for review

Copy link
Contributor Author

@etCoderDysto etCoderDysto Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please also add test case of referring an admin as other person

@aimane-chnaif here we are assigning No further action required to the optimistic next step when the approver is not the payer. For that reason, there won't be any case where Waiting for an admin to pay next message is returned when an approver approves the request.

case CONST.REPORT.STATUS_NUM.APPROVED:
if (isInvoiceReport(report) || !isCurrentUserPayer || reimbursableSpend === 0) {
optimisticNextStep = noActionRequired;

We show No further action required optimistically, and backend returns Waiting for an admin to pay message

Screen.Recording.2025-11-11.at.3.23.59.in.the.afternoon.mp4

Should I change the above condition to show Waiting for an admin to pay message when a non-admin approver approves the payment? I will write an admin test case if we made the change.

if (isInvoiceReport(report) || reimbursableSpend === 0) {
                optimisticNextStep = noActionRequired;

                break;
            }

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@carlosmiceli what do you think? I feel like it's not bug.

Copy link
Contributor

@carlosmiceli carlosmiceli Nov 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I'm not quite following what's the discussed solution, is it what message should be returned from the BE and also optimistically when a non-admin approves?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, thank you!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @carlosmiceli, did we get an answer for the issue?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Asking about this on Slack as we speak, lol 😄

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

},
{
text: `an admin`,
text: `you`,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. Please add test case when text: an admin

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I updated a wrong unit test function here. The test I meant to change was for buildNextStepNew function. But I changed the test for buildNextStep earlier. I have reverted the chagne.

@etCoderDysto etCoderDysto marked this pull request as draft November 11, 2025 08:50
@etCoderDysto etCoderDysto marked this pull request as ready for review November 11, 2025 12:28
@etCoderDysto
Copy link
Contributor Author

The type check error comes from main. I think the unit test it a time out error.

Copy link
Contributor

@JmillsExpensify JmillsExpensify left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR looks good from a product perspective.

@carlosmiceli
Copy link
Contributor

@etCoderDysto @aimane-chnaif we decided to simplify the solution to the bug, and go with a generic message that works across the board instead. Let's go with Waiting for this report to be paid. I'll make the same change in the BE (context).

@carlosmiceli
Copy link
Contributor

@etCoderDysto Backend PR is up for review, confirming again that new BE message is going to be "Waiting for this report to be paid", except for the case where it says "Waiting for this bill to be paid". Want to update the PR here to match that so we can have it ready to merge once BE is deployed?

@carlosmiceli
Copy link
Contributor

@etCoderDysto @aimane-chnaif updating the plan here... Could we implement this new standard message just in App regardless of the message sent from the BE? I realize that we don't actually need to make BE changes for such a generic message.

@etCoderDysto
Copy link
Contributor Author

@etCoderDysto @aimane-chnaif updating the plan here... Could we implement this new standard message just in App regardless of the message sent from the BE? I realize that we don't actually need to make BE changes for such a generic message.

Sure! I will make the update by early Monday.

@etCoderDysto
Copy link
Contributor Author

etCoderDysto commented Nov 24, 2025

@aimane-chnaif @carlosmiceli I have made the change to show "Waiting for this report to be paid." when a non-admin approver aproves a report. The original issue is fixed by this pr #73270. And I have removed the code for the original issue fix.

And i have noticed that there is a plan to depreciate buildNextStepNew function and replace and replace it with buildOptimisticNextStep. Should I make the change for buildOptimisticNextStep too since we will be using it in place of buildNextStepNew?

case CONST.REPORT.STATUS_NUM.APPROVED:
if (
isInvoiceReport(report) ||
!isPayer(
{
accountID: currentUserAccountIDParam,
email: currentUserEmailParam,
},
report,
)
) {
nextStep = nextStepNoActionRequired;
break;

@etCoderDysto
Copy link
Contributor Author

etCoderDysto commented Nov 24, 2025

Does using it in parallel mean using both?

I don't think we are using both to determine what next step message to display for user. For now we are only using optimistic next message built using buildNextStepNew to show the next message in MoneyRequestHeader.

When we are using buildNextStepNew to build optimistic next step, we are also using buildOptimisticNextStep to build another optimistic next step with a different format. Below is the next optimistic message format built using buildOptimisticNextStep.

actorAccountID: -1
icon: "hourglass"
messageKey: "waitingToPay"

App/src/libs/actions/IOU.ts

Lines 9802 to 9803 in 90ca5a8

optimisticNextStepDeprecated = buildNextStepNew({report: iouReport, predictedNextStatus: CONST.REPORT.STATUS_NUM.REIMBURSED});
optimisticNextStep = buildOptimisticNextStep({report: iouReport, predictedNextStatus: CONST.REPORT.STATUS_NUM.REIMBURSED});

Then we are storing the optimistic next step message built using buildNextStepNew in reportNext_ onyx key

App/src/libs/actions/IOU.ts

Lines 9858 to 9861 in 90ca5a8

onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.NEXT_STEP}${iouReport?.reportID}`,
value: optimisticNextStepDeprecated,
},

And we use it in MoneyRequestHeader to show next step message in MoneyReportHeaderStatusBar
const [nextStep] = useOnyx(`${ONYXKEYS.COLLECTION.NEXT_STEP}${moneyRequestReport?.reportID}`, {canBeMissing: true});

But for the optimistic next step message from buildOptimisticNextStep, we are storing the value in report.nextStep, and we are not using it to display the next step message in MoneyRequestHeader

App/src/libs/actions/IOU.ts

Lines 9838 to 9855 in 90ca5a8

onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.REPORT}${iouReport?.reportID}`,
value: {
lastMessageText: getReportActionText(optimisticIOUReportAction),
lastMessageHtml: getReportActionHtml(optimisticIOUReportAction),
lastVisibleActionCreated: optimisticIOUReportAction.created,
hasOutstandingChildRequest: false,
statusNum: CONST.REPORT.STATUS_NUM.REIMBURSED,
stateNum: CONST.REPORT.STATE_NUM.APPROVED,
pendingFields: {
preview: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
reimbursed: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
partial: full ? null : CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
nextStep: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
},
nextStep: optimisticNextStep,
errors: null,
},

@carlosmiceli
Copy link
Contributor

That confused me a bit more 😅

Am I to understand that all we need in this case then is buildOptimisticNextStep?

@etCoderDysto
Copy link
Contributor Author

That confused me a bit more 😅

Am I to understand that all we need in this case then is buildOptimisticNextStep?

I have made things complicated 😄. To make things simple we are not using next message data from buildOptimisticNextStep currently. We are only using the data from buildNextStepNew. Therefore I don't think we have to updated buildOptimisticNextStep for now.

@etCoderDysto
Copy link
Contributor Author

@aimane-chnaif PR is ready for further review. Please take a look at this comment for latest change on this PR

@etCoderDysto etCoderDysto changed the title fix: "Waiting for an admin to pay expenses." message is shown instead of "Waiting for you to pay expenses." when admin approves expense fix: show "Waiting for this report to be paid." generic message when a non-admin approver approves request Nov 26, 2025
@etCoderDysto
Copy link
Contributor Author

@aimane-chnaif PR is ready for further review. Please take a look at this comment for latest change on this PR

@aimane-chnaif a gentle reminder to review the new changes

@aimane-chnaif
Copy link
Contributor

@etCoderDysto please fix conflict. reviewing

@aimane-chnaif
Copy link
Contributor

aimane-chnaif commented Dec 2, 2025

Please also update outdated tests steps.

@aimane-chnaif
Copy link
Contributor

aimane-chnaif commented Dec 2, 2025

Reviewer Checklist

  • I have verified the author checklist is complete (all boxes are checked off).
  • I verified the correct issue is linked in the ### Fixed Issues section above
  • I verified testing steps are clear and they cover the changes made in this PR
    • I verified the steps for local testing are in the Tests section
    • I verified the steps for Staging and/or Production testing are in the QA steps section
    • I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
  • I checked that screenshots or videos are included for tests on all platforms
  • I included screenshots or videos for tests on all platforms
  • I verified that the composer does not automatically focus or open the keyboard on mobile unless explicitly intended. This includes checking that returning the app from the background does not unexpectedly open the keyboard.
  • I verified tests pass on all platforms & I tested again on:
    • Android: HybridApp
    • Android: mWeb Chrome
    • iOS: HybridApp
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
    • MacOS: Desktop
  • If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
  • I verified there are no new alerts related to the canBeMissing param for useOnyx
  • I verified proper code patterns were followed (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I verified that this PR follows the guidelines as stated in the Review Guidelines
  • I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately and each prop has a /** comment above it */
    • The file is named correctly
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
    • Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
    • All JSX used for rendering exists in the render method
    • The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • For any bug fix or new feature in this PR, I verified that sufficient unit tests are included to prevent regressions in this flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
  • I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: HybridApp
Android: mWeb Chrome
iOS: HybridApp
ios.mov
iOS: mWeb Safari
MacOS: Chrome / Safari
  • admin approver
web.mov

@etCoderDysto
Copy link
Contributor Author

@etCoderDysto please fix conflict. reviewing

I have resolved conflict and updated old test steps

@aimane-chnaif
Copy link
Contributor

  1. Approver: Verify that you see "Waiting for admin to pay the expense." message

Is this correct? I am seeing "No further action required!"

@aimane-chnaif
Copy link
Contributor

job 3 failure came from this PR

@aimane-chnaif
Copy link
Contributor

"No further action required!"

@etCoderDysto I mean above is current behavior from backend, and "Waiting for admin to pay the expense" in your test case is wrong.

@aimane-chnaif
Copy link
Contributor

I am totally not sure this PR is needed as the current optimistic message ""No further action required!" matches with backend.

Also, it doesn't make sense to show "Waiting for this report to be paid" when "Approve" is last action (No "Pay" action needed)

ios.mov

@etCoderDysto
Copy link
Contributor Author

I am totally not sure this PR is needed as the current optimistic message ""No further action required!" matches with backend.

Also, it doesn't make sense to show "Waiting for this report to be paid" when "Approve" is last action (No "Pay" action needed)

ios.mov

@aimane-chnaif I am still seeing "waiting for an admin to pay expenses" message from BE. I agree that "Waiting for this report to be paid" might be confusing when approvers last action is "approve". Perhaps changing it to "waiting for an admin to pay expenses" mirroring BE value might be good.

Here is my workflow configuration
image

Screen.Recording.2025-12-03.at.12.19.04.in.the.morning.mp4

@etCoderDysto
Copy link
Contributor Author

job 3 failure came from this PR

fixed

@aimane-chnaif
Copy link
Contributor

@etCoderDysto please check this video. "Approve" is last action. No one will "Pay" this expense.

Screen.Recording.2025-12-02.at.10.31.55.pm.mov

@etCoderDysto
Copy link
Contributor Author

etCoderDysto commented Dec 2, 2025

@etCoderDysto please check this video. "Approve" is last action. No one will "Pay" this expense.

Screen.Recording.2025-12-02.at.10.31.55.pm.mov

@aimane-chnaif Got it! In that case, I think we should display a generic No further action is required message for all cases of a non-paying approver approving a request. I don't think we need this PR as you said since the original issue is fixed by this PR

@aimane-chnaif
Copy link
Contributor

@carlosmiceli what's the next step you're proposing?

@carlosmiceli
Copy link
Contributor

Could you provide a summary of the conclusion as to why this PR is no longer needed?

@aimane-chnaif
Copy link
Contributor

@etCoderDysto bump on above question

@etCoderDysto
Copy link
Contributor Author

Could you provide a summary of the conclusion as to why this PR is no longer needed?

@carlosmiceli

  1. The original issue was fixed by this PR

  2. When we disable Make or Track payments option in workflow, the backend will return No further action is required next step when a non-admin approver approvers a payment request. And the next step will be shown as "Waiting for this report to be paid" before the request settles and it will be reverted to "No further action required" by BE response. And that would be confusing for user. Link to a video of how it would look like can be found here

  3. Quoting @aimane-chnaif from here

Also, it doesn't make sense to show "Waiting for this report to be paid" when "Approve" is last action (No "Pay" action needed)

@carlosmiceli
Copy link
Contributor

Ok, cool, if it was fixed already then we can close. I'll close the issue as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants