Skip to content

Commit

Permalink
feat: Track reports view events
Browse files Browse the repository at this point in the history
  • Loading branch information
abouolia committed Oct 26, 2024
1 parent 32ba6f9 commit cadf6b8
Show file tree
Hide file tree
Showing 18 changed files with 459 additions and 2 deletions.
18 changes: 18 additions & 0 deletions packages/server/src/constants/event-tracker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Original file line number Diff line number Diff line change
@@ -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: {},
});
};
}
2 changes: 2 additions & 0 deletions packages/server/src/services/EventsTracker/events/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -36,4 +37,5 @@ export const EventsTrackerListeners = [
PaymentMethodEventsTracker,
PaymentLinkEventsTracker,
StripeIntegrationEventsTracker,
ReportsEventsTracker,
];
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -15,6 +17,9 @@ export class APAgingSummaryService {
@Inject()
private APAgingSummaryMeta: APAgingSummaryMeta;

@Inject()
private eventPublisher: EventPublisher;

/**
* Default report query.
*/
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -15,6 +17,9 @@ export default class ARAgingSummaryService {
@Inject()
private ARAgingSummaryMeta: ARAgingSummaryMeta;

@Inject()
private eventPublisher: EventPublisher;

/**
* Default report query.
*/
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -21,6 +23,9 @@ export default class BalanceSheetStatementService
@Inject()
private balanceSheetMeta: BalanceSheetMetaInjectable;

@Inject()
private eventPublisher: EventPublisher;

/**
* Defaults balance sheet filter query.
* @return {IBalanceSheetQuery}
Expand Down Expand Up @@ -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,
Expand Down
Loading

0 comments on commit cadf6b8

Please sign in to comment.