@zeniai/client-epic-state 5.1.77-betaAK0 → 5.1.77-betaAK2
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/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/editInvoicingCouponDetailViewState.js +1 -2
- 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/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.js +2 -2
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.js +2 -2
- package/lib/esm/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.js +3 -3
- 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/tsconfig.mocks.tsbuildinfo +1 -0
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -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/editInvoicingCouponDetailViewState.d.ts +5 -2
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.js +1 -2
- 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/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.js +2 -2
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.js +2 -2
- package/lib/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.js +3 -3
- 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
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export const initialCreateCreditNoteFormLocalData = () => ({
|
|
2
2
|
customerId: '',
|
|
3
|
-
lineItems: [
|
|
3
|
+
lineItems: [
|
|
4
|
+
{
|
|
5
|
+
description: '',
|
|
6
|
+
quantity: '1',
|
|
7
|
+
},
|
|
8
|
+
],
|
|
4
9
|
reasonCode: '',
|
|
5
10
|
referenceInvoiceId: '',
|
|
6
11
|
});
|
|
@@ -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 localDataToCreateCreditNotePayload = (localData) => {
|
|
9
2
|
const lineItems = localData.lineItems
|
|
10
3
|
.map((lineItem) => {
|
|
11
4
|
const quantity = Math.round(Number.parseFloat(lineItem.quantity));
|
|
12
|
-
const unitAmount =
|
|
5
|
+
const unitAmount = lineItem.unitAmount?.amount ?? 0;
|
|
13
6
|
return {
|
|
14
7
|
description: lineItem.description.trim(),
|
|
15
8
|
quantity,
|
package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js
CHANGED
|
@@ -31,7 +31,7 @@ const tierToPayload = (tier) => ({
|
|
|
31
31
|
package_size: hasValue(tier.packageSize)
|
|
32
32
|
? Number(tier.packageSize)
|
|
33
33
|
: undefined,
|
|
34
|
-
price:
|
|
34
|
+
price: tier.price?.amount ?? 0,
|
|
35
35
|
pricing_type: tier.pricingType,
|
|
36
36
|
starting_unit: Number(tier.startingUnit) || 1,
|
|
37
37
|
});
|
|
@@ -45,7 +45,7 @@ const subFamilyToProductUpdate = (subFamily, itemType) => {
|
|
|
45
45
|
is_taxable: subFamily.isTaxable,
|
|
46
46
|
period: hasValue(subFamily.period) ? Number(subFamily.period) : null,
|
|
47
47
|
period_unit: hasValue(subFamily.period) ? subFamily.periodUnit : null,
|
|
48
|
-
price: tiered ? 0 :
|
|
48
|
+
price: tiered ? 0 : (subFamily.priceDollars?.amount ?? 0),
|
|
49
49
|
pricing_model: subFamily.pricingModel,
|
|
50
50
|
show_description_in_quotes: subFamily.showDescriptionInQuotes,
|
|
51
51
|
tiers: tiered ? subFamily.tiers.map(tierToPayload) : [],
|
|
@@ -112,7 +112,6 @@ export const catalogDetailEditValuesToSavePayload = (values, itemType = 'plan',
|
|
|
112
112
|
productUpdates,
|
|
113
113
|
};
|
|
114
114
|
};
|
|
115
|
-
const toAmountValue = (value) => Number(value) || 0;
|
|
116
115
|
/** Build POST /catalog/products body for Create sub-family. */
|
|
117
116
|
export const createSubFamilyFormToPayload = (itemId, itemType, values) => {
|
|
118
117
|
const name = values.name.trim();
|
|
@@ -123,7 +122,7 @@ export const createSubFamilyFormToPayload = (itemId, itemType, values) => {
|
|
|
123
122
|
is_taxable: true,
|
|
124
123
|
item_id: itemId,
|
|
125
124
|
name,
|
|
126
|
-
price:
|
|
125
|
+
price: values.priceDollars?.amount ?? 0,
|
|
127
126
|
price_code: priceCode,
|
|
128
127
|
pricing_model: values.pricingModel || 'flat_fee',
|
|
129
128
|
show_description_in_invoices: true,
|
|
@@ -162,7 +161,7 @@ export const productToCreateSubFamilyFormValues = (product) => ({
|
|
|
162
161
|
period: product?.period != null ? String(product.period) : '1',
|
|
163
162
|
periodUnit: product?.periodUnit ?? 'month',
|
|
164
163
|
priceCode: '',
|
|
165
|
-
priceDollars: product?.price
|
|
164
|
+
priceDollars: product?.price,
|
|
166
165
|
pricingModel: product?.pricingModel ?? 'flat_fee',
|
|
167
166
|
prorationType: product?.prorationType ?? 'site_default',
|
|
168
167
|
trialEndAction: product?.trialEndAction ?? 'site_default',
|
|
@@ -7,17 +7,16 @@ const toProductCode = (value) => value
|
|
|
7
7
|
.toLowerCase()
|
|
8
8
|
.replace(/[^a-z0-9]+/g, '-')
|
|
9
9
|
.replace(/^-|-$/g, '');
|
|
10
|
-
const
|
|
11
|
-
const buildAccountingDetail = (localData) => {
|
|
10
|
+
const buildAccountingDetail = (subFamily) => {
|
|
12
11
|
const detail = {};
|
|
13
|
-
if (
|
|
14
|
-
detail.sku =
|
|
12
|
+
if (subFamily.sku.trim() !== '') {
|
|
13
|
+
detail.sku = subFamily.sku.trim();
|
|
15
14
|
}
|
|
16
|
-
if (
|
|
17
|
-
detail.accounting_code =
|
|
15
|
+
if (subFamily.accountingCode.trim() !== '') {
|
|
16
|
+
detail.accounting_code = subFamily.accountingCode.trim();
|
|
18
17
|
}
|
|
19
|
-
if (
|
|
20
|
-
detail.accounting_category_1 =
|
|
18
|
+
if (subFamily.accountingCategory.trim() !== '') {
|
|
19
|
+
detail.accounting_category_1 = subFamily.accountingCategory.trim();
|
|
21
20
|
}
|
|
22
21
|
return Object.keys(detail).length > 0 ? detail : undefined;
|
|
23
22
|
};
|
|
@@ -31,7 +30,7 @@ const buildSubFamilyPayload = (localData, subFamily, clearEmptyValues) => {
|
|
|
31
30
|
free_quantity: Number(subFamily.freeQuantity) || 0,
|
|
32
31
|
is_taxable: subFamily.isTaxable,
|
|
33
32
|
name,
|
|
34
|
-
price: tiered ? 0 :
|
|
33
|
+
price: tiered ? 0 : (subFamily.priceDollars?.amount ?? 0),
|
|
35
34
|
price_code: priceCode,
|
|
36
35
|
pricing_model: subFamily.pricingModel,
|
|
37
36
|
show_description_in_invoices: subFamily.showDescriptionInInvoices,
|
|
@@ -70,12 +69,12 @@ const buildSubFamilyPayload = (localData, subFamily, clearEmptyValues) => {
|
|
|
70
69
|
payload.tiers = subFamily.tiers.map((tier) => ({
|
|
71
70
|
ending_unit: tier.endingUnit.trim() !== '' ? Number(tier.endingUnit) : undefined,
|
|
72
71
|
package_size: tier.packageSize.trim() !== '' ? Number(tier.packageSize) : undefined,
|
|
73
|
-
price:
|
|
72
|
+
price: tier.price?.amount ?? 0,
|
|
74
73
|
pricing_type: tier.pricingType,
|
|
75
74
|
starting_unit: Number(tier.startingUnit) || 1,
|
|
76
75
|
}));
|
|
77
76
|
}
|
|
78
|
-
const accountingDetail = buildAccountingDetail(
|
|
77
|
+
const accountingDetail = buildAccountingDetail(subFamily);
|
|
79
78
|
if (accountingDetail != null) {
|
|
80
79
|
payload.accounting_detail = accountingDetail;
|
|
81
80
|
}
|
package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js
CHANGED
|
@@ -44,11 +44,12 @@ export const isTieredCatalogPricingModel = (model) => ['tiered', 'volume', 'stai
|
|
|
44
44
|
export const blankInvoicingCatalogTier = (startingUnit = '1') => ({
|
|
45
45
|
endingUnit: '',
|
|
46
46
|
packageSize: '',
|
|
47
|
-
price: '',
|
|
48
47
|
pricingType: 'per_unit',
|
|
49
48
|
startingUnit,
|
|
50
49
|
});
|
|
51
50
|
export const blankInvoicingCatalogSubFamily = () => ({
|
|
51
|
+
accountingCategory: '',
|
|
52
|
+
accountingCode: '',
|
|
52
53
|
billingCycles: '',
|
|
53
54
|
description: '',
|
|
54
55
|
freeQuantity: '0',
|
|
@@ -58,12 +59,12 @@ export const blankInvoicingCatalogSubFamily = () => ({
|
|
|
58
59
|
name: '',
|
|
59
60
|
period: '1',
|
|
60
61
|
periodUnit: 'month',
|
|
61
|
-
priceDollars: '',
|
|
62
62
|
priceCode: '',
|
|
63
63
|
pricingModel: 'flat_fee',
|
|
64
64
|
prorationType: 'site_default',
|
|
65
65
|
showDescriptionInInvoices: true,
|
|
66
66
|
showDescriptionInQuotes: true,
|
|
67
|
+
sku: '',
|
|
67
68
|
tiers: [blankInvoicingCatalogTier('1')],
|
|
68
69
|
trialEndAction: 'site_default',
|
|
69
70
|
trialPeriod: '',
|
|
@@ -76,7 +77,10 @@ export const invoicingProductToCatalogItemFormSubFamily = (product) => {
|
|
|
76
77
|
}
|
|
77
78
|
return {
|
|
78
79
|
...base,
|
|
80
|
+
accountingCategory: product.accountingDetail?.accountingCategory1 ?? '',
|
|
81
|
+
accountingCode: product.accountingDetail?.accountingCode ?? '',
|
|
79
82
|
billingCycles: product.billingCycles != null ? String(product.billingCycles) : '',
|
|
83
|
+
sku: product.accountingDetail?.sku ?? '',
|
|
80
84
|
description: product.description ?? '',
|
|
81
85
|
freeQuantity: product.freeQuantity != null ? String(product.freeQuantity) : '0',
|
|
82
86
|
id: product.id,
|
|
@@ -85,7 +89,7 @@ export const invoicingProductToCatalogItemFormSubFamily = (product) => {
|
|
|
85
89
|
name: product.name ?? '',
|
|
86
90
|
period: product.period != null ? String(product.period) : '1',
|
|
87
91
|
periodUnit: product.periodUnit ?? 'month',
|
|
88
|
-
priceDollars: product.price
|
|
92
|
+
priceDollars: product.price,
|
|
89
93
|
priceCode: product.priceCode ?? '',
|
|
90
94
|
pricingModel: product.pricingModel ?? 'flat_fee',
|
|
91
95
|
prorationType: product.prorationType ?? 'site_default',
|
|
@@ -95,7 +99,7 @@ export const invoicingProductToCatalogItemFormSubFamily = (product) => {
|
|
|
95
99
|
? product.tiers.map((tier) => ({
|
|
96
100
|
endingUnit: tier.endingUnit != null ? String(tier.endingUnit) : '',
|
|
97
101
|
packageSize: tier.packageSize != null ? String(tier.packageSize) : '',
|
|
98
|
-
price:
|
|
102
|
+
price: tier.price,
|
|
99
103
|
pricingType: tier.pricingType ?? 'per_unit',
|
|
100
104
|
startingUnit: String(tier.startingUnit ?? 1),
|
|
101
105
|
}))
|
|
@@ -106,8 +110,6 @@ export const invoicingProductToCatalogItemFormSubFamily = (product) => {
|
|
|
106
110
|
};
|
|
107
111
|
};
|
|
108
112
|
export const initialInvoicingCatalogItemFormLocalData = {
|
|
109
|
-
accountingCategory: '',
|
|
110
|
-
accountingCode: '',
|
|
111
113
|
applicableItems: [],
|
|
112
114
|
catalogType: 'plan',
|
|
113
115
|
description: '',
|
|
@@ -115,7 +117,6 @@ export const initialInvoicingCatalogItemFormLocalData = {
|
|
|
115
117
|
itemApplicability: 'all',
|
|
116
118
|
name: '',
|
|
117
119
|
productCode: '',
|
|
118
|
-
sku: '',
|
|
119
120
|
subFamilies: [blankInvoicingCatalogSubFamily()],
|
|
120
121
|
unit: '',
|
|
121
122
|
};
|
|
@@ -136,8 +137,6 @@ export const entityToInvoicingCatalogItemFormLocalData = (item) => {
|
|
|
136
137
|
? 'addon'
|
|
137
138
|
: 'plan';
|
|
138
139
|
return {
|
|
139
|
-
accountingCategory: plan.subFamilies?.[0]?.accountingDetail?.accountingCategory1 ?? '',
|
|
140
|
-
accountingCode: plan.subFamilies?.[0]?.accountingDetail?.accountingCode ?? '',
|
|
141
140
|
applicableItems: item.applicableItems ?? [],
|
|
142
141
|
catalogType,
|
|
143
142
|
description: item.description ?? '',
|
|
@@ -145,7 +144,6 @@ export const entityToInvoicingCatalogItemFormLocalData = (item) => {
|
|
|
145
144
|
itemApplicability: item.itemApplicability ?? 'all',
|
|
146
145
|
name: item.name ?? '',
|
|
147
146
|
productCode: item.productCode ?? '',
|
|
148
|
-
sku: plan.subFamilies?.[0]?.accountingDetail?.sku ?? '',
|
|
149
147
|
subFamilies: plan?.subFamilies != null && plan.subFamilies.length > 0
|
|
150
148
|
? plan.subFamilies.map(invoicingProductToCatalogItemFormSubFamily)
|
|
151
149
|
: [invoicingProductToCatalogItemFormSubFamily()],
|
package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewPayload.js
CHANGED
|
@@ -22,8 +22,8 @@ export const localDataToSaveInvoicingCouponPayload = (localData, isCreate) => {
|
|
|
22
22
|
data.discount_percentage = Number(localData.discountPercentage);
|
|
23
23
|
}
|
|
24
24
|
if (localData.discountType === 'fixed_amount') {
|
|
25
|
-
if (localData.discountAmount
|
|
26
|
-
data.discount_amount =
|
|
25
|
+
if (localData.discountAmount != null) {
|
|
26
|
+
data.discount_amount = localData.discountAmount.amount;
|
|
27
27
|
}
|
|
28
28
|
data.currency_code = 'USD';
|
|
29
29
|
}
|
package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.js
CHANGED
|
@@ -2,7 +2,6 @@ export const initialInvoicingCouponFormLocalData = {
|
|
|
2
2
|
applyOn: 'invoice_amount',
|
|
3
3
|
couponCode: '',
|
|
4
4
|
couponId: '',
|
|
5
|
-
discountAmount: '',
|
|
6
5
|
discountPercentage: '',
|
|
7
6
|
discountQuantity: '',
|
|
8
7
|
discountType: 'percentage',
|
|
@@ -25,7 +24,7 @@ export const entityToInvoicingCouponFormLocalData = (coupon) => {
|
|
|
25
24
|
applyOn: coupon.applyOn ?? 'invoice_amount',
|
|
26
25
|
couponCode: coupon.couponCode ?? '',
|
|
27
26
|
couponId: coupon.id ?? '',
|
|
28
|
-
discountAmount: coupon.discountAmount
|
|
27
|
+
discountAmount: coupon.discountAmount,
|
|
29
28
|
discountPercentage: coupon.discountPercentage != null
|
|
30
29
|
? String(coupon.discountPercentage)
|
|
31
30
|
: '',
|
|
@@ -24,8 +24,7 @@ export const localDataToSaveInvoicingSubscriptionPayload = (localData, shippingA
|
|
|
24
24
|
quantity: 1,
|
|
25
25
|
})),
|
|
26
26
|
];
|
|
27
|
-
const setupFee = localData.setupFee
|
|
28
|
-
const parsedSetupFee = Number.parseFloat(setupFee);
|
|
27
|
+
const setupFee = localData.setupFee?.amount;
|
|
29
28
|
const poNumber = localData.poNumber.trim();
|
|
30
29
|
const trialEnd = localData.trialEnd.trim();
|
|
31
30
|
return {
|
|
@@ -35,9 +34,7 @@ export const localDataToSaveInvoicingSubscriptionPayload = (localData, shippingA
|
|
|
35
34
|
currency_code: localData.preferredCurrencyCode,
|
|
36
35
|
customer_id: localData.customerId,
|
|
37
36
|
subscription_items: items,
|
|
38
|
-
...(setupFee
|
|
39
|
-
? { setup_fee: parsedSetupFee }
|
|
40
|
-
: {}),
|
|
37
|
+
...(setupFee != null ? { setup_fee: setupFee } : {}),
|
|
41
38
|
...(poNumber !== '' ? { po_number: poNumber } : {}),
|
|
42
39
|
...(trialEnd !== '' ? { trial_end: trialEnd } : {}),
|
|
43
40
|
...(localData.couponId !== '' ? { coupon_ids: [localData.couponId] } : {}),
|
|
@@ -44,7 +44,6 @@ export const initialInvoicingSubscriptionFormLocalData = {
|
|
|
44
44
|
planQuantity: 1,
|
|
45
45
|
poNumber: '',
|
|
46
46
|
preferredCurrencyCode: 'USD',
|
|
47
|
-
setupFee: '',
|
|
48
47
|
trialEnd: '',
|
|
49
48
|
};
|
|
50
49
|
/** Seed the form draft from an existing subscription entity (edit mode). */
|
|
@@ -66,7 +65,7 @@ export const entityToInvoicingSubscriptionFormLocalData = (subscription) => {
|
|
|
66
65
|
planQuantity: planItem?.quantity ?? 1,
|
|
67
66
|
poNumber: subscription.poNumber ?? '',
|
|
68
67
|
preferredCurrencyCode: subscription.currencyCode ?? 'USD',
|
|
69
|
-
setupFee:
|
|
68
|
+
setupFee: subscription.setupFee,
|
|
70
69
|
trialEnd: subscription.trialEnd != null
|
|
71
70
|
? subscription.trialEnd.format('YYYY-MM-DD')
|
|
72
71
|
: '',
|
|
@@ -6,8 +6,8 @@ import { fetchInvoicingQboConnection, updateInvoicingQboConnection, updateInvoic
|
|
|
6
6
|
export const fetchInvoicingQboConnectionEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(fetchInvoicingQboConnection.match), switchMap(() => {
|
|
7
7
|
const apiUrl = `${zeniAPI.apiEndPoints.invoicingMicroServiceBaseUrl}/1.0/qbo/connection`;
|
|
8
8
|
return zeniAPI.getJSON(apiUrl).pipe(switchMap((response) => {
|
|
9
|
-
if (isSuccessResponse(response)
|
|
10
|
-
return of(updateInvoicingQboConnection(mapInvoicingQboConnection(response.data)));
|
|
9
|
+
if (isSuccessResponse(response)) {
|
|
10
|
+
return of(updateInvoicingQboConnection(mapInvoicingQboConnection(response.data ?? { connected: false })));
|
|
11
11
|
}
|
|
12
12
|
return of(updateInvoicingQboConnectionFailure(response.status));
|
|
13
13
|
}), catchError((error) => of(updateInvoicingQboConnectionFailure(createZeniAPIStatus('Unexpected Error', 'Fetch QBO connection REST API call errored out ' +
|
|
@@ -6,8 +6,8 @@ import { fetchInvoicingQboSyncHealth, updateInvoicingQboSyncHealth, updateInvoic
|
|
|
6
6
|
export const fetchInvoicingQboSyncHealthEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(fetchInvoicingQboSyncHealth.match), switchMap(() => {
|
|
7
7
|
const apiUrl = `${zeniAPI.apiEndPoints.invoicingMicroServiceBaseUrl}/1.0/qbo/sync-health`;
|
|
8
8
|
return zeniAPI.getJSON(apiUrl).pipe(switchMap((response) => {
|
|
9
|
-
if (isSuccessResponse(response)
|
|
10
|
-
return of(updateInvoicingQboSyncHealth(mapInvoicingQboSyncHealth(response.data)));
|
|
9
|
+
if (isSuccessResponse(response)) {
|
|
10
|
+
return of(updateInvoicingQboSyncHealth(mapInvoicingQboSyncHealth(response.data ?? {})));
|
|
11
11
|
}
|
|
12
12
|
return of(updateInvoicingQboSyncHealthFailure(response.status));
|
|
13
13
|
}), catchError((error) => of(updateInvoicingQboSyncHealthFailure(createZeniAPIStatus('Unexpected Error', 'Fetch QBO sync health REST API call errored out ' +
|
|
@@ -8,10 +8,10 @@ export const retryInvoicingQboSyncTaskEpic = (actions$, _state$, zeniAPI) => act
|
|
|
8
8
|
return zeniAPI
|
|
9
9
|
.postAndGetJSON(apiUrl, {})
|
|
10
10
|
.pipe(switchMap((response) => {
|
|
11
|
-
if (isSuccessResponse(response)
|
|
11
|
+
if (isSuccessResponse(response)) {
|
|
12
12
|
return of(retryInvoicingQboSyncTaskSuccess({
|
|
13
|
-
status: response.data
|
|
14
|
-
taskId: response.data
|
|
13
|
+
status: response.data?.status ?? '',
|
|
14
|
+
taskId: response.data?.task_id ?? taskId,
|
|
15
15
|
}), fetchInvoicingQboSyncHealth());
|
|
16
16
|
}
|
|
17
17
|
return of(retryInvoicingQboSyncTaskFailure({
|
|
@@ -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,
|