@things-factory/worksheet-base 5.0.0-alpha.5 → 5.0.0-alpha.52

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 (243) hide show
  1. package/dist-server/constants/template.js +1 -0
  2. package/dist-server/constants/template.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/sellercraft-controller.js +24 -10
  4. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  5. package/dist-server/controllers/inbound/putaway-worksheet-controller.js +22 -13
  6. package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +309 -4
  8. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/index.js +2 -0
  10. package/dist-server/controllers/index.js.map +1 -1
  11. package/dist-server/controllers/outbound/loading-worksheet-controller.js +56 -9
  12. package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/outbound/packing-worksheet-controller.js +172 -7
  14. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  15. package/dist-server/controllers/outbound/picking-worksheet-controller.js +500 -18
  16. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  17. package/dist-server/controllers/outbound/returning-worksheet-controller.js +11 -1
  18. package/dist-server/controllers/outbound/returning-worksheet-controller.js.map +1 -1
  19. package/dist-server/controllers/outbound/sorting-worksheet-controller.js +215 -12
  20. package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
  21. package/dist-server/controllers/render-fm-grn.js +229 -0
  22. package/dist-server/controllers/render-fm-grn.js.map +1 -0
  23. package/dist-server/controllers/render-grn.js +77 -45
  24. package/dist-server/controllers/render-grn.js.map +1 -1
  25. package/dist-server/controllers/render-invoices.js +103 -65
  26. package/dist-server/controllers/render-invoices.js.map +1 -1
  27. package/dist-server/controllers/render-manifest.js +12 -5
  28. package/dist-server/controllers/render-manifest.js.map +1 -1
  29. package/dist-server/controllers/render-orientage-do.js.map +1 -1
  30. package/dist-server/controllers/render-orientage-grn.js +1 -0
  31. package/dist-server/controllers/render-orientage-grn.js.map +1 -1
  32. package/dist-server/controllers/render-po.js +147 -0
  33. package/dist-server/controllers/render-po.js.map +1 -0
  34. package/dist-server/controllers/render-ro-do.js +65 -1
  35. package/dist-server/controllers/render-ro-do.js.map +1 -1
  36. package/dist-server/controllers/worksheet-controller.js +23 -1
  37. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  38. package/dist-server/entities/index.js +2 -1
  39. package/dist-server/entities/index.js.map +1 -1
  40. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +174 -0
  41. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -0
  42. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +14 -1
  43. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
  44. package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js +17 -0
  45. package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js.map +1 -0
  46. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +12 -4
  47. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
  48. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +30 -1
  49. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -1
  50. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js +27 -23
  51. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js.map +1 -1
  52. package/dist-server/graphql/resolvers/worksheet/index.js +2 -1
  53. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
  54. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +3 -0
  55. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  56. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +48 -2
  57. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
  58. package/dist-server/graphql/resolvers/worksheet/loading/loading.js +3 -10
  59. package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
  60. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +55 -21
  61. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
  62. package/dist-server/graphql/resolvers/worksheet/packing/index.js +2 -1
  63. package/dist-server/graphql/resolvers/worksheet/packing/index.js.map +1 -1
  64. package/dist-server/graphql/resolvers/worksheet/packing/packing.js +4 -4
  65. package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
  66. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +4 -4
  67. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
  68. package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js +15 -0
  69. package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js.map +1 -0
  70. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +153 -132
  71. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  72. package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js +2 -5
  73. package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js.map +1 -1
  74. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js +13 -10
  75. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js.map +1 -1
  76. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +1 -1
  77. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  78. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +14 -25
  79. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  80. package/dist-server/graphql/resolvers/worksheet/picking/index.js +3 -1
  81. package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
  82. package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js +49 -58
  83. package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js.map +1 -1
  84. package/dist-server/graphql/resolvers/worksheet/picking/picking.js +4 -4
  85. package/dist-server/graphql/resolvers/worksheet/picking/picking.js.map +1 -1
  86. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +4 -4
  87. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
  88. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js +15 -0
  89. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js.map +1 -0
  90. package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js +15 -0
  91. package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js.map +1 -0
  92. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +10 -1
  93. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  94. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +36 -0
  95. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -1
  96. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js +11 -6
  97. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js.map +1 -1
  98. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js +4 -4
  99. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -1
  100. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js +4 -4
  101. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -1
  102. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js +6 -0
  103. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -1
  104. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js +3 -2
  105. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js.map +1 -1
  106. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +0 -21
  107. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -1
  108. package/dist-server/graphql/resolvers/worksheet/unloading/index.js +3 -1
  109. package/dist-server/graphql/resolvers/worksheet/unloading/index.js.map +1 -1
  110. package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js +15 -0
  111. package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js.map +1 -0
  112. package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js +15 -0
  113. package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js.map +1 -0
  114. package/dist-server/graphql/resolvers/worksheet/unloading/unload.js.map +1 -1
  115. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +3 -1
  116. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -1
  117. package/dist-server/graphql/resolvers/worksheet/worksheet.js +2 -0
  118. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  119. package/dist-server/graphql/resolvers/worksheet/worksheets.js +45 -5
  120. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
  121. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +13 -8
  122. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
  123. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js +19 -4
  124. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js.map +1 -1
  125. package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js +24 -34
  126. package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js.map +1 -1
  127. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +12 -3
  128. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
  129. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +10 -2
  130. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
  131. package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js +2 -5
  132. package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js.map +1 -1
  133. package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js +11 -0
  134. package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js.map +1 -0
  135. package/dist-server/graphql/types/worksheet/index.js +52 -11
  136. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  137. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js +1 -0
  138. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js.map +1 -1
  139. package/dist-server/graphql/types/worksheet/picking-assignment-status.js +2 -2
  140. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +8 -3
  141. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
  142. package/dist-server/graphql/types/worksheet/worksheet-info.js +3 -0
  143. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  144. package/dist-server/graphql/types/worksheet/worksheet-patch.js +1 -0
  145. package/dist-server/graphql/types/worksheet/worksheet-patch.js.map +1 -1
  146. package/dist-server/graphql/types/worksheet/worksheet.js +1 -0
  147. package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -1
  148. package/dist-server/graphql/types/worksheet-detail/index.js +0 -2
  149. package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
  150. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js +5 -2
  151. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js.map +1 -1
  152. package/dist-server/graphql/types/worksheet-detail/worksheet-detail-patch.js +1 -1
  153. package/dist-server/index.js +5 -0
  154. package/dist-server/index.js.map +1 -1
  155. package/dist-server/routes.js +12 -0
  156. package/dist-server/routes.js.map +1 -1
  157. package/dist-server/utils/inventory-util.js +14 -25
  158. package/dist-server/utils/inventory-util.js.map +1 -1
  159. package/dist-server/utils/worksheet-no-generator.js +25 -28
  160. package/dist-server/utils/worksheet-no-generator.js.map +1 -1
  161. package/package.json +17 -17
  162. package/server/constants/template.ts +1 -0
  163. package/server/controllers/ecommerce/sellercraft-controller.ts +38 -10
  164. package/server/controllers/inbound/putaway-worksheet-controller.ts +27 -13
  165. package/server/controllers/inbound/unloading-worksheet-controller.ts +376 -8
  166. package/server/controllers/index.ts +3 -0
  167. package/server/controllers/outbound/loading-worksheet-controller.ts +94 -15
  168. package/server/controllers/outbound/packing-worksheet-controller.ts +224 -9
  169. package/server/controllers/outbound/picking-worksheet-controller.ts +653 -24
  170. package/server/controllers/outbound/returning-worksheet-controller.ts +12 -1
  171. package/server/controllers/outbound/sorting-worksheet-controller.ts +303 -18
  172. package/server/controllers/render-fm-grn.ts +266 -0
  173. package/server/controllers/render-grn.ts +95 -52
  174. package/server/controllers/render-invoices.ts +119 -72
  175. package/server/controllers/render-manifest.ts +12 -5
  176. package/server/controllers/render-orientage-do.ts +11 -11
  177. package/server/controllers/render-orientage-grn.ts +12 -11
  178. package/server/controllers/render-po.ts +170 -0
  179. package/server/controllers/render-ro-do.ts +93 -8
  180. package/server/controllers/worksheet-controller.ts +32 -3
  181. package/server/entities/index.ts +2 -1
  182. package/server/entities/warehouse-bizplace-onhand-inventory.ts +147 -0
  183. package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +14 -0
  184. package/server/graphql/resolvers/worksheet/cancel-draft-release-order.ts +27 -0
  185. package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +15 -5
  186. package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +35 -2
  187. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.ts +35 -25
  188. package/server/graphql/resolvers/worksheet/index.ts +3 -1
  189. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +2 -0
  190. package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +67 -8
  191. package/server/graphql/resolvers/worksheet/loading/loading.ts +5 -12
  192. package/server/graphql/resolvers/worksheet/loading-worksheet.ts +66 -13
  193. package/server/graphql/resolvers/worksheet/packing/index.ts +3 -1
  194. package/server/graphql/resolvers/worksheet/packing/packing.ts +5 -4
  195. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +9 -4
  196. package/server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.ts +24 -0
  197. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +167 -145
  198. package/server/graphql/resolvers/worksheet/palletizing-pallets.ts +2 -2
  199. package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +15 -11
  200. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +1 -1
  201. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +18 -31
  202. package/server/graphql/resolvers/worksheet/picking/index.ts +5 -1
  203. package/server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.ts +62 -61
  204. package/server/graphql/resolvers/worksheet/picking/picking.ts +30 -4
  205. package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +7 -4
  206. package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +25 -0
  207. package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +24 -0
  208. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +13 -2
  209. package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +45 -2
  210. package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +13 -9
  211. package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +6 -4
  212. package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +6 -4
  213. package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +6 -0
  214. package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +6 -2
  215. package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +0 -25
  216. package/server/graphql/resolvers/worksheet/unloading/index.ts +4 -0
  217. package/server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.ts +26 -0
  218. package/server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.ts +24 -0
  219. package/server/graphql/resolvers/worksheet/unloading/unload.ts +3 -1
  220. package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +3 -1
  221. package/server/graphql/resolvers/worksheet/worksheet.ts +2 -0
  222. package/server/graphql/resolvers/worksheet/worksheets.ts +64 -5
  223. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +30 -14
  224. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +39 -11
  225. package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +46 -49
  226. package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +15 -3
  227. package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +18 -1
  228. package/server/graphql/resolvers/worksheet-movement/create-worksheet-movement.ts +2 -2
  229. package/server/graphql/types/worksheet/find-release-orders-by-task-no.ts +8 -0
  230. package/server/graphql/types/worksheet/index.ts +52 -11
  231. package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +1 -0
  232. package/server/graphql/types/worksheet/picking-assignment-status.ts +2 -2
  233. package/server/graphql/types/worksheet/worksheet-detail-info.ts +8 -3
  234. package/server/graphql/types/worksheet/worksheet-info.ts +3 -0
  235. package/server/graphql/types/worksheet/worksheet-patch.ts +1 -0
  236. package/server/graphql/types/worksheet/worksheet.ts +1 -0
  237. package/server/graphql/types/worksheet-detail/index.ts +0 -2
  238. package/server/graphql/types/worksheet-detail/inventory-detail.ts +5 -2
  239. package/server/graphql/types/worksheet-detail/worksheet-detail-patch.ts +1 -1
  240. package/server/index.ts +5 -0
  241. package/server/routes.ts +17 -0
  242. package/server/utils/inventory-util.ts +15 -23
  243. package/server/utils/worksheet-no-generator.ts +25 -25
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
2
13
  Object.defineProperty(exports, "__esModule", { value: true });
