Files
bigcapital/packages/server/src/subscribers/PaymentReceive/WriteGLEntries.ts
2024-08-13 13:41:09 +02:00

78 lines
1.9 KiB
TypeScript

import { Inject, Service } from 'typedi';
import {
IPaymentReceiveCreatedPayload,
IPaymentReceiveDeletedPayload,
IPaymentReceiveEditedPayload,
} from '@/interfaces';
import events from '@/subscribers/events';
import { PaymentReceivedGLEntries } from '@/services/Sales/PaymentReceived/PaymentReceivedGLEntries';
@Service()
export default class PaymentReceivesWriteGLEntriesSubscriber {
@Inject()
private paymentReceiveGLEntries: PaymentReceivedGLEntries;
/**
* Attaches events with handlers.
*/
public attach(bus) {
bus.subscribe(
events.paymentReceive.onCreated,
this.handleWriteJournalEntriesOnceCreated
);
bus.subscribe(
events.paymentReceive.onEdited,
this.handleOverwriteJournalEntriesOnceEdited
);
bus.subscribe(
events.paymentReceive.onDeleted,
this.handleRevertJournalEntriesOnceDeleted
);
}
/**
* Handle journal entries writing once the payment receive created.
*/
private handleWriteJournalEntriesOnceCreated = async ({
tenantId,
paymentReceiveId,
trx,
}: IPaymentReceiveCreatedPayload) => {
await this.paymentReceiveGLEntries.writePaymentGLEntries(
tenantId,
paymentReceiveId,
trx
);
};
/**
* Handle journal entries writing once the payment receive edited.
*/
private handleOverwriteJournalEntriesOnceEdited = async ({
tenantId,
paymentReceive,
trx,
}: IPaymentReceiveEditedPayload) => {
await this.paymentReceiveGLEntries.rewritePaymentGLEntries(
tenantId,
paymentReceive.id,
trx
);
};
/**
* Handles revert journal entries once deleted.
*/
private handleRevertJournalEntriesOnceDeleted = async ({
tenantId,
paymentReceiveId,
trx,
}: IPaymentReceiveDeletedPayload) => {
await this.paymentReceiveGLEntries.revertPaymentGLEntries(
tenantId,
paymentReceiveId,
trx
);
};
}