Skip to content

Commit 4668539

Browse files
authored
Merge pull request Expensify#65239 from nkdengineer/fix/63894
Update should show condition for some violations
2 parents fc59fcb + 35aa665 commit 4668539

2 files changed

Lines changed: 53 additions & 3 deletions

File tree

src/hooks/useTransactionViolations.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {useMemo} from 'react';
2-
import {isViolationDismissed} from '@libs/TransactionUtils';
2+
import {isViolationDismissed, shouldShowViolation} from '@libs/TransactionUtils';
33
import ONYXKEYS from '@src/ONYXKEYS';
44
import type {TransactionViolation, TransactionViolations} from '@src/types/onyx';
55
import getEmptyArray from '@src/types/utils/getEmptyArray';
@@ -12,8 +12,17 @@ function useTransactionViolations(transactionID?: string): TransactionViolations
1212
const [transactionViolations = getEmptyArray<TransactionViolation>()] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`, {
1313
canBeMissing: true,
1414
});
15+
const [iouReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID}`, {
16+
canBeMissing: true,
17+
});
18+
const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${iouReport?.policyID}`, {
19+
canBeMissing: true,
20+
});
1521

16-
return useMemo(() => transactionViolations.filter((violation) => !isViolationDismissed(transaction, violation)), [transaction, transactionViolations]);
22+
return useMemo(
23+
() => transactionViolations.filter((violation: TransactionViolation) => !isViolationDismissed(transaction, violation) && shouldShowViolation(iouReport, policy, violation.name)),
24+
[transaction, transactionViolations, iouReport, policy],
25+
);
1726
}
1827

1928
export default useTransactionViolations;

src/libs/TransactionUtils/index.ts

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
isInstantSubmitEnabled,
2727
isMultiLevelTags as isMultiLevelTagsPolicyUtils,
2828
isPolicyAdmin,
29+
isPolicyMember as isPolicyMemberPolicyUtils,
2930
} from '@libs/PolicyUtils';
3031
import {getOriginalMessage, getReportAction, isMoneyRequestAction} from '@libs/ReportActionsUtils';
3132
import {
@@ -45,7 +46,19 @@ import CONST from '@src/CONST';
4546
import type {IOUType} from '@src/CONST';
4647
import IntlStore from '@src/languages/IntlStore';
4748
import ONYXKEYS from '@src/ONYXKEYS';
48-
import type {OnyxInputOrEntry, Policy, RecentWaypoint, Report, ReviewDuplicates, TaxRate, TaxRates, Transaction, TransactionViolation, TransactionViolations} from '@src/types/onyx';
49+
import type {
50+
OnyxInputOrEntry,
51+
Policy,
52+
RecentWaypoint,
53+
Report,
54+
ReviewDuplicates,
55+
TaxRate,
56+
TaxRates,
57+
Transaction,
58+
TransactionViolation,
59+
TransactionViolations,
60+
ViolationName,
61+
} from '@src/types/onyx';
4962
import type {Attendee, Participant, SplitExpense} from '@src/types/onyx/IOU';
5063
import type {Errors, PendingAction} from '@src/types/onyx/OnyxCommon';
5164
import type {SearchPolicy, SearchReport, SearchTransaction} from '@src/types/onyx/SearchResults';
@@ -984,6 +997,33 @@ function shouldShowBrokenConnectionViolationForMultipleTransactions(
984997
return shouldShowBrokenConnectionViolationInternal(brokenConnectionViolations, report, policy);
985998
}
986999

1000+
/**
1001+
* Check if the user should see the violation
1002+
*/
1003+
function shouldShowViolation(iouReport: OnyxEntry<Report>, policy: OnyxEntry<Policy>, violationName: ViolationName): boolean {
1004+
const isSubmitter = isCurrentUserSubmitter(iouReport?.reportID);
1005+
const isPolicyMember = isPolicyMemberPolicyUtils(currentUserEmail, policy?.id);
1006+
const isReportOpen = isOpenExpenseReport(iouReport);
1007+
1008+
if (violationName === CONST.VIOLATIONS.AUTO_REPORTED_REJECTED_EXPENSE) {
1009+
return isSubmitter;
1010+
}
1011+
1012+
if (violationName === CONST.VIOLATIONS.OVER_AUTO_APPROVAL_LIMIT) {
1013+
return isPolicyAdmin(policy) && !isSubmitter;
1014+
}
1015+
1016+
if (violationName === CONST.VIOLATIONS.RTER) {
1017+
return isSubmitter || isInstantSubmitEnabled(policy);
1018+
}
1019+
1020+
if (violationName === CONST.VIOLATIONS.RECEIPT_NOT_SMART_SCANNED) {
1021+
return isPolicyMember && !isSubmitter && !isReportOpen;
1022+
}
1023+
1024+
return true;
1025+
}
1026+
9871027
/**
9881028
* Check if there is pending rter violation in all transactionViolations with given transactionIDs.
9891029
*/
@@ -1774,6 +1814,7 @@ export {
17741814
getTransactionPendingAction,
17751815
isTransactionPendingDelete,
17761816
createUnreportedExpenseSections,
1817+
shouldShowViolation,
17771818
isUnreportedAndHasInvalidDistanceRateTransaction,
17781819
};
17791820

0 commit comments

Comments
 (0)