mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-16 12:50:38 +00:00
127 lines
3.1 KiB
TypeScript
127 lines
3.1 KiB
TypeScript
import { Container, Inject, Service } from 'typedi';
|
|
import { EventSubscriber, On } from 'event-dispatch';
|
|
import events from 'subscribers/events';
|
|
import ExpensesService from 'services/Expenses/ExpensesService';
|
|
import TenancyService from 'services/Tenancy/TenancyService';
|
|
import ExpenseRepository from 'repositories/ExpenseRepository';
|
|
|
|
@EventSubscriber()
|
|
export default class ExpensesSubscriber {
|
|
tenancy: TenancyService;
|
|
expensesService: ExpensesService;
|
|
|
|
constructor() {
|
|
this.tenancy = Container.get(TenancyService);
|
|
this.expensesService = Container.get(ExpensesService);
|
|
}
|
|
|
|
/**
|
|
* Handles the writing journal entries once the expense created.
|
|
*/
|
|
@On(events.expenses.onCreated)
|
|
public async onExpenseCreated({
|
|
expenseId,
|
|
expense,
|
|
tenantId,
|
|
authorizedUser,
|
|
}) {
|
|
// In case expense published, write journal entries.
|
|
if (expense.publishedAt) {
|
|
await this.expensesService.writeJournalEntries(
|
|
tenantId,
|
|
expense,
|
|
authorizedUser.id,
|
|
false
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handle writing expense journal entries once the expense edited.
|
|
*/
|
|
@On(events.expenses.onEdited)
|
|
public async onExpenseEdited({
|
|
expenseId,
|
|
tenantId,
|
|
expense,
|
|
authorizedUser,
|
|
}) {
|
|
// In case expense published, write journal entries.
|
|
if (expense.publishedAt) {
|
|
await this.expensesService.writeJournalEntries(
|
|
tenantId,
|
|
expense,
|
|
authorizedUser.id,
|
|
true
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Reverts expense journal entries once the expense deleted.
|
|
*/
|
|
@On(events.expenses.onDeleted)
|
|
public async onExpenseDeleted({ expenseId, tenantId }) {
|
|
await this.expensesService.revertJournalEntries(tenantId, expenseId);
|
|
}
|
|
|
|
/**
|
|
* Handles writing expense journal once the expense publish.
|
|
*/
|
|
@On(events.expenses.onPublished)
|
|
public async onExpensePublished({
|
|
expenseId,
|
|
tenantId,
|
|
expense,
|
|
authorizedUser,
|
|
}) {
|
|
// In case expense published, write journal entries.
|
|
if (expense.publishedAt) {
|
|
await this.expensesService.writeJournalEntries(
|
|
tenantId,
|
|
expense,
|
|
authorizedUser.id,
|
|
false
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Handles the revert journal entries once the expenses deleted in bulk.
|
|
*/
|
|
@On(events.expenses.onBulkDeleted)
|
|
public async handleRevertJournalEntriesOnceDeleted({
|
|
expensesIds,
|
|
tenantId,
|
|
}) {
|
|
await this.expensesService.revertJournalEntries(tenantId, expensesIds);
|
|
}
|
|
|
|
/**
|
|
* Handles writing journal entriers of the not-published expenses.
|
|
*/
|
|
@On(events.expenses.onBulkPublished)
|
|
public async onExpenseBulkPublished({
|
|
expensesIds,
|
|
tenantId,
|
|
expenses,
|
|
oldExpenses,
|
|
authorizedUser,
|
|
}) {
|
|
// Filters the not published expenses.
|
|
const notPublishedExpenses = this.expensesService.getNonePublishedExpenses(
|
|
oldExpenses
|
|
);
|
|
// Can't continue if there is no not-published expoenses.
|
|
if (notPublishedExpenses.length === 0) { return; }
|
|
|
|
// Writing the journal entries of not-published expenses.
|
|
await this.expensesService.writeJournalEntries(
|
|
tenantId,
|
|
notPublishedExpenses,
|
|
authorizedUser.id,
|
|
false
|
|
);
|
|
}
|
|
}
|