@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.
Files changed (100) hide show
  1. package/lib/entity/invoicing/invoicingCommonPayload.d.ts +0 -42
  2. package/lib/entity/invoicing/invoicingCommonPayload.js +1 -66
  3. package/lib/entity/tenant/clearAllEpic.d.ts +1 -2
  4. package/lib/entity/tenant/clearAllEpic.js +0 -2
  5. package/lib/epic.d.ts +1 -2
  6. package/lib/epic.js +1 -7
  7. package/lib/esm/entity/invoicing/invoicingCommonPayload.js +0 -61
  8. package/lib/esm/entity/tenant/clearAllEpic.js +0 -2
  9. package/lib/esm/epic.js +1 -7
  10. package/lib/esm/index.js +1 -5
  11. package/lib/esm/reducer.js +0 -3
  12. package/lib/esm/view/dashboard/dashboardSelector.js +10 -14
  13. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +18 -4
  14. package/lib/esm/view/invoicing/createCreditNote/createCreditNoteFormConfig.js +1 -6
  15. package/lib/esm/view/invoicing/createCreditNote/createCreditNotePayload.js +8 -1
  16. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js +5 -4
  17. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +11 -10
  18. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js +10 -8
  19. package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewPayload.js +2 -2
  20. package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewReducer.js +1 -1
  21. package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.js +1 -1
  22. package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.js +1 -43
  23. package/lib/esm/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.js +44 -0
  24. package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.js +5 -2
  25. package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.js +2 -1
  26. package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +1 -7
  27. package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.js +0 -3
  28. package/lib/esm/view/invoicing/issueCreditNote/issueCreditNotePayload.js +11 -4
  29. package/lib/esm/view/invoicing/recordPayment/recordPaymentFormConfig.js +1 -0
  30. package/lib/esm/view/invoicing/recordPayment/recordPaymentPayload.js +14 -5
  31. package/lib/index.d.ts +1 -7
  32. package/lib/index.js +4 -20
  33. package/lib/reducer.d.ts +0 -3
  34. package/lib/reducer.js +0 -3
  35. package/lib/view/dashboard/dashboardSelector.d.ts +3 -2
  36. package/lib/view/dashboard/dashboardSelector.js +9 -13
  37. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +17 -3
  38. package/lib/view/invoicing/createCreditNote/createCreditNoteFormConfig.js +1 -6
  39. package/lib/view/invoicing/createCreditNote/createCreditNotePayload.js +8 -1
  40. package/lib/view/invoicing/createCreditNote/createCreditNoteState.d.ts +1 -3
  41. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.d.ts +1 -2
  42. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js +5 -4
  43. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +11 -10
  44. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewState.d.ts +5 -10
  45. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js +10 -8
  46. package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewPayload.js +2 -2
  47. package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewReducer.js +3 -3
  48. package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.js +2 -2
  49. package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.d.ts +2 -9
  50. package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.js +0 -45
  51. package/lib/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.d.ts +5 -0
  52. package/lib/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.js +48 -0
  53. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.js +5 -2
  54. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewState.d.ts +1 -3
  55. package/lib/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.js +2 -1
  56. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewPayload.d.ts +1 -4
  57. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.d.ts +1 -1
  58. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +0 -6
  59. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.d.ts +1 -4
  60. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.js +0 -3
  61. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewState.d.ts +1 -4
  62. package/lib/view/invoicing/issueCreditNote/issueCreditNotePayload.js +11 -4
  63. package/lib/view/invoicing/issueCreditNote/issueCreditNoteState.d.ts +2 -3
  64. package/lib/view/invoicing/recordPayment/recordPaymentFormConfig.js +1 -0
  65. package/lib/view/invoicing/recordPayment/recordPaymentPayload.js +14 -5
  66. package/lib/view/invoicing/recordPayment/recordPaymentState.d.ts +2 -4
  67. package/package.json +1 -1
  68. package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.js +0 -25
  69. package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.js +0 -15
  70. package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.js +0 -15
  71. package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.js +0 -15
  72. package/lib/esm/view/invoicing/invoicingQboView/epics/invoicingQboViewActionType.js +0 -1
  73. package/lib/esm/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.js +0 -26
  74. package/lib/esm/view/invoicing/invoicingQboView/epics/startInvoicingQboBackfillEpic.js +0 -18
  75. package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewPayload.js +0 -47
  76. package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewReducer.js +0 -128
  77. package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +0 -20
  78. package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewState.js +0 -1
  79. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.d.ts +0 -6
  80. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.js +0 -29
  81. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.d.ts +0 -6
  82. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.js +0 -19
  83. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.d.ts +0 -6
  84. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.js +0 -19
  85. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.d.ts +0 -6
  86. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.js +0 -19
  87. package/lib/view/invoicing/invoicingQboView/epics/invoicingQboViewActionType.d.ts +0 -2
  88. package/lib/view/invoicing/invoicingQboView/epics/invoicingQboViewActionType.js +0 -2
  89. package/lib/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.d.ts +0 -6
  90. package/lib/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.js +0 -30
  91. package/lib/view/invoicing/invoicingQboView/epics/startInvoicingQboBackfillEpic.d.ts +0 -6
  92. package/lib/view/invoicing/invoicingQboView/epics/startInvoicingQboBackfillEpic.js +0 -22
  93. package/lib/view/invoicing/invoicingQboView/invoicingQboViewPayload.d.ts +0 -79
  94. package/lib/view/invoicing/invoicingQboView/invoicingQboViewPayload.js +0 -52
  95. package/lib/view/invoicing/invoicingQboView/invoicingQboViewReducer.d.ts +0 -25
  96. package/lib/view/invoicing/invoicingQboView/invoicingQboViewReducer.js +0 -132
  97. package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.d.ts +0 -21
  98. package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +0 -24
  99. package/lib/view/invoicing/invoicingQboView/invoicingQboViewState.d.ts +0 -14
  100. package/lib/view/invoicing/invoicingQboView/invoicingQboViewState.js +0 -2