3
14
  exports.PickingWorksheetController = void 0;
4
15
  const typeorm_1 = require("typeorm");
@@ -237,9 +248,10 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
237
248
  'worksheetDetails',
238
249
  'worksheetDetails.targetInventory',
239
250
  'worksheetDetails.targetInventory.inventory',
240
- 'worksheetDetails.targetInventory.product'
251
+ 'worksheetDetails.targetInventory.product',
252
+ 'worksheetDetails.targetInventory.orderProduct'
241
253
  ]);
242
- const worksheetDetails = await this.extractMatchedWorksheetDetails(worksheet.worksheetDetails, batchId, productId, packingType, packingSize, ['targetInventory', 'targetInventory.inventory']);
254
+ const worksheetDetails = await this.extractMatchedWorksheetDetails(worksheet.worksheetDetails, batchId, productId, packingType, packingSize, ['targetInventory', 'targetInventory.inventory', 'targetInventory.orderProduct']);
243
255
  let worksheetDetailIds = [];
244
256
  let targetInventoryIds = [];
245
257
  for (const worksheetDetail of worksheetDetails) {
@@ -252,6 +264,9 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
252
264
  inventory.lockedQty = inventory.lockedQty - targetInventory.releaseQty;
253
265
  inventory.lockedUomValue = inventory.lockedUomValue - targetInventory.releaseUomValue;
254
266
  await this.updateInventory(inventory);
267
+ await this.trxMgr
268
+ .getRepository(sales_base_1.OrderProduct)
269
+ .update({ id: targetInventory.orderProduct.id }, { status: sales_base_1.ORDER_PRODUCT_STATUS.PENDING_ASSIGN, updater: this.user });
255
270
  }
