@zeniai/client-epic-state 5.1.77 → 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 +5 -1
- package/lib/esm/reducer.js +3 -0
- 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 +7 -1
- package/lib/index.js +20 -4
- package/lib/reducer.d.ts +3 -0
- package/lib/reducer.js +3 -0
- 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/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.js +0 -44
- package/lib/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.d.ts +0 -5
- package/lib/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.js +0 -48
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { catchError, filter, map, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
4
|
+
import { mapInvoicingQboAccountOptions, } from '../invoicingQboViewPayload';
|
|
5
|
+
import { fetchInvoicingQboAccounts, updateInvoicingQboAccounts, updateInvoicingQboAccountsFailure, } from '../invoicingQboViewReducer';
|
|
6
|
+
export const fetchInvoicingQboAccountsEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(fetchInvoicingQboAccounts.match), mergeMap((action) => {
|
|
7
|
+
const { accountTypes } = action.payload;
|
|
8
|
+
const apiUrl = `${zeniAPI.apiEndPoints.invoicingMicroServiceBaseUrl}/1.0/qbo/accounts?account_types=${encodeURIComponent(accountTypes)}`;
|
|
9
|
+
return zeniAPI.getJSON(apiUrl).pipe(map((response) => {
|
|
10
|
+
if (isSuccessResponse(response)) {
|
|
11
|
+
return updateInvoicingQboAccounts({
|
|
12
|
+
accountTypes,
|
|
13
|
+
accounts: mapInvoicingQboAccountOptions(response.data?.accounts ?? []),
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return updateInvoicingQboAccountsFailure({
|
|
17
|
+
accountTypes,
|
|
18
|
+
status: response.status,
|
|
19
|
+
});
|
|
20
|
+
}), catchError((error) => of(updateInvoicingQboAccountsFailure({
|
|
21
|
+
accountTypes,
|
|
22
|
+
status: createZeniAPIStatus('Unexpected Error', 'Fetch QBO accounts REST API call errored out ' +
|
|
23
|
+
JSON.stringify(error)),
|
|
24
|
+
}))));
|
|
25
|
+
}));
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { catchError, filter, map, switchMap } from 'rxjs/operators';
|
|
3
|
+
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
4
|
+
import { mapInvoicingQboAccountOptions, } from '../invoicingQboViewPayload';
|
|
5
|
+
import { fetchInvoicingQboClasses, updateInvoicingQboClasses, updateInvoicingQboClassesFailure, } from '../invoicingQboViewReducer';
|
|
6
|
+
export const fetchInvoicingQboClassesEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(fetchInvoicingQboClasses.match), switchMap(() => {
|
|
7
|
+
const apiUrl = `${zeniAPI.apiEndPoints.invoicingMicroServiceBaseUrl}/1.0/qbo/classes`;
|
|
8
|
+
return zeniAPI.getJSON(apiUrl).pipe(map((response) => {
|
|
9
|
+
if (isSuccessResponse(response)) {
|
|
10
|
+
return updateInvoicingQboClasses(mapInvoicingQboAccountOptions(response.data?.accounts ?? []));
|
|
11
|
+
}
|
|
12
|
+
return updateInvoicingQboClassesFailure(response.status);
|
|
13
|
+
}), catchError((error) => of(updateInvoicingQboClassesFailure(createZeniAPIStatus('Unexpected Error', 'Fetch QBO classes REST API call errored out ' +
|
|
14
|
+
JSON.stringify(error))))));
|
|
15
|
+
}));
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { catchError, filter, map, switchMap } from 'rxjs/operators';
|
|
3
|
+
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
4
|
+
import { mapInvoicingQboConnection, } from '../invoicingQboViewPayload';
|
|
5
|
+
import { fetchInvoicingQboConnection, updateInvoicingQboConnection, updateInvoicingQboConnectionFailure, } from '../invoicingQboViewReducer';
|
|
6
|
+
export const fetchInvoicingQboConnectionEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(fetchInvoicingQboConnection.match), switchMap(() => {
|
|
7
|
+
const apiUrl = `${zeniAPI.apiEndPoints.invoicingMicroServiceBaseUrl}/1.0/qbo/connection`;
|
|
8
|
+
return zeniAPI.getJSON(apiUrl).pipe(map((response) => {
|
|
9
|
+
if (isSuccessResponse(response)) {
|
|
10
|
+
return updateInvoicingQboConnection(mapInvoicingQboConnection(response.data ?? { connected: false }));
|
|
11
|
+
}
|
|
12
|
+
return updateInvoicingQboConnectionFailure(response.status);
|
|
13
|
+
}), catchError((error) => of(updateInvoicingQboConnectionFailure(createZeniAPIStatus('Unexpected Error', 'Fetch QBO connection REST API call errored out ' +
|
|
14
|
+
JSON.stringify(error))))));
|
|
15
|
+
}));
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { catchError, filter, map, switchMap } from 'rxjs/operators';
|
|
3
|
+
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
4
|
+
import { mapInvoicingQboSyncHealth, } from '../invoicingQboViewPayload';
|
|
5
|
+
import { fetchInvoicingQboSyncHealth, updateInvoicingQboSyncHealth, updateInvoicingQboSyncHealthFailure, } from '../invoicingQboViewReducer';
|
|
6
|
+
export const fetchInvoicingQboSyncHealthEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(fetchInvoicingQboSyncHealth.match), switchMap(() => {
|
|
7
|
+
const apiUrl = `${zeniAPI.apiEndPoints.invoicingMicroServiceBaseUrl}/1.0/qbo/sync-health`;
|
|
8
|
+
return zeniAPI.getJSON(apiUrl).pipe(map((response) => {
|
|
9
|
+
if (isSuccessResponse(response)) {
|
|
10
|
+
return updateInvoicingQboSyncHealth(mapInvoicingQboSyncHealth(response.data ?? {}));
|
|
11
|
+
}
|
|
12
|
+
return updateInvoicingQboSyncHealthFailure(response.status);
|
|
13
|
+
}), catchError((error) => of(updateInvoicingQboSyncHealthFailure(createZeniAPIStatus('Unexpected Error', 'Fetch QBO sync health REST API call errored out ' +
|
|
14
|
+
JSON.stringify(error))))));
|
|
15
|
+
}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { catchError, filter, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
4
|
+
import { fetchInvoicingQboSyncHealth, retryInvoicingQboSyncTask, retryInvoicingQboSyncTaskFailure, retryInvoicingQboSyncTaskSuccess, } from '../invoicingQboViewReducer';
|
|
5
|
+
export const retryInvoicingQboSyncTaskEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(retryInvoicingQboSyncTask.match), mergeMap((action) => {
|
|
6
|
+
const { taskId } = action.payload;
|
|
7
|
+
const apiUrl = `${zeniAPI.apiEndPoints.invoicingMicroServiceBaseUrl}/1.0/qbo/sync-tasks/${encodeURIComponent(taskId)}/retry`;
|
|
8
|
+
return zeniAPI
|
|
9
|
+
.postAndGetJSON(apiUrl, {})
|
|
10
|
+
.pipe(mergeMap((response) => {
|
|
11
|
+
if (isSuccessResponse(response)) {
|
|
12
|
+
return of(retryInvoicingQboSyncTaskSuccess({
|
|
13
|
+
status: response.data?.status ?? '',
|
|
14
|
+
taskId: response.data?.task_id ?? taskId,
|
|
15
|
+
}), fetchInvoicingQboSyncHealth());
|
|
16
|
+
}
|
|
17
|
+
return of(retryInvoicingQboSyncTaskFailure({
|
|
18
|
+
status: response.status,
|
|
19
|
+
taskId,
|
|
20
|
+
}));
|
|
21
|
+
}), catchError((error) => of(retryInvoicingQboSyncTaskFailure({
|
|
22
|
+
status: createZeniAPIStatus('Unexpected Error', 'Retry QBO sync task REST API call errored out ' +
|
|
23
|
+
JSON.stringify(error)),
|
|
24
|
+
taskId,
|
|
25
|
+
}))));
|
|
26
|
+
}));
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { catchError, filter, mergeMap, switchMap } from 'rxjs/operators';
|
|
3
|
+
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
4
|
+
import { fetchInvoicingQboSyncHealth, startInvoicingQboBackfill, startInvoicingQboBackfillFailure, startInvoicingQboBackfillSuccess, } from '../invoicingQboViewReducer';
|
|
5
|
+
export const startInvoicingQboBackfillEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(startInvoicingQboBackfill.match), switchMap((action) => {
|
|
6
|
+
const apiUrl = `${zeniAPI.apiEndPoints.invoicingMicroServiceBaseUrl}/1.0/qbo/backfill`;
|
|
7
|
+
return zeniAPI
|
|
8
|
+
.postAndGetJSON(apiUrl, {
|
|
9
|
+
start_date: action.payload.startDate,
|
|
10
|
+
})
|
|
11
|
+
.pipe(mergeMap((response) => {
|
|
12
|
+
if (isSuccessResponse(response)) {
|
|
13
|
+
return of(startInvoicingQboBackfillSuccess(), fetchInvoicingQboSyncHealth());
|
|
14
|
+
}
|
|
15
|
+
return of(startInvoicingQboBackfillFailure(response.status));
|
|
16
|
+
}), catchError((error) => of(startInvoicingQboBackfillFailure(createZeniAPIStatus('Unexpected Error', 'Start QBO backfill REST API call errored out ' +
|
|
17
|
+
JSON.stringify(error))))));
|
|
18
|
+
}));
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export function mapInvoicingQboConnection(payload) {
|
|
2
|
+
return {
|
|
3
|
+
connected: payload.connected,
|
|
4
|
+
companyName: payload.company_name ?? undefined,
|
|
5
|
+
connectionId: payload.connection_id ?? undefined,
|
|
6
|
+
realmId: payload.realm_id ?? undefined,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export function mapInvoicingQboAccountOptions(rows) {
|
|
10
|
+
return rows.flatMap((row) => {
|
|
11
|
+
// Only qbo_id is a valid QBO AccountRef/ClassRef value — platform-internal
|
|
12
|
+
// ids (account_id / id) are display metadata and must never be submitted.
|
|
13
|
+
const accountId = row.qbo_id ?? row.id ?? row.account_id ?? '';
|
|
14
|
+
if (accountId === '') {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
const accountName = row.name ??
|
|
18
|
+
row.account_name ??
|
|
19
|
+
row.accounting_class_name ??
|
|
20
|
+
row.qbo_accounting_class_name ??
|
|
21
|
+
row.fully_qualified_name ??
|
|
22
|
+
accountId;
|
|
23
|
+
return [
|
|
24
|
+
{
|
|
25
|
+
id: accountId,
|
|
26
|
+
name: accountName,
|
|
27
|
+
accountType: row.account_type ?? undefined,
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export function mapInvoicingQboSyncHealth(payload) {
|
|
33
|
+
return {
|
|
34
|
+
connection: payload.connection != null
|
|
35
|
+
? mapInvoicingQboConnection(payload.connection)
|
|
36
|
+
: undefined,
|
|
37
|
+
countsByStatus: payload.counts_by_status ?? {},
|
|
38
|
+
failedTasks: (payload.failed_tasks ?? []).map((task) => ({
|
|
39
|
+
attempts: task.attempts,
|
|
40
|
+
entityId: task.entity_id,
|
|
41
|
+
entityType: task.entity_type,
|
|
42
|
+
taskId: task.task_id,
|
|
43
|
+
lastError: task.last_error ?? undefined,
|
|
44
|
+
updatedAt: task.updated_at ?? undefined,
|
|
45
|
+
})),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { createSlice } from '@reduxjs/toolkit';
|
|
2
|
+
export const initialState = {
|
|
3
|
+
accountsByAccountTypes: {},
|
|
4
|
+
accountsFetchStateByAccountTypes: {},
|
|
5
|
+
backfillFetchState: { fetchState: 'Not-Started', error: undefined },
|
|
6
|
+
classes: [],
|
|
7
|
+
classesFetchState: { fetchState: 'Not-Started', error: undefined },
|
|
8
|
+
connection: undefined,
|
|
9
|
+
connectionFetchState: { fetchState: 'Not-Started', error: undefined },
|
|
10
|
+
retryFetchStateByTaskId: {},
|
|
11
|
+
syncHealth: undefined,
|
|
12
|
+
syncHealthFetchState: { fetchState: 'Not-Started', error: undefined },
|
|
13
|
+
};
|
|
14
|
+
const invoicingQboView = createSlice({
|
|
15
|
+
name: 'invoicingQboView',
|
|
16
|
+
initialState,
|
|
17
|
+
reducers: {
|
|
18
|
+
fetchInvoicingQboConnection(draft) {
|
|
19
|
+
draft.connectionFetchState = {
|
|
20
|
+
fetchState: 'In-Progress',
|
|
21
|
+
error: undefined,
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
updateInvoicingQboConnection(draft, action) {
|
|
25
|
+
draft.connection = action.payload;
|
|
26
|
+
draft.connectionFetchState = { fetchState: 'Completed', error: undefined };
|
|
27
|
+
},
|
|
28
|
+
updateInvoicingQboConnectionFailure(draft, action) {
|
|
29
|
+
draft.connectionFetchState = { fetchState: 'Error', error: action.payload };
|
|
30
|
+
},
|
|
31
|
+
fetchInvoicingQboAccounts: {
|
|
32
|
+
reducer(draft, action) {
|
|
33
|
+
draft.accountsFetchStateByAccountTypes[action.payload.accountTypes] = {
|
|
34
|
+
fetchState: 'In-Progress',
|
|
35
|
+
error: undefined,
|
|
36
|
+
};
|
|
37
|
+
},
|
|
38
|
+
prepare(accountTypes) {
|
|
39
|
+
return { payload: { accountTypes } };
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
updateInvoicingQboAccounts(draft, action) {
|
|
43
|
+
draft.accountsByAccountTypes[action.payload.accountTypes] =
|
|
44
|
+
action.payload.accounts;
|
|
45
|
+
draft.accountsFetchStateByAccountTypes[action.payload.accountTypes] = {
|
|
46
|
+
fetchState: 'Completed',
|
|
47
|
+
error: undefined,
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
updateInvoicingQboAccountsFailure(draft, action) {
|
|
51
|
+
draft.accountsFetchStateByAccountTypes[action.payload.accountTypes] = {
|
|
52
|
+
fetchState: 'Error',
|
|
53
|
+
error: action.payload.status,
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
fetchInvoicingQboClasses(draft) {
|
|
57
|
+
draft.classesFetchState = { fetchState: 'In-Progress', error: undefined };
|
|
58
|
+
},
|
|
59
|
+
updateInvoicingQboClasses(draft, action) {
|
|
60
|
+
draft.classes = action.payload;
|
|
61
|
+
draft.classesFetchState = { fetchState: 'Completed', error: undefined };
|
|
62
|
+
},
|
|
63
|
+
updateInvoicingQboClassesFailure(draft, action) {
|
|
64
|
+
draft.classesFetchState = { fetchState: 'Error', error: action.payload };
|
|
65
|
+
},
|
|
66
|
+
fetchInvoicingQboSyncHealth(draft) {
|
|
67
|
+
draft.syncHealthFetchState = {
|
|
68
|
+
fetchState: 'In-Progress',
|
|
69
|
+
error: undefined,
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
updateInvoicingQboSyncHealth(draft, action) {
|
|
73
|
+
draft.syncHealth = action.payload;
|
|
74
|
+
draft.syncHealthFetchState = { fetchState: 'Completed', error: undefined };
|
|
75
|
+
},
|
|
76
|
+
updateInvoicingQboSyncHealthFailure(draft, action) {
|
|
77
|
+
draft.syncHealthFetchState = {
|
|
78
|
+
fetchState: 'Error',
|
|
79
|
+
error: action.payload,
|
|
80
|
+
};
|
|
81
|
+
},
|
|
82
|
+
retryInvoicingQboSyncTask: {
|
|
83
|
+
reducer(draft, action) {
|
|
84
|
+
draft.retryFetchStateByTaskId[action.payload.taskId] = {
|
|
85
|
+
fetchState: 'In-Progress',
|
|
86
|
+
error: undefined,
|
|
87
|
+
};
|
|
88
|
+
},
|
|
89
|
+
prepare(taskId) {
|
|
90
|
+
return { payload: { taskId } };
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
retryInvoicingQboSyncTaskSuccess(draft, action) {
|
|
94
|
+
draft.retryFetchStateByTaskId[action.payload.taskId] = {
|
|
95
|
+
fetchState: 'Completed',
|
|
96
|
+
error: undefined,
|
|
97
|
+
};
|
|
98
|
+
},
|
|
99
|
+
retryInvoicingQboSyncTaskFailure(draft, action) {
|
|
100
|
+
draft.retryFetchStateByTaskId[action.payload.taskId] = {
|
|
101
|
+
fetchState: 'Error',
|
|
102
|
+
error: action.payload.status,
|
|
103
|
+
};
|
|
104
|
+
},
|
|
105
|
+
startInvoicingQboBackfill: {
|
|
106
|
+
reducer(draft) {
|
|
107
|
+
draft.backfillFetchState = {
|
|
108
|
+
fetchState: 'In-Progress',
|
|
109
|
+
error: undefined,
|
|
110
|
+
};
|
|
111
|
+
},
|
|
112
|
+
prepare(startDate) {
|
|
113
|
+
return { payload: { startDate } };
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
startInvoicingQboBackfillSuccess(draft) {
|
|
117
|
+
draft.backfillFetchState = { fetchState: 'Completed', error: undefined };
|
|
118
|
+
},
|
|
119
|
+
startInvoicingQboBackfillFailure(draft, action) {
|
|
120
|
+
draft.backfillFetchState = { fetchState: 'Error', error: action.payload };
|
|
121
|
+
},
|
|
122
|
+
clearInvoicingQboView(draft) {
|
|
123
|
+
Object.assign(draft, initialState);
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
export const { fetchInvoicingQboConnection, updateInvoicingQboConnection, updateInvoicingQboConnectionFailure, fetchInvoicingQboAccounts, updateInvoicingQboAccounts, updateInvoicingQboAccountsFailure, fetchInvoicingQboClasses, updateInvoicingQboClasses, updateInvoicingQboClassesFailure, fetchInvoicingQboSyncHealth, updateInvoicingQboSyncHealth, updateInvoicingQboSyncHealthFailure, retryInvoicingQboSyncTask, retryInvoicingQboSyncTaskSuccess, retryInvoicingQboSyncTaskFailure, startInvoicingQboBackfill, startInvoicingQboBackfillSuccess, startInvoicingQboBackfillFailure, clearInvoicingQboView, } = invoicingQboView.actions;
|
|
128
|
+
export default invoicingQboView.reducer;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single bundled view for the QBO integration settings screen — the
|
|
3
|
+
* connection, per-account-types account options, classes, sync health, and the
|
|
4
|
+
* fetch/action states for each of them.
|
|
5
|
+
*/
|
|
6
|
+
export const getInvoicingQboView = (state) => {
|
|
7
|
+
const qboState = state.invoicingQboViewState;
|
|
8
|
+
return {
|
|
9
|
+
accountsByAccountTypes: qboState.accountsByAccountTypes,
|
|
10
|
+
accountsFetchStateByAccountTypes: qboState.accountsFetchStateByAccountTypes,
|
|
11
|
+
backfillState: qboState.backfillFetchState,
|
|
12
|
+
classes: qboState.classes,
|
|
13
|
+
classesFetchState: qboState.classesFetchState,
|
|
14
|
+
connection: qboState.connection,
|
|
15
|
+
connectionFetchState: qboState.connectionFetchState,
|
|
16
|
+
retryFetchStateByTaskId: qboState.retryFetchStateByTaskId,
|
|
17
|
+
syncHealth: qboState.syncHealth,
|
|
18
|
+
syncHealthFetchState: qboState.syncHealthFetchState,
|
|
19
|
+
};
|
|
20
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
const dollarsFromAmountString = (value) => {
|
|
2
|
-
const parsed = Number.parseFloat(value);
|
|
3
|
-
if (Number.isNaN(parsed)) {
|
|
4
|
-
return 0;
|
|
5
|
-
}
|
|
6
|
-
return parsed;
|
|
7
|
-
};
|
|
8
1
|
export const computeIssueCreditNoteTotal = (lineItems) => lineItems
|
|
9
2
|
.filter((lineItem) => lineItem.selected)
|
|
10
3
|
.reduce((total, lineItem) => {
|
|
11
4
|
const quantity = Number.parseFloat(lineItem.quantity);
|
|
12
|
-
const unitAmount =
|
|
5
|
+
const unitAmount = lineItem.unitAmount.amount;
|
|
13
6
|
if (Number.isNaN(quantity) || quantity <= 0 || unitAmount <= 0) {
|
|
14
7
|
return total;
|
|
15
8
|
}
|
|
@@ -20,7 +13,7 @@ export const localDataToIssueCreditNotePayload = (localData) => {
|
|
|
20
13
|
.filter((lineItem) => lineItem.selected)
|
|
21
14
|
.map((lineItem) => {
|
|
22
15
|
const quantity = Math.round(Number.parseFloat(lineItem.quantity));
|
|
23
|
-
const unitAmount =
|
|
16
|
+
const unitAmount = lineItem.unitAmount.amount;
|
|
24
17
|
return {
|
|
25
18
|
description: lineItem.description,
|
|
26
19
|
quantity,
|
|
@@ -43,9 +36,9 @@ export const initializeIssueCreditNoteDraftFromInvoice = (invoice) => ({
|
|
|
43
36
|
description: lineItem.description,
|
|
44
37
|
id: lineItem.id,
|
|
45
38
|
maxQuantity: lineItem.quantity,
|
|
46
|
-
maxUnitAmount: lineItem.unitAmount
|
|
39
|
+
maxUnitAmount: lineItem.unitAmount,
|
|
47
40
|
quantity: String(lineItem.quantity),
|
|
48
41
|
selected: true,
|
|
49
|
-
unitAmount: lineItem.unitAmount
|
|
42
|
+
unitAmount: lineItem.unitAmount,
|
|
50
43
|
})),
|
|
51
44
|
});
|
|
@@ -1,17 +1,8 @@
|
|
|
1
|
+
import { toAmount } from '../../../commonStateTypes/amount';
|
|
1
2
|
import { dateNow } from '../../../zeniDayJS';
|
|
2
3
|
import { initialRecordPaymentFormLocalData } from './recordPaymentFormConfig';
|
|
3
4
|
const trimOrUndefined = (value) => value.trim() !== '' ? value.trim() : undefined;
|
|
4
|
-
const
|
|
5
|
-
const parsed = Number.parseFloat(value);
|
|
6
|
-
if (Number.isNaN(parsed)) {
|
|
7
|
-
return 0;
|
|
8
|
-
}
|
|
9
|
-
return parsed;
|
|
10
|
-
};
|
|
11
|
-
const amountDueDollarsFromInvoice = (invoice) => {
|
|
12
|
-
const amountDue = invoice.amountDue?.amount ?? 0;
|
|
13
|
-
return amountDue.toFixed(2);
|
|
14
|
-
};
|
|
5
|
+
const amountDueFromInvoice = (invoice) => invoice.amountDue ?? toAmount(0, 'USD', '$');
|
|
15
6
|
/**
|
|
16
7
|
* Build the invoice-scoped Record Payment body from the form draft. Amount stays
|
|
17
8
|
* in dollars for the invoice endpoint.
|
|
@@ -21,7 +12,7 @@ export const localDataToInvoiceRecordPaymentBody = (localData) => {
|
|
|
21
12
|
const date = localData.date.trim();
|
|
22
13
|
const referenceNumber = trimOrUndefined(localData.referenceNumber);
|
|
23
14
|
return {
|
|
24
|
-
amount:
|
|
15
|
+
amount: localData.amount?.amount ?? 0,
|
|
25
16
|
payment_method: localData.paymentMethod,
|
|
26
17
|
...(gateway != null ? { gateway } : {}),
|
|
27
18
|
...(date !== '' ? { date } : {}),
|
|
@@ -34,7 +25,7 @@ export const localDataToInvoiceRecordPaymentBody = (localData) => {
|
|
|
34
25
|
* and the linked invoice into `linked_invoices`. Currency is locked to USD.
|
|
35
26
|
*/
|
|
36
27
|
export const localDataToRecordPaymentPayload = (localData) => {
|
|
37
|
-
const amount =
|
|
28
|
+
const amount = localData.amount?.amount ?? 0;
|
|
38
29
|
const gateway = trimOrUndefined(localData.gateway);
|
|
39
30
|
const date = localData.date.trim();
|
|
40
31
|
const transactionId = trimOrUndefined(localData.transactionId);
|
|
@@ -60,7 +51,7 @@ export const localDataToRecordPaymentPayload = (localData) => {
|
|
|
60
51
|
};
|
|
61
52
|
export const initializeRecordPaymentDraftFromInvoice = (invoice) => ({
|
|
62
53
|
...initialRecordPaymentFormLocalData,
|
|
63
|
-
amount:
|
|
54
|
+
amount: amountDueFromInvoice(invoice),
|
|
64
55
|
customerId: invoice.customerID,
|
|
65
56
|
date: dateNow().format('YYYY-MM-DD'),
|
|
66
57
|
invoiceToLink: invoice.id,
|
package/lib/index.d.ts
CHANGED
|
@@ -1080,7 +1080,7 @@ export type { ApplicableCatalogItemOption, InvoicingCatalogItemFormView, } from
|
|
|
1080
1080
|
export { resetEditInvoicingCouponDetailView, saveInvoicingCoupon, submitInvoicingCouponForm, updateInvoicingCouponFormDraft, } from './view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewReducer';
|
|
1081
1081
|
export type { SaveInvoicingCouponPayload, SubmitInvoicingCouponFormPayload, UpdateInvoicingCouponFormDraftPayload, } from './view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewReducer';
|
|
1082
1082
|
export type { InvoicingCouponFormLocalData } from './view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState';
|
|
1083
|
-
export { entityToInvoicingCouponFormLocalData, initialInvoicingCouponFormLocalData, } from './view/invoicing/editInvoicingCouponDetailView/
|
|
1083
|
+
export { entityToInvoicingCouponFormLocalData, initialInvoicingCouponFormLocalData, } from './view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState';
|
|
1084
1084
|
export { getEditInvoicingCouponDetailViewState, getInvoicingCouponFormView, } from './view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector';
|
|
1085
1085
|
export type { EditInvoicingCouponDetailView, InvoicingCouponFormView, } from './view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector';
|
|
1086
1086
|
export { clearInvoicingInvoiceAction, runInvoicingInvoiceAction, updateInvoicingInvoice, } from './view/invoicing/invoiceAction/invoiceActionReducer';
|
|
@@ -1194,6 +1194,12 @@ export type { InvoicingBrandingFormView, InvoicingSettingsView, } from './view/i
|
|
|
1194
1194
|
export type { InvoicingBrandingFormLocalData } from './view/invoicing/settingsView/invoicingBrandingFormConfig';
|
|
1195
1195
|
export { INVOICING_BUSINESS_ADDRESS_TYPE, entityToInvoicingBrandingFormLocalData, initialInvoicingBrandingFormLocalData, } from './view/invoicing/settingsView/invoicingBrandingFormConfig';
|
|
1196
1196
|
export { isStripeConnectedFromSettings } from './view/invoicing/settingsView/invoicingSettingsHelpers';
|
|
1197
|
+
export { clearInvoicingQboView, fetchInvoicingQboAccounts, fetchInvoicingQboClasses, fetchInvoicingQboConnection, fetchInvoicingQboSyncHealth, retryInvoicingQboSyncTask, startInvoicingQboBackfill, } from './view/invoicing/invoicingQboView/invoicingQboViewReducer';
|
|
1198
|
+
export { getInvoicingQboView } from './view/invoicing/invoicingQboView/invoicingQboViewSelector';
|
|
1199
|
+
export type { InvoicingQboView } from './view/invoicing/invoicingQboView/invoicingQboViewSelector';
|
|
1200
|
+
export type { InvoicingQboAccountOption, InvoicingQboConnection, InvoicingQboFailedTask, InvoicingQboSyncHealth, } from './view/invoicing/invoicingQboView/invoicingQboViewPayload';
|
|
1201
|
+
export { INVOICING_QBO_CUSTOMER_MATCHING_MODES, getInvoicingQboAccountMappingId, toInvoicingQboCustomerMatchingMode, withInvoicingQboAccountMappingId, } from './entity/invoicing/invoicingCommonPayload';
|
|
1202
|
+
export type { InvoicingNamedOption, InvoicingQboAccountMappingKindOption, InvoicingQboAccountMappingsPayload, InvoicingQboCustomerMatchingMode, InvoicingQboSettingsPayload, } from './entity/invoicing/invoicingCommonPayload';
|
|
1197
1203
|
export { acceptInvoicingTerms, clearInvoicingConfig, enableInvoicing, fetchInvoicingConfig, resetInvoicingConfigActionStates, updateInvoicingConfig, } from './view/invoicing/invoicingConfigView/invoicingConfigViewReducer';
|
|
1198
1204
|
export { getInvoicingConfigView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';
|
|
1199
1205
|
export type { InvoicingConfigView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';
|
package/lib/index.js
CHANGED
|
@@ -83,7 +83,7 @@ exports.INVOICING_LIST_PAGE_SIZE = exports.getInvoicingDataImportActionState = e
|
|
|
83
83
|
exports.getInvoicingSubscriptionById = exports.fetchInvoicingSubscriptionDetail = exports.clearInvoicingSubscriptionDetailView = exports.getInvoicingSubscriptionListView = exports.INVOICING_SUBSCRIPTION_TABS = exports.INVOICING_SUBSCRIPTION_COLUMNS = exports.ALL_INVOICING_SUBSCRIPTION_TAB_IDS = exports.ALL_INVOICING_SUBSCRIPTION_SORT_KEYS = exports.updateInvoicingSubscriptionFilters = exports.setInvoicingSubscriptionActiveTab = exports.fetchInvoicingSubscriptionListPage = exports.fetchInvoicingSubscriptionList = exports.fetchInvoicingSubscriptionCounts = exports.clearInvoicingSubscriptionListView = exports.updateInvoicingSubscriptions = exports.removeInvoicingSubscription = exports.clearAllInvoicingSubscriptions = exports.resetPromotionalCreditAction = exports.submitAddPromotionalCredits = exports.getInvoicingSetupIntentFetchState = exports.getInvoicingSetupIntent = exports.getInvoicingSentPaymentLinkMagicUrl = exports.getInvoicingSentPaymentLinkEmail = exports.getInvoicingPlaidLinkTokenFetchState = exports.getInvoicingPlaidLinkToken = exports.getInvoicingPaymentMethodSaveState = exports.getInvoicingPaymentLinkSendState = exports.sendInvoicingPaymentLink = exports.saveInvoicingPaymentMethod = exports.resetInvoicingCustomerPaymentMethod = exports.fetchInvoicingPlaidLinkToken = exports.createInvoicingSetupIntent = exports.getInvoicingCustomerDetail = exports.fetchInvoicingCustomerDetailPage = exports.fetchInvoicingCustomerDetail = exports.clearInvoicingCustomerDetailView = exports.getInvoicingCustomerListView = exports.INVOICING_CUSTOMER_TABS = exports.INVOICING_CUSTOMER_COLUMNS = exports.ALL_INVOICING_CUSTOMER_TAB_IDS = exports.ALL_INVOICING_CUSTOMER_SORT_KEYS = exports.updateInvoicingCustomerFilters = exports.setInvoicingCustomerActiveTab = exports.fetchInvoicingCustomerListPage = exports.fetchInvoicingCustomerList = exports.fetchInvoicingCustomerCounts = exports.clearInvoicingCustomerListView = exports.updateInvoicingCustomers = exports.removeInvoicingCustomer = exports.clearAllInvoicingCustomers = void 0;
|
|
84
84
|
exports.getInvoicingCouponCounts = exports.INVOICING_COUPON_TABS = exports.INVOICING_COUPON_COLUMNS = exports.ALL_INVOICING_COUPON_TAB_IDS = exports.ALL_INVOICING_COUPON_SORT_KEYS = exports.updateInvoicingCouponFilters = exports.setInvoicingCouponActiveTab = exports.fetchInvoicingCouponListPage = exports.fetchInvoicingCouponList = exports.fetchInvoicingCouponCounts = exports.clearInvoicingCouponView = exports.updateInvoicingCoupons = exports.removeInvoicingCoupon = exports.clearAllInvoicingCoupons = exports.getInvoicingCreditNoteDetail = exports.getInvoicingCreditNoteById = exports.fetchInvoicingCreditNoteDetail = exports.clearInvoicingCreditNoteDetailView = exports.getInvoicingCreditNoteListView = exports.INVOICING_CREDIT_NOTE_TABS = exports.INVOICING_CREDIT_NOTE_COLUMNS = exports.ALL_INVOICING_CREDIT_NOTE_TAB_IDS = exports.ALL_INVOICING_CREDIT_NOTE_SORT_KEYS = exports.updateInvoicingCreditNoteFilters = exports.setInvoicingCreditNoteActiveTab = exports.fetchInvoicingCreditNoteListPage = exports.fetchInvoicingCreditNoteList = exports.fetchInvoicingCreditNoteCounts = exports.clearInvoicingCreditNoteListView = exports.updateInvoicingCreditNotes = exports.removeInvoicingCreditNote = exports.clearAllInvoicingCreditNotes = exports.getInvoicingTransactionDetail = exports.getInvoicingTransactionById = exports.fetchInvoicingTransactionDetail = exports.clearInvoicingTransactionDetailView = exports.getInvoicingTransactionListView = exports.INVOICING_TRANSACTION_TABS = exports.INVOICING_TRANSACTION_COLUMNS = exports.ALL_INVOICING_TRANSACTION_TAB_IDS = exports.ALL_INVOICING_TRANSACTION_SORT_KEYS = exports.updateInvoicingTransactionFilters = exports.setInvoicingTransactionActiveTab = exports.fetchInvoicingTransactionListPage = exports.fetchInvoicingTransactionList = exports.clearInvoicingTransactionListView = exports.updateInvoicingTransactions = exports.removeInvoicingTransaction = exports.clearAllInvoicingTransactions = exports.getInvoicingSubscriptionDetail = void 0;
|
|
85
85
|
exports.getInvoicingProductById = exports.getInvoicingPlanById = exports.getInvoicingCatalogItemDetail = exports.fetchInvoicingCatalogItemDetail = exports.clearInvoicingCatalogItemDetailView = exports.getInvoicingCatalogListView = exports.INVOICING_PRODUCT_COLUMNS = exports.ALL_INVOICING_PRODUCT_SORT_KEYS = exports.updateInvoicingCatalogProductFilters = exports.updateInvoicingCatalogPlanFilters = exports.fetchInvoicingCatalogProductList = exports.fetchInvoicingCatalogPlanList = exports.fetchInvoicingCatalogListPage = exports.fetchInvoicingCatalogCounts = exports.clearInvoicingCatalogListView = exports.updateInvoicingProducts = exports.removeInvoicingProduct = exports.clearAllInvoicingProducts = exports.updateInvoicingPlans = exports.removeInvoicingPlan = exports.mergeInvoicingPlanSubFamily = exports.clearAllInvoicingPlans = exports.getInvoicingDunningCaseDetail = exports.getInvoicingDunningCaseById = exports.fetchInvoicingDunningCaseDetail = exports.clearInvoicingDunningCaseDetailView = exports.getInvoicingDunningCaseListView = exports.INVOICING_DUNNING_CASE_TABS = exports.INVOICING_DUNNING_CASE_COLUMNS = exports.ALL_INVOICING_DUNNING_CASE_TAB_IDS = exports.ALL_INVOICING_DUNNING_CASE_SORT_KEYS = exports.updateInvoicingDunningCaseFilters = exports.setInvoicingDunningCaseActiveTab = exports.fetchInvoicingDunningCaseListPage = exports.fetchInvoicingDunningCaseList = exports.fetchInvoicingDunningCaseCounts = exports.clearInvoicingDunningCaseListView = exports.updateInvoicingDunningCases = exports.removeInvoicingDunningCase = exports.clearAllInvoicingDunningCases = exports.getInvoicingCouponDetail = exports.fetchInvoicingCouponDetail = exports.clearInvoicingCouponDetailView = exports.getInvoicingCouponById = exports.getInvoicingCouponListView = exports.getInvoicingCouponListNextCursor = exports.getInvoicingCouponListItems = exports.getInvoicingCouponListHasMore = exports.getInvoicingCouponListFilters = exports.getInvoicingCouponListFetchState = void 0;
|
|
86
|
-
exports.getInvoicingConfigView = exports.updateInvoicingConfig = exports.resetInvoicingConfigActionStates = exports.fetchInvoicingConfig = exports.enableInvoicing = exports.clearInvoicingConfig = exports.acceptInvoicingTerms = exports.isStripeConnectedFromSettings = exports.initialInvoicingBrandingFormLocalData = exports.entityToInvoicingBrandingFormLocalData = exports.INVOICING_BUSINESS_ADDRESS_TYPE = exports.getInvoicingSettingsView = exports.getInvoicingSettingsFetchState = exports.getInvoicingSettings = exports.getInvoicingBrandingFormView = exports.updateInvoicingSettings = exports.updateInvoicingBrandingFormDraft = exports.submitInvoicingBrandingForm = exports.saveInvoicingSettings = exports.resetSaveInvoicingSettings = exports.resetInvoicingBrandingFormDraft = exports.fetchInvoicingSettings = exports.disconnectInvoicingStripe = exports.connectInvoicingStripe = exports.clearInvoicingSettings = void 0;
|
|
86
|
+
exports.getInvoicingConfigView = exports.updateInvoicingConfig = exports.resetInvoicingConfigActionStates = exports.fetchInvoicingConfig = exports.enableInvoicing = exports.clearInvoicingConfig = exports.acceptInvoicingTerms = exports.withInvoicingQboAccountMappingId = exports.toInvoicingQboCustomerMatchingMode = exports.getInvoicingQboAccountMappingId = exports.INVOICING_QBO_CUSTOMER_MATCHING_MODES = exports.getInvoicingQboView = exports.startInvoicingQboBackfill = exports.retryInvoicingQboSyncTask = exports.fetchInvoicingQboSyncHealth = exports.fetchInvoicingQboConnection = exports.fetchInvoicingQboClasses = exports.fetchInvoicingQboAccounts = exports.clearInvoicingQboView = exports.isStripeConnectedFromSettings = exports.initialInvoicingBrandingFormLocalData = exports.entityToInvoicingBrandingFormLocalData = exports.INVOICING_BUSINESS_ADDRESS_TYPE = exports.getInvoicingSettingsView = exports.getInvoicingSettingsFetchState = exports.getInvoicingSettings = exports.getInvoicingBrandingFormView = exports.updateInvoicingSettings = exports.updateInvoicingBrandingFormDraft = exports.submitInvoicingBrandingForm = exports.saveInvoicingSettings = exports.resetSaveInvoicingSettings = exports.resetInvoicingBrandingFormDraft = exports.fetchInvoicingSettings = exports.disconnectInvoicingStripe = exports.connectInvoicingStripe = exports.clearInvoicingSettings = void 0;
|
|
87
87
|
const allowedValue_1 = require("./commonStateTypes/allowedValue");
|
|
88
88
|
Object.defineProperty(exports, "isAllowedValueWithCode", { enumerable: true, get: function () { return allowedValue_1.isAllowedValueWithCode; } });
|
|
89
89
|
Object.defineProperty(exports, "isAllowedValueWithID", { enumerable: true, get: function () { return allowedValue_1.isAllowedValueWithID; } });
|
|
@@ -2801,9 +2801,9 @@ Object.defineProperty(exports, "resetEditInvoicingCouponDetailView", { enumerabl
|
|
|
2801
2801
|
Object.defineProperty(exports, "saveInvoicingCoupon", { enumerable: true, get: function () { return editInvoicingCouponDetailViewReducer_1.saveInvoicingCoupon; } });
|
|
2802
2802
|
Object.defineProperty(exports, "submitInvoicingCouponForm", { enumerable: true, get: function () { return editInvoicingCouponDetailViewReducer_1.submitInvoicingCouponForm; } });
|
|
2803
2803
|
Object.defineProperty(exports, "updateInvoicingCouponFormDraft", { enumerable: true, get: function () { return editInvoicingCouponDetailViewReducer_1.updateInvoicingCouponFormDraft; } });
|
|
2804
|
-
var
|
|
2805
|
-
Object.defineProperty(exports, "entityToInvoicingCouponFormLocalData", { enumerable: true, get: function () { return
|
|
2806
|
-
Object.defineProperty(exports, "initialInvoicingCouponFormLocalData", { enumerable: true, get: function () { return
|
|
2804
|
+
var editInvoicingCouponDetailViewState_1 = require("./view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState");
|
|
2805
|
+
Object.defineProperty(exports, "entityToInvoicingCouponFormLocalData", { enumerable: true, get: function () { return editInvoicingCouponDetailViewState_1.entityToInvoicingCouponFormLocalData; } });
|
|
2806
|
+
Object.defineProperty(exports, "initialInvoicingCouponFormLocalData", { enumerable: true, get: function () { return editInvoicingCouponDetailViewState_1.initialInvoicingCouponFormLocalData; } });
|
|
2807
2807
|
var editInvoicingCouponDetailViewSelector_1 = require("./view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector");
|
|
2808
2808
|
Object.defineProperty(exports, "getEditInvoicingCouponDetailViewState", { enumerable: true, get: function () { return editInvoicingCouponDetailViewSelector_1.getEditInvoicingCouponDetailViewState; } });
|
|
2809
2809
|
Object.defineProperty(exports, "getInvoicingCouponFormView", { enumerable: true, get: function () { return editInvoicingCouponDetailViewSelector_1.getInvoicingCouponFormView; } });
|
|
@@ -3090,6 +3090,22 @@ Object.defineProperty(exports, "entityToInvoicingBrandingFormLocalData", { enume
|
|
|
3090
3090
|
Object.defineProperty(exports, "initialInvoicingBrandingFormLocalData", { enumerable: true, get: function () { return invoicingBrandingFormConfig_1.initialInvoicingBrandingFormLocalData; } });
|
|
3091
3091
|
var invoicingSettingsHelpers_1 = require("./view/invoicing/settingsView/invoicingSettingsHelpers");
|
|
3092
3092
|
Object.defineProperty(exports, "isStripeConnectedFromSettings", { enumerable: true, get: function () { return invoicingSettingsHelpers_1.isStripeConnectedFromSettings; } });
|
|
3093
|
+
// ── Invoicing: QBO integration ────────────────────────────────────────────────
|
|
3094
|
+
var invoicingQboViewReducer_1 = require("./view/invoicing/invoicingQboView/invoicingQboViewReducer");
|
|
3095
|
+
Object.defineProperty(exports, "clearInvoicingQboView", { enumerable: true, get: function () { return invoicingQboViewReducer_1.clearInvoicingQboView; } });
|
|
3096
|
+
Object.defineProperty(exports, "fetchInvoicingQboAccounts", { enumerable: true, get: function () { return invoicingQboViewReducer_1.fetchInvoicingQboAccounts; } });
|
|
3097
|
+
Object.defineProperty(exports, "fetchInvoicingQboClasses", { enumerable: true, get: function () { return invoicingQboViewReducer_1.fetchInvoicingQboClasses; } });
|
|
3098
|
+
Object.defineProperty(exports, "fetchInvoicingQboConnection", { enumerable: true, get: function () { return invoicingQboViewReducer_1.fetchInvoicingQboConnection; } });
|
|
3099
|
+
Object.defineProperty(exports, "fetchInvoicingQboSyncHealth", { enumerable: true, get: function () { return invoicingQboViewReducer_1.fetchInvoicingQboSyncHealth; } });
|
|
3100
|
+
Object.defineProperty(exports, "retryInvoicingQboSyncTask", { enumerable: true, get: function () { return invoicingQboViewReducer_1.retryInvoicingQboSyncTask; } });
|
|
3101
|
+
Object.defineProperty(exports, "startInvoicingQboBackfill", { enumerable: true, get: function () { return invoicingQboViewReducer_1.startInvoicingQboBackfill; } });
|
|
3102
|
+
var invoicingQboViewSelector_1 = require("./view/invoicing/invoicingQboView/invoicingQboViewSelector");
|
|
3103
|
+
Object.defineProperty(exports, "getInvoicingQboView", { enumerable: true, get: function () { return invoicingQboViewSelector_1.getInvoicingQboView; } });
|
|
3104
|
+
var invoicingCommonPayload_2 = require("./entity/invoicing/invoicingCommonPayload");
|
|
3105
|
+
Object.defineProperty(exports, "INVOICING_QBO_CUSTOMER_MATCHING_MODES", { enumerable: true, get: function () { return invoicingCommonPayload_2.INVOICING_QBO_CUSTOMER_MATCHING_MODES; } });
|
|
3106
|
+
Object.defineProperty(exports, "getInvoicingQboAccountMappingId", { enumerable: true, get: function () { return invoicingCommonPayload_2.getInvoicingQboAccountMappingId; } });
|
|
3107
|
+
Object.defineProperty(exports, "toInvoicingQboCustomerMatchingMode", { enumerable: true, get: function () { return invoicingCommonPayload_2.toInvoicingQboCustomerMatchingMode; } });
|
|
3108
|
+
Object.defineProperty(exports, "withInvoicingQboAccountMappingId", { enumerable: true, get: function () { return invoicingCommonPayload_2.withInvoicingQboAccountMappingId; } });
|
|
3093
3109
|
// ── Invoicing: config ─────────────────────────────────────────────────────────
|
|
3094
3110
|
var invoicingConfigViewReducer_1 = require("./view/invoicing/invoicingConfigView/invoicingConfigViewReducer");
|
|
3095
3111
|
Object.defineProperty(exports, "acceptInvoicingTerms", { enumerable: true, get: function () { return invoicingConfigViewReducer_1.acceptInvoicingTerms; } });
|
package/lib/reducer.d.ts
CHANGED
|
@@ -153,6 +153,7 @@ import { InvoicingCustomerListViewState } from './view/invoicing/invoicingCustom
|
|
|
153
153
|
import { InvoicingDunningCaseDetailViewState } from './view/invoicing/invoicingDunningCaseDetailView/invoicingDunningCaseDetailViewState';
|
|
154
154
|
import { InvoicingDunningCaseListViewState } from './view/invoicing/invoicingDunningCaseListView/invoicingDunningCaseListViewState';
|
|
155
155
|
import { InvoicingOverviewState } from './view/invoicing/invoicingOverview/invoicingOverviewState';
|
|
156
|
+
import { InvoicingQboViewState } from './view/invoicing/invoicingQboView/invoicingQboViewState';
|
|
156
157
|
import { InvoicingSubscriptionDetailViewState } from './view/invoicing/invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewState';
|
|
157
158
|
import { InvoicingSubscriptionListViewState } from './view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewState';
|
|
158
159
|
import { InvoicingTransactionDetailViewState } from './view/invoicing/invoicingTransactionDetailView/invoicingTransactionDetailViewState';
|
|
@@ -466,6 +467,7 @@ type ViewsState = {
|
|
|
466
467
|
invoicingOverviewState: InvoicingOverviewState;
|
|
467
468
|
invoicingPaymentActionState: InvoicingPaymentActionState;
|
|
468
469
|
invoicingPromotionalCreditActionState: PromotionalCreditActionState;
|
|
470
|
+
invoicingQboViewState: InvoicingQboViewState;
|
|
469
471
|
invoicingRecordPaymentState: InvoicingRecordPaymentState;
|
|
470
472
|
invoicingSettingsViewState: InvoicingSettingsViewState;
|
|
471
473
|
invoicingSubscriptionActionState: InvoicingSubscriptionActionState;
|
|
@@ -666,6 +668,7 @@ declare const reducers: import("redux").Reducer<import("redux").CombinedState<{
|
|
|
666
668
|
invoicingInvoiceListState: InvoicingInvoiceListState;
|
|
667
669
|
invoicingPaymentActionState: InvoicingPaymentActionState;
|
|
668
670
|
invoicingConfigViewState: InvoicingConfigViewState;
|
|
671
|
+
invoicingQboViewState: InvoicingQboViewState;
|
|
669
672
|
invoicingSettingsViewState: InvoicingSettingsViewState;
|
|
670
673
|
invoicingCatalogActionState: InvoicingCatalogActionState;
|
|
671
674
|
invoicingDiscountActionState: InvoicingDiscountActionState;
|
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,
|
|
@@ -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>;
|