mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-13 03:10:31 +00:00
50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
import { Service } from 'typedi';
|
|
import { includes, camelCase, upperFirst } from 'lodash';
|
|
import { IAccount } from '@/interfaces';
|
|
import { getCashflowTransactionType } from './utils';
|
|
import { ServiceError } from '@/exceptions';
|
|
import { CASHFLOW_TRANSACTION_TYPE, ERRORS } from './constants';
|
|
|
|
@Service()
|
|
export class CommandCashflowValidator {
|
|
/**
|
|
* Validates the lines accounts type should be cash or bank account.
|
|
* @param {IAccount} accounts -
|
|
*/
|
|
public validateCreditAccountWithCashflowType = (
|
|
creditAccount: IAccount,
|
|
cashflowTransactionType: CASHFLOW_TRANSACTION_TYPE
|
|
): void => {
|
|
const transactionTypeMeta = getCashflowTransactionType(
|
|
cashflowTransactionType
|
|
);
|
|
const noneCashflowAccount = !includes(
|
|
transactionTypeMeta.creditType,
|
|
creditAccount.accountType
|
|
);
|
|
if (noneCashflowAccount) {
|
|
throw new ServiceError(ERRORS.CREDIT_ACCOUNTS_HAS_INVALID_TYPE);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Validates the cashflow transaction type.
|
|
* @param {string} transactionType
|
|
* @returns {string}
|
|
*/
|
|
public validateCashflowTransactionType = (transactionType: string) => {
|
|
const transformedType = upperFirst(
|
|
camelCase(transactionType)
|
|
) as CASHFLOW_TRANSACTION_TYPE;
|
|
|
|
// Retrieve the given transaction type meta.
|
|
const transactionTypeMeta = getCashflowTransactionType(transformedType);
|
|
|
|
// Throw service error in case not the found the given transaction type.
|
|
if (!transactionTypeMeta) {
|
|
throw new ServiceError(ERRORS.CASHFLOW_TRANSACTION_TYPE_INVALID);
|
|
}
|
|
return transformedType;
|
|
};
|
|
}
|