-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Approval button is missing after payment of the report with hold expense #51503
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7035,9 +7035,19 @@ function canApproveIOU(iouReport: OnyxTypes.OnyxInputOrEntry<OnyxTypes.Report>, | |
const iouSettled = ReportUtils.isSettled(iouReport?.reportID); | ||
const reportNameValuePairs = ReportUtils.getReportNameValuePairs(iouReport?.reportID); | ||
const isArchivedReport = ReportUtils.isArchivedRoom(iouReport, reportNameValuePairs); | ||
const unheldTotalIsZero = iouReport && iouReport.unheldTotal === 0; | ||
let isTransactionBeingScanned = false; | ||
const reportTransactions = TransactionUtils.getAllReportTransactions(iouReport?.reportID); | ||
for (const transaction of reportTransactions) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah there's a problem here, this still will allow approvals of 0-value scans (e.g. if you upload a junk receipt where the amount can't be read). desktop-chrome-0-value-2024-10-28_10.28.09.mp4There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @jjcoffee That's true and expected given my solution. As stated in the other issue which implemented the
None of the issues state that we shouldn't allow To confirm this I asked the C+ / CME in the other issue #48590 (comment) but didn't get a response so I assumed that the above expected result is the way to go. Why should we allow If you have more context that I'm missing here which confirms that we shouldn't show the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
@ikevin127 I can't think of any reason why you'd want to approve an expense with a 0 amount. There's nothing explicitly wrong with it but it just feels a bit messy that it's even possible, I think! I'm also assuming we don't want to allow this both from the title of #48590 as well as the PR's test step:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @jjcoffee The problem and pitfall in that PRs logic is that That's why the Say we implement this logic: let isAmountMissing = false;
let isTransactionBeingScanned = false;
const reportTransactions = TransactionUtils.getAllReportTransactions(iouReport?.reportID);
for (const transaction of reportTransactions) {
const hasReceipt = TransactionUtils.hasReceipt(transaction);
const isReceiptBeingScanned = TransactionUtils.isReceiptBeingScanned(transaction);
// If transaction has receipt (scan) and its receipt is being scanned, we shouldn't be able to Approve
if (hasReceipt && isReceiptBeingScanned) {
isTransactionBeingScanned = true;
}
// Change isAmountMissing to true only if transaction amount is 0 (eg. failed scan)
if (TransactionUtils.isAmountMissing(transaction)) {
isAmountMissing = true;
}
}
return isCurrentUserManager && !isOpenExpenseReport && !isApproved && !iouSettled && !isArchivedReport && !isTransactionBeingScanned && !isAmountMissing; And we have a report with 2 transactions, 1 is manual and has amount and 1 is a failed scan (amount 0), with the logic above we won't see the ![]() Whereas with the current logic of this PR, say the manual transaction is on hold and we also have 1 failed scan transaction (amount 0), we will see the ![]() To change this logic to your expectations would require rethinking how Please let me know what do you think we should do with this! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for your thoughts @ikevin127!
Agree that we wouldn't want this, in this case and if the manual transaction is held I guess we'd ideally want to hide the @marcochavezf Bringing you in here to chime in on whether we're okay to keep showing the The main issue is that if you have another expense that's held, after tapping the Just to note that the issue that introduced the regression had this as a test step:
So wanted to be sure we can go ahead despite that. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for bringing this up, guys! I agree that approving a report with an amount of 0 after scanning is not a good UX. Also, understandably it can be considered out-of-scope because it's an edge case we couldn't foresee. Given that we'd need to wait until this PR is deployed to staging/production to report it as a bug, what would be the solution to fix it here? We can adjust the price of the original issue by justifying the out-of-scope edge case. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @marcochavezf I appreciate the input 🙏
Given all this, here are the 2 roads I'm willing to move forward with right now regarding this PR:
Reasoning There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
@marcochavezf Given that it's a bit of an edge case, and it was also previously possible (to approve a $0 amount), I think we can just proceed with this PR and report the bug after. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Got it, thanks for the additional context @ikevin127! Yeah, if approving a report with an amount of 0 after scanning was already allowed then it makes sense to report it as a bug and continue with this PR as-is There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Cool, thank you both for the productive back-n-forth 🙏 |
||
const hasReceipt = TransactionUtils.hasReceipt(transaction); | ||
const isReceiptBeingScanned = TransactionUtils.isReceiptBeingScanned(transaction); | ||
|
||
// If transaction has receipt (scan) and its receipt is being scanned, we shouldn't be able to Approve | ||
if (hasReceipt && isReceiptBeingScanned) { | ||
isTransactionBeingScanned = true; | ||
} | ||
} | ||
|
||
return isCurrentUserManager && !isOpenExpenseReport && !isApproved && !iouSettled && !isArchivedReport && !unheldTotalIsZero; | ||
return isCurrentUserManager && !isOpenExpenseReport && !isApproved && !iouSettled && !isArchivedReport && !isTransactionBeingScanned; | ||
} | ||
|
||
function canIOUBePaid( | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NAB but while adding transactions to this function, we had to additionally consider any changes in the local
transactions
object within the component that called this function. We did this in #60030