fix: expense writing journal entries.

fix: delete expense from the storage.
This commit is contained in:
Ahmed Bouhuolia
2020-10-05 20:14:31 +02:00
parent 99e6fe273f
commit 63c4567e08
5 changed files with 73 additions and 49 deletions

View File

@@ -36,7 +36,7 @@ export default class ExpenseRepository extends TenantRepository {
*/
async create(expenseInput: IExpense): Promise<void> {
const { Expense } = this.models;
const expense = await Expense.query().insert({ ...expenseInput });
const expense = await Expense.query().insertGraph({ ...expenseInput });
this.flushCache();
return expense;
@@ -72,10 +72,10 @@ export default class ExpenseRepository extends TenantRepository {
* @param {number} expenseId
*/
async delete(expenseId: number): Promise<void> {
const { Expense } = this.models;
const { Expense, ExpenseCategory } = this.models;
await ExpenseCategory.query().where('expense_id', expenseId).delete();
await Expense.query().where('id', expenseId).delete();
await Expense.query().where('expense_id', expenseId).delete();
this.flushCache();
}

View File

@@ -138,16 +138,18 @@ export default class JournalCommands{
const paymentJournalEntry = new JournalEntry({
credit: expense.totalAmount,
account: expense.paymentAccountId,
index: 1,
...mixinEntry,
});
this.journal.credit(paymentJournalEntry);
expense.categories.forEach((category: IExpenseCategory) => {
expense.categories.forEach((category: IExpenseCategory, index) => {
const expenseJournalEntry = new JournalEntry({
account: category.expenseAccountId,
debit: category.amount,
note: category.description,
...mixinEntry,
index: index + 2,
});
this.journal.debit(expenseJournalEntry);
});

View File

@@ -143,16 +143,15 @@ export default class ExpensesService implements IExpensesService {
}
}
private async revertJournalEntries(
public async revertJournalEntries(
tenantId: number,
expenseId: number|number[],
) {
const journal = new JournalPoster(tenantId);
const journalCommands = new JournalCommands(journal);
if (revertOld) {
await journalCommands.revertJournalEntries(expenseId, 'Expense');
}
await journalCommands.revertJournalEntries(expenseId, 'Expense');
return Promise.all([
journal.saveBalance(),
journal.deleteEntries(),

View File

@@ -14,7 +14,7 @@ export default class JournalPosterService {
* @param {string} referenceType - The transaction reference type.
* @return {Promise}
*/
async deleteJournalTransactions(
async revertJournalTransactions(
tenantId: number,
referenceId: number,
referenceType: string

View File

@@ -3,61 +3,84 @@ import { EventSubscriber, On } from 'event-dispatch';
import events from 'subscribers/events';
import ExpensesService from 'services/Expenses/ExpensesService';
import TenancyService from 'services/Tenancy/TenancyService';
import {
EventDispatcher,
EventDispatcherInterface,
} from 'decorators/eventDispatcher';
import ExpenseRepository from 'repositories/ExpenseRepository';
@Service()
@EventSubscriber()
export default class ExpensesSubscriber {
constructor(
@Inject()
tenancy: TenancyService,
tenancy: TenancyService;
expensesService: ExpensesService;
@EventDispatcher()
eventDispatcher: EventDispatcherInterface,
) {
console.log(this, 'XXXX');
// this.eventDispatcher.on(events.expenses.onCreated, this.onExpenseCreated);
constructor() {
this.tenancy = Container.get(TenancyService);
this.expensesService = Container.get(ExpensesService);
}
public onExpenseCreated({ expenseId, tenantId }) {
console.log(this)
/**
* On expense created.
*/
@On(events.expenses.onCreated)
public async onExpenseCreated({ expenseId, tenantId }) {
const { expenseRepository } = this.tenancy.repositories(tenantId);
const expense = await expenseRepository.getById(expenseId);
// // 7. In case expense published, write journal entries.
// if (expenseObj.publishedAt) {
// await this.writeJournalEntries(tenantId, expenseModel, false);
// }
// In case expense published, write journal entries.
if (expense.publishedAt) {
await this.expensesService.writeJournalEntries(tenantId, expense, false);
}
}
/**
* On expense edited.
*/
@On(events.expenses.onEdited)
public async onExpenseEdited({ expenseId, tenantId }) {
const { expenseRepository } = this.tenancy.repositories(tenantId);
const expense = await expenseRepository.getById(expenseId);
// In case expense published, write journal entries.
if (expense.publishedAt) {
await this.expensesService.writeJournalEntries(tenantId, expense, true);
}
}
// @On(events.expenses.onEdited)
public onExpenseEdited({ expenseId, tenantId }) {
// - In case expense published, write journal entries.
// if (expenseObj.publishedAt) {
// await this.writeJournalEntries(tenantId, expenseModel, true, authorizedUser);
// }
/**
*
* @param param0
*/
@On(events.expenses.onDeleted)
public async onExpenseDeleted({ expenseId, tenantId }) {
await this.expensesService.revertJournalEntries(tenantId, expenseId);
}
// @On(events.expenses.onDeleted)
public onExpenseDeleted({ expenseId, tenantId }) {
// if (expense.published) {
// await this.revertJournalEntries(tenantId, expenseId);
// }
/**
*
* @param param0
*/
@On(events.expenses.onPublished)
public async onExpensePublished({ expenseId, tenantId }) {
const { expenseRepository } = this.tenancy.repositories(tenantId);
const expense = await expenseRepository.getById(expenseId);
// In case expense published, write journal entries.
if (expense.publishedAt) {
await this.expensesService.writeJournalEntries(tenantId, expense, false);
}
}
// @On(events.expenses.onPublished)
public onExpensePublished({ expenseId, tenantId }) {
}
// @On(events.expenses.onBulkDeleted)
/**
*
* @param param0
*/
@On(events.expenses.onBulkDeleted)
public onExpenseBulkDeleted({ expensesIds, tenantId }) {
}
// @On(events.expenses.onBulkPublished)
/**
*
* @param param0
*/
@On(events.expenses.onBulkPublished)
public onExpenseBulkPublished({ expensesIds, tenantId }) {
}