@zeniai/client-epic-state 5.1.78 → 5.1.80
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 +0 -42
- package/lib/entity/invoicing/invoicingCommonPayload.js +1 -66
- package/lib/entity/tenant/clearAllEpic.d.ts +1 -2
- package/lib/entity/tenant/clearAllEpic.js +0 -2
- package/lib/epic.d.ts +1 -2
- package/lib/epic.js +1 -7
- package/lib/esm/entity/invoicing/invoicingCommonPayload.js +0 -61
- package/lib/esm/entity/tenant/clearAllEpic.js +0 -2
- package/lib/esm/epic.js +1 -7
- package/lib/esm/index.js +1 -5
- package/lib/esm/reducer.js +0 -3
- package/lib/esm/view/dashboard/dashboardSelector.js +10 -14
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +18 -4
- package/lib/esm/view/invoicing/createCreditNote/createCreditNoteFormConfig.js +1 -6
- package/lib/esm/view/invoicing/createCreditNote/createCreditNotePayload.js +8 -1
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js +5 -4
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +11 -10
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js +10 -8
- 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 +1 -43
- package/lib/esm/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.js +44 -0
- package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.js +5 -2
- package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.js +2 -1
- package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +1 -7
- package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.js +0 -3
- package/lib/esm/view/invoicing/issueCreditNote/issueCreditNotePayload.js +11 -4
- package/lib/esm/view/invoicing/recordPayment/recordPaymentFormConfig.js +1 -0
- package/lib/esm/view/invoicing/recordPayment/recordPaymentPayload.js +14 -5
- package/lib/index.d.ts +1 -7
- package/lib/index.js +4 -20
- package/lib/reducer.d.ts +0 -3
- package/lib/reducer.js +0 -3
- package/lib/view/dashboard/dashboardSelector.d.ts +3 -2
- package/lib/view/dashboard/dashboardSelector.js +9 -13
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +17 -3
- package/lib/view/invoicing/createCreditNote/createCreditNoteFormConfig.js +1 -6
- package/lib/view/invoicing/createCreditNote/createCreditNotePayload.js +8 -1
- package/lib/view/invoicing/createCreditNote/createCreditNoteState.d.ts +1 -3
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.d.ts +1 -2
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js +5 -4
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +11 -10
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewState.d.ts +5 -10
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js +10 -8
- 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 +2 -9
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.js +0 -45
- package/lib/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.d.ts +5 -0
- package/lib/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.js +48 -0
- package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.js +5 -2
- package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewState.d.ts +1 -3
- package/lib/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.js +2 -1
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewPayload.d.ts +1 -4
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.d.ts +1 -1
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +0 -6
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.d.ts +1 -4
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.js +0 -3
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewState.d.ts +1 -4
- package/lib/view/invoicing/issueCreditNote/issueCreditNotePayload.js +11 -4
- package/lib/view/invoicing/issueCreditNote/issueCreditNoteState.d.ts +2 -3
- package/lib/view/invoicing/recordPayment/recordPaymentFormConfig.js +1 -0
- package/lib/view/invoicing/recordPayment/recordPaymentPayload.js +14 -5
- package/lib/view/invoicing/recordPayment/recordPaymentState.d.ts +2 -4
- package/package.json +1 -1
- 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/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.js +0 -15
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.js +0 -15
- package/lib/esm/view/invoicing/invoicingQboView/epics/invoicingQboViewActionType.js +0 -1
- package/lib/esm/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.js +0 -26
- package/lib/esm/view/invoicing/invoicingQboView/epics/startInvoicingQboBackfillEpic.js +0 -18
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewPayload.js +0 -47
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewReducer.js +0 -128
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +0 -20
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewState.js +0 -1
- 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/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.d.ts +0 -6
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.js +0 -19
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.d.ts +0 -6
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.js +0 -19
- package/lib/view/invoicing/invoicingQboView/epics/invoicingQboViewActionType.d.ts +0 -2
- package/lib/view/invoicing/invoicingQboView/epics/invoicingQboViewActionType.js +0 -2
- package/lib/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.d.ts +0 -6
- package/lib/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.js +0 -30
- package/lib/view/invoicing/invoicingQboView/epics/startInvoicingQboBackfillEpic.d.ts +0 -6
- package/lib/view/invoicing/invoicingQboView/epics/startInvoicingQboBackfillEpic.js +0 -22
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewPayload.d.ts +0 -79
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewPayload.js +0 -52
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewReducer.d.ts +0 -25
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewReducer.js +0 -132
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.d.ts +0 -21
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +0 -24
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewState.d.ts +0 -14
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewState.js +0 -2
package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.js
CHANGED
|
@@ -1,43 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
applyOn: 'invoice_amount',
|
|
3
|
-
couponCode: '',
|
|
4
|
-
couponId: '',
|
|
5
|
-
discountPercentage: '',
|
|
6
|
-
discountQuantity: '',
|
|
7
|
-
discountType: 'percentage',
|
|
8
|
-
durationType: 'one_time',
|
|
9
|
-
invoiceName: '',
|
|
10
|
-
invoiceNotes: '',
|
|
11
|
-
maxRedemptions: '',
|
|
12
|
-
name: '',
|
|
13
|
-
period: '',
|
|
14
|
-
periodUnit: 'month',
|
|
15
|
-
validFrom: '',
|
|
16
|
-
validTill: '',
|
|
17
|
-
};
|
|
18
|
-
/** Seed the form draft from an existing coupon entity (edit mode). */
|
|
19
|
-
export const entityToInvoicingCouponFormLocalData = (coupon) => {
|
|
20
|
-
if (coupon == null) {
|
|
21
|
-
return { ...initialInvoicingCouponFormLocalData };
|
|
22
|
-
}
|
|
23
|
-
return {
|
|
24
|
-
applyOn: coupon.applyOn ?? 'invoice_amount',
|
|
25
|
-
couponCode: coupon.couponCode ?? '',
|
|
26
|
-
couponId: coupon.id ?? '',
|
|
27
|
-
discountAmount: coupon.discountAmount,
|
|
28
|
-
discountPercentage: coupon.discountPercentage != null
|
|
29
|
-
? String(coupon.discountPercentage)
|
|
30
|
-
: '',
|
|
31
|
-
discountQuantity: coupon.discountQuantity != null ? String(coupon.discountQuantity) : '',
|
|
32
|
-
discountType: coupon.discountType ?? 'percentage',
|
|
33
|
-
durationType: coupon.durationType ?? 'one_time',
|
|
34
|
-
invoiceName: coupon.invoiceName ?? '',
|
|
35
|
-
invoiceNotes: coupon.invoiceNotes ?? '',
|
|
36
|
-
maxRedemptions: coupon.maxRedemptions != null ? String(coupon.maxRedemptions) : '',
|
|
37
|
-
name: coupon.name ?? '',
|
|
38
|
-
period: coupon.period != null ? String(coupon.period) : '',
|
|
39
|
-
periodUnit: coupon.periodUnit ?? 'month',
|
|
40
|
-
validFrom: coupon.validFrom != null ? coupon.validFrom.format('YYYY-MM-DD') : '',
|
|
41
|
-
validTill: coupon.validTill != null ? coupon.validTill.format('YYYY-MM-DD') : '',
|
|
42
|
-
};
|
|
43
|
-
};
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export const initialInvoicingCouponFormLocalData = {
|
|
2
|
+
applyOn: 'invoice_amount',
|
|
3
|
+
couponCode: '',
|
|
4
|
+
couponId: '',
|
|
5
|
+
discountAmount: '',
|
|
6
|
+
discountPercentage: '',
|
|
7
|
+
discountQuantity: '',
|
|
8
|
+
discountType: 'percentage',
|
|
9
|
+
durationType: 'one_time',
|
|
10
|
+
invoiceName: '',
|
|
11
|
+
invoiceNotes: '',
|
|
12
|
+
maxRedemptions: '',
|
|
13
|
+
name: '',
|
|
14
|
+
period: '',
|
|
15
|
+
periodUnit: 'month',
|
|
16
|
+
validFrom: '',
|
|
17
|
+
validTill: '',
|
|
18
|
+
};
|
|
19
|
+
/** Seed the form draft from an existing coupon entity (edit mode). */
|
|
20
|
+
export const entityToInvoicingCouponFormLocalData = (coupon) => {
|
|
21
|
+
if (coupon == null) {
|
|
22
|
+
return { ...initialInvoicingCouponFormLocalData };
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
applyOn: coupon.applyOn ?? 'invoice_amount',
|
|
26
|
+
couponCode: coupon.couponCode ?? '',
|
|
27
|
+
couponId: coupon.id ?? '',
|
|
28
|
+
discountAmount: coupon.discountAmount != null ? String(coupon.discountAmount.amount) : '',
|
|
29
|
+
discountPercentage: coupon.discountPercentage != null
|
|
30
|
+
? String(coupon.discountPercentage)
|
|
31
|
+
: '',
|
|
32
|
+
discountQuantity: coupon.discountQuantity != null ? String(coupon.discountQuantity) : '',
|
|
33
|
+
discountType: coupon.discountType ?? 'percentage',
|
|
34
|
+
durationType: coupon.durationType ?? 'one_time',
|
|
35
|
+
invoiceName: coupon.invoiceName ?? '',
|
|
36
|
+
invoiceNotes: coupon.invoiceNotes ?? '',
|
|
37
|
+
maxRedemptions: coupon.maxRedemptions != null ? String(coupon.maxRedemptions) : '',
|
|
38
|
+
name: coupon.name ?? '',
|
|
39
|
+
period: coupon.period != null ? String(coupon.period) : '',
|
|
40
|
+
periodUnit: coupon.periodUnit ?? 'month',
|
|
41
|
+
validFrom: coupon.validFrom != null ? coupon.validFrom.format('YYYY-MM-DD') : '',
|
|
42
|
+
validTill: coupon.validTill != null ? coupon.validTill.format('YYYY-MM-DD') : '',
|
|
43
|
+
};
|
|
44
|
+
};
|
|
@@ -24,7 +24,8 @@ export const localDataToSaveInvoicingSubscriptionPayload = (localData, shippingA
|
|
|
24
24
|
quantity: 1,
|
|
25
25
|
})),
|
|
26
26
|
];
|
|
27
|
-
const setupFee = localData.setupFee
|
|
27
|
+
const setupFee = localData.setupFee.trim();
|
|
28
|
+
const parsedSetupFee = Number.parseFloat(setupFee);
|
|
28
29
|
const poNumber = localData.poNumber.trim();
|
|
29
30
|
const trialEnd = localData.trialEnd.trim();
|
|
30
31
|
return {
|
|
@@ -34,7 +35,9 @@ export const localDataToSaveInvoicingSubscriptionPayload = (localData, shippingA
|
|
|
34
35
|
currency_code: localData.preferredCurrencyCode,
|
|
35
36
|
customer_id: localData.customerId,
|
|
36
37
|
subscription_items: items,
|
|
37
|
-
...(setupFee
|
|
38
|
+
...(setupFee !== '' && !Number.isNaN(parsedSetupFee)
|
|
39
|
+
? { setup_fee: parsedSetupFee }
|
|
40
|
+
: {}),
|
|
38
41
|
...(poNumber !== '' ? { po_number: poNumber } : {}),
|
|
39
42
|
...(trialEnd !== '' ? { trial_end: trialEnd } : {}),
|
|
40
43
|
...(localData.couponId !== '' ? { coupon_ids: [localData.couponId] } : {}),
|
|
@@ -44,6 +44,7 @@ export const initialInvoicingSubscriptionFormLocalData = {
|
|
|
44
44
|
planQuantity: 1,
|
|
45
45
|
poNumber: '',
|
|
46
46
|
preferredCurrencyCode: 'USD',
|
|
47
|
+
setupFee: '',
|
|
47
48
|
trialEnd: '',
|
|
48
49
|
};
|
|
49
50
|
/** Seed the form draft from an existing subscription entity (edit mode). */
|
|
@@ -65,7 +66,7 @@ export const entityToInvoicingSubscriptionFormLocalData = (subscription) => {
|
|
|
65
66
|
planQuantity: planItem?.quantity ?? 1,
|
|
66
67
|
poNumber: subscription.poNumber ?? '',
|
|
67
68
|
preferredCurrencyCode: subscription.currencyCode ?? 'USD',
|
|
68
|
-
setupFee:
|
|
69
|
+
setupFee: '',
|
|
69
70
|
trialEnd: subscription.trialEnd != null
|
|
70
71
|
? subscription.trialEnd.format('YYYY-MM-DD')
|
|
71
72
|
: '',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createSlice } from '@reduxjs/toolkit';
|
|
2
|
-
import { toAuditLogEntityRouteOption, toInvoicingCatalogItemLifecycleActionOption, toInvoicingCatalogProductLifecycleActionOption, toInvoicingDiscountLifecycleActionOption, toInvoicingDunningAction, toInvoicingNamedOption,
|
|
2
|
+
import { toAuditLogEntityRouteOption, toInvoicingCatalogItemLifecycleActionOption, toInvoicingCatalogProductLifecycleActionOption, toInvoicingDiscountLifecycleActionOption, toInvoicingDunningAction, toInvoicingNamedOption, toInvoicingSubscriptionEditFieldOption, toInvoicingSubscriptionLifecycleActionOption, } from '../../../entity/invoicing/invoicingCommonPayload';
|
|
3
3
|
export const initialState = {
|
|
4
4
|
fetchState: 'Not-Started',
|
|
5
5
|
error: undefined,
|
|
@@ -18,9 +18,6 @@ export const initialState = {
|
|
|
18
18
|
catalogItemLifecycleActionOptions: [],
|
|
19
19
|
catalogProductLifecycleActionOptions: [],
|
|
20
20
|
discountLifecycleActionOptions: [],
|
|
21
|
-
qboAccountMappingKindOptions: [],
|
|
22
|
-
qboCustomerMatchingOptions: [],
|
|
23
|
-
qboSyncStatusOptions: [],
|
|
24
21
|
isInvoicingEnabled: undefined,
|
|
25
22
|
isInvoicingTosAccepted: undefined,
|
|
26
23
|
invoicingTosAcceptanceIp: undefined,
|
|
@@ -56,9 +53,6 @@ export function mapInvoicingConfigPayloadToState(payload) {
|
|
|
56
53
|
catalogItemLifecycleActionOptions: (payload.catalog_item_lifecycle_action_options ?? []).map((option) => toInvoicingCatalogItemLifecycleActionOption(option)),
|
|
57
54
|
catalogProductLifecycleActionOptions: (payload.catalog_product_lifecycle_action_options ?? []).map((option) => toInvoicingCatalogProductLifecycleActionOption(option)),
|
|
58
55
|
discountLifecycleActionOptions: (payload.discount_lifecycle_action_options ?? []).map((option) => toInvoicingDiscountLifecycleActionOption(option)),
|
|
59
|
-
qboAccountMappingKindOptions: (payload.qbo_account_mapping_kind_options ?? []).map(toInvoicingQboAccountMappingKindOption),
|
|
60
|
-
qboCustomerMatchingOptions: (payload.qbo_customer_matching_options ?? []).map(toInvoicingNamedOption),
|
|
61
|
-
qboSyncStatusOptions: (payload.qbo_sync_status_options ?? []).map(toInvoicingNamedOption),
|
|
62
56
|
isInvoicingEnabled: payload.is_invoicing_enabled,
|
|
63
57
|
isInvoicingTosAccepted: payload.is_invoicing_tos_accepted,
|
|
64
58
|
invoicingTosAcceptanceIp: payload.invoicing_tos_acceptance_ip ?? undefined,
|
|
@@ -23,9 +23,6 @@ export const getInvoicingConfigView = (state) => {
|
|
|
23
23
|
catalogItemLifecycleActionOptions: configState.catalogItemLifecycleActionOptions,
|
|
24
24
|
catalogProductLifecycleActionOptions: configState.catalogProductLifecycleActionOptions,
|
|
25
25
|
discountLifecycleActionOptions: configState.discountLifecycleActionOptions,
|
|
26
|
-
qboAccountMappingKindOptions: configState.qboAccountMappingKindOptions,
|
|
27
|
-
qboCustomerMatchingOptions: configState.qboCustomerMatchingOptions,
|
|
28
|
-
qboSyncStatusOptions: configState.qboSyncStatusOptions,
|
|
29
26
|
error: configState.error,
|
|
30
27
|
fetchState: configState.fetchState,
|
|
31
28
|
isInvoicingEnabled: configState.isInvoicingEnabled,
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
const dollarsFromAmountString = (value) => {
|
|
2
|
+
const parsed = Number.parseFloat(value);
|
|
3
|
+
if (Number.isNaN(parsed)) {
|
|
4
|
+
return 0;
|
|
5
|
+
}
|
|
6
|
+
return parsed;
|
|
7
|
+
};
|
|
1
8
|
export const computeIssueCreditNoteTotal = (lineItems) => lineItems
|
|
2
9
|
.filter((lineItem) => lineItem.selected)
|
|
3
10
|
.reduce((total, lineItem) => {
|
|
4
11
|
const quantity = Number.parseFloat(lineItem.quantity);
|
|
5
|
-
const unitAmount = lineItem.unitAmount
|
|
12
|
+
const unitAmount = dollarsFromAmountString(lineItem.unitAmount);
|
|
6
13
|
if (Number.isNaN(quantity) || quantity <= 0 || unitAmount <= 0) {
|
|
7
14
|
return total;
|
|
8
15
|
}
|
|
@@ -13,7 +20,7 @@ export const localDataToIssueCreditNotePayload = (localData) => {
|
|
|
13
20
|
.filter((lineItem) => lineItem.selected)
|
|
14
21
|
.map((lineItem) => {
|
|
15
22
|
const quantity = Math.round(Number.parseFloat(lineItem.quantity));
|
|
16
|
-
const unitAmount = lineItem.unitAmount
|
|
23
|
+
const unitAmount = dollarsFromAmountString(lineItem.unitAmount);
|
|
17
24
|
return {
|
|
18
25
|
description: lineItem.description,
|
|
19
26
|
quantity,
|
|
@@ -36,9 +43,9 @@ export const initializeIssueCreditNoteDraftFromInvoice = (invoice) => ({
|
|
|
36
43
|
description: lineItem.description,
|
|
37
44
|
id: lineItem.id,
|
|
38
45
|
maxQuantity: lineItem.quantity,
|
|
39
|
-
maxUnitAmount: lineItem.unitAmount,
|
|
46
|
+
maxUnitAmount: lineItem.unitAmount.amount,
|
|
40
47
|
quantity: String(lineItem.quantity),
|
|
41
48
|
selected: true,
|
|
42
|
-
unitAmount: lineItem.unitAmount,
|
|
49
|
+
unitAmount: lineItem.unitAmount.amount.toFixed(2),
|
|
43
50
|
})),
|
|
44
51
|
});
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
import { toAmount } from '../../../commonStateTypes/amount';
|
|
2
1
|
import { dateNow } from '../../../zeniDayJS';
|
|
3
2
|
import { initialRecordPaymentFormLocalData } from './recordPaymentFormConfig';
|
|
4
3
|
const trimOrUndefined = (value) => value.trim() !== '' ? value.trim() : undefined;
|
|
5
|
-
const
|
|
4
|
+
const dollarsFromAmountString = (value) => {
|
|
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
|
+
};
|
|
6
15
|
/**
|
|
7
16
|
* Build the invoice-scoped Record Payment body from the form draft. Amount stays
|
|
8
17
|
* in dollars for the invoice endpoint.
|
|
@@ -12,7 +21,7 @@ export const localDataToInvoiceRecordPaymentBody = (localData) => {
|
|
|
12
21
|
const date = localData.date.trim();
|
|
13
22
|
const referenceNumber = trimOrUndefined(localData.referenceNumber);
|
|
14
23
|
return {
|
|
15
|
-
amount: localData.amount
|
|
24
|
+
amount: dollarsFromAmountString(localData.amount),
|
|
16
25
|
payment_method: localData.paymentMethod,
|
|
17
26
|
...(gateway != null ? { gateway } : {}),
|
|
18
27
|
...(date !== '' ? { date } : {}),
|
|
@@ -25,7 +34,7 @@ export const localDataToInvoiceRecordPaymentBody = (localData) => {
|
|
|
25
34
|
* and the linked invoice into `linked_invoices`. Currency is locked to USD.
|
|
26
35
|
*/
|
|
27
36
|
export const localDataToRecordPaymentPayload = (localData) => {
|
|
28
|
-
const amount = localData.amount
|
|
37
|
+
const amount = dollarsFromAmountString(localData.amount);
|
|
29
38
|
const gateway = trimOrUndefined(localData.gateway);
|
|
30
39
|
const date = localData.date.trim();
|
|
31
40
|
const transactionId = trimOrUndefined(localData.transactionId);
|
|
@@ -51,7 +60,7 @@ export const localDataToRecordPaymentPayload = (localData) => {
|
|
|
51
60
|
};
|
|
52
61
|
export const initializeRecordPaymentDraftFromInvoice = (invoice) => ({
|
|
53
62
|
...initialRecordPaymentFormLocalData,
|
|
54
|
-
amount:
|
|
63
|
+
amount: amountDueDollarsFromInvoice(invoice),
|
|
55
64
|
customerId: invoice.customerID,
|
|
56
65
|
date: dateNow().format('YYYY-MM-DD'),
|
|
57
66
|
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/invoicingCouponFormConfig';
|
|
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,12 +1194,6 @@ 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';
|
|
1203
1197
|
export { acceptInvoicingTerms, clearInvoicingConfig, enableInvoicing, fetchInvoicingConfig, resetInvoicingConfigActionStates, updateInvoicingConfig, } from './view/invoicing/invoicingConfigView/invoicingConfigViewReducer';
|
|
1204
1198
|
export { getInvoicingConfigView } from './view/invoicing/invoicingConfigView/invoicingConfigViewSelector';
|
|
1205
1199
|
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.
|
|
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;
|
|
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 invoicingCouponFormConfig_1 = require("./view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig");
|
|
2805
|
+
Object.defineProperty(exports, "entityToInvoicingCouponFormLocalData", { enumerable: true, get: function () { return invoicingCouponFormConfig_1.entityToInvoicingCouponFormLocalData; } });
|
|
2806
|
+
Object.defineProperty(exports, "initialInvoicingCouponFormLocalData", { enumerable: true, get: function () { return invoicingCouponFormConfig_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,22 +3090,6 @@ 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; } });
|
|
3109
3093
|
// ── Invoicing: config ─────────────────────────────────────────────────────────
|
|
3110
3094
|
var invoicingConfigViewReducer_1 = require("./view/invoicing/invoicingConfigView/invoicingConfigViewReducer");
|
|
3111
3095
|
Object.defineProperty(exports, "acceptInvoicingTerms", { enumerable: true, get: function () { return invoicingConfigViewReducer_1.acceptInvoicingTerms; } });
|
package/lib/reducer.d.ts
CHANGED
|
@@ -153,7 +153,6 @@ 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';
|
|
157
156
|
import { InvoicingSubscriptionDetailViewState } from './view/invoicing/invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewState';
|
|
158
157
|
import { InvoicingSubscriptionListViewState } from './view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewState';
|
|
159
158
|
import { InvoicingTransactionDetailViewState } from './view/invoicing/invoicingTransactionDetailView/invoicingTransactionDetailViewState';
|
|
@@ -467,7 +466,6 @@ type ViewsState = {
|
|
|
467
466
|
invoicingOverviewState: InvoicingOverviewState;
|
|
468
467
|
invoicingPaymentActionState: InvoicingPaymentActionState;
|
|
469
468
|
invoicingPromotionalCreditActionState: PromotionalCreditActionState;
|
|
470
|
-
invoicingQboViewState: InvoicingQboViewState;
|
|
471
469
|
invoicingRecordPaymentState: InvoicingRecordPaymentState;
|
|
472
470
|
invoicingSettingsViewState: InvoicingSettingsViewState;
|
|
473
471
|
invoicingSubscriptionActionState: InvoicingSubscriptionActionState;
|
|
@@ -668,7 +666,6 @@ declare const reducers: import("redux").Reducer<import("redux").CombinedState<{
|
|
|
668
666
|
invoicingInvoiceListState: InvoicingInvoiceListState;
|
|
669
667
|
invoicingPaymentActionState: InvoicingPaymentActionState;
|
|
670
668
|
invoicingConfigViewState: InvoicingConfigViewState;
|
|
671
|
-
invoicingQboViewState: InvoicingQboViewState;
|
|
672
669
|
invoicingSettingsViewState: InvoicingSettingsViewState;
|
|
673
670
|
invoicingCatalogActionState: InvoicingCatalogActionState;
|
|
674
671
|
invoicingDiscountActionState: InvoicingDiscountActionState;
|
package/lib/reducer.js
CHANGED
|
@@ -194,7 +194,6 @@ 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"));
|
|
198
197
|
const invoicingSubscriptionDetailViewReducer_1 = __importStar(require("./view/invoicing/invoicingSubscriptionDetailView/invoicingSubscriptionDetailViewReducer"));
|
|
199
198
|
const invoicingSubscriptionListViewReducer_1 = __importStar(require("./view/invoicing/invoicingSubscriptionListView/invoicingSubscriptionListViewReducer"));
|
|
200
199
|
const invoicingTransactionDetailViewReducer_1 = __importStar(require("./view/invoicing/invoicingTransactionDetailView/invoicingTransactionDetailViewReducer"));
|
|
@@ -505,7 +504,6 @@ const initialViewsState = {
|
|
|
505
504
|
invoicingInvoiceListState: invoiceListReducer_1.initialState,
|
|
506
505
|
invoicingPaymentActionState: paymentActionReducer_1.initialState,
|
|
507
506
|
invoicingConfigViewState: invoicingConfigViewReducer_1.initialState,
|
|
508
|
-
invoicingQboViewState: invoicingQboViewReducer_1.initialState,
|
|
509
507
|
invoicingSettingsViewState: settingsViewReducer_1.initialState,
|
|
510
508
|
invoicingCatalogActionState: catalogActionReducer_1.initialState,
|
|
511
509
|
invoicingDiscountActionState: discountActionReducer_1.initialState,
|
|
@@ -795,7 +793,6 @@ const viewReducers = {
|
|
|
795
793
|
invoicingInvoiceListState: invoiceListReducer_1.default,
|
|
796
794
|
invoicingPaymentActionState: paymentActionReducer_1.default,
|
|
797
795
|
invoicingConfigViewState: invoicingConfigViewReducer_1.default,
|
|
798
|
-
invoicingQboViewState: invoicingQboViewReducer_1.default,
|
|
799
796
|
invoicingSettingsViewState: settingsViewReducer_1.default,
|
|
800
797
|
invoicingCatalogActionState: catalogActionReducer_1.default,
|
|
801
798
|
invoicingDiscountActionState: discountActionReducer_1.default,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ReportID, SelectorReport, SelectorView } from '../../commonStateTypes/viewAndReport/viewAndReport';
|
|
2
2
|
import { TenantsOrdered } from '../../entity/tenant/tenantSelector';
|
|
3
|
-
import { Tenant } from '../../entity/tenant/tenantState';
|
|
3
|
+
import { LoggedInUser, Tenant } from '../../entity/tenant/tenantState';
|
|
4
4
|
import { RootState } from '../../reducer';
|
|
5
5
|
import { CardType } from './dashboardState';
|
|
6
6
|
export interface DashboardReport extends SelectorReport {
|
|
@@ -11,4 +11,5 @@ export interface DashboardReport extends SelectorReport {
|
|
|
11
11
|
tenantsOrdered: TenantsOrdered;
|
|
12
12
|
currentTenant?: Tenant;
|
|
13
13
|
}
|
|
14
|
-
export declare const getDashboard: (state: RootState, additionalExcludedReports: ReportID[]
|
|
14
|
+
export declare const getDashboard: (state: RootState, additionalExcludedReports: ReportID[], // used when reports are excluded through statsig
|
|
15
|
+
signedInUser: LoggedInUser | undefined, isExpenseAutomationFeatureEnabledV2: boolean, isExpenseAutomationFeatureEnabled: boolean) => DashboardReport;
|
|
@@ -45,7 +45,7 @@ const tenantSelector = (0, toolkit_1.createSelector)(tenantSelector_1.getTenants
|
|
|
45
45
|
exports.getDashboard = (0, toolkit_1.createSelector)(tenantSelector, cardBalanceSelector_1.getCardBalance, cashBalanceSelector_1.getCashBalance, getOperatingExpensesForLast5Periods, getRevenueForLast4Periods, topExSelector_1.getTop6Expenses, getNetBurnOrIncomeForLast4Periods, getNetBurnOrIncomeStoryCard, getCashPositionLast5Periods, getCashInCashOutLast4Periods, insightsCardSelector_1.getInsights, companyPassportViewSelector_1.getCompanyPassportView, tasksCardSelector_1.getTasksCardReport, billPayCardSelector_1.getBillPayCardReport, reimbursementCardSelector_1.getReimbursementCardReport, apAgingSelector, arAgingSelector, zeniAccountsPromoCardSelector_1.getZeniAccountsPromoCard, referralSelector_1.getRewardsPlanCard, dashboardLayoutSelector_1.getDashboardCardsOrdered, (state) => {
|
|
46
46
|
const currentTenant = (0, tenantSelector_1.getCurrentTenant)(state);
|
|
47
47
|
return (0, monthEndCloseChecksViewSelector_1.getMonthEndCloseChecksViewByTenantId)(state, currentTenant.tenantId);
|
|
48
|
-
}, (state) => state.tenantState, (_state, additionalExcludedReports) => additionalExcludedReports, (state) => state.dashboardState.isTreasuryVideoClosed, (tenants, cardBalance, cashBalance, opEx, revenue, topEx, netBurnOrIncome, netBurnOrIncomeStoryCard, cashPosition, cashInCashOut, insightsView, companyPassportView, tasksCard, billPayCard, reimbursementCard, apAgingReport, arAgingReport, zeniAccountsPromoCard, rewardsPlanCard, cards, monthEndCloseChecksView, tenantState, additionalExcludedReports, isTreasuryVideoClosed) => {
|
|
48
|
+
}, (state) => state.tenantState, (_state, additionalExcludedReports) => additionalExcludedReports, (_state, _additionalExcludedReports, signedInUser) => signedInUser, (_state, _excluded, _signedInUser, isExpenseAutomationFeatureEnabledV2) => isExpenseAutomationFeatureEnabledV2, (_state, _excluded, _signedInUser, _enabledV2, isExpenseAutomationFeatureEnabled) => isExpenseAutomationFeatureEnabled, (state) => state.dashboardState.isTreasuryVideoClosed, (tenants, cardBalance, cashBalance, opEx, revenue, topEx, netBurnOrIncome, netBurnOrIncomeStoryCard, cashPosition, cashInCashOut, insightsView, companyPassportView, tasksCard, billPayCard, reimbursementCard, apAgingReport, arAgingReport, zeniAccountsPromoCard, rewardsPlanCard, cards, monthEndCloseChecksView, tenantState, additionalExcludedReports, signedInUser, isExpenseAutomationFeatureEnabledV2, isExpenseAutomationFeatureEnabled, isTreasuryVideoClosed) => {
|
|
49
49
|
const isReimbursementFeatureEnabled = tenants.currentTenant.company?.featuresActivationInfo
|
|
50
50
|
.isReimbursementFeatureEnabled;
|
|
51
51
|
const isBillPayFeatureEnabled = tenants.currentTenant.company?.featuresActivationInfo
|
|
@@ -75,24 +75,20 @@ exports.getDashboard = (0, toolkit_1.createSelector)(tenantSelector, cardBalance
|
|
|
75
75
|
if (connectionName === 'netsuite') {
|
|
76
76
|
cardsToRemove.add('cash_in_cash_out');
|
|
77
77
|
}
|
|
78
|
-
const { isUncategorizedExpenseAccountIdentified, isUncategorizedIncomeAccountIdentified,
|
|
78
|
+
const { isUncategorizedExpenseAccountIdentified, isUncategorizedIncomeAccountIdentified, numOfBillsPendingApproval, numOfReimbursementsPendingApproval, } = tasksCard.tasks;
|
|
79
79
|
const showUncategorizedAccountMapping = isUncategorizedExpenseAccountIdentified === false ||
|
|
80
80
|
isUncategorizedIncomeAccountIdentified === false;
|
|
81
|
-
//
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
// never hides the card.
|
|
87
|
-
const isTaskCardEmpty = tasksCard.fetchState === 'Completed' &&
|
|
88
|
-
showUncategorizedAccountMapping === false &&
|
|
81
|
+
// Filter out task card if tenant is Expense Automation and there are no tasks other than Expense
|
|
82
|
+
const isZeniUser = (0, userRoleType_1.isZeniSignedInUser)(signedInUser);
|
|
83
|
+
const isExpenseAutomationEnabledForUser = isExpenseAutomationFeatureEnabledV2 ||
|
|
84
|
+
(isExpenseAutomationFeatureEnabled && isZeniUser);
|
|
85
|
+
const isEmptyTaskCardForExpenseAutomation = showUncategorizedAccountMapping !== true &&
|
|
89
86
|
numOfBillsPendingApproval === 0 &&
|
|
90
87
|
numOfReimbursementsPendingApproval === 0 &&
|
|
91
|
-
|
|
92
|
-
isUncategorizedIncomeTransactionsExist === false;
|
|
88
|
+
isExpenseAutomationEnabledForUser;
|
|
93
89
|
if (tasksCard.showCard === false ||
|
|
94
90
|
hasTasksCardAccess === false ||
|
|
95
|
-
|
|
91
|
+
isEmptyTaskCardForExpenseAutomation) {
|
|
96
92
|
cardsToRemove.add('task_card');
|
|
97
93
|
}
|
|
98
94
|
const isBankerOrInvestor = tenants.currentTenant?.userRole != null &&
|
|
@@ -7,6 +7,7 @@ exports.getLastTransferEntryReplacement = exports.toTransactionView = exports.ge
|
|
|
7
7
|
exports.getExpenseAutomationTransactionView = getExpenseAutomationTransactionView;
|
|
8
8
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
9
9
|
const omit_1 = __importDefault(require("lodash/omit"));
|
|
10
|
+
const reduceFetchState_1 = require("../../../commonStateTypes/reduceFetchState");
|
|
10
11
|
const timePeriod_1 = require("../../../commonStateTypes/timePeriod");
|
|
11
12
|
const tenantSelector_1 = require("../../../entity/tenant/tenantSelector");
|
|
12
13
|
const transactionHelper_1 = require("../../../entity/transaction/transactionHelper");
|
|
@@ -95,7 +96,7 @@ exports.toTransactionView = toTransactionView;
|
|
|
95
96
|
var createTransferEntrySelector_2 = require("../../createTransferEntry/createTransferEntrySelector");
|
|
96
97
|
Object.defineProperty(exports, "getLastTransferEntryReplacement", { enumerable: true, get: function () { return createTransferEntrySelector_2.getLastTransferEntryReplacement; } });
|
|
97
98
|
function getExpenseAutomationTransactionView(state) {
|
|
98
|
-
const { accountState, classState, classListState, accountListState, createTransferEntryState, expenseAutomationTransactionsViewState, expenseAutomationViewState, projectState, projectListState, transactionState, monthEndCloseChecksState, } = state;
|
|
99
|
+
const { accountState, classState, classListState, accountListState, createTransferEntryState, expenseAutomationTransactionsViewState, expenseAutomationViewState, projectState, projectListState, transactionState, monthEndCloseChecksState, monthEndCloseChecksViewState, } = state;
|
|
99
100
|
const { selectedTransactionCategorizationCompletedSubTab, selectedTransactionCategorizationTab, } = expenseAutomationTransactionsViewState;
|
|
100
101
|
const { uiState, refreshStatus, saveStatus, markAsNotMiscategorizedStatus, transactionIdsBySelectedPeriod, transactionReviewLocalDataById, selectedCheckBoxTransactionIds, transactionIdsWithUnsavedData, uploadReceiptStatusById, selectedTransactionId, selectedTransactionLineId, filters, } = expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab];
|
|
101
102
|
const uncategorizedIncomeExpense = (0, accountListSelector_1.getUncategorizedAccounts)(accountState, accountListState, 'accountList');
|
|
@@ -168,8 +169,21 @@ function getExpenseAutomationTransactionView(state) {
|
|
|
168
169
|
}
|
|
169
170
|
return [];
|
|
170
171
|
});
|
|
171
|
-
const
|
|
172
|
-
|
|
172
|
+
const monthEndFetchState = monthYearPeriodId != null
|
|
173
|
+
? (monthEndCloseChecksViewState.monthEndCloseChecksViewByTenantId[currentTenant.tenantId]?.[monthYearPeriodId] ?? { fetchState: 'Not-Started', error: undefined })
|
|
174
|
+
: { fetchState: 'Not-Started', error: undefined };
|
|
175
|
+
const isAccountingClassesEnabled = (0, tenantSelector_1.getIsAccountingClassesEnabled)(state);
|
|
176
|
+
const allFetchStateList = [
|
|
177
|
+
accountList,
|
|
178
|
+
expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab],
|
|
179
|
+
];
|
|
180
|
+
if (isAccountingClassesEnabled) {
|
|
181
|
+
allFetchStateList.push(classList);
|
|
182
|
+
}
|
|
183
|
+
const fetchStatus = (0, reduceFetchState_1.reduceAnyFetchState)([
|
|
184
|
+
(0, reduceFetchState_1.reduceAllFetchState)(allFetchStateList),
|
|
185
|
+
monthEndFetchState,
|
|
186
|
+
]);
|
|
173
187
|
const totalCountByReview = expenseAutomationTransactionsViewState.transactionCategorizationView.review
|
|
174
188
|
.uiState.totalCount;
|
|
175
189
|
const totalCountByAutoCat = expenseAutomationTransactionsViewState.transactionCategorizationView
|
|
@@ -3,12 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.initialCreateCreditNoteFormLocalData = void 0;
|
|
4
4
|
const initialCreateCreditNoteFormLocalData = () => ({
|
|
5
5
|
customerId: '',
|
|
6
|
-
lineItems: [
|
|
7
|
-
{
|
|
8
|
-
description: '',
|
|
9
|
-
quantity: '1',
|
|
10
|
-
},
|
|
11
|
-
],
|
|
6
|
+
lineItems: [{ description: '', quantity: '1', unitAmount: '' }],
|
|
12
7
|
reasonCode: '',
|
|
13
8
|
referenceInvoiceId: '',
|
|
14
9
|
});
|
|
@@ -1,11 +1,18 @@
|
|
|
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
|
+
};
|
|
4
11
|
const localDataToCreateCreditNotePayload = (localData) => {
|
|
5
12
|
const lineItems = localData.lineItems
|
|
6
13
|
.map((lineItem) => {
|
|
7
14
|
const quantity = Math.round(Number.parseFloat(lineItem.quantity));
|
|
8
|
-
const unitAmount = lineItem.unitAmount
|
|
15
|
+
const unitAmount = dollarsFromAmountString(lineItem.unitAmount);
|
|
9
16
|
return {
|
|
10
17
|
description: lineItem.description.trim(),
|
|
11
18
|
quantity,
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { Amount } from '../../../commonStateTypes/amount';
|
|
2
1
|
import { FetchedState, ID } from '../../../commonStateTypes/common';
|
|
3
2
|
export interface CreateCreditNoteLineItemDraft {
|
|
4
3
|
description: string;
|
|
5
4
|
quantity: string;
|
|
6
|
-
|
|
7
|
-
unitAmount?: Amount;
|
|
5
|
+
unitAmount: string;
|
|
8
6
|
}
|
|
9
7
|
export interface CreateCreditNoteFormLocalData {
|
|
10
8
|
customerId: string;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Amount } from '../../../commonStateTypes/amount';
|
|
2
1
|
import type { InvoicingPlan } from '../../../entity/invoicing/plan/planState';
|
|
3
2
|
import type { InvoicingProduct } from '../../../entity/invoicing/product/productState';
|
|
4
3
|
import type { InvoicingCatalogItemFormSubFamily } from './editInvoicingCatalogItemDetailViewState';
|
|
@@ -40,12 +39,12 @@ export interface CreateSubFamilyFormValues {
|
|
|
40
39
|
period: string;
|
|
41
40
|
periodUnit: string;
|
|
42
41
|
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;
|
|
49
48
|
}
|
|
50
49
|
/** Build POST /catalog/products body for Create sub-family. */
|
|
51
50
|
export declare const createSubFamilyFormToPayload: (itemId: string, itemType: string, values: CreateSubFamilyFormValues) => Record<string, unknown>;
|
|
@@ -35,7 +35,7 @@ const tierToPayload = (tier) => ({
|
|
|
35
35
|
package_size: hasValue(tier.packageSize)
|
|
36
36
|
? Number(tier.packageSize)
|
|
37
37
|
: undefined,
|
|
38
|
-
price: tier.price
|
|
38
|
+
price: toAmountValue(tier.price),
|
|
39
39
|
pricing_type: tier.pricingType,
|
|
40
40
|
starting_unit: Number(tier.startingUnit) || 1,
|
|
41
41
|
});
|
|
@@ -49,7 +49,7 @@ const subFamilyToProductUpdate = (subFamily, itemType) => {
|
|
|
49
49
|
is_taxable: subFamily.isTaxable,
|
|
50
50
|
period: hasValue(subFamily.period) ? Number(subFamily.period) : null,
|
|
51
51
|
period_unit: hasValue(subFamily.period) ? subFamily.periodUnit : null,
|
|
52
|
-
price: tiered ? 0 : (subFamily.priceDollars
|
|
52
|
+
price: tiered ? 0 : toAmountValue(subFamily.priceDollars),
|
|
53
53
|
pricing_model: subFamily.pricingModel,
|
|
54
54
|
show_description_in_quotes: subFamily.showDescriptionInQuotes,
|
|
55
55
|
tiers: tiered ? subFamily.tiers.map(tierToPayload) : [],
|
|
@@ -117,6 +117,7 @@ const catalogDetailEditValuesToSavePayload = (values, itemType = 'plan', origina
|
|
|
117
117
|
};
|
|
118
118
|
};
|
|
119
119
|
exports.catalogDetailEditValuesToSavePayload = catalogDetailEditValuesToSavePayload;
|
|
120
|
+
const toAmountValue = (value) => Number(value) || 0;
|
|
120
121
|
/** Build POST /catalog/products body for Create sub-family. */
|
|
121
122
|
const createSubFamilyFormToPayload = (itemId, itemType, values) => {
|
|
122
123
|
const name = values.name.trim();
|
|
@@ -127,7 +128,7 @@ const createSubFamilyFormToPayload = (itemId, itemType, values) => {
|
|
|
127
128
|
is_taxable: true,
|
|
128
129
|
item_id: itemId,
|
|
129
130
|
name,
|
|
130
|
-
price: values.priceDollars
|
|
131
|
+
price: toAmountValue(values.priceDollars),
|
|
131
132
|
price_code: priceCode,
|
|
132
133
|
pricing_model: values.pricingModel || 'flat_fee',
|
|
133
134
|
show_description_in_invoices: true,
|
|
@@ -167,7 +168,7 @@ const productToCreateSubFamilyFormValues = (product) => ({
|
|
|
167
168
|
period: product?.period != null ? String(product.period) : '1',
|
|
168
169
|
periodUnit: product?.periodUnit ?? 'month',
|
|
169
170
|
priceCode: '',
|
|
170
|
-
priceDollars: product?.price,
|
|
171
|
+
priceDollars: product?.price != null ? String(product.price.amount) : '',
|
|
171
172
|
pricingModel: product?.pricingModel ?? 'flat_fee',
|
|
172
173
|
prorationType: product?.prorationType ?? 'site_default',
|
|
173
174
|
trialEndAction: product?.trialEndAction ?? 'site_default',
|