-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Feat/44315 toggle card continuous reconciliation be integration #47406
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
35bb4e3
a152ce8
69b3d6d
7f28038
d44a90d
6196c61
cff4a2a
8ae3f7f
007b76e
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 |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| type ToggleCardContinuousReconciliationParams = { | ||
| workspaceAccountID: number; | ||
| shouldUseContinuousReconciliation: boolean; | ||
| expensifyCardContinuousReconciliationConnection?: string; | ||
| }; | ||
|
|
||
| export default ToggleCardContinuousReconciliationParams; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| import type {ValueOf} from 'type-fest'; | ||
| import CONST from '@src/CONST'; | ||
| import type {ConnectionName} from '@src/types/onyx/Policy'; | ||
|
|
||
| const ROUTE_NAME_MAPPING = { | ||
| [CONST.POLICY.CONNECTIONS.ROUTE.QBO]: CONST.POLICY.CONNECTIONS.NAME.QBO, | ||
| [CONST.POLICY.CONNECTIONS.ROUTE.XERO]: CONST.POLICY.CONNECTIONS.NAME.XERO, | ||
| [CONST.POLICY.CONNECTIONS.ROUTE.SAGE_INTACCT]: CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT, | ||
| [CONST.POLICY.CONNECTIONS.ROUTE.NETSUITE]: CONST.POLICY.CONNECTIONS.NAME.NETSUITE, | ||
| }; | ||
|
|
||
| const NAME_ROUTE_MAPPING = { | ||
| [CONST.POLICY.CONNECTIONS.NAME.QBO]: CONST.POLICY.CONNECTIONS.ROUTE.QBO, | ||
| [CONST.POLICY.CONNECTIONS.NAME.XERO]: CONST.POLICY.CONNECTIONS.ROUTE.XERO, | ||
| [CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT]: CONST.POLICY.CONNECTIONS.ROUTE.SAGE_INTACCT, | ||
| [CONST.POLICY.CONNECTIONS.NAME.NETSUITE]: CONST.POLICY.CONNECTIONS.ROUTE.NETSUITE, | ||
| }; | ||
|
|
||
| function getConnectionNameFromRouteParam(routeParam: ValueOf<typeof CONST.POLICY.CONNECTIONS.ROUTE>) { | ||
| return ROUTE_NAME_MAPPING[routeParam]; | ||
| } | ||
|
|
||
| function getRouteParamForConnection(connectionName: ConnectionName) { | ||
| return NAME_ROUTE_MAPPING[connectionName]; | ||
| } | ||
|
|
||
| export {getConnectionNameFromRouteParam, getRouteParamForConnection}; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -9,55 +9,60 @@ import Text from '@components/Text'; | |
| import TextLink from '@components/TextLink'; | ||
| import useLocalize from '@hooks/useLocalize'; | ||
| import useThemeStyles from '@hooks/useThemeStyles'; | ||
| import * as AccountingUtils from '@libs/AccountingUtils'; | ||
| import Navigation from '@navigation/Navigation'; | ||
| import type {SettingsNavigatorParamList} from '@navigation/types'; | ||
| import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; | ||
| import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; | ||
| import withPolicyConnections from '@pages/workspace/withPolicyConnections'; | ||
| import ToggleSettingOptionRow from '@pages/workspace/workflows/ToggleSettingsOptionRow'; | ||
| import * as Card from '@userActions/Card'; | ||
| import CONST from '@src/CONST'; | ||
| import ONYXKEYS from '@src/ONYXKEYS'; | ||
| import ROUTES from '@src/ROUTES'; | ||
| import type SCREENS from '@src/SCREENS'; | ||
| import type {ConnectionName} from '@src/types/onyx/Policy'; | ||
|
|
||
| type CardReconciliationPageProps = WithPolicyConnectionsProps & StackScreenProps<SettingsNavigatorParamList, typeof SCREENS.WORKSPACE.ACCOUNTING.CARD_RECONCILIATION>; | ||
|
|
||
| function CardReconciliationPage({policy, route}: CardReconciliationPageProps) { | ||
| const styles = useThemeStyles(); | ||
| const {translate} = useLocalize(); | ||
|
|
||
| const [reconciliationConnection] = useOnyx(`${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_CONTINUOUS_RECONCILIATION_CONNECTION}${policy?.workspaceAccountID}`); | ||
| const [isContinuousReconciliationOn] = useOnyx(`${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION}${policy?.workspaceAccountID}`); | ||
| const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${policy?.workspaceAccountID}`); | ||
| const workspaceAccountID = policy?.workspaceAccountID ?? -1; | ||
|
|
||
| const [isContinuousReconciliationOn] = useOnyx(`${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION}${workspaceAccountID}`); | ||
| const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${workspaceAccountID}`); | ||
| const [currentConnectionName] = useOnyx(`${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_CONTINUOUS_RECONCILIATION_CONNECTION}${workspaceAccountID}`); | ||
| const [bankAccountList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST); | ||
|
|
||
| const paymentBankAccountID = cardSettings?.paymentBankAccountID ?? 0; | ||
| const bankAccountTitle = bankAccountList?.[paymentBankAccountID]?.title ?? ''; | ||
|
|
||
| const policyID = policy?.id ?? '-1'; | ||
| const {connection} = route.params; | ||
| const autoSync = !!policy?.connections?.[connection]?.config?.autoSync?.enabled; | ||
| const connectionName = AccountingUtils.getConnectionNameFromRouteParam(connection) as ConnectionName; | ||
| const autoSync = !!policy?.connections?.[connectionName]?.config?.autoSync?.enabled; | ||
|
|
||
| // eslint-disable-next-line rulesdir/prefer-early-return | ||
| const toggleContinuousReconciliation = () => { | ||
| if (!isContinuousReconciliationOn) { | ||
| const toggleContinuousReconciliation = (value: boolean) => { | ||
| Card.toggleContinuousReconciliation(workspaceAccountID, value, connectionName, currentConnectionName); | ||
| if (value) { | ||
| Navigation.navigate(ROUTES.WORKSPACE_ACCOUNTING_RECONCILIATION_ACCOUNT_SETTINGS.getRoute(policyID, connection)); | ||
| } | ||
| // TODO: add API call when it's supported https://github.com/Expensify/Expensify/issues/407834 | ||
| }; | ||
|
|
||
| const navigateToAdvancedSettings = useCallback(() => { | ||
| switch (connection) { | ||
| case CONST.POLICY.CONNECTIONS.NAME.QBO: | ||
| case CONST.POLICY.CONNECTIONS.ROUTE.QBO: | ||
| Navigation.navigate(ROUTES.WORKSPACE_ACCOUNTING_QUICKBOOKS_ONLINE_ADVANCED.getRoute(policyID)); | ||
| break; | ||
| case CONST.POLICY.CONNECTIONS.NAME.XERO: | ||
| case CONST.POLICY.CONNECTIONS.ROUTE.XERO: | ||
| Navigation.navigate(ROUTES.POLICY_ACCOUNTING_XERO_ADVANCED.getRoute(policyID)); | ||
| break; | ||
| case CONST.POLICY.CONNECTIONS.NAME.NETSUITE: | ||
| case CONST.POLICY.CONNECTIONS.ROUTE.NETSUITE: | ||
| Navigation.navigate(ROUTES.POLICY_ACCOUNTING_NETSUITE_ADVANCED.getRoute(policyID)); | ||
| break; | ||
| case CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT: | ||
| case CONST.POLICY.CONNECTIONS.ROUTE.SAGE_INTACCT: | ||
| Navigation.navigate(ROUTES.POLICY_ACCOUNTING_SAGE_INTACCT_ADVANCED.getRoute(policyID)); | ||
| break; | ||
| default: | ||
|
|
@@ -98,10 +103,10 @@ function CardReconciliationPage({policy, route}: CardReconciliationPageProps) { | |
| > | ||
| {translate('workspace.accounting.autoSync').toLowerCase()} | ||
| </TextLink>{' '} | ||
| {translate('common.conjunctionFor')} {CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[connection]} | ||
| {translate('common.conjunctionFor')} {CONST.POLICY.CONNECTIONS.NAME_USER_FRIENDLY[connectionName]} | ||
| </Text> | ||
| )} | ||
| {!!reconciliationConnection && ( | ||
| {!!paymentBankAccountID && isContinuousReconciliationOn && ( | ||
| <MenuItemWithTopDescription | ||
|
Contributor
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. Coming from #77340, reconciliation account is not greyed when enable Card reconciliation offline => We should wrap this menu item under a
Contributor
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. not 100% sure, but we didn't want to add offline support during the time of that PR, @DylanDylann correct me if i am wrong here
Contributor
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.
do you mean it was planned to implement in another PR or we won't support it? |
||
| style={styles.mt5} | ||
| title={bankAccountTitle} | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.