@things-factory/warehouse-base 8.0.29 → 8.0.37
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.
|
@@ -73,7 +73,7 @@ let InventoryChangeMutation = class InventoryChangeMutation {
|
|
|
73
73
|
return true;
|
|
74
74
|
}
|
|
75
75
|
async submitInventoryChanges(patches, context) {
|
|
76
|
-
var _a, _b, _c, _d, _e, _f;
|
|
76
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
77
77
|
const { domain, user, tx } = context.state;
|
|
78
78
|
try {
|
|
79
79
|
const _createRecords = [];
|
|
@@ -99,7 +99,7 @@ let InventoryChangeMutation = class InventoryChangeMutation {
|
|
|
99
99
|
continue;
|
|
100
100
|
}
|
|
101
101
|
const invLockedQty = (foundExistingPallet === null || foundExistingPallet === void 0 ? void 0 : foundExistingPallet.lockedQty) == null ? 0 : foundExistingPallet === null || foundExistingPallet === void 0 ? void 0 : foundExistingPallet.lockedQty;
|
|
102
|
-
if (((_c = patches[i]) === null || _c === void 0 ? void 0 : _c.qty) < invLockedQty) {
|
|
102
|
+
if (((_c = patches[i]) === null || _c === void 0 ? void 0 : _c.transactionType) === 'CHANGES' && ((_d = patches[i]) === null || _d === void 0 ? void 0 : _d.qty) < invLockedQty) {
|
|
103
103
|
throw new Error('Adjusted qty value should not be lower than released qty, kindly contact our support for assistance');
|
|
104
104
|
}
|
|
105
105
|
if (foundExistingPallet) {
|
|
@@ -188,7 +188,7 @@ let InventoryChangeMutation = class InventoryChangeMutation {
|
|
|
188
188
|
relations: ['location', 'warehouse', 'product', 'bizplace']
|
|
189
189
|
});
|
|
190
190
|
}
|
|
191
|
-
if (!!((
|
|
191
|
+
if (!!((_e = updateRecord === null || updateRecord === void 0 ? void 0 : updateRecord.location) === null || _e === void 0 ? void 0 : _e.id)) {
|
|
192
192
|
var location = await tx.getRepository(location_1.Location).findOne({
|
|
193
193
|
where: { id: updateRecord.location.id },
|
|
194
194
|
relations: ['warehouse']
|
|
@@ -197,10 +197,10 @@ let InventoryChangeMutation = class InventoryChangeMutation {
|
|
|
197
197
|
updateRecord.zone = location.zone;
|
|
198
198
|
updateRecord.warehouse = location.warehouse;
|
|
199
199
|
}
|
|
200
|
-
if (!!((
|
|
200
|
+
if (!!((_f = updateRecord === null || updateRecord === void 0 ? void 0 : updateRecord.bizplace) === null || _f === void 0 ? void 0 : _f.id))
|
|
201
201
|
updateRecord.bizplace = await tx.getRepository(biz_base_1.Bizplace).findOne(updateRecord.bizplace.id);
|
|
202
202
|
let product;
|
|
203
|
-
if (!!((
|
|
203
|
+
if (!!((_g = updateRecord === null || updateRecord === void 0 ? void 0 : updateRecord.product) === null || _g === void 0 ? void 0 : _g.id)) {
|
|
204
204
|
product = await tx.getRepository(product_base_1.Product).findOne(updateRecord.product.id);
|
|
205
205
|
updateRecord.product = product;
|
|
206
206
|
}
|
|
@@ -534,10 +534,10 @@ async function approveInventoryChanges(patches, context) {
|
|
|
534
534
|
});
|
|
535
535
|
const customerDomain = inventory.bizplace.domain;
|
|
536
536
|
// Check for locked inventory, and stop from udpating inventory
|
|
537
|
-
if (inventory.qty < inventory.lockedQty) {
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
}
|
|
537
|
+
// if (inventory.qty < inventory.lockedQty) {
|
|
538
|
+
// arrLockedInventory.push(_inventoryChanges[i])
|
|
539
|
+
// continue
|
|
540
|
+
// }
|
|
541
541
|
// Check for Terminated inventory, then update InventoryChange entity, and stop from udpating inventory
|
|
542
542
|
// if (inventory.status == INVENTORY_STATUS.TERMINATED) {
|
|
543
543
|
// _inventoryChanges[i] = { ..._inventoryChanges[i], status: 'TERMINATED' }
|
|
@@ -612,7 +612,7 @@ async function approveInventoryChanges(patches, context) {
|
|
|
612
612
|
statusFilter = 'MISSING';
|
|
613
613
|
}
|
|
614
614
|
else if (newRecord.transactionType == 'ACTIVATE') {
|
|
615
|
-
statusFilter =
|
|
615
|
+
statusFilter = 'STORED';
|
|
616
616
|
}
|
|
617
617
|
else if (newRecord.transactionType == 'DISCARD') {
|
|
618
618
|
statusFilter = 'TERMINATED';
|
|
@@ -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 { Equal, 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: { id: domain.id }, 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: { id: domain.id }, 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: { id: domain.id },\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: { id: domain.id }, palletId: Equal(updateRecord?.palletId) },\n relations: ['location', 'warehouse', 'product', 'bizplace']\n })\n\n if (!existingRecord) {\n existingRecord = await tx.getRepository(Inventory).findOne({\n where: { domain: { id: domain.id }, 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 if (!updateRecord.transactionType) {\n updateRecord.transactionType = 'CHANGES'\n }\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: { id: domain.id } },\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: { id: inventoryChange.id }, 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 'location.warehouse'\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: { id: domain.id } },\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 = { id: newRecord.location.warehouse.id }\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 <= 0) {\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 let statusFilter = ''\n if (newRecord.transactionType == 'MISSING') {\n statusFilter = 'MISSING'\n } else if (newRecord.transactionType == 'ACTIVATE') {\n statusFilter = (newRecord.qty != null ? newRecord.qty : inventory.qty) > 0 ? 'STORED' : 'TERMINATED'\n } else if (newRecord.transactionType == 'DISCARD') {\n statusFilter = 'TERMINATED'\n } else {\n statusFilter = (newRecord.qty != null ? newRecord.qty : inventory.qty) > 0 ? 'STORED' : 'TERMINATED'\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: statusFilter,\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\n delete newRecord.createdAt\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: { id: newRecord?.bizplace?.domain.id || inventory?.bizplace?.domain.id },\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: { id: companyDomain.id }, 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: {\n setting: { id: warehouseCartonSetting.id },\n domain: { id: domain.id },\n partnerDomain: { id: newRecord.bizplace?.domain.id }\n }\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: { id: newRecord.bizplace.domain.id }, 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: { id: companyDomain.id }, 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 { Equal, 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: { id: domain.id }, 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: { id: domain.id }, 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: { id: domain.id },\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]?.transactionType === 'CHANGES' && 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: { id: domain.id }, palletId: Equal(updateRecord?.palletId) },\n relations: ['location', 'warehouse', 'product', 'bizplace']\n })\n\n if (!existingRecord) {\n existingRecord = await tx.getRepository(Inventory).findOne({\n where: { domain: { id: domain.id }, 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 if (!updateRecord.transactionType) {\n updateRecord.transactionType = 'CHANGES'\n }\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: { id: domain.id } },\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: { id: inventoryChange.id }, 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 'location.warehouse'\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: { id: domain.id } },\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 = { id: newRecord.location.warehouse.id }\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 <= 0) {\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 let statusFilter = ''\n if (newRecord.transactionType == 'MISSING') {\n statusFilter = 'MISSING'\n } else if (newRecord.transactionType == 'ACTIVATE') {\n statusFilter = 'STORED'\n } else if (newRecord.transactionType == 'DISCARD') {\n statusFilter = 'TERMINATED'\n } else {\n statusFilter = (newRecord.qty != null ? newRecord.qty : inventory.qty) > 0 ? 'STORED' : 'TERMINATED'\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: statusFilter,\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\n delete newRecord.createdAt\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: { id: newRecord?.bizplace?.domain.id || inventory?.bizplace?.domain.id },\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: { id: companyDomain.id }, 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: {\n setting: { id: warehouseCartonSetting.id },\n domain: { id: domain.id },\n partnerDomain: { id: newRecord.bizplace?.domain.id }\n }\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: { id: newRecord.bizplace.domain.id }, 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: { id: companyDomain.id }, 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"]}
|