Merge pull request #721 from bigcapitalhq/track-move-events

feat: track more services events
This commit is contained in:
Ahmed Bouhuolia
2024-10-26 12:40:30 +02:00
committed by GitHub
25 changed files with 530 additions and 23 deletions

View File

@@ -9,6 +9,7 @@ export const SALE_ESTIMATE_CREATED = 'Sale estimate created';
export const SALE_ESTIMATE_EDITED = 'Sale estimate edited';
export const SALE_ESTIMATE_DELETED = 'Sale estimate deleted';
export const SALE_ESTIMATE_PDF_VIEWED = 'Sale estimate PDF viewed';
export const SALE_ESTIMATE_VIEWED = 'Sale estimate viewed';
export const PAYMENT_RECEIVED_CREATED = 'Payment received created';
export const PAYMENT_RECEIVED_EDITED = 'payment received edited';
@@ -47,6 +48,8 @@ export const AUTH_RESET_PASSWORD = 'Auth reset password';
export const SUBSCRIPTION_CANCELLED = 'Subscription cancelled';
export const SUBSCRIPTION_RESUMED = 'Subscription resumed';
export const SUBSCRIPTION_PLAN_CHANGED = 'Subscription plan changed';
export const SUBSCRIPTION_PAYMENT_SUCCEED = 'Subscription payment succeed';
export const SUBSCRIPTION_PAYMENT_FAILED = 'Subscription payment failed';
export const CUSTOMER_CREATED = 'Customer created';
export const CUSTOMER_EDITED = 'Customer edited';
@@ -100,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';

View File

@@ -1,5 +1,4 @@
import { Service, Inject } from 'typedi';
import I18nService from '@/services/I18n/I18nService';
import HasTenancyService from '@/services/Tenancy/TenancyService';
import { AccountTransformer } from './AccountTransform';
import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable';
@@ -11,9 +10,6 @@ export class GetAccount {
@Inject()
private tenancy: HasTenancyService;
@Inject()
private i18nService: I18nService;
@Inject()
private transformer: TransformerInjectable;
@@ -44,10 +40,8 @@ export class GetAccount {
new AccountTransformer(),
{ accountsGraph }
);
const eventPayload = {
tenantId,
accountId,
};
const eventPayload = { tenantId, accountId };
// Triggers `onAccountViewed` event.
await this.eventPublisher.emitAsync(events.accounts.onViewed, eventPayload);

View File

@@ -122,6 +122,7 @@ export default class NewCashflowTransactionService {
* @param {number} tenantId -
* @param {ICashflowOwnerContributionDTO} ownerContributionDTO
* @param {number} userId - User id.
* @returns {Promise<ICashflowTransaction>}
*/
public newCashflowTransaction = async (
tenantId: number,

View File

@@ -1,7 +1,6 @@
import Knex from 'knex';
import { IRefundCreditNote } from '@/interfaces';
import HasTenancyService from '@/services/Tenancy/TenancyService';
import { Knex } from 'knex';
import { Inject, Service } from 'typedi';
import HasTenancyService from '@/services/Tenancy/TenancyService';
@Service()
export default class RefundSyncCreditNoteBalance {

View File

@@ -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: {},
});
};
}

View File

@@ -12,6 +12,7 @@ import {
SALE_ESTIMATE_EDITED,
SALE_ESTIMATE_DELETED,
SALE_ESTIMATE_PDF_VIEWED,
SALE_ESTIMATE_VIEWED,
} from '@/constants/event-tracker';
@Service()
@@ -39,6 +40,10 @@ export class SaleEstimateEventsTracker extends EventSubscriber {
events.saleEstimate.onPdfViewed,
this.handleTrackPdfViewedEstimateEvent
);
bus.subscribe(
events.saleEstimate.onViewed,
this.handleTrackViewedEstimateEvent
);
}
private handleTrackEstimateCreatedEvent = ({
@@ -80,4 +85,12 @@ export class SaleEstimateEventsTracker extends EventSubscriber {
properties: {},
});
};
private handleTrackViewedEstimateEvent = ({ tenantId }) => {
this.posthog.trackEvent({
distinctId: `tenant-${tenantId}`,
event: SALE_ESTIMATE_VIEWED,
properties: {},
});
};
}

View File