256
271
  await this.trxMgr.getRepository(entities_1.WorksheetDetail).delete(worksheetDetailIds);
257
272
  await this.trxMgr.getRepository(sales_base_1.OrderInventory).delete(targetInventoryIds);
@@ -264,7 +279,7 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
264
279
  status: sales_base_1.ORDER_INVENTORY_STATUS.COMPLETE_SPLIT
265
280
  }, { status: sales_base_1.ORDER_INVENTORY_STATUS.PENDING_SPLIT, updater: this.user, updatedAt: new Date() });
266
281
  }
267
- async scanProductPicking(worksheetDetailName, worksheetType, productBarcode, cartonId, binLocation, serialNumber) {
282
+ async scanProductPicking(worksheetDetailName, worksheetType, productBarcode, cartonId, binLocation, serialNumber, toteNo) {
268
283
  try {
269
284
  let worksheetDetail = await this.findExecutableWorksheetDetailByName(worksheetDetailName, worksheetType, [
270
285
  'worksheet',
@@ -273,14 +288,17 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
273
288
  'targetInventory.releaseGood',
274
289
  'targetInventory.inventory',
275
290
  'targetInventory.product',
291
+ 'targetInventory.orderProduct',
276
292
  'targetInventory.product.productDetails',
277
293
  'targetInventory.product.productDetails.product',
278
294
  'targetInventory.product.productDetails.childProductDetail'
279
295
  ]);
280
296
  const releaseGood = worksheetDetail.targetInventory.releaseGood;
281
297
  let targetInventory = worksheetDetail.targetInventory;
298
+ let targetProduct = targetInventory.orderProduct;
282
299
  const product = targetInventory.product;
283
300
  let inventory = targetInventory.inventory;
301
+ let bizplace = worksheetDetail.worksheet.bizplace;
284
302
  //validation to prevent duplicated picking
285
303
  let oiValidate = await this.trxMgr.getRepository(sales_base_1.OrderInventory).findOne({
286
304
  where: { domain: this.domain, id: targetInventory.id, status: sales_base_1.ORDER_INVENTORY_STATUS.PICKING }
@@ -310,19 +328,62 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
310
328
  detail.packingSize == packingSize &&
311
329
  ((_a = detail.product) === null || _a === void 0 ? void 0 : _a.id) === product.id;
312
330
  });
313
- if (!foundProductDetail) {
331
+ if (!foundProductDetail && !(product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanningOutbound)) {
314
332
  const roProductDetail = productDetails.find((parentDetail) => parentDetail.packingType === packingType && parentDetail.packingSize == packingSize);
315
333
  pickedQty = await this.getChildQty(productDetails, productBarcode, roProductDetail);
316
- if (pickedQty > releaseQty) {
334
+ if (pickedQty + targetInventory.pickedQty > releaseQty) {
317
335
  throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `over release`));
318
336
  }
319
337
  }
320
- if (product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanning) {
321
- if (!serialNumber || serialNumber == '')
338
+ else if (!foundProductDetail) {
339
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode));
340
+ }
341
+ if (product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanningOutbound) {
342
+ if (!serialNumber || serialNumber == '') {
322
343
  throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `require serial number`));
323
- if (serialNumber) {
324
- targetInventory.serialNumber = JSON.stringify(targetInventory.serialNumber ? [...JSON.parse(targetInventory.serialNumber), serialNumber] : [serialNumber]);
325
344
  }
345
+ let totalInventoryItems = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).count({
346
+ where: {
347
+ inventory,
348
+ status: (0, typeorm_1.Not)((0, typeorm_1.In)([warehouse_base_1.INVENTORY_STATUS.TERMINATED, warehouse_base_1.INVENTORY_STATUS.PICKED]))
349
+ }
350
+ });
351
+ let foundSerialNumber = await this.trxMgr
352
+ .getRepository(warehouse_base_1.InventoryItem)
353
+ .findOne({ where: { domain: this.domain, serialNumber: serialNumber, product } });
354
+ if (foundSerialNumber) {
355
+ if (foundSerialNumber.inventoryId !== inventory.id) {
356
+ throw new Error('Serial Number scanned is in another inventory');
357
+ }
358
+ if (foundSerialNumber.outboundOrderId) {
359
+ let releaseGood = await this.trxMgr
360
+ .getRepository(sales_base_1.ReleaseGood)
361
+ .findOne({ where: { id: foundSerialNumber.outboundOrderId } });
362
+ throw new Error(`Inventory Item is already picked in ${releaseGood.name}`);
363
+ }
364
+ foundSerialNumber.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
365
+ foundSerialNumber.updater = this.user;
366
+ foundSerialNumber.outboundOrderId = releaseGood.id;
367
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(foundSerialNumber);
368
+ }
369
+ else {
370
+ if (totalInventoryItems >= inventory.qty) {
371
+ throw new Error('Insufficient inventory quantity to scan new serial number');
372
+ }
373
+ let inventoryItem = new warehouse_base_1.InventoryItem();
374
+ inventoryItem.name = warehouse_base_1.InventoryNoGenerator.inventoryItemName();
375
+ inventoryItem.serialNumber = serialNumber;
376
+ inventoryItem.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
377
+ inventoryItem.outboundOrderId = releaseGood.id;
378
+ inventoryItem.source = warehouse_base_1.INVENTORY_ITEM_SOURCE.OUTBOUND;
379
+ inventoryItem.product = product;
380
+ inventoryItem.inventory = inventory;
381
+ inventoryItem.domain = this.domain;
382
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItem);
383
+ }
384
+ }
385
+ if (toteNo) {
386
+ await this.toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace);
326
387
  }
