Open IuliiaHerets opened 2 weeks ago
Triggered auto assignment to @twisterdotcom (Bug
), see https://stackoverflow.com/c/expensify/questions/14418 for more details. Please add this bug to a GH project, as outlined in the SO.
We think that this bug might be related to #vip-bills
@twisterdotcom FYI I haven't added the External label as I wasn't 100% sure about this issue. Please take a look and add the label if you agree it's a bug and can be handled by external contributors
Edited by proposal-police: This proposal was edited at 2024-09-02 13:47:25 UTC.
RBR doesn't disappear Instantly after paying held expense
In getPayMoneyRequestParams, we unhold transactions when we process a payment, but we don't clear transaction violation("hold"). This is why we're still seeing RBR. https://github.com/Expensify/App/blob/9aca655e04608e32ae84aeb99b8ec1e006f201e8/src/libs/actions/IOU.ts#L6725-L6734
We should also clear the transaction violation "hold" here. We can do something like this
const transactionViolations = allTransactionViolations[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transaction.transactionID}`]
optimisticData.push({
onyxMethod: Onyx.METHOD.SET,
key: `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transaction.transactionID}`,
value: transactionViolations?.filter((violation) => violation.name !== CONST.VIOLATIONS.HOLD) ?? []
})
We also need to include failure data here.
Yes, I recreated this.
https://github.com/user-attachments/assets/346c33cd-e9a0-44b8-87a4-765656829786
Job added to Upwork: https://www.upwork.com/jobs/~021831729851068678041
Triggered auto assignment to Contributor-plus team member for initial proposal review - @abdulrahuman5196 (External
)
After paying the held expense in step 6, the RBR in the preview persists. The red dot only disappears after clicking on the preview and returning to the chat.
When we pay money request, we unhold all transactions. But we don't clear the hold violation in optimistic data and after the API is complete, BE also doesn't clear the hold violation of the transaction then RBR still displays.
This bug also happens when we approve money request but it only happens in offline, after the API is complete, BE returns violation of transaction that cleared the hold violation
We should clear the hold violation when we pay/approve all requests. To prevent duplicate code, we can create a util to get the optimistic data for this case
function buildOnyxDataForUnHoldTransaction(expenseReport: OnyxEntry<OnyxTypes.Report>) {
const optimisticData: OnyxUpdate[] = [];
const failureData: OnyxUpdate[] = [];
const heldTransactions = ReportUtils.getAllHeldTransactions(expenseReport?.reportID);
heldTransactions.forEach((heldTransaction) => {
optimisticData.push({
onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.TRANSACTION}${heldTransaction.transactionID}`,
value: {
comment: {
hold: '',
},
},
});
failureData.push({
onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.TRANSACTION}${heldTransaction.transactionID}`,
value: {
comment: {
hold: heldTransaction.comment?.hold,
},
},
});
const transactionViolations = allTransactionViolations[`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${heldTransaction.transactionID}`] ?? []
optimisticData.push({
onyxMethod: Onyx.METHOD.SET,
key: `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${heldTransaction.transactionID}`,
value: transactionViolations.filter((violation) => violation.name !== CONST.VIOLATIONS.HOLD)
});
failureData.push({
onyxMethod: Onyx.METHOD.SET,
key: `${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${heldTransaction.transactionID}`,
value: transactionViolations,
});
});
return {optimisticData, failureData};
}
Then we can use this in both places here
if (full) {
const unholdTransactionOnyxData = buildOnyxDataForUnHoldTransaction(iouReport);
optimisticData.push(...unholdTransactionOnyxData.optimisticData);
failureData.push(...unholdTransactionOnyxData.failureData);
}
if (full && hasHeldExpenses) {
const unholdTransactionOnyxData = buildOnyxDataForUnHoldTransaction(expenseReport);
optimisticData.push(...unholdTransactionOnyxData.optimisticData);
failureData.push(...unholdTransactionOnyxData.failureData);
}
OPTIONAL: BE should also clear the hold violation when returning the data in PayMoneyRequest
API
@twisterdotcom, @abdulrahuman5196 Huh... This is 4 days overdue. Who can take care of this?
@abdulrahuman5196 how are we doing on the reviews here?
📣 It's been a week! Do we have any satisfactory proposals yet? Do we need to adjust the bounty for this issue? 💸
Hi @twisterdotcom, I am having multiple items on my plate. Kindly assign it to a different C+. Unassigning myself.
Triggered auto assignment to Contributor-plus team member for initial proposal review - @ikevin127 (External
)
@twisterdotcom @ikevin127 this issue was created 2 weeks ago. Are we close to approving a proposal? If not, what's blocking us from getting this issue assigned? Don't hesitate to create a thread in #expensify-open-source to align faster in real time. Thanks!
If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!
Version Number: 9.0.27-0 Reproducible in staging?: Y Reproducible in production?: Y Email or phone of affected tester (no customers): biruknew45+518@gmail.com Issue reported by: Applause Internal Team
Action Performed:
Expected Result:
After paying the held expense in step 6, the RBR in the preview should disappear instantly.
Actual Result:
After paying the held expense in step 6, the RBR in the preview persists. The red dot only disappears after clicking on the preview and returning to the chat.
Workaround:
Unknown
Platforms:
Screenshots/Videos
https://github.com/user-attachments/assets/00f5ba3a-6044-4ed1-af7b-bfb4f30bbb2d
View all open jobs on GitHub
Upwork Automation - Do Not Edit
Issue Owner
Current Issue Owner: @ikevin127