@zeniai/client-epic-state 5.2.7-betaRD2 → 5.2.8-betaAK0

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 (162) hide show
  1. package/lib/entity/invoicing/invoicingCommonPayload.d.ts +36 -2
  2. package/lib/entity/invoicing/invoicingCommonPayload.js +89 -11
  3. package/lib/entity/invoicing/product/productPayload.d.ts +10 -0
  4. package/lib/entity/invoicing/product/productPayload.js +14 -2
  5. package/lib/entity/jeSchedules/jeScheduleHelper.d.ts +0 -1
  6. package/lib/entity/jeSchedules/jeScheduleHelper.js +0 -7
  7. package/lib/entity/jeSchedules/jeSchedulesPayload.d.ts +1 -66
  8. package/lib/entity/jeSchedules/jeSchedulesPayload.js +0 -135
  9. package/lib/entity/jeSchedules/jeSchedulesReducer.d.ts +2 -4
  10. package/lib/entity/jeSchedules/jeSchedulesReducer.js +2 -30
  11. package/lib/entity/jeSchedules/jeSchedulesSelector.d.ts +2 -11
  12. package/lib/entity/jeSchedules/jeSchedulesSelector.js +3 -38
  13. package/lib/entity/jeSchedules/jeSchedulesState.d.ts +1 -79
  14. package/lib/entity/jeSchedules/jeSchedulesTypes.d.ts +1 -24
  15. package/lib/entity/jeSchedules/jeSchedulesTypes.js +1 -88
  16. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  17. package/lib/entity/snackbar/snackbarTypes.js +0 -3
  18. package/lib/entity/transaction/payloadTypes/scheduleTransactionPayload.d.ts +0 -2
  19. package/lib/entity/transaction/payloadTypes/scheduleTransactionPayload.js +0 -2
  20. package/lib/entity/transaction/stateTypes/scheduleTransaction.d.ts +0 -2
  21. package/lib/epic.d.ts +1 -9
  22. package/lib/epic.js +0 -16
  23. package/lib/esm/entity/invoicing/invoicingCommonPayload.js +86 -10
  24. package/lib/esm/entity/invoicing/product/productPayload.js +14 -2
  25. package/lib/esm/entity/jeSchedules/jeScheduleHelper.js +0 -6
  26. package/lib/esm/entity/jeSchedules/jeSchedulesPayload.js +1 -135
  27. package/lib/esm/entity/jeSchedules/jeSchedulesReducer.js +2 -30
  28. package/lib/esm/entity/jeSchedules/jeSchedulesSelector.js +2 -36
  29. package/lib/esm/entity/jeSchedules/jeSchedulesTypes.js +0 -78
  30. package/lib/esm/entity/snackbar/snackbarTypes.js +0 -3
  31. package/lib/esm/entity/transaction/payloadTypes/scheduleTransactionPayload.js +0 -2
  32. package/lib/esm/epic.js +0 -16
  33. package/lib/esm/index.js +8 -14
  34. package/lib/esm/view/accountList/accountListReducer.js +0 -1
  35. package/lib/esm/view/expenseAutomationView/epics/common/fetchAllExpenseAutomationTabsEpic.js +3 -6
  36. package/lib/esm/view/expenseAutomationView/epics/jeSchedule/fetchJeSchedulesEpic.js +5 -41
  37. package/lib/esm/view/expenseAutomationView/epics/jeSchedule/ignoreRecommendedJeScheduleEpic.js +2 -14
  38. package/lib/esm/view/expenseAutomationView/payload/jeSchedulesPayload.js +0 -55
  39. package/lib/esm/view/expenseAutomationView/reducers/jeSchedulesViewReducer.js +29 -306
  40. package/lib/esm/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +22 -294
  41. package/lib/esm/view/expenseAutomationView/types/jeSchedulesViewState.js +6 -5
  42. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +24 -9
  43. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.js +2 -1
  44. package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/saveInvoicingCatalogItemEpic.js +6 -1
  45. package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.js +2 -0
  46. package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingAccountingPickersEpic.js +10 -5
  47. package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +47 -3
  48. package/lib/esm/view/invoicing/settingsView/settingsViewEpics.js +17 -2
  49. package/lib/esm/view/invoicing/settingsView/settingsViewSelector.js +7 -3
  50. package/lib/esm/view/scheduleView/scheduleListView/epics/fetchAccruedScheduleListEpic.js +1 -1
  51. package/lib/esm/view/scheduleView/scheduleListView/epics/fetchDownloadSchedulesEpic.js +2 -7
  52. package/lib/esm/view/scheduleView/scheduleListView/scheduleListReducer.js +3 -5
  53. package/lib/index.d.ts +12 -17
  54. package/lib/index.js +47 -91
  55. package/lib/view/accountList/accountListReducer.js +0 -1
  56. package/lib/view/accountList/accountListState.d.ts +1 -1
  57. package/lib/view/expenseAutomationView/epics/common/fetchAllExpenseAutomationTabsEpic.js +3 -6
  58. package/lib/view/expenseAutomationView/epics/jeSchedule/fetchJeSchedulesEpic.d.ts +2 -3
  59. package/lib/view/expenseAutomationView/epics/jeSchedule/fetchJeSchedulesEpic.js +3 -39
  60. package/lib/view/expenseAutomationView/epics/jeSchedule/ignoreRecommendedJeScheduleEpic.js +2 -14
  61. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  62. package/lib/view/expenseAutomationView/payload/jeSchedulesPayload.d.ts +3 -72
  63. package/lib/view/expenseAutomationView/payload/jeSchedulesPayload.js +1 -58
  64. package/lib/view/expenseAutomationView/reducers/jeSchedulesViewReducer.d.ts +12 -91
  65. package/lib/view/expenseAutomationView/reducers/jeSchedulesViewReducer.js +29 -308
  66. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +1 -1
  67. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +2 -2
  68. package/lib/view/expenseAutomationView/selectorTypes/jeSchedulesSelectorTypes.d.ts +7 -36
  69. package/lib/view/expenseAutomationView/selectors/jeSchedulesViewSelector.d.ts +0 -34
  70. package/lib/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +21 -302
  71. package/lib/view/expenseAutomationView/types/completedSubTab.d.ts +1 -1
  72. package/lib/view/expenseAutomationView/types/jeSchedulesViewState.d.ts +8 -82
  73. package/lib/view/expenseAutomationView/types/jeSchedulesViewState.js +8 -8
  74. package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +1 -1
  75. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.d.ts +12 -1
  76. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +24 -9
  77. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.d.ts +5 -0
  78. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewSelector.js +1 -0
  79. package/lib/view/invoicing/editInvoicingCatalogItemDetailView/saveInvoicingCatalogItemEpic.js +6 -1
  80. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.d.ts +1 -0
  81. package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.js +2 -0
  82. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingAccountingPickersEpic.js +10 -5
  83. package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.d.ts +19 -2
  84. package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +52 -4
  85. package/lib/view/invoicing/settingsView/settingsViewEpics.d.ts +1 -1
  86. package/lib/view/invoicing/settingsView/settingsViewEpics.js +17 -2
  87. package/lib/view/invoicing/settingsView/settingsViewSelector.d.ts +11 -4
  88. package/lib/view/invoicing/settingsView/settingsViewSelector.js +7 -3
  89. package/lib/view/scheduleView/scheduleListView/epics/fetchAccruedScheduleListEpic.js +1 -1
  90. package/lib/view/scheduleView/scheduleListView/epics/fetchDownloadSchedulesEpic.js +2 -7
  91. package/lib/view/scheduleView/scheduleListView/scheduleListReducer.d.ts +2 -4
  92. package/lib/view/scheduleView/scheduleListView/scheduleListReducer.js +3 -5
  93. package/package.json +1 -1
  94. package/lib/commonStateTypes/selectorTypes/pickAndMergeForecastSection.d.ts +0 -0
  95. package/lib/commonStateTypes/selectorTypes/pickAndMergeForecastSection.js +0 -1
  96. package/lib/entity/invoicing/coupon/couponConstants.d.ts +0 -11
  97. package/lib/entity/invoicing/coupon/couponConstants.js +0 -29
  98. package/lib/esm/commonStateTypes/selectorTypes/pickAndMergeForecastSection.js +0 -1
  99. package/lib/esm/entity/invoicing/coupon/couponConstants.js +0 -26
  100. package/lib/esm/view/expenseAutomationView/epics/jeSchedule/fetchOneTimeAccrualEpic.js +0 -45
  101. package/lib/esm/view/expenseAutomationView/epics/jeSchedule/newSchedule/createOneTimeAccrualEpic.js +0 -99
  102. package/lib/esm/view/expenseAutomationView/epics/jeSchedule/newSchedule/initializeNewScheduleEpic.js +0 -25
  103. package/lib/esm/view/expenseAutomationView/epics/jeSchedule/newSchedule/saveNewScheduleEpic.js +0 -110
  104. package/lib/esm/view/expenseAutomationView/epics/jeSchedule/newSchedule/searchTransactionsForNewScheduleEpic.js +0 -79
  105. package/lib/esm/view/expenseAutomationView/epics/jeSchedule/oneTimeAccrualActionsEpic.js +0 -139
  106. package/lib/esm/view/expenseAutomationView/epics/jeSchedule/revertJeScheduleEpic.js +0 -106
  107. package/lib/esm/view/expenseAutomationView/epics/jeSchedule/switchJESchedulesTabEpic.js +0 -22
  108. package/lib/esm/view/expenseAutomationView/helpers/newScheduleLocalDataHelper.js +0 -140
  109. package/lib/esm/view/expenseAutomationView/selectorTypes/jeNewScheduleViewSelectorTypes.js +0 -1
  110. package/lib/esm/view/expenseAutomationView/selectors/jeNewScheduleViewSelector.js +0 -106
  111. package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.js +0 -25
  112. package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.js +0 -15
  113. package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.js +0 -18
  114. package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.js +0 -18
  115. package/lib/esm/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryVideoViewedEpic.js +0 -18
  116. package/lib/esm/view/zeniAccountsPromoCard/zeniAccountsPromoCardEpic.js +0 -16
  117. package/lib/esm/view/zeniAccountsPromoCard/zeniAccountsPromoCardPayload.js +0 -1
  118. package/lib/esm/view/zeniAccountsPromoCard/zeniAccountsPromoCardReducer.js +0 -60
  119. package/lib/esm/view/zeniAccountsPromoCard/zeniAccountsPromoCardSelector.js +0 -12
  120. package/lib/esm/view/zeniAccountsPromoCard/zeniAccountsPromoCardState.js +0 -1
  121. package/lib/view/expenseAutomationView/epics/jeSchedule/fetchOneTimeAccrualEpic.d.ts +0 -20
  122. package/lib/view/expenseAutomationView/epics/jeSchedule/fetchOneTimeAccrualEpic.js +0 -49
  123. package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/createOneTimeAccrualEpic.d.ts +0 -8
  124. package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/createOneTimeAccrualEpic.js +0 -103
  125. package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/initializeNewScheduleEpic.d.ts +0 -8
  126. package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/initializeNewScheduleEpic.js +0 -29
  127. package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/saveNewScheduleEpic.d.ts +0 -45
  128. package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/saveNewScheduleEpic.js +0 -114
  129. package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/searchTransactionsForNewScheduleEpic.d.ts +0 -8
  130. package/lib/view/expenseAutomationView/epics/jeSchedule/newSchedule/searchTransactionsForNewScheduleEpic.js +0 -83
  131. package/lib/view/expenseAutomationView/epics/jeSchedule/oneTimeAccrualActionsEpic.d.ts +0 -12
  132. package/lib/view/expenseAutomationView/epics/jeSchedule/oneTimeAccrualActionsEpic.js +0 -146
  133. package/lib/view/expenseAutomationView/epics/jeSchedule/revertJeScheduleEpic.d.ts +0 -64
  134. package/lib/view/expenseAutomationView/epics/jeSchedule/revertJeScheduleEpic.js +0 -110
  135. package/lib/view/expenseAutomationView/epics/jeSchedule/switchJESchedulesTabEpic.d.ts +0 -6
  136. package/lib/view/expenseAutomationView/epics/jeSchedule/switchJESchedulesTabEpic.js +0 -26
  137. package/lib/view/expenseAutomationView/helpers/newScheduleLocalDataHelper.d.ts +0 -36
  138. package/lib/view/expenseAutomationView/helpers/newScheduleLocalDataHelper.js +0 -145
  139. package/lib/view/expenseAutomationView/selectorTypes/jeNewScheduleViewSelectorTypes.d.ts +0 -42
  140. package/lib/view/expenseAutomationView/selectorTypes/jeNewScheduleViewSelectorTypes.js +0 -2
  141. package/lib/view/expenseAutomationView/selectors/jeNewScheduleViewSelector.d.ts +0 -21
  142. package/lib/view/expenseAutomationView/selectors/jeNewScheduleViewSelector.js +0 -112
  143. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.d.ts +0 -6
  144. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.js +0 -29
  145. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.d.ts +0 -6
  146. package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.js +0 -19
  147. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.d.ts +0 -8
  148. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoIntroClosedByOutsideClickEpic.js +0 -22
  149. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.d.ts +0 -8
  150. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryPromoRemindMeLaterClickedEpic.js +0 -22
  151. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryVideoViewedEpic.d.ts +0 -8
  152. package/lib/view/spendManagement/treasury/treasurySetUp/epic/updateTreasuryVideoViewedEpic.js +0 -22
  153. package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardEpic.d.ts +0 -13
  154. package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardEpic.js +0 -20
  155. package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardPayload.d.ts +0 -11
  156. package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardPayload.js +0 -2
  157. package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardReducer.d.ts +0 -7
  158. package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardReducer.js +0 -64
  159. package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardSelector.d.ts +0 -12
  160. package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardSelector.js +0 -15
  161. package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardState.d.ts +0 -9
  162. package/lib/view/zeniAccountsPromoCard/zeniAccountsPromoCardState.js +0 -2