327
388
  await this.updatePickingTransaction(releaseGood, targetInventory, worksheetDetail, inventory, pickedQty);
328
389
  }
@@ -330,12 +391,14 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
330
391
  throw error;
331
392
  }
332
393
  }
333
- async picking(worksheetDetailName, worksheetType, palletId, locationName, pickedQty, binLocation, serialNumber) {
394
+ async picking(worksheetDetailName, worksheetType, palletId, locationName, pickedQty, binLocation, serialNumber, toteNo) {
334
395
  try {
335
396
  let worksheetDetail = await this.findExecutableWorksheetDetailByName(worksheetDetailName, worksheetType, [
336
397
  'worksheet',
398
+ 'worksheet.bizplace',
337
399
  'targetInventory',
338
400
  'targetInventory.releaseGood',
401
+ 'targetInventory.orderProduct',
339
402
  'targetInventory.inventory',
340
403
  'targetInventory.inventory.location',
341
404
  'targetInventory.product'
@@ -344,6 +407,8 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
344
407
  let targetInventory = worksheetDetail.targetInventory;
345
408
  const product = targetInventory.product;
346
409
  let inventory = targetInventory.inventory;
410
+ let targetProduct = targetInventory.orderProduct;
411
+ let bizplace = worksheetDetail.worksheet.bizplace;
347
412
  //validation to prevent duplicated picking
348
413
  let oiValidate = await this.trxMgr.getRepository(sales_base_1.OrderInventory).findOne({
349
414
  where: { domain: this.domain, id: targetInventory.id, status: sales_base_1.ORDER_INVENTORY_STATUS.PICKING }
@@ -353,16 +418,79 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
353
418
  //validation to prevent over release
354
419
  if (inventory.qty <= 0)
355
420
  throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `over release`));
356
- if (inventory.palletId !== palletId)
421
+ if (inventory.palletId !== palletId && !(product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanningOutbound))
357
422
  throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('Pallet ID', palletId, inventory.palletId));
358
- if (product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanning) {
359
- if (!serialNumber || serialNumber == '')
423
+ if (product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanningOutbound) {
424
+ if (!serialNumber || serialNumber == '') {
360
425
  throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `require serial number`));
361
- if (serialNumber) {
362
- targetInventory.serialNumber = JSON.stringify(targetInventory.serialNumber ? [...JSON.parse(targetInventory.serialNumber), serialNumber] : [serialNumber]);
426
+ }
427
+ let totalInventoryItems = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).count({
428
+ where: {
429
+ inventory,
430
+ status: (0, typeorm_1.Not)((0, typeorm_1.In)([warehouse_base_1.INVENTORY_STATUS.TERMINATED, warehouse_base_1.INVENTORY_STATUS.PICKED]))
431
+ }
432
+ });
433
+ let foundSerialNumber = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).findOne({
434
+ where: { domain: this.domain, serialNumber: serialNumber, product },
435
+ relations: ['product', 'inventory']
436
+ });
437
+ let scannedPalletIdInventory = await this.trxMgr
438
+ .getRepository(warehouse_base_1.Inventory)
439
+ .findOne({ where: { domain: this.domain, palletId }, relations: ['product'] });
440
+ if (foundSerialNumber) {
441
+ if (foundSerialNumber.outboundOrderId) {
442
+ let releaseGood = await this.trxMgr
443
+ .getRepository(sales_base_1.ReleaseGood)
444
+ .findOne({ where: { id: foundSerialNumber.outboundOrderId } });
445
+ throw new Error(`Inventory Item is already picked in ${releaseGood.name}`);
446
+ }
447
+ foundSerialNumber.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
448
+ foundSerialNumber.updater = this.user;
449
+ foundSerialNumber.outboundOrderId = releaseGood.id;
450
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(foundSerialNumber);
451
+ }
452
+ else {
453
+ if (totalInventoryItems >= inventory.qty) {
454
+ throw new Error('Insufficient inventory quantity to scan new serial number');
455
+ }
456
+ let inventoryItem = new warehouse_base_1.InventoryItem();
457
+ inventoryItem.name = warehouse_base_1.InventoryNoGenerator.inventoryItemName();
458
+ inventoryItem.serialNumber = serialNumber;
459
+ inventoryItem.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
460
+ inventoryItem.source = warehouse_base_1.INVENTORY_ITEM_SOURCE.OUTBOUND;
461
+ inventoryItem.outboundOrderId = releaseGood.id;
462
+ inventoryItem.product = product;
463
+ inventoryItem.inventory = scannedPalletIdInventory;
464
+ inventoryItem.domain = this.domain;
465
+ foundSerialNumber = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItem);
466
+ }
467
+ if (inventory.palletId !== palletId) {
468
+ let existingOrderInv = await this.trxMgr.getRepository(sales_base_1.OrderInventory).findOne({
469
+ where: {
470
+ domain: this.domain,
471
+ inventory: scannedPalletIdInventory,
472
+ releaseGood: releaseGood
473
+ }
474
+ });
475
+ if (existingOrderInv) {
476
+ //if replacement order inventory already existed in worksheet detail
477
+ await this.serialNumberReplacementForExistingOrderInv(existingOrderInv, targetInventory, worksheetDetail, foundSerialNumber);
478
+ }
479
+ else if (scannedPalletIdInventory.batchId == inventory.batchId &&
480
+ scannedPalletIdInventory.product.id == product.id &&
481
+ scannedPalletIdInventory.product.packingType == product.packingType) {
482
+ //if replacement order inventory does not exist
483
+ await this.serialNumberReplacement(targetInventory, scannedPalletIdInventory, releaseGood, product, worksheetDetail, foundSerialNumber);
484
+ }
485
+ else {
486
+ throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('Pallet ID', palletId, inventory.palletId));
487
+ }
363
488
  }
364
489
  }
365
490
  targetInventory = await this.checkAndSetBinPicking(targetInventory, binLocation);
491
+ if (toteNo) {
492
+ await this.toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace);
493
+ }
366
494
  await this.updatePickingTransaction(releaseGood, targetInventory, worksheetDetail, inventory, pickedQty);
