mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 05:40:31 +00:00
79 lines
2.2 KiB
TypeScript
79 lines
2.2 KiB
TypeScript
import { Inject, Service } from 'typedi';
|
|
import { initialize } from 'objection';
|
|
import HasTenancyService from '@/services/Tenancy/TenancyService';
|
|
import events from '@/subscribers/events';
|
|
import { IAccountEventDeletePayload } from '@/interfaces';
|
|
import { DeleteBankRulesService } from '../../Rules/DeleteBankRules';
|
|
import { RevertRecognizedTransactions } from '../../RegonizeTranasctions/RevertRecognizedTransactions';
|
|
|
|
@Service()
|
|
export class DeleteUncategorizedTransactionsOnAccountDeleting {
|
|
@Inject()
|
|
private tenancy: HasTenancyService;
|
|
|
|
@Inject()
|
|
private deleteBankRules: DeleteBankRulesService;
|
|
|
|
@Inject()
|
|
private revertRecognizedTransactins: RevertRecognizedTransactions;
|
|
|
|
/**
|
|
* Constructor method.
|
|
*/
|
|
public attach(bus) {
|
|
bus.subscribe(
|
|
events.accounts.onDelete,
|
|
this.handleDeleteBankRulesOnAccountDeleting.bind(this)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Handles revert the recognized transactions and delete all the bank rules
|
|
* associated to the deleted bank account.
|
|
* @param {IAccountEventDeletePayload}
|
|
*/
|
|
private async handleDeleteBankRulesOnAccountDeleting({
|
|
tenantId,
|
|
oldAccount,
|
|
trx,
|
|
}: IAccountEventDeletePayload) {
|
|
const knex = this.tenancy.knex(tenantId);
|
|
const {
|
|
BankRule,
|
|
UncategorizedCashflowTransaction,
|
|
MatchedBankTransaction,
|
|
RecognizedBankTransaction,
|
|
} = this.tenancy.models(tenantId);
|
|
|
|
const foundAssociatedRules = await BankRule.query(trx).where(
|
|
'applyIfAccountId',
|
|
oldAccount.id
|
|
);
|
|
const foundAssociatedRulesIds = foundAssociatedRules.map((rule) => rule.id);
|
|
|
|
await initialize(knex, [
|
|
UncategorizedCashflowTransaction,
|
|
RecognizedBankTransaction,
|
|
MatchedBankTransaction,
|
|
]);
|
|
// Revert the recognized transactions of the given bank rules.
|
|
await this.revertRecognizedTransactins.revertRecognizedTransactions(
|
|
tenantId,
|
|
foundAssociatedRulesIds,
|
|
null,
|
|
trx
|
|
);
|
|
// Delete the associated uncategorized transactions.
|
|
await UncategorizedCashflowTransaction.query(trx)
|
|
.where('accountId', oldAccount.id)
|
|
.delete();
|
|
|
|
// Delete the given bank rules.
|
|
await this.deleteBankRules.deleteBankRules(
|
|
tenantId,
|
|
foundAssociatedRulesIds,
|
|
trx
|
|
);
|
|
}
|
|
}
|