@zeniai/client-epic-state 5.1.18-betaDI10 → 5.1.18-betaDI12

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 (127) hide show
  1. package/README.md +3 -1
  2. package/lib/commonStateTypes/viewAndReport/agingReportStateTypes.d.ts +1 -1
  3. package/lib/entity/accountRecon/accountReconPayload.d.ts +22 -0
  4. package/lib/entity/accountRecon/accountReconPayload.js +26 -1
  5. package/lib/entity/accountRecon/accountReconReducer.d.ts +5 -2
  6. package/lib/entity/accountRecon/accountReconReducer.js +36 -2
  7. package/lib/entity/accountRecon/accountReconSelector.d.ts +6 -1
  8. package/lib/entity/accountRecon/accountReconSelector.js +5 -0
  9. package/lib/entity/accountRecon/accountReconState.d.ts +22 -0
  10. package/lib/entity/monthEndCloseChecks/monthEndCloseChecksPayload.d.ts +8 -0
  11. package/lib/entity/monthEndCloseChecks/monthEndCloseChecksPayload.js +10 -0
  12. package/lib/entity/monthEndCloseChecks/monthEndCloseChecksState.d.ts +8 -0
  13. package/lib/entity/task/taskReducer.js +3 -0
  14. package/lib/entity/task/taskState.d.ts +1 -1
  15. package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +1 -0
  16. package/lib/entity/transaction/payloadTypes/transactionPayload.js +5 -0
  17. package/lib/entity/transaction/stateTypes/transaction.d.ts +1 -0
  18. package/lib/epic.d.ts +7 -2
  19. package/lib/epic.js +7 -2
  20. package/lib/esm/entity/accountRecon/accountReconPayload.js +26 -1
  21. package/lib/esm/entity/accountRecon/accountReconReducer.js +35 -1
  22. package/lib/esm/entity/accountRecon/accountReconSelector.js +5 -0
  23. package/lib/esm/entity/monthEndCloseChecks/monthEndCloseChecksPayload.js +10 -0
  24. package/lib/esm/entity/task/taskReducer.js +3 -0
  25. package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +5 -0
  26. package/lib/esm/epic.js +7 -2
  27. package/lib/esm/index.js +9 -9
  28. package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +29 -3
  29. package/lib/esm/view/aiCfoView/aiCfoViewSelector.js +11 -0
  30. package/lib/esm/view/aiCfoView/epics/createSessionAndSubmitEpic.js +2 -2
  31. package/lib/esm/view/aiCfoView/epics/fetchSkillsEpic.js +34 -0
  32. package/lib/esm/view/aiCfoView/epics/submitQuestionEpic.js +7 -1
  33. package/lib/esm/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.js +34 -0
  34. package/lib/esm/view/expenseAutomationView/epics/accountRecon/reparseStatementEpic.js +31 -0
  35. package/lib/esm/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.js +57 -0
  36. package/lib/esm/view/expenseAutomationView/epics/fluxAnalysis/fetchFluxAnalysisViewEpic.js +1 -0
  37. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +49 -11
  38. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +30 -3
  39. package/lib/esm/view/expenseAutomationView/payload/reconciliationPayload.js +153 -0
  40. package/lib/esm/view/expenseAutomationView/reducers/fluxAnalysisViewReducer.js +6 -1
  41. package/lib/esm/view/expenseAutomationView/reducers/reconciliationViewReducer.js +188 -9
  42. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +37 -17
  43. package/lib/esm/view/expenseAutomationView/selectors/fluxAnalysisViewSelector.js +2 -1
  44. package/lib/esm/view/expenseAutomationView/selectors/reconciliationViewSelector.js +27 -0
  45. package/lib/esm/view/expenseAutomationView/types/reconciliationViewState.js +29 -0
  46. package/lib/esm/view/onboardingView/cockpitView/epic/initializeOnboardingCustomerViewUpdateDataEpic.js +4 -16
  47. package/lib/esm/view/onboardingView/cockpitView/onboardingCockpitViewPayload.js +2 -2
  48. package/lib/esm/view/opExByVendor/opExByVendorReducer.js +28 -5
  49. package/lib/esm/view/opExByVendor/opExByVendorSelector.js +1 -0
  50. package/lib/esm/view/opExByVendor/refreshOpExByVendorReportEpic.js +21 -0
  51. package/lib/esm/view/referralView/epics/sendReferralInviteEpic.js +9 -1
  52. package/lib/esm/view/referralView/referralReducer.js +3 -2
  53. package/lib/esm/view/spendManagement/commonSetup/setupViewReducer.js +5 -1
  54. package/lib/esm/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +2 -2
  55. package/lib/esm/view/taskManager/taskDetailView/epics/sendCommentMentionNotificationEpic.js +2 -2
  56. package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +1 -1
  57. package/lib/esm/view/taskManager/taskListView/taskListReducer.js +3 -1
  58. package/lib/esm/view/transactionDetail/epics/saveTransactionDetailEpic.js +3 -1
  59. package/lib/esm/view/transactionDetail/epics/saveTransactionHelper.js +11 -2
  60. package/lib/esm/view/transactionDetail/epics/updateTransactionDetailEpic.js +34 -5
  61. package/lib/esm/view/transactionDetail/transactionDetailLocalDataHelper.js +17 -0
  62. package/lib/index.d.ts +14 -14
  63. package/lib/index.js +57 -37
  64. package/lib/view/aiCfoView/aiCfoViewPayload.d.ts +14 -0
  65. package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +8 -4
  66. package/lib/view/aiCfoView/aiCfoViewReducer.js +30 -4
  67. package/lib/view/aiCfoView/aiCfoViewSelector.d.ts +2 -1
  68. package/lib/view/aiCfoView/aiCfoViewSelector.js +12 -0
  69. package/lib/view/aiCfoView/aiCfoViewState.d.ts +15 -0
  70. package/lib/view/aiCfoView/epics/createSessionAndSubmitEpic.js +2 -2
  71. package/lib/view/aiCfoView/epics/fetchSkillsEpic.d.ts +8 -0
  72. package/lib/view/aiCfoView/epics/fetchSkillsEpic.js +38 -0
  73. package/lib/view/aiCfoView/epics/submitQuestionEpic.js +7 -1
  74. package/lib/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.d.ts +6 -0
  75. package/lib/view/expenseAutomationView/epics/accountRecon/parseStatementEpic.js +38 -0
  76. package/lib/view/expenseAutomationView/epics/accountRecon/reparseStatementEpic.d.ts +26 -0
  77. package/lib/view/expenseAutomationView/epics/accountRecon/reparseStatementEpic.js +35 -0
  78. package/lib/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.d.ts +27 -0
  79. package/lib/view/expenseAutomationView/epics/accountRecon/updateStatementInfoEpic.js +61 -0
  80. package/lib/view/expenseAutomationView/epics/fluxAnalysis/fetchFluxAnalysisViewEpic.js +1 -0
  81. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationEpic.js +47 -9
  82. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +30 -3
  83. package/lib/view/expenseAutomationView/payload/fluxAnalysisPayload.d.ts +8 -0
  84. package/lib/view/expenseAutomationView/payload/reconciliationPayload.d.ts +176 -10
  85. package/lib/view/expenseAutomationView/payload/reconciliationPayload.js +159 -0
  86. package/lib/view/expenseAutomationView/payload/transactionCategorizationPayload.d.ts +7 -0
  87. package/lib/view/expenseAutomationView/reducers/fluxAnalysisViewReducer.d.ts +2 -1
  88. package/lib/view/expenseAutomationView/reducers/fluxAnalysisViewReducer.js +6 -1
  89. package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.d.ts +53 -3
  90. package/lib/view/expenseAutomationView/reducers/reconciliationViewReducer.js +190 -10
  91. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +37 -17
  92. package/lib/view/expenseAutomationView/selectorTypes/reconciliationViewSelectorTypes.d.ts +7 -1
  93. package/lib/view/expenseAutomationView/selectors/fluxAnalysisViewSelector.js +2 -1
  94. package/lib/view/expenseAutomationView/selectors/reconciliationViewSelector.d.ts +2 -0
  95. package/lib/view/expenseAutomationView/selectors/reconciliationViewSelector.js +29 -1
  96. package/lib/view/expenseAutomationView/types/fluxAnalysisViewState.d.ts +2 -0
  97. package/lib/view/expenseAutomationView/types/reconciliationViewState.d.ts +175 -0
  98. package/lib/view/expenseAutomationView/types/reconciliationViewState.js +30 -0
  99. package/lib/view/onboardingView/cockpitView/epic/initializeOnboardingCustomerViewUpdateDataEpic.js +3 -15
  100. package/lib/view/onboardingView/cockpitView/onboardingCockpitViewPayload.js +2 -2
  101. package/lib/view/opExByVendor/opExByVendorReducer.d.ts +6 -1
  102. package/lib/view/opExByVendor/opExByVendorReducer.js +29 -6
  103. package/lib/view/opExByVendor/opExByVendorSelector.d.ts +1 -0
  104. package/lib/view/opExByVendor/opExByVendorSelector.js +1 -0
  105. package/lib/view/opExByVendor/opExByVendorState.d.ts +1 -0
  106. package/lib/view/opExByVendor/refreshOpExByVendorReportEpic.d.ts +17 -0
  107. package/lib/view/opExByVendor/refreshOpExByVendorReportEpic.js +25 -0
  108. package/lib/view/referralView/epics/sendReferralInviteEpic.js +9 -1
  109. package/lib/view/referralView/referralReducer.d.ts +1 -0
  110. package/lib/view/referralView/referralReducer.js +4 -3
  111. package/lib/view/spendManagement/commonSetup/setupViewReducer.js +5 -1
  112. package/lib/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +2 -2
  113. package/lib/view/taskManager/taskDetailView/epics/sendCommentMentionNotificationEpic.d.ts +1 -1
  114. package/lib/view/taskManager/taskDetailView/epics/sendCommentMentionNotificationEpic.js +1 -1
  115. package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +1 -1
  116. package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +1 -1
  117. package/lib/view/taskManager/taskListView/taskListReducer.js +3 -1
  118. package/lib/view/transactionDetail/epics/saveTransactionDetailEpic.js +3 -1
  119. package/lib/view/transactionDetail/epics/saveTransactionHelper.d.ts +1 -1
  120. package/lib/view/transactionDetail/epics/saveTransactionHelper.js +11 -2
  121. package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.d.ts +8 -0
  122. package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +36 -6
  123. package/lib/view/transactionDetail/transactionDetailLocalDataHelper.js +17 -0
  124. package/lib/view/transactionDetail/transactionDetailState.d.ts +1 -0
  125. package/lib/view/transactionDetail/transactionDetailTypes.d.ts +1 -0
  126. package/lib/view/vendorFiling1099/vendorFiling1099List/vendorFiling1099ListState.d.ts +1 -1
  127. package/package.json +5 -2