367
495
  const fromLocation = targetInventory.inventory.location;
368
496
  if (locationName) {
@@ -573,11 +701,34 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
573
701
  name: releaseGoodNo,
574
702
  status: sales_base_1.ORDER_STATUS.PICKING
575
703
  });
704
+ const foundNotSealedOrderTote = await this.trxMgr
705
+ .getRepository(sales_base_1.OrderTote)
706
+ .findOne({ where: { releaseGood, closedDate: (0, typeorm_1.IsNull)() } });
707
+ if (foundNotSealedOrderTote) {
708
+ throw new Error('Please seal the tote(s) before completing');
709
+ }
576
710
  let worksheet = await this.findWorksheetByRefOrder(releaseGood, constants_1.WORKSHEET_TYPE.PICKING, [
577
711
  'worksheetDetails',
578
712
  'worksheetDetails.targetInventory'
579
713
  ]);
580
714
  await this.checkRecordValidity(worksheet, { status: constants_1.WORKSHEET_STATUS.EXECUTING });
715
+ let inventoryItems = await this.trxMgr
716
+ .getRepository(warehouse_base_1.InventoryItem)
717
+ .find({ where: { outboundOrderId: releaseGood.id } });
718
+ if (inventoryItems.length > 0) {
719
+ inventoryItems.forEach((itm) => {
720
+ itm.status = warehouse_base_1.INVENTORY_STATUS.TERMINATED;
721
+ itm.updater = this.user;
722
+ });
723
+ // let inventoryLists = InventoryItems.filter(
724
+ // (value, index, self) => index === self.findIndex(itm => itm.inventory.id === value.inventory.id)
725
+ // )
726
+ // inventoryLists.forEach((itm: Inventory) => {
727
+ // if (itm.inventory.qty - itm.releaseQty == 0)
728
+ // this.transactionInventory(itm, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.TERMINATED)
729
+ // })
730
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItems);
731
+ }
581
732
  let orderStatus;
582
733
  if (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.packingOption) {
583
734
  orderStatus = sales_base_1.ORDER_STATUS.READY_TO_PACK;
@@ -607,20 +758,20 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
607
758
  worksheet.endedAt = new Date();
608
759
  worksheet.updater = this.user;
609
760
  worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).save(worksheet);
610
- const worksheetDetails = worksheet.worksheetDetails;
761
+ const worksheetDetails = worksheet.worksheetDetails.filter(wsD => wsD.status != 'MISSING');
611
762
  worksheetDetails.forEach((wsd) => {
612
763
  wsd.status = constants_1.WORKSHEET_STATUS.DONE;
613
764
  wsd.updater = this.user;
614
765
  });
615
766
  await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(worksheetDetails);
