feat: get bank account meta summary

This commit is contained in:
Ahmed Bouhuolia
2024-07-02 19:21:26 +02:00
parent 8a09de9771
commit 91730d204e
22 changed files with 476 additions and 69 deletions

View File

@@ -0,0 +1,53 @@
import HasTenancyService from '@/services/Tenancy/TenancyService';
import { Server } from 'socket.io';
import { Inject, Service } from 'typedi';
@Service()
export class GetBankAccountSummary {
@Inject()
private tenancy: HasTenancyService;
/**
* Retrieves the bank account meta summary
* @param {number} tenantId
* @param {number} bankAccountId
* @returns
*/
public async getBankAccountSummary(tenantId: number, bankAccountId: number) {
const {
Account,
UncategorizedCashflowTransaction,
RecognizedBankTransaction,
} = this.tenancy.models(tenantId);
const bankAccount = await Account.query()
.findById(bankAccountId)
.throwIfNotFound();
const uncategorizedTranasctionsCount =
await UncategorizedCashflowTransaction.query()
.where('accountId', bankAccountId)
.count('id as total')
.first();
const recognizedTransactionsCount = await RecognizedBankTransaction.query()
.whereExists(
UncategorizedCashflowTransaction.query().where(
'accountId',
bankAccountId
)
)
.count('id as total')
.first();
const totalUncategorizedTransactions =
uncategorizedTranasctionsCount?.total;
const totalRecognizedTransactions = recognizedTransactionsCount?.total;
return {
name: bankAccount.name,
totalUncategorizedTransactions,
totalRecognizedTransactions,
};
}
}

View File

@@ -32,11 +32,16 @@ export class GetUncategorizedTransactions {
};
const { results, pagination } =
await UncategorizedCashflowTransaction.query()
.where('accountId', accountId)
.where('categorized', false)
.modify('notExcluded')
.withGraphFetched('account')
.orderBy('date', 'DESC')
.onBuild((q) => {
q.where('accountId', accountId);
q.where('categorized', false);
q.modify('notExcluded');
q.withGraphFetched('account');
q.withGraphFetched('recognizedTransaction.assignAccount');
q.orderBy('date', 'DESC');
})
.pagination(_query.page - 1, _query.pageSize);
const data = await this.transformer.transform(

View File

@@ -12,9 +12,25 @@ export class UncategorizedTransactionTransformer extends Transformer {
'formattedDate',
'formattedDepositAmount',
'formattedWithdrawalAmount',
'assignedAccountId',
'assignedAccountName',
'assignedAccountCode',
'assignedPayee',
'assignedMemo',
'assignedCategory',
'assignedCategoryFormatted',
];
};
/**
* Exclude all attributes.
* @returns {Array<string>}
*/
public excludeAttributes = (): string[] => {
return ['recognizedTransaction'];
};
/**
* Formattes the transaction date.
* @param transaction
@@ -26,7 +42,7 @@ export class UncategorizedTransactionTransformer extends Transformer {
/**
* Formatted amount.
* @param transaction
* @param transaction
* @returns {string}
*/
public formattedAmount(transaction) {
@@ -62,4 +78,69 @@ export class UncategorizedTransactionTransformer extends Transformer {
}
return '';
}
// --------------------------------------------------------
// # Recgonized transaction
// --------------------------------------------------------
/**
* Get the assigned account ID of the transaction.
* @param {object} transaction
* @returns {number}
*/
public assignedAccountId(transaction: any): number {
return transaction.recognizedTransaction?.assignedAccountId;
}
/**
* Get the assigned account name of the transaction.
* @param {object} transaction
* @returns {string}
*/
public assignedAccountName(transaction: any): string {
return transaction.recognizedTransaction?.assignAccount?.name;
}
/**
* Get the assigned account code of the transaction.
* @param {object} transaction
* @returns {string}
*/
public assignedAccountCode(transaction: any): string {
return transaction.recognizedTransaction?.assignAccount?.code;
}
/**
* Get the assigned payee of the transaction.
* @param {object} transaction
* @returns {string}
*/
public getAssignedPayee(transaction: any): string {
return transaction.recognizedTransaction?.assignedPayee;
}
/**
* Get the assigned memo of the transaction.
* @param {object} transaction
* @returns {string}
*/
public assignedMemo(transaction: any): string {
return transaction.recognizedTransaction?.assignedMemo;
}
/**
* Get the assigned category of the transaction.
* @param {object} transaction
* @returns {string}
*/
public assignedCategory(transaction: any): string {
return transaction.recognizedTransaction?.assignedCategory;
}
/**
* Get the assigned formatted category.
* @returns {string}
*/
public assignedCategoryFormatted() {
return 'Other Income';
}
}