@zeniai/client-epic-state 5.0.52 → 5.0.53-betaML4

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 (124) hide show
  1. package/lib/commonStateTypes/recommendationBase.d.ts +2 -1
  2. package/lib/commonStateTypes/viewAndReport/viewAndReport.d.ts +2 -2
  3. package/lib/commonStateTypes/viewAndReport/viewAndReport.js +1 -0
  4. package/lib/entity/account/accountState.d.ts +1 -1
  5. package/lib/entity/accountGroup/accountGroupState.d.ts +1 -1
  6. package/lib/entity/class/classReducer.d.ts +4 -4
  7. package/lib/entity/class/classState.d.ts +1 -1
  8. package/lib/entity/forecast/forecastState.d.ts +1 -1
  9. package/lib/entity/project/projectPayload.d.ts +8 -1
  10. package/lib/entity/project/projectPayload.js +15 -1
  11. package/lib/entity/project/projectState.d.ts +4 -2
  12. package/lib/entity/sectionAccountsView/sectionAccountsView.d.ts +1 -1
  13. package/lib/entity/sectionClassesViewV2/sectionClassesView.d.ts +1 -1
  14. package/lib/entity/sectionClassesViewV2/sectionClassesViewReducer.d.ts +2 -2
  15. package/lib/entity/sectionProjectView/sectionProjectView.d.ts +1 -1
  16. package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +2 -2
  17. package/lib/entity/tenant/clearAllEpic.d.ts +2 -1
  18. package/lib/entity/tenant/clearAllEpic.js +2 -0
  19. package/lib/entity/transaction/payloadTypes/transactionLinePayload.d.ts +2 -0
  20. package/lib/entity/transaction/payloadTypes/transactionLinePayload.js +9 -0
  21. package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +2 -0
  22. package/lib/entity/transaction/payloadTypes/transactionPayload.js +6 -0
  23. package/lib/entity/transaction/stateTypes/transaction.d.ts +2 -0
  24. package/lib/entity/transaction/stateTypes/transactionLine.d.ts +2 -0
  25. package/lib/epic.d.ts +4 -1
  26. package/lib/epic.js +5 -1
  27. package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +1 -0
  28. package/lib/esm/entity/project/projectPayload.js +12 -0
  29. package/lib/esm/entity/tenant/clearAllEpic.js +2 -0
  30. package/lib/esm/entity/transaction/payloadTypes/transactionLinePayload.js +9 -0
  31. package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +6 -0
  32. package/lib/esm/epic.js +5 -1
  33. package/lib/esm/index.js +11 -7
  34. package/lib/esm/reducer.js +3 -0
  35. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +8 -0
  36. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic.js +3 -0
  37. package/lib/esm/view/expenseAutomationView/helpers/saveTransactionHelper.js +1 -0
  38. package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +11 -2
  39. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +127 -31
  40. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +13 -2
  41. package/lib/esm/view/expenseAutomationView/types/transactionsViewState.js +1 -0
  42. package/lib/esm/view/profitAndLossClassesView/profitAndLossHorizontalEnrichment.js +44 -0
  43. package/lib/esm/view/projectList/fetchProjectListEpic.js +38 -0
  44. package/lib/esm/view/projectList/projectListPayload.js +1 -0
  45. package/lib/esm/view/projectList/projectListReducer.js +39 -0
  46. package/lib/esm/view/projectList/projectListSelector.js +9 -0
  47. package/lib/esm/view/projectList/projectListState.js +1 -0
  48. package/lib/esm/view/recommendation/fetchEntityRecommendationsForCategorizationEpic.js +83 -0
  49. package/lib/esm/view/recommendation/recommendationReducer.js +52 -1
  50. package/lib/esm/view/transactionDetail/epics/saveTransactionHelper.js +1 -0
  51. package/lib/esm/view/transactionDetail/epics/transactionDetailEpic.js +6 -0
  52. package/lib/esm/view/transactionDetail/epics/updateTransactionDetailEpic.js +3 -0
  53. package/lib/esm/view/transactionDetail/transactionDetailSelector.js +14 -2
  54. package/lib/esm/view/transactionList/fetchTransactionListByProjectEpic.js +45 -0
  55. package/lib/esm/view/transactionList/parallelFetchProjectTransactionListEpic.js +32 -0
  56. package/lib/esm/view/transactionList/transactionListByProjectSelector.js +58 -0
  57. package/lib/esm/view/transactionList/transactionListReducer.js +83 -2
  58. package/lib/esm/view/transactionList/transactionListState.js +10 -0
  59. package/lib/index.d.ts +13 -9
  60. package/lib/index.js +42 -27
  61. package/lib/reducer.d.ts +3 -0
  62. package/lib/reducer.js +3 -0
  63. package/lib/tsconfig.typecheck.tsbuildinfo +1 -0
  64. package/lib/view/auditReportView/auditReportViewState.d.ts +1 -1
  65. package/lib/view/billPayCard/billPayCardSelector.d.ts +1 -1
  66. package/lib/view/cardBalance/cardBalanceSelector.d.ts +1 -1
  67. package/lib/view/cashBalance/cashBalanceSelector.d.ts +1 -1
  68. package/lib/view/cashInCashOut/cashInCashOutSelector.d.ts +1 -1
  69. package/lib/view/cashPosition/cashPositionSelector.d.ts +1 -1
  70. package/lib/view/dashboard/dashboardReducer.d.ts +2 -2
  71. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.d.ts +2 -1
  72. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +8 -0
  73. package/lib/view/expenseAutomationView/epics/transactionCategorization/updateTransactionCategorizationEpic.js +3 -0
  74. package/lib/view/expenseAutomationView/helpers/saveTransactionHelper.js +1 -0
  75. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +2 -1
  76. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +11 -2
  77. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +3 -1
  78. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +127 -31
  79. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +4 -0
  80. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +12 -1
  81. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +5 -1
  82. package/lib/view/expenseAutomationView/types/transactionsViewState.js +1 -0
  83. package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
  84. package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
  85. package/lib/view/profitAndLossClassesView/profitAndLossHorizontalEnrichment.d.ts +15 -1
  86. package/lib/view/profitAndLossClassesView/profitAndLossHorizontalEnrichment.js +45 -0
  87. package/lib/view/projectList/fetchProjectListEpic.d.ts +8 -0
  88. package/lib/view/projectList/fetchProjectListEpic.js +42 -0
  89. package/lib/view/projectList/projectListPayload.d.ts +7 -0
  90. package/lib/view/projectList/projectListPayload.js +2 -0
  91. package/lib/view/projectList/projectListReducer.d.ts +9 -0
  92. package/lib/view/projectList/projectListReducer.js +43 -0
  93. package/lib/view/projectList/projectListSelector.d.ts +8 -0
  94. package/lib/view/projectList/projectListSelector.js +13 -0
  95. package/lib/view/projectList/projectListState.d.ts +4 -0
  96. package/lib/view/projectList/projectListState.js +2 -0
  97. package/lib/view/recommendation/fetchEntityRecommendationsForCategorizationEpic.d.ts +8 -0
  98. package/lib/view/recommendation/fetchEntityRecommendationsForCategorizationEpic.js +87 -0
  99. package/lib/view/recommendation/recommendationReducer.d.ts +21 -1
  100. package/lib/view/recommendation/recommendationReducer.js +53 -2
  101. package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
  102. package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
  103. package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
  104. package/lib/view/topEx/topExSelector.d.ts +1 -1
  105. package/lib/view/transactionDetail/epics/saveTransactionHelper.js +1 -0
  106. package/lib/view/transactionDetail/epics/transactionDetailEpic.d.ts +2 -1
  107. package/lib/view/transactionDetail/epics/transactionDetailEpic.js +6 -0
  108. package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +3 -0
  109. package/lib/view/transactionDetail/transactionDetailSelector.d.ts +3 -0
  110. package/lib/view/transactionDetail/transactionDetailSelector.js +13 -1
  111. package/lib/view/transactionDetail/transactionDetailState.d.ts +2 -0
  112. package/lib/view/transactionDetail/transactionDetailTypes.d.ts +2 -0
  113. package/lib/view/transactionList/fetchTransactionListByProjectEpic.d.ts +8 -0
  114. package/lib/view/transactionList/fetchTransactionListByProjectEpic.js +52 -0
  115. package/lib/view/transactionList/parallelFetchProjectTransactionListEpic.d.ts +6 -0
  116. package/lib/view/transactionList/parallelFetchProjectTransactionListEpic.js +36 -0
  117. package/lib/view/transactionList/transactionListByProjectSelector.d.ts +22 -0
  118. package/lib/view/transactionList/transactionListByProjectSelector.js +66 -0
  119. package/lib/view/transactionList/transactionListPayload.d.ts +15 -0
  120. package/lib/view/transactionList/transactionListReducer.d.ts +25 -2
  121. package/lib/view/transactionList/transactionListReducer.js +83 -2
  122. package/lib/view/transactionList/transactionListState.d.ts +15 -0
  123. package/lib/view/transactionList/transactionListState.js +13 -1
  124. package/package.json +1 -1
