@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.
Files changed (40) hide show
  1. package/lib/esm/view/invoicing/createCreditNote/createCreditNoteFormConfig.js +6 -1
  2. package/lib/esm/view/invoicing/createCreditNote/createCreditNotePayload.js +1 -8
  3. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js +4 -5
  4. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +10 -11
  5. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js +8 -10
  6. package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewPayload.js +2 -2
  7. package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.js +1 -2
  8. package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.js +2 -5
  9. package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.js +1 -2
  10. package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.js +2 -2
  11. package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.js +2 -2
  12. package/lib/esm/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.js +3 -3
  13. package/lib/esm/view/invoicing/issueCreditNote/issueCreditNotePayload.js +4 -11
  14. package/lib/esm/view/invoicing/recordPayment/recordPaymentFormConfig.js +0 -1
  15. package/lib/esm/view/invoicing/recordPayment/recordPaymentPayload.js +5 -14
  16. package/lib/tsconfig.mocks.tsbuildinfo +1 -0
  17. package/lib/tsconfig.typecheck.tsbuildinfo +1 -0
  18. package/lib/view/invoicing/createCreditNote/createCreditNoteFormConfig.js +6 -1
  19. package/lib/view/invoicing/createCreditNote/createCreditNotePayload.js +1 -8
  20. package/lib/view/invoicing/createCreditNote/createCreditNoteState.d.ts +3 -1
  21. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.d.ts +2 -1
  22. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js +4 -5
  23. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +10 -11
  24. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewState.d.ts +10 -5
  25. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js +8 -10
  26. package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewPayload.js +2 -2
  27. package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.d.ts +5 -2
  28. package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.js +1 -2
  29. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.js +2 -5
  30. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewState.d.ts +3 -1
  31. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.js +1 -2
  32. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.js +2 -2
  33. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.js +2 -2
  34. package/lib/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.js +3 -3
  35. package/lib/view/invoicing/issueCreditNote/issueCreditNotePayload.js +4 -11
  36. package/lib/view/invoicing/issueCreditNote/issueCreditNoteState.d.ts +3 -2
  37. package/lib/view/invoicing/recordPayment/recordPaymentFormConfig.js +0 -1
  38. package/lib/view/invoicing/recordPayment/recordPaymentPayload.js +5 -14
  39. package/lib/view/invoicing/recordPayment/recordPaymentState.d.ts +4 -2
  40. package/package.json +1 -1
@@ -1,6 +1,11 @@
1
1
  export const initialCreateCreditNoteFormLocalData = () => ({
2
2
  customerId: '',
3
- lineItems: [{ description: '', quantity: '1', unitAmount: '' }],
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 = dollarsFromAmountString(lineItem.unitAmount);
5
+ const unitAmount = lineItem.unitAmount?.amount ?? 0;
13
6
  return {
14
7
  description: lineItem.description.trim(),
15
8
  quantity,
@@ -31,7 +31,7 @@ const tierToPayload = (tier) => ({
31
31
  package_size: hasValue(tier.packageSize)
32
32
  ? Number(tier.packageSize)
33
33
  : undefined,
34
- price: toAmountValue(tier.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 : toAmountValue(subFamily.priceDollars),
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: toAmountValue(values.priceDollars),
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 != null ? String(product.price.amount) : '',
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 toAmountValue = (value) => Number(value) || 0;
11
- const buildAccountingDetail = (localData) => {
10
+ const buildAccountingDetail = (subFamily) => {
12
11
  const detail = {};
13
- if (localData.sku.trim() !== '') {
14
- detail.sku = localData.sku.trim();
12
+ if (subFamily.sku.trim() !== '') {
13
+ detail.sku = subFamily.sku.trim();
15
14
  }
16
- if (localData.accountingCode.trim() !== '') {
17
- detail.accounting_code = localData.accountingCode.trim();
15
+ if (subFamily.accountingCode.trim() !== '') {
16
+ detail.accounting_code = subFamily.accountingCode.trim();
18
17
  }
19
- if (localData.accountingCategory.trim() !== '') {
20
- detail.accounting_category_1 = localData.accountingCategory.trim();
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 : toAmountValue(subFamily.priceDollars),
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: toAmountValue(tier.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(localData);
77
+ const accountingDetail = buildAccountingDetail(subFamily);
79
78
  if (accountingDetail != null) {
80
79
  payload.accounting_detail = accountingDetail;
81
80
  }
@@ -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 != null ? String(product.price.amount) : '',
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: String(tier.price.amount),
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()],
@@ -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.trim() !== '') {
26
- data.discount_amount = Number(localData.discountAmount);
25
+ if (localData.discountAmount != null) {
26
+ data.discount_amount = localData.discountAmount.amount;
27
27
  }
28
28
  data.currency_code = 'USD';
29
29
  }
@@ -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 != null ? String(coupon.discountAmount.amount) : '',
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.trim();
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 !== '' && !Number.isNaN(parsedSetupFee)
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) && response.data != null) {
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) && response.data != null) {
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) && response.data != null) {
11
+ if (isSuccessResponse(response)) {
12
12
  return of(retryInvoicingQboSyncTaskSuccess({
13
- status: response.data.status,
14
- taskId: response.data.task_id,
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 = dollarsFromAmountString(lineItem.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 = dollarsFromAmountString(lineItem.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.amount,
39
+ maxUnitAmount: lineItem.unitAmount,
47
40
  quantity: String(lineItem.quantity),
48
41
  selected: true,
49
- unitAmount: lineItem.unitAmount.amount.toFixed(2),
42
+ unitAmount: lineItem.unitAmount,
50
43
  })),
51
44
  });
@@ -25,7 +25,6 @@ export const INVOICING_PAYMENT_GATEWAY_VALUES = [
25
25
  'other',
26
26
  ];
27
27
  export const initialRecordPaymentFormLocalData = {
28
- amount: '',
29
28
  comment: '',
30
29
  customerId: '',
31
30
  date: '',
@@ -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 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
- };
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: dollarsFromAmountString(localData.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 = dollarsFromAmountString(localData.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: amountDueDollarsFromInvoice(invoice),
54
+ amount: amountDueFromInvoice(invoice),
64
55
  customerId: invoice.customerID,
65
56
  date: dateNow().format('YYYY-MM-DD'),
66
57
  invoiceToLink: invoice.id,