mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-14 03:40:31 +00:00
76 lines
2.6 KiB
TypeScript
76 lines
2.6 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
import { ServiceError } from '../Items/ServiceError';
|
|
import { transformToMap } from '@/utils/transform-to-key';
|
|
import { ICommonLandedCostEntry, ICommonLandedCostEntryDTO } from './types/BillLandedCosts.types';
|
|
|
|
const ERRORS = {
|
|
ENTRIES_ALLOCATED_COST_COULD_NOT_DELETED:
|
|
'ENTRIES_ALLOCATED_COST_COULD_NOT_DELETED',
|
|
LOCATED_COST_ENTRIES_SHOULD_BIGGE_THAN_NEW_ENTRIES:
|
|
'LOCATED_COST_ENTRIES_SHOULD_BIGGE_THAN_NEW_ENTRIES',
|
|
};
|
|
|
|
@Injectable()
|
|
export class TransactionLandedCostEntriesService {
|
|
/**
|
|
* Validates bill entries that has allocated landed cost amount not deleted.
|
|
* @param {ICommonLandedCostEntry[]} oldCommonEntries -
|
|
* @param {ICommonLandedCostEntryDTO[]} newBillEntries -
|
|
*/
|
|
public getLandedCostEntriesDeleted(
|
|
oldCommonEntries: ICommonLandedCostEntry[],
|
|
newCommonEntriesDTO: ICommonLandedCostEntryDTO[]
|
|
): ICommonLandedCostEntry[] {
|
|
const newBillEntriesById = transformToMap(newCommonEntriesDTO, 'id');
|
|
|
|
return oldCommonEntries.filter((entry) => {
|
|
const newEntry = newBillEntriesById.get(entry.id);
|
|
|
|
if (entry.allocatedCostAmount > 0 && typeof newEntry === 'undefined') {
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Validates the bill entries that have located cost amount should not be deleted.
|
|
* @param {ICommonLandedCostEntry[]} oldCommonEntries - Old bill entries.
|
|
* @param {ICommonLandedCostEntryDTO[]} newBillEntries - New DTO bill entries.
|
|
*/
|
|
public validateLandedCostEntriesNotDeleted(
|
|
oldCommonEntries: ICommonLandedCostEntry[],
|
|
newCommonEntriesDTO: ICommonLandedCostEntryDTO[]
|
|
): void {
|
|
const entriesDeleted = this.getLandedCostEntriesDeleted(
|
|
oldCommonEntries,
|
|
newCommonEntriesDTO
|
|
);
|
|
if (entriesDeleted.length > 0) {
|
|
throw new ServiceError(ERRORS.ENTRIES_ALLOCATED_COST_COULD_NOT_DELETED);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validate allocated cost amount entries should be smaller than new entries amount.
|
|
* @param {ICommonLandedCostEntry[]} oldCommonEntries - Old bill entries.
|
|
* @param {ICommonLandedCostEntryDTO[]} newBillEntries - New DTO bill entries.
|
|
*/
|
|
public validateLocatedCostEntriesSmallerThanNewEntries(
|
|
oldCommonEntries: ICommonLandedCostEntry[],
|
|
newCommonEntriesDTO: ICommonLandedCostEntryDTO[]
|
|
): void {
|
|
const oldBillEntriesById = transformToMap(oldCommonEntries, 'id');
|
|
|
|
newCommonEntriesDTO.forEach((entry) => {
|
|
const oldEntry = oldBillEntriesById.get(entry.id);
|
|
|
|
if (oldEntry && oldEntry.allocatedCostAmount > entry.amount) {
|
|
throw new ServiceError(
|
|
ERRORS.LOCATED_COST_ENTRIES_SHOULD_BIGGE_THAN_NEW_ENTRIES
|
|
);
|
|
}
|
|
});
|
|
}
|
|
}
|