mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-14 03:40:31 +00:00
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import { Inject, Service } from 'typedi';
|
|
import events from '@/subscribers/events';
|
|
import { ICommandCashflowDeletingPayload } from '@/interfaces';
|
|
import { ServiceError } from '@/exceptions';
|
|
import { ERRORS } from '../constants';
|
|
import HasTenancyService from '@/services/Tenancy/TenancyService';
|
|
|
|
@Service()
|
|
export class PreventDeleteTransactionOnDelete {
|
|
@Inject()
|
|
private tenancy: HasTenancyService;
|
|
|
|
/**
|
|
* Attaches events with handlers.
|
|
*/
|
|
public attach = (bus) => {
|
|
bus.subscribe(
|
|
events.cashflow.onTransactionDeleting,
|
|
this.preventDeleteCashflowTransactionHasUncategorizedTransaction.bind(
|
|
this
|
|
)
|
|
);
|
|
};
|
|
|
|
/**
|
|
* Prevent delete cashflow transaction has converted from uncategorized transaction.
|
|
* @param {ICommandCashflowDeletingPayload} payload
|
|
*/
|
|
public async preventDeleteCashflowTransactionHasUncategorizedTransaction({
|
|
tenantId,
|
|
oldCashflowTransaction,
|
|
trx,
|
|
}: ICommandCashflowDeletingPayload) {
|
|
const { UncategorizedCashflowTransaction } = this.tenancy.models(tenantId);
|
|
if (oldCashflowTransaction.uncategorizedTransactionId) {
|
|
const foundTransactions = await UncategorizedCashflowTransaction.query(
|
|
trx
|
|
).where({
|
|
categorized: true,
|
|
categorizeRefId: oldCashflowTransaction.id,
|
|
categorizeRefType: 'CashflowTransaction',
|
|
});
|
|
// Throw the error if the cashflow transaction still linked to uncategorized transaction.
|
|
if (foundTransactions.length > 0) {
|
|
throw new ServiceError(
|
|
ERRORS.CANNOT_DELETE_TRANSACTION_CONVERTED_FROM_UNCATEGORIZED,
|
|
'Cannot delete cashflow transaction converted from uncategorized transaction.'
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|