Skip to content
Open
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
bb41cfe
fix: added hasOutstandingChildRequest logic
mananjadhav Nov 7, 2025
d1a03fd
Merge branch 'main' of github.com:mananjadhav/App into fix/mj-70565-r…
mananjadhav Nov 10, 2025
4c29f2f
Merge branch 'main' of github.com:mananjadhav/App into fix/mj-70565-r…
mananjadhav Nov 11, 2025
6c0da0b
Merge branch 'main' of github.com:mananjadhav/App into fix/mj-70565-r…
mananjadhav Nov 13, 2025
e88ef4e
Merge branch 'main' of github.com:mananjadhav/App into fix/mj-70565-r…
mananjadhav Nov 14, 2025
c39bdb8
Merge branch 'main' of github.com:mananjadhav/App into fix/mj-70565-r…
mananjadhav Nov 16, 2025
5ad077a
Merge branch 'main' of github.com:mananjadhav/App into fix/mj-70565-r…
mananjadhav Nov 17, 2025
e71dbbe
fix: add has auto rejected expense
mananjadhav Nov 18, 2025
b7a2f99
fix: rejected actions
mananjadhav Nov 18, 2025
464cdd1
style: lint fixes
mananjadhav Nov 18, 2025
248e5ee
fix: remove current user account id duplicate
mananjadhav Nov 18, 2025
2f14e1c
Merge branch 'main' of github.com:mananjadhav/App into fix/mj-70565-r…
mananjadhav Nov 24, 2025
bd5e03c
Merge branch 'main' of github.com:mananjadhav/App into fix/mj-70565-r…
mananjadhav Nov 24, 2025
3d717ec
Merge branch 'main' of github.com:mananjadhav/App into fix/mj-70565-r…
mananjadhav Nov 27, 2025
53884b1
fix: prettier fix
mananjadhav Nov 27, 2025
76fafb0
fix: added user email
mananjadhav Nov 27, 2025
16fb2b9
Merge branch 'main' of github.com:mananjadhav/App into fix/mj-70565-r…
mananjadhav Nov 30, 2025
5fbfb6b
Merge branch 'main' of github.com:mananjadhav/App into fix/mj-70565-r…
mananjadhav Nov 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions src/libs/ReportUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@
getTaxAmount,
getTaxCode,
getAmount as getTransactionAmount,
getTransactionViolationsOfTransaction,
getWaypoints,
hasMissingSmartscanFields as hasMissingSmartscanFieldsTransactionUtils,
hasNoticeTypeViolation,
Expand Down Expand Up @@ -929,7 +930,7 @@
parentReportActionParam?: OnyxInputOrEntry<ReportAction>;
personalDetails?: Partial<PersonalDetailsList>;
invoiceReceiverPolicy?: OnyxEntry<Policy>;
transactions?: SearchTransaction[];

Check failure on line 933 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

`SearchTransaction` is deprecated. - Use Transaction instead
reports?: Report[];
policies?: Policy[];
isReportArchived?: boolean;
Expand Down Expand Up @@ -961,7 +962,7 @@
const parsedReportActionMessageCache: Record<string, string> = {};