616
- const targetInventories = worksheet.worksheetDetails.map((wsd) => {
767
+ const targetInventories = worksheetDetails.map((wsd) => {
617
768
  let targetInventory = wsd.targetInventory;
618
769
  targetInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.TERMINATED;
619
770
  targetInventory.updater = this.user;
620
771
  return targetInventory;
621
772
  });
622
773
  await this.updateOrderTargets(targetInventories);
623
- const releaseGoods = worksheet.worksheetDetails.map((wsd) => {
774
+ const releaseGoods = worksheetDetails.map((wsd) => {
624
775
  let releaseGood = wsd.targetInventory.releaseGood;
625
776
  let orderStatus;
626
777
  if (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.packingOption) {
@@ -676,6 +827,7 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
676
827
  return orderInventory;
677
828
  }
678
829
  async updatePickingTransaction(releaseGood, orderInventory, worksheetDetail, inventory, pickedQty) {
830
+ var _a;
679
831
  const releaseQty = orderInventory.releaseQty;
680
832
  orderInventory.pickedQty = Boolean(orderInventory === null || orderInventory === void 0 ? void 0 : orderInventory.pickedQty) ? orderInventory.pickedQty + pickedQty : pickedQty;
681
833
  if (orderInventory.pickedQty == releaseQty) {
@@ -684,6 +836,9 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
684
836
  throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `quantity can't exceed limitation`));
685
837
  }
686
838
  orderInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
839
+ orderInventory.pickedBy = (_a = this.user) === null || _a === void 0 ? void 0 : _a.name;
840
+ orderInventory.pickedByUser = this.user;
841
+ orderInventory.pickedAt = new Date();
687
842
  inventory.qty -= orderInventory.releaseQty;
688
843
  inventory.uomValue = Math.round((inventory.uomValue - orderInventory.releaseUomValue) * 100) / 100;
689
844
  inventory.lockedQty = inventory.lockedQty - orderInventory.releaseQty;
@@ -692,6 +847,16 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
692
847
  worksheetDetail.status = constants_1.WORKSHEET_STATUS.DONE;
693
848
  worksheetDetail.updater = this.user;
694
849
  await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(worksheetDetail);
850
+ let inventoryItems = await this.trxMgr
851
+ .getRepository(warehouse_base_1.InventoryItem)
852
+ .find({ where: { outboundOrderId: releaseGood.id } });
853
+ if (inventoryItems.length > 0) {
854
+ inventoryItems.forEach((itm) => {
855
+ itm.status = warehouse_base_1.INVENTORY_STATUS.PICKED;
856
+ itm.updater = this.user;
857
+ });
858
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItems);
859
+ }
695
860
  if (leftQty === 0) {
696
861
  inventory.status = warehouse_base_1.INVENTORY_STATUS.TERMINATED;
697
862
  await this.transactionInventory(inventory, releaseGood, 0, 0, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.TERMINATED);
@@ -700,6 +865,323 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
700
865
  await this.updateOrderTargets([orderInventory]);
701
866
  return orderInventory;
702
867
  }
868
+ async serialNumberReplacementForExistingOrderInv(existingOrderInv, targetInventory, worksheetDetail, foundSerialNumber) {
869
+ try {
870
+ //1. update replacement inventory, order inventory, old inventory, old order inventory quantity
871
+ let newInventory = await this.trxMgr
872
+ .getRepository(warehouse_base_1.Inventory)
873
+ .findOne({ where: { domain: this.domain, id: existingOrderInv === null || existingOrderInv === void 0 ? void 0 : existingOrderInv.inventoryId } });
874
+ let newOrderInventory = await this.trxMgr
875
+ .getRepository(sales_base_1.OrderInventory)
876
+ .findOne({ where: { domain: this.domain, id: existingOrderInv === null || existingOrderInv === void 0 ? void 0 : existingOrderInv.id } });
877
+ let oldInventory = await this.trxMgr
878
+ .getRepository(warehouse_base_1.Inventory)
879
+ .findOne({ where: { domain: this.domain, id: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.inventory.id } });
880
+ let oldOrderInventory = await this.trxMgr
881
+ .getRepository(sales_base_1.OrderInventory)
882
+ .findOne({ where: { domain: this.domain, id: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.id } });
883
+ //if replacement inventory quantity insufficient
884
+ if (newInventory.qty - newInventory.lockedQty < targetInventory.releaseQty - targetInventory.pickedQty) {
885
+ newOrderInventory.releaseQty += newInventory.qty - newInventory.lockedQty;
886
+ newOrderInventory.releaseUomValue += newInventory.uomValue - newInventory.lockedUomValue;
887
+ oldOrderInventory.releaseQty -= newOrderInventory.releaseQty;
888
+ oldOrderInventory.releaseUomValue -= newOrderInventory.releaseUomValue;
889
+ oldInventory.lockedQty -= newOrderInventory.releaseQty;
890
+ oldInventory.lockedUomValue -= newOrderInventory.releaseUomValue;
891
+ newInventory.lockedQty = newInventory.qty;
892
+ newInventory.lockedUomValue = newInventory.uomValue;
893
+ }
894
+ else {
895
+ newOrderInventory.releaseQty += targetInventory.releaseQty - targetInventory.pickedQty;
896
+ newOrderInventory.releaseUomValue +=
897
+ newOrderInventory.releaseQty * (targetInventory.releaseUomValue / targetInventory.releaseQty);
898
+ oldOrderInventory.releaseQty = targetInventory.pickedQty;
899
+ oldOrderInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
900
+ oldOrderInventory.releaseUomValue =
901
+ (targetInventory.releaseUomValue / targetInventory.releaseQty) * oldOrderInventory.releaseQty;
902
+ oldInventory.lockedQty -= targetInventory.releaseQty - targetInventory.pickedQty;
903
+ oldInventory.lockedUomValue =
904
+ oldInventory.lockedQty * (targetInventory.releaseUomValue / targetInventory.releaseQty);
905
+ newInventory.lockedQty = newInventory.lockedQty + (targetInventory.releaseQty - targetInventory.pickedQty);
906
+ newInventory.lockedUomValue =
907
+ (targetInventory.releaseUomValue / targetInventory.releaseQty) * newInventory.lockedQty;
908
+ }
909
+ newInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, newInventory), { updater: this.user }));
910
+ newOrderInventory = await this.trxMgr.getRepository(sales_base_1.OrderInventory).save(Object.assign(Object.assign({}, newOrderInventory), { status: warehouse_base_1.INVENTORY_STATUS.PICKING, pickedQty: existingOrderInv.pickedQty++, updater: this.user }));
911
+ oldInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, oldInventory), { updater: this.user }));
912
+ foundSerialNumber = await this.trxMgr
913
+ .getRepository(warehouse_base_1.InventoryItem)
914
+ .save(Object.assign(Object.assign({}, foundSerialNumber), { inventory: newInventory }));
915
+ //2. update replacement worksheet detail
916
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).update({
917
+ targetInventory: existingOrderInv
918
+ }, {
919
+ status: constants_1.WORKSHEET_STATUS.EXECUTING,
920
+ updater: this.user
921
+ });
922
+ if (oldOrderInventory.releaseQty !== 0) {
923
+ oldOrderInventory = await this.trxMgr
924
+ .getRepository(sales_base_1.OrderInventory)
925
+ .save(Object.assign(Object.assign({}, oldOrderInventory), { updater: this.user }));
926
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).update({
927
+ name: worksheetDetail.name
928
+ }, {
929
+ status: constants_1.WORKSHEET_STATUS.DONE,
930
+ updater: this.user
931
+ });
932
+ }
933
+ else {
934
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).delete(worksheetDetail.ild);
935
+ await this.trxMgr.getRepository(sales_base_1.OrderInventory).delete(targetInventory.id);
936
+ }
937
+ }
938
+ catch (e) { }
939
+ }
940
+ async serialNumberReplacement(targetInventory, scannedPalletIdInventory, releaseGood, product, worksheetDetail, foundSerialNumber) {
941
+ try {
942
+ //1. create new inventory, new order inventory, update old inventory, old order inventory quantity
943
+ let newInventory = await this.trxMgr
944
+ .getRepository(warehouse_base_1.Inventory)
945
+ .findOne({ where: { id: scannedPalletIdInventory === null || scannedPalletIdInventory === void 0 ? void 0 : scannedPalletIdInventory.id } });
946
+ let oldInventory = await this.trxMgr
947
+ .getRepository(warehouse_base_1.Inventory)
948
+ .findOne({ where: { domain: this.domain, id: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.inventory.id } });
949
+ let oldOrderInventory = await this.trxMgr
950
+ .getRepository(sales_base_1.OrderInventory)
951
+ .findOne({ where: { domain: this.domain, id: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.id } });
952
+ let newOrderInventoryReleaseQty = 0;
953
+ let newOrderInventoryReleaseUomValue = 0;
954
+ //if replacement inventory quantity insufficient
955
+ if (newInventory.qty - newInventory.lockedQty < targetInventory.releaseQty - targetInventory.pickedQty) {
956
+ newOrderInventoryReleaseQty = newInventory.qty - newInventory.lockedQty;
957
+ newOrderInventoryReleaseUomValue = newInventory.uomValue - newInventory.lockedUomValue;
958
+ oldOrderInventory.releaseQty -= newOrderInventoryReleaseQty;
959
+ oldOrderInventory.releaseUomValue -= newOrderInventoryReleaseUomValue;
960
+ oldInventory.lockedQty -= newOrderInventoryReleaseQty;
961
+ oldInventory.lockedUomValue -= newOrderInventoryReleaseUomValue;
962
+ newInventory.lockedQty = newInventory.qty;
963
+ newInventory.lockedUomValue = newInventory.uomValue;
964
+ }
965
+ else {
966
+ newOrderInventoryReleaseQty = targetInventory.releaseQty - targetInventory.pickedQty;
967
+ newOrderInventoryReleaseUomValue =
968
+ newOrderInventoryReleaseQty * (targetInventory.releaseUomValue / targetInventory.releaseQty);
969
+ oldOrderInventory.releaseQty = targetInventory.pickedQty;
970
+ oldOrderInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
971
+ oldOrderInventory.releaseUomValue =
972
+ (targetInventory.releaseUomValue / targetInventory.releaseQty) * oldOrderInventory.releaseQty;
973
+ oldInventory.lockedQty -= newOrderInventoryReleaseQty;
974
+ oldInventory.lockedUomValue -= newOrderInventoryReleaseUomValue;
975
+ newInventory.lockedQty = newInventory.lockedQty + (targetInventory.releaseQty - targetInventory.pickedQty);
976
+ newInventory.lockedUomValue =
977
+ (targetInventory.releaseUomValue / targetInventory.releaseQty) * newInventory.lockedQty;
978
+ }
979
+ newInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, newInventory), { updater: this.user }));
980
+ let newTargetInventory = ((_a) => {
981
+ var { id } = _a, targetInventory = __rest(_a, ["id"]);
982
+ return targetInventory;
983
+ })(targetInventory);
984
+ let newOrderInventory = await this.trxMgr.getRepository(sales_base_1.OrderInventory).save(Object.assign(Object.assign({}, newTargetInventory), { domain: this.domain, name: sales_base_1.OrderNoGenerator.orderInventory(), releaseGood, releaseQty: newOrderInventoryReleaseQty, releaseUomValue: newOrderInventoryReleaseUomValue, pickedQty: 1, product, inventory: scannedPalletIdInventory, creator: this.user, updater: this.user }));
985
+ oldInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, oldInventory), { updater: this.user }));
986
+ foundSerialNumber = await this.trxMgr
987
+ .getRepository(warehouse_base_1.InventoryItem)
988
+ .save(Object.assign(Object.assign({}, foundSerialNumber), { inventory: newInventory }));
989
+ //3. create new worksheet detail
990
+ let NewWorksheetDetail = ((_a) => {
991
+ var { id } = _a, worksheetDetail = __rest(_a, ["id"]);
992
+ return worksheetDetail;
993
+ })(worksheetDetail);
994
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(Object.assign(Object.assign({}, NewWorksheetDetail), { domain: this.domain, name: utils_1.WorksheetNoGenerator.pickingDetail(), targetInventory: newOrderInventory, status: constants_1.WORKSHEET_STATUS.EXECUTING, creator: this.user, updater: this.user }));
995
+ //if old order inventory release quantity is 0 then delete
996
+ if (oldOrderInventory.releaseQty !== 0) {
997
+ oldOrderInventory = await this.trxMgr
998
+ .getRepository(sales_base_1.OrderInventory)
999
+ .save(Object.assign(Object.assign({}, oldOrderInventory), { updater: this.user }));
1000
+ //4. update old worksheet detail
1001
+ worksheetDetail = await this.trxMgr.getRepository(entities_1.WorksheetDetail).update({
1002
+ name: worksheetDetail.name
1003
+ }, {
1004
+ status: constants_1.WORKSHEET_STATUS.DONE,
1005
+ updater: this.user
1006
+ });
1007
+ }
1008
+ else {
1009
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).delete(worksheetDetail.id);
1010
+ await this.trxMgr.getRepository(sales_base_1.OrderInventory).delete(targetInventory.id);
1011
+ }
1012
+ }
1013
+ catch (e) { }
1014
+ }
1015
+ async toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace) {
1016
+ //1. find tote
1017
+ let foundTote = await this.trxMgr
1018
+ .getRepository(warehouse_base_1.Tote)
1019
+ .findOne({ where: { bizplace, name: toteNo, deletedAt: (0, typeorm_1.IsNull)() } });
1020
+ if ((foundTote === null || foundTote === void 0 ? void 0 : foundTote.status) == warehouse_base_1.TOTE_STATUS.DAMAGED || (foundTote === null || foundTote === void 0 ? void 0 : foundTote.status) == warehouse_base_1.TOTE_STATUS.DISPATCHED) {
1021
+ foundTote = null;
1022
+ }
1023
+ //2. find order tote
1024
+ let foundOrderTote = await this.trxMgr
1025
+ .getRepository(sales_base_1.OrderTote)
1026
+ .findOne({ where: { domain: this.domain, name: toteNo, releaseGood } });
1027
+ //if order tote not found the create one, if tote not found means it's tote box
1028
+ //create order tote item
1029
+ if (!foundOrderTote) {
1030
+ const orderTote = await this.trxMgr.getRepository(sales_base_1.OrderTote).save({
1031
+ name: toteNo,
1032
+ domain: this.domain,
1033
+ releaseGood,
1034
+ tote: foundTote ? foundTote : null,
1035
+ updater: this.user
1036
+ });
1037
+ const orderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).save({
1038
+ domain: this.domain,
1039
+ name: sales_base_1.OrderNoGenerator.orderToteItem(),
1040
+ orderProduct: targetProduct,
1041
+ orderInventory: targetInventory,
1042
+ orderTote,
1043
+ qty: pickedQty,
1044
+ updater: this.user
1045
+ });
1046
+ }
1047
+ else {
1048
+ if (foundOrderTote.closedDate) {
1049
+ throw new Error('Tote has been sealed, please try another tote!');
1050
+ }
1051
+ //if found order tote then check if order tote item exist
1052
+ const foundOrderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).findOne({
1053
+ domain: this.domain,
1054
+ orderProduct: targetProduct,
1055
+ orderInventory: targetInventory,
1056
+ orderTote: foundOrderTote
1057
+ });
1058
+ //if not order tote item doesnt exist then create one
1059
+ if (!foundOrderToteItem) {
1060
+ const orderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).save({
1061
+ domain: this.domain,
1062
+ name: sales_base_1.OrderNoGenerator.orderToteItem(),
1063
+ orderProduct: targetProduct,
1064
+ orderInventory: targetInventory,
1065
+ orderTote: foundOrderTote,
1066
+ qty: pickedQty,
1067
+ updater: this.user
1068
+ });
1069
+ }
1070
+ else {
1071
+ //if found order tote item found then add the quantity
1072
+ const orderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).save(Object.assign(Object.assign({}, foundOrderToteItem), { qty: foundOrderToteItem.qty + pickedQty }));
1073
+ }
1074
+ }
1075
+ }
1076
+ async undoSerialNumberPicking(worksheetDetailName, inventoryItemId) {
1077
+ const worksheetDetail = await this.trxMgr.getRepository(entities_1.WorksheetDetail).findOne({
1078
+ where: { name: worksheetDetailName, domain: this.domain, status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(constants_1.WORKSHEET_STATUS.DEACTIVATED)) },
1079
+ relations: [
1080
+ 'worksheet',
1081
+ 'worksheet.releaseGood',
1082
+ 'targetInventory',
1083
+ 'targetInventory.product',
1084
+ 'targetInventory.inventory'
1085
+ ]
1086
+ });
1087
+ let targetInventory = worksheetDetail.targetInventory;
1088
+ let releaseGood = worksheetDetail.worksheet.releaseGood;
1089
+ if (targetInventory.releaseQty == targetInventory.pickedQty &&
1090
+ targetInventory.status == sales_base_1.ORDER_INVENTORY_STATUS.PICKED) {
1091
+ targetInventory.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
1092
+ await this.trxMgr
1093
+ .getRepository(entities_1.WorksheetDetail)
1094
+ .update({ id: worksheetDetail.id }, { status: constants_1.WORKSHEET_STATUS.EXECUTING });
1095
+ targetInventory.inventory.qty += targetInventory.releaseQty;
1096
+ targetInventory.inventory.uomValue =
1097
+ Math.round((targetInventory.inventory.uomValue + targetInventory.releaseUomValue) * 100) / 100;
1098
+ targetInventory.inventory.lockedQty = targetInventory.inventory.lockedQty + targetInventory.releaseQty;
1099
+ targetInventory.inventory.lockedUomValue =
1100
+ Math.round((targetInventory.inventory.lockedUomValue + targetInventory.releaseUomValue) * 100) / 100;
1101
+ await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(targetInventory.inventory);
1102
+ }
1103
+ let InventoryItems = await this.trxMgr
1104
+ .getRepository(warehouse_base_1.InventoryItem)
1105
+ .find({ where: { outboundOrderId: releaseGood.id } });
1106
+ let removeInventoryItem = await this.trxMgr
1107
+ .getRepository(warehouse_base_1.InventoryItem)
1108
+ .findOne({ where: { id: inventoryItemId } });
1109
+ if (InventoryItems.length > 0) {
1110
+ InventoryItems.forEach((itm) => {
1111
+ itm.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
1112
+ itm.updater = this.user;
1113
+ });
1114
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(InventoryItems);
1115
+ }
1116
+ if (removeInventoryItem.source == warehouse_base_1.INVENTORY_ITEM_SOURCE.OUTBOUND) {
1117
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).delete(removeInventoryItem.id);
1118
+ }
1119
+ else {
1120
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).update({
1121
+ id: inventoryItemId
1122
+ }, {
1123
+ status: warehouse_base_1.INVENTORY_STATUS.STORED,
1124
+ outboundOrderId: null,
1125
+ updater: this.user
1126
+ });
1127
+ }
1128
+ targetInventory.pickedQty--;
1129
+ targetInventory.updater = this.user;
1130
+ await this.updateOrderTargets([targetInventory]);
1131
+ }
1132
+ async sealTote(sealNo, toteNo, orderNo) {
1133
+ const checkDuplicateSeal = await this.trxMgr.getRepository(sales_base_1.OrderToteSeal).findOne({
1134
+ where: {
1135
+ name: sealNo
1136
+ }
1137
+ });
1138
+ if (checkDuplicateSeal) {
1139
+ throw new Error('Seal has been scanned before');
1140
+ }
1141
+ const releaseGood = await this.trxMgr
1142
+ .getRepository(sales_base_1.ReleaseGood)
1143
+ .findOne({ where: { domain: this.domain, name: orderNo }, relations: ['bizplace', 'bizplace.domain'] });
1144
+ let sealNoSetting = await this.trxMgr.getRepository(setting_base_1.Setting).findOne({
1145
+ where: {
1146
+ domain: releaseGood.bizplace.domain,
1147
+ name: 'minimum-seal-number'
1148
+ }
1149
+ });
1150
+ if (!sealNoSetting) {
1151
+ sealNoSetting = await this.trxMgr.getRepository(setting_base_1.Setting).findOne({
1152
+ where: {
1153
+ domain: this.domain,
1154
+ name: 'minimum-seal-number'
1155
+ }
1156
+ });
1157
+ }
1158
+ const foundOrderTote = await this.trxMgr
1159
+ .getRepository(sales_base_1.OrderTote)
1160
+ .findOne({ where: { domain: this.domain, name: toteNo, releaseGood } });
1161
+ if (!foundOrderTote) {
1162
+ throw new Error('Tote not scanned under this order');
1163
+ }
1164
+ let totalOrderToteItems = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).count({
1165
+ where: {
1166
+ orderTote: foundOrderTote
1167
+ }
1168
+ });
1169
+ if (totalOrderToteItems < 1) {
1170
+ throw new Error('Tote carton is empty');
1171
+ }
1172
+ const newToteOrderSeal = await this.trxMgr.getRepository(sales_base_1.OrderToteSeal).save({
1173
+ domain: this.domain,
1174
+ name: sealNo,
1175
+ orderTote: foundOrderTote,
1176
+ updater: this.user
1177
+ });
1178
+ const totalSeal = await this.trxMgr.getRepository(sales_base_1.OrderToteSeal).count({
1179
+ orderTote: foundOrderTote
1180
+ });
1181
+ if (totalSeal >= parseInt((sealNoSetting === null || sealNoSetting === void 0 ? void 0 : sealNoSetting.value) || 0)) {
1182
+ await this.trxMgr.getRepository(sales_base_1.OrderTote).save(Object.assign(Object.assign({}, foundOrderTote), { closedDate: new Date() }));
1183
+ }
1184
+ }
703
1185
  }
704
1186
  exports.PickingWorksheetController = PickingWorksheetController;
705
1187
  //# sourceMappingURL=picking-worksheet-controller.js.map