@things-factory/worksheet-base 4.3.771 → 4.3.772

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.
Files changed (28) hide show
  1. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js +10 -5
  2. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js.map +1 -1
  3. package/dist-server/controllers/inbound/putaway-worksheet-controller.js +10 -5
  4. package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
  5. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +45 -19
  6. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/outbound/packing-worksheet-controller.js +2 -2
  8. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/outbound/picking-worksheet-controller.js +18 -2
  10. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  11. package/dist-server/controllers/outbound/returning-worksheet-controller.js +36 -3
  12. package/dist-server/controllers/outbound/returning-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/outbound/sorting-worksheet-controller.js +2 -2
  14. package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
  15. package/dist-server/controllers/replenishment/replenishment-worksheet-controller.js +1 -1
  16. package/dist-server/controllers/replenishment/replenishment-worksheet-controller.js.map +1 -1
  17. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +12 -8
  18. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
  19. package/package.json +4 -4
  20. package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +26 -5
  21. package/server/controllers/inbound/putaway-worksheet-controller.ts +26 -5
  22. package/server/controllers/inbound/unloading-worksheet-controller.ts +66 -23
  23. package/server/controllers/outbound/packing-worksheet-controller.ts +3 -2
  24. package/server/controllers/outbound/picking-worksheet-controller.ts +44 -2
  25. package/server/controllers/outbound/returning-worksheet-controller.ts +41 -16
  26. package/server/controllers/outbound/sorting-worksheet-controller.ts +3 -2
  27. package/server/controllers/replenishment/replenishment-worksheet-controller.ts +1 -7
  28. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +14 -16
