Skip to content

Commit d6c1e09

Browse files
committed
fix: Error displayed after Approver A unapproves a final approved report Expensify#64547
1 parent f707703 commit d6c1e09

1 file changed

Lines changed: 14 additions & 1 deletion

File tree

src/libs/ReportSecondaryActionUtils.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,12 +221,25 @@ function isUnapproveAction(report: Report, policy?: Policy): boolean {
221221
const isReportApproved = isReportApprovedUtils({report});
222222
const isReportSettled = isSettled(report);
223223
const isPaymentProcessing = report.isWaitingOnBankAccount && report.statusNum === CONST.REPORT.STATUS_NUM.APPROVED;
224+
const isAdmin = policy?.role === CONST.POLICY.ROLE.ADMIN;
224225

225226
if (isReportSettled || isPaymentProcessing) {
226227
return false;
227228
}
228229

229-
return isExpenseReport && isReportApprover && isReportApproved;
230+
if (!isExpenseReport || !isReportApproved) {
231+
return false;
232+
}
233+
234+
// Only final approver or admins can unapprove approved reports
235+
if (report.statusNum === CONST.REPORT.STATUS_NUM.APPROVED) {
236+
const finalApproverAccountID = report.managerID;
237+
const isFinalApprover = finalApproverAccountID === getCurrentUserAccountID();
238+
return isFinalApprover || isAdmin;
239+
}
240+
241+
// Managers or admins can unapprove non-finally approved reports
242+
return isReportApprover;
230243
}
231244

232245
function isCancelPaymentAction(report: Report, reportTransactions: Transaction[], policy?: Policy): boolean {

0 commit comments

Comments
 (0)