mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-15 20:30:33 +00:00
add server to monorepo.
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
import { Service, Inject } from 'typedi';
|
||||
import moment from 'moment';
|
||||
import HasTenancyService from '@/services/Tenancy/TenancyService';
|
||||
import { ServiceError, ServiceErrors } from '@/exceptions';
|
||||
import { TransactionsLockingGroup } from '@/interfaces';
|
||||
import TransactionsLockingRepository from './TransactionsLockingRepository';
|
||||
import { ERRORS } from './constants';
|
||||
|
||||
@Service()
|
||||
export default class TransactionsLockingGuard {
|
||||
@Inject()
|
||||
tenancy: HasTenancyService;
|
||||
|
||||
@Inject()
|
||||
transactionsLockingRepo: TransactionsLockingRepository;
|
||||
|
||||
/**
|
||||
* Detarmines whether the transaction date between the locking date period.
|
||||
* @param {number} tenantId
|
||||
* @param {Date} transactionDate
|
||||
* @param {TransactionsLockingGroup} lockingGroup
|
||||
* @returns {boolean}
|
||||
*/
|
||||
public isTransactionsLocking = (
|
||||
tenantId: number,
|
||||
transactionDate: Date,
|
||||
lockingGroup: string = TransactionsLockingGroup.All
|
||||
): boolean => {
|
||||
const { isEnabled, unlockFromDate, unlockToDate, lockToDate } =
|
||||
this.transactionsLockingRepo.getTransactionsLocking(
|
||||
tenantId,
|
||||
lockingGroup
|
||||
);
|
||||
// Returns false anyway in case if the transaction locking is disabled.
|
||||
if (!isEnabled) return false;
|
||||
|
||||
const inLockingDate = moment(transactionDate).isSameOrBefore(lockToDate);
|
||||
const inUnlockDate =
|
||||
unlockFromDate && unlockToDate
|
||||
? moment(transactionDate).isSameOrAfter(unlockFromDate) &&
|
||||
moment(transactionDate).isSameOrBefore(unlockFromDate)
|
||||
: false;
|
||||
|
||||
// Retruns true in case the transaction date between locking date
|
||||
// and not between unlocking date.
|
||||
return !!(isEnabled && inLockingDate && !inUnlockDate);
|
||||
};
|
||||
|
||||
/**
|
||||
* Validates the transaction date between the locking date period
|
||||
* or throw service error.
|
||||
* @param {number} tenantId
|
||||
* @param {Date} transactionDate
|
||||
* @param {TransactionsLockingGroup} lockingGroup
|
||||
*
|
||||
* @throws {ServiceError}
|
||||
*/
|
||||
public validateTransactionsLocking = (
|
||||
tenantId: number,
|
||||
transactionDate: Date,
|
||||
lockingGroup: TransactionsLockingGroup
|
||||
) => {
|
||||
const isLocked = this.isTransactionsLocking(
|
||||
tenantId,
|
||||
transactionDate,
|
||||
lockingGroup
|
||||
);
|
||||
if (isLocked) {
|
||||
this.throwTransactionsLockError(tenantId, lockingGroup);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Throws transactions locking error.
|
||||
* @param {number} tenantId
|
||||
* @param {TransactionsLockingGroup} lockingGroup
|
||||
*/
|
||||
public throwTransactionsLockError = (
|
||||
tenantId: number,
|
||||
lockingGroup: TransactionsLockingGroup
|
||||
) => {
|
||||
const { lockToDate } = this.transactionsLockingRepo.getTransactionsLocking(
|
||||
tenantId,
|
||||
lockingGroup
|
||||
);
|
||||
throw new ServiceError(ERRORS.TRANSACTIONS_DATE_LOCKED, null, {
|
||||
lockedToDate: lockToDate,
|
||||
formattedLockedToDate: moment(lockToDate).format('YYYY/MM/DD'),
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Validate the transaction locking of the given locking group and transaction date.
|
||||
* @param {number} tenantId -
|
||||
* @param {TransactionsLockingGroup} lockingGroup - transaction group
|
||||
* @param {Date} fromDate -
|
||||
*/
|
||||
public transactionsLockingGuard = (
|
||||
tenantId: number,
|
||||
transactionDate: Date,
|
||||
moduleType: TransactionsLockingGroup
|
||||
) => {
|
||||
const lockingType =
|
||||
this.transactionsLockingRepo.getTransactionsLockingType(tenantId);
|
||||
|
||||
//
|
||||
if (lockingType === TransactionsLockingGroup.All) {
|
||||
return this.validateTransactionsLocking(
|
||||
tenantId,
|
||||
transactionDate,
|
||||
TransactionsLockingGroup.All
|
||||
);
|
||||
}
|
||||
//
|
||||
return this.validateTransactionsLocking(
|
||||
tenantId,
|
||||
transactionDate,
|
||||
moduleType
|
||||
);
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user