@zeniai/client-epic-state 4.19.79 → 4.19.81-beta0ND
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/entity/account/accountPayload.d.ts +2 -0
- package/lib/entity/account/accountPayload.js +2 -0
- package/lib/entity/account/accountState.d.ts +2 -0
- package/lib/entity/company/companyPayload.d.ts +13 -0
- package/lib/entity/company/companyPayload.js +21 -0
- package/lib/entity/company/companyStateTypes.d.ts +13 -0
- package/lib/esm/entity/account/accountPayload.js +2 -0
- package/lib/esm/entity/chargeCardTransaction/chargeCardTransactionPayload.js +2 -2
- package/lib/esm/entity/company/companyPayload.js +21 -0
- package/lib/esm/index.js +9 -7
- package/lib/esm/view/companyView/epic/companyPassport/updateCompanyDetailsEpic.js +6 -0
- package/lib/esm/view/companyView/types/companyPassport/companyPassportLocalData.js +13 -0
- package/lib/esm/view/companyView/types/companyPassportViewPayload.js +55 -12
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/triggerReviewTabRefetchEpic.js +2 -3
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/uploadTransactionReceiptSuccessEpic.js +22 -0
- package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -2
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +20 -1
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +2 -1
- package/lib/esm/view/onboardingView/customerView/onboardingCustomerViewSelector.js +22 -4
- package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryDownloadSelector.js +2 -2
- package/lib/esm/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistorySelector.js +2 -2
- package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailSelector.js +4 -1
- package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/fetchChargeCardRepaymentDetailEpic.js +2 -1
- package/lib/esm/view/spendManagement/chargeCards/chargeCardRepaymentDetail/initiateChargeCardRepaymentEpic.js +1 -1
- package/lib/esm/view/spendManagement/commonSetup/epic/setup/updateBusinessVerificationDetailsEpic.js +67 -1
- package/lib/esm/view/spendManagement/commonSetup/epic/setup/updateSetupViewLocalStoreDataEpic.js +16 -2
- package/lib/esm/view/spendManagement/commonSetup/setupViewSelector.js +15 -1
- package/lib/esm/view/spendManagement/commonSetup/types/businessVerification.js +148 -1
- package/lib/index.d.ts +10 -7
- package/lib/index.js +54 -44
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/companyView/epic/companyPassport/updateCompanyDetailsEpic.js +6 -0
- package/lib/view/companyView/types/companyPassport/companyDetailsLocalData.d.ts +13 -0
- package/lib/view/companyView/types/companyPassport/companyPassportLocalData.js +13 -0
- package/lib/view/companyView/types/companyPassportViewPayload.d.ts +1 -1
- package/lib/view/companyView/types/companyPassportViewPayload.js +55 -12
- package/lib/view/expenseAutomationView/epics/transactionCategorization/triggerReviewTabRefetchEpic.js +2 -3
- package/lib/view/expenseAutomationView/epics/transactionCategorization/uploadTransactionReceiptSuccessEpic.d.ts +7 -0
- package/lib/view/expenseAutomationView/epics/transactionCategorization/uploadTransactionReceiptSuccessEpic.js +26 -0
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -2
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +11 -3
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +21 -2
- package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +1 -0
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +2 -1
- package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +1 -0
- package/lib/view/onboardingView/customerView/onboardingCustomerViewSelector.d.ts +1 -0
- package/lib/view/onboardingView/customerView/onboardingCustomerViewSelector.js +22 -3
- package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryDownloadSelector.js +2 -2
- package/lib/view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistorySelector.js +2 -2
- package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailSelector.js +4 -1
- package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/fetchChargeCardRepaymentDetailEpic.js +2 -1
- package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/initiateChargeCardRepaymentEpic.d.ts +1 -1
- package/lib/view/spendManagement/chargeCards/chargeCardRepaymentDetail/initiateChargeCardRepaymentEpic.js +1 -1
- package/lib/view/spendManagement/commonSetup/epic/setup/updateBusinessVerificationDetailsEpic.js +67 -1
- package/lib/view/spendManagement/commonSetup/epic/setup/updateSetupViewLocalStoreDataEpic.js +16 -2
- package/lib/view/spendManagement/commonSetup/setupViewSelector.d.ts +14 -0
- package/lib/view/spendManagement/commonSetup/setupViewSelector.js +15 -1
- package/lib/view/spendManagement/commonSetup/setupViewState.d.ts +14 -0
- package/lib/view/spendManagement/commonSetup/types/businessVerification.d.ts +43 -0
- package/lib/view/spendManagement/commonSetup/types/businessVerification.js +150 -0
- package/package.json +1 -1
|
@@ -16,6 +16,8 @@ export interface AccountBasePayload {
|
|
|
16
16
|
is_deleted?: boolean | null;
|
|
17
17
|
last_4_digits?: string | null;
|
|
18
18
|
logo?: URLPayload;
|
|
19
|
+
payment_account_id?: string | null;
|
|
20
|
+
payment_account_name?: string | null;
|
|
19
21
|
qbo_id?: string;
|
|
20
22
|
reconciliation_source?: string | null;
|
|
21
23
|
tax_1099_config?: Tax1099ConfigPayload | null;
|
|
@@ -13,6 +13,8 @@ const mapAccountBasePayloadToAccountBase = (payload) => ({
|
|
|
13
13
|
accountDescription: payload.account_description ?? '',
|
|
14
14
|
last4Digits: payload.last_4_digits ?? undefined,
|
|
15
15
|
logo: payload.logo == null ? undefined : (0, urlPayload_1.toURL)(payload.logo),
|
|
16
|
+
paymentAccountId: payload.payment_account_id ?? undefined,
|
|
17
|
+
paymentAccountName: payload.payment_account_name ?? undefined,
|
|
16
18
|
qboId: payload.qbo_id ?? undefined,
|
|
17
19
|
coaId: payload.coa_id ?? undefined,
|
|
18
20
|
labels: toAccountLabelArray(payload.labels ?? []),
|
|
@@ -43,6 +43,8 @@ export interface AccountBase {
|
|
|
43
43
|
isPreFilled?: boolean;
|
|
44
44
|
last4Digits?: string;
|
|
45
45
|
logo?: ZeniUrl;
|
|
46
|
+
paymentAccountId?: string;
|
|
47
|
+
paymentAccountName?: string;
|
|
46
48
|
qboId?: ID;
|
|
47
49
|
reconciliationSource?: ReconciliationAccountSourceType;
|
|
48
50
|
tax1099Config?: Tax1099Config;
|
|
@@ -18,6 +18,17 @@ export interface CompanyInfoPayload {
|
|
|
18
18
|
primary_email_domain: string;
|
|
19
19
|
source_of_funds: string | null;
|
|
20
20
|
update_time: string;
|
|
21
|
+
company_countries_of_operations?: string[] | null;
|
|
22
|
+
company_purpose_of_account?: string | null;
|
|
23
|
+
company_purpose_of_account_desc?: string | null;
|
|
24
|
+
company_regulated_states?: boolean | null;
|
|
25
|
+
company_regulated_states_desc?: string | null;
|
|
26
|
+
company_source_of_funds?: string | null;
|
|
27
|
+
company_source_of_funds_desc?: string | null;
|
|
28
|
+
company_transaction_vol_expectations?: string | null;
|
|
29
|
+
company_transaction_vol_expectations_desc?: string | null;
|
|
30
|
+
company_us_nexus?: boolean | null;
|
|
31
|
+
company_us_nexus_desc?: string[] | null;
|
|
21
32
|
first_month_of_fiscal_year?: string | undefined;
|
|
22
33
|
sync_token?: string | null;
|
|
23
34
|
}
|
|
@@ -36,6 +47,8 @@ export interface CompanyIncInfoPayload {
|
|
|
36
47
|
company_inc_state: string | null;
|
|
37
48
|
company_inc_state_code: string | null;
|
|
38
49
|
company_inc_type: string | null;
|
|
50
|
+
company_industry_sub_type?: string | null;
|
|
51
|
+
company_industry_type?: string | null;
|
|
39
52
|
file_ids?: ID[] | null;
|
|
40
53
|
}
|
|
41
54
|
export interface CompanyTaxInfoPayload {
|
|
@@ -36,6 +36,25 @@ const toCompanyInfo = (payload, companyIdTenantIdMapping, companyInStore) => {
|
|
|
36
36
|
phone: payload.phone ?? undefined,
|
|
37
37
|
firstMonthOfFY: (0, timePeriod_1.getMonthFromMonthName)(payload.first_month_of_fiscal_year) ?? 1,
|
|
38
38
|
sourceOfFunds: payload.source_of_funds ?? undefined,
|
|
39
|
+
companySourceOfFunds: payload.company_source_of_funds ?? undefined,
|
|
40
|
+
companySourceOfFundsDescription: payload.company_source_of_funds_desc ?? undefined,
|
|
41
|
+
countriesOfOperations: payload.company_countries_of_operations ?? undefined,
|
|
42
|
+
transactionVolume: payload.company_transaction_vol_expectations ?? undefined,
|
|
43
|
+
transactionVolumeDescription: payload.company_transaction_vol_expectations_desc ?? undefined,
|
|
44
|
+
purposeOfAccount: payload.company_purpose_of_account ?? undefined,
|
|
45
|
+
purposeOfAccountDescription: payload.company_purpose_of_account_desc ?? undefined,
|
|
46
|
+
regulatedStatus: payload.company_regulated_states == null
|
|
47
|
+
? undefined
|
|
48
|
+
: payload.company_regulated_states
|
|
49
|
+
? 'yes'
|
|
50
|
+
: 'no',
|
|
51
|
+
regulatedStatusDescription: payload.company_regulated_states_desc ?? undefined,
|
|
52
|
+
usNexus: payload.company_us_nexus == null
|
|
53
|
+
? undefined
|
|
54
|
+
: payload.company_us_nexus
|
|
55
|
+
? 'yes'
|
|
56
|
+
: 'no',
|
|
57
|
+
usNexusTypes: payload.company_us_nexus_desc ?? undefined,
|
|
39
58
|
};
|
|
40
59
|
};
|
|
41
60
|
const toCompanyLocaleInfo = (payload) => ({
|
|
@@ -56,6 +75,8 @@ const toCompanyIncInfo = (payload) => ({
|
|
|
56
75
|
companyIncStateCode: payload.company_inc_state_code ?? undefined,
|
|
57
76
|
companyIncCountryCode: payload.company_inc_country_code ?? undefined,
|
|
58
77
|
fileIds: payload.file_ids ?? [],
|
|
78
|
+
companySubIndustry: payload.company_industry_sub_type ?? undefined,
|
|
79
|
+
companyIndustryType: payload.company_industry_type ?? undefined,
|
|
59
80
|
});
|
|
60
81
|
const toCompanyTaxInfo = (payload) => ({
|
|
61
82
|
taxesFiledDate: payload.taxes_filed_date != null
|
|
@@ -27,12 +27,23 @@ export interface CompanyInfo {
|
|
|
27
27
|
bookCloseDate?: ZeniDate;
|
|
28
28
|
companyDescription?: string;
|
|
29
29
|
companyLegalName?: string;
|
|
30
|
+
companySourceOfFunds?: string;
|
|
31
|
+
companySourceOfFundsDescription?: string;
|
|
30
32
|
companyUrl?: ZeniUrl;
|
|
33
|
+
countriesOfOperations?: string[];
|
|
31
34
|
meetingUrl?: ZeniUrl;
|
|
32
35
|
phone?: string;
|
|
36
|
+
purposeOfAccount?: string;
|
|
37
|
+
purposeOfAccountDescription?: string;
|
|
38
|
+
regulatedStatus?: string;
|
|
39
|
+
regulatedStatusDescription?: string;
|
|
33
40
|
sourceOfFunds?: string;
|
|
34
41
|
syncToken?: string;
|
|
35
42
|
tenantId?: ID;
|
|
43
|
+
transactionVolume?: string;
|
|
44
|
+
transactionVolumeDescription?: string;
|
|
45
|
+
usNexus?: string;
|
|
46
|
+
usNexusTypes?: string[];
|
|
36
47
|
}
|
|
37
48
|
export interface CompanyLocaleInfo {
|
|
38
49
|
companyIncCountryCode: string;
|
|
@@ -50,6 +61,8 @@ export interface CompanyIncInfo {
|
|
|
50
61
|
companyIncState?: string;
|
|
51
62
|
companyIncStateCode?: string;
|
|
52
63
|
companyIncType?: string;
|
|
64
|
+
companyIndustryType?: string;
|
|
65
|
+
companySubIndustry?: string;
|
|
53
66
|
}
|
|
54
67
|
export interface CompanyTaxInfo {
|
|
55
68
|
taxesFiledYears: number[];
|
|
@@ -10,6 +10,8 @@ export const mapAccountBasePayloadToAccountBase = (payload) => ({
|
|
|
10
10
|
accountDescription: payload.account_description ?? '',
|
|
11
11
|
last4Digits: payload.last_4_digits ?? undefined,
|
|
12
12
|
logo: payload.logo == null ? undefined : toURL(payload.logo),
|
|
13
|
+
paymentAccountId: payload.payment_account_id ?? undefined,
|
|
14
|
+
paymentAccountName: payload.payment_account_name ?? undefined,
|
|
13
15
|
qboId: payload.qbo_id ?? undefined,
|
|
14
16
|
coaId: payload.coa_id ?? undefined,
|
|
15
17
|
labels: toAccountLabelArray(payload.labels ?? []),
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { toURL } from '../../commonPayloadTypes/urlPayload';
|
|
2
2
|
import { toAmount } from '../../commonStateTypes/amount';
|
|
3
|
-
import {
|
|
3
|
+
import { dateLocal, dateNow } from '../../zeniDayJS';
|
|
4
4
|
import { toZeniUrl } from '../../zeniUrl';
|
|
5
|
-
import { toContentType
|
|
5
|
+
import { toContentType } from '../transaction/stateTypes/attachment';
|
|
6
6
|
import { toTransactionCategory } from '../transaction/stateTypes/transactionType';
|
|
7
7
|
import { toCardTransactionStatusCode, toCardTransactionTypeCode, } from './chargeCardTransaction';
|
|
8
8
|
const EXTENSION_TO_CONTENT_TYPE = {
|
|
@@ -33,6 +33,25 @@ const toCompanyInfo = (payload, companyIdTenantIdMapping, companyInStore) => {
|
|
|
33
33
|
phone: payload.phone ?? undefined,
|
|
34
34
|
firstMonthOfFY: getMonthFromMonthName(payload.first_month_of_fiscal_year) ?? 1,
|
|
35
35
|
sourceOfFunds: payload.source_of_funds ?? undefined,
|
|
36
|
+
companySourceOfFunds: payload.company_source_of_funds ?? undefined,
|
|
37
|
+
companySourceOfFundsDescription: payload.company_source_of_funds_desc ?? undefined,
|
|
38
|
+
countriesOfOperations: payload.company_countries_of_operations ?? undefined,
|
|
39
|
+
transactionVolume: payload.company_transaction_vol_expectations ?? undefined,
|
|
40
|
+
transactionVolumeDescription: payload.company_transaction_vol_expectations_desc ?? undefined,
|
|
41
|
+
purposeOfAccount: payload.company_purpose_of_account ?? undefined,
|
|
42
|
+
purposeOfAccountDescription: payload.company_purpose_of_account_desc ?? undefined,
|
|
43
|
+
regulatedStatus: payload.company_regulated_states == null
|
|
44
|
+
? undefined
|
|
45
|
+
: payload.company_regulated_states
|
|
46
|
+
? 'yes'
|
|
47
|
+
: 'no',
|
|
48
|
+
regulatedStatusDescription: payload.company_regulated_states_desc ?? undefined,
|
|
49
|
+
usNexus: payload.company_us_nexus == null
|
|
50
|
+
? undefined
|
|
51
|
+
: payload.company_us_nexus
|
|
52
|
+
? 'yes'
|
|
53
|
+
: 'no',
|
|
54
|
+
usNexusTypes: payload.company_us_nexus_desc ?? undefined,
|
|
36
55
|
};
|
|
37
56
|
};
|
|
38
57
|
const toCompanyLocaleInfo = (payload) => ({
|
|
@@ -53,6 +72,8 @@ const toCompanyIncInfo = (payload) => ({
|
|
|
53
72
|
companyIncStateCode: payload.company_inc_state_code ?? undefined,
|
|
54
73
|
companyIncCountryCode: payload.company_inc_country_code ?? undefined,
|
|
55
74
|
fileIds: payload.file_ids ?? [],
|
|
75
|
+
companySubIndustry: payload.company_industry_sub_type ?? undefined,
|
|
76
|
+
companyIndustryType: payload.company_industry_type ?? undefined,
|
|
56
77
|
});
|
|
57
78
|
const toCompanyTaxInfo = (payload) => ({
|
|
58
79
|
taxesFiledDate: payload.taxes_filed_date != null
|
package/lib/esm/index.js
CHANGED
|
@@ -165,7 +165,7 @@ import { clearExpenseAutomationFluxAnalysisView, fetchFluxAnalysisView, reviewFl
|
|
|
165
165
|
import { clearJeScheduleLocalData as clearExpenseAutomationJEScheduleLocalData, clearExpenseAutomationJESchedulesView, fetchJeSchedulesPage as fetchExpenseAutomationJESchedulesPage, ignoreRecommendedJeSchedule as ignoreExpenseAutomationJESchedule, initializeAccountSettingsView as initializeJeAccountSettingsView, initializeJeScheduleLocalData, removeJeScheduleTransactionKey, retryJeSchedule as retryExpenseAutomationJESchedule, saveAccountSettings as saveJeAccountSettings, saveAccountSettingsLocalData as saveJeAccountSettingsLocalData, updateJeScheduleLocalDataById, updateJeScheduleTransactionKeys, } from './view/expenseAutomationView/reducers/jeSchedulesViewReducer';
|
|
166
166
|
import { fetchMissingReceipts as fetchExpenseAutomationMissingReceipts, markMissingReceiptAsDone as markExpenseAutomationMissingReceiptAsDone, updateMissingReceiptUploadState as updateExpenseAutomationMissingReceiptUploadState, updateMissingReceiptsUIState as updateExpenseAutomationMissingReceiptsUIState, uploadMissingReceiptSuccess as uploadExpenseAutomationMissingReceiptSuccess, } from './view/expenseAutomationView/reducers/missingReceiptsViewReducer';
|
|
167
167
|
import { deleteAccountStatement, fetchReconciliation as fetchReconciliationView, saveReconciliationDetail as saveExpenseAutomationReconciliationDetail, saveReconciliationReview as saveExpenseAutomationReconciliationReview, setConnectionInProgressForAccount as setConnectionInProgressForAccountReconciliation, setStatementParseInProgress, updateAccountReconciliationLocalData as updateExpenseAutomationAccountReconciliationLocalData, updateSelectedAccountId as updateExpenseAutomationAccountReconciliationSelectedAccountId, updateSelectedTab as updateExpenseAutomationAccountReconciliationSelectedTab, updateReconListScrollPosition as updateExpenseAutomationReconListScrollPosition, updateReviewTabSortState as updateExpenseAutomationReconReviewTabListSortState, updateReviewTabLocalData as updateExpenseAutomationReconReviewTabLocalData, updateReconcileTabListScrollState as updateExpenseAutomationReconcileTabListScrollState, updateReconcileTabListSortState as updateExpenseAutomationReconcileTabListSortState, updateReconcileTabLocalData as updateExpenseAutomationReconcileTabLocalData, updateSelectedDrawerAccountId as updateExpenseAutomationSelectedDrawerAccountId, updateStatementUploadChosen, uploadAccountStatement, } from './view/expenseAutomationView/reducers/reconciliationViewReducer';
|
|
168
|
-
import { backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, syncTransactionCategorizationFromDetailSave, updateCurrentSelectedTransactionCategorizationTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState, } from './view/expenseAutomationView/reducers/transactionsViewReducer';
|
|
168
|
+
import { backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, syncTransactionCategorizationFromDetailSave, updateCurrentSelectedTransactionCategorizationTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } from './view/expenseAutomationView/reducers/transactionsViewReducer';
|
|
169
169
|
import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationView/selectors/fluxAnalysisViewSelector';
|
|
170
170
|
import { getExpenseAutomationReconciliationView, isAccountReconReport, } from './view/expenseAutomationView/selectors/reconciliationViewSelector';
|
|
171
171
|
import { getExpenseAutomationTransactionView } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
|
|
@@ -285,13 +285,13 @@ import { getChargeCardCVVActivateView, getChargeCardControlDetailView, getCharge
|
|
|
285
285
|
import { toChargeCardSortKeyType, } from './view/spendManagement/chargeCards/chargeCardList/chargeCardList';
|
|
286
286
|
import { closeChargeCards, fetchChargeCardList, fetchChargeCardListPage, fetchCreditAccount, fetchCreditAccountRepayment, fetchDebitCardSummary, lockChargeCards, resendCardInvite, revokeCardInvite, revokeChargeCardsInvite, unlockChargeCards, updateBulkActionCardIds, updateSearchText as updateChargeCardListSearchText, updateChargeCardListUIState, updateChargeCardsSpendLimit, updateRowActionCardId, } from './view/spendManagement/chargeCards/chargeCardList/chargeCardListReducer';
|
|
287
287
|
import { anyCardOnHold, getChargeCardBulkActionView, getChargeCardListView, getChargeCardRecurringExpensesByCardIds, getChargeCardRowActionView, getCreditAccountDetails, getDebitCardList, getDebitCardSummary, getDepositAccountListWithDebitCardIssued, getMyPendingActivationChargeCardListView, getMyRequestOnHoldChargeCardListWithShippingAddress, } from './view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector';
|
|
288
|
-
import { clearChargeCardRepaymentDetail, fetchChargeCardRepaymentDetail, initiateChargeCardRepayment, updateChargeCardRepaymentLocalStore, } from './view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer';
|
|
289
|
-
import { getChargeCardRepaymentDetail, } from './view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailSelector';
|
|
290
|
-
import { getChargeCardPaymentHistoryDownloadReport, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryDownloadSelector';
|
|
291
|
-
import { fetchChargeCardPaymentPage, fetchChargeCardPaymentHistory, updatePaymentHistoryDownloadUIState, updatePaymentHistoryFilters, updatePaymentHistorySearchText, updatePaymentHistoryUIState, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer';
|
|
292
|
-
import { getChargeCardPaymentHistoryView, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistorySelector';
|
|
293
288
|
import { PAYMENT_HISTORY_FILTER_CATEGORIES, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistory';
|
|
289
|
+
import { getChargeCardPaymentHistoryDownloadReport, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryDownloadSelector';
|
|
294
290
|
import { getPaymentHistorySourceAccountName, getPaymentStatusDisplayText, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryHelpers';
|
|
291
|
+
import { fetchChargeCardPaymentHistory, fetchChargeCardPaymentPage, updatePaymentHistoryDownloadUIState, updatePaymentHistoryFilters, updatePaymentHistorySearchText, updatePaymentHistoryUIState, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistoryReducer';
|
|
292
|
+
import { getChargeCardPaymentHistoryView, } from './view/spendManagement/chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistorySelector';
|
|
293
|
+
import { clearChargeCardRepaymentDetail, fetchChargeCardRepaymentDetail, initiateChargeCardRepayment, updateChargeCardRepaymentLocalStore, } from './view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailReducer';
|
|
294
|
+
import { getChargeCardRepaymentDetail, } from './view/spendManagement/chargeCards/chargeCardRepaymentDetail/chargeCardRepaymentDetailSelector';
|
|
295
295
|
import { acceptChargeCardTerms, enableChargeCardAutoPay, expressInterestInChargeCard, fetchChargeCardSetupView, } from './view/spendManagement/chargeCards/chargeCardSetUp/chargeCardSetUpViewReducer';
|
|
296
296
|
import { getChargeCardBusinessVerificationDetails, getChargeCardSetupViewDetails, } from './view/spendManagement/chargeCards/chargeCardSetUp/chargeCardSetUpViewSelector';
|
|
297
297
|
import { fetchChargeCardStatementList } from './view/spendManagement/chargeCards/chargeCardStatementList/chargeCardStatementListReducer';
|
|
@@ -300,6 +300,7 @@ import { fetchDepositAccountListForCards, fetchIssueCardPage, issueChargeCards,
|
|
|
300
300
|
import { getIssueChargeCardView, } from './view/spendManagement/chargeCards/issueChargeCard/issueChargeCardSelector';
|
|
301
301
|
import { clearSetupViewDataInLocalStore, enableSetup, saveCompnayOfficerAdditionalDocumentsInLocalStore, saveCompnayOfficerPhoneInLocalStore, saveIndustryAndIncDateInLocalStore, saveSetupViewDataInLocalStore, saveTreasuryAdditionalDocumentsInLocalStore, updateBusinessVerificationDetails, updateSelectedCompanyOfficer, updateSetupViewLocalStoreData, } from './view/spendManagement/commonSetup/setupViewReducer';
|
|
302
302
|
import { getBusinessVerificationDetails, getCommonSetupViewDetails, } from './view/spendManagement/commonSetup/setupViewSelector';
|
|
303
|
+
import { COMPANY_ONBOARDING_INDUSTRY_TYPE_CODES, COMPANY_ONBOARDING_SUB_INDUSTRY_CODES_BY_INDUSTRY, COMPANY_PURPOSE_OF_ACCOUNT_CODES, COMPANY_SOURCE_OF_FUNDS_CODES, COMPANY_TRANSACTION_VOLUME_CODES, COMPANY_US_NEXUS_TYPE_CODES, getCompanyOnboardingSubIndustryCodesForIndustry, } from './view/spendManagement/commonSetup/types/businessVerification';
|
|
303
304
|
import { checkIfLowBalance, getActualPaymentDate, getBillListUniqueType, getBulkOperationSuffix, getRemiListUniqueType, getSelectedCompanyOfficer, getSpendManagementEffectiveListPeriod, isAwaitingMarkAsPaid, isBulkProcessing, isPaymentMethodOutsideZeni, isVerifiedPaymentAccountProviderStatusCode, isVerifiedStatusCode, showBillPayPromoPage, showReimbursementPromoPage, toAccountsPromoConfig, toSameDayAchDisablementConfig, } from './view/spendManagement/helpers';
|
|
304
305
|
import { establishPlaidConnection, getPaymentAccounts, getPlaidLinkToken, updateMappedCashAccount, updatePaymentAccount, updatePaymentAccountLoginStatus, updatePaymentAccountStatus, updatePrimaryFundingAccount, } from './view/spendManagement/plaidAccount/plaidAccountViewReducer';
|
|
305
306
|
import { getPlaidAccountDetails } from './view/spendManagement/plaidAccount/plaidAccountViewSelector';
|
|
@@ -414,7 +415,7 @@ export { newBalancesFilterClassesView };
|
|
|
414
415
|
export { toCOABalanceTypeStrict, toCOABalanceType as toCOABlanaceType, isCalculatedBalanceType, };
|
|
415
416
|
export { stringToUnion, stringToUnionStrict };
|
|
416
417
|
export { fetchMonthEndCloseChecks, fetchMonthClosePerformanceTrend, getMonthEndCloseChecksViewByTenantId, ALL_MONTH_END_CLOSE_CHECKS_FREQUENCY, };
|
|
417
|
-
export { getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, getExpenseAutomationFluxAnalysisView, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, updateFluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, getExpenseAutomationReconciliationView, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, getAccountReconByAccountIdAndSelectedPeriod, toReconciliationTabsType, isAccountReconReport, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, toReconciliationAccountSource, deleteAccountStatement, uploadAccountStatement, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
|
|
418
|
+
export { getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, getExpenseAutomationFluxAnalysisView, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, updateFluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, getExpenseAutomationReconciliationView, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, getAccountReconByAccountIdAndSelectedPeriod, toReconciliationTabsType, isAccountReconReport, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, toReconciliationAccountSource, deleteAccountStatement, uploadAccountStatement, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
|
|
418
419
|
export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, toTransactionsSortKey, };
|
|
419
420
|
export { TOP_EX_TIME_PERIODS };
|
|
420
421
|
export { toTimeframeTick, mapTimePeriodtoTimeframeTick, toTimePeriod, toAbsoluteDay, toMonthYearPeriodId, convertToPeriod, };
|
|
@@ -504,6 +505,7 @@ export { ALL_COCKPIT_TABS_FILE_TYPES, ALL_COCKPIT_TABS_IDS, toCockpitTabsIDStric
|
|
|
504
505
|
export { isAllowedValueWithCode, isAllowedValueWithID, };
|
|
505
506
|
export { fetchCompanyPassportView, getCompanyPassportView, getCompanyPassportLocalStoreData, isCompanyPassportDataToBeSaved, companyPassportSaveDataInLocalStore, saveIndustryAndIncDateInCompanyPassportLocalStore, deleteCompanyOfficerInLocalStore, companyPassportClearDataInLocalStore, updateCompanyPassportLocalStoreData, saveCompanyPassportDetails, clearCompanyView, };
|
|
506
507
|
export { toCompanyPassportLocalData, };
|
|
508
|
+
export { COMPANY_ONBOARDING_INDUSTRY_TYPE_CODES, COMPANY_ONBOARDING_SUB_INDUSTRY_CODES_BY_INDUSTRY, COMPANY_PURPOSE_OF_ACCOUNT_CODES, COMPANY_SOURCE_OF_FUNDS_CODES, COMPANY_TRANSACTION_VOLUME_CODES, COMPANY_US_NEXUS_TYPE_CODES, getCompanyOnboardingSubIndustryCodesForIndustry, };
|
|
507
509
|
export { getUncategorizedAccounts, getNestedAccountListHierarchy, };
|
|
508
510
|
export { getBankAccount };
|
|
509
511
|
// TODO - remove alias and replace types across all repos
|
|
@@ -12,6 +12,12 @@ export const updateCompanyDetailsEpic = (actions$, state$, zeniAPI) => actions$.
|
|
|
12
12
|
...toCompanyIncInfoUpdatableInfoPayload(companyDetails.incInfo),
|
|
13
13
|
...toCompanyTaxInfoUpdatableInfoPayload(companyDetails.taxDetails),
|
|
14
14
|
...toCompanyFileInfoPayload(companyDetails.incInfo, companyDetails.taxDetails),
|
|
15
|
+
...(companyDetails.companyInfo.companyIndustryType != null && {
|
|
16
|
+
company_industry_type: companyDetails.companyInfo.companyIndustryType,
|
|
17
|
+
}),
|
|
18
|
+
...(companyDetails.companyInfo.companySubIndustry != null && {
|
|
19
|
+
company_industry_sub_type: companyDetails.companyInfo.companySubIndustry,
|
|
20
|
+
}),
|
|
15
21
|
};
|
|
16
22
|
const { newAddressState } = state$.value.addressViewState;
|
|
17
23
|
const addressToCreate = newAddressState?.company_address?.addressToCreate;
|
|
@@ -10,9 +10,22 @@ export function toCompanyPassportLocalData(companyView, companyFiles) {
|
|
|
10
10
|
website: companyInfo.companyUrl,
|
|
11
11
|
meetingLink: companyInfo.meetingUrl,
|
|
12
12
|
industry: companyQuestionaire.companyIndustry,
|
|
13
|
+
companyIndustryType: incInfo.companyIndustryType,
|
|
14
|
+
companySubIndustry: incInfo.companySubIndustry,
|
|
13
15
|
businessModel: companyQuestionaire.companyBusinessModel ?? '',
|
|
14
16
|
phone: companyInfo.phone ?? '',
|
|
15
17
|
firstMonthOfFY: companyInfo.firstMonthOfFY,
|
|
18
|
+
companySourceOfFunds: companyInfo.companySourceOfFunds,
|
|
19
|
+
companySourceOfFundsDescription: companyInfo.companySourceOfFundsDescription,
|
|
20
|
+
countriesOfOperations: companyInfo.countriesOfOperations,
|
|
21
|
+
transactionVolume: companyInfo.transactionVolume,
|
|
22
|
+
transactionVolumeDescription: companyInfo.transactionVolumeDescription,
|
|
23
|
+
purposeOfAccount: companyInfo.purposeOfAccount,
|
|
24
|
+
purposeOfAccountDescription: companyInfo.purposeOfAccountDescription,
|
|
25
|
+
regulatedStatus: companyInfo.regulatedStatus,
|
|
26
|
+
regulatedStatusDescription: companyInfo.regulatedStatusDescription,
|
|
27
|
+
usNexus: companyInfo.usNexus,
|
|
28
|
+
usNexusTypes: companyInfo.usNexusTypes,
|
|
16
29
|
},
|
|
17
30
|
incInfo: {
|
|
18
31
|
typeOfInc: incInfo.companyIncType ?? '',
|
|
@@ -1,16 +1,59 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
company_business_model: info.businessModel,
|
|
8
|
-
company_url: info.website != null ? info.website.toString() : null,
|
|
9
|
-
meeting_url: info.meetingLink != null ? info.meetingLink.toString() : null,
|
|
10
|
-
is_new_company_industry_verified: true,
|
|
11
|
-
};
|
|
12
|
-
return payload;
|
|
1
|
+
/** Maps US nexus display label to API key (for company_us_nexus_desc) */
|
|
2
|
+
const US_NEXUS_LABEL_TO_KEY = {
|
|
3
|
+
Employees: 'employees',
|
|
4
|
+
Customers: 'customers',
|
|
5
|
+
'Physical office or facility': 'physical_office',
|
|
6
|
+
'Banking relationships': 'banking_relationships',
|
|
13
7
|
};
|
|
8
|
+
function toUsNexusTypeKey(value) {
|
|
9
|
+
const key = US_NEXUS_LABEL_TO_KEY[value];
|
|
10
|
+
return key ?? value;
|
|
11
|
+
}
|
|
12
|
+
export const toCompanyUpdatableInfoPayload = (info) => ({
|
|
13
|
+
name: info.companyName,
|
|
14
|
+
company_legal_name: info.legalName,
|
|
15
|
+
phone: info.phone,
|
|
16
|
+
company_industry: info.industry,
|
|
17
|
+
company_business_model: info.businessModel,
|
|
18
|
+
company_url: info.website != null ? info.website.toString() : null,
|
|
19
|
+
meeting_url: info.meetingLink != null ? info.meetingLink.toString() : null,
|
|
20
|
+
is_new_company_industry_verified: true,
|
|
21
|
+
...(info.companySourceOfFunds != null && {
|
|
22
|
+
company_source_of_funds: info.companySourceOfFunds,
|
|
23
|
+
}),
|
|
24
|
+
...(info.companySourceOfFundsDescription != null && {
|
|
25
|
+
company_source_of_funds_desc: info.companySourceOfFundsDescription,
|
|
26
|
+
}),
|
|
27
|
+
...(info.countriesOfOperations != null &&
|
|
28
|
+
info.countriesOfOperations.length > 0 && {
|
|
29
|
+
company_countries_of_operations: info.countriesOfOperations,
|
|
30
|
+
}),
|
|
31
|
+
...(info.transactionVolume != null && {
|
|
32
|
+
company_transaction_vol_expectations: info.transactionVolume,
|
|
33
|
+
}),
|
|
34
|
+
...(info.transactionVolumeDescription != null && {
|
|
35
|
+
company_transaction_vol_expectations_desc: info.transactionVolumeDescription,
|
|
36
|
+
}),
|
|
37
|
+
...(info.purposeOfAccount != null && {
|
|
38
|
+
company_purpose_of_account: info.purposeOfAccount,
|
|
39
|
+
}),
|
|
40
|
+
...(info.purposeOfAccountDescription != null && {
|
|
41
|
+
company_purpose_of_account_desc: info.purposeOfAccountDescription,
|
|
42
|
+
}),
|
|
43
|
+
...(info.regulatedStatus != null && {
|
|
44
|
+
company_regulated_states: info.regulatedStatus === 'yes',
|
|
45
|
+
}),
|
|
46
|
+
...(info.regulatedStatusDescription != null && {
|
|
47
|
+
company_regulated_states_desc: info.regulatedStatusDescription,
|
|
48
|
+
}),
|
|
49
|
+
...(info.usNexus != null && {
|
|
50
|
+
company_us_nexus: info.usNexus === 'yes',
|
|
51
|
+
}),
|
|
52
|
+
...(info.usNexusTypes != null &&
|
|
53
|
+
info.usNexusTypes.length > 0 && {
|
|
54
|
+
company_us_nexus_desc: info.usNexusTypes.map(toUsNexusTypeKey),
|
|
55
|
+
}),
|
|
56
|
+
});
|
|
14
57
|
export const toCompanyIncInfoUpdatableInfoPayload = (info) => {
|
|
15
58
|
const payload = {
|
|
16
59
|
company_inc_type: info.typeOfInc,
|
|
@@ -4,15 +4,14 @@ import { convertToPeriod, toAbsoluteDay, } from '../../../../commonStateTypes/ti
|
|
|
4
4
|
import { getCurrentTenant } from '../../../../entity/tenant/tenantSelector';
|
|
5
5
|
import { backgroundRefetchReviewTab, syncTransactionCategorizationFromDetailSave, } from '../../reducers/transactionsViewReducer';
|
|
6
6
|
export const triggerReviewTabRefetchEpic = (actions$, state$) => actions$.pipe(filter(syncTransactionCategorizationFromDetailSave.match), mergeMap((action) => {
|
|
7
|
-
const { pendingReviewLineIds, transactionId, isUncategorizedExpenseCategoryEnabled } = action.payload;
|
|
7
|
+
const { pendingReviewLineIds, transactionId, isUncategorizedExpenseCategoryEnabled, } = action.payload;
|
|
8
8
|
if (pendingReviewLineIds.length === 0) {
|
|
9
9
|
return EMPTY;
|
|
10
10
|
}
|
|
11
11
|
const state = state$.value;
|
|
12
12
|
// Only trigger when the transaction was auto-only (not in review tab after reducer ran)
|
|
13
13
|
const reviewLocalData = state.expenseAutomationTransactionsViewState
|
|
14
|
-
.transactionCategorizationView.review
|
|
15
|
-
.transactionReviewLocalDataById[transactionId.id];
|
|
14
|
+
.transactionCategorizationView.review.transactionReviewLocalDataById[transactionId.id];
|
|
16
15
|
if (reviewLocalData != null) {
|
|
17
16
|
return EMPTY;
|
|
18
17
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { from } from 'rxjs';
|
|
2
|
+
import { filter, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { getCurrentTenant } from '../../../../entity/tenant/tenantSelector';
|
|
4
|
+
import { updateTransaction } from '../../../../entity/transaction/transactionReducer';
|
|
5
|
+
import { fetchMonthEndCloseChecks } from '../../../monthEndCloseChecksView/monthEndCloseChecksViewReducer';
|
|
6
|
+
import { uploadTransactionCategorizationReceiptSuccess } from '../../reducers/transactionsViewReducer';
|
|
7
|
+
export const uploadTransactionReceiptSuccessEpic = (actions$, state$) => actions$.pipe(filter(uploadTransactionCategorizationReceiptSuccess.match), mergeMap((action) => {
|
|
8
|
+
const { transactionPayload, updateType } = action.payload;
|
|
9
|
+
const updateActions = [];
|
|
10
|
+
const currentTenant = getCurrentTenant(state$.value);
|
|
11
|
+
const selectedPeriodByTenantId = state$.value.expenseAutomationViewState.selectedPeriodByTenantId;
|
|
12
|
+
updateActions.push(updateTransaction(transactionPayload.transaction_id, transactionPayload, updateType));
|
|
13
|
+
if (currentTenant != null) {
|
|
14
|
+
const monthEndChecksPeriod = selectedPeriodByTenantId[currentTenant.tenantId];
|
|
15
|
+
updateActions.push(fetchMonthEndCloseChecks({
|
|
16
|
+
tenantId: currentTenant.tenantId,
|
|
17
|
+
period: monthEndChecksPeriod,
|
|
18
|
+
refreshViewInBackground: true,
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
return from(updateActions);
|
|
22
|
+
}));
|
package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js
CHANGED
|
@@ -41,8 +41,8 @@ export const filterAutoTabLineItems = (tabView, transactionId, updatedTransactio
|
|
|
41
41
|
if (localData == null) {
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
|
-
const currentAutoLineIds = localData.transactionReviewLocalData.tabSpecificLineItems
|
|
45
|
-
|
|
44
|
+
const currentAutoLineIds = localData.transactionReviewLocalData.tabSpecificLineItems.autoCategorized ??
|
|
45
|
+
[];
|
|
46
46
|
const linesById = new Map(updatedTransaction.lines?.map((l) => [l.id, l]));
|
|
47
47
|
const retainedLineIds = currentAutoLineIds.filter((lineId) => {
|
|
48
48
|
const line = linesById.get(lineId);
|
|
@@ -36,6 +36,7 @@ export const initialTransactionTabViewState = {
|
|
|
36
36
|
transactionIdsBySelectedPeriod: {},
|
|
37
37
|
selectedCheckBoxTransactionIds: [],
|
|
38
38
|
transactionIdsWithUnsavedData: [],
|
|
39
|
+
uploadReceiptStatusById: {},
|
|
39
40
|
selectedTransactionId: undefined,
|
|
40
41
|
selectedTransactionLineId: undefined,
|
|
41
42
|
};
|
|
@@ -699,6 +700,24 @@ const expenseAutomationTransactionsView = createSlice({
|
|
|
699
700
|
clearExpenseAutomationTransactionsView(draft) {
|
|
700
701
|
Object.assign(draft, initialState);
|
|
701
702
|
},
|
|
703
|
+
updateTransactionCategorizationUploadReceiptState: {
|
|
704
|
+
reducer(draft, action) {
|
|
705
|
+
const { transactionId, fetchStatus, selectedTab } = action.payload;
|
|
706
|
+
draft.transactionCategorizationView[selectedTab].uploadReceiptStatusById[transactionId] = fetchStatus;
|
|
707
|
+
},
|
|
708
|
+
prepare(selectedTab, transactionId, fetchStatus) {
|
|
709
|
+
return { payload: { selectedTab, transactionId, fetchStatus } };
|
|
710
|
+
},
|
|
711
|
+
},
|
|
712
|
+
uploadTransactionCategorizationReceiptSuccess: {
|
|
713
|
+
reducer(draft, action) {
|
|
714
|
+
const { transactionPayload, selectedTab } = action.payload;
|
|
715
|
+
draft.transactionCategorizationView[selectedTab].uploadReceiptStatusById[transactionPayload.transaction_id] = { fetchState: 'Completed', error: undefined };
|
|
716
|
+
},
|
|
717
|
+
prepare(selectedTab, transactionPayload, updateType = 'merge') {
|
|
718
|
+
return { payload: { selectedTab, transactionPayload, updateType } };
|
|
719
|
+
},
|
|
720
|
+
},
|
|
702
721
|
syncTransactionCategorizationFromDetailSave: {
|
|
703
722
|
prepare(transactionId, updatedTransaction, pendingReviewLineIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled) {
|
|
704
723
|
return {
|
|
@@ -770,5 +789,5 @@ const expenseAutomationTransactionsView = createSlice({
|
|
|
770
789
|
},
|
|
771
790
|
},
|
|
772
791
|
});
|
|
773
|
-
export const { fetchTransactionCategorization, updateTransactionCategorizationUIState, initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateStatusForTransactionNotMiscategorizedUpdateForCategorization, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, setAllItemsToCategoryClassInLocalDataForCategorization, updateTotalCountForTransactionCategorization, fetchTransactionCategorizationSuccess, resetOtherTabsFetchState, fetchTransactionCategorizationView, updateSelectedCheckboxTransactionIds, clearExpenseAutomationTransactionsViewPerTabView, clearExpenseAutomationTransactionsView, setEntityRecommendationForLineIdsForCategorization, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, } = expenseAutomationTransactionsView.actions;
|
|
792
|
+
export const { fetchTransactionCategorization, updateTransactionCategorizationUIState, initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateStatusForTransactionNotMiscategorizedUpdateForCategorization, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, setAllItemsToCategoryClassInLocalDataForCategorization, updateTotalCountForTransactionCategorization, fetchTransactionCategorizationSuccess, resetOtherTabsFetchState, fetchTransactionCategorizationView, updateSelectedCheckboxTransactionIds, clearExpenseAutomationTransactionsViewPerTabView, clearExpenseAutomationTransactionsView, setEntityRecommendationForLineIdsForCategorization, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } = expenseAutomationTransactionsView.actions;
|
|
774
793
|
export default expenseAutomationTransactionsView.reducer;
|
|
@@ -10,7 +10,7 @@ import { getAllSteps } from '../selectorTypes/expenseAutomationViewSelectorTypes
|
|
|
10
10
|
export function getExpenseAutomationTransactionView(state) {
|
|
11
11
|
const { accountState, classState, classListState, accountListState, expenseAutomationTransactionsViewState, expenseAutomationViewState, transactionState, monthEndCloseChecksState, } = state;
|
|
12
12
|
const { selectedTransactionCategorizationTab } = expenseAutomationTransactionsViewState;
|
|
13
|
-
const { uiState, refreshStatus, saveStatus, markAsNotMiscategorizedStatus, transactionIdsBySelectedPeriod, transactionReviewLocalDataById, selectedCheckBoxTransactionIds, transactionIdsWithUnsavedData, selectedTransactionId, selectedTransactionLineId, } = expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab];
|
|
13
|
+
const { uiState, refreshStatus, saveStatus, markAsNotMiscategorizedStatus, transactionIdsBySelectedPeriod, transactionReviewLocalDataById, selectedCheckBoxTransactionIds, transactionIdsWithUnsavedData, uploadReceiptStatusById, selectedTransactionId, selectedTransactionLineId, } = expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab];
|
|
14
14
|
const uncategorizedIncomeExpense = getUncategorizedAccounts(accountState, accountListState, 'accountList');
|
|
15
15
|
const accountList = getAccountList(accountState, accountListState, 'accountList');
|
|
16
16
|
const classList = getClassList(classState, classListState);
|
|
@@ -94,6 +94,7 @@ export function getExpenseAutomationTransactionView(state) {
|
|
|
94
94
|
completionStatus,
|
|
95
95
|
totalCountByTab,
|
|
96
96
|
fetchStateByTransactionTabs: fetchStateByTab,
|
|
97
|
+
uploadReceiptStatusById,
|
|
97
98
|
selectedTransactionId,
|
|
98
99
|
selectedTransactionLineId,
|
|
99
100
|
};
|
|
@@ -218,17 +218,17 @@ export const onboardingStepsData = (isValidConnection, productSettings, accounti
|
|
|
218
218
|
requiredStepsData: requiredStepsData.map((step) => toOnboardingStepType(step)),
|
|
219
219
|
};
|
|
220
220
|
};
|
|
221
|
-
function isCompanyDetailsSavePending(fileState, company, primaryContact, companyDetailsLocalData) {
|
|
221
|
+
export function isCompanyDetailsSavePending(fileState, company, primaryContact, companyDetailsLocalData) {
|
|
222
222
|
if (company == null || companyDetailsLocalData == null) {
|
|
223
223
|
return false;
|
|
224
224
|
}
|
|
225
225
|
const { companyInfo, incInfo, taxInfo, questionaire } = company.company.company;
|
|
226
|
-
const { companyDescription, companyLegalName, companyUrl, phone } = companyInfo;
|
|
227
|
-
const { fileIds, companyIncDate: incDate, companyIncType } = incInfo;
|
|
226
|
+
const { companyDescription, companyLegalName, companyUrl, phone, companySourceOfFunds, companySourceOfFundsDescription, countriesOfOperations, transactionVolume, transactionVolumeDescription, purposeOfAccount, purposeOfAccountDescription, regulatedStatus, regulatedStatusDescription, usNexus, usNexusTypes, } = companyInfo;
|
|
227
|
+
const { fileIds, companyIncDate: incDate, companyIncState, companyIncType, companySubIndustry, } = incInfo;
|
|
228
228
|
const { companyIndustry } = questionaire;
|
|
229
229
|
const { taxId } = taxInfo;
|
|
230
230
|
const companyFileIds = getFilesByFileIds(fileState, fileIds).map((file) => file.fileId);
|
|
231
|
-
const { companyDescription: companyDescriptionLocalData, companyIndustry: companyIndustryLocalData, companyLegalName: companyLegalNameLocalData, taxIdOrEIN: taxIdLocalData, incDate: incDateLocalData, phone: companyPhoneLocalData, website: companyUrlLocalData, companyFiles: companyFilesLocalData, typeOfIncorporation: companyIncTypeLocalData, primaryContactLocalData, } = companyDetailsLocalData;
|
|
231
|
+
const { companyDescription: companyDescriptionLocalData, companyIndustry: companyIndustryLocalData, companyLegalName: companyLegalNameLocalData, taxIdOrEIN: taxIdLocalData, incDate: incDateLocalData, phone: companyPhoneLocalData, website: companyUrlLocalData, companyFiles: companyFilesLocalData, stateOfIncorporation: stateOfIncorporationLocalData, typeOfIncorporation: companyIncTypeLocalData, companySourceOfFunds: companySourceOfFundsLocalData, companySourceOfFundsDescription: companySourceOfFundsDescriptionLocalData, countriesOfOperations: countriesOfOperationsLocalData, companySubIndustry: companySubIndustryLocalData, transactionVolume: transactionVolumeLocalData, transactionVolumeDescription: transactionVolumeDescriptionLocalData, purposeOfAccount: purposeOfAccountLocalData, purposeOfAccountDescription: purposeOfAccountDescriptionLocalData, regulatedStatus: regulatedStatusLocalData, regulatedStatusDescription: regulatedStatusDescriptionLocalData, usNexus: usNexusLocalData, usNexusTypes: usNexusTypesLocalData, primaryContactLocalData, } = companyDetailsLocalData;
|
|
232
232
|
const fileIdsLocalData = companyFilesLocalData.map((file) => file.fileId);
|
|
233
233
|
if (primaryContact != null) {
|
|
234
234
|
const { firstName, lastName, email } = primaryContact;
|
|
@@ -238,6 +238,10 @@ function isCompanyDetailsSavePending(fileState, company, primaryContact, company
|
|
|
238
238
|
return true;
|
|
239
239
|
}
|
|
240
240
|
}
|
|
241
|
+
const countriesOfOperationsMatch = JSON.stringify(countriesOfOperations ?? []) ===
|
|
242
|
+
JSON.stringify(countriesOfOperationsLocalData ?? []);
|
|
243
|
+
const usNexusTypesMatch = JSON.stringify(usNexusTypes ?? []) ===
|
|
244
|
+
JSON.stringify(usNexusTypesLocalData ?? []);
|
|
241
245
|
return (companyDescription != companyDescriptionLocalData ||
|
|
242
246
|
companyIndustry != companyIndustryLocalData ||
|
|
243
247
|
companyLegalName != companyLegalNameLocalData ||
|
|
@@ -245,7 +249,21 @@ function isCompanyDetailsSavePending(fileState, company, primaryContact, company
|
|
|
245
249
|
incDate?.toString() != incDateLocalData?.toString() ||
|
|
246
250
|
phone != companyPhoneLocalData ||
|
|
247
251
|
companyUrl?.toString() != companyUrlLocalData?.toString() ||
|
|
252
|
+
companyIncState != stateOfIncorporationLocalData ||
|
|
253
|
+
companySourceOfFunds != companySourceOfFundsLocalData ||
|
|
254
|
+
companySourceOfFundsDescription !=
|
|
255
|
+
companySourceOfFundsDescriptionLocalData ||
|
|
256
|
+
!countriesOfOperationsMatch ||
|
|
248
257
|
companyIncType != companyIncTypeLocalData ||
|
|
258
|
+
transactionVolume != transactionVolumeLocalData ||
|
|
259
|
+
transactionVolumeDescription != transactionVolumeDescriptionLocalData ||
|
|
260
|
+
purposeOfAccount != purposeOfAccountLocalData ||
|
|
261
|
+
purposeOfAccountDescription != purposeOfAccountDescriptionLocalData ||
|
|
262
|
+
regulatedStatus != regulatedStatusLocalData ||
|
|
263
|
+
regulatedStatusDescription != regulatedStatusDescriptionLocalData ||
|
|
264
|
+
usNexus != usNexusLocalData ||
|
|
265
|
+
!usNexusTypesMatch ||
|
|
266
|
+
companySubIndustry != companySubIndustryLocalData ||
|
|
249
267
|
!(fileIdsLocalData.length === companyFileIds.length &&
|
|
250
268
|
companyFileIds.every((fileId) => fileIdsLocalData.includes(fileId))));
|
|
251
269
|
}
|
|
@@ -2,8 +2,8 @@ import { getChargeCardRepaymentByIds } from '../../../../entity/chargeCardRepaym
|
|
|
2
2
|
import { getUsersByUserIds } from '../../../../entity/user/userSelector';
|
|
3
3
|
import { applyPaymentHistoryFiltersSearchAndSort } from './chargeCardPaymentHistoryHelpers';
|
|
4
4
|
export const getChargeCardPaymentHistoryDownloadReport = (state) => {
|
|
5
|
-
const { chargeCardPaymentHistoryState, chargeCardRepaymentState, userState
|
|
6
|
-
const { filters, repaymentHistoryIds, searchText, uiState, fetchState, error
|
|
5
|
+
const { chargeCardPaymentHistoryState, chargeCardRepaymentState, userState } = state;
|
|
6
|
+
const { filters, repaymentHistoryIds, searchText, uiState, fetchState, error } = chargeCardPaymentHistoryState;
|
|
7
7
|
const repaymentHistory = getChargeCardRepaymentByIds(chargeCardRepaymentState, repaymentHistoryIds);
|
|
8
8
|
const repaymentHistoryUserIds = Array.from(new Set(repaymentHistory.map((r) => r.paidById)));
|
|
9
9
|
const repaymentHistoryUsers = getUsersByUserIds(userState, repaymentHistoryUserIds);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { reduceAllFetchState } from '../../../../commonStateTypes/reduceFetchState';
|
|
2
2
|
import { getChargeCardRepaymentByIds } from '../../../../entity/chargeCardRepayment/chargeCardRepaymentSelector';
|
|
3
|
-
import { getUsersByUserIds } from '../../../../entity/user/userSelector';
|
|
4
|
-
import { getAllFundingAccounts, mapDepositAccToFundingAccount, mapPaymentAccToFundingAccount, } from '../../commonSetup/setupViewSelector';
|
|
5
3
|
import { getDepositAccountByDepositAccountId } from '../../../../entity/depositAccount/depositAccountSelector';
|
|
6
4
|
import { getPaymentAccountByPaymentAccountId } from '../../../../entity/paymentAccount/paymentAccountSelector';
|
|
5
|
+
import { getUsersByUserIds } from '../../../../entity/user/userSelector';
|
|
6
|
+
import { getAllFundingAccounts, mapDepositAccToFundingAccount, mapPaymentAccToFundingAccount, } from '../../commonSetup/setupViewSelector';
|
|
7
7
|
import { getAllDepositAccounts } from '../../zeniAccounts/depositAccountList/depositAccountListSelector';
|
|
8
8
|
import { getAllPaymentAccounts } from '../../zeniAccounts/paymentAccountList/paymentAccountListSelector';
|
|
9
9
|
import { applyPaymentHistoryFiltersSearchAndSort } from './chargeCardPaymentHistoryHelpers';
|
|
@@ -15,7 +15,10 @@ export const getChargeCardRepaymentDetail = (state) => {
|
|
|
15
15
|
else {
|
|
16
16
|
const depositFundingFromLimit = Object.values(depositAccountState.depositAccountLimitForChargeCardByID ?? {}).map(mapDepositAccountWithLimitToFundingAccount);
|
|
17
17
|
const paymentFundingAccounts = getAllFundingAccounts([], paymentAccountsView.paymentAccounts, paymentAccountListState.paymentAccountBalanceFetchStatus);
|
|
18
|
-
transferFromAccounts = [
|
|
18
|
+
transferFromAccounts = [
|
|
19
|
+
...depositFundingFromLimit,
|
|
20
|
+
...paymentFundingAccounts,
|
|
21
|
+
];
|
|
19
22
|
}
|
|
20
23
|
}
|
|
21
24
|
const reducedFetchState = reduceAnyCompletedFetchState([
|
|
@@ -7,7 +7,8 @@ export const fetchChargeCardRepaymentDetailEpic = (actions$, state$) => actions$
|
|
|
7
7
|
const fetchChargeCardRepaymentDetailActions = [];
|
|
8
8
|
const state = state$.value;
|
|
9
9
|
const depositAccounts = state.depositAccountListState;
|
|
10
|
-
const willFetchDeposit = depositAccounts.fetchState !== 'In-Progress' &&
|
|
10
|
+
const willFetchDeposit = depositAccounts.fetchState !== 'In-Progress' &&
|
|
11
|
+
depositAccounts.fetchState !== 'Completed';
|
|
11
12
|
if (willFetchDeposit) {
|
|
12
13
|
fetchChargeCardRepaymentDetailActions.push(fetchDepositAccountList());
|
|
13
14
|
}
|
|
@@ -9,8 +9,8 @@ import { getAllFundingAccounts } from '../../commonSetup/setupViewSelector';
|
|
|
9
9
|
import { accountTypeSubConfigCodeToAccType } from '../../helpers';
|
|
10
10
|
import { getAllDepositAccounts } from '../../zeniAccounts/depositAccountList/depositAccountListSelector';
|
|
11
11
|
import { getAllPaymentAccounts } from '../../zeniAccounts/paymentAccountList/paymentAccountListSelector';
|
|
12
|
-
import { addRepaymentToChargeCardPaymentHistory } from '../chargeCardPaymentHistory/chargeCardPaymentHistoryReducer';
|
|
13
12
|
import { updateCreditAccountRepaymentAmountAndDate } from '../chargeCardList/chargeCardListReducer';
|
|
13
|
+
import { addRepaymentToChargeCardPaymentHistory } from '../chargeCardPaymentHistory/chargeCardPaymentHistoryReducer';
|
|
14
14
|
import { initiateChargeCardRepayment, updateChargeCardRepaymentStatus, } from './chargeCardRepaymentDetailReducer';
|
|
15
15
|
export const initiateChargeCardRepaymentEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(initiateChargeCardRepayment.match), switchMap((action) => {
|
|
16
16
|
const state = state$.value;
|