@@ -1,43 +1 @@
1
- export const initialInvoicingCouponFormLocalData = {
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?.amount;
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 != null ? { setup_fee: 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: subscription.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, toInvoicingQboAccountMappingKindOption, toInvoicingSubscriptionEditFieldOption, toInvoicingSubscriptionLifecycleActionOption, } from '../../../entity/invoicing/invoicingCommonPayload';
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.amount;
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.amount;
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
  });
@@ -25,6 +25,7 @@ export const INVOICING_PAYMENT_GATEWAY_VALUES = [
25
25
  'other',
26
26
  ];
27
27
  export const initialRecordPaymentFormLocalData = {
28
+ amount: '',
28
29
  comment: '',
29
30
  customerId: '',
30
31
  date: '',
@@ -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 amountDueFromInvoice = (invoice) => invoice.amountDue ?? toAmount(0, 'USD', '$');
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?.amount ?? 0,
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?.amount ?? 0;
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: amountDueFromInvoice(invoice),
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/editInvoicingCouponDetailViewState';
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.withInvoicingQboAccountMappingId = exports.toInvoicingQboCustomerMatchingMode = exports.getInvoicingQboAccountMappingId = exports.INVOICING_QBO_CUSTOMER_MATCHING_MODES = exports.getInvoicingQboView = exports.startInvoicingQboBackfill = exports.retryInvoicingQboSyncTask = exports.fetchInvoicingQboSyncHealth = exports.fetchInvoicingQboConnection = exports.fetchInvoicingQboClasses = exports.fetchInvoicingQboAccounts = exports.clearInvoicingQboView = exports.isStripeConnectedFromSettings = exports.initialInvoicingBrandingFormLocalData = exports.entityToInvoicingBrandingFormLocalData = exports.INVOICING_BUSINESS_ADDRESS_TYPE = exports.getInvoicingSettingsView = exports.getInvoicingSettingsFetchState = exports.getInvoicingSettings = exports.getInvoicingBrandingFormView = exports.updateInvoicingSettings = exports.updateInvoicingBrandingFormDraft = exports.submitInvoicingBrandingForm = exports.saveInvoicingSettings = exports.resetSaveInvoicingSettings = exports.resetInvoicingBrandingFormDraft = exports.fetchInvoicingSettings = exports.disconnectInvoicingStripe = exports.connectInvoicingStripe = exports.clearInvoicingSettings = void 0;
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 editInvoicingCouponDetailViewState_1 = require("./view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState");
2805
- Object.defineProperty(exports, "entityToInvoicingCouponFormLocalData", { enumerable: true, get: function () { return editInvoicingCouponDetailViewState_1.entityToInvoicingCouponFormLocalData; } });
2806
- Object.defineProperty(exports, "initialInvoicingCouponFormLocalData", { enumerable: true, get: function () { return editInvoicingCouponDetailViewState_1.initialInvoicingCouponFormLocalData; } });
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[]) => DashboardReport;
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, isUncategorizedExpensesTransactionsExist, isUncategorizedIncomeTransactionsExist, numOfBillsPendingApproval, numOfReimbursementsPendingApproval, } = tasksCard.tasks;
78
+ const { isUncategorizedExpenseAccountIdentified, isUncategorizedIncomeAccountIdentified, numOfBillsPendingApproval, numOfReimbursementsPendingApproval, } = tasksCard.tasks;
79
79
  const showUncategorizedAccountMapping = isUncategorizedExpenseAccountIdentified === false ||
80
80
  isUncategorizedIncomeAccountIdentified === false;
81
- // Drop the card only when it would render no rows at all. This mirrors every
82
- // row TasksCard can show; keep the two lists in step. Expense Automation
83
- // tenants are no longer a special case — they see the uncategorized expense
84
- // and income rows like everyone else, so those rows count towards emptiness.
85
- // Only judge emptiness once the payload has arrived, so a pending fetch
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
- isUncategorizedExpensesTransactionsExist === false &&
92
- isUncategorizedIncomeTransactionsExist === false;
88
+ isExpenseAutomationEnabledForUser;
93
89
  if (tasksCard.showCard === false ||
94
90
  hasTasksCardAccess === false ||
95
- isTaskCardEmpty) {
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 { fetchState, error } = expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab];
172
- const fetchStatus = { fetchState, error };
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?.amount ?? 0;
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
- /** Unset until entered, so a blank field is distinguishable from a real 0. */
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?.amount ?? 0,
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?.amount ?? 0),
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?.amount ?? 0,
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',