@@ -440,19 +440,17 @@ export class UnloadingWorksheetController extends VasWorksheetController {
440
440
  foundInventory = await this.trxMgr.getRepository(Inventory).save(newInventory)
441
441
 
442
442
  //refer to scanUnload
443
- newInventory = await this.transactionInventory(
444
- newInventory,
443
+ await generateInventoryHistory(
444
+ foundInventory,
445
445
  Boolean(arrivalNotice) ? arrivalNotice : returnOrder,
446
- newInventory.qty,
447
- newInventory.uomValue,
448
- INVENTORY_TRANSACTION_TYPE.UNLOADING
446
+ INVENTORY_TRANSACTION_TYPE.UNLOADING,
447
+ foundInventory.qty,
448
+ foundInventory.uomValue,
449
+ this.user,
450
+ this.trxMgr
449
451
  )
450
452
  } else {
451
- const updatedQty: number = foundInventory.qty + qty
452
- foundInventory.expirationDate = foundInventory.expirationDate ? new Date(foundInventory.expirationDate) : null
453
- foundInventory.manufactureDate = foundInventory?.manufactureDate ? new Date(foundInventory?.manufactureDate) : null
454
- foundInventory.qty = updatedQty
455
- foundInventory.uomValue +=
453
+ const addUomValue: number =
456
454
  Math.round(
457
455
  qty *
458
456
  (Boolean(arrivalNotice)
@@ -460,20 +458,39 @@ export class UnloadingWorksheetController extends VasWorksheetController {
460
458
  : targetInventory.returnUomValue / targetInventory.returnQty) *
461
459
  1000
462
460
  ) / 1000
463
- foundInventory.conditionOfGoods = conditionOfGoods ?? foundInventory.conditionOfGoods // DEFAULT BACK TO PREVIOUS INVENTORY'S CONDITION OF GOODS
464
461
 
465
- //refer to scanUnload
466
- foundInventory = await this.transactionInventory(
462
+ const updateFields: any = {
463
+ qty: () => `"qty" + :addQty::numeric`,
464
+ uomValue: () => `"uom_value" + :addUomValue::numeric`,
465
+ updater: this.user,
466
+ updatedAt: new Date()
467
+ }
468
+ if (conditionOfGoods) {
469
+ updateFields.conditionOfGoods = conditionOfGoods
470
+ }
471
+ await this.trxMgr.getRepository(Inventory).createQueryBuilder()
472
+ .update(Inventory).set(updateFields)
473
+ .setParameter('addQty', qty)
474
+ .setParameter('addUomValue', addUomValue)
475
+ .where('id = :id', { id: foundInventory.id }).execute()
476
+
477
+ // Update in-memory for downstream
478
+ foundInventory.qty += qty
479
+ foundInventory.uomValue += addUomValue
480
+ if (conditionOfGoods) foundInventory.conditionOfGoods = conditionOfGoods
481
+
482
+ await generateInventoryHistory(
467
483
  foundInventory,
468
484
  Boolean(arrivalNotice) ? arrivalNotice : returnOrder,
485
+ INVENTORY_TRANSACTION_TYPE.UNLOADING,
469
486
  foundInventory.qty,
470
487
  foundInventory.uomValue,
471
- INVENTORY_TRANSACTION_TYPE.UNLOADING
488
+ this.user,
489
+ this.trxMgr
472
490
  )
473
491
 
474
492
  if (arrivalNotice) targetProduct.actualPackQty = targetProduct.actualPackQty + qty
475
493
  else if (returnOrder) targetInventory.actualPackQty = targetInventory.actualPackQty + qty
476
- foundInventory = await this.trxMgr.getRepository(Inventory).save(foundInventory)
477
494
  }
478
495
 
479
496
  let inventoryItem: InventoryItem = new InventoryItem()
@@ -770,14 +787,20 @@ export class UnloadingWorksheetController extends VasWorksheetController {
770
787
  let foundInventory: Inventory = await invQb.getOne()
771
788
  if (!foundInventory) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(foundInventory.palletId))
772
789
 
790
+ await this.trxMgr.getRepository(Inventory).update(
791
+ { id: foundInventory.id },
792
+ { status: INVENTORY_STATUS.UNLOADED, updater: this.user }
793
+ )
773
794
  foundInventory.status = INVENTORY_STATUS.UNLOADED
774
795
 
775
- foundInventory = await this.transactionInventory(
796
+ await generateInventoryHistory(
776
797
  foundInventory,
777
798
  Boolean(arrivalNotice) ? arrivalNotice : returnOrder,
799
+ INVENTORY_TRANSACTION_TYPE.UNLOADING,
778
800
  foundInventory.qty,
779
801
  foundInventory.uomValue,
780
- INVENTORY_TRANSACTION_TYPE.UNLOADING
802
+ this.user,
803
+ this.trxMgr
781
804
  )
782
805
  }
783
806
 
@@ -888,14 +911,23 @@ export class UnloadingWorksheetController extends VasWorksheetController {
888
911
  await this.trxMgr.getRepository(Inventory).save(inventory)
889
912
 
890
913
  if (inventory.qty == 0) {
914
+ await this.trxMgr.getRepository(Inventory).createQueryBuilder()
915
+ .update(Inventory).set({
916
+ lastSeq: () => `"last_seq" + 1`,
917
+ status: INVENTORY_STATUS.DELETED,
918
+ updater: this.user, updatedAt: new Date()
919
+ })
920
+ .where('id = :id', { id: inventory.id }).execute()
891
921
  inventory.lastSeq++
892
922
  inventory.status = INVENTORY_STATUS.DELETED
893
- inventory = await this.transactionInventory(
923
+ await generateInventoryHistory(
894
924
  inventory,
895
925
  Boolean(orderType === ORDER_TYPES.ARRIVAL_NOTICE) ? arrivalNotice : returnOrder,
926
+ INVENTORY_TRANSACTION_TYPE.UNDO_UNLOADING,
896
927
  -inventory.qty,
897
928
  -inventory.uomValue,
898
- INVENTORY_TRANSACTION_TYPE.UNDO_UNLOADING
929
+ this.user,
930
+ this.trxMgr
899
931
  )
900
932
  inventory.qty = 0
901
933
  inventory.uomValue = 0
@@ -909,14 +941,23 @@ export class UnloadingWorksheetController extends VasWorksheetController {
909
941
  await this.trxMgr.getRepository(Inventory).delete({ id: inventory.id })
910
942
  }
911
943
  } else {
944
+ await this.trxMgr.getRepository(Inventory).createQueryBuilder()
945
+ .update(Inventory).set({
946
+ lastSeq: () => `"last_seq" + 1`,
947
+ status: INVENTORY_STATUS.DELETED,
948
+ updater: this.user, updatedAt: new Date()
949
+ })
950
+ .where('id = :id', { id: inventory.id }).execute()
912
951
  inventory.lastSeq++
913
952
  inventory.status = INVENTORY_STATUS.DELETED
914
- inventory = await this.transactionInventory(
953
+ await generateInventoryHistory(
915
954
  inventory,
916
955
  Boolean(orderType === ORDER_TYPES.ARRIVAL_NOTICE) ? arrivalNotice : returnOrder,
956
+ INVENTORY_TRANSACTION_TYPE.UNDO_UNLOADING,
917
957
  -inventory.qty,
918
958
  -inventory.uomValue,
919
- INVENTORY_TRANSACTION_TYPE.UNDO_UNLOADING
959
+ this.user,
960
+ this.trxMgr
920
961
  )
921
962
  inventory.qty = 0
922
963
  inventory.uomValue = 0
@@ -1096,12 +1137,14 @@ export class UnloadingWorksheetController extends VasWorksheetController {
1096
1137
  }
1097
1138
 
1098
1139
  for (const inventory of inventories) {
1099
- await this.transactionInventory(
1140
+ await generateInventoryHistory(
1100
1141
  inventory,
1101
1142
  arrivalNotice,
1143
+ INVENTORY_TRANSACTION_TYPE.UNLOADING,
1102
1144
  inventory.qty,
1103
1145
  inventory.uomValue,
1104
- INVENTORY_TRANSACTION_TYPE.UNLOADING
1146
+ this.user,
1147
+ this.trxMgr
1105
1148
  )
1106
1149
  }
1107
1150
  } catch (e) {
@@ -18,6 +18,7 @@ import {
18
18
  } from '@things-factory/sales-base'
19
19
  import { webhookHandler, WebhookEventsEnum } from '@things-factory/integration-base'
20
20
  import {
21
+ generateInventoryHistory,
21
22
  Inventory,
22
23
  INVENTORY_ITEM_SOURCE,
23
24
  INVENTORY_STATUS,
@@ -296,7 +297,7 @@ export class PackingWorksheetController extends VasWorksheetController {
296
297
  await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)
297
298
  }
298
299
 
299
- await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.PACKING)
300
+ await generateInventoryHistory(inventory, releaseGood, INVENTORY_TRANSACTION_TYPE.PACKING, 0, 0, this.user, this.trxMgr)
300
301
 
301
302
  worksheetDetail.status = WORKSHEET_STATUS.DONE
302
303
  }
@@ -484,7 +485,7 @@ export class PackingWorksheetController extends VasWorksheetController {
484
485
 
485
486
  if (orderInventory.packedQty === releaseQty) {
486
487
  orderInventory.status = ORDER_INVENTORY_STATUS.PACKED
487
- await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.PACKING)
488
+ await generateInventoryHistory(inventory, releaseGood, INVENTORY_TRANSACTION_TYPE.PACKING, 0, 0, this.user, this.trxMgr)
488
489
  await this.trxMgr.getRepository(WorksheetDetail).update(
489
490
  { targetInventory: { id: orderInventory.id }, type: 'PACKING' },
490
491
  {
@@ -1414,10 +1414,31 @@ export class PickingWorksheetController extends VasWorksheetController {
1414
1414
  if (!toLocation) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(locationName))
1415
1415
 
1416
1416
  if (fromLocation.id !== toLocation.id) {
1417
+ await this.trxMgr
1418
+ .getRepository(Inventory)
1419
+ .update(
1420
+ { id: inventory.id },
1421
+ {
1422
+ location: toLocation,
1423
+ warehouse: toLocation.warehouse,
1424
+ zone: toLocation.zone,
1425
+ updater: this.user
1426
+ }
1427
+ )
1428
+
1417
1429
  inventory.location = toLocation
1418
1430
  inventory.warehouse = toLocation.warehouse
1419
1431
  inventory.zone = toLocation.zone
1420
- inventory = await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.RELOCATE)
1432
+
1433
+ await generateInventoryHistory(
1434
+ inventory,
1435
+ releaseGood,
1436
+ INVENTORY_TRANSACTION_TYPE.RELOCATE,
1437
+ 0,
1438
+ 0,
1439
+ this.user,
1440
+ this.trxMgr
1441
+ )
1421
1442
  }
1422
1443
  }
1423
1444
  } catch (error) {
@@ -1578,10 +1599,31 @@ export class PickingWorksheetController extends VasWorksheetController {
1578
1599
  if (!toLocation) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(locationName))
1579
1600
 
1580
1601
  if (fromLocation.id !== toLocation.id) {
1602
+ await this.trxMgr
1603
+ .getRepository(Inventory)
1604
+ .update(
1605
+ { id: inventory.id },
1606
+ {
1607
+ location: toLocation,
1608
+ warehouse: toLocation.warehouse,
1609
+ zone: toLocation.zone,
1610
+ updater: this.user
1611
+ }
1612
+ )
1613
+
1581
1614
  inventory.location = toLocation
1582
1615
  inventory.warehouse = toLocation.warehouse
1583
1616
  inventory.zone = toLocation.zone
1584
- await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.RELOCATE)
1617
+
1618
+ await generateInventoryHistory(
1619
+ inventory,
1620
+ releaseGood,
1621
+ INVENTORY_TRANSACTION_TYPE.RELOCATE,
1622
+ 0,
1623
+ 0,
1624
+ this.user,
1625
+ this.trxMgr
1626
+ )
1585
1627
  }
1586
1628
  }
1587
1629
  }
@@ -1,5 +1,6 @@
1
1
  import { OrderInventory, ORDER_INVENTORY_STATUS, ORDER_STATUS, ReleaseGood } from '@things-factory/sales-base'
2
2
  import {
3
+ generateInventoryHistory,
3
4
  Inventory,
4
5
  Warehouse,
5
6
  INVENTORY_STATUS,
@@ -114,24 +115,37 @@ export class ReturningWorksheetController extends VasWorksheetController {
114
115
  throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('return', 'pallet ID is not matched'))
115
116
  }
116
117
 
118
+ const isLocationChanged: boolean = originLocation.id !== toLocation.id
119
+
120
+ const updateFields: any = {
121
+ qty: () => `"qty" + :addQty::numeric`,
122
+ uomValue: () => `"uom_value" + :addUomValue::numeric`,
123
+ status: INVENTORY_STATUS.STORED,
124
+ updater: this.user,
125
+ updatedAt: new Date()
126
+ }
127
+ if (isLocationChanged) {
128
+ updateFields.location = toLocation
129
+ updateFields.warehouse = toLocation.warehouse
130
+ updateFields.zone = toLocation.zone
131
+ }
132
+ await this.trxMgr.getRepository(Inventory).createQueryBuilder()
133
+ .update(Inventory).set(updateFields)
134
+ .setParameter('addQty', targetInventory.releaseQty)
135
+ .setParameter('addUomValue', targetInventory.releaseUomValue)
136
+ .where('id = :id', { id: inventory.id }).execute()
137
+
138
+ // Update in-memory for downstream
117
139
  inventory.qty += targetInventory.releaseQty
118
140
  inventory.uomValue += targetInventory.releaseUomValue
119
141
  inventory.status = INVENTORY_STATUS.STORED
120
-
121
- const isLocationChanged: boolean = originLocation.id !== toLocation.id
122
142
  if (isLocationChanged) {
123
143
  inventory.location = toLocation
124
144
  inventory.warehouse = toLocation.warehouse
125
145
  inventory.zone = toLocation.zone
126
146
  }
127
147
 
128
- await this.transactionInventory(
129
- inventory,
130
- releaseGood,
131
- targetInventory.releaseQty,
132
- targetInventory.releaseUomValue,
133
- INVENTORY_TRANSACTION_TYPE.RETURN
134
- )
148
+ await generateInventoryHistory(inventory, releaseGood, INVENTORY_TRANSACTION_TYPE.RETURN, targetInventory.releaseQty, targetInventory.releaseUomValue, this.user, this.trxMgr)
135
149
 
136
150
  // update status of order inventory
137
151
  targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED
@@ -205,19 +219,30 @@ export class ReturningWorksheetController extends VasWorksheetController {
205
219
  const warehouse: Warehouse = location.warehouse
206
220
  const zone: string = warehouse.zone
207
221
 
222
+ await this.trxMgr.getRepository(Inventory).createQueryBuilder()
223
+ .update(Inventory).set({
224
+ qty: () => `"qty" + :addQty::numeric`,
225
+ uomValue: () => `"uom_value" + :addUomValue::numeric`,
226
+ status: INVENTORY_STATUS.STORED,
227
+ location: location,
228
+ warehouse: warehouse,
229
+ zone: zone,
230
+ updater: this.user,
231
+ updatedAt: new Date()
232
+ })
233
+ .setParameter('addQty', targetInventory.releaseQty)
234
+ .setParameter('addUomValue', targetInventory.releaseUomValue)
235
+ .where('id = :id', { id: inventory.id }).execute()
236
+
237
+ // Update in-memory for downstream
208
238
  inventory.qty += targetInventory.releaseQty
209
239
  inventory.uomValue += targetInventory.releaseUomValue
210
240
  inventory.location = location
211
241
  inventory.status = INVENTORY_STATUS.STORED
212
242
  inventory.warehouse = warehouse
213
243
  inventory.zone = zone
214
- await this.transactionInventory(
215
- inventory,
216
- releaseGood,
217
- targetInventory.releaseQty,
218
- targetInventory.releaseUomValue,
219
- INVENTORY_TRANSACTION_TYPE.RETURN
220
- )
244
+
245
+ await generateInventoryHistory(inventory, releaseGood, INVENTORY_TRANSACTION_TYPE.RETURN, targetInventory.releaseQty, targetInventory.releaseUomValue, this.user, this.trxMgr)
221
246
 
222
247
  targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED
223
248
  targetInventory.updater = this.user
@@ -14,6 +14,7 @@ import {
14
14
  } from '@things-factory/sales-base'
15
15
  import { Setting } from '@things-factory/setting-base'
16
16
  import {
17
+ generateInventoryHistory,
17
18
  Inventory,
18
19
  INVENTORY_ITEM_SOURCE,
19
20
  INVENTORY_STATUS,
@@ -347,7 +348,7 @@ export class SortingWorksheetController extends VasWorksheetController {
347
348
  if (matchingOI.sortedQty == pickedQty) {
348
349
  matchingOI.status = ORDER_INVENTORY_STATUS.SORTED
349
350
  await this.updateOrderTargets([matchingOI])
350
- await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)
351
+ await generateInventoryHistory(inventory, releaseGood, INVENTORY_TRANSACTION_TYPE.SORTING, 0, 0, this.user, this.trxMgr)
351
352
 
352
353
  let worksheetDetail = worksheetDetails.find(wd => wd.targetInventory.id == matchingOI.id)
353
354
  await this.trxMgr
@@ -493,7 +494,7 @@ export class SortingWorksheetController extends VasWorksheetController {
493
494
  if (matchingOI.sortedQty == releaseQty) {
494
495
  matchingOI.status = ORDER_INVENTORY_STATUS.SORTED
495
496
  await this.updateOrderTargets([matchingOI])
496
- await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)
497
+ await generateInventoryHistory(inventory, releaseGood, INVENTORY_TRANSACTION_TYPE.SORTING, 0, 0, this.user, this.trxMgr)
497
498
 
498
499
  let inventoryItems: InventoryItem = await this.trxMgr
499
500
  .getRepository(InventoryItem)
@@ -572,13 +572,7 @@ export class ReplenishmentWorksheetController extends WorksheetController {
572
572
  await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)
573
573
  }
574
574
 
575
- await this.transactionInventory(
576
- newInventory,
577
- replenishment,
578
- actualQty,
579
- newUomValue,
580
- INVENTORY_TRANSACTION_TYPE.RELOCATE
581
- )
575
+ await generateInventoryHistory(newInventory, replenishment, INVENTORY_TRANSACTION_TYPE.RELOCATE, actualQty, newUomValue, this.user, this.trxMgr)
582
576
 
583
577
  if (actualQty + targetInventory.actualPackQty === targetInventory.releaseQty) {
584
578
  targetInventory.actualPackQty = targetInventory.releaseQty
@@ -24,7 +24,7 @@ import {
24
24
  } from '@things-factory/sales-base'
25
25
  import { Setting } from '@things-factory/setting-base'
26
26
  import { Domain } from '@things-factory/shell'
27
- import { Inventory, INVENTORY_TRANSACTION_TYPE, InventoryUtil } from '@things-factory/warehouse-base'
27
+ import { generateInventoryHistory, Inventory, INVENTORY_TRANSACTION_TYPE } from '@things-factory/warehouse-base'
28
28
 
29
29
  import { PickingWorksheetController } from '../../../../controllers/'
30
30
  import { Worksheet, WorksheetDetail } from '../../../../entities'
@@ -66,8 +66,6 @@ export async function generatePickingWorksheet(
66
66
  })
67
67
 
68
68
  if (releaseGood.type == 'b2c' && directReleaseOrder && directReleaseOrder.value.toLowerCase() == 'true') {
69
- const inventoryUtil = new InventoryUtil(tx, domain, user)
70
-
71
69
  await mmsProcessOrder(tx, domain, user, releaseGood, context)
72
70
 
73
71
  let orderInventories: OrderInventory[] = await tx.getRepository(OrderInventory).find({
@@ -86,19 +84,19 @@ export async function generatePickingWorksheet(
86
84
  .getRepository(Inventory)
87
85
  .findOne({ where: { id: orderInventory.inventory.id } })
88
86
 
89
- await inventoryUtil.transactionInventory(
90
- {
91
- id: inventory.id,
92
- qty: inventory.qty - orderInventory.releaseQty,
93
- uomValue: Math.round((inventory.uomValue - orderInventory.releaseUomValue) * 100) / 100,
94
- lockedQty: inventory.lockedQty - orderInventory.releaseQty,
95
- lockedUomValue: Math.round((inventory.lockedUomValue - orderInventory.releaseUomValue) * 100) / 100
96
- },
97
- releaseGood,
98
- -orderInventory.releaseQty,
99
- -orderInventory.releaseUomValue,
100
- INVENTORY_TRANSACTION_TYPE.DIRECT_DEDUCTION
101
- )
87
+ await tx.getRepository(Inventory).createQueryBuilder()
88
+ .update(Inventory).set({
89
+ qty: () => `"qty" - :releaseQty::numeric`,
90
+ uomValue: () => `ROUND(("uom_value" - :releaseUomValue::numeric)::numeric, 2)`,
91
+ lockedQty: () => `"locked_qty" - :releaseQty::numeric`,
92
+ lockedUomValue: () => `ROUND(("locked_uom_value" - :releaseUomValue::numeric)::numeric, 2)`,
93
+ updater: user, updatedAt: new Date()
94
+ })
95
+ .setParameter('releaseQty', orderInventory.releaseQty)
96
+ .setParameter('releaseUomValue', orderInventory.releaseUomValue)
97
+ .where('id = :id', { id: inventory.id }).execute()
98
+
99
+ await generateInventoryHistory(inventory, releaseGood, INVENTORY_TRANSACTION_TYPE.DIRECT_DEDUCTION, -orderInventory.releaseQty, -orderInventory.releaseUomValue, user, tx)
102
100
 
103
101
  await tx
104
102
  .getRepository(OrderInventory)