@zeniai/client-epic-state 5.2.7-betaRD2 → 5.2.8-betaAK0
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 +36 -2
- package/lib/entity/invoicing/invoicingCommonPayload.js +89 -11
- package/lib/entity/invoicing/product/productPayload.d.ts +10 -0
- package/lib/entity/invoicing/product/productPayload.js +14 -2
- package/lib/entity/jeSchedules/jeScheduleHelper.d.ts +0 -1
- package/lib/entity/jeSchedules/jeScheduleHelper.js +0 -7
- package/lib/entity/jeSchedules/jeSchedulesPayload.d.ts +1 -66
- package/lib/entity/jeSchedules/jeSchedulesPayload.js +0 -135
- package/lib/entity/jeSchedules/jeSchedulesReducer.d.ts +2 -4
- package/lib/entity/jeSchedules/jeSchedulesReducer.js +2 -30
- package/lib/entity/jeSchedules/jeSchedulesSelector.d.ts +2 -11
- package/lib/entity/jeSchedules/jeSchedulesSelector.js +3 -38
- package/lib/entity/jeSchedules/jeSchedulesState.d.ts +1 -79
- package/lib/entity/jeSchedules/jeSchedulesTypes.d.ts +1 -24
- package/lib/entity/jeSchedules/jeSchedulesTypes.js +1 -88
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +0 -3
- package/lib/entity/transaction/payloadTypes/scheduleTransactionPayload.d.ts +0 -2
- package/lib/entity/transaction/payloadTypes/scheduleTransactionPayload.js +0 -2
- package/lib/entity/transaction/stateTypes/scheduleTransaction.d.ts +0 -2
- package/lib/epic.d.ts +1 -9
- package/lib/epic.js +0 -16
- package/lib/esm/entity/invoicing/invoicingCommonPayload.js +86 -10
- package/lib/esm/entity/invoicing/product/productPayload.js +14 -2
- package/lib/esm/entity/jeSchedules/jeScheduleHelper.js +0 -6
- package/lib/esm/entity/jeSchedules/jeSchedulesPayload.js +1 -135
- package/lib/esm/entity/jeSchedules/jeSchedulesReducer.js +2 -30
- package/lib/esm/entity/jeSchedules/jeSchedulesSelector.js +2 -36
- package/lib/esm/entity/jeSchedules/jeSchedulesTypes.js +0 -78
- package/lib/esm/entity/snackbar/snackbarTypes.js +0 -3
- package/lib/esm/entity/transaction/payloadTypes/scheduleTransactionPayload.js +0 -2
- package/lib/esm/epic.js +0 -16
- package/lib/esm/index.js +8 -14
- package/lib/esm/view/accountList/accountListReducer.js +0 -1
- package/lib/esm/view/expenseAutomationView/epics/common/fetchAllExpenseAutomationTabsEpic.js +3 -6
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/fetchJeSchedulesEpic.js +5 -41
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/ignoreRecommendedJeScheduleEpic.js +2 -14
- package/lib/esm/view/expenseAutomationView/payload/jeSchedulesPayload.js +0 -55
- package/lib/esm/view/expenseAutomationView/reducers/jeSchedulesViewReducer.js +29 -306
- package/lib/esm/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +22 -294
- package/lib/esm/view/expenseAutomationView/types/jeSchedulesViewState.js +6 -5
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +24 -9
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.js +2 -1
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/saveInvoicingCatalogItemEpic.js +6 -1
- package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.js +2 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingAccountingPickersEpic.js +10 -5
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +47 -3
- package/lib/esm/view/invoicing/settingsView/settingsViewEpics.js +17 -2
- package/lib/esm/view/invoicing/settingsView/settingsViewSelector.js +7 -3
- package/lib/esm/view/scheduleView/scheduleListView/epics/fetchAccruedScheduleListEpic.js +1 -1
- package/lib/esm/view/scheduleView/scheduleListView/epics/fetchDownloadSchedulesEpic.js +2 -7
- package/lib/esm/view/scheduleView/scheduleListView/scheduleListReducer.js +3 -5
- package/lib/index.d.ts +12 -17
- package/lib/index.js +47 -91
- package/lib/view/accountList/accountListReducer.js +0 -1
- package/lib/view/accountList/accountListState.d.ts +1 -1
- package/lib/view/expenseAutomationView/epics/common/fetchAllExpenseAutomationTabsEpic.js +3 -6
- package/lib/view/expenseAutomationView/epics/jeSchedule/fetchJeSchedulesEpic.d.ts +2 -3
- package/lib/view/expenseAutomationView/epics/jeSchedule/fetchJeSchedulesEpic.js +3 -39
- package/lib/view/expenseAutomationView/epics/jeSchedule/ignoreRecommendedJeScheduleEpic.js +2 -14
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/payload/jeSchedulesPayload.d.ts +3 -72
- package/lib/view/expenseAutomationView/payload/jeSchedulesPayload.js +1 -58
- package/lib/view/expenseAutomationView/reducers/jeSchedulesViewReducer.d.ts +12 -91
- package/lib/view/expenseAutomationView/reducers/jeSchedulesViewReducer.js +29 -308
- package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +1 -1
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +2 -2
- package/lib/view/expenseAutomationView/selectorTypes/jeSchedulesSelectorTypes.d.ts +7 -36
- package/lib/view/expenseAutomationView/selectors/jeSchedulesViewSelector.d.ts +0 -34
- package/lib/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +21 -302
- package/lib/view/expenseAutomationView/types/completedSubTab.d.ts +1 -1
- package/lib/view/expenseAutomationView/types/jeSchedulesViewState.d.ts +8 -82
- package/lib/view/expenseAutomationView/types/jeSchedulesViewState.js +8 -8
- package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +1 -1
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.d.ts +12 -1
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +24 -9
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.d.ts +5 -0
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.js +1 -0
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/saveInvoicingCatalogItemEpic.js +6 -1
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.d.ts +1 -0
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.js +2 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingAccountingPickersEpic.js +10 -5
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.d.ts +19 -2
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +52 -4
- package/lib/view/invoicing/settingsView/settingsViewEpics.d.ts +1 -1
- package/lib/view/invoicing/settingsView/settingsViewEpics.js +17 -2
- package/lib/view/invoicing/settingsView/settingsViewSelector.d.ts +11 -4
- package/lib/view/invoicing/settingsView/settingsViewSelector.js +7 -3
- package/lib/view/scheduleView/scheduleListView/epics/fetchAccruedScheduleListEpic.js +1 -1
- package/lib/view/scheduleView/scheduleListView/epics/fetchDownloadSchedulesEpic.js +2 -7
- package/lib/view/scheduleView/scheduleListView/scheduleListReducer.d.ts +2 -4
- package/lib/view/scheduleView/scheduleListView/scheduleListReducer.js +3 -5
- package/package.json +1 -1
- package/lib/commonStateTypes/selectorTypes/pickAndMergeForecastSection.d.ts +0 -0
- package/lib/commonStateTypes/selectorTypes/pickAndMergeForecastSection.js +0 -1
- package/lib/entity/invoicing/coupon/couponConstants.d.ts +0 -11
- package/lib/entity/invoicing/coupon/couponConstants.js +0 -29
- package/lib/esm/commonStateTypes/selectorTypes/pickAndMergeForecastSection.js +0 -1
- package/lib/esm/entity/invoicing/coupon/couponConstants.js +0 -26
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/fetchOneTimeAccrualEpic.js +0 -45
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/newSchedule/createOneTimeAccrualEpic.js +0 -99
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/newSchedule/initializeNewScheduleEpic.js +0 -25
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/newSchedule/saveNewScheduleEpic.js +0 -110
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/newSchedule/searchTransactionsForNewScheduleEpic.js +0 -79
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/oneTimeAccrualActionsEpic.js +0 -139
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/revertJeScheduleEpic.js +0 -106
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/switchJESchedulesTabEpic.js +0 -22
- package/lib/esm/view/expenseAutomationView/helpers/newScheduleLocalDataHelper.js +0 -140
- package/lib/esm/view/expenseAutomationView/selectorTypes/jeNewScheduleViewSelectorTypes.js +0 -1
- package/lib/esm/view/expenseAutomationView/selectors/jeNewScheduleViewSelector.js +0 -106
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.js +0 -25
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.js +0 -15
- package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.js +0 -18
- package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.js +0 -18
- package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryVideoViewedEpic.js +0 -18
- package/lib/esm/view/zeniAccountsPromoCard/zeniAccountsPromoCardEpic.js +0 -16
- package/lib/esm/view/zeniAccountsPromoCard/zeniAccountsPromoCardPayload.js +0 -1
- package/lib/esm/view/zeniAccountsPromoCard/zeniAccountsPromoCardReducer.js +0 -60
- package/lib/esm/view/zeniAccountsPromoCard/zeniAccountsPromoCardSelector.js +0 -12
- package/lib/esm/view/zeniAccountsPromoCard/zeniAccountsPromoCardState.js +0 -1
- package/lib/view/expenseAutomationView/epics/jeSchedule/fetchOneTimeAccrualEpic.d.ts +0 -20
- package/lib/view/expenseAutomationView/epics/jeSchedule/fetchOneTimeAccrualEpic.js +0 -49
- package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/createOneTimeAccrualEpic.d.ts +0 -8
- package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/createOneTimeAccrualEpic.js +0 -103
- package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/initializeNewScheduleEpic.d.ts +0 -8
- package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/initializeNewScheduleEpic.js +0 -29
- package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/saveNewScheduleEpic.d.ts +0 -45
- package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/saveNewScheduleEpic.js +0 -114
- package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/searchTransactionsForNewScheduleEpic.d.ts +0 -8
- package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/searchTransactionsForNewScheduleEpic.js +0 -83
- package/lib/view/expenseAutomationView/epics/jeSchedule/oneTimeAccrualActionsEpic.d.ts +0 -12
- package/lib/view/expenseAutomationView/epics/jeSchedule/oneTimeAccrualActionsEpic.js +0 -146
- package/lib/view/expenseAutomationView/epics/jeSchedule/revertJeScheduleEpic.d.ts +0 -64
- package/lib/view/expenseAutomationView/epics/jeSchedule/revertJeScheduleEpic.js +0 -110
- package/lib/view/expenseAutomationView/epics/jeSchedule/switchJESchedulesTabEpic.d.ts +0 -6
- package/lib/view/expenseAutomationView/epics/jeSchedule/switchJESchedulesTabEpic.js +0 -26
- package/lib/view/expenseAutomationView/helpers/newScheduleLocalDataHelper.d.ts +0 -36
- package/lib/view/expenseAutomationView/helpers/newScheduleLocalDataHelper.js +0 -145
- package/lib/view/expenseAutomationView/selectorTypes/jeNewScheduleViewSelectorTypes.d.ts +0 -42
- package/lib/view/expenseAutomationView/selectorTypes/jeNewScheduleViewSelectorTypes.js +0 -2
- package/lib/view/expenseAutomationView/selectors/jeNewScheduleViewSelector.d.ts +0 -21
- package/lib/view/expenseAutomationView/selectors/jeNewScheduleViewSelector.js +0 -112
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.d.ts +0 -6
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.js +0 -29
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.d.ts +0 -6
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.js +0 -19
- package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.d.ts +0 -8
- package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.js +0 -22
- package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.d.ts +0 -8
- package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.js +0 -22
- package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryVideoViewedEpic.d.ts +0 -8
- package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryVideoViewedEpic.js +0 -22
- package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardEpic.d.ts +0 -13
- package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardEpic.js +0 -20
- package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardPayload.d.ts +0 -11
- package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardPayload.js +0 -2
- package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardReducer.d.ts +0 -7
- package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardReducer.js +0 -64
- package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardSelector.d.ts +0 -12
- package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardSelector.js +0 -15
- package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardState.d.ts +0 -9
- package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardState.js +0 -2
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { AccountBasePayload } from '../account/accountPayload';
|
|
2
|
+
import { AccountBase } from '../account/accountState';
|
|
1
3
|
import { AddressPayload } from '../address/addressPayload';
|
|
2
4
|
export type InvoicingPriceType = 'tax_exclusive' | 'tax_inclusive';
|
|
3
5
|
export declare const INVOICING_DUNNING_ACTIONS: readonly ["email_only", "email_and_retry", "do_nothing", "retry_only"];
|
|
@@ -88,23 +90,55 @@ export interface InvoicingStripeAccountPayload {
|
|
|
88
90
|
export declare const INVOICING_QBO_CUSTOMER_MATCHING_MODES: readonly ["link_existing", "always_create"];
|
|
89
91
|
export type InvoicingQboCustomerMatchingMode = (typeof INVOICING_QBO_CUSTOMER_MATCHING_MODES)[number];
|
|
90
92
|
export declare function toInvoicingQboCustomerMatchingMode(value: string): InvoicingQboCustomerMatchingMode;
|
|
93
|
+
/**
|
|
94
|
+
* A mapped account as the newer settings payload returns it: the platform id,
|
|
95
|
+
* plus hydrated fields the client only displays.
|
|
96
|
+
*/
|
|
97
|
+
/**
|
|
98
|
+
* Account mappings arrive in two shapes. The original sends a bare id per slot
|
|
99
|
+
* (`deposit_account_id`); the newer one sends the account itself
|
|
100
|
+
* (`deposit_account`). Both are declared because a tenant can be served either
|
|
101
|
+
* depending on when its backend rolled, and a page that understands only one
|
|
102
|
+
* renders an empty picker over data that exists. `Partial` because a read may
|
|
103
|
+
* carry only the ids, while a write sends a whole `AccountBasePayload`.
|
|
104
|
+
*/
|
|
91
105
|
export interface InvoicingQboAccountMappingsPayload {
|
|
106
|
+
default_income_account?: Partial<AccountBasePayload> | null;
|
|
92
107
|
default_income_account_id?: string | null;
|
|
108
|
+
deposit_account?: Partial<AccountBasePayload> | null;
|
|
93
109
|
deposit_account_id?: string | null;
|
|
94
110
|
deposit_account_overrides?: Record<string, string> | null;
|
|
111
|
+
discounts_account?: Partial<AccountBasePayload> | null;
|
|
95
112
|
discounts_account_id?: string | null;
|
|
113
|
+
rounding_account?: Partial<AccountBasePayload> | null;
|
|
96
114
|
rounding_account_id?: string | null;
|
|
115
|
+
write_off_account?: Partial<AccountBasePayload> | null;
|
|
97
116
|
write_off_account_id?: string | null;
|
|
98
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* The id for one mapping slot, from whichever shape the backend sent. The object
|
|
120
|
+
* form wins when present; a blank id in either is treated as unset so the picker
|
|
121
|
+
* shows its placeholder rather than selecting nothing.
|
|
122
|
+
*/
|
|
123
|
+
/**
|
|
124
|
+
* The first id a picker can actually select. Callers list the QuickBooks id
|
|
125
|
+
* first: the options are keyed on it, so an internal id selects nothing even
|
|
126
|
+
* when it names the same record. Blank counts as absent, so a cleared field
|
|
127
|
+
* falls through to the next candidate rather than selecting an empty option.
|
|
128
|
+
*/
|
|
129
|
+
export declare const firstSelectableInvoicingId: (candidates: readonly (string | null | undefined)[]) => string | undefined;
|
|
99
130
|
/**
|
|
100
131
|
* Read one account-mapping dropdown value by its config `code` (the codes in
|
|
101
132
|
* `qbo_account_mapping_kind_options` match the `account_mappings` field names).
|
|
102
133
|
*/
|
|
103
134
|
export declare function getInvoicingQboAccountMappingId(accountMappings: InvoicingQboAccountMappingsPayload | undefined, code: string): string | undefined;
|
|
104
135
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
136
|
+
* Expand each mapping from the id the picker submitted to the whole account, the
|
|
137
|
+
* shape the service stores. Written at the request boundary rather than in the
|
|
138
|
+
* page's draft so the UI keeps working in ids, and an id that no longer resolves
|
|
139
|
+
* is left out — a mapping the service cannot expand is worse than none.
|
|
107
140
|
*/
|
|
141
|
+
export declare const withInvoicingQboMappedAccounts: (accountMappings: InvoicingQboAccountMappingsPayload | undefined, accountByQboId: (qboId: string) => AccountBase | undefined) => InvoicingQboAccountMappingsPayload | undefined;
|
|
108
142
|
export declare function withInvoicingQboAccountMappingId(accountMappings: InvoicingQboAccountMappingsPayload | undefined, code: string, accountId: string): InvoicingQboAccountMappingsPayload;
|
|
109
143
|
export interface InvoicingQboSettingsPayload {
|
|
110
144
|
account_mappings?: InvoicingQboAccountMappingsPayload | null;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ALL_INVOICING_FIELD_HELP_GROUPS = exports.INVOICING_QBO_CUSTOMER_MATCHING_MODES = exports.INVOICING_DISCOUNT_LIFECYCLE_ACTIONS = exports.INVOICING_CATALOG_PRODUCT_LIFECYCLE_ACTIONS = exports.INVOICING_CATALOG_ITEM_LIFECYCLE_ACTIONS = exports.INVOICING_SUBSCRIPTION_LIFECYCLE_ACTIONS = exports.INVOICING_DUNNING_ACTIONS = void 0;
|
|
3
|
+
exports.ALL_INVOICING_FIELD_HELP_GROUPS = exports.withInvoicingQboMappedAccounts = exports.firstSelectableInvoicingId = exports.INVOICING_QBO_CUSTOMER_MATCHING_MODES = exports.INVOICING_DISCOUNT_LIFECYCLE_ACTIONS = exports.INVOICING_CATALOG_PRODUCT_LIFECYCLE_ACTIONS = exports.INVOICING_CATALOG_ITEM_LIFECYCLE_ACTIONS = exports.INVOICING_SUBSCRIPTION_LIFECYCLE_ACTIONS = exports.INVOICING_DUNNING_ACTIONS = void 0;
|
|
4
4
|
exports.toInvoicingDunningAction = toInvoicingDunningAction;
|
|
5
5
|
exports.toInvoicingSubscriptionLifecycleAction = toInvoicingSubscriptionLifecycleAction;
|
|
6
6
|
exports.toInvoicingSubscriptionLifecycleActionOption = toInvoicingSubscriptionLifecycleActionOption;
|
|
@@ -23,6 +23,7 @@ exports.toInvoicingSubscriptionEditFieldOption = toInvoicingSubscriptionEditFiel
|
|
|
23
23
|
exports.toAuditLogEntityRouteOption = toAuditLogEntityRouteOption;
|
|
24
24
|
exports.buildInvoicingEntityPath = buildInvoicingEntityPath;
|
|
25
25
|
exports.isInvoicingEntityLinkable = isInvoicingEntityLinkable;
|
|
26
|
+
const accountPayload_1 = require("../account/accountPayload");
|
|
26
27
|
exports.INVOICING_DUNNING_ACTIONS = [
|
|
27
28
|
'email_only',
|
|
28
29
|
'email_and_retry',
|
|
@@ -153,6 +154,28 @@ function toInvoicingQboCustomerMatchingMode(value) {
|
|
|
153
154
|
throw new Error(`Unknown InvoicingQboCustomerMatchingMode: ${value}`);
|
|
154
155
|
}
|
|
155
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* The id for one mapping slot, from whichever shape the backend sent. The object
|
|
159
|
+
* form wins when present; a blank id in either is treated as unset so the picker
|
|
160
|
+
* shows its placeholder rather than selecting nothing.
|
|
161
|
+
*/
|
|
162
|
+
/**
|
|
163
|
+
* The first id a picker can actually select. Callers list the QuickBooks id
|
|
164
|
+
* first: the options are keyed on it, so an internal id selects nothing even
|
|
165
|
+
* when it names the same record. Blank counts as absent, so a cleared field
|
|
166
|
+
* falls through to the next candidate rather than selecting an empty option.
|
|
167
|
+
*/
|
|
168
|
+
const firstSelectableInvoicingId = (candidates) => candidates.find((candidate) => candidate != null && candidate !== '');
|
|
169
|
+
exports.firstSelectableInvoicingId = firstSelectableInvoicingId;
|
|
170
|
+
function readInvoicingQboMappedAccountId(mappedAccount, legacyAccountId) {
|
|
171
|
+
// Both shapes are read: the mapping arrives either way depending on how it
|
|
172
|
+
// was saved.
|
|
173
|
+
return (0, exports.firstSelectableInvoicingId)([
|
|
174
|
+
mappedAccount?.qbo_id,
|
|
175
|
+
mappedAccount?.account_id,
|
|
176
|
+
legacyAccountId,
|
|
177
|
+
]);
|
|
178
|
+
}
|
|
156
179
|
/**
|
|
157
180
|
* Read one account-mapping dropdown value by its config `code` (the codes in
|
|
158
181
|
* `qbo_account_mapping_kind_options` match the `account_mappings` field names).
|
|
@@ -160,15 +183,15 @@ function toInvoicingQboCustomerMatchingMode(value) {
|
|
|
160
183
|
function getInvoicingQboAccountMappingId(accountMappings, code) {
|
|
161
184
|
switch (code) {
|
|
162
185
|
case 'deposit_account_id':
|
|
163
|
-
return accountMappings?.deposit_account_id
|
|
186
|
+
return readInvoicingQboMappedAccountId(accountMappings?.deposit_account, accountMappings?.deposit_account_id);
|
|
164
187
|
case 'default_income_account_id':
|
|
165
|
-
return accountMappings?.default_income_account_id
|
|
188
|
+
return readInvoicingQboMappedAccountId(accountMappings?.default_income_account, accountMappings?.default_income_account_id);
|
|
166
189
|
case 'discounts_account_id':
|
|
167
|
-
return accountMappings?.discounts_account_id
|
|
190
|
+
return readInvoicingQboMappedAccountId(accountMappings?.discounts_account, accountMappings?.discounts_account_id);
|
|
168
191
|
case 'rounding_account_id':
|
|
169
|
-
return accountMappings?.rounding_account_id
|
|
192
|
+
return readInvoicingQboMappedAccountId(accountMappings?.rounding_account, accountMappings?.rounding_account_id);
|
|
170
193
|
case 'write_off_account_id':
|
|
171
|
-
return accountMappings?.write_off_account_id
|
|
194
|
+
return readInvoicingQboMappedAccountId(accountMappings?.write_off_account, accountMappings?.write_off_account_id);
|
|
172
195
|
default:
|
|
173
196
|
return undefined;
|
|
174
197
|
}
|
|
@@ -177,19 +200,74 @@ function getInvoicingQboAccountMappingId(accountMappings, code) {
|
|
|
177
200
|
* Return a copy of the account mappings with the dropdown slot named by
|
|
178
201
|
* `code` set to `accountId`. Unknown codes leave the mappings unchanged.
|
|
179
202
|
*/
|
|
203
|
+
/** The object key holding the mapped account for each `*_account_id` code. */
|
|
204
|
+
const INVOICING_QBO_MAPPED_ACCOUNT_KEY = {
|
|
205
|
+
default_income_account_id: 'default_income_account',
|
|
206
|
+
deposit_account_id: 'deposit_account',
|
|
207
|
+
discounts_account_id: 'discounts_account',
|
|
208
|
+
rounding_account_id: 'rounding_account',
|
|
209
|
+
write_off_account_id: 'write_off_account',
|
|
210
|
+
};
|
|
211
|
+
/**
|
|
212
|
+
* Expand each mapping from the id the picker submitted to the whole account, the
|
|
213
|
+
* shape the service stores. Written at the request boundary rather than in the
|
|
214
|
+
* page's draft so the UI keeps working in ids, and an id that no longer resolves
|
|
215
|
+
* is left out — a mapping the service cannot expand is worse than none.
|
|
216
|
+
*/
|
|
217
|
+
const withInvoicingQboMappedAccounts = (accountMappings, accountByQboId) => {
|
|
218
|
+
if (accountMappings == null) {
|
|
219
|
+
return undefined;
|
|
220
|
+
}
|
|
221
|
+
const expanded = { ...accountMappings };
|
|
222
|
+
Object.entries(INVOICING_QBO_MAPPED_ACCOUNT_KEY).forEach(([code, objectKey]) => {
|
|
223
|
+
const accountId = getInvoicingQboAccountMappingId(accountMappings, code);
|
|
224
|
+
if (accountId == null) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const account = accountByQboId(accountId);
|
|
228
|
+
expanded[objectKey] =
|
|
229
|
+
account != null ? (0, accountPayload_1.toAccountPayload)(account) : undefined;
|
|
230
|
+
expanded[code] = undefined;
|
|
231
|
+
});
|
|
232
|
+
return expanded;
|
|
233
|
+
};
|
|
234
|
+
exports.withInvoicingQboMappedAccounts = withInvoicingQboMappedAccounts;
|
|
180
235
|
function withInvoicingQboAccountMappingId(accountMappings, code, accountId) {
|
|
236
|
+
// Both slots are written together. Setting only the bare id would leave the
|
|
237
|
+
// object shape behind, and the reader prefers it — so the selection just made
|
|
238
|
+
// would read back as whatever was mapped before.
|
|
181
239
|
const base = accountMappings ?? {};
|
|
182
240
|
switch (code) {
|
|
183
241
|
case 'deposit_account_id':
|
|
184
|
-
return {
|
|
242
|
+
return {
|
|
243
|
+
...base,
|
|
244
|
+
deposit_account: undefined,
|
|
245
|
+
deposit_account_id: accountId,
|
|
246
|
+
};
|
|
185
247
|
case 'default_income_account_id':
|
|
186
|
-
return {
|
|
248
|
+
return {
|
|
249
|
+
...base,
|
|
250
|
+
default_income_account: undefined,
|
|
251
|
+
default_income_account_id: accountId,
|
|
252
|
+
};
|
|
187
253
|
case 'discounts_account_id':
|
|
188
|
-
return {
|
|
254
|
+
return {
|
|
255
|
+
...base,
|
|
256
|
+
discounts_account: undefined,
|
|
257
|
+
discounts_account_id: accountId,
|
|
258
|
+
};
|
|
189
259
|
case 'rounding_account_id':
|
|
190
|
-
return {
|
|
260
|
+
return {
|
|
261
|
+
...base,
|
|
262
|
+
rounding_account: undefined,
|
|
263
|
+
rounding_account_id: accountId,
|
|
264
|
+
};
|
|
191
265
|
case 'write_off_account_id':
|
|
192
|
-
return {
|
|
266
|
+
return {
|
|
267
|
+
...base,
|
|
268
|
+
write_off_account: undefined,
|
|
269
|
+
write_off_account_id: accountId,
|
|
270
|
+
};
|
|
193
271
|
default:
|
|
194
272
|
return base;
|
|
195
273
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { AccountBasePayload } from '../../account/accountPayload';
|
|
2
|
+
import { ClassBasePayload } from '../../class/classPayload';
|
|
1
3
|
import { InvoicingPlanTier, InvoicingProduct } from './productState';
|
|
2
4
|
export interface InvoicingPlanTierPayload {
|
|
3
5
|
price: number;
|
|
@@ -7,10 +9,18 @@ export interface InvoicingPlanTierPayload {
|
|
|
7
9
|
pricing_type?: string;
|
|
8
10
|
}
|
|
9
11
|
export interface InvoicingAccountingDetailPayload {
|
|
12
|
+
/**
|
|
13
|
+
* `account` and `accounting_class` hold whole records — what the service stores
|
|
14
|
+
* and what the catalog payload builder sends. The bare `accounting_code` /
|
|
15
|
+
* `accounting_category_1` are the older shape, still read so a plan saved
|
|
16
|
+
* before the rollover prefills.
|
|
17
|
+
*/
|
|
18
|
+
account?: Partial<AccountBasePayload> | null;
|
|
10
19
|
accounting_category_1?: string;
|
|
11
20
|
accounting_category_2?: string;
|
|
12
21
|
accounting_category_3?: string;
|
|
13
22
|
accounting_category_4?: string;
|
|
23
|
+
accounting_class?: Partial<ClassBasePayload> | null;
|
|
14
24
|
accounting_code?: string;
|
|
15
25
|
sku?: string;
|
|
16
26
|
}
|
|
@@ -4,6 +4,7 @@ exports.mapInvoicingProductPayloadToState = exports.mapInvoicingPlanTierPayloadT
|
|
|
4
4
|
const amount_1 = require("../../../commonStateTypes/amount");
|
|
5
5
|
const currencyHelper_1 = require("../../../commonStateTypes/currencyHelper");
|
|
6
6
|
const zeniDayJS_1 = require("../../../zeniDayJS");
|
|
7
|
+
const invoicingCommonPayload_1 = require("../invoicingCommonPayload");
|
|
7
8
|
// ── Payload → State mappers (snake_case wire shape → camelCase domain shape) ──
|
|
8
9
|
const mapInvoicingPlanTierPayloadToState = (payload, currencyCode, currencySymbol) => ({
|
|
9
10
|
price: (0, amount_1.toAmount)(payload.price, currencyCode, currencySymbol),
|
|
@@ -14,11 +15,22 @@ const mapInvoicingPlanTierPayloadToState = (payload, currencyCode, currencySymbo
|
|
|
14
15
|
});
|
|
15
16
|
exports.mapInvoicingPlanTierPayloadToState = mapInvoicingPlanTierPayloadToState;
|
|
16
17
|
const mapInvoicingAccountingDetailPayloadToState = (payload) => ({
|
|
17
|
-
|
|
18
|
+
// The QuickBooks id first in both, for the reason `firstSelectableInvoicingId`
|
|
19
|
+
// documents: the form's pickers are keyed on it, so reading the internal id
|
|
20
|
+
// would leave the field blank over a mapping that exists.
|
|
21
|
+
accountingCategory1: (0, invoicingCommonPayload_1.firstSelectableInvoicingId)([
|
|
22
|
+
payload.accounting_class?.qbo_id,
|
|
23
|
+
payload.accounting_class?.accounting_class_id,
|
|
24
|
+
payload.accounting_category_1,
|
|
25
|
+
]),
|
|
18
26
|
accountingCategory2: payload.accounting_category_2,
|
|
19
27
|
accountingCategory3: payload.accounting_category_3,
|
|
20
28
|
accountingCategory4: payload.accounting_category_4,
|
|
21
|
-
accountingCode:
|
|
29
|
+
accountingCode: (0, invoicingCommonPayload_1.firstSelectableInvoicingId)([
|
|
30
|
+
payload.account?.qbo_id,
|
|
31
|
+
payload.account?.account_id,
|
|
32
|
+
payload.accounting_code,
|
|
33
|
+
]),
|
|
22
34
|
sku: payload.sku,
|
|
23
35
|
});
|
|
24
36
|
const mapInvoicingProductPayloadToState = (payload) => {
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateJEScheduleKey = generateJEScheduleKey;
|
|
4
|
-
exports.generateJEOneTimeAccrualKey = generateJEOneTimeAccrualKey;
|
|
5
4
|
function generateJEScheduleKey(jeScheduleId, jeScheduleType) {
|
|
6
5
|
return `${jeScheduleId}_${jeScheduleType}`;
|
|
7
6
|
}
|
|
8
|
-
// Suffixed rather than using the bare Mongo _id so the key is a distinct type from
|
|
9
|
-
// JEScheduleKey / JEScheduleTransactionKey and the three cannot be passed interchangeably.
|
|
10
|
-
// The unsuffixed id stays on the entity as `accrualId` for callers that need it.
|
|
11
|
-
function generateJEOneTimeAccrualKey(accrualId) {
|
|
12
|
-
return `${accrualId}_one_time_accrual`;
|
|
13
|
-
}
|
|
@@ -7,7 +7,7 @@ import { TransactionIDPayload } from '../transaction/payloadTypes/transactionIDP
|
|
|
7
7
|
import { TransactionCategory } from '../transaction/stateTypes/transactionType';
|
|
8
8
|
import { UserPayload } from '../user/userPayload';
|
|
9
9
|
import { VendorPayload } from '../vendor/vendorPayload';
|
|
10
|
-
import { JEAccruedScheduledTransactionState,
|
|
10
|
+
import { JEAccruedScheduledTransactionState, JEScheduledTransactionState, ScheduledJournalEntryState } from './jeSchedulesState';
|
|
11
11
|
import { JEScheduleKey, JEScheduleTransactionKey } from './jeSchedulesTypes';
|
|
12
12
|
export interface JEScheduleOtherAttributesPayload {
|
|
13
13
|
asset_id?: string | null;
|
|
@@ -72,13 +72,9 @@ export interface JEScheduledTransactionPayload {
|
|
|
72
72
|
updated_by: UserPayload;
|
|
73
73
|
vendor: VendorPayload;
|
|
74
74
|
ai_summaries?: JEScheduleAISummariesPayload;
|
|
75
|
-
confidence_score?: number | null;
|
|
76
|
-
create_time?: string | null;
|
|
77
75
|
created_by?: UserPayload;
|
|
78
76
|
end_date?: string | null;
|
|
79
|
-
posted_count?: number | null;
|
|
80
77
|
recommendations?: JEScheduleRecommendationsPayload;
|
|
81
|
-
recurring_amount?: number | null;
|
|
82
78
|
updated_at?: string | null;
|
|
83
79
|
}
|
|
84
80
|
export interface JEAccruedScheduledTransactionPayload extends Omit<JEScheduledTransactionPayload, 'base_transaction' | 'je_schedule_id' | 'je_schedule_type'> {
|
|
@@ -88,66 +84,6 @@ export interface JEAccruedScheduledTransactionPayload extends Omit<JEScheduledTr
|
|
|
88
84
|
memo: string;
|
|
89
85
|
recurring_amount: number;
|
|
90
86
|
}
|
|
91
|
-
/**
|
|
92
|
-
* The frozen vendor profile the Cron used to decide an accrual, so the detail page can show its
|
|
93
|
-
* reasoning even after the live profile is rebuilt. Present on agent/Cron rows ONLY — a human-created
|
|
94
|
-
* accrual carries none, which is why every consumer has to treat it as absent rather than empty.
|
|
95
|
-
*/
|
|
96
|
-
export interface JEOneTimeAccrualProfileSnapshotPayload {
|
|
97
|
-
billing_pattern?: {
|
|
98
|
-
avg_amount?: number | null;
|
|
99
|
-
billing_lag_days?: number | null;
|
|
100
|
-
consistency_score?: number | null;
|
|
101
|
-
frequency?: string | null;
|
|
102
|
-
last_bill_amount?: number | null;
|
|
103
|
-
last_bill_date?: string | null;
|
|
104
|
-
months_of_history?: number | null;
|
|
105
|
-
typical_bill_day?: number | null;
|
|
106
|
-
} | null;
|
|
107
|
-
monthly_totals?: Record<string, number> | null;
|
|
108
|
-
sorted_months?: string[] | null;
|
|
109
|
-
}
|
|
110
|
-
/** The JE the AI originally suggested, frozen at draft time for suggested-vs-posted comparison. */
|
|
111
|
-
export interface JEOneTimeAccrualAiSuggestionPayload {
|
|
112
|
-
estimated_amount?: number | null;
|
|
113
|
-
je_credit_account_id?: ID | null;
|
|
114
|
-
je_credit_account_name?: string | null;
|
|
115
|
-
je_debit_account_id?: ID | null;
|
|
116
|
-
je_debit_account_name?: string | null;
|
|
117
|
-
memo?: string | null;
|
|
118
|
-
}
|
|
119
|
-
export interface JEOneTimeAccrualPayload {
|
|
120
|
-
_id: ID;
|
|
121
|
-
estimated_amount: number;
|
|
122
|
-
origin: string;
|
|
123
|
-
service_month: string;
|
|
124
|
-
status: string;
|
|
125
|
-
vendor_id: ID;
|
|
126
|
-
vendor_name: string;
|
|
127
|
-
actual_post_date?: string | null;
|
|
128
|
-
actual_reversal_post_date?: string | null;
|
|
129
|
-
ai_suggestion?: JEOneTimeAccrualAiSuggestionPayload | null;
|
|
130
|
-
automation_tier?: string | null;
|
|
131
|
-
created_by_user?: UserPayload | null;
|
|
132
|
-
currency?: string | null;
|
|
133
|
-
expected_reversal_date?: string | null;
|
|
134
|
-
je_credit_account_id?: ID | null;
|
|
135
|
-
je_credit_account_name?: string | null;
|
|
136
|
-
je_credit_accounting_class_id?: ID | null;
|
|
137
|
-
je_credit_accounting_class_name?: string | null;
|
|
138
|
-
je_debit_account_id?: ID | null;
|
|
139
|
-
je_debit_account_name?: string | null;
|
|
140
|
-
je_debit_accounting_class_id?: ID | null;
|
|
141
|
-
je_debit_accounting_class_name?: string | null;
|
|
142
|
-
memo?: string | null;
|
|
143
|
-
posting_date?: string | null;
|
|
144
|
-
profile_snapshot?: JEOneTimeAccrualProfileSnapshotPayload | null;
|
|
145
|
-
reversal_policy?: string | null;
|
|
146
|
-
reversal_transaction_id?: ID | null;
|
|
147
|
-
reversal_trigger?: string | null;
|
|
148
|
-
transaction_id?: ID | null;
|
|
149
|
-
transaction_integration_id?: ID | null;
|
|
150
|
-
}
|
|
151
87
|
export interface ScheduledJournalEntryPayload {
|
|
152
88
|
actual_post_date: string | null;
|
|
153
89
|
create_time: string | null;
|
|
@@ -178,4 +114,3 @@ export declare function getJEScheduleTransactionDetailKeyPayload(payload: Schedu
|
|
|
178
114
|
export declare function getJEScheduleKey(payload: JEAccruedScheduledTransactionPayload): JEScheduleKey;
|
|
179
115
|
export declare function toJEScheduledTransaction(payload: JEScheduledTransactionPayload): JEScheduledTransactionState;
|
|
180
116
|
export declare function toJEAccruedScheduledTransaction(payload: JEAccruedScheduledTransactionPayload): JEAccruedScheduledTransactionState;
|
|
181
|
-
export declare function toJEOneTimeAccrual(payload: JEOneTimeAccrualPayload): JEOneTimeAccrualState;
|
|
@@ -8,15 +8,12 @@ exports.getJEScheduleTransactionDetailKeyPayload = getJEScheduleTransactionDetai
|
|
|
8
8
|
exports.getJEScheduleKey = getJEScheduleKey;
|
|
9
9
|
exports.toJEScheduledTransaction = toJEScheduledTransaction;
|
|
10
10
|
exports.toJEAccruedScheduledTransaction = toJEAccruedScheduledTransaction;
|
|
11
|
-
exports.toJEOneTimeAccrual = toJEOneTimeAccrual;
|
|
12
11
|
const amount_1 = require("../../commonStateTypes/amount");
|
|
13
12
|
const timePeriod_1 = require("../../commonStateTypes/timePeriod");
|
|
14
13
|
const zeniDayJS_1 = require("../../zeniDayJS");
|
|
15
|
-
const zeniUrl_1 = require("../../zeniUrl");
|
|
16
14
|
const transactionIDPayload_1 = require("../transaction/payloadTypes/transactionIDPayload");
|
|
17
15
|
const jeScheduleHelper_1 = require("./jeScheduleHelper");
|
|
18
16
|
const jeSchedulesTypes_1 = require("./jeSchedulesTypes");
|
|
19
|
-
const USD_CURRENCY_CODE = 'USD';
|
|
20
17
|
function toScheduledJournalEntryState(payload, currency_code, currency_symbol) {
|
|
21
18
|
return {
|
|
22
19
|
status: {
|
|
@@ -261,18 +258,9 @@ function toJEScheduledTransaction(payload) {
|
|
|
261
258
|
startDate: payload.start_date != null ? (0, zeniDayJS_1.date)(payload.start_date) : undefined,
|
|
262
259
|
endDate: payload.end_date != null ? (0, zeniDayJS_1.date)(payload.end_date) : undefined,
|
|
263
260
|
period: payload.period != null ? Number(payload.period) : undefined,
|
|
264
|
-
recurringAmount: payload.recurring_amount != null
|
|
265
|
-
? {
|
|
266
|
-
amount: payload.recurring_amount,
|
|
267
|
-
currencyCode: payload.currency_code,
|
|
268
|
-
currencySymbol: payload.currency_symbol,
|
|
269
|
-
}
|
|
270
|
-
: undefined,
|
|
271
|
-
postedCount: payload.posted_count ?? undefined,
|
|
272
261
|
updatedByUserID: payload.updated_by.user_id,
|
|
273
262
|
balanceAsOfToday: payload.balance ?? undefined,
|
|
274
263
|
updatedAt: payload.updated_at != null ? (0, zeniDayJS_1.date)(payload.updated_at) : undefined,
|
|
275
|
-
createTime: payload.create_time != null ? (0, zeniDayJS_1.date)(payload.create_time) : undefined,
|
|
276
264
|
jeCredit: {
|
|
277
265
|
accountId: payload.je_credit_account_id ?? undefined,
|
|
278
266
|
accountingClassId: payload.je_credit_accounting_class_id ?? undefined,
|
|
@@ -297,7 +285,6 @@ function toJEScheduledTransaction(payload) {
|
|
|
297
285
|
: {},
|
|
298
286
|
scheduledJournalEntry: [],
|
|
299
287
|
aiSummaries: toJEScheduleAISummaries(payload.ai_summaries),
|
|
300
|
-
confidenceScore: payload.confidence_score ?? undefined,
|
|
301
288
|
createdByUserID: payload.created_by?.user_id ?? undefined,
|
|
302
289
|
recommendations: toJEScheduleRecommendations(payload.recommendations),
|
|
303
290
|
};
|
|
@@ -355,125 +342,3 @@ function toJEAccruedScheduledTransaction(payload) {
|
|
|
355
342
|
jeScheduleType: (0, jeSchedulesTypes_1.toScheduleTypesTypeStrict)(payload.je_schedule_type),
|
|
356
343
|
};
|
|
357
344
|
}
|
|
358
|
-
/**
|
|
359
|
-
* Reads the months in the order the snapshot gives them rather than deriving a range: a vendor that
|
|
360
|
-
* skipped a month has no entry for it, so filling gaps would invent history that was never billed.
|
|
361
|
-
*/
|
|
362
|
-
function toJEOneTimeAccrualMonthlyTotals(snapshot, currencyCode) {
|
|
363
|
-
const monthlyTotals = snapshot.monthly_totals;
|
|
364
|
-
if (monthlyTotals == null) {
|
|
365
|
-
return [];
|
|
366
|
-
}
|
|
367
|
-
const months = snapshot.sorted_months ?? Object.keys(monthlyTotals).sort();
|
|
368
|
-
return months
|
|
369
|
-
.filter((month) => monthlyTotals[month] != null)
|
|
370
|
-
.map((month) => ({
|
|
371
|
-
month,
|
|
372
|
-
amount: toOneTimeAccrualAmount(monthlyTotals[month], currencyCode),
|
|
373
|
-
}));
|
|
374
|
-
}
|
|
375
|
-
function toJEOneTimeAccrualProfileSnapshot(payload, currencyCode) {
|
|
376
|
-
if (payload == null) {
|
|
377
|
-
return undefined;
|
|
378
|
-
}
|
|
379
|
-
const billingPattern = payload.billing_pattern;
|
|
380
|
-
return {
|
|
381
|
-
monthlyTotals: toJEOneTimeAccrualMonthlyTotals(payload, currencyCode),
|
|
382
|
-
billingPattern: billingPattern != null
|
|
383
|
-
? {
|
|
384
|
-
frequency: billingPattern.frequency ?? undefined,
|
|
385
|
-
monthsOfHistory: billingPattern.months_of_history ?? undefined,
|
|
386
|
-
consistencyScore: billingPattern.consistency_score ?? undefined,
|
|
387
|
-
billingLagDays: billingPattern.billing_lag_days ?? undefined,
|
|
388
|
-
typicalBillDay: billingPattern.typical_bill_day ?? undefined,
|
|
389
|
-
avgAmount: billingPattern.avg_amount != null
|
|
390
|
-
? toOneTimeAccrualAmount(billingPattern.avg_amount, currencyCode)
|
|
391
|
-
: undefined,
|
|
392
|
-
lastBillAmount: billingPattern.last_bill_amount != null
|
|
393
|
-
? toOneTimeAccrualAmount(billingPattern.last_bill_amount, currencyCode)
|
|
394
|
-
: undefined,
|
|
395
|
-
lastBillDate: billingPattern.last_bill_date != null
|
|
396
|
-
? (0, zeniDayJS_1.date)(billingPattern.last_bill_date)
|
|
397
|
-
: undefined,
|
|
398
|
-
}
|
|
399
|
-
: undefined,
|
|
400
|
-
};
|
|
401
|
-
}
|
|
402
|
-
function toJEOneTimeAccrualAiSuggestion(payload, currencyCode) {
|
|
403
|
-
if (payload == null) {
|
|
404
|
-
return undefined;
|
|
405
|
-
}
|
|
406
|
-
return {
|
|
407
|
-
memo: payload.memo ?? undefined,
|
|
408
|
-
jeDebitAccountName: payload.je_debit_account_name ?? undefined,
|
|
409
|
-
jeCreditAccountName: payload.je_credit_account_name ?? undefined,
|
|
410
|
-
estimatedAmount: payload.estimated_amount != null
|
|
411
|
-
? toOneTimeAccrualAmount(payload.estimated_amount, currencyCode)
|
|
412
|
-
: undefined,
|
|
413
|
-
};
|
|
414
|
-
}
|
|
415
|
-
function toJEOneTimeAccrual(payload) {
|
|
416
|
-
return {
|
|
417
|
-
accrualId: payload._id,
|
|
418
|
-
vendorId: payload.vendor_id,
|
|
419
|
-
vendorName: payload.vendor_name,
|
|
420
|
-
serviceMonth: payload.service_month,
|
|
421
|
-
accrualStatus: (0, jeSchedulesTypes_1.toOneTimeAccrualStatusCodeType)(payload.status),
|
|
422
|
-
origin: (0, jeSchedulesTypes_1.toOneTimeAccrualOriginType)(payload.origin),
|
|
423
|
-
automationTier: payload.automation_tier != null
|
|
424
|
-
? (0, jeSchedulesTypes_1.toOneTimeAccrualAutomationTierType)(payload.automation_tier)
|
|
425
|
-
: undefined,
|
|
426
|
-
estimatedAmount: toOneTimeAccrualAmount(payload.estimated_amount, payload.currency),
|
|
427
|
-
memo: payload.memo ?? '',
|
|
428
|
-
profileSnapshot: toJEOneTimeAccrualProfileSnapshot(payload.profile_snapshot, payload.currency),
|
|
429
|
-
aiSuggestion: toJEOneTimeAccrualAiSuggestion(payload.ai_suggestion, payload.currency),
|
|
430
|
-
// Exclusive by contract: a scheduled row reverses on expectedReversalDate and bills never
|
|
431
|
-
// drive it, so the two never need reconciling. Defaulting to on_bill_match matches the
|
|
432
|
-
// create path's default when the field is absent on an older document.
|
|
433
|
-
reversalPolicy: (0, jeSchedulesTypes_1.toOneTimeAccrualReversalPolicyType)(payload.reversal_policy ?? 'on_bill_match'),
|
|
434
|
-
reversalTrigger: (0, jeSchedulesTypes_1.toOneTimeAccrualReversalTriggerType)(payload.reversal_trigger ?? undefined),
|
|
435
|
-
expectedReversalDate: payload.expected_reversal_date != null
|
|
436
|
-
? (0, zeniDayJS_1.date)(payload.expected_reversal_date)
|
|
437
|
-
: undefined,
|
|
438
|
-
postingDate: payload.posting_date != null ? (0, zeniDayJS_1.date)(payload.posting_date) : undefined,
|
|
439
|
-
actualPostDate: payload.actual_post_date != null
|
|
440
|
-
? (0, zeniDayJS_1.date)(payload.actual_post_date)
|
|
441
|
-
: undefined,
|
|
442
|
-
actualReversalPostDate: payload.actual_reversal_post_date != null
|
|
443
|
-
? (0, zeniDayJS_1.date)(payload.actual_reversal_post_date)
|
|
444
|
-
: undefined,
|
|
445
|
-
jeDebitAccountId: payload.je_debit_account_id ?? undefined,
|
|
446
|
-
jeDebitAccountName: payload.je_debit_account_name ?? undefined,
|
|
447
|
-
jeDebitAccountingClassId: payload.je_debit_accounting_class_id ?? undefined,
|
|
448
|
-
jeDebitAccountingClassName: payload.je_debit_accounting_class_name ?? undefined,
|
|
449
|
-
jeCreditAccountId: payload.je_credit_account_id ?? undefined,
|
|
450
|
-
jeCreditAccountName: payload.je_credit_account_name ?? undefined,
|
|
451
|
-
jeCreditAccountingClassId: payload.je_credit_accounting_class_id ?? undefined,
|
|
452
|
-
jeCreditAccountingClassName: payload.je_credit_accounting_class_name ?? undefined,
|
|
453
|
-
transactionId: payload.transaction_id ?? undefined,
|
|
454
|
-
transactionIntegrationId: payload.transaction_integration_id ?? undefined,
|
|
455
|
-
reversalTransactionId: payload.reversal_transaction_id ?? undefined,
|
|
456
|
-
createdBy: toJEOneTimeAccrualCreator(payload.created_by_user),
|
|
457
|
-
};
|
|
458
|
-
}
|
|
459
|
-
// The accrual wire format carries a currency CODE but no symbol, so the symbol has to be derived.
|
|
460
|
-
// Only USD has a known glyph today (the create path is USD-only); anything else falls back to the
|
|
461
|
-
// code, which reads correctly as "EUR 1,200" rather than silently rendering a wrong "$".
|
|
462
|
-
function toOneTimeAccrualAmount(amount, currencyCode) {
|
|
463
|
-
const code = currencyCode ?? USD_CURRENCY_CODE;
|
|
464
|
-
return (0, amount_1.toAmount)(amount, code, code === USD_CURRENCY_CODE ? '$' : code);
|
|
465
|
-
}
|
|
466
|
-
function toJEOneTimeAccrualCreator(payload) {
|
|
467
|
-
if (payload == null) {
|
|
468
|
-
return undefined;
|
|
469
|
-
}
|
|
470
|
-
return {
|
|
471
|
-
userId: payload.user_id,
|
|
472
|
-
email: payload.email ?? undefined,
|
|
473
|
-
firstName: payload.first_name ?? undefined,
|
|
474
|
-
lastName: payload.last_name ?? undefined,
|
|
475
|
-
photo: payload.photo?.original != null
|
|
476
|
-
? (0, zeniUrl_1.toZeniUrl)(payload.photo.original)
|
|
477
|
-
: undefined,
|
|
478
|
-
};
|
|
479
|
-
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UpdateType } from '../../commonStateTypes/common';
|
|
2
|
-
import { JEAccruedScheduledTransactionPayload,
|
|
2
|
+
import { JEAccruedScheduledTransactionPayload, JEScheduledTransactionPayload, ScheduledJournalEntryPayload } from './jeSchedulesPayload';
|
|
3
3
|
import { JESchedulesState } from './jeSchedulesState';
|
|
4
4
|
export declare const initialState: JESchedulesState;
|
|
5
5
|
export declare const updateJESchedules: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[jeSchedulesTransactionsPayload: JEScheduledTransactionPayload[]], {
|
|
@@ -22,8 +22,6 @@ export declare const updateJESchedules: import("@reduxjs/toolkit").ActionCreator
|
|
|
22
22
|
jeScheduleTransactionKey: `${string}_expense_${string}` | `${string}_check_${string}` | `${string}_invoice_${string}` | `${string}_payment_${string}` | `${string}_credit_memo_${string}` | `${string}_sales_receipt_${string}` | `${string}_delayed_credit_${string}` | `${string}_delayed_charge_${string}` | `${string}_refund_${string}` | `${string}_bill_${string}` | `${string}_bill_payment_${string}` | `${string}_bill_payment_check_${string}` | `${string}_bill_payment_credit_card_${string}` | `${string}_vendor_credit_${string}` | `${string}_credit_card_credit_${string}` | `${string}_transfer_${string}` | `${string}_credit_card_payment_${string}` | `${string}_deposit_${string}` | `${string}_journal_entry_${string}`;
|
|
23
23
|
}, "jeSchedules/deleteJESchedulesDetails", never, never>, deleteAccruedJESchedulesDetails: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[JEScheduleKey: `${string}_${string}`], {
|
|
24
24
|
JEScheduleKey: `${string}_${string}`;
|
|
25
|
-
}, "jeSchedules/deleteAccruedJESchedulesDetails", never, never
|
|
26
|
-
jeOneTimeAccrualsPayload: JEOneTimeAccrualPayload[];
|
|
27
|
-
}, "jeSchedules/updateJEOneTimeAccruals", never, never>;
|
|
25
|
+
}, "jeSchedules/deleteAccruedJESchedulesDetails", never, never>;
|
|
28
26
|
declare const _default: import("redux").Reducer<JESchedulesState>;
|
|
29
27
|
export default _default;
|
|
@@ -4,16 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
var _a;
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
7
|
+
exports.deleteAccruedJESchedulesDetails = exports.deleteJESchedulesDetails = exports.updateAccruedJESchedulesDetails = exports.updateJESchedulesDetails = exports.updateAccruedJEScheduledTransaction = exports.updateJEScheduledTransaction = exports.updateAccruedJESchedules = exports.updateJESchedules = exports.initialState = void 0;
|
|
8
8
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
9
9
|
const assignWith_1 = __importDefault(require("lodash/assignWith"));
|
|
10
10
|
const rootActions_1 = require("../../rootActions");
|
|
11
|
-
const jeScheduleHelper_1 = require("./jeScheduleHelper");
|
|
12
11
|
const jeSchedulesPayload_1 = require("./jeSchedulesPayload");
|
|
13
12
|
exports.initialState = {
|
|
14
13
|
schedulesByTransactionKey: {},
|
|
15
14
|
schedulesByAccruedJEScheduleKey: {},
|
|
16
|
-
oneTimeAccrualsByKey: {},
|
|
17
15
|
};
|
|
18
16
|
const jeSchedules = (0, toolkit_1.createSlice)({
|
|
19
17
|
name: 'jeSchedules',
|
|
@@ -118,41 +116,15 @@ const jeSchedules = (0, toolkit_1.createSlice)({
|
|
|
118
116
|
delete draft.schedulesByAccruedJEScheduleKey[JEScheduleKey];
|
|
119
117
|
},
|
|
120
118
|
},
|
|
121
|
-
// Writes directly, unlike updateAccruedJESchedules / updateJESchedules, which are no-op
|
|
122
|
-
// actions whose only job is to trigger the entity fan-out epic that fetches vendors,
|
|
123
|
-
// accounts, classes and users. An accrual denormalizes all of those as names on the document,
|
|
124
|
-
// so there is nothing to fan out to.
|
|
125
|
-
updateJEOneTimeAccruals: {
|
|
126
|
-
prepare(jeOneTimeAccrualsPayload) {
|
|
127
|
-
return {
|
|
128
|
-
payload: {
|
|
129
|
-
jeOneTimeAccrualsPayload,
|
|
130
|
-
},
|
|
131
|
-
};
|
|
132
|
-
},
|
|
133
|
-
reducer(draft, action) {
|
|
134
|
-
action.payload.jeOneTimeAccrualsPayload.forEach((accrualPayload) => {
|
|
135
|
-
const accrual = (0, jeSchedulesPayload_1.toJEOneTimeAccrual)(accrualPayload);
|
|
136
|
-
draft.oneTimeAccrualsByKey[(0, jeScheduleHelper_1.generateJEOneTimeAccrualKey)(accrual.accrualId)] = accrual;
|
|
137
|
-
});
|
|
138
|
-
},
|
|
139
|
-
},
|
|
140
|
-
clearAllJEScheduleTransactions(draft) {
|
|
141
|
-
draft.schedulesByTransactionKey = {};
|
|
142
|
-
},
|
|
143
|
-
clearAllAccruedJESchedules(draft) {
|
|
144
|
-
draft.schedulesByAccruedJEScheduleKey = {};
|
|
145
|
-
},
|
|
146
119
|
},
|
|
147
120
|
extraReducers: (builder) => {
|
|
148
121
|
builder.addCase(rootActions_1.clearAll, (draft) => {
|
|
149
122
|
draft.schedulesByAccruedJEScheduleKey = {};
|
|
150
123
|
draft.schedulesByTransactionKey = {};
|
|
151
|
-
draft.oneTimeAccrualsByKey = {};
|
|
152
124
|
});
|
|
153
125
|
},
|
|
154
126
|
});
|
|
155
|
-
_a = jeSchedules.actions, exports.updateJESchedules = _a.updateJESchedules, exports.updateAccruedJESchedules = _a.updateAccruedJESchedules, exports.updateJEScheduledTransaction = _a.updateJEScheduledTransaction, exports.updateAccruedJEScheduledTransaction = _a.updateAccruedJEScheduledTransaction, exports.updateJESchedulesDetails = _a.updateJESchedulesDetails, exports.updateAccruedJESchedulesDetails = _a.updateAccruedJESchedulesDetails, exports.deleteJESchedulesDetails = _a.deleteJESchedulesDetails, exports.deleteAccruedJESchedulesDetails = _a.deleteAccruedJESchedulesDetails
|
|
127
|
+
_a = jeSchedules.actions, exports.updateJESchedules = _a.updateJESchedules, exports.updateAccruedJESchedules = _a.updateAccruedJESchedules, exports.updateJEScheduledTransaction = _a.updateJEScheduledTransaction, exports.updateAccruedJEScheduledTransaction = _a.updateAccruedJEScheduledTransaction, exports.updateJESchedulesDetails = _a.updateJESchedulesDetails, exports.updateAccruedJESchedulesDetails = _a.updateAccruedJESchedulesDetails, exports.deleteJESchedulesDetails = _a.deleteJESchedulesDetails, exports.deleteAccruedJESchedulesDetails = _a.deleteAccruedJESchedulesDetails;
|
|
156
128
|
exports.default = jeSchedules.reducer;
|
|
157
129
|
/**
|
|
158
130
|
* Helper functions
|