From 29bf723f9b72fbd095c76aa7f3e9cf91fd75765f Mon Sep 17 00:00:00 2001 From: "a.bouhuolia" Date: Sat, 2 Jan 2021 16:42:21 +0200 Subject: [PATCH] fix: store opening quantity, cost and date in item inventory type only. --- server/src/services/Items/ItemsService.ts | 30 +++++++++++++++++------ 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/server/src/services/Items/ItemsService.ts b/server/src/services/Items/ItemsService.ts index 145d367a0..c5441b735 100644 --- a/server/src/services/Items/ItemsService.ts +++ b/server/src/services/Items/ItemsService.ts @@ -1,4 +1,4 @@ -import { defaultTo, difference, omit } from 'lodash'; +import { defaultTo, difference, omit, pick } from 'lodash'; import { Service, Inject } from 'typedi'; import { EventDispatcher, @@ -229,6 +229,25 @@ export default class ItemsService implements IItemsService { } } + /** + * Transforms the item DTO to model. + * @param {IItemDTO} itemDTO - Item DTO. + * @return {IItem} + */ + private transformNewItemDTOToModel(itemDTO: IItemDTO) { + const inventoryAttrs = ['openingQuantity', 'openingCost', 'openingDate']; + + return { + ...omit(itemDTO, inventoryAttrs), + ...(itemDTO.type === 'inventory' ? pick(itemDTO, inventoryAttrs) : {}), + active: defaultTo(itemDTO.active, 1), + quantityOnHand: + itemDTO.type === 'inventory' + ? defaultTo(itemDTO.openingQuantity, 0) + : null, + }; + } + /** * Creates a new item. * @param {number} tenantId DTO @@ -263,12 +282,7 @@ export default class ItemsService implements IItemsService { ); } const item = await Item.query().insertAndFetch({ - ...itemDTO, - active: defaultTo(itemDTO.active, 1), - quantityOnHand: - itemDTO.type === 'inventory' - ? defaultTo(itemDTO.openingQuantity, 0) - : null, + ...this.transformNewItemDTOToModel(itemDTO) }); this.logger.info('[items] item inserted successfully.', { tenantId, @@ -469,7 +483,7 @@ export default class ItemsService implements IItemsService { */ private async validateItemsIdsExists( tenantId: number, - itemsIDs: number[], + itemsIDs: number[] ): Promise { const { Item } = this.tenancy.models(tenantId);