diff --git a/packages/server/src/constants/event-tracker.ts b/packages/server/src/constants/event-tracker.ts index cb58d9349..bb578fcfc 100644 --- a/packages/server/src/constants/event-tracker.ts +++ b/packages/server/src/constants/event-tracker.ts @@ -54,6 +54,12 @@ export const TRANSACTIONS_LOCKING_PARTIALLY_UNLOCKED = export const TRANSACTIONS_LOCKING_PARTIALLY_UNLOCK_CANCELLED = 'Transactions locking partially unlock cancelled'; +export const BANK_TRANSACTION_MATCHED = 'Bank transaction matching deleted'; +export const BANK_TRANSACTION_EXCLUDED = 'Bank transaction excluded'; +export const BANK_TRANSACTION_CATEGORIZED = 'Bank transaction categorized'; +export const BANK_TRANSACTION_UNCATEGORIZED = 'Bank transaction uncategorized'; +export const BANK_ACCOUNT_DISCONNECTED = 'Bank account disconnected'; + export const ACCOUNT_GROUP = 'Account'; export const ITEM_GROUP = 'Item'; export const AUTH_GROUP = 'Auth'; @@ -61,3 +67,21 @@ export const SALE_GROUP = 'Sale'; export const PAYMENT_GROUP = 'Payment'; export const BILL_GROUP = 'Bill'; export const EXPENSE_GROUP = 'Expense'; + +export const MANUAL_JOURNAL_CREATED = 'Manual journal created'; +export const MANUAL_JOURNAL_EDITED = 'Manual journal edited'; +export const MANUAL_JOURNAL_DELETED = 'Manual journal deleted'; +export const MANUAL_JOURNAL_PUBLISHED = 'Manual journal published'; + +export const CUSTOMER_CREATED = 'Customer created'; +export const CUSTOMER_EDITED = 'Customer edited'; +export const CUSTOMER_DELETED = 'Customer deleted'; + +export const VENDOR_CREATED = 'Vendor created'; +export const VENDOR_EDITED = 'Vendor edited'; +export const VENDOR_DELETED = 'Vendor deleted'; + +export const BANK_RULE_CREATED = 'Bank rule created'; +export const BANK_RULE_EDITED = 'Bank rule edited'; +export const BANK_RULE_DELETED = 'Bank rule deleted'; + diff --git a/packages/server/src/interfaces/Contact.ts b/packages/server/src/interfaces/Contact.ts index 8ec125823..1b3b555ea 100644 --- a/packages/server/src/interfaces/Contact.ts +++ b/packages/server/src/interfaces/Contact.ts @@ -241,7 +241,7 @@ export interface ICustomerEventCreatingPayload { trx: Knex.Transaction; } export interface ICustomerEventEditedPayload { - tenantId: number; + tenantId: number customerId: number; customer: ICustomer; trx: Knex.Transaction; diff --git a/packages/server/src/services/Contacts/Customers/CRUD/EditCustomer.ts b/packages/server/src/services/Contacts/Customers/CRUD/EditCustomer.ts index 252a6023c..410eec884 100644 --- a/packages/server/src/services/Contacts/Customers/CRUD/EditCustomer.ts +++ b/packages/server/src/services/Contacts/Customers/CRUD/EditCustomer.ts @@ -65,6 +65,7 @@ export class EditCustomer { }); // Triggers `onCustomerEdited` event. await this.eventPublisher.emitAsync(events.customers.onEdited, { + tenantId, customerId, customer, trx, diff --git a/packages/server/src/services/EventsTracker/events/BankRuleEventsTracker.ts b/packages/server/src/services/EventsTracker/events/BankRuleEventsTracker.ts new file mode 100644 index 000000000..5b12e1d91 --- /dev/null +++ b/packages/server/src/services/EventsTracker/events/BankRuleEventsTracker.ts @@ -0,0 +1,68 @@ +import { Inject, Service } from 'typedi'; +import { EventSubscriber } from '@/lib/EventPublisher/EventPublisher'; +import { + IBankRuleEventCreatedPayload, + IBankRuleEventEditedPayload, + IBankRuleEventDeletedPayload, +} from '@/services/Banking/Rules/types'; // Updated import path for interfaces +import { PosthogService } from '../PostHog'; +import events from '@/subscribers/events'; +import { + BANK_RULE_CREATED, + BANK_RULE_EDITED, + BANK_RULE_DELETED, +} from '@/constants/event-tracker'; + +@Service() +export class BankRuleEventsTracker extends EventSubscriber { + @Inject() + private posthog: PosthogService; + + /** + * Constructor method. + */ + public attach(bus) { + bus.subscribe( + events.bankRules.onCreated, + this.handleTrackBankRuleCreatedEvent + ); + bus.subscribe( + events.bankRules.onEdited, + this.handleTrackEditedBankRuleEvent + ); + bus.subscribe( + events.bankRules.onDeleted, + this.handleTrackDeletedBankRuleEvent + ); + } + + private handleTrackBankRuleCreatedEvent = ({ + tenantId, + }: IBankRuleEventCreatedPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_RULE_CREATED, + properties: {}, + }); + }; + + private handleTrackEditedBankRuleEvent = ({ + tenantId, + }: IBankRuleEventEditedPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_RULE_EDITED, + properties: {}, + }); + }; + + private handleTrackDeletedBankRuleEvent = ({ + tenantId, + }: IBankRuleEventDeletedPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_RULE_DELETED, + properties: {}, + }); + }; +} diff --git a/packages/server/src/services/EventsTracker/events/BankTransactionEventsTracker.ts b/packages/server/src/services/EventsTracker/events/BankTransactionEventsTracker.ts new file mode 100644 index 000000000..f19615eb4 --- /dev/null +++ b/packages/server/src/services/EventsTracker/events/BankTransactionEventsTracker.ts @@ -0,0 +1,97 @@ +import { Inject, Service } from 'typedi'; +import { EventSubscriber } from '@/lib/EventPublisher/EventPublisher'; +import { PosthogService } from '../PostHog'; +import events from '@/subscribers/events'; +import { + BANK_TRANSACTION_MATCHED, + BANK_TRANSACTION_EXCLUDED, + BANK_TRANSACTION_CATEGORIZED, + BANK_TRANSACTION_UNCATEGORIZED, + BANK_ACCOUNT_DISCONNECTED, +} from '@/constants/event-tracker'; +import { IBankTransactionMatchedEventPayload } from '@/services/Banking/Matching/types'; +import { IBankAccountDisconnectedEventPayload } from '@/services/Banking/BankAccounts/types'; +import { + ICashflowTransactionCategorizedPayload, + ICashflowTransactionUncategorizedPayload, +} from '@/interfaces'; +import { IBankTransactionExcludedEventPayload } from '@/services/Banking/Exclude/_types'; + +@Service() +export class BankTransactionEventsTracker extends EventSubscriber { + @Inject() + private posthog: PosthogService; + + public attach(bus) { + bus.subscribe( + events.bankMatch.onMatched, + this.handleTrackBankTransactionMatchedEvent + ); + bus.subscribe( + events.bankTransactions.onExcluded, + this.handleTrackBankTransactionExcludedEvent + ); + bus.subscribe( + events.cashflow.onTransactionCategorized, + this.handleTrackBankTransactionCategorizedEvent + ); + bus.subscribe( + events.cashflow.onTransactionUncategorized, + this.handleTrackBankTransactionUncategorizedEvent + ); + bus.subscribe( + events.bankAccount.onDisconnected, + this.handleTrackBankAccountDisconnectedEvent + ); + } + + private handleTrackBankTransactionMatchedEvent = ({ + tenantId, + }: IBankTransactionMatchedEventPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_TRANSACTION_MATCHED, + properties: {}, + }); + }; + + private handleTrackBankTransactionExcludedEvent = ({ + tenantId, + }: IBankTransactionExcludedEventPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_TRANSACTION_EXCLUDED, + properties: {}, + }); + }; + + private handleTrackBankTransactionCategorizedEvent = ({ + tenantId, + }: ICashflowTransactionCategorizedPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_TRANSACTION_CATEGORIZED, + properties: {}, + }); + }; + + private handleTrackBankTransactionUncategorizedEvent = ({ + tenantId, + }: ICashflowTransactionUncategorizedPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_TRANSACTION_UNCATEGORIZED, + properties: {}, + }); + }; + + private handleTrackBankAccountDisconnectedEvent = ({ + tenantId, + }: IBankAccountDisconnectedEventPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: BANK_ACCOUNT_DISCONNECTED, + properties: {}, + }); + }; +} diff --git a/packages/server/src/services/EventsTracker/events/ManualJournalEventsTracker.ts b/packages/server/src/services/EventsTracker/events/ManualJournalEventsTracker.ts new file mode 100644 index 000000000..119553b88 --- /dev/null +++ b/packages/server/src/services/EventsTracker/events/ManualJournalEventsTracker.ts @@ -0,0 +1,68 @@ +import { Inject, Service } from 'typedi'; +import { EventSubscriber } from '@/lib/EventPublisher/EventPublisher'; +import { + IManualJournalEventCreatedPayload, + IManualJournalEventEditedPayload, + IManualJournalEventDeletedPayload, +} from '@/interfaces'; +import { PosthogService } from '../PostHog'; +import events from '@/subscribers/events'; +import { + MANUAL_JOURNAL_CREATED, + MANUAL_JOURNAL_EDITED, + MANUAL_JOURNAL_DELETED, +} from '@/constants/event-tracker'; + +@Service() +export class ManualJournalEventsTracker extends EventSubscriber { + @Inject() + private posthog: PosthogService; + + /** + * Constructor method. + */ + public attach(bus) { + bus.subscribe( + events.manualJournals.onCreated, + this.handleTrackManualJournalCreatedEvent + ); + bus.subscribe( + events.manualJournals.onEdited, + this.handleTrackEditedManualJournalEvent + ); + bus.subscribe( + events.manualJournals.onDeleted, + this.handleTrackDeletedManualJournalEvent + ); + } + + private handleTrackManualJournalCreatedEvent = ({ + tenantId, + }: IManualJournalEventCreatedPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: MANUAL_JOURNAL_CREATED, + properties: {}, + }); + }; + + private handleTrackEditedManualJournalEvent = ({ + tenantId, + }: IManualJournalEventEditedPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: MANUAL_JOURNAL_EDITED, + properties: {}, + }); + }; + + private handleTrackDeletedManualJournalEvent = ({ + tenantId, + }: IManualJournalEventDeletedPayload) => { + this.posthog.trackEvent({ + distinctId: `tenant-${tenantId}`, + event: MANUAL_JOURNAL_DELETED, + properties: {}, + }); + }; +} diff --git a/packages/server/src/services/EventsTracker/events/events.ts b/packages/server/src/services/EventsTracker/events/events.ts index 8f1b9c54f..10d13dcef 100644 --- a/packages/server/src/services/EventsTracker/events/events.ts +++ b/packages/server/src/services/EventsTracker/events/events.ts @@ -7,6 +7,11 @@ import { ExpenseEventsTracker } from './ExpenseEventsTracker'; import { AccountEventsTracker } from './AccountEventsTracker'; import { AuthenticationEventsTracker } from './AuthenticationEventsTracker'; import { ItemEventsTracker } from './ItemEventsTracker'; +import { BankTransactionEventsTracker } from './BankTransactionEventsTracker'; +import { CustomerEventsTracker } from './CustomerEventsTracker'; +import { VendorEventsTracker } from './VendorEventsTracker'; +import { ManualJournalEventsTracker } from './ManualJournalEventsTracker'; +import { BankRuleEventsTracker } from './BankRuleEventsTracker'; export const EventsTrackerListeners = [ SaleInvoiceEventsTracker, @@ -17,5 +22,10 @@ export const EventsTrackerListeners = [ AccountEventsTracker, ExpenseEventsTracker, AuthenticationEventsTracker, - ItemEventsTracker + ItemEventsTracker, + BankTransactionEventsTracker, + CustomerEventsTracker, + VendorEventsTracker, + ManualJournalEventsTracker, + BankRuleEventsTracker, ];