Files
bigcapital/packages/server/src/services/Contacts/Customers/Subscribers/CustomerGLEntriesSubscriber.ts
2023-02-03 11:57:50 +02:00

92 lines
2.3 KiB
TypeScript

import { Service, Inject } from 'typedi';
import {
ICustomerEventCreatedPayload,
ICustomerEventDeletedPayload,
ICustomerOpeningBalanceEditedPayload,
} from '@/interfaces';
import events from '@/subscribers/events';
import { CustomerGLEntriesStorage } from '../CustomerGLEntriesStorage';
@Service()
export class CustomerWriteGLOpeningBalanceSubscriber {
@Inject()
private customerGLEntries: CustomerGLEntriesStorage;
/**
* Attaches events with handlers.
*/
public attach(bus) {
bus.subscribe(
events.customers.onCreated,
this.handleWriteOpenBalanceEntries
);
bus.subscribe(
events.customers.onDeleted,
this.handleRevertOpeningBalanceEntries
);
bus.subscribe(
events.customers.onOpeningBalanceChanged,
this.handleRewriteOpeningEntriesOnChanged
);
}
/**
* Handles the writing opening balance journal entries once the customer created.
* @param {ICustomerEventCreatedPayload} payload -
*/
private handleWriteOpenBalanceEntries = async ({
tenantId,
customer,
trx,
}: ICustomerEventCreatedPayload) => {
// Writes the customer opening balance journal entries.
if (customer.openingBalance) {
await this.customerGLEntries.writeCustomerOpeningBalance(
tenantId,
customer.id,
trx
);
}
};
/**
* Handles the deleting opeing balance journal entrise once the customer deleted.
* @param {ICustomerEventDeletedPayload} payload -
*/
private handleRevertOpeningBalanceEntries = async ({
tenantId,
customerId,
trx,
}: ICustomerEventDeletedPayload) => {
await this.customerGLEntries.revertCustomerOpeningBalance(
tenantId,
customerId,
trx
);
};
/**
* Handles the rewrite opening balance entries once opening balnace changed.
* @param {ICustomerOpeningBalanceEditedPayload} payload -
*/
private handleRewriteOpeningEntriesOnChanged = async ({
tenantId,
customer,
trx,
}: ICustomerOpeningBalanceEditedPayload) => {
if (customer.openingBalance) {
await this.customerGLEntries.rewriteCustomerOpeningBalance(
tenantId,
customer.id,
trx
);
} else {
await this.customerGLEntries.revertCustomerOpeningBalance(
tenantId,
customer.id,
trx
);
}
};
}