let conciergeReportID: OnyxEntry<string>;
Onyx.connect({

Check warning on line 965 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.CONCIERGE_REPORT_ID,
callback: (value) => {
conciergeReportID = value;
Expand All @@ -969,7 +970,7 @@
});

const defaultAvatarBuildingIconTestID = 'SvgDefaultAvatarBuilding Icon';
Onyx.connect({

Check warning on line 973 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.SESSION,
callback: (value) => {
// When signed out, val is undefined
Expand All @@ -987,7 +988,7 @@
let allPersonalDetails: OnyxEntry<PersonalDetailsList>;
let allPersonalDetailLogins: string[];
let currentUserPersonalDetails: OnyxEntry<PersonalDetails>;
Onyx.connect({

Check warning on line 991 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
callback: (value) => {
if (currentUserAccountID) {
Expand All @@ -999,14 +1000,14 @@
});

let allReportsDraft: OnyxCollection<Report>;
Onyx.connect({

Check warning on line 1003 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT_DRAFT,
waitForCollectionCallback: true,
callback: (value) => (allReportsDraft = value),
});

let allPolicies: OnyxCollection<Policy>;
Onyx.connect({

Check warning on line 1010 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.POLICY,
waitForCollectionCallback: true,
callback: (value) => (allPolicies = value),
Expand All @@ -1021,7 +1022,7 @@

let allReports: OnyxCollection<Report>;
let reportsByPolicyID: ReportByPolicyMap;
Onyx.connect({

Check warning on line 1025 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT,
waitForCollectionCallback: true,
callback: (value) => {
Expand Down Expand Up @@ -1059,14 +1060,14 @@
});

let allBetas: OnyxEntry<Beta[]>;
Onyx.connect({

Check warning on line 1063 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.BETAS,
callback: (value) => (allBetas = value),
});

let allTransactions: OnyxCollection<Transaction> = {};
let reportsTransactions: Record<string, Transaction[]> = {};
Onyx.connect({

Check warning on line 1070 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.TRANSACTION,
waitForCollectionCallback: true,
callback: (value) => {
Expand All @@ -1092,7 +1093,7 @@
});

let allReportActions: OnyxCollection<ReportActions>;
Onyx.connect({

Check warning on line 1096 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT_ACTIONS,
waitForCollectionCallback: true,
callback: (actions) => {
Expand All @@ -1105,7 +1106,7 @@

let allReportMetadata: OnyxCollection<ReportMetadata>;
const allReportMetadataKeyValue: Record<string, ReportMetadata> = {};
Onyx.connect({

Check warning on line 1109 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

Onyx.connect() is deprecated. Use useOnyx() hook instead and pass the data as parameters to a pure function
key: ONYXKEYS.COLLECTION.REPORT_METADATA,
waitForCollectionCallback: true,
callback: (value) => {
Expand Down Expand Up @@ -2251,7 +2252,7 @@
/**
* Whether the provided report has expenses
*/
function hasExpenses(reportID?: string, transactions?: SearchTransaction[] | Array<OnyxEntry<Transaction>>): boolean {

Check failure on line 2255 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

`SearchTransaction` is deprecated. - Use Transaction instead
if (transactions) {
return !!transactions?.find((transaction) => transaction?.reportID === reportID);
}
Expand All @@ -2261,7 +2262,7 @@
/**
* Whether the provided report is a closed expense report with no expenses
*/
function isClosedExpenseReportWithNoExpenses(report: OnyxEntry<Report>, transactions?: SearchTransaction[] | Array<OnyxEntry<Transaction>>): boolean {

Check failure on line 2265 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

`SearchTransaction` is deprecated. - Use Transaction instead
if (!report?.statusNum || report.statusNum !== CONST.REPORT.STATUS_NUM.CLOSED || !isExpenseReport(report)) {
return false;
}
Expand Down Expand Up @@ -2779,9 +2780,20 @@

const iouReport = typeof iouReportOrID !== 'string' && iouReportOrID?.reportID === iouReportID ? iouReportOrID : getReportOrDraftReport(iouReportID);
const transactions = getReportTransactions(iouReportID);
return (
canIOUBePaid(iouReport, chatReport, policy, transactions) || canApproveIOU(iouReport, policy, transactions) || canSubmitReport(iouReport, policy, transactions, undefined, false)
);
const hasAutoRejectedTransactionsForManager =
!!iouReport &&
iouReport.managerID === currentUserAccountID &&
transactions.length > 0 &&
transactions.every((transaction) => {
const transactionID = transaction?.transactionID;
if (!transactionID) {
return false;
}
const transactionViolations = getTransactionViolationsOfTransaction(transactionID);
return transactionViolations.some((violation) => violation.name === CONST.VIOLATIONS.AUTO_REPORTED_REJECTED_EXPENSE);
});
const canSubmit = !hasAutoRejectedTransactionsForManager && canSubmitReport(iouReport, policy, transactions, undefined, false);
return canIOUBePaid(iouReport, chatReport, policy, transactions) || canApproveIOU(iouReport, policy, transactions) || canSubmit;
});
}

Expand Down Expand Up @@ -4484,7 +4496,7 @@
isChatReportArchived = false,
report?: OnyxInputOrEntry<Report>,
policy?: OnyxEntry<Policy>,
linkedTransaction?: OnyxEntry<Transaction> | SearchTransaction,

Check failure on line 4499 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

`SearchTransaction` is deprecated. - Use Transaction instead
): boolean {
const isDeleted = isDeletedAction(reportAction);

Expand Down Expand Up @@ -4626,7 +4638,7 @@
isDeleteAction?: boolean,
isChatReportArchived = false,
outstandingReportsByPolicyID?: OutstandingReportsByPolicyIDDerivedValue,
linkedTransaction?: OnyxEntry<Transaction> | SearchTransaction,

Check failure on line 4641 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

`SearchTransaction` is deprecated. - Use Transaction instead
report?: OnyxInputOrEntry<Report>,
policy?: OnyxEntry<Policy>,
): boolean {
Expand Down Expand Up @@ -4924,7 +4936,7 @@
*
* NOTE: This method is only meant to be used inside this action file. Do not export and use it elsewhere. Use useOnyx instead.
*/
function getLinkedTransaction(reportAction: OnyxEntry<ReportAction | OptimisticIOUReportAction>, transactions?: SearchTransaction[]): OnyxEntry<Transaction> | SearchTransaction {

Check failure on line 4939 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

`SearchTransaction` is deprecated. - Use Transaction instead

Check failure on line 4939 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

`SearchTransaction` is deprecated. - Use Transaction instead
let transactionID: string | undefined;

if (isMoneyRequestAction(reportAction)) {
Expand Down Expand Up @@ -4979,7 +4991,7 @@
reports,
}: {
reportAction: OnyxEntry<ReportAction | OptimisticIOUReportAction>;
transactions?: SearchTransaction[];

Check failure on line 4994 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

`SearchTransaction` is deprecated. - Use Transaction instead
reports?: Report[];
}): string {
if (isReversedTransaction(reportAction)) {
Expand Down Expand Up @@ -5609,7 +5621,7 @@
personalDetails?: Partial<PersonalDetailsList>,
invoiceReceiverPolicy?: OnyxEntry<Policy>,
reportAttributes?: ReportAttributesDerivedValue['reports'],
transactions?: SearchTransaction[],

Check failure on line 5624 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

`SearchTransaction` is deprecated. - Use Transaction instead
isReportArchived?: boolean,
reports?: Report[],
policies?: Policy[],
Expand Down Expand Up @@ -8938,7 +8950,7 @@
reportID: string | undefined,
transactionViolations: OnyxCollection<TransactionViolation[]>,
shouldShowInReview?: boolean,
reportTransactions?: SearchTransaction[],

Check failure on line 8953 in src/libs/ReportUtils.ts

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

`SearchTransaction` is deprecated. - Use Transaction instead
): boolean {
const transactions = reportTransactions ?? getReportTransactions(reportID);
return transactions.some((transaction) => hasViolation(transaction, transactionViolations, shouldShowInReview));
Expand Down
24 changes: 24 additions & 0 deletions src/libs/actions/IOU.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13470,6 +13470,30 @@ function rejectMoneyRequest(transactionID: string, reportID: string, comment: st
},
});

// Update hasOutstandingChildRequest on the chat report after all optimistic updates
if (policyExpenseChat) {
const excludedReportID = rejectedToReportID ?? reportID;
const shouldHaveOutstandingChildRequest = hasOutstandingChildRequest(policyExpenseChat, excludedReportID);

if (policyExpenseChat.hasOutstandingChildRequest !== shouldHaveOutstandingChildRequest) {
optimisticData.push({
onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.REPORT}${policyExpenseChat.reportID}`,
value: {
hasOutstandingChildRequest: shouldHaveOutstandingChildRequest,
},
});

failureData.push({
onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.REPORT}${policyExpenseChat.reportID}`,
value: {
hasOutstandingChildRequest: policyExpenseChat.hasOutstandingChildRequest,
},
});
}
}

// Add successData to clear pending actions when the server confirms
successData.push({
onyxMethod: Onyx.METHOD.MERGE,
Expand Down
Loading