Files
bigcapital/packages/server/src/subscribers/SaleReceipt/WriteJournalEntries.ts
2023-02-03 11:57:50 +02:00

88 lines
2.3 KiB
TypeScript

import { Service, Inject } from 'typedi';
import events from '@/subscribers/events';
import TenancyService from '@/services/Tenancy/TenancyService';
import SalesReceiptService from '@/services/Sales/SalesReceipts';
import {
ISaleReceiptCreatedPayload,
ISaleReceiptEditedPayload,
ISaleReceiptEventDeletedPayload,
} from '@/interfaces';
import { SaleReceiptGLEntries } from '@/services/Sales/SaleReceiptGLEntries';
@Service()
export default class SaleReceiptWriteGLEntriesSubscriber {
@Inject()
tenancy: TenancyService;
@Inject()
saleReceiptGLEntries: SaleReceiptGLEntries;
/**
* Attaches events with handlers.
*/
public attach(bus) {
bus.subscribe(
events.saleReceipt.onCreated,
this.handleWriteReceiptIncomeJournalEntrieOnCreate
);
bus.subscribe(
events.saleReceipt.onEdited,
this.handleWriteReceiptIncomeJournalEntrieOnEdited
);
bus.subscribe(
events.saleReceipt.onDeleted,
this.handleRevertReceiptJournalEntriesOnDeleted
);
}
/**
* Handles writing sale receipt income journal entries once created.
* @param {ISaleReceiptCreatedPayload} payload -
*/
public handleWriteReceiptIncomeJournalEntrieOnCreate = async ({
tenantId,
saleReceiptId,
trx,
}: ISaleReceiptCreatedPayload) => {
// Writes the sale receipt income journal entries.
await this.saleReceiptGLEntries.writeIncomeGLEntries(
tenantId,
saleReceiptId,
trx
);
};
/**
* Handles sale receipt revert jouranl entries once be deleted.
* @param {ISaleReceiptEventDeletedPayload} payload -
*/
public handleRevertReceiptJournalEntriesOnDeleted = async ({
tenantId,
saleReceiptId,
trx,
}: ISaleReceiptEventDeletedPayload) => {
await this.saleReceiptGLEntries.revertReceiptGLEntries(
tenantId,
saleReceiptId,
trx
);
};
/**
* Handles writing sale receipt income journal entries once be edited.
* @param {ISaleReceiptEditedPayload} payload -
*/
private handleWriteReceiptIncomeJournalEntrieOnEdited = async ({
tenantId,
saleReceiptId,
trx,
}: ISaleReceiptEditedPayload) => {
// Writes the sale receipt income journal entries.
await this.saleReceiptGLEntries.rewriteReceiptGLEntries(
tenantId,
saleReceiptId,
trx
);
};
}