@things-factory/warehouse-base 8.0.20 → 8.0.29

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.
@@ -127,7 +127,10 @@ let InventoryChangeMutation = class InventoryChangeMutation {
127
127
  newRecord.product = product;
128
128
  newRecord.status = 'PENDING';
129
129
  newRecord.transactionType = 'NEW';
130
- newRecord.expirationDate = (((newRecord === null || newRecord === void 0 ? void 0 : newRecord.expirationDate) && new Date(newRecord.expirationDate).getFullYear()) || 0) < 2000 ? null : newRecord.expirationDate;
130
+ newRecord.expirationDate =
131
+ (((newRecord === null || newRecord === void 0 ? void 0 : newRecord.expirationDate) && new Date(newRecord.expirationDate).getFullYear()) || 0) < 2000
132
+ ? null
133
+ : newRecord.expirationDate;
131
134
  const newInventoryChange = await inventoryChangeRepo.save(Object.assign(Object.assign({}, newRecord), { id: undefined, name: utils_1.InventoryNoGenerator.inventoryName(), domain: domain, creator: user, updater: user }));
132
135
  if (newRecord === null || newRecord === void 0 ? void 0 : newRecord.serialNumbers) {
133
136
  let serialNumbers = newRecord.serialNumbers;
@@ -158,7 +161,10 @@ let InventoryChangeMutation = class InventoryChangeMutation {
158
161
  newInventoryItemChange.serialNumber = inventoryItemChange.serialNumber;
159
162
  newInventoryItemChange.type = inventoryItemChange.type;
160
163
  newInventoryItemChange.status = newInventoryChange.status;
161
- newInventoryItemChange.inventoryItem = (newInventoryItemChange === null || newInventoryItemChange === void 0 ? void 0 : newInventoryItemChange.type) == constants_1.INVENTORY_ITEM_CHANGE_TYPE.NEW ? null : newInventoryItemChange.inventoryItem;
164
+ newInventoryItemChange.inventoryItem =
165
+ (newInventoryItemChange === null || newInventoryItemChange === void 0 ? void 0 : newInventoryItemChange.type) == constants_1.INVENTORY_ITEM_CHANGE_TYPE.NEW
166
+ ? null
167
+ : newInventoryItemChange.inventoryItem;
162
168
  newInventoryItemChange.inventoryChange = newInventoryChange;
163
169
  newInventoryItemChange.domain = domain;
164
170
  newInventoryItemChange.creator = user;
@@ -206,7 +212,9 @@ let InventoryChangeMutation = class InventoryChangeMutation {
206
212
  }
207
213
  updateRecord.status = 'PENDING';
208
214
  updateRecord.expirationDate =
209
- (((updateRecord === null || updateRecord === void 0 ? void 0 : updateRecord.expirationDate) && new Date(updateRecord.expirationDate).getFullYear()) || 0) < 2000 ? null : updateRecord.expirationDate;
215
+ (((updateRecord === null || updateRecord === void 0 ? void 0 : updateRecord.expirationDate) && new Date(updateRecord.expirationDate).getFullYear()) || 0) < 2000
216
+ ? null
217
+ : updateRecord.expirationDate;
210
218
  const updatedInventoryChange = await inventoryChangeRepo.save(Object.assign(Object.assign({ palletId: existingRecord.palletId }, updateRecord), { id: undefined, name: utils_1.InventoryNoGenerator.inventoryName(), inventory: existingRecord, domain: domain, creator: user, updater: user }));
211
219
  // create new inventory items
212
220
  if (updateRecord === null || updateRecord === void 0 ? void 0 : updateRecord.inventoryItemChangesJson) {
@@ -236,7 +244,10 @@ let InventoryChangeMutation = class InventoryChangeMutation {
236
244
  newInventoryItemChange.type = inventoryItemChange.type;
237
245
  newInventoryItemChange.status = updatedInventoryChange.status;
238
246
  newInventoryItemChange.inventory = updatedInventoryChange.inventory;
239
- newInventoryItemChange.inventoryItem = (newInventoryItemChange === null || newInventoryItemChange === void 0 ? void 0 : newInventoryItemChange.type) == constants_1.INVENTORY_ITEM_CHANGE_TYPE.NEW ? null : inventoryItemChange.inventoryItem;
247
+ newInventoryItemChange.inventoryItem =
248
+ (newInventoryItemChange === null || newInventoryItemChange === void 0 ? void 0 : newInventoryItemChange.type) == constants_1.INVENTORY_ITEM_CHANGE_TYPE.NEW
249
+ ? null
250
+ : inventoryItemChange.inventoryItem;
240
251
  newInventoryItemChange.inventoryChange = updatedInventoryChange;
241
252
  newInventoryItemChange.domain = domain;
242
253
  newInventoryItemChange.creator = user;
@@ -306,7 +317,16 @@ let InventoryChangeMutation = class InventoryChangeMutation {
306
317
  const { domain, user, tx } = context.state;
307
318
  const _inventoryChanges = await tx.getRepository(inventory_change_1.InventoryChange).find({
308
319
  where: { id: (0, typeorm_1.In)(patches.map(item => item.id)) },
309
- relations: ['inventory', 'inventory.bizplace', 'inventory.product', 'inventory.location', 'inventory.warehouse', 'bizplace', 'product', 'location']
320
+ relations: [
321
+ 'inventory',
322
+ 'inventory.bizplace',
323
+ 'inventory.product',
324
+ 'inventory.location',
325
+ 'inventory.warehouse',
326
+ 'bizplace',
327
+ 'product',
328
+ 'location'
329
+ ]
310
330
  });
311
331
  if (_inventoryChanges.length > 0) {
312
332
  for (let i = 0; i < _inventoryChanges.length; i++) {
@@ -453,7 +473,9 @@ async function upsertInventoryItems(context, inventoryChange, approvalStatus, tx
453
473
  }
454
474
  inventoryItem = await tx.getRepository(inventory_item_1.InventoryItem).save(inventoryItem);
455
475
  }
456
- await tx.getRepository(inventory_item_change_1.InventoryItemChange).update({ id: inventoryItemChange.id }, { status: approvalStatus, inventoryItem });
476
+ await tx
477
+ .getRepository(inventory_item_change_1.InventoryItemChange)
478
+ .update({ id: inventoryItemChange.id }, { status: approvalStatus, inventoryItem });
457
479
  }));
458
480
  }
459
481
  async function approveInventoryChanges(patches, context) {
@@ -517,10 +539,10 @@ async function approveInventoryChanges(patches, context) {
517
539
  continue;
518
540
  }
519
541
  // Check for Terminated inventory, then update InventoryChange entity, and stop from udpating inventory
520
- if (inventory.status == constants_1.INVENTORY_STATUS.TERMINATED) {
521
- _inventoryChanges[i] = Object.assign(Object.assign({}, _inventoryChanges[i]), { status: 'TERMINATED' });
522
- continue;
523
- }
542
+ // if (inventory.status == INVENTORY_STATUS.TERMINATED) {
543
+ // _inventoryChanges[i] = { ..._inventoryChanges[i], status: 'TERMINATED' }
544
+ // continue
545
+ // }
524
546
  let lastSeq = inventory.lastSeq, transactionType = '';
525
547
  newHistoryRecord.openingQty = inventory.qty;
526
548
  newHistoryRecord.openingUomValue = inventory.uomValue;
@@ -585,10 +607,25 @@ async function approveInventoryChanges(patches, context) {
585
607
  newHistoryRecord.openingQty = 0;
586
608
  newHistoryRecord.openingUomValue = 0;
587
609
  }
610
+ let statusFilter = '';
611
+ if (newRecord.transactionType == 'MISSING') {
612
+ statusFilter = 'MISSING';
613
+ }
614
+ else if (newRecord.transactionType == 'ACTIVATE') {
615
+ statusFilter = (newRecord.qty != null ? newRecord.qty : inventory.qty) > 0 ? 'STORED' : 'TERMINATED';
616
+ }
617
+ else if (newRecord.transactionType == 'DISCARD') {
618
+ statusFilter = 'TERMINATED';
619
+ }
620
+ else {
621
+ statusFilter = (newRecord.qty != null ? newRecord.qty : inventory.qty) > 0 ? 'STORED' : 'TERMINATED';
622
+ }
588
623
  // Set and update inventory and inventory history data
589
624
  lastSeq = lastSeq + 1;
590
625
  clean(newHistoryRecord);
591
- let inventoryHistory = Object.assign(Object.assign(Object.assign({}, inventory), newHistoryRecord), { domain: domain, creator: user, updater: user, name: utils_1.InventoryNoGenerator.inventoryHistoryName(), status: newHistoryRecord.transactionType == 'MISSING' ? 'MISSING' : 'STORED', seq: lastSeq, transactionType: transactionType == '' ? 'ADJUSTMENT' : transactionType, productId: newRecord.product ? newRecord.product.id : inventory.product.id, warehouseId: newRecord.warehouse ? newRecord.warehouse.id : inventory.warehouse.id, locationId: newRecord.location && newRecord.location.id != inventory.location.id ? newRecord.location.id : inventory.location.id, uom: newRecord.uom != null ? newRecord.uom : inventory.uom });
626
+ let inventoryHistory = Object.assign(Object.assign(Object.assign({}, inventory), newHistoryRecord), { domain: domain, creator: user, updater: user, name: utils_1.InventoryNoGenerator.inventoryHistoryName(), status: statusFilter, seq: lastSeq, transactionType: transactionType == '' ? 'ADJUSTMENT' : transactionType, productId: newRecord.product ? newRecord.product.id : inventory.product.id, warehouseId: newRecord.warehouse ? newRecord.warehouse.id : inventory.warehouse.id, locationId: newRecord.location && newRecord.location.id != inventory.location.id
627
+ ? newRecord.location.id
628
+ : inventory.location.id, uom: newRecord.uom != null ? newRecord.uom : inventory.uom });
592
629
  delete inventoryHistory.id;
593
630
  delete inventoryHistory.createdAt;
594
631
  delete inventoryHistory.updatedAt;
@@ -600,13 +637,6 @@ async function approveInventoryChanges(patches, context) {
600
637
  await tx.getRepository(inventory_history_1.InventoryHistory).save(inventoryHistory);
601
638
  }
602
639
  clean(newRecord);
603
- let statusFilter = '';
604
- if (newRecord.transactionType == 'MISSING') {
605
- statusFilter = 'MISSING';
606
- }
607
- else {
608
- statusFilter = (newRecord.qty != null ? newRecord.qty : inventory.qty) > 0 ? 'STORED' : 'TERMINATED';
609
- }
610
640
  delete newRecord.createdAt;
611
641
  await tx.getRepository(inventory_1.Inventory).save(Object.assign(Object.assign(Object.assign({}, inventory), newRecord), { id: inventoryId, status: statusFilter, updater: user, lastSeq: lastSeq }));
612
642
  //Check and set latest location status
@@ -722,7 +752,9 @@ async function approveInventoryChanges(patches, context) {
722
752
  throw new Error('No adjustment carton id setting rule found');
723
753
  newRecord.cartonId = cartonId;
724
754
  }
725
- let expirationDate = (((newRecord === null || newRecord === void 0 ? void 0 : newRecord.expirationDate) && new Date(newRecord.expirationDate).getFullYear()) || 0) < 2000 ? null : newRecord.expirationDate;
755
+ let expirationDate = (((newRecord === null || newRecord === void 0 ? void 0 : newRecord.expirationDate) && new Date(newRecord.expirationDate).getFullYear()) || 0) < 2000
756
+ ? null
757
+ : newRecord.expirationDate;
726
758
  let savedInventory = await tx.getRepository(inventory_1.Inventory).save(Object.assign(Object.assign({}, newRecord), { expirationDate, domain: domain, creator: user, updater: user, lastSeq: 0 }));
727
759
  await tx.getRepository(inventory_history_1.InventoryHistory).save(Object.assign(Object.assign({}, newRecord), { domain: domain, creator: user, updater: user, name: utils_1.InventoryNoGenerator.inventoryHistoryName(), seq: 0, transactionType: 'NEW', productId: newRecord.product.id, warehouseId: newRecord.warehouse.id, locationId: newRecord.location.id, inventory: savedInventory, expirationDate: expirationDate }));
728
760
  await tx.getRepository(location_1.Location).save(Object.assign(Object.assign({}, location), { status: constants_1.LOCATION_STATUS.OCCUPIED }));
@@ -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(@Arg('inventoryChange') inventoryChange: NewInventoryChange, @Ctx() context: ResolverContext): 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(@Arg('name') name: string, @Arg('patch') patch: InventoryChangePatch, @Ctx() context: ResolverContext): 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(@Arg('names', type => [String]) names: string[], @Ctx() context: ResolverContext): 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(@Arg('patches', type => [InventoryPatch]) patches: InventoryPatch[], @Ctx() context: ResolverContext) {\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('Adjusted qty value should not be lower than released qty, kindly contact our support for assistance')\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 = ((newRecord?.expirationDate && new Date(newRecord.expirationDate).getFullYear()) || 0) < 2000 ? null : 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 = newInventoryItemChange?.type == INVENTORY_ITEM_CHANGE_TYPE.NEW ? null : 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) 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 ? null : 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 = newInventoryItemChange?.type == INVENTORY_ITEM_CHANGE_TYPE.NEW ? null : 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(@Arg('patches', type => [InventoryChangePatch]) patches: InventoryChangePatch[], @Ctx() context: ResolverContext): 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: ['inventory', 'inventory.bizplace', 'inventory.product', 'inventory.location', 'inventory.warehouse', 'bizplace', 'product', 'location']\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.getRepository(InventoryItemChange).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 // 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: newRecord.location && newRecord.location.id != inventory.location.id ? newRecord.location.id : 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\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) 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 = ((newRecord?.expirationDate && new Date(newRecord.expirationDate).getFullYear()) || 0) < 2000 ? null : 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]?.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"]}