Files
bigcapital/packages/server/src/modules/Vendors/subscribers/VendorGLEntriesSubscriber.ts
2026-01-23 17:43:22 +02:00

72 lines
1.9 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { OnEvent } from '@nestjs/event-emitter';
import { events } from '@/common/events/events';
import { VendorGLEntriesStorage } from '../VendorGLEntriesStorage';
import {
IVendorEventCreatedPayload,
IVendorEventDeletedPayload,
IVendorOpeningBalanceEditedPayload,
} from '../types/Vendors.types';
@Injectable()
export class VendorsWriteGLOpeningSubscriber {
constructor(
private readonly vendorGLEntriesStorage: VendorGLEntriesStorage,
) {}
/**
* Writes the open balance journal entries once the vendor created.
* @param {IVendorEventCreatedPayload} payload -
*/
@OnEvent(events.vendors.onCreated)
public async handleWriteOpeningBalanceEntries({
vendor,
trx,
}: IVendorEventCreatedPayload) {
// Writes the vendor opening balance journal entries.
if (vendor.openingBalance) {
await this.vendorGLEntriesStorage.writeVendorOpeningBalance(
vendor.id,
trx,
);
}
}
/**
* Revert the opening balance journal entries once the vendor deleted.
* @param {IVendorEventDeletedPayload} payload -
*/
@OnEvent(events.vendors.onDeleted)
public async handleRevertOpeningBalanceEntries({
vendorId,
trx,
}: IVendorEventDeletedPayload) {
await this.vendorGLEntriesStorage.revertVendorOpeningBalance(
vendorId,
trx,
);
}
/**
* Handles the rewrite opening balance entries once opening balance changed.
* @param {IVendorOpeningBalanceEditedPayload} payload -
*/
@OnEvent(events.vendors.onOpeningBalanceChanged)
public async handleRewriteOpeningEntriesOnChanged({
vendor,
trx,
}: IVendorOpeningBalanceEditedPayload) {
if (vendor.openingBalance) {
await this.vendorGLEntriesStorage.rewriteVendorOpeningBalance(
vendor.id,
trx,
);
} else {
await this.vendorGLEntriesStorage.revertVendorOpeningBalance(
vendor.id,
trx,
);
}
}
}