@zeniai/client-epic-state 5.1.78-betaSI0 → 5.1.78
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/invoicing/invoicingCommonPayload.d.ts +42 -0
- package/lib/entity/invoicing/invoicingCommonPayload.js +66 -1
- package/lib/entity/tenant/clearAllEpic.d.ts +2 -1
- package/lib/entity/tenant/clearAllEpic.js +2 -0
- package/lib/epic.d.ts +2 -1
- package/lib/epic.js +7 -1
- package/lib/esm/entity/invoicing/invoicingCommonPayload.js +61 -0
- package/lib/esm/entity/tenant/clearAllEpic.js +2 -0
- package/lib/esm/epic.js +7 -1
- package/lib/esm/index.js +7 -4
- package/lib/esm/reducer.js +3 -0
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/backgroundRefetchReviewTabEpic.js +0 -1
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +0 -1
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +11 -56
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +1 -2
- package/lib/esm/view/invoicing/createCreditNote/createCreditNoteFormConfig.js +6 -1
- package/lib/esm/view/invoicing/createCreditNote/createCreditNotePayload.js +1 -8
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js +4 -5
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +10 -11
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js +8 -10
- package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewPayload.js +2 -2
- package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewReducer.js +1 -1
- package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.js +1 -1
- package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.js +43 -1
- package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.js +2 -5
- package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.js +1 -2
- package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +7 -1
- package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.js +3 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.js +25 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.js +15 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.js +15 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.js +15 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/invoicingQboViewActionType.js +1 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.js +26 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/startInvoicingQboBackfillEpic.js +18 -0
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewPayload.js +47 -0
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewReducer.js +128 -0
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +20 -0
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewState.js +1 -0
- package/lib/esm/view/invoicing/issueCreditNote/issueCreditNotePayload.js +4 -11
- package/lib/esm/view/invoicing/recordPayment/recordPaymentFormConfig.js +0 -1
- package/lib/esm/view/invoicing/recordPayment/recordPaymentPayload.js +5 -14
- package/lib/index.d.ts +9 -4
- package/lib/index.js +66 -55
- package/lib/reducer.d.ts +3 -0
- package/lib/reducer.js +3 -0
- package/lib/view/expenseAutomationView/epics/transactionCategorization/backgroundRefetchReviewTabEpic.js +0 -1
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +0 -1
- package/lib/view/expenseAutomationView/payload/transactionCategorizationPayload.d.ts +0 -11
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +1 -4
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +12 -57
- package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +0 -2
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +1 -2
- package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +0 -11
- package/lib/view/invoicing/createCreditNote/createCreditNoteFormConfig.js +6 -1
- package/lib/view/invoicing/createCreditNote/createCreditNotePayload.js +1 -8
- package/lib/view/invoicing/createCreditNote/createCreditNoteState.d.ts +3 -1
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.d.ts +2 -1
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js +4 -5
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +10 -11
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewState.d.ts +10 -5
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js +8 -10
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewPayload.js +2 -2
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewReducer.js +3 -3
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.js +2 -2
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.d.ts +9 -2
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.js +45 -0
- package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.js +2 -5
- package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewState.d.ts +3 -1
- package/lib/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.js +1 -2
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewPayload.d.ts +4 -1
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.d.ts +1 -1
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +6 -0
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.d.ts +4 -1
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.js +3 -0
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewState.d.ts +4 -1
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.d.ts +6 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.js +29 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.d.ts +6 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.js +19 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.d.ts +6 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.js +19 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.d.ts +6 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.js +19 -0
- package/lib/view/invoicing/invoicingQboView/epics/invoicingQboViewActionType.d.ts +2 -0
- package/lib/view/invoicing/invoicingQboView/epics/invoicingQboViewActionType.js +2 -0
- package/lib/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.d.ts +6 -0
- package/lib/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.js +30 -0
- package/lib/view/invoicing/invoicingQboView/epics/startInvoicingQboBackfillEpic.d.ts +6 -0
- package/lib/view/invoicing/invoicingQboView/epics/startInvoicingQboBackfillEpic.js +22 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewPayload.d.ts +79 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewPayload.js +52 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewReducer.d.ts +25 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewReducer.js +132 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.d.ts +21 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +24 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewState.d.ts +14 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewState.js +2 -0
- package/lib/view/invoicing/issueCreditNote/issueCreditNotePayload.js +4 -11
- package/lib/view/invoicing/issueCreditNote/issueCreditNoteState.d.ts +3 -2
- package/lib/view/invoicing/recordPayment/recordPaymentFormConfig.js +0 -1
- package/lib/view/invoicing/recordPayment/recordPaymentPayload.js +5 -14
- package/lib/view/invoicing/recordPayment/recordPaymentState.d.ts +4 -2
- package/package.json +1 -1
- package/lib/esm/view/expenseAutomationView/types/transactionGroup.js +0 -21
- package/lib/esm/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.js +0 -44
- package/lib/view/expenseAutomationView/types/transactionGroup.d.ts +0 -21
- package/lib/view/expenseAutomationView/types/transactionGroup.js +0 -25
- package/lib/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.d.ts +0 -5
- package/lib/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.js +0 -48
package/lib/reducer.js
CHANGED
|
@@ -194,6 +194,7 @@ const invoicingCustomerListViewReducer_1 = __importStar(require("./view/invoicin
|
|
|
194
194
|
const invoicingDunningCaseDetailViewReducer_1 = __importStar(require("./view/invoicing/invoicingDunningCaseDetailView/invoicingDunningCaseDetailViewReducer"));
|
|
195
195
|
const invoicingDunningCaseListViewReducer_1 = __importStar(require("./view/invoicing/invoicingDunningCaseListView/invoicingDunningCaseListViewReducer"));
|
|
196
196
|
const invoicingOverviewReducer_1 = __importStar(require("./view/invoicing/invoicingOverview/invoicingOverviewReducer"));
|
|
197
|
+
const invoicingQboViewReducer_1 = __importStar(require("./view/invoicing/invoicingQboView/invoicingQboViewReducer"));
|
|
197
198
|
const invoicingSubscriptionDetailViewReducer_1 = __importStar(require("./view/invoicing/invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewReducer"));
|
|
198
199
|
const invoicingSubscriptionListViewReducer_1 = __importStar(require("./view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewReducer"));
|
|
199
200
|
const invoicingTransactionDetailViewReducer_1 = __importStar(require("./view/invoicing/invoicingTransactionDetailView/invoicingTransactionDetailViewReducer"));
|
|
@@ -504,6 +505,7 @@ const initialViewsState = {
|
|
|
504
505
|
invoicingInvoiceListState: invoiceListReducer_1.initialState,
|
|
505
506
|
invoicingPaymentActionState: paymentActionReducer_1.initialState,
|
|
506
507
|
invoicingConfigViewState: invoicingConfigViewReducer_1.initialState,
|
|
508
|
+
invoicingQboViewState: invoicingQboViewReducer_1.initialState,
|
|
507
509
|
invoicingSettingsViewState: settingsViewReducer_1.initialState,
|
|
508
510
|
invoicingCatalogActionState: catalogActionReducer_1.initialState,
|
|
509
511
|
invoicingDiscountActionState: discountActionReducer_1.initialState,
|
|
@@ -793,6 +795,7 @@ const viewReducers = {
|
|
|
793
795
|
invoicingInvoiceListState: invoiceListReducer_1.default,
|
|
794
796
|
invoicingPaymentActionState: paymentActionReducer_1.default,
|
|
795
797
|
invoicingConfigViewState: invoicingConfigViewReducer_1.default,
|
|
798
|
+
invoicingQboViewState: invoicingQboViewReducer_1.default,
|
|
796
799
|
invoicingSettingsViewState: settingsViewReducer_1.default,
|
|
797
800
|
invoicingCatalogActionState: catalogActionReducer_1.default,
|
|
798
801
|
invoicingDiscountActionState: discountActionReducer_1.default,
|
|
@@ -30,7 +30,6 @@ const backgroundRefetchReviewTabEpic = (actions$, state$, zeniAPI) => actions$.p
|
|
|
30
30
|
page_token: pageToken,
|
|
31
31
|
page_size: PAGE_SIZE,
|
|
32
32
|
search_text: reviewUiState.searchString,
|
|
33
|
-
transaction_group: state.expenseAutomationTransactionsViewState.selectedTransactionGroup,
|
|
34
33
|
};
|
|
35
34
|
return zeniAPI.getJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/expense-automation/transactions?query=${encodeURIComponent(JSON.stringify(queryParam))}`);
|
|
36
35
|
};
|
|
@@ -39,7 +39,6 @@ const fetchTransactionCategorizationEpic = (actions$, state$, zeniAPI) => action
|
|
|
39
39
|
sub_tab: selectedTab === 'autoCategorized'
|
|
40
40
|
? expenseAutomationTransactionsViewState.selectedTransactionCategorizationCompletedSubTab
|
|
41
41
|
: completedSubTab_1.DEFAULT_COMPLETED_SUB_TAB,
|
|
42
|
-
transaction_group: expenseAutomationTransactionsViewState.selectedTransactionGroup,
|
|
43
42
|
};
|
|
44
43
|
return zeniAPI
|
|
45
44
|
.getJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/expense-automation/transactions?query=${encodeURIComponent(JSON.stringify(queryParam))}`)
|
|
@@ -3,7 +3,6 @@ import { TransactionPayload } from '../../../entity/transaction/payloadTypes/tra
|
|
|
3
3
|
import { SupportedTransactionPayload } from '../../../entity/transaction/transactionState';
|
|
4
4
|
import { ZeniAPIResponse } from '../../../responsePayload';
|
|
5
5
|
import { CompletedSubTab } from '../types/completedSubTab';
|
|
6
|
-
import { TransactionGroup } from '../types/transactionGroup';
|
|
7
6
|
export interface TransactionCategorizationQueryPayload {
|
|
8
7
|
auto_categorized: boolean;
|
|
9
8
|
end_date: string | null;
|
|
@@ -27,16 +26,6 @@ export interface TransactionCategorizationQueryPayload {
|
|
|
27
26
|
* that the Receipts manual-match flow relies on.
|
|
28
27
|
*/
|
|
29
28
|
search_all_statuses?: boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Statement-level scope (`'expense' | 'income' | 'all'`). Always sent by the
|
|
32
|
-
* list epics. The backend `is_revenue_automation_enabled` gate is
|
|
33
|
-
* authoritative: when it is off the backend ignores this and returns the
|
|
34
|
-
* legacy expense scope regardless of the value, so there is no need to gate
|
|
35
|
-
* the send on the client (the gate isn't available to the redux epics anyway
|
|
36
|
-
* — it's a Statsig/React-side flag, not a tenant field). Optional only for
|
|
37
|
-
* wire/back-compat tolerance.
|
|
38
|
-
*/
|
|
39
|
-
transaction_group?: TransactionGroup;
|
|
40
29
|
}
|
|
41
30
|
export interface TransactionCategorizationPayload {
|
|
42
31
|
next_page_token: string | null;
|
|
@@ -15,7 +15,6 @@ import { UncategorizedAccounts } from '../../accountList/accountListSelector';
|
|
|
15
15
|
import { UpdateTransactionCategorizationResponsePayload } from '../payload/transactionCategorizationPayload';
|
|
16
16
|
import { TransactionFilters } from '../transactionFilterHelpers';
|
|
17
17
|
import { SupportedTransactionCategorization, TransactionSaveUpdates, TransactionsTab, TransactionsTabViewState, TransactionsViewState, TransactionsViewUIState } from '../types/transactionsViewState';
|
|
18
|
-
export declare const initialUIState: TransactionsViewUIState;
|
|
19
18
|
export declare const initialTransactionTabViewState: TransactionsTabViewState;
|
|
20
19
|
export declare const initialState: TransactionsViewState;
|
|
21
20
|
export declare const fetchTransactionCategorization: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", period: TimePeriod, cacheOverride?: any, keepExistingListItems?: any, searchString?: string | undefined, pageToken?: PageToken | undefined, refreshViewInBackground?: any, resetListItems?: boolean | undefined], {
|
|
@@ -68,9 +67,7 @@ export declare const fetchTransactionCategorization: import("@reduxjs/toolkit").
|
|
|
68
67
|
newSelectedTab: "review" | "autoCategorized";
|
|
69
68
|
}, "expenseAutomationTransactionsView/updateCurrentSelectedTransactionCategorizationTab", never, never>, updateTransactionCategorizationCompletedSubTab: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[newSubTab: "all" | "manual" | "ai_accountant"], {
|
|
70
69
|
newSubTab: "all" | "manual" | "ai_accountant";
|
|
71
|
-
}, "expenseAutomationTransactionsView/updateTransactionCategorizationCompletedSubTab", never, never>,
|
|
72
|
-
newGroup: "income" | "expense" | "all";
|
|
73
|
-
}, "expenseAutomationTransactionsView/updateTransactionGroup", never, never>, updateTransactionCategorizationSaveStatus: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", fetchState: FetchState, error?: ZeniAPIStatus<Record<string, unknown>> | undefined], {
|
|
70
|
+
}, "expenseAutomationTransactionsView/updateTransactionCategorizationCompletedSubTab", never, never>, updateTransactionCategorizationSaveStatus: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", fetchState: FetchState, error?: ZeniAPIStatus<Record<string, unknown>> | undefined], {
|
|
74
71
|
selectedTab: "review" | "autoCategorized";
|
|
75
72
|
fetchState: FetchState;
|
|
76
73
|
error: ZeniAPIStatus<Record<string, unknown>> | undefined;
|
|
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
var _a;
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.uploadTransactionCategorizationReceiptSuccess = exports.updateTransactionCategorizationUploadReceiptState = exports.removeTransactionFromAllTabs = exports.backgroundRefetchReviewTab = exports.syncTransactionCategorizationFromDetailSave = exports.updateSelectedTransactionId = exports.markCategoryClassRecommendationsFailureForCategorization = exports.markCategoryClassRecommendationsCompletedForCategorization = exports.markCategoryClassRecommendationsInProgressForCategorization = exports.setEntityRecommendationForLineIdsForCategorization = exports.clearExpenseAutomationTransactionsView = exports.clearExpenseAutomationTransactionsViewPerTabView = exports.updateSelectedCheckboxTransactionIds = exports.fetchTransactionCategorizationView = exports.resetOtherTabsFetchState = exports.fetchTransactionCategorizationSuccess = exports.updateParentTotalCountForTab = exports.updateTotalCountForTransactionCategorization = exports.setAllItemsToCategoryClassInLocalDataForCategorization = exports.updateSelectedCustomerForTransaction = exports.updateSelectedVendorForTransaction = exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = exports.markTransactionAsNotMiscategorized = exports.updateTransactionCategorizationSaveStatus = exports.
|
|
7
|
+
exports.uploadTransactionCategorizationReceiptSuccess = exports.updateTransactionCategorizationUploadReceiptState = exports.removeTransactionFromAllTabs = exports.backgroundRefetchReviewTab = exports.syncTransactionCategorizationFromDetailSave = exports.updateSelectedTransactionId = exports.markCategoryClassRecommendationsFailureForCategorization = exports.markCategoryClassRecommendationsCompletedForCategorization = exports.markCategoryClassRecommendationsInProgressForCategorization = exports.setEntityRecommendationForLineIdsForCategorization = exports.clearExpenseAutomationTransactionsView = exports.clearExpenseAutomationTransactionsViewPerTabView = exports.updateSelectedCheckboxTransactionIds = exports.fetchTransactionCategorizationView = exports.resetOtherTabsFetchState = exports.fetchTransactionCategorizationSuccess = exports.updateParentTotalCountForTab = exports.updateTotalCountForTransactionCategorization = exports.setAllItemsToCategoryClassInLocalDataForCategorization = exports.updateSelectedCustomerForTransaction = exports.updateSelectedVendorForTransaction = exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = exports.markTransactionAsNotMiscategorized = exports.updateTransactionCategorizationSaveStatus = exports.updateTransactionCategorizationCompletedSubTab = exports.updateCurrentSelectedTransactionCategorizationTab = exports.updateTransactionCategorization = exports.saveTransactionCategorization = exports.fetchTransactionCategorizationFailure = exports.saveTransactionCategorizationLocalData = exports.initializeTransactionCategorizationViewLocalData = exports.updateTransactionFilters = exports.updateTransactionCategorizationUIState = exports.fetchTransactionCategorization = exports.initialState = exports.initialTransactionTabViewState = void 0;
|
|
8
8
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
9
9
|
const get_1 = __importDefault(require("lodash/get"));
|
|
10
10
|
const uniq_1 = __importDefault(require("lodash/uniq"));
|
|
@@ -12,18 +12,7 @@ const timePeriod_1 = require("../../../commonStateTypes/timePeriod");
|
|
|
12
12
|
const vendorTransaction_1 = require("../../../entity/transaction/stateTypes/vendorTransaction");
|
|
13
13
|
const transactionCategorizationLocalDataHelper_1 = require("../helpers/transactionCategorizationLocalDataHelper");
|
|
14
14
|
const completedSubTab_1 = require("../types/completedSubTab");
|
|
15
|
-
const transactionGroup_1 = require("../types/transactionGroup");
|
|
16
15
|
const transactionsViewState_1 = require("../types/transactionsViewState");
|
|
17
|
-
exports.initialUIState = {
|
|
18
|
-
sortKey: 'date',
|
|
19
|
-
sortOrder: 'descending',
|
|
20
|
-
searchString: '',
|
|
21
|
-
nodeCollapseState: {},
|
|
22
|
-
scrollPosition: { scrollTop: 0, scrollLeft: undefined },
|
|
23
|
-
pageToken: null,
|
|
24
|
-
totalCount: {},
|
|
25
|
-
limit: 10,
|
|
26
|
-
};
|
|
27
16
|
exports.initialTransactionTabViewState = {
|
|
28
17
|
saveStatus: {
|
|
29
18
|
fetchState: 'Not-Started',
|
|
@@ -37,7 +26,16 @@ exports.initialTransactionTabViewState = {
|
|
|
37
26
|
fetchState: 'Not-Started',
|
|
38
27
|
error: undefined,
|
|
39
28
|
},
|
|
40
|
-
uiState: {
|
|
29
|
+
uiState: {
|
|
30
|
+
sortKey: 'date',
|
|
31
|
+
sortOrder: 'descending',
|
|
32
|
+
searchString: '',
|
|
33
|
+
nodeCollapseState: {},
|
|
34
|
+
scrollPosition: { scrollTop: 0, scrollLeft: undefined },
|
|
35
|
+
pageToken: null,
|
|
36
|
+
totalCount: {},
|
|
37
|
+
limit: 10,
|
|
38
|
+
},
|
|
41
39
|
filters: {
|
|
42
40
|
categoryCombinationOperator: 'AND',
|
|
43
41
|
categories: [],
|
|
@@ -63,7 +61,6 @@ exports.initialState = {
|
|
|
63
61
|
},
|
|
64
62
|
selectedTransactionCategorizationTab: 'review',
|
|
65
63
|
selectedTransactionCategorizationCompletedSubTab: completedSubTab_1.DEFAULT_COMPLETED_SUB_TAB,
|
|
66
|
-
selectedTransactionGroup: transactionGroup_1.DEFAULT_TRANSACTION_GROUP,
|
|
67
64
|
transactionCategorizationView: {
|
|
68
65
|
review: { ...exports.initialTransactionTabViewState },
|
|
69
66
|
autoCategorized: { ...exports.initialTransactionTabViewState },
|
|
@@ -409,48 +406,6 @@ const expenseAutomationTransactionsView = (0, toolkit_1.createSlice)({
|
|
|
409
406
|
return { payload: { newSubTab } };
|
|
410
407
|
},
|
|
411
408
|
},
|
|
412
|
-
updateTransactionGroup: {
|
|
413
|
-
reducer(draft, action) {
|
|
414
|
-
const { newGroup } = action.payload;
|
|
415
|
-
if (draft.selectedTransactionGroup === newGroup) {
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
draft.selectedTransactionGroup = newGroup;
|
|
419
|
-
// A group change re-scopes the entire dataset on the backend (by
|
|
420
|
-
// account_type), so every parent tab, sub-tab snapshot and count is now
|
|
421
|
-
// stale. Drop the sub-tab cache and parent counts, and reset each tab's
|
|
422
|
-
// paginated data slots so the view epic's cache check falls through to a
|
|
423
|
-
// fresh page-1 fetch. User preferences (search, sort, limit, collapse
|
|
424
|
-
// state) are intentionally preserved, mirroring the sub-tab switch.
|
|
425
|
-
draft.autoCategorizedSubTabCache = {};
|
|
426
|
-
draft.parentTotalCountByTab = { review: {}, autoCategorized: {} };
|
|
427
|
-
transactionsViewState_1.TRANSACTIONS_TABS.forEach((tab) => {
|
|
428
|
-
const view = draft.transactionCategorizationView[tab];
|
|
429
|
-
// Reset uiState to its initial values but keep the user prefs (search,
|
|
430
|
-
// sort, limit, collapse) in place -- mirroring the sub-tab switch. Then
|
|
431
|
-
// drop the loaded rows and any stale selection pointing at a now-absent
|
|
432
|
-
// row to avoid transient invalid state.
|
|
433
|
-
const { searchString, sortKey, sortOrder, nodeCollapseState, limit } = view.uiState;
|
|
434
|
-
view.uiState = {
|
|
435
|
-
...exports.initialUIState,
|
|
436
|
-
searchString,
|
|
437
|
-
sortKey,
|
|
438
|
-
sortOrder,
|
|
439
|
-
nodeCollapseState,
|
|
440
|
-
limit,
|
|
441
|
-
};
|
|
442
|
-
view.transactionIdsBySelectedPeriod = {};
|
|
443
|
-
view.fetchState = 'Not-Started';
|
|
444
|
-
view.error = undefined;
|
|
445
|
-
view.selectedTransactionId = undefined;
|
|
446
|
-
view.selectedTransactionLineId = undefined;
|
|
447
|
-
view.selectedCheckBoxTransactionIds = [];
|
|
448
|
-
});
|
|
449
|
-
},
|
|
450
|
-
prepare(newGroup) {
|
|
451
|
-
return { payload: { newGroup } };
|
|
452
|
-
},
|
|
453
|
-
},
|
|
454
409
|
updateTransactionCategorization: {
|
|
455
410
|
reducer(draft, action) {
|
|
456
411
|
const selectedTab = action.payload.selectedTab;
|
|
@@ -1121,5 +1076,5 @@ const expenseAutomationTransactionsView = (0, toolkit_1.createSlice)({
|
|
|
1121
1076
|
},
|
|
1122
1077
|
},
|
|
1123
1078
|
});
|
|
1124
|
-
_a = expenseAutomationTransactionsView.actions, exports.fetchTransactionCategorization = _a.fetchTransactionCategorization, exports.updateTransactionCategorizationUIState = _a.updateTransactionCategorizationUIState, exports.updateTransactionFilters = _a.updateTransactionFilters, exports.initializeTransactionCategorizationViewLocalData = _a.initializeTransactionCategorizationViewLocalData, exports.saveTransactionCategorizationLocalData = _a.saveTransactionCategorizationLocalData, exports.fetchTransactionCategorizationFailure = _a.fetchTransactionCategorizationFailure, exports.saveTransactionCategorization = _a.saveTransactionCategorization, exports.updateTransactionCategorization = _a.updateTransactionCategorization, exports.updateCurrentSelectedTransactionCategorizationTab = _a.updateCurrentSelectedTransactionCategorizationTab, exports.updateTransactionCategorizationCompletedSubTab = _a.updateTransactionCategorizationCompletedSubTab, exports.
|
|
1079
|
+
_a = expenseAutomationTransactionsView.actions, exports.fetchTransactionCategorization = _a.fetchTransactionCategorization, exports.updateTransactionCategorizationUIState = _a.updateTransactionCategorizationUIState, exports.updateTransactionFilters = _a.updateTransactionFilters, exports.initializeTransactionCategorizationViewLocalData = _a.initializeTransactionCategorizationViewLocalData, exports.saveTransactionCategorizationLocalData = _a.saveTransactionCategorizationLocalData, exports.fetchTransactionCategorizationFailure = _a.fetchTransactionCategorizationFailure, exports.saveTransactionCategorization = _a.saveTransactionCategorization, exports.updateTransactionCategorization = _a.updateTransactionCategorization, exports.updateCurrentSelectedTransactionCategorizationTab = _a.updateCurrentSelectedTransactionCategorizationTab, exports.updateTransactionCategorizationCompletedSubTab = _a.updateTransactionCategorizationCompletedSubTab, exports.updateTransactionCategorizationSaveStatus = _a.updateTransactionCategorizationSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = _a.updateStatusForTransactionNotMiscategorizedUpdateForCategorization, exports.updateSelectedVendorForTransaction = _a.updateSelectedVendorForTransaction, exports.updateSelectedCustomerForTransaction = _a.updateSelectedCustomerForTransaction, exports.setAllItemsToCategoryClassInLocalDataForCategorization = _a.setAllItemsToCategoryClassInLocalDataForCategorization, exports.updateTotalCountForTransactionCategorization = _a.updateTotalCountForTransactionCategorization, exports.updateParentTotalCountForTab = _a.updateParentTotalCountForTab, exports.fetchTransactionCategorizationSuccess = _a.fetchTransactionCategorizationSuccess, exports.resetOtherTabsFetchState = _a.resetOtherTabsFetchState, exports.fetchTransactionCategorizationView = _a.fetchTransactionCategorizationView, exports.updateSelectedCheckboxTransactionIds = _a.updateSelectedCheckboxTransactionIds, exports.clearExpenseAutomationTransactionsViewPerTabView = _a.clearExpenseAutomationTransactionsViewPerTabView, exports.clearExpenseAutomationTransactionsView = _a.clearExpenseAutomationTransactionsView, exports.setEntityRecommendationForLineIdsForCategorization = _a.setEntityRecommendationForLineIdsForCategorization, exports.markCategoryClassRecommendationsInProgressForCategorization = _a.markCategoryClassRecommendationsInProgressForCategorization, exports.markCategoryClassRecommendationsCompletedForCategorization = _a.markCategoryClassRecommendationsCompletedForCategorization, exports.markCategoryClassRecommendationsFailureForCategorization = _a.markCategoryClassRecommendationsFailureForCategorization, exports.updateSelectedTransactionId = _a.updateSelectedTransactionId, exports.syncTransactionCategorizationFromDetailSave = _a.syncTransactionCategorizationFromDetailSave, exports.backgroundRefetchReviewTab = _a.backgroundRefetchReviewTab, exports.removeTransactionFromAllTabs = _a.removeTransactionFromAllTabs, exports.updateTransactionCategorizationUploadReceiptState = _a.updateTransactionCategorizationUploadReceiptState, exports.uploadTransactionCategorizationReceiptSuccess = _a.uploadTransactionCategorizationReceiptSuccess;
|
|
1125
1080
|
exports.default = expenseAutomationTransactionsView.reducer;
|
|
@@ -8,7 +8,6 @@ import { SupportedTransactionWithCOT } from '../../../entity/transaction/transac
|
|
|
8
8
|
import { UncategorizedAccounts } from '../../accountList/accountListSelector';
|
|
9
9
|
import { ProjectListSelectorView } from '../../projectList/projectListSelector';
|
|
10
10
|
import { CompletedSubTab } from '../types/completedSubTab';
|
|
11
|
-
import { TransactionGroup } from '../types/transactionGroup';
|
|
12
11
|
import { TransactionReviewLocalData, TransactionsTab, TransactionsViewUIState } from '../types/transactionsViewState';
|
|
13
12
|
export interface TransactionReviewLocalDataSelectorView {
|
|
14
13
|
transactionId: ID;
|
|
@@ -39,7 +38,6 @@ export interface ExpenseAutomationTransactionViewSelector extends SelectorView {
|
|
|
39
38
|
saveStatus: FetchStateAndError;
|
|
40
39
|
selectedCheckBoxTransactionIds: ID[];
|
|
41
40
|
selectedTransactionCategorizationCompletedSubTab: CompletedSubTab;
|
|
42
|
-
selectedTransactionGroup: TransactionGroup;
|
|
43
41
|
/**
|
|
44
42
|
* Per-(sub-)tab counts mirroring `total_count` from the listing response.
|
|
45
43
|
* Powers pagination via `InfiniteLoader.itemCount`, in-list count copy,
|
|
@@ -96,7 +96,7 @@ var createTransferEntrySelector_2 = require("../../createTransferEntry/createTra
|
|
|
96
96
|
Object.defineProperty(exports, "getLastTransferEntryReplacement", { enumerable: true, get: function () { return createTransferEntrySelector_2.getLastTransferEntryReplacement; } });
|
|
97
97
|
function getExpenseAutomationTransactionView(state) {
|
|
98
98
|
const { accountState, classState, classListState, accountListState, createTransferEntryState, expenseAutomationTransactionsViewState, expenseAutomationViewState, projectState, projectListState, transactionState, monthEndCloseChecksState, } = state;
|
|
99
|
-
const { selectedTransactionCategorizationCompletedSubTab, selectedTransactionCategorizationTab,
|
|
99
|
+
const { selectedTransactionCategorizationCompletedSubTab, selectedTransactionCategorizationTab, } = expenseAutomationTransactionsViewState;
|
|
100
100
|
const { uiState, refreshStatus, saveStatus, markAsNotMiscategorizedStatus, transactionIdsBySelectedPeriod, transactionReviewLocalDataById, selectedCheckBoxTransactionIds, transactionIdsWithUnsavedData, uploadReceiptStatusById, selectedTransactionId, selectedTransactionLineId, filters, } = expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab];
|
|
101
101
|
const uncategorizedIncomeExpense = (0, accountListSelector_1.getUncategorizedAccounts)(accountState, accountListState, 'accountList');
|
|
102
102
|
const accountList = (0, accountListSelector_1.getAccountList)(accountState, accountListState, 'accountList');
|
|
@@ -250,6 +250,5 @@ function getExpenseAutomationTransactionView(state) {
|
|
|
250
250
|
creditCardTransferAccountsList,
|
|
251
251
|
transferAccounts: transferAccountsList,
|
|
252
252
|
selectedTransactionCategorizationCompletedSubTab,
|
|
253
|
-
selectedTransactionGroup,
|
|
254
253
|
};
|
|
255
254
|
}
|
|
@@ -19,7 +19,6 @@ import { EntityRecommendationKey } from '../../recommendation/recommendationStat
|
|
|
19
19
|
import { TransactionDetailKey } from '../../transactionDetail/transactionDetailState';
|
|
20
20
|
import { TransactionFilters } from '../transactionFilterHelpers';
|
|
21
21
|
import { CompletedSubTab } from './completedSubTab';
|
|
22
|
-
import { TransactionGroup } from './transactionGroup';
|
|
23
22
|
export declare const toTransactionsSortKey: (v: string) => "date" | "amount" | "vendor" | "project" | "category" | "class" | "payment_account" | "transaction_type" | "memo_and_receipt";
|
|
24
23
|
export type TransactionsSortKey = ReturnType<typeof toTransactionsSortKey>;
|
|
25
24
|
export declare const TRANSACTIONS_TABS: readonly ["review", "autoCategorized"];
|
|
@@ -148,16 +147,6 @@ export type TransactionsViewState = {
|
|
|
148
147
|
parentTotalCountByTab: Record<TransactionsTab, Record<MonthYearPeriodId, number>>;
|
|
149
148
|
selectedTransactionCategorizationCompletedSubTab: CompletedSubTab;
|
|
150
149
|
selectedTransactionCategorizationTab: TransactionsTab;
|
|
151
|
-
/**
|
|
152
|
-
* Statement-level scope (`'expense' | 'income' | 'all'`) forwarded to the
|
|
153
|
-
* listing API as `transaction_group`. Unlike the in-memory {@link
|
|
154
|
-
* TransactionsTabViewState.filters}, a change here invalidates every tab /
|
|
155
|
-
* sub-tab / count and drives a server refetch (the backend re-scopes the
|
|
156
|
-
* whole dataset by account_type). Only surfaced in the UI when the
|
|
157
|
-
* `is_revenue_automation_enabled` gate is on; the backend gate is
|
|
158
|
-
* authoritative regardless of what is sent.
|
|
159
|
-
*/
|
|
160
|
-
selectedTransactionGroup: TransactionGroup;
|
|
161
150
|
transactionCategorizationView: Record<TransactionsTab, TransactionsTabViewState>;
|
|
162
151
|
};
|
|
163
152
|
export interface TransactionLineUpdates {
|
|
@@ -3,7 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.initialCreateCreditNoteFormLocalData = void 0;
|
|
4
4
|
const initialCreateCreditNoteFormLocalData = () => ({
|
|
5
5
|
customerId: '',
|
|
6
|
-
lineItems: [
|
|
6
|
+
lineItems: [
|
|
7
|
+
{
|
|
8
|
+
description: '',
|
|
9
|
+
quantity: '1',
|
|
10
|
+
},
|
|
11
|
+
],
|
|
7
12
|
reasonCode: '',
|
|
8
13
|
referenceInvoiceId: '',
|
|
9
14
|
});
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.localDataToCreateCreditNotePayload = void 0;
|
|
4
|
-
const dollarsFromAmountString = (value) => {
|
|
5
|
-
const parsed = Number.parseFloat(value);
|
|
6
|
-
if (Number.isNaN(parsed)) {
|
|
7
|
-
return 0;
|
|
8
|
-
}
|
|
9
|
-
return parsed;
|
|
10
|
-
};
|
|
11
4
|
const localDataToCreateCreditNotePayload = (localData) => {
|
|
12
5
|
const lineItems = localData.lineItems
|
|
13
6
|
.map((lineItem) => {
|
|
14
7
|
const quantity = Math.round(Number.parseFloat(lineItem.quantity));
|
|
15
|
-
const unitAmount =
|
|
8
|
+
const unitAmount = lineItem.unitAmount?.amount ?? 0;
|
|
16
9
|
return {
|
|
17
10
|
description: lineItem.description.trim(),
|
|
18
11
|
quantity,
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { Amount } from '../../../commonStateTypes/amount';
|
|
1
2
|
import { FetchedState, ID } from '../../../commonStateTypes/common';
|
|
2
3
|
export interface CreateCreditNoteLineItemDraft {
|
|
3
4
|
description: string;
|
|
4
5
|
quantity: string;
|
|
5
|
-
|
|
6
|
+
/** Unset until entered, so a blank field is distinguishable from a real 0. */
|
|
7
|
+
unitAmount?: Amount;
|
|
6
8
|
}
|
|
7
9
|
export interface CreateCreditNoteFormLocalData {
|
|
8
10
|
customerId: string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Amount } from '../../../commonStateTypes/amount';
|
|
1
2
|
import type { InvoicingPlan } from '../../../entity/invoicing/plan/planState';
|
|
2
3
|
import type { InvoicingProduct } from '../../../entity/invoicing/product/productState';
|
|
3
4
|
import type { InvoicingCatalogItemFormSubFamily } from './editInvoicingCatalogItemDetailViewState';
|
|
@@ -39,12 +40,12 @@ export interface CreateSubFamilyFormValues {
|
|
|
39
40
|
period: string;
|
|
40
41
|
periodUnit: string;
|
|
41
42
|
priceCode: string;
|
|
42
|
-
priceDollars: string;
|
|
43
43
|
pricingModel: string;
|
|
44
44
|
prorationType: string;
|
|
45
45
|
trialEndAction: string;
|
|
46
46
|
trialPeriod: string;
|
|
47
47
|
trialPeriodUnit: string;
|
|
48
|
+
priceDollars?: Amount;
|
|
48
49
|
}
|
|
49
50
|
/** Build POST /catalog/products body for Create sub-family. */
|
|
50
51
|
export declare const createSubFamilyFormToPayload: (itemId: string, itemType: string, values: CreateSubFamilyFormValues) => Record<string, unknown>;
|
|
@@ -35,7 +35,7 @@ const tierToPayload = (tier) => ({
|
|
|
35
35
|
package_size: hasValue(tier.packageSize)
|
|
36
36
|
? Number(tier.packageSize)
|
|
37
37
|
: undefined,
|
|
38
|
-
price:
|
|
38
|
+
price: tier.price?.amount ?? 0,
|
|
39
39
|
pricing_type: tier.pricingType,
|
|
40
40
|
starting_unit: Number(tier.startingUnit) || 1,
|
|
41
41
|
});
|
|
@@ -49,7 +49,7 @@ const subFamilyToProductUpdate = (subFamily, itemType) => {
|
|
|
49
49
|
is_taxable: subFamily.isTaxable,
|
|
50
50
|
period: hasValue(subFamily.period) ? Number(subFamily.period) : null,
|
|
51
51
|
period_unit: hasValue(subFamily.period) ? subFamily.periodUnit : null,
|
|
52
|
-
price: tiered ? 0 :
|
|
52
|
+
price: tiered ? 0 : (subFamily.priceDollars?.amount ?? 0),
|
|
53
53
|
pricing_model: subFamily.pricingModel,
|
|
54
54
|
show_description_in_quotes: subFamily.showDescriptionInQuotes,
|
|
55
55
|
tiers: tiered ? subFamily.tiers.map(tierToPayload) : [],
|
|
@@ -117,7 +117,6 @@ const catalogDetailEditValuesToSavePayload = (values, itemType = 'plan', origina
|
|
|
117
117
|
};
|
|
118
118
|
};
|
|
119
119
|
exports.catalogDetailEditValuesToSavePayload = catalogDetailEditValuesToSavePayload;
|
|
120
|
-
const toAmountValue = (value) => Number(value) || 0;
|
|
121
120
|
/** Build POST /catalog/products body for Create sub-family. */
|
|
122
121
|
const createSubFamilyFormToPayload = (itemId, itemType, values) => {
|
|
123
122
|
const name = values.name.trim();
|
|
@@ -128,7 +127,7 @@ const createSubFamilyFormToPayload = (itemId, itemType, values) => {
|
|
|
128
127
|
is_taxable: true,
|
|
129
128
|
item_id: itemId,
|
|
130
129
|
name,
|
|
131
|
-
price:
|
|
130
|
+
price: values.priceDollars?.amount ?? 0,
|
|
132
131
|
price_code: priceCode,
|
|
133
132
|
pricing_model: values.pricingModel || 'flat_fee',
|
|
134
133
|
show_description_in_invoices: true,
|
|
@@ -168,7 +167,7 @@ const productToCreateSubFamilyFormValues = (product) => ({
|
|
|
168
167
|
period: product?.period != null ? String(product.period) : '1',
|
|
169
168
|
periodUnit: product?.periodUnit ?? 'month',
|
|
170
169
|
priceCode: '',
|
|
171
|
-
priceDollars: product?.price
|
|
170
|
+
priceDollars: product?.price,
|
|
172
171
|
pricingModel: product?.pricingModel ?? 'flat_fee',
|
|
173
172
|
prorationType: product?.prorationType ?? 'site_default',
|
|
174
173
|
trialEndAction: product?.trialEndAction ?? 'site_default',
|
|
@@ -10,17 +10,16 @@ const toProductCode = (value) => value
|
|
|
10
10
|
.toLowerCase()
|
|
11
11
|
.replace(/[^a-z0-9]+/g, '-')
|
|
12
12
|
.replace(/^-|-$/g, '');
|
|
13
|
-
const
|
|
14
|
-
const buildAccountingDetail = (localData) => {
|
|
13
|
+
const buildAccountingDetail = (subFamily) => {
|
|
15
14
|
const detail = {};
|
|
16
|
-
if (
|
|
17
|
-
detail.sku =
|
|
15
|
+
if (subFamily.sku.trim() !== '') {
|
|
16
|
+
detail.sku = subFamily.sku.trim();
|
|
18
17
|
}
|
|
19
|
-
if (
|
|
20
|
-
detail.accounting_code =
|
|
18
|
+
if (subFamily.accountingCode.trim() !== '') {
|
|
19
|
+
detail.accounting_code = subFamily.accountingCode.trim();
|
|
21
20
|
}
|
|
22
|
-
if (
|
|
23
|
-
detail.accounting_category_1 =
|
|
21
|
+
if (subFamily.accountingCategory.trim() !== '') {
|
|
22
|
+
detail.accounting_category_1 = subFamily.accountingCategory.trim();
|
|
24
23
|
}
|
|
25
24
|
return Object.keys(detail).length > 0 ? detail : undefined;
|
|
26
25
|
};
|
|
@@ -34,7 +33,7 @@ const buildSubFamilyPayload = (localData, subFamily, clearEmptyValues) => {
|
|
|
34
33
|
free_quantity: Number(subFamily.freeQuantity) || 0,
|
|
35
34
|
is_taxable: subFamily.isTaxable,
|
|
36
35
|
name,
|
|
37
|
-
price: tiered ? 0 :
|
|
36
|
+
price: tiered ? 0 : (subFamily.priceDollars?.amount ?? 0),
|
|
38
37
|
price_code: priceCode,
|
|
39
38
|
pricing_model: subFamily.pricingModel,
|
|
40
39
|
show_description_in_invoices: subFamily.showDescriptionInInvoices,
|
|
@@ -73,12 +72,12 @@ const buildSubFamilyPayload = (localData, subFamily, clearEmptyValues) => {
|
|
|
73
72
|
payload.tiers = subFamily.tiers.map((tier) => ({
|
|
74
73
|
ending_unit: tier.endingUnit.trim() !== '' ? Number(tier.endingUnit) : undefined,
|
|
75
74
|
package_size: tier.packageSize.trim() !== '' ? Number(tier.packageSize) : undefined,
|
|
76
|
-
price:
|
|
75
|
+
price: tier.price?.amount ?? 0,
|
|
77
76
|
pricing_type: tier.pricingType,
|
|
78
77
|
starting_unit: Number(tier.startingUnit) || 1,
|
|
79
78
|
}));
|
|
80
79
|
}
|
|
81
|
-
const accountingDetail = buildAccountingDetail(
|
|
80
|
+
const accountingDetail = buildAccountingDetail(subFamily);
|
|
82
81
|
if (accountingDetail != null) {
|
|
83
82
|
payload.accounting_detail = accountingDetail;
|
|
84
83
|
}
|
|
@@ -1,15 +1,21 @@
|
|
|
1
|
+
import { Amount } from '../../../commonStateTypes/amount';
|
|
1
2
|
import { FetchedState, ID } from '../../../commonStateTypes/common';
|
|
2
3
|
import { InvoicingCatalogItemKind } from '../invoicingCatalogItemDetailView/invoicingCatalogItemDetailViewState';
|
|
3
4
|
/** A single pricing tier within a sub-family (values kept as raw strings). */
|
|
4
5
|
export interface InvoicingCatalogItemFormTier {
|
|
5
6
|
endingUnit: string;
|
|
6
7
|
packageSize: string;
|
|
7
|
-
price: string;
|
|
8
8
|
pricingType: string;
|
|
9
9
|
startingUnit: string;
|
|
10
|
+
/** Unset until entered, so a blank field is distinguishable from a real 0. */
|
|
11
|
+
price?: Amount;
|
|
10
12
|
}
|
|
11
13
|
/** A sub-family (price point) of a catalog item. */
|
|
12
14
|
export interface InvoicingCatalogItemFormSubFamily {
|
|
15
|
+
/** Accounting integration is per sub-family: the API carries
|
|
16
|
+
* `accounting_detail` on each product, not on the parent item. */
|
|
17
|
+
accountingCategory: string;
|
|
18
|
+
accountingCode: string;
|
|
13
19
|
billingCycles: string;
|
|
14
20
|
description: string;
|
|
15
21
|
freeQuantity: string;
|
|
@@ -20,15 +26,17 @@ export interface InvoicingCatalogItemFormSubFamily {
|
|
|
20
26
|
period: string;
|
|
21
27
|
periodUnit: string;
|
|
22
28
|
priceCode: string;
|
|
23
|
-
priceDollars: string;
|
|
24
29
|
pricingModel: string;
|
|
25
30
|
prorationType: string;
|
|
26
31
|
showDescriptionInInvoices: boolean;
|
|
27
32
|
showDescriptionInQuotes: boolean;
|
|
33
|
+
sku: string;
|
|
28
34
|
tiers: InvoicingCatalogItemFormTier[];
|
|
29
35
|
trialEndAction: string;
|
|
30
36
|
trialPeriod: string;
|
|
31
37
|
trialPeriodUnit: string;
|
|
38
|
+
/** Unset until entered, so a blank field is distinguishable from a real 0. */
|
|
39
|
+
priceDollars?: Amount;
|
|
32
40
|
}
|
|
33
41
|
/**
|
|
34
42
|
* Draft form state for the create/edit catalog item (plan / add-on / one-time
|
|
@@ -37,8 +45,6 @@ export interface InvoicingCatalogItemFormSubFamily {
|
|
|
37
45
|
* every type is persisted as a parent catalog item through `/catalog/plans`.
|
|
38
46
|
*/
|
|
39
47
|
export interface InvoicingCatalogItemFormLocalData {
|
|
40
|
-
accountingCategory: string;
|
|
41
|
-
accountingCode: string;
|
|
42
48
|
applicableItems: string[];
|
|
43
49
|
catalogType: string;
|
|
44
50
|
description: string;
|
|
@@ -46,7 +52,6 @@ export interface InvoicingCatalogItemFormLocalData {
|
|
|
46
52
|
itemApplicability: string;
|
|
47
53
|
name: string;
|
|
48
54
|
productCode: string;
|
|
49
|
-
sku: string;
|
|
50
55
|
subFamilies: InvoicingCatalogItemFormSubFamily[];
|
|
51
56
|
unit: string;
|
|
52
57
|
}
|
package/lib/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js
CHANGED
|
@@ -48,12 +48,13 @@ exports.isTieredCatalogPricingModel = isTieredCatalogPricingModel;
|
|
|
48
48
|
const blankInvoicingCatalogTier = (startingUnit = '1') => ({
|
|
49
49
|
endingUnit: '',
|
|
50
50
|
packageSize: '',
|
|
51
|
-
price: '',
|
|
52
51
|
pricingType: 'per_unit',
|
|
53
52
|
startingUnit,
|
|
54
53
|
});
|
|
55
54
|
exports.blankInvoicingCatalogTier = blankInvoicingCatalogTier;
|
|
56
55
|
const blankInvoicingCatalogSubFamily = () => ({
|
|
56
|
+
accountingCategory: '',
|
|
57
|
+
accountingCode: '',
|
|
57
58
|
billingCycles: '',
|
|
58
59
|
description: '',
|
|
59
60
|
freeQuantity: '0',
|
|
@@ -63,12 +64,12 @@ const blankInvoicingCatalogSubFamily = () => ({
|
|
|
63
64
|
name: '',
|
|
64
65
|
period: '1',
|
|
65
66
|
periodUnit: 'month',
|
|
66
|
-
priceDollars: '',
|
|
67
67
|
priceCode: '',
|
|
68
68
|
pricingModel: 'flat_fee',
|
|
69
69
|
prorationType: 'site_default',
|
|
70
70
|
showDescriptionInInvoices: true,
|
|
71
71
|
showDescriptionInQuotes: true,
|
|
72
|
+
sku: '',
|
|
72
73
|
tiers: [(0, exports.blankInvoicingCatalogTier)('1')],
|
|
73
74
|
trialEndAction: 'site_default',
|
|
74
75
|
trialPeriod: '',
|
|
@@ -82,7 +83,10 @@ const invoicingProductToCatalogItemFormSubFamily = (product) => {
|
|
|
82
83
|
}
|
|
83
84
|
return {
|
|
84
85
|
...base,
|
|
86
|
+
accountingCategory: product.accountingDetail?.accountingCategory1 ?? '',
|
|
87
|
+
accountingCode: product.accountingDetail?.accountingCode ?? '',
|
|
85
88
|
billingCycles: product.billingCycles != null ? String(product.billingCycles) : '',
|
|
89
|
+
sku: product.accountingDetail?.sku ?? '',
|
|
86
90
|
description: product.description ?? '',
|
|
87
91
|
freeQuantity: product.freeQuantity != null ? String(product.freeQuantity) : '0',
|
|
88
92
|
id: product.id,
|
|
@@ -91,7 +95,7 @@ const invoicingProductToCatalogItemFormSubFamily = (product) => {
|
|
|
91
95
|
name: product.name ?? '',
|
|
92
96
|
period: product.period != null ? String(product.period) : '1',
|
|
93
97
|
periodUnit: product.periodUnit ?? 'month',
|
|
94
|
-
priceDollars: product.price
|
|
98
|
+
priceDollars: product.price,
|
|
95
99
|
priceCode: product.priceCode ?? '',
|
|
96
100
|
pricingModel: product.pricingModel ?? 'flat_fee',
|
|
97
101
|
prorationType: product.prorationType ?? 'site_default',
|
|
@@ -101,7 +105,7 @@ const invoicingProductToCatalogItemFormSubFamily = (product) => {
|
|
|
101
105
|
? product.tiers.map((tier) => ({
|
|
102
106
|
endingUnit: tier.endingUnit != null ? String(tier.endingUnit) : '',
|
|
103
107
|
packageSize: tier.packageSize != null ? String(tier.packageSize) : '',
|
|
104
|
-
price:
|
|
108
|
+
price: tier.price,
|
|
105
109
|
pricingType: tier.pricingType ?? 'per_unit',
|
|
106
110
|
startingUnit: String(tier.startingUnit ?? 1),
|
|
107
111
|
}))
|
|
@@ -113,8 +117,6 @@ const invoicingProductToCatalogItemFormSubFamily = (product) => {
|
|
|
113
117
|
};
|
|
114
118
|
exports.invoicingProductToCatalogItemFormSubFamily = invoicingProductToCatalogItemFormSubFamily;
|
|
115
119
|
exports.initialInvoicingCatalogItemFormLocalData = {
|
|
116
|
-
accountingCategory: '',
|
|
117
|
-
accountingCode: '',
|
|
118
120
|
applicableItems: [],
|
|
119
121
|
catalogType: 'plan',
|
|
120
122
|
description: '',
|
|
@@ -122,7 +124,6 @@ exports.initialInvoicingCatalogItemFormLocalData = {
|
|
|
122
124
|
itemApplicability: 'all',
|
|
123
125
|
name: '',
|
|
124
126
|
productCode: '',
|
|
125
|
-
sku: '',
|
|
126
127
|
subFamilies: [(0, exports.blankInvoicingCatalogSubFamily)()],
|
|
127
128
|
unit: '',
|
|
128
129
|
};
|
|
@@ -143,8 +144,6 @@ const entityToInvoicingCatalogItemFormLocalData = (item) => {
|
|
|
143
144
|
? 'addon'
|
|
144
145
|
: 'plan';
|
|
145
146
|
return {
|
|
146
|
-
accountingCategory: plan.subFamilies?.[0]?.accountingDetail?.accountingCategory1 ?? '',
|
|
147
|
-
accountingCode: plan.subFamilies?.[0]?.accountingDetail?.accountingCode ?? '',
|
|
148
147
|
applicableItems: item.applicableItems ?? [],
|
|
149
148
|
catalogType,
|
|
150
149
|
description: item.description ?? '',
|
|
@@ -152,7 +151,6 @@ const entityToInvoicingCatalogItemFormLocalData = (item) => {
|
|
|
152
151
|
itemApplicability: item.itemApplicability ?? 'all',
|
|
153
152
|
name: item.name ?? '',
|
|
154
153
|
productCode: item.productCode ?? '',
|
|
155
|
-
sku: plan.subFamilies?.[0]?.accountingDetail?.sku ?? '',
|
|
156
154
|
subFamilies: plan?.subFamilies != null && plan.subFamilies.length > 0
|
|
157
155
|
? plan.subFamilies.map(exports.invoicingProductToCatalogItemFormSubFamily)
|
|
158
156
|
: [(0, exports.invoicingProductToCatalogItemFormSubFamily)()],
|
package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewPayload.js
CHANGED
|
@@ -25,8 +25,8 @@ const localDataToSaveInvoicingCouponPayload = (localData, isCreate) => {
|
|
|
25
25
|
data.discount_percentage = Number(localData.discountPercentage);
|
|
26
26
|
}
|
|
27
27
|
if (localData.discountType === 'fixed_amount') {
|
|
28
|
-
if (localData.discountAmount
|
|
29
|
-
data.discount_amount =
|
|
28
|
+
if (localData.discountAmount != null) {
|
|
29
|
+
data.discount_amount = localData.discountAmount.amount;
|
|
30
30
|
}
|
|
31
31
|
data.currency_code = 'USD';
|
|
32
32
|
}
|
package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewReducer.js
CHANGED
|
@@ -3,12 +3,12 @@ var _a;
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.resetEditInvoicingCouponDetailView = exports.submitInvoicingCouponFormFailure = exports.submitInvoicingCouponFormSuccess = exports.saveInvoicingCoupon = exports.submitInvoicingCouponForm = exports.updateInvoicingCouponFormDraft = exports.initialState = void 0;
|
|
5
5
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
6
|
-
const
|
|
6
|
+
const editInvoicingCouponDetailViewState_1 = require("./editInvoicingCouponDetailViewState");
|
|
7
7
|
exports.initialState = {
|
|
8
8
|
fetchState: 'Not-Started',
|
|
9
9
|
error: undefined,
|
|
10
10
|
editDraftById: {},
|
|
11
|
-
newCouponDraft: { ...
|
|
11
|
+
newCouponDraft: { ...editInvoicingCouponDetailViewState_1.initialInvoicingCouponFormLocalData },
|
|
12
12
|
savedCouponId: undefined,
|
|
13
13
|
hasValidState() {
|
|
14
14
|
return this.fetchState === 'Completed';
|
|
@@ -61,7 +61,7 @@ const editInvoicingCouponDetailView = (0, toolkit_1.createSlice)({
|
|
|
61
61
|
draft.error = undefined;
|
|
62
62
|
draft.savedCouponId = undefined;
|
|
63
63
|
draft.editDraftById = {};
|
|
64
|
-
draft.newCouponDraft = { ...
|
|
64
|
+
draft.newCouponDraft = { ...editInvoicingCouponDetailViewState_1.initialInvoicingCouponFormLocalData };
|
|
65
65
|
},
|
|
66
66
|
},
|
|
67
67
|
});
|