@@ -4,6 +4,8 @@ import { ITransactionsLockingPartialUnlocked } from '@/interfaces';
import { PosthogService } from '../PostHog';
import {
SUBSCRIPTION_CANCELLED,
SUBSCRIPTION_PAYMENT_FAILED,
SUBSCRIPTION_PAYMENT_SUCCEED,
SUBSCRIPTION_PLAN_CHANGED,
SUBSCRIPTION_RESUMED,
} from '@/constants/event-tracker';
@@ -27,6 +29,14 @@ export class TransactionsLockingEventsTracker extends EventSubscriber {
events.subscription.onSubscriptionPlanChanged,
this.handleSubscriptionPlanChangedEvent
);
bus.subscribe(
events.subscription.onSubscriptionPaymentSucceed,
this.handleSubscriptionPaymentFailedEvent
);
bus.subscribe(
events.subscription.onSubscriptionPaymentFailed,
this.handleSubscriptionPaymentSucceed
);
}
private handleSubscriptionResumedEvent = ({ tenantId }) => {
@@ -52,4 +62,20 @@ export class TransactionsLockingEventsTracker extends EventSubscriber {
properties: {},
});
};
private handleSubscriptionPaymentFailedEvent = ({ tenantId }) => {
this.posthog.trackEvent({
distinctId: `tenant-${tenantId}`,
event: SUBSCRIPTION_PAYMENT_FAILED,
properties: {},
});
};
private handleSubscriptionPaymentSucceed = ({ tenantId }) => {
this.posthog.trackEvent({
distinctId: `tenant-${tenantId}`,
event: SUBSCRIPTION_PAYMENT_SUCCEED,
properties: {},
});
};
}

View File

@@ -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,
];

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,
};
}
}

View File

@@ -39,8 +39,8 @@ export class ItemsApplication {
/**
* Creates a new item (service/product).
* @param {number} tenantId
* @param {IItemCreateDTO} itemDTO
* @param {number} tenantId
* @param {IItemCreateDTO} itemDTO
* @returns {Promise<IItem>}
*/
public async createItem(
@@ -52,8 +52,8 @@ export class ItemsApplication {
/**
* Retrieves the given item.
* @param {number} tenantId
* @param {number} itemId
* @param {number} tenantId
* @param {number} itemId
* @returns {Promise<IItem>}
*/
public getItem(tenantId: number, itemId: number): Promise<IItem> {
@@ -62,9 +62,9 @@ export class ItemsApplication {
/**
* Edits the given item (service/product).
* @param {number} tenantId
* @param {number} itemId
* @param {IItemEditDTO} itemDTO
* @param {number} tenantId
* @param {number} itemId
* @param {IItemEditDTO} itemDTO
* @returns {Promise<IItem>}
*/
public editItem(tenantId: number, itemId: number, itemDTO: IItemEditDTO) {
@@ -73,8 +73,8 @@ export class ItemsApplication {
/**
* Deletes the given item (service/product).
* @param {number} tenantId
* @param {number} itemId
* @param {number} tenantId
* @param {number} itemId
* @returns {Promise<void>}
*/
public deleteItem(tenantId: number, itemId: number) {

View File

@@ -3,6 +3,8 @@ import HasTenancyService from '@/services/Tenancy/TenancyService';
import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable';
import { SaleEstimateTransfromer } from './SaleEstimateTransformer';
import { SaleEstimateValidators } from './SaleEstimateValidators';
import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
import events from '@/subscribers/events';
@Service()
export class GetSaleEstimate {
@@ -15,6 +17,9 @@ export class GetSaleEstimate {
@Inject()
private validators: SaleEstimateValidators;
@Inject()
private eventPublisher: EventPublisher;
/**
* Retrieve the estimate details with associated entries.
* @async
@@ -35,10 +40,18 @@ export class GetSaleEstimate {
this.validators.validateEstimateExistance(estimate);
// Transformes sale estimate model to POJO.
return this.transformer.transform(
const transformed = await this.transformer.transform(
tenantId,
estimate,
new SaleEstimateTransfromer()
);
const eventPayload = { tenantId, saleEstimateId: estimateId };
// Triggers `onSaleEstimateViewed` event.
await this.eventPublisher.emitAsync(
events.saleEstimate.onViewed,
eventPayload
);
return transformed;
}
}

View File

@@ -180,6 +180,7 @@ export default {
* Sales estimates service.
*/
saleEstimate: {
onViewed: 'onSaleEstimateViewed',
onPdfViewed: 'onSaleEstimatePdfViewed',
onCreating: 'onSaleEstimateCreating',
@@ -751,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',
},
};