mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-16 12:50:38 +00:00
101 lines
3.1 KiB
TypeScript
101 lines
3.1 KiB
TypeScript
import { Inject, Service } from 'typedi';
|
|
import PromisePool from '@supercharge/promise-pool';
|
|
import events from '@/subscribers/events';
|
|
import HasTenancyService from '@/services/Tenancy/TenancyService';
|
|
import {
|
|
ICashflowTransactionCategorizedPayload,
|
|
ICashflowTransactionUncategorizedPayload,
|
|
} from '@/interfaces';
|
|
|
|
@Service()
|
|
export class DecrementUncategorizedTransactionOnCategorize {
|
|
@Inject()
|
|
private tenancy: HasTenancyService;
|
|
/**
|
|
* Constructor method.
|
|
*/
|
|
public attach(bus) {
|
|
bus.subscribe(
|
|
events.cashflow.onTransactionCategorized,
|
|
this.decrementUnCategorizedTransactionsOnCategorized.bind(this)
|
|
);
|
|
bus.subscribe(
|
|
events.cashflow.onTransactionUncategorized,
|
|
this.incrementUnCategorizedTransactionsOnUncategorized.bind(this)
|
|
);
|
|
bus.subscribe(
|
|
events.cashflow.onTransactionUncategorizedCreated,
|
|
this.incrementUncategoirzedTransactionsOnCreated.bind(this)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Decrement the uncategoirzed transactions on the account once categorizing.
|
|
* @param {ICashflowTransactionCategorizedPayload}
|
|
*/
|
|
public async decrementUnCategorizedTransactionsOnCategorized({
|
|
tenantId,
|
|
uncategorizedTransactions,
|
|
trx,
|
|
}: ICashflowTransactionCategorizedPayload) {
|
|
const { Account } = this.tenancy.models(tenantId);
|
|
|
|
await PromisePool.withConcurrency(1)
|
|
.for(uncategorizedTransactions)
|
|
.process(async (uncategorizedTransaction) => {
|
|
// Cannot continue if the transaction is still pending.
|
|
if (uncategorizedTransaction.isPending) {
|
|
return;
|
|
}
|
|
await Account.query(trx)
|
|
.findById(uncategorizedTransaction.accountId)
|
|
.decrement('uncategorizedTransactions', 1);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Increment the uncategorized transaction on the given account on uncategorizing.
|
|
* @param {IManualJournalDeletingPayload}
|
|
*/
|
|
public async incrementUnCategorizedTransactionsOnUncategorized({
|
|
tenantId,
|
|
uncategorizedTransactions,
|
|
trx,
|
|
}: ICashflowTransactionUncategorizedPayload) {
|
|
const { Account } = this.tenancy.models(tenantId);
|
|
|
|
await PromisePool.withConcurrency(1)
|
|
.for(uncategorizedTransactions)
|
|
.process(async (uncategorizedTransaction) => {
|
|
// Cannot continue if the transaction is still pending.
|
|
if (uncategorizedTransaction.isPending) {
|
|
return;
|
|
}
|
|
await Account.query(trx)
|
|
.findById(uncategorizedTransaction.accountId)
|
|
.increment('uncategorizedTransactions', 1);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Increments uncategorized transactions count once creating a new transaction.
|
|
* @param {ICommandCashflowCreatedPayload} payload -
|
|
*/
|
|
public async incrementUncategoirzedTransactionsOnCreated({
|
|
tenantId,
|
|
uncategorizedTransaction,
|
|
trx,
|
|
}: any) {
|
|
const { Account } = this.tenancy.models(tenantId);
|
|
|
|
if (!uncategorizedTransaction.accountId) return;
|
|
|
|
// Cannot continue if the transaction is still pending.
|
|
if (uncategorizedTransaction.isPending) return;
|
|
|
|
await Account.query(trx)
|
|
.findById(uncategorizedTransaction.accountId)
|
|
.increment('uncategorizedTransactions', 1);
|
|
}
|
|
}
|