@things-factory/warehouse-base 5.0.14 → 6.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-server/controllers/ecommerce/ecommerce-controller.js +1 -1
- package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -1
- package/dist-server/controllers/ecommerce/sellercraft-controller.js +64 -60
- package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
- package/dist-server/controllers/warehouse-controller.js +7 -5
- package/dist-server/controllers/warehouse-controller.js.map +1 -1
- package/dist-server/service/inventory/inventory-mutation.js +6 -6
- package/dist-server/service/inventory/inventory-mutation.js.map +1 -1
- package/dist-server/service/inventory/inventory-query.js +217 -195
- package/dist-server/service/inventory/inventory-query.js.map +1 -1
- package/dist-server/service/inventory/inventory-types.js +14 -15
- package/dist-server/service/inventory/inventory-types.js.map +1 -1
- package/dist-server/service/inventory/inventory.js +62 -42
- package/dist-server/service/inventory/inventory.js.map +1 -1
- package/dist-server/service/inventory-change/inventory-change-mutation.js +252 -216
- package/dist-server/service/inventory-change/inventory-change-mutation.js.map +1 -1
- package/dist-server/service/inventory-change/inventory-change-query.js +6 -7
- package/dist-server/service/inventory-change/inventory-change-query.js.map +1 -1
- package/dist-server/service/inventory-change/inventory-change.js +7 -7
- package/dist-server/service/inventory-change/inventory-change.js.map +1 -1
- package/dist-server/service/inventory-history/inventory-history-mutation.js +1 -1
- package/dist-server/service/inventory-history/inventory-history-mutation.js.map +1 -1
- package/dist-server/service/inventory-history/inventory-history-query.js +89 -99
- package/dist-server/service/inventory-history/inventory-history-query.js.map +1 -1
- package/dist-server/service/inventory-history/inventory-history-types.js +3 -3
- package/dist-server/service/inventory-history/inventory-history-types.js.map +1 -1
- package/dist-server/service/inventory-history/inventory-history.js +7 -7
- package/dist-server/service/inventory-history/inventory-history.js.map +1 -1
- package/dist-server/service/inventory-item/inventory-item-mutation.js +10 -10
- package/dist-server/service/inventory-item/inventory-item-mutation.js.map +1 -1
- package/dist-server/service/inventory-item/inventory-item-query.js +18 -17
- package/dist-server/service/inventory-item/inventory-item-query.js.map +1 -1
- package/dist-server/service/inventory-item/inventory-item-type.js +4 -5
- package/dist-server/service/inventory-item/inventory-item-type.js.map +1 -1
- package/dist-server/service/inventory-item/inventory-item.js +5 -5
- package/dist-server/service/inventory-item/inventory-item.js.map +1 -1
- package/dist-server/service/inventory-item-change/inventory-item-change-mutation.js +4 -4
- package/dist-server/service/inventory-item-change/inventory-item-change-mutation.js.map +1 -1
- package/dist-server/service/inventory-item-change/inventory-item-change-query.js +7 -9
- package/dist-server/service/inventory-item-change/inventory-item-change-query.js.map +1 -1
- package/dist-server/service/inventory-item-change/inventory-item-change-type.js +6 -7
- package/dist-server/service/inventory-item-change/inventory-item-change-type.js.map +1 -1
- package/dist-server/service/inventory-item-change/inventory-item-change.js +3 -4
- package/dist-server/service/inventory-item-change/inventory-item-change.js.map +1 -1
- package/dist-server/service/inventory-product/inventory-product-mutation.js +4 -4
- package/dist-server/service/inventory-product/inventory-product-mutation.js.map +1 -1
- package/dist-server/service/inventory-product/inventory-product-query.js +7 -9
- package/dist-server/service/inventory-product/inventory-product-query.js.map +1 -1
- package/dist-server/service/inventory-product/inventory-product-type.js +1 -2
- package/dist-server/service/inventory-product/inventory-product-type.js.map +1 -1
- package/dist-server/service/inventory-product/inventory-product.js +5 -5
- package/dist-server/service/inventory-product/inventory-product.js.map +1 -1
- package/dist-server/service/location/location-mutation.js +5 -5
- package/dist-server/service/location/location-mutation.js.map +1 -1
- package/dist-server/service/location/location-query.js +17 -19
- package/dist-server/service/location/location-query.js.map +1 -1
- package/dist-server/service/location/location-types.js +3 -3
- package/dist-server/service/location/location-types.js.map +1 -1
- package/dist-server/service/location/location.js +14 -14
- package/dist-server/service/location/location.js.map +1 -1
- package/dist-server/service/movement/movement-mutation.js +6 -5
- package/dist-server/service/movement/movement-mutation.js.map +1 -1
- package/dist-server/service/movement/movement-query.js +15 -15
- package/dist-server/service/movement/movement-query.js.map +1 -1
- package/dist-server/service/movement/movement-types.js +4 -5
- package/dist-server/service/movement/movement-types.js.map +1 -1
- package/dist-server/service/movement/movement.js +5 -5
- package/dist-server/service/movement/movement.js.map +1 -1
- package/dist-server/service/pallet/pallet-mutation.js +5 -5
- package/dist-server/service/pallet/pallet-mutation.js.map +1 -1
- package/dist-server/service/pallet/pallet-query.js +9 -11
- package/dist-server/service/pallet/pallet-query.js.map +1 -1
- package/dist-server/service/pallet/pallet-types.js +5 -6
- package/dist-server/service/pallet/pallet-types.js.map +1 -1
- package/dist-server/service/pallet/pallet.js +6 -6
- package/dist-server/service/pallet/pallet.js.map +1 -1
- package/dist-server/service/pallet-count/pallet-count-mutation.js +1 -1
- package/dist-server/service/pallet-count/pallet-count-mutation.js.map +1 -1
- package/dist-server/service/pallet-count/pallet-count-query.js +6 -8
- package/dist-server/service/pallet-count/pallet-count-query.js.map +1 -1
- package/dist-server/service/pallet-count/pallet-count.js +3 -4
- package/dist-server/service/pallet-count/pallet-count.js.map +1 -1
- package/dist-server/service/pallet-history/pallet-history-mutation.js +1 -1
- package/dist-server/service/pallet-history/pallet-history-mutation.js.map +1 -1
- package/dist-server/service/pallet-history/pallet-history-query.js +6 -8
- package/dist-server/service/pallet-history/pallet-history-query.js.map +1 -1
- package/dist-server/service/pallet-history/pallet-history.js +6 -6
- package/dist-server/service/pallet-history/pallet-history.js.map +1 -1
- package/dist-server/service/reduced-inventory-history/reduced-inventory-history.js +1 -1
- package/dist-server/service/reduced-inventory-history/reduced-inventory-history.js.map +1 -1
- package/dist-server/service/tote/tote-mutation.js +4 -4
- package/dist-server/service/tote/tote-mutation.js.map +1 -1
- package/dist-server/service/tote/tote-query.js +12 -13
- package/dist-server/service/tote/tote-query.js.map +1 -1
- package/dist-server/service/tote/tote-types.js +2 -3
- package/dist-server/service/tote/tote-types.js.map +1 -1
- package/dist-server/service/tote/tote.js +5 -5
- package/dist-server/service/tote/tote.js.map +1 -1
- package/dist-server/service/warehouse/warehouse-mutation.js +1 -1
- package/dist-server/service/warehouse/warehouse-mutation.js.map +1 -1
- package/dist-server/service/warehouse/warehouse-query.js +9 -10
- package/dist-server/service/warehouse/warehouse-query.js.map +1 -1
- package/dist-server/service/warehouse/warehouse.js +12 -12
- package/dist-server/service/warehouse/warehouse.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/utils/inventory-util.js +16 -16
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +8 -8
- package/server/controllers/ecommerce/ecommerce-controller.ts +1 -1
- package/server/controllers/ecommerce/sellercraft-controller.ts +75 -65
- package/server/controllers/warehouse-controller.ts +9 -4
- package/server/service/inventory/inventory-mutation.ts +28 -24
- package/server/service/inventory/inventory-query.ts +269 -304
- package/server/service/inventory/inventory.ts +50 -35
- package/server/service/inventory-change/inventory-change-mutation.ts +305 -256
- package/server/service/inventory-change/inventory-change-query.ts +9 -9
- package/server/service/inventory-history/inventory-history-mutation.ts +12 -15
- package/server/service/inventory-history/inventory-history-query.ts +158 -133
- package/server/service/inventory-item/inventory-item-mutation.ts +20 -17
- package/server/service/inventory-item/inventory-item-query.ts +28 -18
- package/server/service/inventory-item-change/inventory-item-change-mutation.ts +12 -9
- package/server/service/inventory-item-change/inventory-item-change-query.ts +10 -8
- package/server/service/inventory-product/inventory-product-mutation.ts +16 -12
- package/server/service/inventory-product/inventory-product-query.ts +7 -8
- package/server/service/location/location-mutation.ts +24 -24
- package/server/service/location/location-query.ts +27 -23
- package/server/service/location/location.ts +11 -10
- package/server/service/movement/movement-mutation.ts +7 -8
- package/server/service/movement/movement-query.ts +18 -16
- package/server/service/pallet/pallet-mutation.ts +18 -20
- package/server/service/pallet/pallet-query.ts +13 -14
- package/server/service/pallet-count/pallet-count-mutation.ts +20 -17
- package/server/service/pallet-count/pallet-count-query.ts +6 -7
- package/server/service/pallet-history/pallet-history-mutation.ts +15 -15
- package/server/service/pallet-history/pallet-history-query.ts +7 -8
- package/server/service/reduced-inventory-history/reduced-inventory-history.ts +1 -1
- package/server/service/tote/tote-mutation.ts +23 -22
- package/server/service/tote/tote-query.ts +18 -14
- package/server/service/warehouse/warehouse-mutation.ts +21 -18
- package/server/service/warehouse/warehouse-query.ts +11 -11
- package/server/service/warehouse/warehouse.ts +7 -7
- package/server/utils/inventory-util.ts +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inventory-change-mutation.js","sourceRoot":"","sources":["../../../server/service/inventory-change/inventory-change-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { EntityManager, In, MoreThan, Not } from 'typeorm'\n\nimport { Privilege, User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { generateId } from '@things-factory/id-rule-base'\nimport { MarketplaceStore } from '@things-factory/integration-marketplace'\nimport { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'\nimport { sendNotification } from '@things-factory/notification'\nimport { Product } from '@things-factory/product-base'\nimport { PartnerSetting, Setting } from '@things-factory/setting-base'\nimport { Domain } from '@things-factory/shell'\n\nimport { INVENTORY_ITEM_CHANGE_TYPE, INVENTORY_ITEM_SOURCE, INVENTORY_STATUS, LOCATION_STATUS } from '../../constants'\nimport { EcommerceController, SellercraftController } from '../../controllers'\nimport { InventoryNoGenerator } from '../../utils'\nimport { InventoryHistory } from '../inventory-history/inventory-history'\nimport { InventoryItemChange } from '../inventory-item-change/inventory-item-change'\nimport { InventoryItem } from '../inventory-item/inventory-item'\nimport { checkExistingSerialNumber } from '../inventory-item/inventory-item-query'\nimport { Inventory } from '../inventory/inventory'\nimport { InventoryPatch } from '../inventory/inventory-types'\nimport { Location } from '../location/location'\nimport { InventoryChange } from './inventory-change'\nimport { InventoryChangeList, InventoryChangePatch, NewInventoryChange } from './inventory-change-types'\n\n@Resolver(InventoryChange)\nexport class InventoryChangeMutation {\n @Directive('@transaction')\n @Mutation(returns => InventoryChange)\n async createInventoryChange(\n @Arg('inventoryChange') inventoryChange: NewInventoryChange,\n @Ctx() context: any\n ): Promise<InventoryChange> {\n const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state\n\n return await tx.getRepository(InventoryChange).save({\n ...inventoryChange,\n domain: domain,\n creator: user,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => InventoryChange)\n async updateInventoryChange(\n @Arg('name') name: string,\n @Arg('patch') patch: InventoryChangePatch,\n @Ctx() context: any\n ): Promise<InventoryChange> {\n const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state\n\n const repository = tx.getRepository(InventoryChange)\n const inventoryChange = await repository.findOne({\n where: { domain: domain, name }\n })\n\n return await repository.save({\n ...inventoryChange,\n ...patch,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => [InventoryChange])\n async updateMultipleInventoryChange(\n @Arg('patches', type => [InventoryChangePatch]) patches: InventoryChangePatch[],\n @Ctx() context: any\n ): Promise<InventoryChange[]> {\n const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const inventoryChangeRepo = tx.getRepository(InventoryChange)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await inventoryChangeRepo.save({\n ...newRecord,\n domain: domain,\n creator: user,\n updater: user\n })\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const newRecord = _updateRecords[i]\n const inventoryChange = await inventoryChangeRepo.findOne(newRecord.id)\n\n const result = await inventoryChangeRepo.save({\n ...inventoryChange,\n ...newRecord,\n updater: user\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteInventoryChange(@Arg('name') name: string, @Ctx() context: any): Promise<Boolean> {\n const { domain, tx }: { domain: Domain; tx: EntityManager } = context.state\n\n await tx.getRepository(InventoryChange).delete({ domain: domain, name })\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteInventoryChanges(@Arg('names', type => [String]) names: string[], @Ctx() context: any): Promise<Boolean> {\n const { domain, tx }: { domain: Domain; tx: EntityManager } = context.state\n\n await tx.getRepository(InventoryChange).delete({\n domain: domain,\n name: In(names)\n })\n return true\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async submitInventoryChanges(\n @Arg('patches', type => [InventoryPatch]) patches: InventoryPatch[],\n @Ctx() context: any\n ) {\n const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state\n\n const _createRecords = []\n const _updateRecords = []\n\n for (let i = 0; i < patches.length; i++) {\n let foundExistingPallet = await tx.getRepository(Inventory).findOne({\n where: { domain, palletId: patches[i]?.palletId }\n })\n\n if (!foundExistingPallet) {\n foundExistingPallet = await tx.getRepository(Inventory).findOne({\n where: { id: patches[i]?.id }\n })\n }\n\n const invLockedQty: number = foundExistingPallet?.lockedQty == null ? 0 : foundExistingPallet?.lockedQty\n\n if (patches[i]?.qty < invLockedQty) {\n throw new Error(\n 'Adjusted qty value should not be lower than released qty, kindly contact our support if you have difficulties'\n )\n }\n\n if (foundExistingPallet) {\n delete patches[i].serialNumbers\n _updateRecords.push(patches[i])\n } else {\n _createRecords.push(patches[i])\n }\n }\n\n const inventoryChangeRepo = tx.getRepository(InventoryChange)\n const inventoryItemChangeRepo = tx.getRepository(InventoryItemChange)\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n var location = await tx.getRepository(Location).findOne({\n where: { id: newRecord.location.id },\n relations: ['warehouse']\n })\n newRecord.location = location\n newRecord.zone = location.zone\n newRecord.warehouse = location.warehouse\n\n newRecord.bizplace = await tx.getRepository(Bizplace).findOne(newRecord.bizplace.id)\n\n var product: Product = await tx.getRepository(Product).findOne(newRecord.product.id)\n newRecord.product = product\n\n newRecord.status = 'PENDING'\n newRecord.transactionType = 'NEW'\n\n newRecord.expirationDate =\n ((newRecord?.expirationDate && new Date(newRecord.expirationDate).getFullYear()) || 0) < 2000\n ? null\n : newRecord.expirationDate\n\n const newInventoryChange: InventoryChange = await inventoryChangeRepo.save({\n ...newRecord,\n id: undefined,\n name: InventoryNoGenerator.inventoryName(),\n domain: domain,\n creator: user,\n updater: user\n })\n\n if (newRecord?.serialNumbers) {\n let serialNumbers: string = newRecord.serialNumbers\n let newSerialNumbers: any = serialNumbers.split(',')\n let inventoryItemChanges: InventoryItemChange[] = []\n\n for (let i = 0; i < newSerialNumbers.length; i++) {\n let newSerialNumber: string = newSerialNumbers[i]\n let inventoryItemChange: any = {\n serialNumber: newSerialNumber,\n type: INVENTORY_ITEM_CHANGE_TYPE.NEW\n }\n\n inventoryItemChanges.push(inventoryItemChange)\n }\n\n newRecord.inventoryItemChangesJson = JSON.stringify(inventoryItemChanges)\n }\n\n // create new inventory items\n if (newRecord?.inventoryItemChangesJson) {\n const inventoryItemChanges: InventoryItemChange[] = JSON.parse(newRecord.inventoryItemChangesJson)\n if (product?.isRequireSerialNumberScanningInbound) {\n if (inventoryItemChanges?.length != newRecord?.qty) {\n throw new Error('Serial Numbers not tally with quantity')\n }\n }\n\n let newInventoryItemChanges: InventoryItemChange[] = []\n\n inventoryItemChanges.map(inventoryItemChange => {\n let newInventoryItemChange: InventoryItemChange = new InventoryItemChange()\n newInventoryItemChange.name = InventoryNoGenerator.inventoryName()\n newInventoryItemChange.serialNumber = inventoryItemChange.serialNumber\n newInventoryItemChange.type = inventoryItemChange.type\n newInventoryItemChange.status = newInventoryChange.status\n newInventoryItemChange.inventoryItem =\n newInventoryItemChange?.type == INVENTORY_ITEM_CHANGE_TYPE.NEW\n ? null\n : newInventoryItemChange.inventoryItem\n newInventoryItemChange.inventoryChange = newInventoryChange\n newInventoryItemChange.domain = domain\n newInventoryItemChange.creator = user\n newInventoryItemChange.updater = user\n\n newInventoryItemChanges.push(newInventoryItemChange)\n })\n\n await inventoryItemChangeRepo.save(newInventoryItemChanges)\n }\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const updateRecord = _updateRecords[i]\n\n let existingRecord = await tx.getRepository(Inventory).findOne({\n where: { domain, palletId: updateRecord?.palletId },\n relations: ['location', 'warehouse', 'product', 'bizplace']\n })\n\n if (!existingRecord) {\n existingRecord = await tx.getRepository(Inventory).findOne({\n where: { domain, id: updateRecord?.id },\n relations: ['location', 'warehouse', 'product', 'bizplace']\n })\n }\n\n if (!!updateRecord?.location?.id) {\n var location = await tx.getRepository(Location).findOne({\n where: { id: updateRecord.location.id },\n relations: ['warehouse']\n })\n updateRecord.location = location\n updateRecord.zone = location.zone\n updateRecord.warehouse = location.warehouse\n }\n\n if (!!updateRecord?.bizplace?.id)\n updateRecord.bizplace = await tx.getRepository(Bizplace).findOne(updateRecord.bizplace.id)\n\n let product: Product\n\n if (!!updateRecord?.product?.id) {\n product = await tx.getRepository(Product).findOne(updateRecord.product.id)\n updateRecord.product = product\n } else {\n product = existingRecord.product\n }\n\n updateRecord.transactionType == 'MISSING'\n ? (updateRecord.transactionType = 'MISSING')\n : (updateRecord.transactionType = 'CHANGES')\n\n updateRecord.status = 'PENDING'\n\n updateRecord.expirationDate =\n ((updateRecord?.expirationDate && new Date(updateRecord.expirationDate).getFullYear()) || 0) < 2000\n ? null\n : updateRecord.expirationDate\n\n const updatedInventoryChange: InventoryChange = await inventoryChangeRepo.save({\n palletId: existingRecord.palletId,\n ...updateRecord,\n id: undefined,\n name: InventoryNoGenerator.inventoryName(),\n inventory: existingRecord,\n domain: domain,\n creator: user,\n updater: user\n })\n\n // create new inventory items\n if (updateRecord?.inventoryItemChangesJson) {\n const originalInventoryItems: InventoryItem[] = await tx.getRepository(InventoryItem).find({\n where: { domain, inventory: existingRecord }\n })\n const inventoryItemChanges: InventoryItemChange[] = JSON.parse(updateRecord.inventoryItemChangesJson)\n if (product?.isRequireSerialNumberScanningInbound) {\n const combinedInventoryItems: any[] = [...originalInventoryItems, ...inventoryItemChanges]\n let qty: number = updateRecord?.qty ? updateRecord.qty : existingRecord.qty\n if (combinedInventoryItems?.length != qty) {\n throw new Error('Serial Numbers not tally with quantity')\n }\n }\n\n let newInventoryItemChanges: InventoryItemChange[] = []\n\n inventoryItemChanges.map(inventoryItemChange => {\n let newInventoryItemChange: InventoryItemChange = new InventoryItemChange()\n newInventoryItemChange.name = InventoryNoGenerator.inventoryName()\n newInventoryItemChange.serialNumber = inventoryItemChange.serialNumber\n newInventoryItemChange.type = inventoryItemChange.type\n newInventoryItemChange.status = updatedInventoryChange.status\n newInventoryItemChange.inventory = updatedInventoryChange.inventory\n newInventoryItemChange.inventoryItem =\n newInventoryItemChange?.type == INVENTORY_ITEM_CHANGE_TYPE.NEW\n ? null\n : newInventoryItemChange.inventoryItem\n newInventoryItemChange.inventoryChange = updatedInventoryChange\n newInventoryItemChange.domain = domain\n newInventoryItemChange.creator = user\n newInventoryItemChange.updater = user\n\n newInventoryItemChanges.push(newInventoryItemChange)\n })\n\n await inventoryItemChangeRepo.save(newInventoryItemChanges)\n }\n }\n }\n\n const notificationApprover: any = await tx\n .getRepository(Privilege)\n .createQueryBuilder('p')\n .select('u.*')\n .addSelect('r.*')\n .innerJoin('p.roles', 'r')\n .innerJoin('r.users', 'u')\n .where('p.name = :name', { name: 'mutation' })\n .andWhere('p.category = :category', { category: 'inventory' })\n .andWhere('r.domain_id = :domainId', { domainId: domain.id })\n .groupBy('u.id')\n .addGroupBy('r.id')\n .getRawMany()\n\n if (_updateRecords.some(res => res.transactionType == 'MISSING')) {\n if (notificationApprover?.length && context.header?.referer) {\n const receivers: any[] = notificationApprover.map(user => user.id)\n const msg = {\n title: `Missing stock identified. Review this transaction in Inventory Adjustment Approval.`,\n body: ``,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n await sendNotification({\n receivers,\n message: { ...msg }\n })\n }\n } else {\n if (notificationApprover?.length && context.header?.referer) {\n const receivers: any[] = notificationApprover.map(user => user.id)\n const msg = {\n title: `There is an inventory adjustment pending for approval, kindly review within 1 hour to avoid any operation conflict.`,\n body: ``,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n await sendNotification({\n receivers,\n message: { ...msg }\n })\n }\n }\n\n return true\n }\n\n @Directive('@privilege(category: \"inventory_adjustment_approval\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => InventoryChangeList)\n async approveInventoryChanges(\n @Arg('patches', type => [InventoryChangePatch]) patches: InventoryChangePatch[],\n @Ctx() context: any\n ): Promise<InventoryChangeList> {\n const inventoryChangeList = await approveInventoryChanges(patches, context)\n\n return inventoryChangeList\n }\n\n @Directive('@privilege(category: \"inventory_adjustment_approval\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async rejectInventoryChanges(\n @Arg('patches', type => [InventoryChangePatch]) patches: InventoryChangePatch[],\n @Ctx() context: any\n ): Promise<Boolean> {\n const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state\n\n const _inventoryChanges = await tx.getRepository(InventoryChange).find({\n where: { id: In(patches.map(item => item.id)) },\n relations: [\n 'inventory',\n 'inventory.bizplace',\n 'inventory.product',\n 'inventory.location',\n 'inventory.warehouse',\n 'bizplace',\n 'product',\n 'location'\n ]\n })\n\n if (_inventoryChanges.length > 0) {\n for (let i = 0; i < _inventoryChanges.length; i++) {\n if (_inventoryChanges[i].status.toLocaleLowerCase() != 'pending') return true\n _inventoryChanges[i].status = 'REJECTED'\n\n // Get last row of InventoryHistory\n let latestEntry = await tx.getRepository(InventoryHistory).find({\n where: { palletId: _inventoryChanges[i].palletId, domain: domain },\n order: { seq: 'DESC' },\n take: 1\n })\n\n if (latestEntry.length > 0) _inventoryChanges[i].lastInventoryHistory = latestEntry[0]\n\n await upsertInventoryItems(context, _inventoryChanges[i], 'REJECTED', tx)\n }\n\n await tx.getRepository(InventoryChange).save(_inventoryChanges.filter(change => change.status == 'REJECTED'))\n }\n return true\n }\n}\n\nfunction clean(obj) {\n var propNames = Object.getOwnPropertyNames(obj)\n for (var i = 0; i < propNames.length; i++) {\n var propName = propNames[i]\n if (obj[propName] === null || obj[propName] === undefined) {\n delete obj[propName]\n }\n }\n}\n\nasync function upsertInventoryItems(context, inventoryChange, approvalStatus, tx) {\n const { domain, user }: { domain: Domain; user: User } = context.state\n\n let inventoryItemChanges: InventoryItemChange[] = await tx.getRepository(InventoryItemChange).find({\n where: { domain, inventoryChange: inventoryChange, status: 'PENDING' },\n relations: ['domain', 'inventoryItem', 'inventory', 'inventory.product', 'inventoryChange']\n })\n await Promise.all(\n inventoryItemChanges.map(async inventoryItemChange => {\n let inventoryItem: InventoryItem = new InventoryItem()\n if (approvalStatus == 'APPROVED') {\n const changeType: string = inventoryItemChange.type\n const existingInventoryItem: InventoryItem = inventoryItemChange.inventoryItem\n if (changeType == INVENTORY_ITEM_CHANGE_TYPE.NEW) {\n const foundSerialNumber: Boolean = await checkExistingSerialNumber(\n inventoryItemChange.serialNumber,\n inventoryChange.inventory.product,\n context,\n inventoryChange.inventory,\n tx\n )\n\n if (foundSerialNumber) throw new Error(`Serial number ${inventoryItemChange.serialNumber} is duplicated`)\n\n inventoryItem.name = InventoryNoGenerator.inventoryName()\n inventoryItem.serialNumber = inventoryItemChange.serialNumber\n inventoryItem.status = INVENTORY_STATUS.STORED\n inventoryItem.product = inventoryChange.inventory.product\n inventoryItem.domain = inventoryItemChange.domain\n inventoryItem.inventory = inventoryChange.inventory\n inventoryItem.source = INVENTORY_ITEM_SOURCE.ADJUSTMENT\n inventoryItem.creator = user\n inventoryItem.updater = user\n } else if (changeType == INVENTORY_ITEM_CHANGE_TYPE.MODIFIED) {\n const foundSerialNumber: Boolean = await checkExistingSerialNumber(\n inventoryItemChange.serialNumber,\n inventoryItemChange.inventory.product,\n context,\n inventoryItemChange.inventory,\n tx\n )\n\n if (foundSerialNumber) throw new Error(`Serial number ${inventoryItemChange.serialNumber} is duplicated`)\n\n inventoryItem = {\n ...existingInventoryItem,\n serialNumber: inventoryItemChange.serialNumber,\n product: inventoryItemChange.inventory.product\n }\n } else if (changeType == INVENTORY_ITEM_CHANGE_TYPE.REMOVED) {\n inventoryItem = {\n ...existingInventoryItem,\n status: INVENTORY_STATUS.DELETED\n }\n }\n\n inventoryItem = await tx.getRepository(InventoryItem).save(inventoryItem)\n }\n\n await tx\n .getRepository(InventoryItemChange)\n .update({ id: inventoryItemChange.id }, { status: approvalStatus, inventoryItem })\n })\n )\n}\n\nexport async function approveInventoryChanges(patches: any, context: any) {\n const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state\n\n // Get Selected Inventory Change Data\n const _inventoryChanges = await tx.getRepository(InventoryChange).find({\n where: { id: In(patches.map(item => item.id)) },\n relations: [\n 'inventory',\n 'inventory.bizplace',\n 'inventory.bizplace.domain',\n 'inventory.product',\n 'inventory.location',\n 'inventory.warehouse',\n 'bizplace',\n 'bizplace.domain',\n 'bizplace.company',\n 'bizplace.company.domain',\n 'product',\n 'product.productDetails',\n 'product.productDetails.childProductDetail',\n 'location'\n ],\n order: {\n createdAt: 'ASC'\n }\n })\n\n let arrLockedInventory: InventoryChange[] = []\n\n if (_inventoryChanges.length > 0) {\n let today = new Date(),\n year = today.getFullYear(),\n month = today.getMonth(),\n date = today.getDate()\n\n for (let i = 0; i < _inventoryChanges.length; i++) {\n if (_inventoryChanges[i].status.toLocaleLowerCase() != 'pending') continue\n\n const newRecord: any = { ..._inventoryChanges[i] },\n newHistoryRecord: any = { ..._inventoryChanges[i] }\n\n // Adjustment of existing Inventory\n if (_inventoryChanges[i].inventory != null) {\n let inventoryId = _inventoryChanges[i].inventory.id\n let inventory: Inventory = await tx.getRepository(Inventory).findOne({\n where: { id: inventoryId },\n relations: [\n 'domain',\n 'bizplace',\n 'bizplace.domain',\n 'bizplace.company',\n 'bizplace.company.domain',\n 'product',\n 'product.productDetails',\n 'product.productDetails.childProductDetail',\n 'warehouse',\n 'location',\n 'creator',\n 'updater'\n ]\n })\n\n const customerDomain: Domain = inventory.bizplace.domain\n\n // Check for locked inventory, and stop from udpating inventory\n if (inventory.qty < inventory.lockedQty) {\n arrLockedInventory.push(_inventoryChanges[i])\n continue\n }\n\n // Check for Terminated inventory, then update InventoryChange entity, and stop from udpating inventory\n if (inventory.status == INVENTORY_STATUS.TERMINATED) {\n _inventoryChanges[i] = { ..._inventoryChanges[i], status: 'TERMINATED' }\n continue\n }\n\n let lastSeq = inventory.lastSeq,\n transactionType = ''\n\n newHistoryRecord.openingQty = inventory.qty\n newHistoryRecord.openingUomValue = inventory.uomValue\n\n // Get last row of InventoryHistory\n let latestEntry = await tx.getRepository(InventoryHistory).findOne({\n where: { palletId: inventory.palletId, domain: domain },\n order: { seq: 'DESC' }\n })\n _inventoryChanges[i].lastInventoryHistory = latestEntry\n\n // Check Change of existing inventory location\n if (newRecord.location && newRecord.location.id != inventory.location.id) {\n newRecord.zone = newRecord.location.zone\n newRecord.warehouse = newRecord.location.warehouse\n transactionType = 'ADJUSTMENT'\n\n // Check and set current location status\n let currentLocationInventoryCount = await tx.getRepository(Inventory).count({\n where: { location: inventory.location, status: 'STORED', id: Not(inventory.id) }\n })\n\n if (currentLocationInventoryCount == 0) {\n let currentLocation = await tx.getRepository(Location).findOne({\n where: { id: inventory.location.id }\n })\n await tx.getRepository(Location).save({\n ...currentLocation,\n status: LOCATION_STATUS.EMPTY\n })\n }\n }\n\n // Check Change of existing inventory quantity\n if (newRecord.qty != null && newRecord.qty != inventory.qty) {\n newHistoryRecord.qty = newRecord.qty - inventory.qty\n if (newRecord.qty < 1) {\n newRecord.qty = 0\n newRecord.uomValue = 0\n }\n transactionType = 'ADJUSTMENT'\n } else {\n newHistoryRecord.qty = 0\n }\n\n // Check Change of existing inventory uomValue\n if (newRecord.uomValue != null && newRecord.uomValue != inventory.uomValue) {\n newHistoryRecord.uomValue = newRecord.uomValue - inventory.uomValue\n Math.round(newHistoryRecord.uomValue * 100) / 100\n transactionType = 'ADJUSTMENT'\n } else {\n newHistoryRecord.uomValue = 0\n }\n\n // Terminate current inventory history if there is change of bizplace, product, batchId, packingType, or uom\n if (\n (newRecord.bizplace && inventory.bizplace.id !== newRecord.bizplace.id) ||\n (newRecord.product && inventory.product.id !== newRecord.product.id) ||\n (newRecord.batchId && inventory.batchId !== newRecord.batchId) ||\n (newRecord.packingType && inventory.packingType !== newRecord.packingType) ||\n (newRecord.uom && inventory.uom !== newRecord.uom)\n ) {\n transactionType = 'ADJUSTMENT'\n lastSeq = lastSeq + 1\n let inventoryHistory = {\n ...inventory,\n domain: domain,\n bizplace: inventory.bizplace.id,\n openingQty: inventory.qty,\n openingUomValue: inventory.uomValue,\n qty: -inventory.qty || 0,\n uom: inventory.uom,\n uomValue: -inventory.uomValue || 0,\n name: InventoryNoGenerator.inventoryHistoryName(),\n seq: lastSeq,\n transactionType: transactionType,\n status: INVENTORY_STATUS.TERMINATED,\n productId: inventory.product.id,\n warehouseId: inventory.warehouse.id,\n locationId: inventory.location.id,\n packingType: inventory.packingType,\n creator: user,\n updater: user\n }\n delete inventoryHistory.id\n delete inventoryHistory.createdAt\n delete inventoryHistory.updatedAt\n await tx.getRepository(InventoryHistory).save(inventoryHistory as any)\n newHistoryRecord.qty = newRecord.qty != null ? newRecord.qty : inventory.qty || 0\n newHistoryRecord.uomValue = newRecord.uomValue != null ? newRecord.uomValue : inventory.uomValue || 0\n newHistoryRecord.openingQty = 0\n newHistoryRecord.openingUomValue = 0\n }\n\n // Set and update inventory and inventory history data\n lastSeq = lastSeq + 1\n clean(newHistoryRecord)\n let inventoryHistory = {\n ...inventory,\n ...newHistoryRecord,\n domain: domain,\n creator: user,\n updater: user,\n name: InventoryNoGenerator.inventoryHistoryName(),\n status: newHistoryRecord.transactionType == 'MISSING' ? 'MISSING' : 'STORED',\n seq: lastSeq,\n transactionType: transactionType == '' ? 'ADJUSTMENT' : transactionType,\n productId: newRecord.product ? newRecord.product.id : inventory.product.id,\n warehouseId: newRecord.warehouse ? newRecord.warehouse.id : inventory.warehouse.id,\n locationId:\n newRecord.location && newRecord.location.id != inventory.location.id\n ? newRecord.location.id\n : inventory.location.id,\n uom: newRecord.uom != null ? newRecord.uom : inventory.uom\n }\n delete inventoryHistory.id\n delete inventoryHistory.createdAt\n delete inventoryHistory.updatedAt\n await tx.getRepository(InventoryHistory).save(inventoryHistory)\n\n if (newRecord.qty != null && newRecord.qty == 0) {\n ++lastSeq\n delete inventoryHistory.id\n inventoryHistory = {\n ...inventoryHistory,\n name: InventoryNoGenerator.inventoryHistoryName(),\n qty: 0,\n uomValue: 0,\n openingQty: 0,\n openingUomValue: 0,\n seq: lastSeq,\n transactionType: 'TERMINATED',\n status: 'TERMINATED'\n }\n\n await tx.getRepository(InventoryHistory).save(inventoryHistory)\n }\n\n clean(newRecord)\n let statusFilter = ''\n if (newRecord.transactionType == 'MISSING') {\n statusFilter = 'MISSING'\n } else {\n statusFilter = (newRecord.qty != null ? newRecord.qty : inventory.qty) > 0 ? 'STORED' : 'TERMINATED'\n }\n await tx.getRepository(Inventory).save({\n ...inventory,\n ...newRecord,\n id: inventoryId,\n status: statusFilter,\n updater: user,\n lastSeq: lastSeq\n })\n\n //Check and set latest location status\n if (newRecord.qty != null ? newRecord.qty : inventory.qty > 0) {\n var location = await tx.getRepository(Location).findOne({\n where: { id: newRecord.location ? newRecord.location.id : inventory.location.id }\n })\n await tx.getRepository(Location).save({\n ...location,\n status: LOCATION_STATUS.OCCUPIED\n })\n } else {\n let latestLocationInventoryCount = await tx.getRepository(Inventory).count({\n where: {\n location: newRecord.location ? newRecord.location.id : inventory.location.id,\n status: 'STORED',\n id: Not(inventory.id)\n }\n })\n if (latestLocationInventoryCount == 0) {\n let latestLocation = await tx.getRepository(Location).findOne({\n where: { id: newRecord.location ? newRecord.location.id : inventory.location.id }\n })\n await tx.getRepository(Location).save({\n ...latestLocation,\n status: LOCATION_STATUS.EMPTY\n })\n }\n }\n\n await upsertInventoryItems(context, _inventoryChanges[i], 'APPROVED', tx)\n\n const companyDomain: Domain = inventory.bizplace?.company.domain\n\n const sellercraft: Sellercraft = await tx\n .getRepository(Sellercraft)\n .findOne({ where: { domain: customerDomain, status: SellercraftStatus.ACTIVE }, relations: ['domain'] })\n\n if (sellercraft) {\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n await sellercraftCtrl.updateSellercraftStock(sellercraft, inventory)\n if (newRecord?.product || newRecord?.bizplace) {\n if (!newRecord?.product) newRecord.product = inventory.product\n\n await sellercraftCtrl.updateSellercraftStock(sellercraft, newRecord)\n }\n }\n\n // check for any existing active marketplace connection, update marketplace selling qty\n const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({\n where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },\n relations: ['marketplaceDistributors']\n })\n\n if (marketplaceStores?.length && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {\n const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)\n await ecommerceCtrl.updateProductVariationStock(marketplaceStores, inventory.product.id, companyDomain)\n\n if (newRecord?.product || newRecord?.bizplace)\n await ecommerceCtrl.updateProductVariationStock(marketplaceStores, newRecord.product.id, companyDomain)\n }\n }\n\n // Adding Inventory\n else {\n const total = await tx.getRepository(Inventory).count({\n createdAt: MoreThan(new Date(year, month, date))\n })\n\n const yy = String(year).substr(String(year).length - 2)\n const mm = String(month + 1).padStart(2, '0')\n const dd = String(date).padStart(2, '0')\n\n const dateStr = yy + mm + dd\n\n let palletId = newRecord.palletId\n\n if (!newRecord.palletId?.trim()) {\n palletId = await generateId({\n domain: domain,\n type: 'adjustment_pallet_id',\n seed: {\n batchId: newRecord.batchId,\n date: dateStr\n }\n })\n if (!palletId) throw new Error('No adjustment pallet id setting rule found')\n }\n\n var location = await tx.getRepository(Location).findOne({\n where: { id: newRecord.location.id },\n relations: ['warehouse']\n })\n newRecord.location = location\n newRecord.zone = location.zone\n newRecord.warehouse = location.warehouse\n\n newRecord.status = INVENTORY_STATUS.STORED\n newRecord.name = palletId\n newRecord.palletId = palletId\n\n const warehouseCartonSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain, category: 'id-rule', name: 'enable-carton-label' }\n })\n\n const partnerCartonSetting: PartnerSetting = await tx.getRepository(PartnerSetting).findOne({\n where: { setting: warehouseCartonSetting, domain, partnerDomain: newRecord.bizplace?.domain }\n })\n\n if (partnerCartonSetting?.value) {\n let cartonId = await generateId({\n domain: domain,\n type: 'adjustment_carton_id',\n seed: { date: dateStr }\n })\n if (!cartonId) throw new Error('No adjustment carton id setting rule found')\n\n newRecord.cartonId = cartonId\n }\n\n let expirationDate =\n ((newRecord?.expirationDate && new Date(newRecord.expirationDate).getFullYear()) || 0) < 2000\n ? null\n : newRecord.expirationDate\n\n let savedInventory = await tx.getRepository(Inventory).save({\n ...newRecord,\n expirationDate,\n domain: domain,\n creator: user,\n updater: user,\n lastSeq: 0\n })\n\n await tx.getRepository(InventoryHistory).save({\n ...newRecord,\n domain: domain,\n creator: user,\n updater: user,\n name: InventoryNoGenerator.inventoryHistoryName(),\n seq: 0,\n transactionType: 'NEW',\n productId: newRecord.product.id,\n warehouseId: newRecord.warehouse.id,\n locationId: newRecord.location.id,\n inventory: savedInventory,\n expirationDate: expirationDate\n })\n\n await tx.getRepository(Location).save({\n ...location,\n status: LOCATION_STATUS.OCCUPIED\n })\n\n _inventoryChanges[i].inventory = savedInventory\n _inventoryChanges[i].palletId = savedInventory.palletId\n\n await upsertInventoryItems(context, _inventoryChanges[i], 'APPROVED', tx)\n\n const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({\n where: { domain: newRecord.bizplace.domain, status: SellercraftStatus.ACTIVE },\n relations: ['domain']\n })\n\n const companyDomain: Domain = newRecord.bizplace?.company.domain\n\n if (sellercraft) {\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n await sellercraftCtrl.updateSellercraftStock(sellercraft, newRecord)\n }\n\n // update marketplace store qty\n // check for any existing active marketplace connection, update marketplace selling qty\n const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({\n where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },\n relations: ['marketplaceDistributors']\n })\n\n if (marketplaceStores?.length && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {\n const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)\n await ecommerceCtrl.updateProductVariationStock(marketplaceStores, newRecord.product.id, companyDomain)\n }\n }\n\n _inventoryChanges[i].status = 'APPROVED'\n }\n\n await tx.getRepository(InventoryChange).save(_inventoryChanges)\n }\n\n return { items: arrLockedInventory, total: arrLockedInventory.length }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"inventory-change-mutation.js","sourceRoot":"","sources":["../../../server/service/inventory-change/inventory-change-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { In, MoreThan, Not } from 'typeorm'\n\nimport { Bizplace } from '@things-factory/biz-base'\nimport { generateId } from '@things-factory/id-rule-base'\nimport { MarketplaceStore } from '@things-factory/integration-marketplace'\nimport { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'\nimport { Product } from '@things-factory/product-base'\nimport { PartnerSetting, Setting } from '@things-factory/setting-base'\nimport { Domain } from '@things-factory/shell'\n\nimport { INVENTORY_ITEM_CHANGE_TYPE, INVENTORY_ITEM_SOURCE, INVENTORY_STATUS, LOCATION_STATUS } from '../../constants'\nimport { EcommerceController, SellercraftController } from '../../controllers'\nimport { InventoryNoGenerator } from '../../utils'\nimport { InventoryHistory } from '../inventory-history/inventory-history'\nimport { InventoryItemChange } from '../inventory-item-change/inventory-item-change'\nimport { InventoryItem } from '../inventory-item/inventory-item'\nimport { checkExistingSerialNumber } from '../inventory-item/inventory-item-query'\nimport { Inventory } from '../inventory/inventory'\nimport { InventoryPatch } from '../inventory/inventory-types'\nimport { Location } from '../location/location'\nimport { InventoryChange } from './inventory-change'\nimport { InventoryChangeList, InventoryChangePatch, NewInventoryChange } from './inventory-change-types'\n\n@Resolver(InventoryChange)\nexport class InventoryChangeMutation {\n @Directive('@transaction')\n @Mutation(returns => InventoryChange)\n async createInventoryChange(\n @Arg('inventoryChange') inventoryChange: NewInventoryChange,\n @Ctx() context: ResolverContext\n ): Promise<InventoryChange> {\n const { domain, user, tx } = context.state\n\n return await tx.getRepository(InventoryChange).save({\n ...inventoryChange,\n domain: domain,\n creator: user,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => InventoryChange)\n async updateInventoryChange(\n @Arg('name') name: string,\n @Arg('patch') patch: InventoryChangePatch,\n @Ctx() context: ResolverContext\n ): Promise<InventoryChange> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(InventoryChange)\n const inventoryChange = await repository.findOne({\n where: { domain: domain, name }\n })\n\n return await repository.save({\n ...inventoryChange,\n ...patch,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => [InventoryChange])\n async updateMultipleInventoryChange(\n @Arg('patches', type => [InventoryChangePatch]) patches: InventoryChangePatch[],\n @Ctx() context: ResolverContext\n ): Promise<InventoryChange[]> {\n const { domain, user, tx } = context.state\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const inventoryChangeRepo = tx.getRepository(InventoryChange)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await inventoryChangeRepo.save({\n ...newRecord,\n domain: domain,\n creator: user,\n updater: user\n })\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const newRecord = _updateRecords[i]\n const inventoryChange = await inventoryChangeRepo.findOneBy({ id: newRecord.id })\n\n const result = await inventoryChangeRepo.save({\n ...inventoryChange,\n ...newRecord,\n updater: user\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteInventoryChange(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(InventoryChange).delete({ domain: domain, name })\n return true\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteInventoryChanges(\n @Arg('names', type => [String]) names: string[],\n @Ctx() context: ResolverContext\n ): Promise<Boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(InventoryChange).delete({\n domain: domain,\n name: In(names)\n })\n return true\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async submitInventoryChanges(\n @Arg('patches', type => [InventoryPatch]) patches: InventoryPatch[],\n @Ctx() context: ResolverContext\n ) {\n const { domain, user, tx } = context.state\n try {\n const _createRecords = []\n const _updateRecords = []\n\n for (let i = 0; i < patches.length; i++) {\n let foundExistingPallet = await tx\n .getRepository(Inventory)\n .createQueryBuilder('iv')\n .where('iv.domain_id = :domain_id', { domain_id: domain.id })\n .andWhere('(iv.pallet_id = :pallet_id or iv.id = :id)', {\n pallet_id: patches[i]?.palletId,\n id: patches[i]?.id\n })\n .getOne()\n\n //remove any unchanged records\n for (const [key, value] of Object.entries(patches[i])) {\n if (foundExistingPallet && key != 'id' && key != 'cuFlag' && value == foundExistingPallet[key]) {\n delete patches[i][key]\n }\n }\n\n // skip process when no processable data found\n if (Object.keys(patches[i]).filter(x => x != 'id' && x != 'cuFlag').length == 0) {\n continue\n }\n\n const invLockedQty: number = foundExistingPallet?.lockedQty == null ? 0 : foundExistingPallet?.lockedQty\n\n if (patches[i]?.qty < invLockedQty) {\n throw new Error(\n 'Adjusted qty value should not be lower than released qty, kindly contact our support for assistance'\n )\n }\n\n if (foundExistingPallet) {\n delete patches[i].serialNumbers\n _updateRecords.push(patches[i])\n } else {\n _createRecords.push(patches[i])\n }\n }\n\n const inventoryChangeRepo = tx.getRepository(InventoryChange)\n const inventoryItemChangeRepo = tx.getRepository(InventoryItemChange)\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n var location = await tx.getRepository(Location).findOne({\n where: { id: newRecord.location.id },\n relations: ['warehouse']\n })\n newRecord.location = location\n newRecord.zone = location.zone\n newRecord.warehouse = location.warehouse\n\n newRecord.bizplace = await tx.getRepository(Bizplace).findOneBy({ id: newRecord.bizplace.id })\n\n var product: Product = await tx.getRepository(Product).findOne(newRecord.product.id)\n newRecord.product = product\n\n newRecord.status = 'PENDING'\n newRecord.transactionType = 'NEW'\n\n newRecord.expirationDate =\n ((newRecord?.expirationDate && new Date(newRecord.expirationDate).getFullYear()) || 0) < 2000\n ? null\n : newRecord.expirationDate\n\n const newInventoryChange: InventoryChange = await inventoryChangeRepo.save({\n ...newRecord,\n id: undefined,\n name: InventoryNoGenerator.inventoryName(),\n domain: domain,\n creator: user,\n updater: user\n })\n\n if (newRecord?.serialNumbers) {\n let serialNumbers: string = newRecord.serialNumbers\n let newSerialNumbers: any = serialNumbers.split(',')\n let inventoryItemChanges: InventoryItemChange[] = []\n\n for (let i = 0; i < newSerialNumbers.length; i++) {\n let newSerialNumber: string = newSerialNumbers[i]\n let inventoryItemChange: any = {\n serialNumber: newSerialNumber,\n type: INVENTORY_ITEM_CHANGE_TYPE.NEW\n }\n\n inventoryItemChanges.push(inventoryItemChange)\n }\n\n newRecord.inventoryItemChangesJson = JSON.stringify(inventoryItemChanges)\n }\n\n // create new inventory items\n if (newRecord?.inventoryItemChangesJson) {\n const inventoryItemChanges: InventoryItemChange[] = JSON.parse(newRecord.inventoryItemChangesJson)\n if (product?.isRequireSerialNumberScanningInbound) {\n if (inventoryItemChanges?.length != newRecord?.qty) {\n throw new Error('Serial Numbers not tally with quantity')\n }\n }\n\n let newInventoryItemChanges: InventoryItemChange[] = []\n\n inventoryItemChanges.map(inventoryItemChange => {\n let newInventoryItemChange: InventoryItemChange = new InventoryItemChange()\n newInventoryItemChange.name = InventoryNoGenerator.inventoryName()\n newInventoryItemChange.serialNumber = inventoryItemChange.serialNumber\n newInventoryItemChange.type = inventoryItemChange.type\n newInventoryItemChange.status = newInventoryChange.status\n newInventoryItemChange.inventoryItem =\n newInventoryItemChange?.type == INVENTORY_ITEM_CHANGE_TYPE.NEW\n ? null\n : newInventoryItemChange.inventoryItem\n newInventoryItemChange.inventoryChange = newInventoryChange\n newInventoryItemChange.domain = domain\n newInventoryItemChange.creator = user\n newInventoryItemChange.updater = user\n\n newInventoryItemChanges.push(newInventoryItemChange)\n })\n\n await inventoryItemChangeRepo.save(newInventoryItemChanges)\n }\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const updateRecord = _updateRecords[i]\n\n let existingRecord = await tx.getRepository(Inventory).findOne({\n where: { domain, palletId: updateRecord?.palletId },\n relations: ['location', 'warehouse', 'product', 'bizplace']\n })\n\n if (!existingRecord) {\n existingRecord = await tx.getRepository(Inventory).findOne({\n where: { domain, id: updateRecord?.id },\n relations: ['location', 'warehouse', 'product', 'bizplace']\n })\n }\n\n if (!!updateRecord?.location?.id) {\n var location = await tx.getRepository(Location).findOne({\n where: { id: updateRecord.location.id },\n relations: ['warehouse']\n })\n updateRecord.location = location\n updateRecord.zone = location.zone\n updateRecord.warehouse = location.warehouse\n }\n\n if (!!updateRecord?.bizplace?.id)\n updateRecord.bizplace = await tx.getRepository(Bizplace).findOne(updateRecord.bizplace.id)\n\n let product: Product\n\n if (!!updateRecord?.product?.id) {\n product = await tx.getRepository(Product).findOne(updateRecord.product.id)\n updateRecord.product = product\n } else {\n product = existingRecord.product\n }\n\n updateRecord.transactionType == 'MISSING'\n ? (updateRecord.transactionType = 'MISSING')\n : (updateRecord.transactionType = 'CHANGES')\n\n updateRecord.status = 'PENDING'\n\n updateRecord.expirationDate =\n ((updateRecord?.expirationDate && new Date(updateRecord.expirationDate).getFullYear()) || 0) < 2000\n ? null\n : updateRecord.expirationDate\n\n const updatedInventoryChange: InventoryChange = await inventoryChangeRepo.save({\n palletId: existingRecord.palletId,\n ...updateRecord,\n id: undefined,\n name: InventoryNoGenerator.inventoryName(),\n inventory: existingRecord,\n domain: domain,\n creator: user,\n updater: user\n })\n\n // create new inventory items\n if (updateRecord?.inventoryItemChangesJson) {\n const originalInventoryItems: InventoryItem[] = await tx.getRepository(InventoryItem).find({\n where: { domain: { id: domain.id }, inventory: { id: existingRecord.id }, status: Not('DELETED') }\n })\n const inventoryItemChanges: InventoryItemChange[] = JSON.parse(updateRecord.inventoryItemChangesJson)\n if (product?.isRequireSerialNumberScanningInbound) {\n // const combinedInventoryItems: any[] = [...originalInventoryItems, ...inventoryItemChanges]\n let qty: number = updateRecord?.qty ? updateRecord.qty : existingRecord.qty\n\n if (originalInventoryItems.length == 0) {\n if (inventoryItemChanges.length !== qty) {\n throw new Error('Serial Numbers not tally with quantity')\n }\n } else {\n if (originalInventoryItems?.length - inventoryItemChanges.length !== qty) {\n throw new Error('Serial Numbers not tally with quantity')\n }\n }\n }\n\n let newInventoryItemChanges: InventoryItemChange[] = []\n\n inventoryItemChanges.map(inventoryItemChange => {\n let newInventoryItemChange: InventoryItemChange = new InventoryItemChange()\n newInventoryItemChange.name = InventoryNoGenerator.inventoryName()\n newInventoryItemChange.serialNumber = inventoryItemChange.serialNumber\n newInventoryItemChange.type = inventoryItemChange.type\n newInventoryItemChange.status = updatedInventoryChange.status\n newInventoryItemChange.inventory = updatedInventoryChange.inventory\n newInventoryItemChange.inventoryItem =\n newInventoryItemChange?.type == INVENTORY_ITEM_CHANGE_TYPE.NEW\n ? null\n : inventoryItemChange.inventoryItem\n newInventoryItemChange.inventoryChange = updatedInventoryChange\n newInventoryItemChange.domain = domain\n newInventoryItemChange.creator = user\n newInventoryItemChange.updater = user\n\n newInventoryItemChanges.push(newInventoryItemChange)\n })\n\n await inventoryItemChangeRepo.save(newInventoryItemChanges)\n }\n }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n // const notificationApprover: any = await tx\n // .getRepository(Privilege)\n // .createQueryBuilder('p')\n // .select('u.*')\n // .addSelect('r.*')\n // .innerJoin('p.roles', 'r')\n // .innerJoin('r.users', 'u')\n // .where('p.name = :name', { name: 'mutation' })\n // .andWhere('p.category = :category', { category: 'inventory' })\n // .andWhere('r.domain_id = :domainId', { domainId: domain.id })\n // .groupBy('u.id')\n // .addGroupBy('r.id')\n // .getRawMany()\n\n // if (_updateRecords.some(res => res.transactionType == 'MISSING')) {\n // if (notificationApprover?.length && context.header?.referer) {\n // const receivers: any[] = notificationApprover.map(user => user.id)\n // const msg = {\n // title: `Missing stock identified. Review this transaction in Inventory Adjustment Approval.`,\n // body: ``,\n // url: context.header.referer,\n // data: { url: context.header.referer }\n // }\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n // }\n // } else {\n // if (notificationApprover?.length && context.header?.referer) {\n // const receivers: any[] = notificationApprover.map(user => user.id)\n // const msg = {\n // title: `There is an inventory adjustment pending for approval, kindly review within 1 hour to avoid any operation conflict.`,\n // body: ``,\n // url: context.header.referer,\n // data: { url: context.header.referer }\n // }\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n // }\n // }\n\n return true\n } catch (error) {\n throw error\n }\n }\n\n @Directive('@privilege(category: \"inventory_adjustment_approval\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => InventoryChangeList)\n async approveInventoryChanges(\n @Arg('patches', type => [InventoryChangePatch]) patches: InventoryChangePatch[],\n @Ctx() context: ResolverContext\n ): Promise<InventoryChangeList> {\n const inventoryChangeList = await approveInventoryChanges(patches, context)\n\n return inventoryChangeList\n }\n\n @Directive('@privilege(category: \"inventory_adjustment_approval\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async rejectInventoryChanges(\n @Arg('patches', type => [InventoryChangePatch]) patches: InventoryChangePatch[],\n @Ctx() context: ResolverContext\n ): Promise<Boolean> {\n const { domain, user, tx } = context.state\n\n const _inventoryChanges = await tx.getRepository(InventoryChange).find({\n where: { id: In(patches.map(item => item.id)) },\n relations: [\n 'inventory',\n 'inventory.bizplace',\n 'inventory.product',\n 'inventory.location',\n 'inventory.warehouse',\n 'bizplace',\n 'product',\n 'location'\n ]\n })\n\n if (_inventoryChanges.length > 0) {\n for (let i = 0; i < _inventoryChanges.length; i++) {\n if (_inventoryChanges[i].status.toLocaleLowerCase() != 'pending') return true\n _inventoryChanges[i].status = 'REJECTED'\n\n // Get last row of InventoryHistory\n let latestEntry = await tx.getRepository(InventoryHistory).find({\n where: { palletId: _inventoryChanges[i].palletId, domain: domain },\n order: { seq: 'DESC' },\n take: 1\n })\n\n if (latestEntry.length > 0) _inventoryChanges[i].lastInventoryHistory = latestEntry[0]\n\n await upsertInventoryItems(context, _inventoryChanges[i], 'REJECTED', tx)\n }\n\n await tx.getRepository(InventoryChange).save(_inventoryChanges.filter(change => change.status == 'REJECTED'))\n }\n return true\n }\n}\n\nfunction clean(obj) {\n var propNames = Object.getOwnPropertyNames(obj)\n for (var i = 0; i < propNames.length; i++) {\n var propName = propNames[i]\n if (obj[propName] === null || obj[propName] === undefined) {\n delete obj[propName]\n }\n }\n}\n\nasync function upsertInventoryItems(context, inventoryChange, approvalStatus, tx) {\n const { domain, user } = context.state\n\n let inventoryItemChanges: InventoryItemChange[] = await tx.getRepository(InventoryItemChange).find({\n where: { domain: { id: domain.id }, inventoryChange: inventoryChange, status: 'PENDING' },\n relations: ['domain', 'inventoryItem', 'inventory', 'inventory.product', 'inventoryChange']\n })\n await Promise.all(\n inventoryItemChanges.map(async inventoryItemChange => {\n let inventoryItem: InventoryItem = new InventoryItem()\n if (approvalStatus == 'APPROVED') {\n const changeType: string = inventoryItemChange.type\n const existingInventoryItem: InventoryItem = inventoryItemChange.inventoryItem\n if (changeType == INVENTORY_ITEM_CHANGE_TYPE.NEW) {\n const foundSerialNumber: Boolean = await checkExistingSerialNumber(\n inventoryItemChange.serialNumber,\n inventoryChange.inventory.product,\n context,\n inventoryChange.inventory,\n tx\n )\n\n if (foundSerialNumber) throw new Error(`Serial number ${inventoryItemChange.serialNumber} is duplicated`)\n\n inventoryItem.name = InventoryNoGenerator.inventoryName()\n inventoryItem.serialNumber = inventoryItemChange.serialNumber\n inventoryItem.status = INVENTORY_STATUS.STORED\n inventoryItem.product = inventoryChange.inventory.product\n inventoryItem.domain = inventoryItemChange.domain\n inventoryItem.inventory = inventoryChange.inventory\n inventoryItem.source = INVENTORY_ITEM_SOURCE.ADJUSTMENT\n inventoryItem.creator = user\n inventoryItem.updater = user\n } else if (changeType == INVENTORY_ITEM_CHANGE_TYPE.MODIFIED) {\n const foundSerialNumber: Boolean = await checkExistingSerialNumber(\n inventoryItemChange.serialNumber,\n inventoryItemChange.inventory.product,\n context,\n inventoryItemChange.inventory,\n tx\n )\n\n if (foundSerialNumber) throw new Error(`Serial number ${inventoryItemChange.serialNumber} is duplicated`)\n\n inventoryItem = {\n ...existingInventoryItem,\n serialNumber: inventoryItemChange.serialNumber,\n product: inventoryItemChange.inventory.product\n }\n } else if (changeType == INVENTORY_ITEM_CHANGE_TYPE.REMOVED) {\n inventoryItem = {\n ...existingInventoryItem,\n status: INVENTORY_STATUS.DELETED\n }\n }\n\n inventoryItem = await tx.getRepository(InventoryItem).save(inventoryItem)\n }\n\n await tx\n .getRepository(InventoryItemChange)\n .update({ id: inventoryItemChange.id }, { status: approvalStatus, inventoryItem })\n })\n )\n}\n\nexport async function approveInventoryChanges(patches: any, context: ResolverContext) {\n const { domain, user, tx } = context.state\n\n // Get Selected Inventory Change Data\n const _inventoryChanges = await tx.getRepository(InventoryChange).find({\n where: { id: In(patches.map(item => item.id)) },\n relations: [\n 'inventory',\n 'inventory.bizplace',\n 'inventory.bizplace.domain',\n 'inventory.product',\n 'inventory.location',\n 'inventory.warehouse',\n 'bizplace',\n 'bizplace.domain',\n 'bizplace.company',\n 'bizplace.company.domain',\n 'product',\n 'product.productDetails',\n 'product.productDetails.childProductDetail',\n 'location'\n ],\n order: {\n createdAt: 'ASC'\n }\n })\n\n let arrLockedInventory: InventoryChange[] = []\n\n if (_inventoryChanges.length > 0) {\n let today = new Date(),\n year = today.getFullYear(),\n month = today.getMonth(),\n date = today.getDate()\n\n for (let i = 0; i < _inventoryChanges.length; i++) {\n if (_inventoryChanges[i].status.toLocaleLowerCase() != 'pending') continue\n\n const newRecord: any = { ..._inventoryChanges[i] },\n newHistoryRecord: any = { ..._inventoryChanges[i] }\n\n // Adjustment of existing Inventory\n if (_inventoryChanges[i].inventory != null) {\n let inventoryId = _inventoryChanges[i].inventory.id\n let inventory: Inventory = await tx.getRepository(Inventory).findOne({\n where: { id: inventoryId },\n relations: [\n 'domain',\n 'bizplace',\n 'bizplace.domain',\n 'bizplace.company',\n 'bizplace.company.domain',\n 'product',\n 'product.productDetails',\n 'product.productDetails.childProductDetail',\n 'warehouse',\n 'location',\n 'creator',\n 'updater'\n ]\n })\n\n const customerDomain: Domain = inventory.bizplace.domain\n\n // Check for locked inventory, and stop from udpating inventory\n if (inventory.qty < inventory.lockedQty) {\n arrLockedInventory.push(_inventoryChanges[i])\n continue\n }\n\n // Check for Terminated inventory, then update InventoryChange entity, and stop from udpating inventory\n if (inventory.status == INVENTORY_STATUS.TERMINATED) {\n _inventoryChanges[i] = { ..._inventoryChanges[i], status: 'TERMINATED' }\n continue\n }\n\n let lastSeq = inventory.lastSeq,\n transactionType = ''\n\n newHistoryRecord.openingQty = inventory.qty\n newHistoryRecord.openingUomValue = inventory.uomValue\n\n // Get last row of InventoryHistory\n let latestEntry = await tx.getRepository(InventoryHistory).findOne({\n where: { palletId: inventory.palletId, domain: domain },\n order: { seq: 'DESC' }\n })\n _inventoryChanges[i].lastInventoryHistory = latestEntry\n\n // Check Change of existing inventory location\n if (newRecord.location && newRecord.location.id != inventory.location.id) {\n newRecord.zone = newRecord.location.zone\n newRecord.warehouse = newRecord.location.warehouse\n transactionType = 'ADJUSTMENT'\n\n // Check and set current location status\n let currentLocationInventoryCount = await tx.getRepository(Inventory).count({\n where: { location: { id: inventory.location.id }, status: 'STORED', id: Not(inventory.id) }\n })\n\n if (currentLocationInventoryCount == 0) {\n let currentLocation = await tx.getRepository(Location).findOne({\n where: { id: inventory.location.id }\n })\n await tx.getRepository(Location).save({\n ...currentLocation,\n status: LOCATION_STATUS.EMPTY\n })\n }\n }\n\n // Check Change of existing inventory quantity\n if (newRecord.qty != null && newRecord.qty != inventory.qty) {\n newHistoryRecord.qty = newRecord.qty - inventory.qty\n if (newRecord.qty < 1) {\n newRecord.qty = 0\n newRecord.uomValue = 0\n }\n transactionType = 'ADJUSTMENT'\n } else {\n newHistoryRecord.qty = 0\n }\n\n // Check Change of existing inventory uomValue\n if (newRecord.uomValue != null && newRecord.uomValue != inventory.uomValue) {\n newHistoryRecord.uomValue = newRecord.uomValue - inventory.uomValue\n Math.round(newHistoryRecord.uomValue * 100) / 100\n transactionType = 'ADJUSTMENT'\n } else {\n newHistoryRecord.uomValue = 0\n }\n\n // Terminate current inventory history if there is change of bizplace, product, batchId, packingType, or uom\n if (\n (newRecord.bizplace && inventory.bizplace.id !== newRecord.bizplace.id) ||\n (newRecord.product && inventory.product.id !== newRecord.product.id) ||\n (newRecord.batchId && inventory.batchId !== newRecord.batchId) ||\n (newRecord.packingType && inventory.packingType !== newRecord.packingType) ||\n (newRecord.uom && inventory.uom !== newRecord.uom)\n ) {\n transactionType = 'ADJUSTMENT'\n lastSeq = lastSeq + 1\n let inventoryHistory = {\n ...inventory,\n domain: domain,\n bizplace: inventory.bizplace.id,\n openingQty: inventory.qty,\n openingUomValue: inventory.uomValue,\n qty: -inventory.qty || 0,\n uom: inventory.uom,\n uomValue: -inventory.uomValue || 0,\n name: InventoryNoGenerator.inventoryHistoryName(),\n seq: lastSeq,\n transactionType: transactionType,\n status: INVENTORY_STATUS.TERMINATED,\n productId: inventory.product.id,\n warehouseId: inventory.warehouse.id,\n locationId: inventory.location.id,\n packingType: inventory.packingType,\n creator: user,\n updater: user\n }\n delete inventoryHistory.id\n delete inventoryHistory.createdAt\n delete inventoryHistory.updatedAt\n await tx.getRepository(InventoryHistory).save(inventoryHistory as any)\n newHistoryRecord.qty = newRecord.qty != null ? newRecord.qty : inventory.qty || 0\n newHistoryRecord.uomValue = newRecord.uomValue != null ? newRecord.uomValue : inventory.uomValue || 0\n newHistoryRecord.openingQty = 0\n newHistoryRecord.openingUomValue = 0\n }\n\n // Set and update inventory and inventory history data\n lastSeq = lastSeq + 1\n clean(newHistoryRecord)\n let inventoryHistory = {\n ...inventory,\n ...newHistoryRecord,\n domain: domain,\n creator: user,\n updater: user,\n name: InventoryNoGenerator.inventoryHistoryName(),\n status: newHistoryRecord.transactionType == 'MISSING' ? 'MISSING' : 'STORED',\n seq: lastSeq,\n transactionType: transactionType == '' ? 'ADJUSTMENT' : transactionType,\n productId: newRecord.product ? newRecord.product.id : inventory.product.id,\n warehouseId: newRecord.warehouse ? newRecord.warehouse.id : inventory.warehouse.id,\n locationId:\n newRecord.location && newRecord.location.id != inventory.location.id\n ? newRecord.location.id\n : inventory.location.id,\n uom: newRecord.uom != null ? newRecord.uom : inventory.uom\n }\n delete inventoryHistory.id\n delete inventoryHistory.createdAt\n delete inventoryHistory.updatedAt\n await tx.getRepository(InventoryHistory).save(inventoryHistory)\n\n if (newRecord.qty != null && newRecord.qty == 0) {\n ++lastSeq\n delete inventoryHistory.id\n inventoryHistory = {\n ...inventoryHistory,\n name: InventoryNoGenerator.inventoryHistoryName(),\n qty: 0,\n uomValue: 0,\n openingQty: 0,\n openingUomValue: 0,\n seq: lastSeq,\n transactionType: 'TERMINATED',\n status: 'TERMINATED'\n }\n\n await tx.getRepository(InventoryHistory).save(inventoryHistory)\n }\n\n clean(newRecord)\n let statusFilter = ''\n if (newRecord.transactionType == 'MISSING') {\n statusFilter = 'MISSING'\n } else {\n statusFilter = (newRecord.qty != null ? newRecord.qty : inventory.qty) > 0 ? 'STORED' : 'TERMINATED'\n }\n await tx.getRepository(Inventory).save({\n ...inventory,\n ...newRecord,\n id: inventoryId,\n status: statusFilter,\n updater: user,\n lastSeq: lastSeq\n })\n\n //Check and set latest location status\n if (newRecord.qty != null ? newRecord.qty : inventory.qty > 0) {\n var location = await tx.getRepository(Location).findOne({\n where: { id: newRecord.location ? newRecord.location.id : inventory.location.id }\n })\n await tx.getRepository(Location).save({\n ...location,\n status: LOCATION_STATUS.OCCUPIED\n })\n } else {\n let latestLocationInventoryCount = await tx.getRepository(Inventory).count({\n where: {\n location: { id: newRecord.location ? newRecord.location.id : inventory.location.id },\n status: 'STORED',\n id: Not(inventory.id)\n }\n })\n if (latestLocationInventoryCount == 0) {\n let latestLocation = await tx.getRepository(Location).findOne({\n where: { id: newRecord.location ? newRecord.location.id : inventory.location.id }\n })\n await tx.getRepository(Location).save({\n ...latestLocation,\n status: LOCATION_STATUS.EMPTY\n })\n }\n }\n\n await upsertInventoryItems(context, _inventoryChanges[i], 'APPROVED', tx)\n\n const companyDomain: Domain = inventory.bizplace?.company.domain\n\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n if (newRecord?.bizplace?.id && inventory.bizplace.id != newRecord?.bizplace?.id) {\n const prevBizSC: Sellercraft = await tx.getRepository(Sellercraft).findOne({\n where: {\n domain: { id: inventory.bizplace?.domain.id },\n status: SellercraftStatus.ACTIVE\n },\n relations: ['domain']\n })\n if (prevBizSC) {\n await sellercraftCtrl.updateSellercraftStock(prevBizSC, { ...inventory, bizplace: inventory.bizplace })\n }\n }\n\n const currentBizSC: Sellercraft = await tx.getRepository(Sellercraft).findOne({\n where: {\n domain: newRecord?.bizplace?.domain || inventory?.bizplace?.domain,\n status: SellercraftStatus.ACTIVE\n },\n relations: ['domain']\n })\n\n if (currentBizSC) {\n if (newRecord?.product?.id && newRecord?.product?.id != inventory?.product?.id)\n await sellercraftCtrl.updateSellercraftStock(currentBizSC, {\n ...inventory,\n bizplace: newRecord?.bizplace || inventory?.bizplace,\n product: inventory.product\n })\n\n await sellercraftCtrl.updateSellercraftStock(currentBizSC, {\n ...inventory,\n bizplace: newRecord?.bizplace || inventory?.bizplace,\n product: newRecord?.product || inventory?.product\n })\n }\n\n // check for any existing active marketplace connection, update marketplace selling qty\n const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({\n where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },\n relations: ['marketplaceDistributors']\n })\n\n if (marketplaceStores?.length && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {\n const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)\n await ecommerceCtrl.updateProductVariationStock(marketplaceStores, inventory.product.id, companyDomain)\n\n if (newRecord?.product || newRecord?.bizplace)\n await ecommerceCtrl.updateProductVariationStock(marketplaceStores, newRecord.product.id, companyDomain)\n }\n }\n\n // Adding Inventory\n else {\n const total = await tx.getRepository(Inventory).countBy({\n createdAt: MoreThan(new Date(year, month, date))\n })\n\n const yy = String(year).substr(String(year).length - 2)\n const mm = String(month + 1).padStart(2, '0')\n const dd = String(date).padStart(2, '0')\n\n const dateStr = yy + mm + dd\n\n let palletId = newRecord.palletId\n\n if (!newRecord.palletId?.trim()) {\n palletId = await generateId({\n domain: domain,\n type: 'adjustment_pallet_id',\n seed: {\n batchId: newRecord.batchId,\n date: dateStr\n }\n })\n if (!palletId) throw new Error('No adjustment pallet id setting rule found')\n }\n\n var location = await tx.getRepository(Location).findOne({\n where: { id: newRecord.location.id },\n relations: ['warehouse']\n })\n newRecord.location = location\n newRecord.zone = location.zone\n newRecord.warehouse = location.warehouse\n\n newRecord.status = INVENTORY_STATUS.STORED\n newRecord.name = palletId\n newRecord.palletId = palletId\n\n const warehouseCartonSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, category: 'id-rule', name: 'enable-carton-label' }\n })\n\n const partnerCartonSetting: PartnerSetting = await tx.getRepository(PartnerSetting).findOne({\n where: { setting: warehouseCartonSetting, domain, partnerDomain: newRecord.bizplace?.domain }\n })\n\n if (partnerCartonSetting?.value) {\n let cartonId = await generateId({\n domain: domain,\n type: 'adjustment_carton_id',\n seed: { date: dateStr }\n })\n if (!cartonId) throw new Error('No adjustment carton id setting rule found')\n\n newRecord.cartonId = cartonId\n }\n\n let expirationDate =\n ((newRecord?.expirationDate && new Date(newRecord.expirationDate).getFullYear()) || 0) < 2000\n ? null\n : newRecord.expirationDate\n\n let savedInventory = await tx.getRepository(Inventory).save({\n ...newRecord,\n expirationDate,\n domain: domain,\n creator: user,\n updater: user,\n lastSeq: 0\n })\n\n await tx.getRepository(InventoryHistory).save({\n ...newRecord,\n domain: domain,\n creator: user,\n updater: user,\n name: InventoryNoGenerator.inventoryHistoryName(),\n seq: 0,\n transactionType: 'NEW',\n productId: newRecord.product.id,\n warehouseId: newRecord.warehouse.id,\n locationId: newRecord.location.id,\n inventory: savedInventory,\n expirationDate: expirationDate\n })\n\n await tx.getRepository(Location).save({\n ...location,\n status: LOCATION_STATUS.OCCUPIED\n })\n\n _inventoryChanges[i].inventory = savedInventory\n _inventoryChanges[i].palletId = savedInventory.palletId\n\n await upsertInventoryItems(context, _inventoryChanges[i], 'APPROVED', tx)\n\n const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({\n where: { domain: newRecord.bizplace.domain, status: SellercraftStatus.ACTIVE },\n relations: ['domain']\n })\n\n const companyDomain: Domain = newRecord.bizplace?.company.domain\n\n if (sellercraft) {\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n await sellercraftCtrl.updateSellercraftStock(sellercraft, newRecord)\n }\n\n // update marketplace store qty\n // check for any existing active marketplace connection, update marketplace selling qty\n const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({\n where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },\n relations: ['marketplaceDistributors']\n })\n\n if (marketplaceStores?.length && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {\n const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)\n await ecommerceCtrl.updateProductVariationStock(marketplaceStores, newRecord.product.id, companyDomain)\n }\n }\n\n _inventoryChanges[i].status = 'APPROVED'\n }\n\n await tx.getRepository(InventoryChange).save(_inventoryChanges)\n }\n\n return { items: arrLockedInventory, total: arrLockedInventory.length }\n}\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.InventoryChangeQuery = void 0;
|
|
5
4
|
const tslib_1 = require("tslib");
|
|
@@ -13,7 +12,7 @@ const inventory_change_types_1 = require("./inventory-change-types");
|
|
|
13
12
|
let InventoryChangeQuery = class InventoryChangeQuery {
|
|
14
13
|
async inventoryChange(name, context) {
|
|
15
14
|
const { domain } = context.state;
|
|
16
|
-
return await (0,
|
|
15
|
+
return await (0, shell_1.getRepository)(inventory_change_1.InventoryChange).findOne({
|
|
17
16
|
where: { domain: domain, name },
|
|
18
17
|
relations: ['domain', 'creator', 'updater']
|
|
19
18
|
});
|
|
@@ -28,7 +27,7 @@ let InventoryChangeQuery = class InventoryChangeQuery {
|
|
|
28
27
|
bizplaces = [params.filters.find(filter => filter.name === 'bizplace').value];
|
|
29
28
|
params.filters = [...params.filters.filter(filter => filter.name != 'bizplace')];
|
|
30
29
|
}
|
|
31
|
-
const qb = (0,
|
|
30
|
+
const qb = (0, shell_1.getRepository)(inventory_change_1.InventoryChange).createQueryBuilder('ic');
|
|
32
31
|
(0, shell_1.buildQuery)(qb, params, context);
|
|
33
32
|
qb.innerJoinAndSelect('ic.domain', 'dm')
|
|
34
33
|
.leftJoinAndSelect('ic.bizplace', 'biz')
|
|
@@ -58,13 +57,13 @@ let InventoryChangeQuery = class InventoryChangeQuery {
|
|
|
58
57
|
return { items, total };
|
|
59
58
|
}
|
|
60
59
|
async domain(inventoryChange) {
|
|
61
|
-
return await (0,
|
|
60
|
+
return await (0, shell_1.getRepository)(shell_1.Domain).findOneBy({ id: inventoryChange.domainId });
|
|
62
61
|
}
|
|
63
62
|
async updater(inventoryChange) {
|
|
64
|
-
return await (0,
|
|
63
|
+
return await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: inventoryChange.updaterId });
|
|
65
64
|
}
|
|
66
65
|
async creator(inventoryChange) {
|
|
67
|
-
return await (0,
|
|
66
|
+
return await (0, shell_1.getRepository)(auth_base_1.User).findOneBy({ id: inventoryChange.creatorId });
|
|
68
67
|
}
|
|
69
68
|
};
|
|
70
69
|
tslib_1.__decorate([
|
|
@@ -80,7 +79,7 @@ tslib_1.__decorate([
|
|
|
80
79
|
tslib_1.__param(0, (0, type_graphql_1.Args)()),
|
|
81
80
|
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
82
81
|
tslib_1.__metadata("design:type", Function),
|
|
83
|
-
tslib_1.__metadata("design:paramtypes", [
|
|
82
|
+
tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
|
|
84
83
|
tslib_1.__metadata("design:returntype", Promise)
|
|
85
84
|
], InventoryChangeQuery.prototype, "inventoryChanges", null);
|
|
86
85
|
tslib_1.__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inventory-change-query.js","sourceRoot":"","sources":["../../../server/service/inventory-change/inventory-change-query.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inventory-change-query.js","sourceRoot":"","sources":["../../../server/service/inventory-change/inventory-change-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'\nimport { Brackets, SelectQueryBuilder } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { getPermittedBizplaceIds } from '@things-factory/biz-base'\nimport { buildQuery, Domain, getRepository, ListParam } from '@things-factory/shell'\n\nimport { InventoryChange } from './inventory-change'\nimport { InventoryChangeList } from './inventory-change-types'\n\n@Resolver(InventoryChange)\nexport class InventoryChangeQuery {\n @Query(returns => InventoryChange)\n async inventoryChange(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<InventoryChange> {\n const { domain } = context.state\n\n return await getRepository(InventoryChange).findOne({\n where: { domain: domain, name },\n relations: ['domain', 'creator', 'updater']\n })\n }\n\n @Query(returns => InventoryChangeList)\n async inventoryChanges(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<InventoryChangeList> {\n const { domain, user } = context.state\n\n let bizplaces: any[]\n if (!params.filters.find(filter => filter.name === 'bizplace')) {\n bizplaces = await getPermittedBizplaceIds(domain, user)\n } else {\n bizplaces = [params.filters.find(filter => filter.name === 'bizplace').value]\n params.filters = [...params.filters.filter(filter => filter.name != 'bizplace')]\n }\n\n const qb: SelectQueryBuilder<InventoryChange> = getRepository(InventoryChange).createQueryBuilder('ic')\n buildQuery(qb, params, context)\n\n qb.innerJoinAndSelect('ic.domain', 'dm')\n .leftJoinAndSelect('ic.bizplace', 'biz')\n .leftJoinAndSelect('ic.inventory', 'iv')\n .leftJoinAndSelect('iv.bizplace', 'ivBiz')\n .leftJoinAndSelect('iv.product', 'ivPrd')\n .leftJoinAndSelect('iv.location', 'ivLoc')\n .leftJoinAndSelect('ic.product', 'product')\n .leftJoinAndSelect('ic.location', 'location')\n .leftJoinAndSelect('ic.lastInventoryHistory', 'livh')\n .leftJoinAndSelect('ic.inventoryItemChange', 'itc')\n .leftJoinAndSelect('livh.product', 'livhProduct')\n .leftJoinAndSelect('livh.warehouse', 'livhWarehouse')\n .leftJoinAndSelect('livh.location', 'livhLocation')\n .leftJoinAndSelect('livh.bizplace', 'livhBiz')\n .innerJoinAndSelect('ic.creator', 'creator')\n .innerJoinAndSelect('ic.updater', 'updater')\n .orderBy('ic.createdAt', 'DESC')\n\n qb.andWhere(\n new Brackets(qb => {\n qb.where('\"iv\".\"bizplace_id\" IN (:...bizplaces)')\n qb.orWhere('\"ic\".\"bizplace_id\" IN (:...bizplaces)')\n })\n )\n\n qb.setParameters({\n bizplaces: bizplaces\n })\n\n let [items, total] = await qb.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => InventoryChange)\n async domain(@Root() inventoryChange: InventoryChange) {\n return await getRepository(Domain).findOneBy({ id: inventoryChange.domainId })\n }\n\n @FieldResolver(type => InventoryChange)\n async updater(@Root() inventoryChange: InventoryChange) {\n return await getRepository(User).findOneBy({ id: inventoryChange.updaterId })\n }\n\n @FieldResolver(type => InventoryChange)\n async creator(@Root() inventoryChange: InventoryChange) {\n return await getRepository(User).findOneBy({ id: inventoryChange.creatorId })\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a, _b, _c
|
|
2
|
+
var _a, _b, _c;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.InventoryChange = void 0;
|
|
5
5
|
const tslib_1 = require("tslib");
|
|
@@ -38,7 +38,7 @@ tslib_1.__decorate([
|
|
|
38
38
|
tslib_1.__decorate([
|
|
39
39
|
(0, typeorm_1.ManyToOne)(type => shell_1.Domain),
|
|
40
40
|
(0, type_graphql_1.Field)(),
|
|
41
|
-
tslib_1.__metadata("design:type",
|
|
41
|
+
tslib_1.__metadata("design:type", shell_1.Domain)
|
|
42
42
|
], InventoryChange.prototype, "domain", void 0);
|
|
43
43
|
tslib_1.__decorate([
|
|
44
44
|
(0, typeorm_1.RelationId)((inventoryChange) => inventoryChange.domain),
|
|
@@ -57,7 +57,7 @@ tslib_1.__decorate([
|
|
|
57
57
|
tslib_1.__decorate([
|
|
58
58
|
(0, typeorm_1.ManyToOne)(type => biz_base_1.Bizplace, { nullable: true }),
|
|
59
59
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
60
|
-
tslib_1.__metadata("design:type", typeof (
|
|
60
|
+
tslib_1.__metadata("design:type", typeof (_a = typeof biz_base_1.Bizplace !== "undefined" && biz_base_1.Bizplace) === "function" ? _a : Object)
|
|
61
61
|
], InventoryChange.prototype, "bizplace", void 0);
|
|
62
62
|
tslib_1.__decorate([
|
|
63
63
|
(0, typeorm_1.ManyToOne)(type => inventory_1.Inventory, { nullable: true }),
|
|
@@ -67,7 +67,7 @@ tslib_1.__decorate([
|
|
|
67
67
|
tslib_1.__decorate([
|
|
68
68
|
(0, typeorm_1.ManyToOne)(type => product_base_1.Product, { nullable: true }),
|
|
69
69
|
(0, type_graphql_1.Field)(type => product_base_1.Product, { nullable: true }),
|
|
70
|
-
tslib_1.__metadata("design:type", typeof (
|
|
70
|
+
tslib_1.__metadata("design:type", typeof (_b = typeof product_base_1.Product !== "undefined" && product_base_1.Product) === "function" ? _b : Object)
|
|
71
71
|
], InventoryChange.prototype, "product", void 0);
|
|
72
72
|
tslib_1.__decorate([
|
|
73
73
|
(0, typeorm_1.ManyToOne)(type => inventory_item_change_1.InventoryItemChange, { nullable: true }),
|
|
@@ -81,7 +81,7 @@ tslib_1.__decorate([
|
|
|
81
81
|
tslib_1.__decorate([
|
|
82
82
|
(0, typeorm_1.ManyToOne)(type => product_base_1.ProductDetail, { nullable: true }),
|
|
83
83
|
(0, type_graphql_1.Field)(type => product_base_1.ProductDetail, { nullable: true }),
|
|
84
|
-
tslib_1.__metadata("design:type", typeof (
|
|
84
|
+
tslib_1.__metadata("design:type", typeof (_c = typeof product_base_1.ProductDetail !== "undefined" && product_base_1.ProductDetail) === "function" ? _c : Object)
|
|
85
85
|
], InventoryChange.prototype, "productDetail", void 0);
|
|
86
86
|
tslib_1.__decorate([
|
|
87
87
|
(0, typeorm_1.ManyToOne)(type => location_1.Location, { nullable: true }),
|
|
@@ -166,7 +166,7 @@ tslib_1.__decorate([
|
|
|
166
166
|
tslib_1.__decorate([
|
|
167
167
|
(0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
|
|
168
168
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
169
|
-
tslib_1.__metadata("design:type",
|
|
169
|
+
tslib_1.__metadata("design:type", auth_base_1.User)
|
|
170
170
|
], InventoryChange.prototype, "creator", void 0);
|
|
171
171
|
tslib_1.__decorate([
|
|
172
172
|
(0, typeorm_1.RelationId)((inventoryChange) => inventoryChange.creator),
|
|
@@ -175,7 +175,7 @@ tslib_1.__decorate([
|
|
|
175
175
|
tslib_1.__decorate([
|
|
176
176
|
(0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
|
|
177
177
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
178
|
-
tslib_1.__metadata("design:type",
|
|
178
|
+
tslib_1.__metadata("design:type", auth_base_1.User)
|
|
179
179
|
], InventoryChange.prototype, "updater", void 0);
|
|
180
180
|
tslib_1.__decorate([
|
|
181
181
|
(0, typeorm_1.RelationId)((inventoryChange) => inventoryChange.updater),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inventory-change.js","sourceRoot":"","sources":["../../../server/service/inventory-change/inventory-change.ts"],"names":[],"mappings":";;;;;AAAA,+CAAoD;AACpD,qCASgB;AAEhB,yDAAgD;AAChD,uDAAmD;AACnD,+DAAqE;AACrE,iDAA0D;AAE1D,8EAAyE;AACzE,0FAAoF;AACpF,sDAAkD;AAClD,mDAA+C;AAW/C,IAAa,eAAe,GAA5B,MAAa,eAAe;CAoI3B,CAAA;AAjIC;IAFC,IAAA,gCAAsB,EAAC,MAAM,CAAC;IAC9B,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;2CACC;AAInB;IAFC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,GAAE;;6CACI;AAIZ;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACV;AAIhB;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACV;AAIhB;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IACzB,IAAA,oBAAK,GAAE;
|
|
1
|
+
{"version":3,"file":"inventory-change.js","sourceRoot":"","sources":["../../../server/service/inventory-change/inventory-change.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, ID, ObjectType } from 'type-graphql'\nimport {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn\n} from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { Product, ProductDetail } from '@things-factory/product-base'\nimport { Domain, ScalarDate } from '@things-factory/shell'\n\nimport { InventoryHistory } from '../inventory-history/inventory-history'\nimport { InventoryItemChange } from '../inventory-item-change/inventory-item-change'\nimport { Inventory } from '../inventory/inventory'\nimport { Location } from '../location/location'\n\n@Entity()\n@Index('ix_inventory-change_0', (inventoryChange: InventoryChange) => [inventoryChange.domain, inventoryChange.id], {\n unique: true\n})\n@Index('ix_inventory-change_1', (inventoryChange: InventoryChange) => [\n inventoryChange.domain,\n inventoryChange.inventory\n])\n@ObjectType()\nexport class InventoryChange {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @Column()\n @Field()\n name: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n palletId: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n cartonId: string\n\n @ManyToOne(type => Domain)\n @Field()\n domain: Domain\n\n @RelationId((inventoryChange: InventoryChange) => inventoryChange.domain)\n domainId: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n batchId: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n batchIdRef: string\n\n @ManyToOne(type => Bizplace, { nullable: true })\n @Field({ nullable: true })\n bizplace: Bizplace\n\n @ManyToOne(type => Inventory, { nullable: true })\n @Field(type => Inventory, { nullable: true })\n inventory: Inventory\n\n @ManyToOne(type => Product, { nullable: true })\n @Field(type => Product, { nullable: true })\n product: Product\n\n @ManyToOne(type => InventoryItemChange, { nullable: true })\n @Field(type => InventoryItemChange, { nullable: true })\n inventoryItemChange: InventoryItemChange\n\n /**\n * To be updated to remove nullable. once all process that links to inventory has been updated to use product detail instead of product\n */\n @ManyToOne(type => ProductDetail, { nullable: true })\n @Field(type => ProductDetail, { nullable: true })\n productDetail: ProductDetail\n\n @ManyToOne(type => Location, { nullable: true })\n @Field(type => Location, { nullable: true })\n location: Location\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n packingType: string\n\n @Column('float', { nullable: true })\n @Field({ nullable: true })\n packingSize: number\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n uom: string\n\n @Column('float', { nullable: true })\n @Field({ nullable: true })\n weight: number\n\n @Column('float', { nullable: true })\n @Field({ nullable: true })\n uomValue: number\n\n @Column('float', { nullable: true })\n @Field({ nullable: true })\n qty: number\n\n @Column('float', { nullable: true })\n @Field({ nullable: true })\n unitCost: number\n\n @Column()\n @Field()\n status: string\n\n @ManyToOne(type => InventoryHistory, { nullable: true })\n @Field({ nullable: true })\n lastInventoryHistory: InventoryHistory\n\n @Column('date', { nullable: true })\n @Field(type => ScalarDate, { nullable: true })\n expirationDate: Date\n\n @Column('int', { nullable: true })\n @Field({ nullable: true })\n manufactureYear: number\n\n @Column('date', { nullable: true })\n @Field(type => ScalarDate, { nullable: true })\n manufactureDate: Date\n\n @Column()\n @Field()\n transactionType: string\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n creator: User\n\n @RelationId((inventoryChange: InventoryChange) => inventoryChange.creator)\n creatorId: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n updater: User\n\n @RelationId((inventoryChange: InventoryChange) => inventoryChange.updater)\n updaterId: string\n}\n"]}
|
|
@@ -36,7 +36,7 @@ let InventoryHistoryMutation = class InventoryHistoryMutation {
|
|
|
36
36
|
if (_updateRecords.length > 0) {
|
|
37
37
|
for (let i = 0; i < _updateRecords.length; i++) {
|
|
38
38
|
const newRecord = _updateRecords[i];
|
|
39
|
-
const inventoryHistory = await inventoryHistoryRepo.
|
|
39
|
+
const inventoryHistory = await inventoryHistoryRepo.findOneBy({ id: newRecord.id });
|
|
40
40
|
const result = await inventoryHistoryRepo.save(Object.assign(Object.assign(Object.assign({}, inventoryHistory), newRecord), { updater: user }));
|
|
41
41
|
results.push(Object.assign(Object.assign({}, result), { cuFlag: 'M' }));
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inventory-history-mutation.js","sourceRoot":"","sources":["../../../server/service/inventory-history/inventory-history-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAAsE;AACtE,
|
|
1
|
+
{"version":3,"file":"inventory-history-mutation.js","sourceRoot":"","sources":["../../../server/service/inventory-history/inventory-history-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { InventoryHistory } from './inventory-history'\nimport { InventoryHistoryPatch, NewInventoryHistory } from './inventory-history-types'\n\n@Resolver(InventoryHistory)\nexport class InventoryHistoryMutation {\n @Directive('@transaction')\n @Mutation(returns => InventoryHistory)\n async createInventoryHistory(\n @Arg('inventoryHistory') inventoryHistory: NewInventoryHistory,\n @Ctx() context: ResolverContext\n ): Promise<InventoryHistory> {\n const { domain, user, tx } = context.state\n\n return await tx.getRepository(InventoryHistory).save({\n ...inventoryHistory,\n domain: domain,\n creator: user,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => InventoryHistory)\n async updateInventoryHistory(\n @Arg('name') name: string,\n @Arg('patch') patch: InventoryHistoryPatch,\n @Ctx() context: ResolverContext\n ): Promise<InventoryHistory> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(InventoryHistory)\n const inventoryHistory = await repository.findOne({\n where: { domain: domain, name }\n })\n\n return await repository.save({\n ...inventoryHistory,\n ...patch,\n updater: user\n })\n }\n\n @Directive('@transaction')\n @Mutation(returns => [InventoryHistory])\n async updateMultipleInventoryHistory(\n @Arg('patches', type => [InventoryHistoryPatch]) patches: InventoryHistoryPatch[],\n @Ctx() context: ResolverContext\n ): Promise<InventoryHistory[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const inventoryHistoryRepo = tx.getRepository(InventoryHistory)\n\n if (_createRecords.length > 0) {\n let newRecord: NewInventoryHistory = new InventoryHistory()\n for (let i = 0; i < _createRecords.length; i++) {\n newRecord = _createRecords[i]\n }\n\n const result = await inventoryHistoryRepo.save({\n ...newRecord,\n domain: domain,\n creator: user,\n updater: user\n })\n\n results.push({ ...result, cuFlag: '+' })\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const newRecord = _updateRecords[i]\n const inventoryHistory = await inventoryHistoryRepo.findOneBy({ id: newRecord.id })\n\n const result = await inventoryHistoryRepo.save({\n ...inventoryHistory,\n ...newRecord,\n updater: user\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteInventoryHistory(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(InventoryHistory).delete({ domain: domain, name })\n return true\n }\n\n @Directive('transaction')\n @Mutation(returns => Boolean)\n async deleteInventoryHistories(\n @Arg('names', type => [String]) names: string[],\n @Ctx() context: ResolverContext\n ): Promise<Boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(InventoryHistory).delete({\n domain: domain,\n name: In(names)\n })\n return true\n }\n}\n"]}
|