From cadf6b81a095f16321f6649a58abcc7e66162017 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Sat, 26 Oct 2024 12:39:48 +0200 Subject: [PATCH] feat: Track reports view events --- .../server/src/constants/event-tracker.ts | 18 ++ .../events/ReportsEventsTracker.ts | 240 ++++++++++++++++++ .../services/EventsTracker/events/events.ts | 2 + .../AgingSummary/APAgingSummaryService.ts | 11 + .../AgingSummary/ARAgingSummaryService.ts | 14 + .../BalanceSheet/BalanceSheetInjectable.ts | 9 + .../CustomerBalanceSummaryService.ts | 14 + .../GeneralLedger/GeneralLedgerService.ts | 10 + .../InventoryValuationSheetService.ts | 14 + .../JournalSheet/JournalSheetService.ts | 11 + .../ProfitLossSheet/ProfitLossSheetService.ts | 14 + .../PurchasesByItemsService.ts | 14 + .../SalesByItems/SalesByItemsService.ts | 11 + .../TransactionsByCustomersService.ts | 14 + .../TransactionsByVendorInjectable.ts | 14 + .../TrialBalanceSheetInjectable.ts | 14 + .../VendorBalanceSummaryService.ts | 18 +- packages/server/src/subscribers/events.ts | 19 ++ 18 files changed, 459 insertions(+), 2 deletions(-) create mode 100644 packages/server/src/services/EventsTracker/events/ReportsEventsTracker.ts diff --git a/packages/server/src/constants/event-tracker.ts b/packages/server/src/constants/event-tracker.ts index d7f9d4d811..dbca8017e5 100644 --- a/packages/server/src/constants/event-tracker.ts +++ b/packages/server/src/constants/event-tracker.ts @@ -103,3 +103,21 @@ export const SALE_GROUP = 'Sale'; export const PAYMENT_GROUP = 'Payment'; export const BILL_GROUP = 'Bill'; export const EXPENSE_GROUP = 'Expense'; + +// # Reports +export const BALANCE_SHEET_VIEWED = 'Balance sheet viewed'; +export const TRIAL_BALANCE_SHEET_VIEWED = 'Trial balance sheet viewed'; +export const PROFIT_LOSS_SHEET_VIEWED = 'Profit loss sheet viewed'; +export const CASHFLOW_STATEMENT_VIEWED = 'Cashflow statement viewed'; +export const GENERAL_LEDGER_VIEWED = 'General ledger viewed'; +export const JOURNAL_VIEWED = 'Journal viewed'; +export const RECEIVABLE_AGING_VIEWED = 'Receivable aging viewed'; +export const PAYABLE_AGING_VIEWED = 'Payable aging viewed'; +export const CUSTOMER_BALANCE_SUMMARY_VIEWED = + 'Customer balance summary viewed'; +export const VENDOR_BALANCE_SUMMARY_VIEWED = 'Vendor balance summary viewed'; +export const INVENTORY_VALUATION_VIEWED = 'Inventory valuation viewed'; +export const CUSTOMER_TRANSACTIONS_VIEWED = 'Customer transactions viewed'; +export const VENDOR_TRANSACTIONS_VIEWED = 'Vendor transactions viewed'; +export const SALES_BY_ITEM_VIEWED = 'Sales by item viewed'; +export const PURCHASES_BY_ITEM_VIEWED = 'Purchases by item viewed'; diff --git a/packages/server/src/services/EventsTracker/events/ReportsEventsTracker.ts b/packages/server/src/services/EventsTracker/events/ReportsEventsTracker.ts new file mode 100644 index 0000000000..4a3b857d11 --- /dev/null +++ b/packages/server/src/services/EventsTracker/events/ReportsEventsTracker.ts @@ -0,0 +1,240 @@ +import { Inject, Service } from 'typedi'; +import { EventSubscriber } from '@/lib/EventPublisher/EventPublisher'; +import { ReportsEvents } from '@/constants/event-tracker'; +import { PosthogService } from '../PostHog'; +import events from '@/subscribers/events'; +import { + BALANCE_SHEET_VIEWED, + TRIAL_BALANCE_SHEET_VIEWED, + PROFIT_LOSS_SHEET_VIEWED, + CASHFLOW_STATEMENT_VIEWED, + GENERAL_LEDGER_VIEWED, + JOURNAL_VIEWED, + RECEIVABLE_AGING_VIEWED, + PAYABLE_AGING_VIEWED, + CUSTOMER_BALANCE_SUMMARY_VIEWED, + VENDOR_BALANCE_SUMMARY_VIEWED, + INVENTORY_VALUATION_VIEWED, + CUSTOMER_TRANSACTIONS_VIEWED, + VENDOR_TRANSACTIONS_VIEWED, + SALES_BY_ITEM_VIEWED, + PURCHASES_BY_ITEM_VIEWED, +} from '@/constants/event-tracker'; + +@Service() +export class ReportsEventsTracker extends EventSubscriber { + @Inject() + private posthog: PosthogService; + + /** + * Constructor method. + */ + public attach(bus) { + bus.subscribe( + events.reports.onBalanceSheetViewed, + this.handleTrackBalanceSheetViewedEvent + ); + bus.subscribe( + events.reports.onTrialBalanceSheetView, + this.handleTrackTrialBalanceSheetViewedEvent + ); + bus.subscribe( + events.reports.onProfitLossSheetViewed, + this.handleTrackProfitLossSheetViewedEvent + ); + bus.subscribe( + events.reports.onCashflowStatementViewed, + this.handleTrackCashflowStatementViewedEvent + ); + bus.subscribe( + events.reports.onGeneralLedgerViewed, + this.handleTrackGeneralLedgerViewedEvent + ); + bus.subscribe( + events.reports.onJournalViewed, + this.handleTrackJournalViewedEvent + ); + bus.subscribe( + events.reports.onReceivableAgingViewed, + this.handleTrackReceivableAgingViewedEvent + ); + bus.subscribe( + events.reports.onPayableAgingViewed, + this.handleTrackPayableAgingViewedEvent + ); + bus.subscribe( + events.reports.onCustomerBalanceSummaryViewed, + this.handleTrackCustomerBalanceSummaryViewedEvent + ); + bus.subscribe( + events.reports.onVendorBalanceSummaryViewed, + this.handleTrackVendorBalanceSummaryViewedEvent + ); + bus.subscribe( + events.reports.onInventoryValuationViewed, + this.handleTrackInventoryValuationViewedEvent + ); + bus.subscribe( + events.reports.onCustomerTransactionsViewed, + this.handleTrackCustomerTransactionsViewedEvent + ); + bus.subscribe( + events.reports.onVendorTransactionsViewed, + this.handleTrackVendorTransactionsViewedEvent + ); + bus.subscribe( + events.reports.onSalesByItemViewed, + this.handleTrackSalesByItemViewedEvent + ); + bus.subscribe( + events.reports.onPurchasesByItemViewed, + this.handleTrackPurchasesByItemViewedEvent + ); + } + + private handleTrackBalanceSheetViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BALANCE_SHEET_VIEWED, + properties: {}, + }); + }; + + private handleTrackTrialBalanceSheetViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: TRIAL_BALANCE_SHEET_VIEWED, + properties: {}, + }); + }; + + private handleTrackProfitLossSheetViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: PROFIT_LOSS_SHEET_VIEWED, + properties: {}, + }); + }; + + private handleTrackCashflowStatementViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: CASHFLOW_STATEMENT_VIEWED, + properties: {}, + }); + }; + + private handleTrackGeneralLedgerViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: GENERAL_LEDGER_VIEWED, + properties: {}, + }); + }; + + private handleTrackJournalViewedEvent = ({ tenantId }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: JOURNAL_VIEWED, + properties: {}, + }); + }; + + private handleTrackReceivableAgingViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: RECEIVABLE_AGING_VIEWED, + properties: {}, + }); + }; + + private handleTrackPayableAgingViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: PAYABLE_AGING_VIEWED, + properties: {}, + }); + }; + + private handleTrackCustomerBalanceSummaryViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: CUSTOMER_BALANCE_SUMMARY_VIEWED, + properties: {}, + }); + }; + + private handleTrackVendorBalanceSummaryViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: VENDOR_BALANCE_SUMMARY_VIEWED, + properties: {}, + }); + }; + + private handleTrackInventoryValuationViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: INVENTORY_VALUATION_VIEWED, + properties: {}, + }); + }; + + private handleTrackCustomerTransactionsViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: CUSTOMER_TRANSACTIONS_VIEWED, + properties: {}, + }); + }; + + private handleTrackVendorTransactionsViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: VENDOR_TRANSACTIONS_VIEWED, + properties: {}, + }); + }; + + private handleTrackSalesByItemViewedEvent = ({ tenantId }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: SALES_BY_ITEM_VIEWED, + properties: {}, + }); + }; + + private handleTrackPurchasesByItemViewedEvent = ({ + tenantId, + }: ReportsEvents) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: PURCHASES_BY_ITEM_VIEWED, + properties: {}, + }); + }; +} diff --git a/packages/server/src/services/EventsTracker/events/events.ts b/packages/server/src/services/EventsTracker/events/events.ts index 89714f02d4..9e23d18a78 100644 --- a/packages/server/src/services/EventsTracker/events/events.ts +++ b/packages/server/src/services/EventsTracker/events/events.ts @@ -16,6 +16,7 @@ import { PdfTemplateEventsTracker } from './PdfTemplateEventsTracker'; import { PaymentMethodEventsTracker } from './PaymentMethodEventsTracker'; import { PaymentLinkEventsTracker } from './PaymentLinkEventsTracker'; import { StripeIntegrationEventsTracker } from './StripeIntegrationEventsTracker'; +import { ReportsEventsTracker } from './ReportsEventsTracker'; export const EventsTrackerListeners = [ SaleInvoiceEventsTracker, @@ -36,4 +37,5 @@ export const EventsTrackerListeners = [ PaymentMethodEventsTracker, PaymentLinkEventsTracker, StripeIntegrationEventsTracker, + ReportsEventsTracker, ]; diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts index 49ee464484..17f60c59b1 100644 --- a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts +++ b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts @@ -6,6 +6,8 @@ import TenancyService from '@/services/Tenancy/TenancyService'; import APAgingSummarySheet from './APAgingSummarySheet'; import { Tenant } from '@/system/models'; import { APAgingSummaryMeta } from './APAgingSummaryMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Service() export class APAgingSummaryService { @@ -15,6 +17,9 @@ export class APAgingSummaryService { @Inject() private APAgingSummaryMeta: APAgingSummaryMeta; + @Inject() + private eventPublisher: EventPublisher; + /** * Default report query. */ @@ -96,6 +101,12 @@ export class APAgingSummaryService { // Retrieve the aging summary report meta. const meta = await this.APAgingSummaryMeta.meta(tenantId, filter); + // Triggers `onPayableAgingViewed` event. + await this.eventPublisher.emitAsync(events.reports.onPayableAgingViewed, { + tenantId, + query, + }); + return { data, columns, diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts index d52709027c..aa9a3cd9a1 100644 --- a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts +++ b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts @@ -6,6 +6,8 @@ import TenancyService from '@/services/Tenancy/TenancyService'; import ARAgingSummarySheet from './ARAgingSummarySheet'; import { Tenant } from '@/system/models'; import { ARAgingSummaryMeta } from './ARAgingSummaryMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Service() export default class ARAgingSummaryService { @@ -15,6 +17,9 @@ export default class ARAgingSummaryService { @Inject() private ARAgingSummaryMeta: ARAgingSummaryMeta; + @Inject() + private eventPublisher: EventPublisher; + /** * Default report query. */ @@ -91,6 +96,15 @@ export default class ARAgingSummaryService { // Retrieve the aging summary report meta. const meta = await this.ARAgingSummaryMeta.meta(tenantId, filter); + // Triggers `onReceivableAgingViewed` event. + await this.eventPublisher.emitAsync( + events.reports.onReceivableAgingViewed, + { + tenantId, + query, + } + ); + return { data, columns, diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts index 5e171110bb..1e5b845d64 100644 --- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts +++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts @@ -10,6 +10,8 @@ import BalanceSheetStatement from './BalanceSheet'; import { Tenant } from '@/system/models'; import BalanceSheetRepository from './BalanceSheetRepository'; import { BalanceSheetMetaInjectable } from './BalanceSheetMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Service() export default class BalanceSheetStatementService @@ -21,6 +23,9 @@ export default class BalanceSheetStatementService @Inject() private balanceSheetMeta: BalanceSheetMetaInjectable; + @Inject() + private eventPublisher: EventPublisher; + /** * Defaults balance sheet filter query. * @return {IBalanceSheetQuery} @@ -98,6 +103,10 @@ export default class BalanceSheetStatementService // Balance sheet meta. const meta = await this.balanceSheetMeta.meta(tenantId, filter); + // Triggers `onBalanceSheetViewed` event. + await this.eventPublisher.emitAsync(events.reports.onBalanceSheetViewed, { + query, + }); return { query: filter, data, diff --git a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts index 38edc5174a..a5636594b6 100644 --- a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts +++ b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts @@ -13,6 +13,8 @@ import Ledger from '@/services/Accounting/Ledger'; import CustomerBalanceSummaryRepository from './CustomerBalanceSummaryRepository'; import { Tenant } from '@/system/models'; import { CustomerBalanceSummaryMeta } from './CustomerBalanceSummaryMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Service() export class CustomerBalanceSummaryService @@ -24,6 +26,9 @@ export class CustomerBalanceSummaryService @Inject() private customerBalanceSummaryMeta: CustomerBalanceSummaryMeta; + @Inject() + private eventPublisher: EventPublisher; + /** * Defaults balance sheet filter query. * @return {ICustomerBalanceSummaryQuery} @@ -104,6 +109,15 @@ export class CustomerBalanceSummaryService // Retrieve the customer balance summary meta. const meta = await this.customerBalanceSummaryMeta.meta(tenantId, filter); + // Triggers `onCustomerBalanceSummaryViewed` event. + await this.eventPublisher.emitAsync( + events.reports.onCustomerBalanceSummaryViewed, + { + tenant, + query, + } + ); + return { data: report.reportData(), query: filter, diff --git a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts index 54066b3454..a614c2cf57 100644 --- a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts +++ b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts @@ -5,6 +5,8 @@ import TenancyService from '@/services/Tenancy/TenancyService'; import GeneralLedgerSheet from '@/services/FinancialStatements/GeneralLedger/GeneralLedger'; import { GeneralLedgerMeta } from './GeneralLedgerMeta'; import { GeneralLedgerRepository } from './GeneralLedgerRepository'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Service() export class GeneralLedgerService { @@ -14,6 +16,9 @@ export class GeneralLedgerService { @Inject() private generalLedgerMeta: GeneralLedgerMeta; + @Inject() + private eventPublisher: EventPublisher; + /** * Defaults general ledger report filter query. * @return {IBalanceSheetQuery} @@ -72,6 +77,11 @@ export class GeneralLedgerService { // Retrieve general ledger report metadata. const meta = await this.generalLedgerMeta.meta(tenantId, filter); + // Triggers `onGeneralLedgerViewed` event. + await this.eventPublisher.emitAsync(events.reports.onGeneralLedgerViewed, { + tenantId, + }); + return { data: reportData, query: filter, diff --git a/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetService.ts b/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetService.ts index 4da85b21d8..89a38f49e3 100644 --- a/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetService.ts +++ b/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetService.ts @@ -11,6 +11,8 @@ import { InventoryValuationSheet } from './InventoryValuationSheet'; import InventoryService from '@/services/Inventory/Inventory'; import { Tenant } from '@/system/models'; import { InventoryValuationMetaInjectable } from './InventoryValuationSheetMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Service() export class InventoryValuationSheetService { @@ -26,6 +28,9 @@ export class InventoryValuationSheetService { @Inject() private inventoryValuationMeta: InventoryValuationMetaInjectable; + @Inject() + private eventPublisher: EventPublisher; + /** * Defaults balance sheet filter query. * @return {IBalanceSheetQuery} @@ -116,6 +121,15 @@ export class InventoryValuationSheetService { // Retrieves the inventorty valuation meta. const meta = await this.inventoryValuationMeta.meta(tenantId, filter); + // Triggers `onInventoryValuationViewed` event. + await this.eventPublisher.emitAsync( + events.reports.onInventoryValuationViewed, + { + tenantId, + query, + } + ); + return { data: inventoryValuationData, query: filter, diff --git a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts index 90027c3a19..f9d23bba65 100644 --- a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts +++ b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts @@ -7,6 +7,8 @@ import Journal from '@/services/Accounting/JournalPoster'; import { Tenant } from '@/system/models'; import { transformToMap } from 'utils'; import { JournalSheetMeta } from './JournalSheetMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Service() export class JournalSheetService { @@ -16,6 +18,9 @@ export class JournalSheetService { @Inject() private journalSheetMeta: JournalSheetMeta; + @Inject() + private eventPublisher: EventPublisher; + /** * Default journal sheet filter queyr. */ @@ -101,6 +106,12 @@ export class JournalSheetService { // Retrieve the journal sheet meta. const meta = await this.journalSheetMeta.meta(tenantId, filter); + // Triggers `onJournalViewed` event. + await this.eventPublisher.emitAsync(events.reports.onJournalViewed, { + tenantId, + query, + }); + return { data: journalSheetData, query: filter, diff --git a/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService.ts b/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService.ts index f3b24e7a6c..edfb627f68 100644 --- a/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService.ts +++ b/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService.ts @@ -10,6 +10,8 @@ import { Tenant } from '@/system/models'; import { mergeQueryWithDefaults } from './utils'; import { ProfitLossSheetRepository } from './ProfitLossSheetRepository'; import { ProfitLossSheetMeta } from './ProfitLossSheetMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; // Profit/Loss sheet service. @Service() @@ -20,6 +22,9 @@ export default class ProfitLossSheetService { @Inject() private profitLossSheetMeta: ProfitLossSheetMeta; + @Inject() + private eventPublisher: EventPublisher; + /** * Retrieve profit/loss sheet statement. * @param {number} tenantId @@ -62,6 +67,15 @@ export default class ProfitLossSheetService { // Retrieve the profit/loss sheet meta. const meta = await this.profitLossSheetMeta.meta(tenantId, filter); + // Triggers `onProfitLossSheetViewed` event. + await this.eventPublisher.emitAsync( + events.reports.onProfitLossSheetViewed, + { + tenantId, + query, + } + ); + return { query: filter, data, diff --git a/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsService.ts b/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsService.ts index a2d6240cbf..5def568cd7 100644 --- a/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsService.ts +++ b/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsService.ts @@ -8,6 +8,8 @@ import { IPurchasesByItemsSheet, } from '@/interfaces/PurchasesByItemsSheet'; import { PurchasesByItemsMeta } from './PurchasesByItemsMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Service() export class PurchasesByItemsService { @@ -17,6 +19,9 @@ export class PurchasesByItemsService { @Inject() private purchasesByItemsMeta: PurchasesByItemsMeta; + @Inject() + private eventPublisher: EventPublisher; + /** * Defaults purchases by items filter query. * @return {IPurchasesByItemsReportQuery} @@ -92,6 +97,15 @@ export class PurchasesByItemsService { // Retrieve the purchases by items meta. const meta = await this.purchasesByItemsMeta.meta(tenantId, query); + // Triggers `onPurchasesByItemViewed` event. + await this.eventPublisher.emitAsync( + events.reports.onPurchasesByItemViewed, + { + tenantId, + query, + } + ); + return { data: purchasesByItemsData, query: filter, diff --git a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts index 1dc9b4f055..a4cb25e095 100644 --- a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts +++ b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts @@ -5,6 +5,8 @@ import TenancyService from '@/services/Tenancy/TenancyService'; import SalesByItems from './SalesByItems'; import { Tenant } from '@/system/models'; import { SalesByItemsMeta } from './SalesByItemsMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Service() export class SalesByItemsReportService { @@ -14,6 +16,9 @@ export class SalesByItemsReportService { @Inject() private salesByItemsMeta: SalesByItemsMeta; + @Inject() + private eventPublisher: EventPublisher; + /** * Defaults balance sheet filter query. * @return {IBalanceSheetQuery} @@ -89,6 +94,12 @@ export class SalesByItemsReportService { // Retrieve the sales by items meta. const meta = await this.salesByItemsMeta.meta(tenantId, query); + // Triggers `onSalesByItemViewed` event. + await this.eventPublisher.emitAsync(events.reports.onSalesByItemViewed, { + tenantId, + query, + }); + return { data: salesByItemsData, query: filter, diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts index a97a13afe8..e30c9bc18d 100644 --- a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts +++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts @@ -13,6 +13,8 @@ import Ledger from '@/services/Accounting/Ledger'; import TransactionsByCustomersRepository from './TransactionsByCustomersRepository'; import { Tenant } from '@/system/models'; import { TransactionsByCustomersMeta } from './TransactionsByCustomersMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; export class TransactionsByCustomersSheet implements ITransactionsByCustomersService @@ -26,6 +28,9 @@ export class TransactionsByCustomersSheet @Inject() private transactionsByCustomersMeta: TransactionsByCustomersMeta; + @Inject() + private eventPublisher: EventPublisher; + /** * Defaults balance sheet filter query. * @return {ICustomerBalanceSummaryQuery} @@ -166,6 +171,15 @@ export class TransactionsByCustomersSheet const meta = await this.transactionsByCustomersMeta.meta(tenantId, filter); + // Triggers `onCustomerTransactionsViewed` event. + await this.eventPublisher.emitAsync( + events.reports.onCustomerTransactionsViewed, + { + tenantId, + query, + } + ); + return { data: reportInstance.reportData(), query: filter, diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts index 69b4249576..165ff4eddd 100644 --- a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts +++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts @@ -13,6 +13,8 @@ import Ledger from '@/services/Accounting/Ledger'; import TransactionsByVendorRepository from './TransactionsByVendorRepository'; import { Tenant } from '@/system/models'; import { TransactionsByVendorMeta } from './TransactionsByVendorMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; export class TransactionsByVendorsInjectable implements ITransactionsByVendorsService @@ -26,6 +28,9 @@ export class TransactionsByVendorsInjectable @Inject() private transactionsByVendorMeta: TransactionsByVendorMeta; + @Inject() + private eventPublisher: EventPublisher; + /** * Defaults balance sheet filter query. * @return {IVendorBalanceSummaryQuery} @@ -171,6 +176,15 @@ export class TransactionsByVendorsInjectable ); const meta = await this.transactionsByVendorMeta.meta(tenantId, filter); + // Triggers `onVendorTransactionsViewed` event. + await this.eventPublisher.emitAsync( + events.reports.onVendorTransactionsViewed, + { + tenantId, + query, + } + ); + return { data: reportInstance.reportData(), query: filter, diff --git a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetInjectable.ts b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetInjectable.ts index df498241bc..c33e80fd4b 100644 --- a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetInjectable.ts +++ b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetInjectable.ts @@ -7,6 +7,8 @@ import FinancialSheet from '../FinancialSheet'; import { Tenant } from '@/system/models'; import { TrialBalanceSheetRepository } from './TrialBalanceSheetRepository'; import { TrialBalanceSheetMeta } from './TrialBalanceSheetMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; @Service() export default class TrialBalanceSheetService extends FinancialSheet { @@ -16,6 +18,9 @@ export default class TrialBalanceSheetService extends FinancialSheet { @Inject() private trialBalanceSheetMetaService: TrialBalanceSheetMeta; + @Inject() + private eventPublisher: EventPublisher; + /** * Defaults trial balance sheet filter query. * @return {IBalanceSheetQuery} @@ -81,6 +86,15 @@ export default class TrialBalanceSheetService extends FinancialSheet { // Trial balance sheet meta. const meta = await this.trialBalanceSheetMetaService.meta(tenantId, filter); + // Triggers `onTrialBalanceSheetViewed` event. + await this.eventPublisher.emitAsync( + events.reports.onTrialBalanceSheetView, + { + tenantId, + query, + } + ); + return { data: trialBalanceSheetData, query: filter, diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts index c64496b7bb..41b63749e2 100644 --- a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts +++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts @@ -15,6 +15,8 @@ import { Tenant } from '@/system/models'; import { JournalSheetMeta } from '../JournalSheet/JournalSheetMeta'; import { VendorBalanceSummaryMeta } from './VendorBalanceSummaryMeta'; +import { EventPublisher } from '@/lib/EventPublisher/EventPublisher'; +import events from '@/subscribers/events'; export class VendorBalanceSummaryService implements IVendorBalanceSummaryService @@ -28,6 +30,9 @@ export class VendorBalanceSummaryService @Inject() private vendorBalanceSummaryMeta: VendorBalanceSummaryMeta; + @Inject() + private eventPublisher: EventPublisher; + /** * Defaults balance sheet filter query. * @return {IVendorBalanceSummaryQuery} @@ -49,7 +54,7 @@ export class VendorBalanceSummaryService } /** - * + * * Retrieve the vendors ledger entrjes. * @param {number} tenantId - * @param {Date|string} date - @@ -107,10 +112,19 @@ export class VendorBalanceSummaryService // Retrieve the vendor balance summary meta. const meta = await this.vendorBalanceSummaryMeta.meta(tenantId, filter); + // Triggers `onVendorBalanceSummaryViewed` event. + await this.eventPublisher.emitAsync( + events.reports.onVendorBalanceSummaryViewed, + { + tenantId, + query, + } + ); + return { data: reportInstance.reportData(), query: filter, - meta + meta, }; } } diff --git a/packages/server/src/subscribers/events.ts b/packages/server/src/subscribers/events.ts index bd3833b9ba..d735dd1a91 100644 --- a/packages/server/src/subscribers/events.ts +++ b/packages/server/src/subscribers/events.ts @@ -752,4 +752,23 @@ export default { onCheckoutSessionCompleted: 'onStripeCheckoutSessionCompleted', onAccountUpdated: 'onStripeAccountUpdated', }, + + // Reports + reports: { + onBalanceSheetViewed: 'onBalanceSheetViewed', + onTrialBalanceSheetView: 'onTrialBalanceSheetViewed', + onProfitLossSheetViewed: 'onProfitLossSheetViewed', + onCashflowStatementViewed: 'onCashflowStatementViewed', + onGeneralLedgerViewed: 'onGeneralLedgerViewed', + onJournalViewed: 'onJounralViewed', + onReceivableAgingViewed: 'onReceivableAgingViewed', + onPayableAgingViewed: 'onPayableAgingViewed', + onCustomerBalanceSummaryViewed: 'onInventoryValuationViewed', + onVendorBalanceSummaryViewed: 'onVendorBalanceSummaryViewed', + onInventoryValuationViewed: 'onCustomerBalanceSummaryViewed', + onCustomerTransactionsViewed: 'onCustomerTransactionsViewed', + onVendorTransactionsViewed: 'onVendorTransactionsViewed', + onSalesByItemViewed: 'onSalesByItemViewed', + onPurchasesByItemViewed: 'onPurchasesByItemViewed', + }, };