@@ -1,3 +1,5 @@
1
+ import { AccountBasePayload } from '../account/accountPayload';
2
+ import { AccountBase } from '../account/accountState';
1
3
  import { AddressPayload } from '../address/addressPayload';
2
4
  export type InvoicingPriceType = 'tax_exclusive' | 'tax_inclusive';
3
5
  export declare const INVOICING_DUNNING_ACTIONS: readonly ["email_only", "email_and_retry", "do_nothing", "retry_only"];
@@ -88,23 +90,55 @@ export interface InvoicingStripeAccountPayload {
88
90
  export declare const INVOICING_QBO_CUSTOMER_MATCHING_MODES: readonly ["link_existing", "always_create"];
89
91
  export type InvoicingQboCustomerMatchingMode = (typeof INVOICING_QBO_CUSTOMER_MATCHING_MODES)[number];
90
92
  export declare function toInvoicingQboCustomerMatchingMode(value: string): InvoicingQboCustomerMatchingMode;
93
+ /**
94
+ * A mapped account as the newer settings payload returns it: the platform id,
95
+ * plus hydrated fields the client only displays.
96
+ */
97
+ /**
98
+ * Account mappings arrive in two shapes. The original sends a bare id per slot
99
+ * (`deposit_account_id`); the newer one sends the account itself
100
+ * (`deposit_account`). Both are declared because a tenant can be served either
101
+ * depending on when its backend rolled, and a page that understands only one
102
+ * renders an empty picker over data that exists. `Partial` because a read may
103
+ * carry only the ids, while a write sends a whole `AccountBasePayload`.
104
+ */
91
105
  export interface InvoicingQboAccountMappingsPayload {
106
+ default_income_account?: Partial<AccountBasePayload> | null;
92
107
  default_income_account_id?: string | null;
108
+ deposit_account?: Partial<AccountBasePayload> | null;
93
109
  deposit_account_id?: string | null;
94
110
  deposit_account_overrides?: Record<string, string> | null;
111
+ discounts_account?: Partial<AccountBasePayload> | null;
95
112
  discounts_account_id?: string | null;
113
+ rounding_account?: Partial<AccountBasePayload> | null;
96
114
  rounding_account_id?: string | null;
115
+ write_off_account?: Partial<AccountBasePayload> | null;
97
116
  write_off_account_id?: string | null;
98
117
  }
118
+ /**
119
+ * The id for one mapping slot, from whichever shape the backend sent. The object
120
+ * form wins when present; a blank id in either is treated as unset so the picker
121
+ * shows its placeholder rather than selecting nothing.
122
+ */
123
+ /**
124
+ * The first id a picker can actually select. Callers list the QuickBooks id
125
+ * first: the options are keyed on it, so an internal id selects nothing even
126
+ * when it names the same record. Blank counts as absent, so a cleared field
127
+ * falls through to the next candidate rather than selecting an empty option.
128
+ */
129
+ export declare const firstSelectableInvoicingId: (candidates: readonly (string | null | undefined)[]) => string | undefined;
99
130
  /**
100
131
  * Read one account-mapping dropdown value by its config `code` (the codes in
101
132
  * `qbo_account_mapping_kind_options` match the `account_mappings` field names).
102
133
  */
103
134
  export declare function getInvoicingQboAccountMappingId(accountMappings: InvoicingQboAccountMappingsPayload | undefined, code: string): string | undefined;
104
135
  /**
105
- * Return a copy of the account mappings with the dropdown slot named by
106
- * `code` set to `accountId`. Unknown codes leave the mappings unchanged.
136
+ * Expand each mapping from the id the picker submitted to the whole account, the
137
+ * shape the service stores. Written at the request boundary rather than in the
138
+ * page's draft so the UI keeps working in ids, and an id that no longer resolves
139
+ * is left out — a mapping the service cannot expand is worse than none.
107
140
  */
141
+ export declare const withInvoicingQboMappedAccounts: (accountMappings: InvoicingQboAccountMappingsPayload | undefined, accountByQboId: (qboId: string) => AccountBase | undefined) => InvoicingQboAccountMappingsPayload | undefined;
108
142
  export declare function withInvoicingQboAccountMappingId(accountMappings: InvoicingQboAccountMappingsPayload | undefined, code: string, accountId: string): InvoicingQboAccountMappingsPayload;
109
143
  export interface InvoicingQboSettingsPayload {
110
144
  account_mappings?: InvoicingQboAccountMappingsPayload | null;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ALL_INVOICING_FIELD_HELP_GROUPS = exports.INVOICING_QBO_CUSTOMER_MATCHING_MODES = exports.INVOICING_DISCOUNT_LIFECYCLE_ACTIONS = exports.INVOICING_CATALOG_PRODUCT_LIFECYCLE_ACTIONS = exports.INVOICING_CATALOG_ITEM_LIFECYCLE_ACTIONS = exports.INVOICING_SUBSCRIPTION_LIFECYCLE_ACTIONS = exports.INVOICING_DUNNING_ACTIONS = void 0;
3
+ exports.ALL_INVOICING_FIELD_HELP_GROUPS = exports.withInvoicingQboMappedAccounts = exports.firstSelectableInvoicingId = exports.INVOICING_QBO_CUSTOMER_MATCHING_MODES = exports.INVOICING_DISCOUNT_LIFECYCLE_ACTIONS = exports.INVOICING_CATALOG_PRODUCT_LIFECYCLE_ACTIONS = exports.INVOICING_CATALOG_ITEM_LIFECYCLE_ACTIONS = exports.INVOICING_SUBSCRIPTION_LIFECYCLE_ACTIONS = exports.INVOICING_DUNNING_ACTIONS = void 0;
4
4
  exports.toInvoicingDunningAction = toInvoicingDunningAction;
5
5
  exports.toInvoicingSubscriptionLifecycleAction = toInvoicingSubscriptionLifecycleAction;
6
6
  exports.toInvoicingSubscriptionLifecycleActionOption = toInvoicingSubscriptionLifecycleActionOption;
@@ -23,6 +23,7 @@ exports.toInvoicingSubscriptionEditFieldOption = toInvoicingSubscriptionEditFiel
23
23
  exports.toAuditLogEntityRouteOption = toAuditLogEntityRouteOption;
24
24
  exports.buildInvoicingEntityPath = buildInvoicingEntityPath;
25
25
  exports.isInvoicingEntityLinkable = isInvoicingEntityLinkable;
26
+ const accountPayload_1 = require("../account/accountPayload");
26
27
  exports.INVOICING_DUNNING_ACTIONS = [
27
28
  'email_only',
28
29
  'email_and_retry',
@@ -153,6 +154,28 @@ function toInvoicingQboCustomerMatchingMode(value) {
153
154
  throw new Error(`Unknown InvoicingQboCustomerMatchingMode: ${value}`);
154
155
  }
155
156
  }
157
+ /**
158
+ * The id for one mapping slot, from whichever shape the backend sent. The object
159
+ * form wins when present; a blank id in either is treated as unset so the picker
160
+ * shows its placeholder rather than selecting nothing.
161
+ */
162
+ /**
163
+ * The first id a picker can actually select. Callers list the QuickBooks id
164
+ * first: the options are keyed on it, so an internal id selects nothing even
165
+ * when it names the same record. Blank counts as absent, so a cleared field
166
+ * falls through to the next candidate rather than selecting an empty option.
167
+ */
168
+ const firstSelectableInvoicingId = (candidates) => candidates.find((candidate) => candidate != null && candidate !== '');
169
+ exports.firstSelectableInvoicingId = firstSelectableInvoicingId;
170
+ function readInvoicingQboMappedAccountId(mappedAccount, legacyAccountId) {
171
+ // Both shapes are read: the mapping arrives either way depending on how it
172
+ // was saved.
173
+ return (0, exports.firstSelectableInvoicingId)([
174
+ mappedAccount?.qbo_id,
175
+ mappedAccount?.account_id,
176
+ legacyAccountId,
177
+ ]);
178
+ }
156
179
  /**
157
180
  * Read one account-mapping dropdown value by its config `code` (the codes in
158
181
  * `qbo_account_mapping_kind_options` match the `account_mappings` field names).
@@ -160,15 +183,15 @@ function toInvoicingQboCustomerMatchingMode(value) {
160
183
  function getInvoicingQboAccountMappingId(accountMappings, code) {
161
184
  switch (code) {
162
185
  case 'deposit_account_id':
163
- return accountMappings?.deposit_account_id ?? undefined;
186
+ return readInvoicingQboMappedAccountId(accountMappings?.deposit_account, accountMappings?.deposit_account_id);
164
187
  case 'default_income_account_id':
165
- return accountMappings?.default_income_account_id ?? undefined;
188
+ return readInvoicingQboMappedAccountId(accountMappings?.default_income_account, accountMappings?.default_income_account_id);
166
189
  case 'discounts_account_id':
167
- return accountMappings?.discounts_account_id ?? undefined;
190
+ return readInvoicingQboMappedAccountId(accountMappings?.discounts_account, accountMappings?.discounts_account_id);
168
191
  case 'rounding_account_id':
169
- return accountMappings?.rounding_account_id ?? undefined;
192
+ return readInvoicingQboMappedAccountId(accountMappings?.rounding_account, accountMappings?.rounding_account_id);
170
193
  case 'write_off_account_id':
171
- return accountMappings?.write_off_account_id ?? undefined;
194
+ return readInvoicingQboMappedAccountId(accountMappings?.write_off_account, accountMappings?.write_off_account_id);
172
195
  default:
173
196
  return undefined;
174
197
  }
@@ -177,19 +200,74 @@ function getInvoicingQboAccountMappingId(accountMappings, code) {
177
200
  * Return a copy of the account mappings with the dropdown slot named by
178
201
  * `code` set to `accountId`. Unknown codes leave the mappings unchanged.
179
202
  */
203
+ /** The object key holding the mapped account for each `*_account_id` code. */
204
+ const INVOICING_QBO_MAPPED_ACCOUNT_KEY = {
205
+ default_income_account_id: 'default_income_account',
206
+ deposit_account_id: 'deposit_account',
207
+ discounts_account_id: 'discounts_account',
208
+ rounding_account_id: 'rounding_account',
209
+ write_off_account_id: 'write_off_account',
210
+ };
211
+ /**
212
+ * Expand each mapping from the id the picker submitted to the whole account, the
213
+ * shape the service stores. Written at the request boundary rather than in the
214
+ * page's draft so the UI keeps working in ids, and an id that no longer resolves
215
+ * is left out — a mapping the service cannot expand is worse than none.
216
+ */
217
+ const withInvoicingQboMappedAccounts = (accountMappings, accountByQboId) => {
218
+ if (accountMappings == null) {
219
+ return undefined;
220
+ }
221
+ const expanded = { ...accountMappings };
222
+ Object.entries(INVOICING_QBO_MAPPED_ACCOUNT_KEY).forEach(([code, objectKey]) => {
223
+ const accountId = getInvoicingQboAccountMappingId(accountMappings, code);
224
+ if (accountId == null) {
225
+ return;
226
+ }
227
+ const account = accountByQboId(accountId);
228
+ expanded[objectKey] =
229
+ account != null ? (0, accountPayload_1.toAccountPayload)(account) : undefined;
230
+ expanded[code] = undefined;
231
+ });
232
+ return expanded;
233
+ };
234
+ exports.withInvoicingQboMappedAccounts = withInvoicingQboMappedAccounts;
180
235
  function withInvoicingQboAccountMappingId(accountMappings, code, accountId) {
236
+ // Both slots are written together. Setting only the bare id would leave the
237
+ // object shape behind, and the reader prefers it — so the selection just made
238
+ // would read back as whatever was mapped before.
181
239
  const base = accountMappings ?? {};
182
240
  switch (code) {
183
241
  case 'deposit_account_id':
184
- return { ...base, deposit_account_id: accountId };
242
+ return {
243
+ ...base,
244
+ deposit_account: undefined,
245
+ deposit_account_id: accountId,
246
+ };
185
247
  case 'default_income_account_id':
186
- return { ...base, default_income_account_id: accountId };
248
+ return {
249
+ ...base,
250
+ default_income_account: undefined,
251
+ default_income_account_id: accountId,
252
+ };
187
253
  case 'discounts_account_id':
188
- return { ...base, discounts_account_id: accountId };
254
+ return {
255
+ ...base,
256
+ discounts_account: undefined,
257
+ discounts_account_id: accountId,
258
+ };
189
259
  case 'rounding_account_id':
190
- return { ...base, rounding_account_id: accountId };
260
+ return {
261
+ ...base,
262
+ rounding_account: undefined,
263
+ rounding_account_id: accountId,
264
+ };
191
265
  case 'write_off_account_id':
192
- return { ...base, write_off_account_id: accountId };
266
+ return {
267
+ ...base,
268
+ write_off_account: undefined,
269
+ write_off_account_id: accountId,
270
+ };
193
271
  default:
194
272
  return base;
195
273
  }
@@ -1,3 +1,5 @@
1
+ import { AccountBasePayload } from '../../account/accountPayload';
2
+ import { ClassBasePayload } from '../../class/classPayload';
1
3
  import { InvoicingPlanTier, InvoicingProduct } from './productState';
2
4
  export interface InvoicingPlanTierPayload {
3
5
  price: number;
@@ -7,10 +9,18 @@ export interface InvoicingPlanTierPayload {
7
9
  pricing_type?: string;
8
10
  }
9
11
  export interface InvoicingAccountingDetailPayload {
12
+ /**
13
+ * `account` and `accounting_class` hold whole records — what the service stores
14
+ * and what the catalog payload builder sends. The bare `accounting_code` /
15
+ * `accounting_category_1` are the older shape, still read so a plan saved
16
+ * before the rollover prefills.
17
+ */
18
+ account?: Partial<AccountBasePayload> | null;
10
19
  accounting_category_1?: string;
11
20
  accounting_category_2?: string;
12
21
  accounting_category_3?: string;
13
22
  accounting_category_4?: string;
23
+ accounting_class?: Partial<ClassBasePayload> | null;
14
24
  accounting_code?: string;
15
25
  sku?: string;
16
26
  }
@@ -4,6 +4,7 @@ exports.mapInvoicingProductPayloadToState = exports.mapInvoicingPlanTierPayloadT
4
4
  const amount_1 = require("../../../commonStateTypes/amount");
5
5
  const currencyHelper_1 = require("../../../commonStateTypes/currencyHelper");
6
6
  const zeniDayJS_1 = require("../../../zeniDayJS");
7
+ const invoicingCommonPayload_1 = require("../invoicingCommonPayload");
7
8
  // ── Payload → State mappers (snake_case wire shape → camelCase domain shape) ──
8
9
  const mapInvoicingPlanTierPayloadToState = (payload, currencyCode, currencySymbol) => ({
9
10
  price: (0, amount_1.toAmount)(payload.price, currencyCode, currencySymbol),
@@ -14,11 +15,22 @@ const mapInvoicingPlanTierPayloadToState = (payload, currencyCode, currencySymbo
14
15
  });
15
16
  exports.mapInvoicingPlanTierPayloadToState = mapInvoicingPlanTierPayloadToState;
16
17
  const mapInvoicingAccountingDetailPayloadToState = (payload) => ({
17
- accountingCategory1: payload.accounting_category_1,
18
+ // The QuickBooks id first in both, for the reason `firstSelectableInvoicingId`
19
+ // documents: the form's pickers are keyed on it, so reading the internal id
20
+ // would leave the field blank over a mapping that exists.
21
+ accountingCategory1: (0, invoicingCommonPayload_1.firstSelectableInvoicingId)([
22
+ payload.accounting_class?.qbo_id,
23
+ payload.accounting_class?.accounting_class_id,
24
+ payload.accounting_category_1,
25
+ ]),
18
26
  accountingCategory2: payload.accounting_category_2,
19
27
  accountingCategory3: payload.accounting_category_3,
20
28
  accountingCategory4: payload.accounting_category_4,
21
- accountingCode: payload.accounting_code,
29
+ accountingCode: (0, invoicingCommonPayload_1.firstSelectableInvoicingId)([
30
+ payload.account?.qbo_id,
31
+ payload.account?.account_id,
32
+ payload.accounting_code,
33
+ ]),
22
34
  sku: payload.sku,
23
35
  });
24
36
  const mapInvoicingProductPayloadToState = (payload) => {
@@ -1,3 +1,2 @@
1
1
  import { ID } from '../../commonStateTypes/common';
2
2
  export declare function generateJEScheduleKey(jeScheduleId: ID, jeScheduleType: string): `${string}_${string}`;
3
- export declare function generateJEOneTimeAccrualKey(accrualId: ID): `${string}_one_time_accrual`;
@@ -1,13 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateJEScheduleKey = generateJEScheduleKey;
4
- exports.generateJEOneTimeAccrualKey = generateJEOneTimeAccrualKey;
5
4
  function generateJEScheduleKey(jeScheduleId, jeScheduleType) {
6
5
  return `${jeScheduleId}_${jeScheduleType}`;
7
6
  }
8
- // Suffixed rather than using the bare Mongo _id so the key is a distinct type from
9
- // JEScheduleKey / JEScheduleTransactionKey and the three cannot be passed interchangeably.
10
- // The unsuffixed id stays on the entity as `accrualId` for callers that need it.
11
- function generateJEOneTimeAccrualKey(accrualId) {
12
- return `${accrualId}_one_time_accrual`;
13
- }
@@ -7,7 +7,7 @@ import { TransactionIDPayload } from '../transaction/payloadTypes/transactionIDP
7
7
  import { TransactionCategory } from '../transaction/stateTypes/transactionType';
8
8
  import { UserPayload } from '../user/userPayload';
9
9
  import { VendorPayload } from '../vendor/vendorPayload';
10
- import { JEAccruedScheduledTransactionState, JEOneTimeAccrualState, JEScheduledTransactionState, ScheduledJournalEntryState } from './jeSchedulesState';
10
+ import { JEAccruedScheduledTransactionState, JEScheduledTransactionState, ScheduledJournalEntryState } from './jeSchedulesState';
11
11
  import { JEScheduleKey, JEScheduleTransactionKey } from './jeSchedulesTypes';
12
12
  export interface JEScheduleOtherAttributesPayload {
13
13
  asset_id?: string | null;
@@ -72,13 +72,9 @@ export interface JEScheduledTransactionPayload {
72
72
  updated_by: UserPayload;
73
73
  vendor: VendorPayload;
74
74
  ai_summaries?: JEScheduleAISummariesPayload;
75
- confidence_score?: number | null;
76
- create_time?: string | null;
77
75
  created_by?: UserPayload;
78
76
  end_date?: string | null;
79
- posted_count?: number | null;
80
77
  recommendations?: JEScheduleRecommendationsPayload;
81
- recurring_amount?: number | null;
82
78
  updated_at?: string | null;
83
79
  }
84
80
  export interface JEAccruedScheduledTransactionPayload extends Omit<JEScheduledTransactionPayload, 'base_transaction' | 'je_schedule_id' | 'je_schedule_type'> {
@@ -88,66 +84,6 @@ export interface JEAccruedScheduledTransactionPayload extends Omit<JEScheduledTr
88
84
  memo: string;
89
85
  recurring_amount: number;
90
86
  }
91
- /**
92
- * The frozen vendor profile the Cron used to decide an accrual, so the detail page can show its
93
- * reasoning even after the live profile is rebuilt. Present on agent/Cron rows ONLY — a human-created
94
- * accrual carries none, which is why every consumer has to treat it as absent rather than empty.
95
- */
96
- export interface JEOneTimeAccrualProfileSnapshotPayload {
97
- billing_pattern?: {
98
- avg_amount?: number | null;
99
- billing_lag_days?: number | null;
100
- consistency_score?: number | null;
101
- frequency?: string | null;
102
- last_bill_amount?: number | null;
103
- last_bill_date?: string | null;
104
- months_of_history?: number | null;
105
- typical_bill_day?: number | null;
106
- } | null;
107
- monthly_totals?: Record<string, number> | null;
108
- sorted_months?: string[] | null;
109
- }
110
- /** The JE the AI originally suggested, frozen at draft time for suggested-vs-posted comparison. */
111
- export interface JEOneTimeAccrualAiSuggestionPayload {
112
- estimated_amount?: number | null;
113
- je_credit_account_id?: ID | null;
114
- je_credit_account_name?: string | null;
115
- je_debit_account_id?: ID | null;
116
- je_debit_account_name?: string | null;
117
- memo?: string | null;
118
- }
119
- export interface JEOneTimeAccrualPayload {
120
- _id: ID;
121
- estimated_amount: number;
122
- origin: string;
123
- service_month: string;
124
- status: string;
125
- vendor_id: ID;
126
- vendor_name: string;
127
- actual_post_date?: string | null;
128
- actual_reversal_post_date?: string | null;
129
- ai_suggestion?: JEOneTimeAccrualAiSuggestionPayload | null;
130
- automation_tier?: string | null;
131
- created_by_user?: UserPayload | null;
132
- currency?: string | null;
133
- expected_reversal_date?: string | null;
134
- je_credit_account_id?: ID | null;
135
- je_credit_account_name?: string | null;
136
- je_credit_accounting_class_id?: ID | null;
137
- je_credit_accounting_class_name?: string | null;
138
- je_debit_account_id?: ID | null;
139
- je_debit_account_name?: string | null;
140
- je_debit_accounting_class_id?: ID | null;
141
- je_debit_accounting_class_name?: string | null;
142
- memo?: string | null;
143
- posting_date?: string | null;
144
- profile_snapshot?: JEOneTimeAccrualProfileSnapshotPayload | null;
145
- reversal_policy?: string | null;
146
- reversal_transaction_id?: ID | null;
147
- reversal_trigger?: string | null;
148
- transaction_id?: ID | null;
149
- transaction_integration_id?: ID | null;
150
- }
151
87
  export interface ScheduledJournalEntryPayload {
152
88
  actual_post_date: string | null;
153
89
  create_time: string | null;
@@ -178,4 +114,3 @@ export declare function getJEScheduleTransactionDetailKeyPayload(payload: Schedu
178
114
  export declare function getJEScheduleKey(payload: JEAccruedScheduledTransactionPayload): JEScheduleKey;
179
115
  export declare function toJEScheduledTransaction(payload: JEScheduledTransactionPayload): JEScheduledTransactionState;
180
116
  export declare function toJEAccruedScheduledTransaction(payload: JEAccruedScheduledTransactionPayload): JEAccruedScheduledTransactionState;
181
- export declare function toJEOneTimeAccrual(payload: JEOneTimeAccrualPayload): JEOneTimeAccrualState;
@@ -8,15 +8,12 @@ exports.getJEScheduleTransactionDetailKeyPayload = getJEScheduleTransactionDetai
8
8
  exports.getJEScheduleKey = getJEScheduleKey;
9
9
  exports.toJEScheduledTransaction = toJEScheduledTransaction;
10
10
  exports.toJEAccruedScheduledTransaction = toJEAccruedScheduledTransaction;
11
- exports.toJEOneTimeAccrual = toJEOneTimeAccrual;
12
11
  const amount_1 = require("../../commonStateTypes/amount");
13
12
  const timePeriod_1 = require("../../commonStateTypes/timePeriod");
14
13
  const zeniDayJS_1 = require("../../zeniDayJS");
15
- const zeniUrl_1 = require("../../zeniUrl");
16
14
  const transactionIDPayload_1 = require("../transaction/payloadTypes/transactionIDPayload");
17
15
  const jeScheduleHelper_1 = require("./jeScheduleHelper");
18
16
  const jeSchedulesTypes_1 = require("./jeSchedulesTypes");
19
- const USD_CURRENCY_CODE = 'USD';
20
17
  function toScheduledJournalEntryState(payload, currency_code, currency_symbol) {
21
18
  return {
22
19
  status: {
@@ -261,18 +258,9 @@ function toJEScheduledTransaction(payload) {
261
258
  startDate: payload.start_date != null ? (0, zeniDayJS_1.date)(payload.start_date) : undefined,
262
259
  endDate: payload.end_date != null ? (0, zeniDayJS_1.date)(payload.end_date) : undefined,
263
260
  period: payload.period != null ? Number(payload.period) : undefined,
264
- recurringAmount: payload.recurring_amount != null
265
- ? {
266
- amount: payload.recurring_amount,
267
- currencyCode: payload.currency_code,
268
- currencySymbol: payload.currency_symbol,
269
- }
270
- : undefined,
271
- postedCount: payload.posted_count ?? undefined,
272
261
  updatedByUserID: payload.updated_by.user_id,
273
262
  balanceAsOfToday: payload.balance ?? undefined,
274
263
  updatedAt: payload.updated_at != null ? (0, zeniDayJS_1.date)(payload.updated_at) : undefined,
275
- createTime: payload.create_time != null ? (0, zeniDayJS_1.date)(payload.create_time) : undefined,
276
264
  jeCredit: {
277
265
  accountId: payload.je_credit_account_id ?? undefined,
278
266
  accountingClassId: payload.je_credit_accounting_class_id ?? undefined,
@@ -297,7 +285,6 @@ function toJEScheduledTransaction(payload) {
297
285
  : {},
298
286
  scheduledJournalEntry: [],
299
287
  aiSummaries: toJEScheduleAISummaries(payload.ai_summaries),
300
- confidenceScore: payload.confidence_score ?? undefined,
301
288
  createdByUserID: payload.created_by?.user_id ?? undefined,
302
289
  recommendations: toJEScheduleRecommendations(payload.recommendations),
303
290
  };
@@ -355,125 +342,3 @@ function toJEAccruedScheduledTransaction(payload) {
355
342
  jeScheduleType: (0, jeSchedulesTypes_1.toScheduleTypesTypeStrict)(payload.je_schedule_type),
356
343
  };
357
344
  }
358
- /**
359
- * Reads the months in the order the snapshot gives them rather than deriving a range: a vendor that
360
- * skipped a month has no entry for it, so filling gaps would invent history that was never billed.
361
- */
362
- function toJEOneTimeAccrualMonthlyTotals(snapshot, currencyCode) {
363
- const monthlyTotals = snapshot.monthly_totals;
364
- if (monthlyTotals == null) {
365
- return [];
366
- }
367
- const months = snapshot.sorted_months ?? Object.keys(monthlyTotals).sort();
368
- return months
369
- .filter((month) => monthlyTotals[month] != null)
370
- .map((month) => ({
371
- month,
372
- amount: toOneTimeAccrualAmount(monthlyTotals[month], currencyCode),
373
- }));
374
- }
375
- function toJEOneTimeAccrualProfileSnapshot(payload, currencyCode) {
376
- if (payload == null) {
377
- return undefined;
378
- }
379
- const billingPattern = payload.billing_pattern;
380
- return {
381
- monthlyTotals: toJEOneTimeAccrualMonthlyTotals(payload, currencyCode),
382
- billingPattern: billingPattern != null
383
- ? {
384
- frequency: billingPattern.frequency ?? undefined,
385
- monthsOfHistory: billingPattern.months_of_history ?? undefined,
386
- consistencyScore: billingPattern.consistency_score ?? undefined,
387
- billingLagDays: billingPattern.billing_lag_days ?? undefined,
388
- typicalBillDay: billingPattern.typical_bill_day ?? undefined,
389
- avgAmount: billingPattern.avg_amount != null
390
- ? toOneTimeAccrualAmount(billingPattern.avg_amount, currencyCode)
391
- : undefined,
392
- lastBillAmount: billingPattern.last_bill_amount != null
393
- ? toOneTimeAccrualAmount(billingPattern.last_bill_amount, currencyCode)
394
- : undefined,
395
- lastBillDate: billingPattern.last_bill_date != null
396
- ? (0, zeniDayJS_1.date)(billingPattern.last_bill_date)
397
- : undefined,
398
- }
399
- : undefined,
400
- };
401
- }
402
- function toJEOneTimeAccrualAiSuggestion(payload, currencyCode) {
403
- if (payload == null) {
404
- return undefined;
405
- }
406
- return {
407
- memo: payload.memo ?? undefined,
408
- jeDebitAccountName: payload.je_debit_account_name ?? undefined,
409
- jeCreditAccountName: payload.je_credit_account_name ?? undefined,
410
- estimatedAmount: payload.estimated_amount != null
411
- ? toOneTimeAccrualAmount(payload.estimated_amount, currencyCode)
412
- : undefined,
413
- };
414
- }
415
- function toJEOneTimeAccrual(payload) {
416
- return {
417
- accrualId: payload._id,
418
- vendorId: payload.vendor_id,
419
- vendorName: payload.vendor_name,
420
- serviceMonth: payload.service_month,
421
- accrualStatus: (0, jeSchedulesTypes_1.toOneTimeAccrualStatusCodeType)(payload.status),
422
- origin: (0, jeSchedulesTypes_1.toOneTimeAccrualOriginType)(payload.origin),
423
- automationTier: payload.automation_tier != null
424
- ? (0, jeSchedulesTypes_1.toOneTimeAccrualAutomationTierType)(payload.automation_tier)
425
- : undefined,
426
- estimatedAmount: toOneTimeAccrualAmount(payload.estimated_amount, payload.currency),
427
- memo: payload.memo ?? '',
428
- profileSnapshot: toJEOneTimeAccrualProfileSnapshot(payload.profile_snapshot, payload.currency),
429
- aiSuggestion: toJEOneTimeAccrualAiSuggestion(payload.ai_suggestion, payload.currency),
430
- // Exclusive by contract: a scheduled row reverses on expectedReversalDate and bills never
431
- // drive it, so the two never need reconciling. Defaulting to on_bill_match matches the
432
- // create path's default when the field is absent on an older document.
433
- reversalPolicy: (0, jeSchedulesTypes_1.toOneTimeAccrualReversalPolicyType)(payload.reversal_policy ?? 'on_bill_match'),
434
- reversalTrigger: (0, jeSchedulesTypes_1.toOneTimeAccrualReversalTriggerType)(payload.reversal_trigger ?? undefined),
435
- expectedReversalDate: payload.expected_reversal_date != null
436
- ? (0, zeniDayJS_1.date)(payload.expected_reversal_date)
437
- : undefined,
438
- postingDate: payload.posting_date != null ? (0, zeniDayJS_1.date)(payload.posting_date) : undefined,
439
- actualPostDate: payload.actual_post_date != null
440
- ? (0, zeniDayJS_1.date)(payload.actual_post_date)
441
- : undefined,
442
- actualReversalPostDate: payload.actual_reversal_post_date != null
443
- ? (0, zeniDayJS_1.date)(payload.actual_reversal_post_date)
444
- : undefined,
445
- jeDebitAccountId: payload.je_debit_account_id ?? undefined,
446
- jeDebitAccountName: payload.je_debit_account_name ?? undefined,
447
- jeDebitAccountingClassId: payload.je_debit_accounting_class_id ?? undefined,
448
- jeDebitAccountingClassName: payload.je_debit_accounting_class_name ?? undefined,
449
- jeCreditAccountId: payload.je_credit_account_id ?? undefined,
450
- jeCreditAccountName: payload.je_credit_account_name ?? undefined,
451
- jeCreditAccountingClassId: payload.je_credit_accounting_class_id ?? undefined,
452
- jeCreditAccountingClassName: payload.je_credit_accounting_class_name ?? undefined,
453
- transactionId: payload.transaction_id ?? undefined,
454
- transactionIntegrationId: payload.transaction_integration_id ?? undefined,
455
- reversalTransactionId: payload.reversal_transaction_id ?? undefined,
456
- createdBy: toJEOneTimeAccrualCreator(payload.created_by_user),
457
- };
458
- }
459
- // The accrual wire format carries a currency CODE but no symbol, so the symbol has to be derived.
460
- // Only USD has a known glyph today (the create path is USD-only); anything else falls back to the
461
- // code, which reads correctly as "EUR 1,200" rather than silently rendering a wrong "$".
462
- function toOneTimeAccrualAmount(amount, currencyCode) {
463
- const code = currencyCode ?? USD_CURRENCY_CODE;
464
- return (0, amount_1.toAmount)(amount, code, code === USD_CURRENCY_CODE ? '$' : code);
465
- }
466
- function toJEOneTimeAccrualCreator(payload) {
467
- if (payload == null) {
468
- return undefined;
469
- }
470
- return {
471
- userId: payload.user_id,
472
- email: payload.email ?? undefined,
473
- firstName: payload.first_name ?? undefined,
474
- lastName: payload.last_name ?? undefined,
475
- photo: payload.photo?.original != null
476
- ? (0, zeniUrl_1.toZeniUrl)(payload.photo.original)
477
- : undefined,
478
- };
479
- }
@@ -1,5 +1,5 @@
1
1
  import { UpdateType } from '../../commonStateTypes/common';
2
- import { JEAccruedScheduledTransactionPayload, JEOneTimeAccrualPayload, JEScheduledTransactionPayload, ScheduledJournalEntryPayload } from './jeSchedulesPayload';
2
+ import { JEAccruedScheduledTransactionPayload, JEScheduledTransactionPayload, ScheduledJournalEntryPayload } from './jeSchedulesPayload';
3
3
  import { JESchedulesState } from './jeSchedulesState';
4
4
  export declare const initialState: JESchedulesState;
5
5
  export declare const updateJESchedules: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[jeSchedulesTransactionsPayload: JEScheduledTransactionPayload[]], {
@@ -22,8 +22,6 @@ export declare const updateJESchedules: import("@reduxjs/toolkit").ActionCreator
22
22
  jeScheduleTransactionKey: `${string}_expense_${string}` | `${string}_check_${string}` | `${string}_invoice_${string}` | `${string}_payment_${string}` | `${string}_credit_memo_${string}` | `${string}_sales_receipt_${string}` | `${string}_delayed_credit_${string}` | `${string}_delayed_charge_${string}` | `${string}_refund_${string}` | `${string}_bill_${string}` | `${string}_bill_payment_${string}` | `${string}_bill_payment_check_${string}` | `${string}_bill_payment_credit_card_${string}` | `${string}_vendor_credit_${string}` | `${string}_credit_card_credit_${string}` | `${string}_transfer_${string}` | `${string}_credit_card_payment_${string}` | `${string}_deposit_${string}` | `${string}_journal_entry_${string}`;
23
23
  }, "jeSchedules/deleteJESchedulesDetails", never, never>, deleteAccruedJESchedulesDetails: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[JEScheduleKey: `${string}_${string}`], {
24
24
  JEScheduleKey: `${string}_${string}`;
25
- }, "jeSchedules/deleteAccruedJESchedulesDetails", never, never>, clearAllAccruedJESchedules: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"jeSchedules/clearAllAccruedJESchedules">, clearAllJEScheduleTransactions: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"jeSchedules/clearAllJEScheduleTransactions">, updateJEOneTimeAccruals: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[jeOneTimeAccrualsPayload: JEOneTimeAccrualPayload[]], {
26
- jeOneTimeAccrualsPayload: JEOneTimeAccrualPayload[];
27
- }, "jeSchedules/updateJEOneTimeAccruals", never, never>;
25
+ }, "jeSchedules/deleteAccruedJESchedulesDetails", never, never>;
28
26
  declare const _default: import("redux").Reducer<JESchedulesState>;
29
27
  export default _default;
@@ -4,16 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  var _a;
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.updateJEOneTimeAccruals = exports.clearAllJEScheduleTransactions = exports.clearAllAccruedJESchedules = exports.deleteAccruedJESchedulesDetails = exports.deleteJESchedulesDetails = exports.updateAccruedJESchedulesDetails = exports.updateJESchedulesDetails = exports.updateAccruedJEScheduledTransaction = exports.updateJEScheduledTransaction = exports.updateAccruedJESchedules = exports.updateJESchedules = exports.initialState = void 0;
7
+ exports.deleteAccruedJESchedulesDetails = exports.deleteJESchedulesDetails = exports.updateAccruedJESchedulesDetails = exports.updateJESchedulesDetails = exports.updateAccruedJEScheduledTransaction = exports.updateJEScheduledTransaction = exports.updateAccruedJESchedules = exports.updateJESchedules = exports.initialState = void 0;
8
8
  const toolkit_1 = require("@reduxjs/toolkit");
9
9
  const assignWith_1 = __importDefault(require("lodash/assignWith"));
10
10
  const rootActions_1 = require("../../rootActions");
11
- const jeScheduleHelper_1 = require("./jeScheduleHelper");
12
11
  const jeSchedulesPayload_1 = require("./jeSchedulesPayload");
13
12
  exports.initialState = {
14
13
  schedulesByTransactionKey: {},
15
14
  schedulesByAccruedJEScheduleKey: {},
16
- oneTimeAccrualsByKey: {},
17
15
  };
18
16
  const jeSchedules = (0, toolkit_1.createSlice)({
19
17
  name: 'jeSchedules',
@@ -118,41 +116,15 @@ const jeSchedules = (0, toolkit_1.createSlice)({
118
116
  delete draft.schedulesByAccruedJEScheduleKey[JEScheduleKey];
119
117
  },
120
118
  },
121
- // Writes directly, unlike updateAccruedJESchedules / updateJESchedules, which are no-op
122
- // actions whose only job is to trigger the entity fan-out epic that fetches vendors,
123
- // accounts, classes and users. An accrual denormalizes all of those as names on the document,
124
- // so there is nothing to fan out to.
125
- updateJEOneTimeAccruals: {
126
- prepare(jeOneTimeAccrualsPayload) {
127
- return {
128
- payload: {
129
- jeOneTimeAccrualsPayload,
130
- },
131
- };
132
- },
133
- reducer(draft, action) {
134
- action.payload.jeOneTimeAccrualsPayload.forEach((accrualPayload) => {
135
- const accrual = (0, jeSchedulesPayload_1.toJEOneTimeAccrual)(accrualPayload);
136
- draft.oneTimeAccrualsByKey[(0, jeScheduleHelper_1.generateJEOneTimeAccrualKey)(accrual.accrualId)] = accrual;
137
- });
138
- },
139
- },
140
- clearAllJEScheduleTransactions(draft) {
141
- draft.schedulesByTransactionKey = {};
142
- },
143
- clearAllAccruedJESchedules(draft) {
144
- draft.schedulesByAccruedJEScheduleKey = {};
145
- },
146
119
  },
147
120
  extraReducers: (builder) => {
148
121
  builder.addCase(rootActions_1.clearAll, (draft) => {
149
122
  draft.schedulesByAccruedJEScheduleKey = {};
150
123
  draft.schedulesByTransactionKey = {};
151
- draft.oneTimeAccrualsByKey = {};
152
124
  });
153
125
  },
154
126
  });
155
- _a = jeSchedules.actions, exports.updateJESchedules = _a.updateJESchedules, exports.updateAccruedJESchedules = _a.updateAccruedJESchedules, exports.updateJEScheduledTransaction = _a.updateJEScheduledTransaction, exports.updateAccruedJEScheduledTransaction = _a.updateAccruedJEScheduledTransaction, exports.updateJESchedulesDetails = _a.updateJESchedulesDetails, exports.updateAccruedJESchedulesDetails = _a.updateAccruedJESchedulesDetails, exports.deleteJESchedulesDetails = _a.deleteJESchedulesDetails, exports.deleteAccruedJESchedulesDetails = _a.deleteAccruedJESchedulesDetails, exports.clearAllAccruedJESchedules = _a.clearAllAccruedJESchedules, exports.clearAllJEScheduleTransactions = _a.clearAllJEScheduleTransactions, exports.updateJEOneTimeAccruals = _a.updateJEOneTimeAccruals;
127
+ _a = jeSchedules.actions, exports.updateJESchedules = _a.updateJESchedules, exports.updateAccruedJESchedules = _a.updateAccruedJESchedules, exports.updateJEScheduledTransaction = _a.updateJEScheduledTransaction, exports.updateAccruedJEScheduledTransaction = _a.updateAccruedJEScheduledTransaction, exports.updateJESchedulesDetails = _a.updateJESchedulesDetails, exports.updateAccruedJESchedulesDetails = _a.updateAccruedJESchedulesDetails, exports.deleteJESchedulesDetails = _a.deleteJESchedulesDetails, exports.deleteAccruedJESchedulesDetails = _a.deleteAccruedJESchedulesDetails;
156
128
  exports.default = jeSchedules.reducer;
157
129
  /**
158
130
  * Helper functions