mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 05:40:31 +00:00
287 lines
7.8 KiB
TypeScript
287 lines
7.8 KiB
TypeScript
import { Inject } from 'typedi';
|
|
import events from '@/subscribers/events';
|
|
import {
|
|
IBillCreatingPayload,
|
|
IBillEditingPayload,
|
|
IBillEventDeletingPayload,
|
|
IBillPaymentCreatingPayload,
|
|
IBillPaymentDeletingPayload,
|
|
IBillPaymentEditingPayload,
|
|
IRefundVendorCreditCreatingPayload,
|
|
IRefundVendorCreditDeletingPayload,
|
|
IVendorCreditCreatingPayload,
|
|
IVendorCreditDeletingPayload,
|
|
IVendorCreditEditingPayload,
|
|
} from '@/interfaces';
|
|
import PurchasesTransactionsLocking from './PurchasesTransactionLockingGuard';
|
|
|
|
export default class PurchasesTransactionLockingGuardSubscriber {
|
|
@Inject()
|
|
purchasesTransactionsLocking: PurchasesTransactionsLocking;
|
|
|
|
/**
|
|
* Attaches events with handlers.
|
|
* @param bus
|
|
*/
|
|
public attach = (bus) => {
|
|
// Bills
|
|
bus.subscribe(
|
|
events.bill.onCreating,
|
|
this.transactionLockingGuardOnBillCreating
|
|
);
|
|
bus.subscribe(
|
|
events.bill.onEditing,
|
|
this.transactionLockingGuardOnBillEditing
|
|
);
|
|
bus.subscribe(
|
|
events.bill.onDeleting,
|
|
this.transactionLockingGuardOnBillDeleting
|
|
);
|
|
// Payment mades.
|
|
bus.subscribe(
|
|
events.billPayment.onCreating,
|
|
this.transactionLockingGuardOnPaymentCreating
|
|
);
|
|
bus.subscribe(
|
|
events.billPayment.onEditing,
|
|
this.transactionLockingGuardOnPaymentEditing
|
|
);
|
|
bus.subscribe(
|
|
events.billPayment.onDeleting,
|
|
this.transactionLockingGuardOnPaymentDeleting
|
|
);
|
|
// Vendor credits.
|
|
bus.subscribe(
|
|
events.vendorCredit.onCreating,
|
|
this.transactionLockingGuardOnVendorCreditCreating
|
|
);
|
|
bus.subscribe(
|
|
events.vendorCredit.onDeleting,
|
|
this.transactionLockingGuardOnVendorCreditDeleting
|
|
);
|
|
bus.subscribe(
|
|
events.vendorCredit.onEditing,
|
|
this.transactionLockingGuardOnVendorCreditEditing
|
|
);
|
|
bus.subscribe(
|
|
events.vendorCredit.onRefundCreating,
|
|
this.transactionLockingGuardOnRefundVendorCredit
|
|
);
|
|
bus.subscribe(
|
|
events.vendorCredit.onRefundDeleting,
|
|
this.transactionLockingGuardOnRefundCreditDeleting
|
|
);
|
|
};
|
|
|
|
/**
|
|
* ---------------------------------------------
|
|
* PAYMENT MADES.
|
|
* ---------------------------------------------
|
|
*/
|
|
|
|
/**
|
|
* Transaction locking guard on payment editing.
|
|
* @param {IBillPaymentEditingPayload}
|
|
*/
|
|
private transactionLockingGuardOnPaymentEditing = async ({
|
|
tenantId,
|
|
oldBillPayment,
|
|
billPaymentDTO,
|
|
}: IBillPaymentEditingPayload) => {
|
|
// Validate old payment date.
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
oldBillPayment.paymentDate
|
|
);
|
|
// Validate the new payment date.
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
billPaymentDTO.paymentDate
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Transaction locking guard on payment creating.
|
|
* @param {IBillPaymentCreatingPayload}
|
|
*/
|
|
private transactionLockingGuardOnPaymentCreating = async ({
|
|
tenantId,
|
|
billPaymentDTO,
|
|
}: IBillPaymentCreatingPayload) => {
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
billPaymentDTO.paymentDate
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Transaction locking guard on payment deleting.
|
|
* @param {IBillPaymentDeletingPayload} payload -
|
|
*/
|
|
private transactionLockingGuardOnPaymentDeleting = async ({
|
|
tenantId,
|
|
oldBillPayment,
|
|
}: IBillPaymentDeletingPayload) => {
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
oldBillPayment.paymentDate
|
|
);
|
|
};
|
|
|
|
/**
|
|
* ---------------------------------------------
|
|
* BILLS.
|
|
* ---------------------------------------------
|
|
*/
|
|
|
|
/**
|
|
* Transaction locking guard on bill creating.
|
|
* @param {IBillCreatingPayload} payload
|
|
*/
|
|
private transactionLockingGuardOnBillCreating = async ({
|
|
tenantId,
|
|
billDTO,
|
|
}: IBillCreatingPayload) => {
|
|
// Can't continue if the new bill is not published.
|
|
if (!billDTO.open) return;
|
|
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
billDTO.billDate
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Transaction locking guard on bill editing.
|
|
* @param {IBillEditingPayload} payload
|
|
*/
|
|
private transactionLockingGuardOnBillEditing = async ({
|
|
oldBill,
|
|
tenantId,
|
|
billDTO,
|
|
}: IBillEditingPayload) => {
|
|
// Can't continue if the old and new bill are not published.
|
|
if (!oldBill.isOpen && !billDTO.open) return;
|
|
|
|
// Validate the old bill date.
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
oldBill.billDate
|
|
);
|
|
// Validate the new bill date.
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
billDTO.billDate
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Transaction locking guard on bill deleting.
|
|
* @param {IBillEventDeletingPayload} payload
|
|
*/
|
|
private transactionLockingGuardOnBillDeleting = async ({
|
|
tenantId,
|
|
oldBill,
|
|
}: IBillEventDeletingPayload) => {
|
|
// Can't continue if the old bill is not published.
|
|
if (!oldBill.isOpen) return;
|
|
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
oldBill.billDate
|
|
);
|
|
};
|
|
|
|
/**
|
|
* ---------------------------------------------
|
|
* VENDOR CREDITS.
|
|
* ---------------------------------------------
|
|
*/
|
|
|
|
/**
|
|
* Transaction locking guard on vendor credit creating.
|
|
* @param {IVendorCreditCreatingPayload} payload
|
|
*/
|
|
private transactionLockingGuardOnVendorCreditCreating = async ({
|
|
tenantId,
|
|
vendorCreditCreateDTO,
|
|
}: IVendorCreditCreatingPayload) => {
|
|
// Can't continue if the new vendor credit is not published.
|
|
if (!vendorCreditCreateDTO.open) return;
|
|
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
vendorCreditCreateDTO.vendorCreditDate
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Transaction locking guard on vendor credit deleting.
|
|
* @param {IVendorCreditDeletingPayload} payload
|
|
*/
|
|
private transactionLockingGuardOnVendorCreditDeleting = async ({
|
|
tenantId,
|
|
oldVendorCredit,
|
|
}: IVendorCreditDeletingPayload) => {
|
|
// Can't continue if the old vendor credit is not open.
|
|
if (!oldVendorCredit.isOpen) return;
|
|
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
oldVendorCredit.vendorCreditDate
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Transaction locking guard on vendor credit editing.
|
|
* @param {IVendorCreditEditingPayload} payload
|
|
*/
|
|
private transactionLockingGuardOnVendorCreditEditing = async ({
|
|
tenantId,
|
|
oldVendorCredit,
|
|
vendorCreditDTO,
|
|
}: IVendorCreditEditingPayload) => {
|
|
// Can't continue if the old and new vendor credit are not published.
|
|
if (!oldVendorCredit.isPublished && !vendorCreditDTO.open) return;
|
|
|
|
// Validate the old credit date.
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
oldVendorCredit.vendorCreditDate
|
|
);
|
|
// Validate the new credit date.
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
vendorCreditDTO.vendorCreditDate
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Transaction locking guard on refund vendor credit creating.
|
|
* @param {IRefundVendorCreditCreatingPayload} payload -
|
|
*/
|
|
private transactionLockingGuardOnRefundVendorCredit = async ({
|
|
tenantId,
|
|
refundVendorCreditDTO,
|
|
}: IRefundVendorCreditCreatingPayload) => {
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
refundVendorCreditDTO.date
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Transaction locking guard on refund vendor credit deleting.
|
|
* @param {IRefundVendorCreditDeletingPayload} payload
|
|
*/
|
|
private transactionLockingGuardOnRefundCreditDeleting = async ({
|
|
tenantId,
|
|
oldRefundCredit,
|
|
}: IRefundVendorCreditDeletingPayload) => {
|
|
await this.purchasesTransactionsLocking.transactionLockingGuard(
|
|
tenantId,
|
|
oldRefundCredit.date
|
|
);
|
|
};
|
|
}
|