@@ -2,8 +2,8 @@ import { ReportID } from '../../commonStateTypes/viewAndReport/viewAndReport';
2
2
  import { ZeniAPIStatus } from '../../responsePayload';
3
3
  import { ReportsResyncState } from './reportsResyncState';
4
4
  export declare const initialReportsResyncState: ReportsResyncState;
5
- export declare const initiateReportsResync: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[reportIdToResync: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation"], {
6
- reportIdToResync: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation";
5
+ export declare const initiateReportsResync: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[reportIdToResync: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation"], {
6
+ reportIdToResync: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation";
7
7
  }, "initiateReportsResync/initiateReportsResync", never, never>, initiateReportsClassViewRefetching: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
8
8
  reportIdToResync: ReportID;
9
9
  }, "initiateReportsResync/initiateReportsClassViewRefetching">, reportsResyncSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
@@ -1,6 +1,6 @@
1
1
  import { RootState } from '../../reducer';
2
2
  export declare const getTasksCardReport: (state: RootState) => {
3
- reportId: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation";
3
+ reportId: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation";
4
4
  reportTitle: string;
5
5
  version: string | number | undefined;
6
6
  status: import("../..").Status | undefined;
@@ -4,7 +4,7 @@ import { RootState } from '../../reducer';
4
4
  import { TopExReport, TopExTimePeriodWithMetaData } from './topExSelectorTypes';
5
5
  import { TopExState } from './topExState';
6
6
  export declare const getTopExpenses: (accountState: AccountState, topExState: TopExState, numberOfExpenses?: number) => {
7
- reportId: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation";
7
+ reportId: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation";
8
8
  reportTitle: string;
9
9
  version: string | number | undefined;
10
10
  status: import("../..").Status | undefined;
@@ -54,6 +54,7 @@ const toTransactionUpdatesFromTransactionDetailLocalData = (transactionDetailLoc
54
54
  lineDescription: lineItem.lineDescription,
55
55
  class: lineItem.class,
56
56
  account: lineItem.account,
57
+ project: lineItem.project,
57
58
  recommendation: (0, transactionHelper_1.convertCOTRecommendationsToRegular)(lineItem.recommendationsWithCOT),
58
59
  };
59
60
  if (line.type === 'journal_entry_transaction_line' ||
@@ -8,7 +8,8 @@ import { fetchAccountList } from '../../accountList/accountListReducer';
8
8
  import { fetchClassList } from '../../classList/classListReducer';
9
9
  import { updateTransactionVendorLocalData } from '../../commonVendorView/transactionVendorView/transactionVendorViewReducer';
10
10
  import { fetchOwnerList } from '../../ownerList/ownerListReducer';
11
+ import { fetchProjectList } from '../../projectList/projectListReducer';
11
12
  import { updateSortUiState } from '../../vendorList/vendorListReducer';
12
13
  import { fetchTransactionDetail, initializeTransactionDetailLocalData, removeTransactionDetail, updateTransactionDetailFetchState } from '../transactionDetailReducer';
13
- export type ActionType = ReturnType<typeof fetchTransactionDetail> | ReturnType<typeof updateTransaction> | ReturnType<typeof updateTransactionDetailFetchState> | ReturnType<typeof initializeTransactionDetailLocalData> | ReturnType<typeof removeTransaction> | ReturnType<typeof removeTransactionDetail> | ReturnType<typeof fetchClassList> | ReturnType<typeof fetchAccountList> | ReturnType<typeof updateSortUiState> | ReturnType<typeof updateVendors> | ReturnType<typeof updateTransactionVendorLocalData> | ReturnType<typeof fetchOwnerList>;
14
+ export type ActionType = ReturnType<typeof fetchTransactionDetail> | ReturnType<typeof updateTransaction> | ReturnType<typeof updateTransactionDetailFetchState> | ReturnType<typeof initializeTransactionDetailLocalData> | ReturnType<typeof removeTransaction> | ReturnType<typeof removeTransactionDetail> | ReturnType<typeof fetchClassList> | ReturnType<typeof fetchProjectList> | ReturnType<typeof fetchAccountList> | ReturnType<typeof updateSortUiState> | ReturnType<typeof updateVendors> | ReturnType<typeof updateTransactionVendorLocalData> | ReturnType<typeof fetchOwnerList>;
14
15
  export declare const fetchTransactionDetailEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -20,6 +20,7 @@ const classListReducer_1 = require("../../classList/classListReducer");
20
20
  const transactionVendorLocalDataHelper_1 = require("../../commonVendorView/transactionVendorView/transactionVendorLocalDataHelper");
21
21
  const transactionVendorViewReducer_1 = require("../../commonVendorView/transactionVendorView/transactionVendorViewReducer");
22
22
  const ownerListReducer_1 = require("../../ownerList/ownerListReducer");
23
+ const projectListReducer_1 = require("../../projectList/projectListReducer");
23
24
  const transactionDetailReducer_1 = require("../transactionDetailReducer");
24
25
  const transactionDetailState_1 = require("../transactionDetailState");
25
26
  const fetchTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(transactionDetailReducer_1.fetchTransactionDetail.match), (0, operators_1.mergeMap)((action) => {
@@ -45,6 +46,11 @@ const fetchTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe(
45
46
  classList.fetchState !== 'In-Progress') {
46
47
  transactionActions.push((0, classListReducer_1.fetchClassList)());
47
48
  }
49
+ const projectList = state$.value.projectListState;
50
+ if (projectList.hasValidState() === false &&
51
+ projectList.fetchState !== 'In-Progress') {
52
+ transactionActions.push((0, projectListReducer_1.fetchProjectList)());
53
+ }
48
54
  transactionActions.push((0, transactionDetailReducer_1.updateTransactionDetailFetchState)(transactionId, 'In-Progress'));
49
55
  const query = { transaction_type: transactionId.type };
50
56
  const getTransactionDetail$ = zeniAPI
@@ -188,6 +188,9 @@ const toTransactionUpdatePayload = (updates, detail, cotTransactionTracking, ven
188
188
  if (lineUpdates.account != null) {
189
189
  lineTobeUpdated.account = lineUpdates.account;
190
190
  }
191
+ if (lineUpdates.project != null) {
192
+ lineTobeUpdated.project = lineUpdates.project;
193
+ }
191
194
  if (lineUpdates.customer != null) {
192
195
  lineTobeUpdated.customer = lineUpdates.customer;
193
196
  }
@@ -9,6 +9,7 @@ import { RootState } from '../../reducer';
9
9
  import { ZeniDate } from '../../zeniDayJS';
10
10
  import { AccountListSelectorView } from '../accountList/accountListSelector';
11
11
  import { ClassListSelectorView } from '../classList/classListSelector';
12
+ import { ProjectListSelectorView } from '../projectList/projectListSelector';
12
13
  import { TransactionDetailLocalData } from './transactionDetailTypes';
13
14
  export interface TransactionDetailReport extends SelectorView {
14
15
  accountList: AccountListSelectorView;
@@ -18,7 +19,9 @@ export interface TransactionDetailReport extends SelectorView {
18
19
  classList: ClassListSelectorView;
19
20
  deleteStatusByAttachmentName: Record<string, FetchStateAndError>;
20
21
  isAccountingClassesEnabled: boolean;
22
+ isAccountingProjectsEnabled: boolean;
21
23
  linkedTransactions: SupportedTransactionWithCOT[];
24
+ projectList: ProjectListSelectorView;
22
25
  transactionDetailLocalData: TransactionDetailLocalData;
23
26
  transactionDetailUpdateStatus: FetchStateAndError;
24
27
  isUpdateNotAllowed?: boolean;
@@ -15,9 +15,10 @@ const vendorSelector_1 = require("../../entity/vendor/vendorSelector");
15
15
  const zeniDayJS_1 = require("../../zeniDayJS");
16
16
  const accountListSelector_1 = require("../accountList/accountListSelector");
17
17
  const classListSelector_1 = require("../classList/classListSelector");
18
+ const projectListSelector_1 = require("../projectList/projectListSelector");
18
19
  const transactionDetailState_1 = require("./transactionDetailState");
19
20
  const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = true) => {
20
- const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, } = state;
21
+ const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, projectState, projectListState, } = state;
21
22
  const detailKey = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
22
23
  const transactionDetail = (0, get_1.default)(transactionDetailState.transactionDetailById, detailKey);
23
24
  let fetchState = {
@@ -63,6 +64,15 @@ const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = tr
63
64
  const classList = isAccountingClassesEnabled
64
65
  ? (0, classListSelector_1.getClassList)(classState, classListState)
65
66
  : { classes: [], nestedClassHierarchy: [], fetchState: 'Completed', error: undefined, version: 0 };
67
+ const isAccountingProjectsEnabled = (0, tenantSelector_1.getIsAccountingProjectsEnabled)(state);
68
+ const projectList = isAccountingProjectsEnabled
69
+ ? (0, projectListSelector_1.getProjectList)(projectState, projectListState)
70
+ : {
71
+ projects: [],
72
+ fetchState: 'Completed',
73
+ error: undefined,
74
+ version: 0,
75
+ };
66
76
  const accountsHierarchyList = (0, accountListSelector_1.getNestedAccountListHierarchy)(accountListState, 'accountList');
67
77
  const classHierarchyList = isAccountingClassesEnabled
68
78
  ? (0, classListSelector_1.getNestedClassListHierarchy)(classListState)
@@ -85,6 +95,8 @@ const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = tr
85
95
  accountsHierarchyList,
86
96
  classList: classList,
87
97
  isAccountingClassesEnabled,
98
+ isAccountingProjectsEnabled,
99
+ projectList,
88
100
  isUpdateNotAllowed: transactionDetail?.isUpdateNotAllowed,
89
101
  transactionDetailLocalData: transactionDetail?.transactionDetailLocalData ??
90
102
  transactionDetailState_1.initialSupportedTransactionDetail.transactionDetailLocalData,
@@ -4,6 +4,7 @@ import { AccountBase } from '../../entity/account/accountState';
4
4
  import { ClassBase } from '../../entity/class/classState';
5
5
  import { CustomerBase } from '../../entity/customer/customerState';
6
6
  import { EntityType } from '../../entity/genericEntity/entity';
7
+ import { ProjectBase } from '../../entity/project/projectState';
7
8
  import { Transaction, TransactionID } from '../../entity/transaction/stateTypes/transaction';
8
9
  import { VendorBase } from '../../entity/vendor/vendorState';
9
10
  import { EntityRecommendationKey } from '../recommendation/recommendationState';
@@ -52,6 +53,7 @@ export interface TransactionLineUpdates {
52
53
  class?: ClassBase;
53
54
  customer?: CustomerBase;
54
55
  lineDescription?: string;
56
+ project?: ProjectBase;
55
57
  recommendation?: Recommendation[];
56
58
  vendor?: VendorBase;
57
59
  }
@@ -4,6 +4,7 @@ import { AccountBase, RecommendedAccountBase } from '../../entity/account/accoun
4
4
  import { ClassBase, RecommendedClassBase } from '../../entity/class/classState';
5
5
  import { CustomerBase } from '../../entity/customer/customerState';
6
6
  import { Entity } from '../../entity/genericEntity/entity';
7
+ import { ProjectBase } from '../../entity/project/projectState';
7
8
  import { TransactionID } from '../../entity/transaction/stateTypes/transaction';
8
9
  import { BillableStatus, PlatformLineDetailType, ProductOrService, TransactionLineBase } from '../../entity/transaction/stateTypes/transactionLine';
9
10
  import { TransactionCategory, TransactionType } from '../../entity/transaction/stateTypes/transactionType';
@@ -29,6 +30,7 @@ export interface TransactionDetailLineItemData extends TransactionLineBase {
29
30
  linkedTransactions?: TransactionID[];
30
31
  postingType?: TransactionCategory;
31
32
  postingTypeName?: string;
33
+ project?: ProjectBase;
32
34
  recommendationsWithCOT?: RecommendationWithCOT[];
33
35
  recommendedAccount?: RecommendedAccountBase;
34
36
  recommendedClass?: RecommendedClassBase;
@@ -0,0 +1,8 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { updateTransactions } from '../../entity/transaction/transactionReducer';
4
+ import { RootState } from '../../reducer';
5
+ import { ZeniAPI } from '../../zeniAPI';
6
+ import { fetchProjectTransactionList, updateTransactionListByProject, updateTransactionListByProjectFailure } from './transactionListReducer';
7
+ export type ActionType = ReturnType<typeof fetchProjectTransactionList> | ReturnType<typeof updateTransactions> | ReturnType<typeof updateTransactionListByProject> | ReturnType<typeof updateTransactionListByProjectFailure>;
8
+ export declare const fetchTransactionListByProjectEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.fetchTransactionListByProjectEpic = void 0;
7
+ const js_base64_1 = require("js-base64");
8
+ const get_1 = __importDefault(require("lodash/get"));
9
+ const rxjs_1 = require("rxjs");
10
+ const operators_1 = require("rxjs/operators");
11
+ const timePeriod_1 = require("../../commonStateTypes/timePeriod");
12
+ const transactionReducer_1 = require("../../entity/transaction/transactionReducer");
13
+ const responsePayload_1 = require("../../responsePayload");
14
+ const transactionListReducer_1 = require("./transactionListReducer");
15
+ const transactionListState_1 = require("./transactionListState");
16
+ const fetchTransactionListByProjectEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(transactionListReducer_1.fetchProjectTransactionList.match), (0, operators_1.mergeMap)((action) => {
17
+ const state = state$.value;
18
+ const key = (0, transactionListState_1.getProjectAcTranKey)(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period);
19
+ const projectTransactions = (0, get_1.default)(state.transactionListState.byProject.transactionListByProjectKey, key, undefined);
20
+ if (action.payload.cacheOverride === true ||
21
+ projectTransactions == null ||
22
+ projectTransactions.hasValidState() === false) {
23
+ const queryParam = {
24
+ start_date: (0, timePeriod_1.toString)(action.payload.period.start),
25
+ end_date: (0, timePeriod_1.toString)(action.payload.period.end),
26
+ sort_by: 'create_time',
27
+ sort_order: 'desc',
28
+ account_id: action.payload.accountId,
29
+ account_type: action.payload.accountType,
30
+ zeni_project_id: action.payload.projectId,
31
+ };
32
+ const base64AccountId = (0, js_base64_1.toBase64)(action.payload.accountId);
33
+ return zeniAPI
34
+ .getJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/accounts/${base64AccountId}/transactions?query=${encodeURIComponent(JSON.stringify(queryParam))}`)
35
+ .pipe((0, operators_1.mergeMap)((response) => {
36
+ if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
37
+ const updateActions = [];
38
+ updateActions.push((0, transactionReducer_1.updateTransactions)(response.data.account.transactions, (value) => value.transaction_id));
39
+ updateActions.push((0, transactionListReducer_1.updateTransactionListByProject)(response.data));
40
+ return (0, rxjs_1.from)(updateActions);
41
+ }
42
+ else {
43
+ return (0, rxjs_1.of)((0, transactionListReducer_1.updateTransactionListByProjectFailure)(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period, response.status));
44
+ }
45
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, transactionListReducer_1.updateTransactionListByProjectFailure)(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period, (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'fetch transaction list REST API call errored out' +
46
+ JSON.stringify(error))))));
47
+ }
48
+ else {
49
+ return (0, rxjs_1.from)([]);
50
+ }
51
+ }));
52
+ exports.fetchTransactionListByProjectEpic = fetchTransactionListByProjectEpic;
@@ -0,0 +1,6 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { RootState } from '../../reducer';
4
+ import { fetchProjectTransactionList, parallelFetchProjectTransactionList } from './transactionListReducer';
5
+ export type ActionType = ReturnType<typeof parallelFetchProjectTransactionList> | ReturnType<typeof fetchProjectTransactionList>;
6
+ export declare const parallelFetchProjectTransactionListEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>) => Observable<ActionType>;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parallelFetchProjectTransactionListEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const parallelFetchClassTransactionListEpic_1 = require("./parallelFetchClassTransactionListEpic");
7
+ const transactionListReducer_1 = require("./transactionListReducer");
8
+ const transactionListState_1 = require("./transactionListState");
9
+ const parallelFetchProjectTransactionListEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(transactionListReducer_1.parallelFetchProjectTransactionList.match), (0, operators_1.mergeMap)((action) => {
10
+ const state = state$.value.transactionListState;
11
+ const timePeriods = (0, parallelFetchClassTransactionListEpic_1.splitPeriod)(action.payload.period);
12
+ const filteredTimePeriods = timePeriods.filter((value) => {
13
+ if (action.payload.cacheOverride === false) {
14
+ return (isDataAvailableOrFetching(state.byProject, action.payload.accountId, action.payload.accountType, action.payload.projectId, value) === false);
15
+ }
16
+ else {
17
+ return true;
18
+ }
19
+ });
20
+ if (filteredTimePeriods.length > 12) {
21
+ console.error('Only maximum 12 parallel fetch are allowed!');
22
+ return (0, rxjs_1.from)([]);
23
+ }
24
+ else {
25
+ const fetchActions = filteredTimePeriods.map((period) => (0, transactionListReducer_1.fetchProjectTransactionList)(action.payload.accountId, action.payload.accountType, action.payload.projectId, period, true));
26
+ return (0, rxjs_1.from)(fetchActions);
27
+ }
28
+ }));
29
+ exports.parallelFetchProjectTransactionListEpic = parallelFetchProjectTransactionListEpic;
30
+ function isDataAvailableOrFetching(state, accountId, accountType, projectId, period) {
31
+ const key = (0, transactionListState_1.getProjectAcTranKey)(accountId, accountType, projectId, period);
32
+ const projectTransactions = state.transactionListByProjectKey[key];
33
+ return (projectTransactions != null &&
34
+ (projectTransactions.fetchState === 'In-Progress' ||
35
+ projectTransactions.hasValidState()));
36
+ }
@@ -0,0 +1,22 @@
1
+ import { COABalanceTimeFrame } from '../../commonStateTypes/coaBalance/coaBalance';
2
+ import { ID } from '../../commonStateTypes/common';
3
+ import { EntityOrder } from '../../commonStateTypes/selectorTypes/selectorTypes';
4
+ import { TimePeriod } from '../../commonStateTypes/timePeriod';
5
+ import { SelectorView } from '../../commonStateTypes/viewAndReport/viewAndReport';
6
+ import { AccountBase, AccountType } from '../../entity/account/accountState';
7
+ import { Transaction } from '../../entity/transaction/stateTypes/transaction';
8
+ import { TransactionState } from '../../entity/transaction/transactionState';
9
+ import { TransactionListSelectorView, TransactionListState, TransactionListUIState } from './transactionListState';
10
+ export interface TransactionListByProjectReport extends SelectorView, TransactionListSelectorView {
11
+ accountId: ID;
12
+ accountType: AccountType;
13
+ filterByTimePeriod: TimePeriod;
14
+ projectId: ID;
15
+ timeframe: COABalanceTimeFrame;
16
+ transactionOrder: EntityOrder;
17
+ transactions: Transaction[];
18
+ uiState: TransactionListUIState;
19
+ account?: AccountBase;
20
+ }
21
+ export declare const getTransactionListByProject: (transactionState: TransactionState, transactionListState: TransactionListState, accountId: ID, accountType: AccountType, projectId: ID, timeframe: COABalanceTimeFrame, filterByTimePeriod: TimePeriod) => TransactionListByProjectReport;
22
+ export declare const getTransactionListUIStateByProjectKey: (transactionListState: TransactionListState, accountId: ID, accountType: AccountType, projectId: ID) => TransactionListUIState | undefined;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getTransactionListUIStateByProjectKey = exports.getTransactionListByProject = void 0;
7
+ const flatMap_1 = __importDefault(require("lodash/flatMap"));
8
+ const get_1 = __importDefault(require("lodash/get"));
9
+ const orderBy_1 = __importDefault(require("lodash/orderBy"));
10
+ const transactionSelector_1 = require("../../entity/transaction/transactionSelector");
11
+ const parallelFetchAccountTransactionListEpic_1 = require("./parallelFetchAccountTransactionListEpic");
12
+ const reduceTransactionListFetchState_1 = require("./reduceTransactionListFetchState");
13
+ const transactionListState_1 = require("./transactionListState");
14
+ const getTransactionListByProject = (transactionState, transactionListState, accountId, accountType, projectId, timeframe, filterByTimePeriod) => {
15
+ const timePeriods = (0, parallelFetchAccountTransactionListEpic_1.splitPeriod)(filterByTimePeriod); // Note: Split by months.
16
+ const accountTransactions = timePeriods
17
+ .map((thisTimePeriod) => {
18
+ const key = (0, transactionListState_1.getProjectAcTranKey)(accountId, accountType, projectId, thisTimePeriod);
19
+ return (0, get_1.default)(transactionListState.byProject.transactionListByProjectKey, key, undefined);
20
+ })
21
+ .filter((acTransaction) => acTransaction != null);
22
+ let account = undefined;
23
+ if (accountTransactions.length > 0) {
24
+ account = accountTransactions[0].account;
25
+ }
26
+ const fetchState = (0, reduceTransactionListFetchState_1.reduceFetchState)(accountTransactions);
27
+ let transactions = [];
28
+ if ((0, reduceTransactionListFetchState_1.isAnyFetchCompleted)(accountTransactions)) {
29
+ const allTransactionIDs = (0, flatMap_1.default)(accountTransactions, (value) => value.transactionIDs);
30
+ const transactionsUnsorted = allTransactionIDs
31
+ .map((transactionId) => (0, transactionSelector_1.getSupportedTransactionById)(transactionState, transactionId))
32
+ .filter((value) => {
33
+ if (value == null) {
34
+ console.error("Can't have null transaction at this stage!");
35
+ }
36
+ return value != null;
37
+ });
38
+ transactions = (0, orderBy_1.default)(transactionsUnsorted, (value) => value.date.valueOf(), 'desc');
39
+ }
40
+ const key = (0, transactionListState_1.getProjectAcKey)(accountId, accountType, projectId);
41
+ const uiState = (0, get_1.default)(transactionListState.byProject.transactionListUIStateByProjectKey, key, {});
42
+ return {
43
+ reportId: 'transaction_list_of_account_by_project',
44
+ reportTitle: 'Transaction List of Account By Project',
45
+ version: 1,
46
+ status: undefined,
47
+ fetchState: fetchState.fetchState,
48
+ error: fetchState.error,
49
+ timeframe,
50
+ filterByTimePeriod,
51
+ accountId,
52
+ accountType,
53
+ projectId,
54
+ account,
55
+ transactionOrder: 'descending_transaction_date',
56
+ transactions,
57
+ uiState,
58
+ latestTransactionId: transactionListState.latestTransactionId,
59
+ };
60
+ };
61
+ exports.getTransactionListByProject = getTransactionListByProject;
62
+ const getTransactionListUIStateByProjectKey = (transactionListState, accountId, accountType, projectId) => {
63
+ const key = (0, transactionListState_1.getProjectAcKey)(accountId, accountType, projectId);
64
+ return (0, get_1.default)(transactionListState.byProject.transactionListUIStateByProjectKey, key, undefined);
65
+ };
66
+ exports.getTransactionListUIStateByProjectKey = getTransactionListUIStateByProjectKey;
@@ -48,9 +48,24 @@ export interface TransactionListByClassPayload {
48
48
  query: QueryClassMetaDataPayload;
49
49
  query_definitions: Record<string, unknown>;
50
50
  }
51
+ interface QueryProjectMetaDataPayload {
52
+ account_id: string;
53
+ account_type: string;
54
+ end_date: string;
55
+ group_by: string;
56
+ sort_order: string;
57
+ start_date: string;
58
+ zeni_project_id: string;
59
+ }
60
+ export interface TransactionListByProjectPayload {
61
+ account: TransactionListPayload;
62
+ query: QueryProjectMetaDataPayload;
63
+ query_definitions: Record<string, unknown>;
64
+ }
51
65
  export type TransactionListByAccountResponse = ZeniAPIResponse<TransactionListByAccountPayload>;
52
66
  export type TransactionListByEntityResponse = ZeniAPIResponse<TransactionListByEntityPayload>;
53
67
  export type TransactionListByClassResponse = ZeniAPIResponse<TransactionListByClassPayload>;
68
+ export type TransactionListByProjectResponse = ZeniAPIResponse<TransactionListByProjectPayload>;
54
69
  interface TransactionsByCategoryTypePayload {
55
70
  query: QueryTransactionByCategoryTypeMetaDataPayload;
56
71
  transactions: TransactionPayload[];
@@ -6,7 +6,7 @@ import { Entity } from '../../entity/genericEntity/entity';
6
6
  import { TransactionPayload } from '../../entity/transaction/payloadTypes/transactionPayload';
7
7
  import { TransactionID } from '../../entity/transaction/stateTypes/transaction';
8
8
  import { ZeniAPIStatus } from '../../responsePayload';
9
- import { TransactionListByAccountPayload, TransactionListByClassPayload, TransactionListByEntityPayload } from './transactionListPayload';
9
+ import { TransactionListByAccountPayload, TransactionListByClassPayload, TransactionListByEntityPayload, TransactionListByProjectPayload } from './transactionListPayload';
10
10
  import { TransactionCategoryType, TransactionListState, TransactionListUIState } from './transactionListState';
11
11
  export declare const initialState: TransactionListState;
12
12
  export declare const parallelFetchAccountTransactionList: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[accountId: string, accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets", period: TimePeriod, accountName?: string | undefined, cacheOverride?: any, includeSubAccountTransactions?: any], {
@@ -69,7 +69,30 @@ export declare const parallelFetchAccountTransactionList: import("@reduxjs/toolk
69
69
  classId: string;
70
70
  period: TimePeriod;
71
71
  error: ZeniAPIStatus<Record<string, unknown>>;
72
- }, "transactionList/updateTransactionListByClassFailure", never, never>, parallelFetchTransactionListByCategoryType: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionCategoryType: TransactionCategoryType, period: TimePeriod, cacheOverride?: any, minimumTransactionAmount?: Amount | undefined], {
72
+ }, "transactionList/updateTransactionListByClassFailure", never, never>, parallelFetchProjectTransactionList: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[accountId: string, accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets", projectId: string, period: TimePeriod, cacheOverride?: any], {
73
+ accountId: string;
74
+ accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets";
75
+ projectId: string;
76
+ period: TimePeriod;
77
+ cacheOverride: any;
78
+ }, "transactionList/parallelFetchProjectTransactionList", never, never>, fetchProjectTransactionList: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[accountId: string, accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets", projectId: string, period: TimePeriod, cacheOverride?: any], {
79
+ accountId: string;
80
+ accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets";
81
+ projectId: string;
82
+ period: TimePeriod;
83
+ cacheOverride: any;
84
+ }, "transactionList/fetchProjectTransactionList", never, never>, updateTransactionListByProject: import("@reduxjs/toolkit").ActionCreatorWithPayload<TransactionListByProjectPayload, "transactionList/updateTransactionListByProject">, updateTransactionListByProjectUIState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
85
+ accountId: ID;
86
+ accountType: AccountType;
87
+ projectId: ID;
88
+ uiState: TransactionListUIState;
89
+ }, "transactionList/updateTransactionListByProjectUIState">, updateTransactionListByProjectFailure: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[accountId: string, accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets", projectId: string, period: TimePeriod, error: ZeniAPIStatus<Record<string, unknown>>], {
90
+ accountId: string;
91
+ accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets";
92
+ projectId: string;
93
+ period: TimePeriod;
94
+ error: ZeniAPIStatus<Record<string, unknown>>;
95
+ }, "transactionList/updateTransactionListByProjectFailure", never, never>, parallelFetchTransactionListByCategoryType: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionCategoryType: TransactionCategoryType, period: TimePeriod, cacheOverride?: any, minimumTransactionAmount?: Amount | undefined], {
73
96
  transactionCategoryType: TransactionCategoryType;
74
97
  period: TimePeriod;
75
98
  minimumTransactionAmount: Amount | undefined;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.updateLatestTransactionId = exports.clearTransactionList = exports.updateTransactionListUIStateByCategoryType = exports.updateTransactionsListByCategoryTypeFailure = exports.updateTransactionListByCategoryType = exports.fetchTransactionsListByCategoryType = exports.parallelFetchTransactionListByCategoryType = exports.updateTransactionListByClassFailure = exports.updateTransactionListByClassUIState = exports.updateTransactionListByClass = exports.fetchClassTransactionList = exports.parallelFetchClassTransactionList = exports.updateTransactionListByAccountUIState = exports.updateTransactionListByEntityFailure = exports.updateTransactionListByEntity = exports.fetchEntityTransactionList = exports.parallelFetchEntityTransactionList = exports.updateTransactionListByAccountFailure = exports.updateTransactionListByAccount = exports.fetchAccountTransactionList = exports.parallelFetchAccountTransactionList = exports.initialState = void 0;
4
+ exports.updateLatestTransactionId = exports.clearTransactionList = exports.updateTransactionListUIStateByCategoryType = exports.updateTransactionsListByCategoryTypeFailure = exports.updateTransactionListByCategoryType = exports.fetchTransactionsListByCategoryType = exports.parallelFetchTransactionListByCategoryType = exports.updateTransactionListByProjectFailure = exports.updateTransactionListByProjectUIState = exports.updateTransactionListByProject = exports.fetchProjectTransactionList = exports.parallelFetchProjectTransactionList = exports.updateTransactionListByClassFailure = exports.updateTransactionListByClassUIState = exports.updateTransactionListByClass = exports.fetchClassTransactionList = exports.parallelFetchClassTransactionList = exports.updateTransactionListByAccountUIState = exports.updateTransactionListByEntityFailure = exports.updateTransactionListByEntity = exports.fetchEntityTransactionList = exports.parallelFetchEntityTransactionList = exports.updateTransactionListByAccountFailure = exports.updateTransactionListByAccount = exports.fetchAccountTransactionList = exports.parallelFetchAccountTransactionList = exports.initialState = void 0;
5
5
  const toolkit_1 = require("@reduxjs/toolkit");
6
6
  const timePeriod_1 = require("../../commonStateTypes/timePeriod");
7
7
  const accountPayload_1 = require("../../entity/account/accountPayload");
@@ -41,6 +41,10 @@ exports.initialState = {
41
41
  transactionListByClassKey: {},
42
42
  transactionListUIStateByClassKey: {},
43
43
  },
44
+ byProject: {
45
+ transactionListByProjectKey: {},
46
+ transactionListUIStateByProjectKey: {},
47
+ },
44
48
  };
45
49
  const transactionList = (0, toolkit_1.createSlice)({
46
50
  name: 'transactionList',
@@ -250,6 +254,64 @@ const transactionList = (0, toolkit_1.createSlice)({
250
254
  return { payload: { accountId, accountType, classId, period, error } };
251
255
  },
252
256
  },
257
+ // Transaction list by project related reducers
258
+ //
259
+ // Mirrors the by-class set; the only behavioural difference is that the
260
+ // server query param is `zeni_project_id` (post-Ayon's accounting #3984
261
+ // rename) and there's no equivalent of `include_sub_class_transactions`
262
+ // — projects don't have a sub-project hierarchy in this layout yet.
263
+ parallelFetchProjectTransactionList: {
264
+ reducer() {
265
+ // Do nothing..
266
+ },
267
+ prepare(accountId, accountType, projectId, period, cacheOverride = false) {
268
+ return {
269
+ payload: { accountId, accountType, projectId, period, cacheOverride },
270
+ };
271
+ },
272
+ },
273
+ fetchProjectTransactionList: {
274
+ reducer(draft, action) {
275
+ const key = (0, transactionListState_1.getProjectAcTranKey)(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period);
276
+ if (action.payload.cacheOverride === true ||
277
+ draft.byProject.transactionListByProjectKey[key] == null ||
278
+ (draft.byProject.transactionListByProjectKey[key]?.hasValidState() ===
279
+ false &&
280
+ draft.byProject.transactionListByProjectKey[key]?.fetchState !=
281
+ 'In-Progress')) {
282
+ draft.byProject.transactionListByProjectKey[key] = {
283
+ ...transactionListState_1.initialProjectTransactionState,
284
+ fetchState: 'In-Progress',
285
+ error: undefined,
286
+ };
287
+ }
288
+ },
289
+ prepare(accountId, accountType, projectId, period, cacheOverride = false) {
290
+ return {
291
+ payload: { accountId, accountType, projectId, period, cacheOverride },
292
+ };
293
+ },
294
+ },
295
+ updateTransactionListByProject(draft, action) {
296
+ doUpdateTransactionListByProject(draft.byProject.transactionListByProjectKey, action.payload);
297
+ },
298
+ updateTransactionListByProjectUIState(draft, action) {
299
+ const key = (0, transactionListState_1.getProjectAcKey)(action.payload.accountId, action.payload.accountType, action.payload.projectId);
300
+ draft.byProject.transactionListUIStateByProjectKey[key] = Object.assign({}, draft.byProject.transactionListUIStateByProjectKey[key], action.payload.uiState);
301
+ },
302
+ updateTransactionListByProjectFailure: {
303
+ reducer(draft, action) {
304
+ const key = (0, transactionListState_1.getProjectAcTranKey)(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period);
305
+ draft.byProject.transactionListByProjectKey[key] = {
306
+ ...transactionListState_1.initialProjectTransactionState,
307
+ fetchState: 'Error',
308
+ error: action.payload.error,
309
+ };
310
+ },
311
+ prepare(accountId, accountType, projectId, period, error) {
312
+ return { payload: { accountId, accountType, projectId, period, error } };
313
+ },
314
+ },
253
315
  parallelFetchTransactionListByCategoryType: {
254
316
  reducer() {
255
317
  // Do nothing..
@@ -344,7 +406,7 @@ const transactionList = (0, toolkit_1.createSlice)({
344
406
  },
345
407
  },
346
408
  });
347
- _a = transactionList.actions, exports.parallelFetchAccountTransactionList = _a.parallelFetchAccountTransactionList, exports.fetchAccountTransactionList = _a.fetchAccountTransactionList, exports.updateTransactionListByAccount = _a.updateTransactionListByAccount, exports.updateTransactionListByAccountFailure = _a.updateTransactionListByAccountFailure, exports.parallelFetchEntityTransactionList = _a.parallelFetchEntityTransactionList, exports.fetchEntityTransactionList = _a.fetchEntityTransactionList, exports.updateTransactionListByEntity = _a.updateTransactionListByEntity, exports.updateTransactionListByEntityFailure = _a.updateTransactionListByEntityFailure, exports.updateTransactionListByAccountUIState = _a.updateTransactionListByAccountUIState, exports.parallelFetchClassTransactionList = _a.parallelFetchClassTransactionList, exports.fetchClassTransactionList = _a.fetchClassTransactionList, exports.updateTransactionListByClass = _a.updateTransactionListByClass, exports.updateTransactionListByClassUIState = _a.updateTransactionListByClassUIState, exports.updateTransactionListByClassFailure = _a.updateTransactionListByClassFailure, exports.parallelFetchTransactionListByCategoryType = _a.parallelFetchTransactionListByCategoryType, exports.fetchTransactionsListByCategoryType = _a.fetchTransactionsListByCategoryType, exports.updateTransactionListByCategoryType = _a.updateTransactionListByCategoryType, exports.updateTransactionsListByCategoryTypeFailure = _a.updateTransactionsListByCategoryTypeFailure, exports.updateTransactionListUIStateByCategoryType = _a.updateTransactionListUIStateByCategoryType, exports.clearTransactionList = _a.clearTransactionList, exports.updateLatestTransactionId = _a.updateLatestTransactionId;
409
+ _a = transactionList.actions, exports.parallelFetchAccountTransactionList = _a.parallelFetchAccountTransactionList, exports.fetchAccountTransactionList = _a.fetchAccountTransactionList, exports.updateTransactionListByAccount = _a.updateTransactionListByAccount, exports.updateTransactionListByAccountFailure = _a.updateTransactionListByAccountFailure, exports.parallelFetchEntityTransactionList = _a.parallelFetchEntityTransactionList, exports.fetchEntityTransactionList = _a.fetchEntityTransactionList, exports.updateTransactionListByEntity = _a.updateTransactionListByEntity, exports.updateTransactionListByEntityFailure = _a.updateTransactionListByEntityFailure, exports.updateTransactionListByAccountUIState = _a.updateTransactionListByAccountUIState, exports.parallelFetchClassTransactionList = _a.parallelFetchClassTransactionList, exports.fetchClassTransactionList = _a.fetchClassTransactionList, exports.updateTransactionListByClass = _a.updateTransactionListByClass, exports.updateTransactionListByClassUIState = _a.updateTransactionListByClassUIState, exports.updateTransactionListByClassFailure = _a.updateTransactionListByClassFailure, exports.parallelFetchProjectTransactionList = _a.parallelFetchProjectTransactionList, exports.fetchProjectTransactionList = _a.fetchProjectTransactionList, exports.updateTransactionListByProject = _a.updateTransactionListByProject, exports.updateTransactionListByProjectUIState = _a.updateTransactionListByProjectUIState, exports.updateTransactionListByProjectFailure = _a.updateTransactionListByProjectFailure, exports.parallelFetchTransactionListByCategoryType = _a.parallelFetchTransactionListByCategoryType, exports.fetchTransactionsListByCategoryType = _a.fetchTransactionsListByCategoryType, exports.updateTransactionListByCategoryType = _a.updateTransactionListByCategoryType, exports.updateTransactionsListByCategoryTypeFailure = _a.updateTransactionsListByCategoryTypeFailure, exports.updateTransactionListUIStateByCategoryType = _a.updateTransactionListUIStateByCategoryType, exports.clearTransactionList = _a.clearTransactionList, exports.updateLatestTransactionId = _a.updateLatestTransactionId;
348
410
  exports.default = transactionList.reducer;
349
411
  /**
350
412
  * Helper functions
@@ -394,3 +456,22 @@ function doUpdateTransactionListByClass(draft, payload) {
394
456
  transactionIDs,
395
457
  };
396
458
  }
459
+ function doUpdateTransactionListByProject(draft, payload) {
460
+ const transactionIDs = payload.account.transactions.map((transactionPaylod) => transactionPaylod.transaction_id);
461
+ const account = (0, accountPayload_1.mapAccountBasePayloadToAccountBase)(payload.account);
462
+ const projectId = payload.query.zeni_project_id;
463
+ const start = (0, timePeriod_1.toAbsoluteDay)(payload.query.start_date);
464
+ const end = (0, timePeriod_1.toAbsoluteDay)(payload.query.end_date);
465
+ const key = (0, transactionListState_1.getProjectAcTranKey)(account.accountId, account.accountType, projectId, {
466
+ start,
467
+ end,
468
+ });
469
+ draft[key] = {
470
+ ...transactionListState_1.initialProjectTransactionState,
471
+ fetchState: 'Completed',
472
+ error: undefined,
473
+ account: account,
474
+ projectId: projectId,
475
+ transactionIDs,
476
+ };
477
+ }