@@ -24,7 +24,7 @@ const transactionDetailLocalDataHelper_1 = require("../transactionDetailLocalDat
24
24
  * 4. Only difference between this and Miscategorized will be that we will
25
25
  * additionally fire “Mark as not miscat” for every point above.
26
26
  */
27
- const toTransactionUpdatesFromTransactionDetailLocalData = (transactionDetailLocalData, transaction, isExpenseAutomationEnabled) => {
27
+ const toTransactionUpdatesFromTransactionDetailLocalData = (transactionDetailLocalData, transaction, isExpenseAutomationEnabled, isAccountingProjectsEnabled = false) => {
28
28
  const updates = {
29
29
  updatesByLineId: {},
30
30
  };
@@ -33,6 +33,12 @@ const toTransactionUpdatesFromTransactionDetailLocalData = (transactionDetailLoc
33
33
  const isTransactionMisCategorized = (0, exports.isTransactionMiscategorized)(transaction, isExpenseAutomationEnabled);
34
34
  updates.memo = transactionDetailLocalData.memo;
35
35
  updates.documentId = transactionDetailLocalData.documentId;
36
+ // Project is at the transaction level only for invoice and credit_memo,
37
+ // and only when the projects feature is enabled for this tenant.
38
+ if (isAccountingProjectsEnabled &&
39
+ (transaction.type === 'invoice' || transaction.type === 'credit_memo')) {
40
+ updates.project = transactionDetailLocalData.project;
41
+ }
36
42
  const selectedEntity = transactionDetailLocalData.selectedEntity;
37
43
  const updatedEntityId = transactionDetailLocalData.updatePreviousTransactionsWithUpdatedVendor ===
38
44
  true
@@ -55,7 +61,10 @@ const toTransactionUpdatesFromTransactionDetailLocalData = (transactionDetailLoc
55
61
  lineDescription: lineItem.lineDescription,
56
62
  class: lineItem.class,
57
63
  account: lineItem.account,
58
- project: lineItem.project,
64
+ // Project is at the transaction level for invoice/credit_memo; omit from lines.
65
+ ...(transaction.type !== 'invoice' && transaction.type !== 'credit_memo'
66
+ ? { project: lineItem.project }
67
+ : {}),
59
68
  recommendation: (0, transactionHelper_1.convertCOTRecommendationsToRegular)(lineItem.recommendationsWithCOT),
60
69
  };
61
70
  if (line.type === 'journal_entry_transaction_line' ||
@@ -1,10 +1,18 @@
1
1
  import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { COTTransactionTracking } from '../../../commonStateTypes/recommendationBase';
3
+ import { CustomerBase } from '../../../entity/customer/customerState';
4
+ import { Entity } from '../../../entity/genericEntity/entity';
2
5
  import { openSnackbar } from '../../../entity/snackbar/snackbarReducer';
6
+ import { TransactionPayload } from '../../../entity/transaction/payloadTypes/transactionPayload';
3
7
  import { updateTransaction, updateTransactions } from '../../../entity/transaction/transactionReducer';
8
+ import { SupportedTransaction } from '../../../entity/transaction/transactionState';
4
9
  import { updateVendors } from '../../../entity/vendor/vendorReducer';
10
+ import { VendorBase } from '../../../entity/vendor/vendorState';
5
11
  import { RootState } from '../../../reducer';
6
12
  import { ZeniAPI } from '../../../zeniAPI';
7
13
  import { syncTransactionCategorizationFromDetailSave } from '../../expenseAutomationView/reducers/transactionsViewReducer';
8
14
  import { initializeTransactionDetailLocalData, markTransactionAsNotMiscategorized, updateStatusConsolidatedSaveTransactionDetail, updateTransactionDetail, updateTransactionDetailSaveStatus, updateTransactionStateIfUpdateActionNotAllowed } from '../transactionDetailReducer';
15
+ import { TransactionUpdates } from '../transactionDetailState';
9
16
  export type ActionType = ReturnType<typeof updateTransactionDetail> | ReturnType<typeof updateTransaction> | ReturnType<typeof updateTransactions> | ReturnType<typeof updateTransactionStateIfUpdateActionNotAllowed> | ReturnType<typeof openSnackbar> | ReturnType<typeof updateTransactionDetailSaveStatus> | ReturnType<typeof updateStatusConsolidatedSaveTransactionDetail> | ReturnType<typeof initializeTransactionDetailLocalData> | ReturnType<typeof updateVendors> | ReturnType<typeof markTransactionAsNotMiscategorized> | ReturnType<typeof syncTransactionCategorizationFromDetailSave>;
10
17
  export declare const updateTransactionDetailEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => import("rxjs").Observable<ActionType>;
18
+ export declare const toTransactionUpdatePayload: (updates: TransactionUpdates, detail: SupportedTransaction, cotTransactionTracking: COTTransactionTracking, isAccountingProjectsEnabled: boolean, vendorUpdates?: VendorBase, customerUpdates?: CustomerBase, tranSelectedEntity?: Entity) => Partial<TransactionPayload>;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.updateTransactionDetailEpic = void 0;
6
+ exports.toTransactionUpdatePayload = exports.updateTransactionDetailEpic = void 0;
7
7
  const get_1 = __importDefault(require("lodash/get"));
8
8
  const rxjs_1 = require("rxjs");
9
9
  const operators_1 = require("rxjs/operators");
@@ -25,6 +25,7 @@ const transactionSelector_1 = require("../../../entity/transaction/transactionSe
25
25
  const vendorReducer_1 = require("../../../entity/vendor/vendorReducer");
26
26
  const vendorSelector_1 = require("../../../entity/vendor/vendorSelector");
27
27
  const responsePayload_1 = require("../../../responsePayload");
28
+ const tenantSelector_1 = require("../../../entity/tenant/tenantSelector");
28
29
  const accountListSelector_1 = require("../../accountList/accountListSelector");
29
30
  const transactionCategorizationLocalDataHelper_1 = require("../../expenseAutomationView/helpers/transactionCategorizationLocalDataHelper");
30
31
  const transactionsViewReducer_1 = require("../../expenseAutomationView/reducers/transactionsViewReducer");
@@ -33,9 +34,10 @@ const transactionDetailState_1 = require("../transactionDetailState");
33
34
  const saveTransactionHelper_1 = require("./saveTransactionHelper");
34
35
  const updateTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(transactionDetailReducer_1.updateTransactionDetail.match), (0, operators_1.mergeMap)((action) => {
35
36
  const { transactionState, vendorState, transactionDetailState } = state$.value;
37
+ const isAccountingProjectsEnabled = (0, tenantSelector_1.getIsAccountingProjectsEnabled)(state$.value);
36
38
  const { cotTransactionTracking, transactionId, transactionSaveUpdates, isUncategorizedExpenseCategoryEnabled, } = action.payload;
37
39
  return zeniAPI
38
- .putAndGetJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/transactions/${action.payload.transactionId.id}/categorize`, preparePayload(transactionState, vendorState, transactionDetailState, transactionId, transactionSaveUpdates, cotTransactionTracking))
40
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/transactions/${action.payload.transactionId.id}/categorize`, preparePayload(transactionState, vendorState, transactionDetailState, transactionId, transactionSaveUpdates, cotTransactionTracking, isAccountingProjectsEnabled))
39
41
  .pipe((0, operators_1.mergeMap)((response) => {
40
42
  if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
41
43
  const transactionIdResp = (0, transactionIDPayload_1.toTransactionID)(response.data.transaction);
@@ -73,7 +75,9 @@ const updateTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe
73
75
  // then we need to skip mark-miscategorized-as-correct api call
74
76
  if ((0, transactionType_1.toVendorTransactionTypeStrict)(response.data.transaction.transaction_type) != null ||
75
77
  (0, transactionType_1.toJEAndDepositTransactionTypeStrict)(response.data.transaction.transaction_type) != null) {
76
- const isAnyClassMissing = checkIfClassMissingForAnyLineItem(response.data.transaction);
78
+ const isAccountingClassesEnabled = (0, tenantSelector_1.getIsAccountingClassesEnabled)(state$.value);
79
+ const isAnyClassMissing = isAccountingClassesEnabled &&
80
+ checkIfClassMissingForAnyLineItem(response.data.transaction);
77
81
  const isVendorOrCustomerMissingInAnyLine = (0, transactionType_1.toJEAndDepositTransactionTypeStrict)(response.data.transaction.transaction_type) != null &&
78
82
  checkIfVendorOrCustomerMissingForAnyLineItem(response.data.transaction);
79
83
  if ((vendorUpdates?.id == null &&
@@ -130,7 +134,7 @@ const updateTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe
130
134
  }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, transactionDetailReducer_1.updateTransactionDetailSaveStatus)(action.payload.transactionId, 'Error', (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', `REST API call errored out ${error}`)))));
131
135
  }));
132
136
  exports.updateTransactionDetailEpic = updateTransactionDetailEpic;
133
- function preparePayload(transactionState, vendorState, transactionDetailState, transactionId, saveUpdates, cotTransactionTracking) {
137
+ function preparePayload(transactionState, vendorState, transactionDetailState, transactionId, saveUpdates, cotTransactionTracking, isAccountingProjectsEnabled) {
134
138
  const transactionDetailKey = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
135
139
  const detail = (0, transactionSelector_1.getSupportedTransactionById)(transactionState, transactionDetailKey);
136
140
  const tranDetail = (0, get_1.default)(transactionDetailState.transactionDetailById, transactionDetailKey, undefined);
@@ -162,7 +166,7 @@ function preparePayload(transactionState, vendorState, transactionDetailState, t
162
166
  };
163
167
  }
164
168
  if (detail != null) {
165
- const transUpdates = toTransactionUpdatePayload(saveUpdates.updates, detail, cotTransactionTracking, vendorUpdates, customerUpdates, currentSelectedEntity);
169
+ const transUpdates = (0, exports.toTransactionUpdatePayload)(saveUpdates.updates, detail, cotTransactionTracking, isAccountingProjectsEnabled, vendorUpdates, customerUpdates, currentSelectedEntity);
166
170
  const entityUpdates = toEntityUpdatePayload(saveUpdates.entityRelatedUpdates);
167
171
  return {
168
172
  entity_related_updates: entityUpdates,
@@ -172,7 +176,7 @@ function preparePayload(transactionState, vendorState, transactionDetailState, t
172
176
  }
173
177
  return undefined;
174
178
  }
175
- const toTransactionUpdatePayload = (updates, detail, cotTransactionTracking, vendorUpdates, customerUpdates, tranSelectedEntity) => {
179
+ const toTransactionUpdatePayload = (updates, detail, cotTransactionTracking, isAccountingProjectsEnabled, vendorUpdates, customerUpdates, tranSelectedEntity) => {
176
180
  const transaction = Object.assign({}, detail);
177
181
  transaction.memo = updates.memo ?? '';
178
182
  // Unlike `memo` (always reset to '' when absent), `documentId` falls back to
@@ -233,6 +237,31 @@ const toTransactionUpdatePayload = (updates, detail, cotTransactionTracking, ven
233
237
  let basePayload;
234
238
  if ((0, customerTransaction_1.isCustomerTransaction)(transaction)) {
235
239
  basePayload = (0, customerTransactionPayload_1.toCustomerTransactionPayload)(transaction);
240
+ // For invoice/credit_memo only, project lives at the transaction level.
241
+ // Guard behind the projects feature flag to avoid touching the field when
242
+ // projects are disabled for this tenant. Clear-project (null injection) is
243
+ // intentionally out of scope for this change — the null write-back path will
244
+ // be added in a follow-up once the backend contract is confirmed.
245
+ if (isAccountingProjectsEnabled &&
246
+ (transaction.type === 'invoice' || transaction.type === 'credit_memo') &&
247
+ updates.project != null) {
248
+ basePayload = {
249
+ ...basePayload,
250
+ accounting_project_id: updates.project.projectId,
251
+ // Only spread integration_id / name when we have a concrete value; omitting
252
+ // them avoids accidentally nulling/blanking out the server-side value when
253
+ // the load path didn't surface the field (e.g. list-shaped data or pre-deploy
254
+ // store where the API returned projectId but not the name/integration_id).
255
+ ...(updates.project.accountingProviderProjectId != null
256
+ ? {
257
+ accounting_project_integration_id: updates.project.accountingProviderProjectId,
258
+ }
259
+ : {}),
260
+ ...(updates.project.projectName
261
+ ? { accounting_project_name: updates.project.projectName }
262
+ : {}),
263
+ };
264
+ }
236
265
  }
237
266
  else if ((0, vendorTransaction_1.isVendorTransaction)(transaction)) {
238
267
  if (tranSelectedEntity != null && tranSelectedEntity.type === 'customer') {
@@ -251,6 +280,7 @@ const toTransactionUpdatePayload = (updates, detail, cotTransactionTracking, ven
251
280
  // Inject COT flags into the payload
252
281
  return (0, transactionPayload_1.injectCOTFlagsIntoTransactionPayload)(basePayload, transaction);
253
282
  };
283
+ exports.toTransactionUpdatePayload = toTransactionUpdatePayload;
254
284
  const checkIfClassMissingForAnyLineItem = (transactionPayload) => {
255
285
  let isAnyClassMissing = false;
256
286
  if (transactionPayload.lines != null) {
@@ -15,6 +15,17 @@ const toTransactionDetailLocalData = (transaction, defaultVendorId, uncategorize
15
15
  const vendorId = defaultVendorId ?? transaction.vendor?.id;
16
16
  transactionLocal.memo = transaction.memo;
17
17
  transactionLocal.documentId = transaction.documentId;
18
+ // Project is at the transaction level only for invoice and credit_memo.
19
+ if ((transaction.type === 'invoice' || transaction.type === 'credit_memo') &&
20
+ transaction.projectId != null) {
21
+ transactionLocal.project = {
22
+ projectId: transaction.projectId,
23
+ projectName: transaction.projectName ?? '',
24
+ ...(transaction.accountingProviderProjectId != null
25
+ ? { accountingProviderProjectId: transaction.accountingProviderProjectId }
26
+ : {}),
27
+ };
28
+ }
18
29
  transactionLocal.vendorUpdates =
19
30
  (0, vendorTransaction_1.isVendorTransaction)(transaction) && vendorId != null
20
31
  ? {
@@ -429,6 +440,7 @@ const toUpdateLineItemsOriginalCategoryClass = (transaction, transactionDetailLo
429
440
  ...transactionDetailState_1.initialSupportedTransactionDetail.transactionDetailLocalData,
430
441
  memo: transactionDetailLocalData.memo,
431
442
  documentId: transactionDetailLocalData.documentId,
443
+ project: transactionDetailLocalData.project,
432
444
  lineItemById: newLineItems,
433
445
  vendorDetails: transactionDetailLocalData.vendorDetails,
434
446
  vendorUpdates: transactionDetailLocalData.vendorUpdates,
@@ -534,6 +546,7 @@ const toSetAllLineItemsToCategoryClass = (transaction, transactionDetailLocalDat
534
546
  ...transactionDetailState_1.initialSupportedTransactionDetail.transactionDetailLocalData,
535
547
  memo: transactionDetailLocalData.memo,
536
548
  documentId: transactionDetailLocalData.documentId,
549
+ project: transactionDetailLocalData.project,
537
550
  lineItemById: newLineItems,
538
551
  vendorUpdates: transactionDetailLocalData.vendorUpdates,
539
552
  vendorDetails: transactionDetailLocalData.vendorDetails,
@@ -580,6 +593,7 @@ const toSetAllLineItemsLocalDataIsUpdateAllChecked = (transaction, transactionDe
580
593
  ...transactionDetailState_1.initialSupportedTransactionDetail.transactionDetailLocalData,
581
594
  memo: transactionDetailLocalData.memo,
582
595
  documentId: transactionDetailLocalData.documentId,
596
+ project: transactionDetailLocalData.project,
583
597
  lineItemById: newLineItems,
584
598
  vendorDetails: transactionDetailLocalData.vendorDetails,
585
599
  vendorUpdates: transactionDetailLocalData.vendorUpdates,
@@ -738,6 +752,7 @@ const setEntityRecommendationForLineIdInLocalData = (transaction, transactionDet
738
752
  ...transactionDetailState_1.initialSupportedTransactionDetail.transactionDetailLocalData,
739
753
  memo: transactionDetailLocalData.memo,
740
754
  documentId: transactionDetailLocalData.documentId,
755
+ project: transactionDetailLocalData.project,
741
756
  lineItemById: newLineItems,
742
757
  vendorUpdates: transactionDetailLocalData.vendorUpdates,
743
758
  vendorDetails: transactionDetailLocalData.vendorDetails,
@@ -792,6 +807,7 @@ const removeEntityRecommendationForLineIdInLocalData = (transaction, transaction
792
807
  ...transactionDetailState_1.initialSupportedTransactionDetail.transactionDetailLocalData,
793
808
  memo: transactionDetailLocalData.memo,
794
809
  documentId: transactionDetailLocalData.documentId,
810
+ project: transactionDetailLocalData.project,
795
811
  lineItemById: newLineItems,
796
812
  vendorDetails: transactionDetailLocalData.vendorDetails,
797
813
  vendorUpdates: transactionDetailLocalData.vendorUpdates,
@@ -1015,6 +1031,7 @@ const toUpdateLineItemsToOriginalVendor = (transaction, transactionDetailLocalDa
1015
1031
  ...transactionDetailState_1.initialSupportedTransactionDetail.transactionDetailLocalData,
1016
1032
  memo: transactionDetailLocalData.memo,
1017
1033
  documentId: transactionDetailLocalData.documentId,
1034
+ project: transactionDetailLocalData.project,
1018
1035
  lineItemById: newLineItems,
1019
1036
  isVendorUpdateAllChecked: false,
1020
1037
  latestUpdatedLineWithEntity: transactionDetailLocalData.latestUpdatedLineWithEntity,
@@ -62,6 +62,7 @@ export interface TransactionUpdates {
62
62
  customerId?: ID;
63
63
  documentId?: string;
64
64
  memo?: string;
65
+ project?: ProjectBase;
65
66
  vendorId?: ID;
66
67
  }
67
68
  export interface EntityRelatedRecommendationUpdates {
@@ -54,6 +54,7 @@ export interface TransactionDetailLocalData {
54
54
  latestSelectedEntityOnLineItem?: Entity;
55
55
  latestUpdatedLineWithEntity?: ID;
56
56
  memo?: string;
57
+ project?: ProjectBase;
57
58
  selectedEntity?: Entity;
58
59
  updatePreviousTransactionsWithUpdatedVendor?: boolean;
59
60
  vendorDetails?: {
@@ -20,7 +20,7 @@ export interface VendorFiling1099ListQuery {
20
20
  sortKey: VendorFiling1099ListViewSortKey;
21
21
  sortOrder: SortOrder;
22
22
  }
23
- declare const toVendorFiling1099ListViewSortKey: (v: string) => "status" | "w9" | "legal_name" | "total" | "tax_classification" | "filing1099type";
23
+ declare const toVendorFiling1099ListViewSortKey: (v: string) => "status" | "w9" | "total" | "legal_name" | "tax_classification" | "filing1099type";
24
24
  export type VendorFiling1099ListViewSortKey = ReturnType<typeof toVendorFiling1099ListViewSortKey>;
25
25
  export type Type1099Download = 'nec' | 'misc' | 'int';
26
26
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "5.1.18-betaDI10",
3
+ "version": "5.1.18-betaDI12",
4
4
  "description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/esm/index.js",
@@ -79,6 +79,7 @@
79
79
  "ts-prune": "^0.10.3",
80
80
  "ts-unused-exports": "^11.0.1",
81
81
  "typescript": "^5.7.3",
82
+ "vite": "^7.3.5",
82
83
  "vitest": "^4.1.8"
83
84
  },
84
85
  "dependencies": {
@@ -129,7 +130,9 @@
129
130
  "postversion": "git push && git push --tags",
130
131
  "check-dependencies": "node ./scripts/check_dependencies.js",
131
132
  "clean-overrides": "node ./scripts/clean_overrides.js",
132
- "create-release-branch": "chmod +x ./scripts/create_release_branch.sh && ./scripts/create_release_branch.sh",
133
+ "create-or-update-release-branch": "chmod +x ./scripts/create_or_update_release_branch.sh && ./scripts/create_or_update_release_branch.sh",
134
+ "bump-versions-master": "chmod +x ./scripts/bump_versions_master.sh && ./scripts/bump_versions_master.sh",
135
+ "bump-versions-beta": "chmod +x ./scripts/bump_versions_beta.sh && ./scripts/bump_versions_beta.sh",
133
136
  "bump-update-web-app-cockpit-beta": "chmod +x ./scripts/bump_and_update_web_app_ui_beta.sh && ./scripts/bump_and_update_web_app_ui_beta.sh",
134
137
  "send-release-notes": "chmod +x ./scripts/send_release_notes.sh && ./scripts/send_release_notes.sh",
135
138
  "update-slack-group-topic": "chmod +x ./scripts/update-slack-group-topic.sh && ./scripts/update-slack-group-topic.sh",