@things-factory/worksheet-base 4.3.2 → 4.4.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist-server/constants/index.js +5 -1
  2. package/dist-server/constants/index.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/index.js +5 -1
  4. package/dist-server/controllers/ecommerce/index.js.map +1 -1
  5. package/dist-server/controllers/inbound/index.js +5 -1
  6. package/dist-server/controllers/inbound/index.js.map +1 -1
  7. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +3 -9
  8. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/index.js +5 -2
  10. package/dist-server/controllers/index.js.map +1 -1
  11. package/dist-server/controllers/inspect/index.js +5 -1
  12. package/dist-server/controllers/inspect/index.js.map +1 -1
  13. package/dist-server/controllers/outbound/index.js +5 -1
  14. package/dist-server/controllers/outbound/index.js.map +1 -1
  15. package/dist-server/controllers/outbound/loading-worksheet-controller.js +10 -47
  16. package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
  17. package/dist-server/controllers/outbound/picking-worksheet-controller.js +5 -142
  18. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  19. package/dist-server/controllers/outbound/sorting-worksheet-controller.js +20 -116
  20. package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
  21. package/dist-server/controllers/render-grn.js +18 -18
  22. package/dist-server/controllers/vas/index.js +5 -1
  23. package/dist-server/controllers/vas/index.js.map +1 -1
  24. package/dist-server/graphql/index.js +5 -1
  25. package/dist-server/graphql/index.js.map +1 -1
  26. package/dist-server/graphql/resolvers/index.js +5 -1
  27. package/dist-server/graphql/resolvers/index.js.map +1 -1
  28. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +1 -14
  29. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
  30. package/dist-server/graphql/resolvers/worksheet/loading/loading.js +10 -3
  31. package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
  32. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +21 -55
  33. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
  34. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +0 -1
  35. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  36. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +1 -1
  37. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  38. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +6 -8
  39. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  40. package/dist-server/graphql/resolvers/worksheet/picking/index.js +1 -2
  41. package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
  42. package/dist-server/graphql/resolvers/worksheet/picking/picking.js +4 -4
  43. package/dist-server/graphql/resolvers/worksheet/picking/picking.js.map +1 -1
  44. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +4 -4
  45. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
  46. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +1 -10
  47. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  48. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js +6 -11
  49. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js.map +1 -1
  50. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js +4 -4
  51. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -1
  52. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js +4 -4
  53. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -1
  54. package/dist-server/graphql/resolvers/worksheet/vas-transactions/index.js +5 -1
  55. package/dist-server/graphql/resolvers/worksheet/vas-transactions/index.js.map +1 -1
  56. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.js +5 -1
  57. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.js.map +1 -1
  58. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/index.js +5 -1
  59. package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/index.js.map +1 -1
  60. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/index.js +5 -1
  61. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/index.js.map +1 -1
  62. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/index.js +5 -1
  63. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/index.js.map +1 -1
  64. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/index.js +5 -1
  65. package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/index.js.map +1 -1
  66. package/dist-server/graphql/resolvers/worksheet/worksheet.js +0 -2
  67. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  68. package/dist-server/graphql/resolvers/worksheet/worksheets.js +2 -17
  69. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
  70. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +3 -5
  71. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
  72. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js +4 -15
  73. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js.map +1 -1
  74. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +1 -4
  75. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
  76. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +2 -6
  77. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
  78. package/dist-server/graphql/types/index.js +5 -1
  79. package/dist-server/graphql/types/index.js.map +1 -1
  80. package/dist-server/graphql/types/worksheet/index.js +0 -10
  81. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  82. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js +0 -1
  83. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js.map +1 -1
  84. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +0 -2
  85. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
  86. package/dist-server/graphql/types/worksheet/worksheet-info.js +0 -2
  87. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  88. package/dist-server/graphql/types/worksheet/worksheet.js +0 -1
  89. package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -1
  90. package/dist-server/index.js +5 -1
  91. package/dist-server/index.js.map +1 -1
  92. package/dist-server/routes.js +0 -4
  93. package/dist-server/routes.js.map +1 -1
  94. package/dist-server/utils/index.js +5 -1
  95. package/dist-server/utils/index.js.map +1 -1
  96. package/package.json +17 -17
  97. package/server/controllers/inbound/unloading-worksheet-controller.ts +3 -14
  98. package/server/controllers/index.ts +0 -1
  99. package/server/controllers/outbound/loading-worksheet-controller.ts +17 -83
  100. package/server/controllers/outbound/picking-worksheet-controller.ts +7 -178
  101. package/server/controllers/outbound/sorting-worksheet-controller.ts +27 -167
  102. package/server/controllers/render-grn.ts +18 -18
  103. package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +0 -14
  104. package/server/graphql/resolvers/worksheet/loading/loading.ts +12 -5
  105. package/server/graphql/resolvers/worksheet/loading-worksheet.ts +13 -66
  106. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +1 -1
  107. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +1 -1
  108. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +11 -13
  109. package/server/graphql/resolvers/worksheet/picking/index.ts +1 -3
  110. package/server/graphql/resolvers/worksheet/picking/picking.ts +4 -30
  111. package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +4 -7
  112. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +2 -13
  113. package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +9 -13
  114. package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +4 -5
  115. package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +4 -5
  116. package/server/graphql/resolvers/worksheet/worksheet.ts +0 -2
  117. package/server/graphql/resolvers/worksheet/worksheets.ts +2 -26
  118. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +3 -12
  119. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +7 -22
  120. package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +2 -6
  121. package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +1 -7
  122. package/server/graphql/types/worksheet/index.ts +0 -10
  123. package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +0 -1
  124. package/server/graphql/types/worksheet/worksheet-detail-info.ts +0 -2
  125. package/server/graphql/types/worksheet/worksheet-info.ts +0 -2
  126. package/server/graphql/types/worksheet/worksheet.ts +0 -1
  127. package/server/routes.ts +0 -5
  128. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js +0 -15
  129. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js.map +0 -1
  130. package/server/controllers/render-fm-grn.ts +0 -266
  131. package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +0 -25
@@ -1,5 +1,3 @@
1
- import { IsNull, In } from 'typeorm'
2
-
3
1
  import { VasWorksheetController } from '../vas/vas-worksheet-controller'
4
2
  import { Product, ProductDetail } from '@things-factory/product-base'
5
3
  import {
@@ -8,22 +6,11 @@ import {
8
6
  InventoryItem,
9
7
  INVENTORY_STATUS,
10
8
  InventoryNoGenerator,
11
- INVENTORY_ITEM_SOURCE,
12
- Tote,
13
- TOTE_STATUS
9
+ INVENTORY_ITEM_SOURCE
14
10
  } from '@things-factory/warehouse-base'
15
- import {
16
- ReleaseGood,
17
- OrderInventory,
18
- ORDER_INVENTORY_STATUS,
19
- ORDER_STATUS,
20
- OrderTote,
21
- OrderToteItem,
22
- OrderNoGenerator
23
- } from '@things-factory/sales-base'
11
+ import { ReleaseGood, OrderInventory, ORDER_INVENTORY_STATUS, ORDER_STATUS } from '@things-factory/sales-base'
24
12
  import { Worksheet, WorksheetDetail } from '../../entities'
25
13
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
26
- import { temporaryGetRemainInventoryAmount } from 'server/graphql/resolvers/worksheet/vas-transactions/common-utils'
27
14
 
28
15
  export class SortingWorksheetController extends VasWorksheetController {
29
16
  async generateSortingWorksheet(
@@ -75,8 +62,7 @@ export class SortingWorksheetController extends VasWorksheetController {
75
62
  taskNo: string,
76
63
  releaseGoodNo: string,
77
64
  productBarcode: string,
78
- serialNumber: string,
79
- toteNo: string
65
+ serialNumber: string
80
66
  ): Promise<void> {
81
67
  const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
82
68
  where: {
@@ -89,8 +75,6 @@ export class SortingWorksheetController extends VasWorksheetController {
89
75
  'worksheetDetails',
90
76
  'worksheetDetails.targetInventory',
91
77
  'worksheetDetails.targetInventory.product',
92
- 'worksheetDetails.targetInventory.orderProduct',
93
- 'worksheetDetails.targetInventory.bizplace',
94
78
  'worksheetDetails.targetInventory.inventory',
95
79
  'worksheetDetails.targetInventory.inventory.product',
96
80
  'worksheetDetails.targetInventory.inventory.product.productDetails',
@@ -220,17 +204,6 @@ export class SortingWorksheetController extends VasWorksheetController {
220
204
  } else {
221
205
  await this.updateOrderTargets([matchingOI])
222
206
  }
223
-
224
- if (toteNo) {
225
- await this.toteScanning(
226
- toteNo,
227
- matchingOI.orderProduct,
228
- matchingOI,
229
- 1,
230
- releaseGood,
231
- matchingOI.bizplace
232
- )
233
- }
234
207
  }
235
208
  })
236
209
  )
@@ -243,8 +216,7 @@ export class SortingWorksheetController extends VasWorksheetController {
243
216
  releaseGoodNo: string,
244
217
  productId: string,
245
218
  sortingQty: number,
246
- serialNumber: string,
247
- toteNo: string
219
+ serialNumber: string
248
220
  ): Promise<void> {
249
221
  const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
250
222
  where: {
@@ -257,8 +229,6 @@ export class SortingWorksheetController extends VasWorksheetController {
257
229
  'worksheetDetails',
258
230
  'worksheetDetails.targetInventory',
259
231
  'worksheetDetails.targetInventory.product',
260
- 'worksheetDetails.targetInventory.orderProduct',
261
- 'worksheetDetails.targetInventory.bizplace',
262
232
  'worksheetDetails.targetInventory.inventory',
263
233
  'worksheetDetails.targetInventory.inventory.product',
264
234
  'worksheetDetails.targetInventory.inventory.product.productDetails',
@@ -324,17 +294,6 @@ export class SortingWorksheetController extends VasWorksheetController {
324
294
  }
325
295
  }
326
296
 
327
- if (toteNo) {
328
- await this.toteScanning(
329
- toteNo,
330
- matchingOI.orderProduct,
331
- matchingOI,
332
- sortingQty,
333
- releaseGood,
334
- matchingOI.bizplace
335
- )
336
- }
337
-
338
297
  if (releaseQty != matchingOI?.sortedQty && sortingQty != 0) {
339
298
  if (product?.isRequireSerialNumberScanningOutbound) {
340
299
  matchingOI.sortedQty += sortingQty
@@ -379,50 +338,34 @@ export class SortingWorksheetController extends VasWorksheetController {
379
338
  }
380
339
 
381
340
  async completeOrderSorting(releaseGoodNo: string): Promise<ReleaseGood> {
382
- try {
383
- let releaseGood: ReleaseGood = await this.findRefOrder(
384
- ReleaseGood,
385
- {
386
- domain: this.domain,
387
- name: releaseGoodNo,
388
- status: ORDER_STATUS.SORTING
389
- },
390
- ['bizplace', 'orderInventories']
391
- )
392
-
393
- if (!releaseGood) {
394
- throw new Error('Order is already sorted')
395
- }
396
-
397
- const foundNotSealedOrderTote = await this.trxMgr
398
- .getRepository(OrderTote)
399
- .findOne({ where: { releaseGood, closedDate: IsNull() } })
400
-
401
- if (foundNotSealedOrderTote) {
402
- throw new Error('Please seal the tote(s) before proceeding')
403
- }
404
-
405
- releaseGood.status = ORDER_STATUS.READY_TO_LOAD
406
- releaseGood.updater = this.user
407
- await this.trxMgr.getRepository(ReleaseGood).save(releaseGood)
341
+ let releaseGood: ReleaseGood = await this.findRefOrder(
342
+ ReleaseGood,
343
+ {
344
+ domain: this.domain,
345
+ name: releaseGoodNo,
346
+ status: ORDER_STATUS.SORTING
347
+ },
348
+ ['bizplace', 'orderInventories']
349
+ )
408
350
 
409
- let inventoryItems: InventoryItem = await this.trxMgr
410
- .getRepository(InventoryItem)
411
- .find({ where: { outboundOrderId: releaseGood.id } })
351
+ releaseGood.status = ORDER_STATUS.READY_TO_LOAD
352
+ releaseGood.updater = this.user
353
+ await this.trxMgr.getRepository(ReleaseGood).save(releaseGood)
412
354
 
413
- if (inventoryItems.length > 0) {
414
- inventoryItems.forEach((itm: InventoryItem) => {
415
- itm.status = INVENTORY_STATUS.TERMINATED
416
- itm.updater = this.user
417
- })
355
+ let inventoryItems: InventoryItem = await this.trxMgr
356
+ .getRepository(InventoryItem)
357
+ .find({ where: { outboundOrderId: releaseGood.id } })
418
358
 
419
- await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)
420
- }
359
+ if (inventoryItems.length > 0) {
360
+ inventoryItems.forEach((itm: InventoryItem) => {
361
+ itm.status = INVENTORY_STATUS.TERMINATED
362
+ itm.updater = this.user
363
+ })
421
364
 
422
- return releaseGood
423
- } catch (e) {
424
- throw e
365
+ await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)
425
366
  }
367
+
368
+ return releaseGood
426
369
  }
427
370
 
428
371
  async completeWorksheetSorting(taskNo: string): Promise<Worksheet> {
@@ -440,16 +383,6 @@ export class SortingWorksheetController extends VasWorksheetController {
440
383
  ]
441
384
  })
442
385
 
443
- let releaseGoodIds = worksheet.worksheetDetails.map(itm => itm.targetInventory.releaseGood.id)
444
-
445
- const foundNotSealedOrderTote = await this.trxMgr
446
- .getRepository(OrderTote)
447
- .findOne({ where: { releaseGood: In(releaseGoodIds), closedDate: IsNull() } })
448
-
449
- if (foundNotSealedOrderTote) {
450
- throw new Error('Please seal the tote(s) before proceeding')
451
- }
452
-
453
386
  this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })
454
387
 
455
388
  const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
@@ -465,77 +398,4 @@ export class SortingWorksheetController extends VasWorksheetController {
465
398
 
466
399
  return worksheet
467
400
  }
468
-
469
- private async toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace) {
470
- //1. find tote
471
- let foundTote: Tote = await this.trxMgr
472
- .getRepository(Tote)
473
- .findOne({ where: { bizplace, name: toteNo, deletedAt: IsNull() } })
474
-
475
- if (foundTote?.status == TOTE_STATUS.DAMAGED) {
476
- throw new Error('Tote is damaged')
477
- }
478
-
479
- if (foundTote?.status == TOTE_STATUS.DISPATCHED) {
480
- throw new Error('Tote is dispatched')
481
- }
482
-
483
- //2. find order tote
484
- let foundOrderTote: OrderTote = await this.trxMgr
485
- .getRepository(OrderTote)
486
- .findOne({ where: { domain: this.domain, name: toteNo, releaseGood } })
487
-
488
- //if order tote not found the create one, if tote not found means it's tote box
489
- //create order tote item
490
- if (!foundOrderTote) {
491
- const orderTote = await this.trxMgr.getRepository(OrderTote).save({
492
- name: toteNo,
493
- domain: this.domain,
494
- releaseGood,
495
- tote: foundTote ? foundTote : null,
496
- updater: this.user
497
- })
498
-
499
- const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({
500
- domain: this.domain,
501
- name: OrderNoGenerator.orderToteItem(),
502
- orderProduct: targetProduct,
503
- orderInventory: targetInventory,
504
- orderTote,
505
- qty: pickedQty,
506
- updater: this.user
507
- })
508
- } else {
509
- if (foundOrderTote.closedDate) {
510
- throw new Error('Tote has been sealed, please try another tote!')
511
- }
512
-
513
- //if found order tote then check if order tote item exist
514
- const foundOrderToteItem: OrderToteItem = await this.trxMgr.getRepository(OrderToteItem).findOne({
515
- domain: this.domain,
516
- orderProduct: targetProduct,
517
- orderInventory: targetInventory,
518
- orderTote: foundOrderTote
519
- })
520
-
521
- //if not order tote item doesnt exist then create one
522
- if (!foundOrderToteItem) {
523
- const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({
524
- domain: this.domain,
525
- name: OrderNoGenerator.orderToteItem(),
526
- orderProduct: targetProduct,
527
- orderInventory: targetInventory,
528
- orderTote: foundOrderTote,
529
- qty: pickedQty,
530
- updater: this.user
531
- })
532
- } else {
533
- //if found order tote item found then add the quantity
534
- const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({
535
- ...foundOrderToteItem,
536
- qty: foundOrderToteItem.qty + pickedQty
537
- })
538
- }
539
- }
540
- }
541
401
  }
@@ -52,25 +52,25 @@ export async function renderGRN({ grnNo, timezoneOffSet }, context: any) {
52
52
  })
53
53
 
54
54
  const qbReducedInventory = getRepository(ReducedInventoryHistory)
55
- .createQueryBuilder('ivh')
56
- .select('product_id', 'productId')
57
- .addSelect('batch_id', 'batchId')
58
- .addSelect('reusable_pallet_id', 'reusablePalletId')
59
- .addSelect('packing_type', 'packingType')
60
- .addSelect('sum(qty)', 'qty')
61
- .addSelect('sum(uom_value)', 'uomValue')
62
- .addSelect('uom', 'uom')
63
- .addSelect('count(distinct pallet_id)', 'pallet')
64
- .addSelect(`string_agg(distinct expiration_date::varchar,', ' order by expiration_date::varchar)`, 'expiryDate')
65
- .addSelect(`string_agg(distinct pallet_id::varchar,', ' order by pallet_id::varchar)`, 'palletId')
66
- .where('ivh.domain_id = :domainId', { domainId: domain.id })
67
- .andWhere('ivh.ref_order_id = :refOrderId', { refOrderId: foundGAN.id })
55
+ .createQueryBuilder(`ivh`)
56
+ .select(`product_id`, `productId`)
57
+ .addSelect(`batch_id`, `batchId`)
58
+ .addSelect(`reusable_pallet_id`, `reusablePalletId`)
59
+ .addSelect(`packing_type`, `packingType`)
60
+ .addSelect(`sum(qty)`, `qty`)
61
+ .addSelect(`sum(uom_value)`, `uomValue`)
62
+ .addSelect(`uom`, `uom`)
63
+ .addSelect(`count(distinct pallet_id)`, `pallet`)
64
+ .addSelect(`string_agg(distinct expiration_date::varchar,', ' order by expiration_date::varchar)`, `expiryDate`)
65
+ .addSelect(`string_agg(distinct pallet_id::varchar,', ' order by pallet_id::varchar)`, `palletId`)
66
+ .where(`ivh.domain_id = :domainId`, { domainId: domain.id })
67
+ .andWhere(`ivh.ref_order_id = :refOrderId`, { refOrderId: foundGAN.id })
68
68
  .andWhere(`ivh.transaction_type = 'UNLOADING'`)
69
- .groupBy('reusable_pallet_id')
70
- .addGroupBy('product_id')
71
- .addGroupBy('batch_id')
72
- .addGroupBy('packing_type')
73
- .addGroupBy('uom')
69
+ .groupBy(`reusable_pallet_id`)
70
+ .addGroupBy(`product_id`)
71
+ .addGroupBy(`batch_id`)
72
+ .addGroupBy(`packing_type`)
73
+ .addGroupBy(`uom`)
74
74
  .getRawMany()
75
75
 
76
76
  // 5. find domain contact point
@@ -3,7 +3,6 @@ import { getRepository, SelectQueryBuilder } from 'typeorm'
3
3
  import { ORDER_INVENTORY_STATUS } from '@things-factory/sales-base'
4
4
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
5
5
  import { Worksheet, WorksheetDetail } from '../../../entities'
6
- import { InventoryChange } from '@things-factory/warehouse-base'
7
6
 
8
7
  export const batchPickingWorksheetResolver = {
9
8
  async batchPickingWorksheet(_: any, { taskNo, locationSortingRules }, context: any) {
@@ -43,7 +42,6 @@ export const batchPickingWorksheetResolver = {
43
42
  .addSelect('LOC.column', 'column')
44
43
  .addSelect('LOC.shelf', 'shelf')
45
44
  .addSelect('BIN_LOC.name', 'binLocationName')
46
- .addSelect('WSD.status', 'status')
47
45
  .leftJoin('WSD.targetInventory', 'T_INV')
48
46
  .leftJoin('T_INV.inventory', 'INV')
49
47
  .leftJoin('T_INV.product', 'PROD')
@@ -72,7 +70,6 @@ export const batchPickingWorksheetResolver = {
72
70
  .addGroupBy('LOC.column')
73
71
  .addGroupBy('LOC.row')
74
72
  .addGroupBy('LOC.shelf')
75
- .addGroupBy('WSD.status')
76
73
 
77
74
  if (locationSortingRules?.length > 0) {
78
75
  locationSortingRules.forEach((rule: { name: string; desc: boolean }) => {
@@ -89,15 +86,6 @@ export const batchPickingWorksheetResolver = {
89
86
  partnerDomainId: worksheet.bizplace?.domain.id
90
87
  },
91
88
  worksheetDetailInfos: items.map(async (item: any) => {
92
- const inventoryChangesCount: number = await getRepository(InventoryChange).count({
93
- where: {
94
- inventory: item.inventoryId,
95
- status: 'PENDING',
96
- transactionType: 'MISSING'
97
- },
98
- relations: ['inventory', 'product']
99
- })
100
-
101
89
  return {
102
90
  palletId: item?.palletId,
103
91
  cartonId: item?.cartonId,
@@ -110,8 +98,6 @@ export const batchPickingWorksheetResolver = {
110
98
  },
111
99
  qty: item?.qty,
112
100
  releaseQty: item.releaseQty,
113
- hasMissingInventoryChanges: inventoryChangesCount > 0 ? true : false,
114
- status: item.status,
115
101
  pickedQty: item.pickedQty,
116
102
  packingType: item?.packingType,
117
103
  packingSize: item?.packingSize,
@@ -9,7 +9,7 @@ import { WorksheetDetail } from '../../../../entities'
9
9
  export const loadingResolver = {
10
10
  async loading(_: any, { loadedWorksheetDetails, releaseGoodNo, orderInfo }, context: any) {
11
11
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
12
- const worksheetDetails = await loading(tx, domain, user, loadedWorksheetDetails, releaseGoodNo)
12
+ await loading(tx, domain, user, loadedWorksheetDetails, releaseGoodNo)
13
13
  const worksheetController: WorksheetController = new WorksheetController(tx, domain, user)
14
14
  const releaseGood: ReleaseGood = await worksheetController.findRefOrder(
15
15
  ReleaseGood,
@@ -18,7 +18,14 @@ export const loadingResolver = {
18
18
  )
19
19
 
20
20
  const loadingWorksheetController: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
21
- let targetInventories: OrderInventory[] = worksheetDetails.map(itm => itm.targetInventory)
21
+ let targetInventories: OrderInventory[] = []
22
+ for (let worksheetDetail of loadedWorksheetDetails) {
23
+ worksheetDetail = await loadingWorksheetController.findWorksheetDetailByName(worksheetDetail.name, [
24
+ 'targetInventory'
25
+ ])
26
+ const targetInventory = worksheetDetail.targetInventory
27
+ targetInventories.push(targetInventory)
28
+ }
22
29
 
23
30
  const bizplace: Bizplace = releaseGood.bizplace
24
31
  orderInfo = {
@@ -34,9 +41,9 @@ export async function loading(
34
41
  tx: EntityManager,
35
42
  domain: Domain,
36
43
  user: User,
37
- worksheetDetails: Partial<WorksheetDetail & { loadedQty: number } & { toteName: string }>[],
44
+ worksheetDetails: Partial<WorksheetDetail & { loadedQty: number }>[],
38
45
  releaseGoodNo: string
39
- ): Promise<any> {
46
+ ): Promise<void> {
40
47
  const worksheetController: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
41
- return await worksheetController.loading(releaseGoodNo, worksheetDetails)
48
+ await worksheetController.loading(releaseGoodNo, worksheetDetails)
42
49
  }
@@ -1,13 +1,6 @@
1
1
  import { Equal, getRepository, In, Not, SelectQueryBuilder } from 'typeorm'
2
2
 
3
- import {
4
- ORDER_STATUS,
5
- ORDER_INVENTORY_STATUS,
6
- OrderInventory,
7
- ReleaseGood,
8
- OrderTote,
9
- OrderToteItem
10
- } from '@things-factory/sales-base'
3
+ import { ORDER_STATUS, ORDER_INVENTORY_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
11
4
  import { Domain } from '@things-factory/shell'
12
5
  import { Inventory, Location } from '@things-factory/warehouse-base'
13
6
 
@@ -34,9 +27,7 @@ export const loadingWorksheetResolver = {
34
27
  .innerJoinAndSelect('releaseGood.bizplace', 'bizplace')
35
28
  .innerJoinAndSelect('bizplace.domain', 'domain')
36
29
  .where('orderInventory.domain_id = :domainId', { domainId: domain.id })
37
- .andWhere('orderInventory.status IN (:...orderInventoryStatus)', {
38
- orderInventoryStatus: [ORDER_INVENTORY_STATUS.LOADING, ORDER_INVENTORY_STATUS.LOADED]
39
- })
30
+ .andWhere('orderInventory.status IN (:...orderInventoryStatus)', { orderInventoryStatus: [ORDER_INVENTORY_STATUS.LOADING, ORDER_INVENTORY_STATUS.LOADED] })
40
31
  .andWhere('orderInventory.bin_location_id = :locationId', { locationId: binLocation.id })
41
32
  .andWhere('releaseGood.status = :status', { status: ORDER_STATUS.LOADING })
42
33
 
@@ -50,10 +41,6 @@ export const loadingWorksheetResolver = {
50
41
 
51
42
  if (!releaseGood) throw new Error(`Release good doesn't exists.`)
52
43
 
53
- let [orderTotes, orderTotesTotal]: OrderTote = await getRepository(OrderTote).findAndCount({
54
- where: { releaseGood: releaseGood.id }
55
- })
56
-
57
44
  const foundWorksheet: Worksheet = await fetchExecutingWorksheet(
58
45
  domain,
59
46
  releaseGood.bizplace,
@@ -61,7 +48,7 @@ export const loadingWorksheetResolver = {
61
48
  WORKSHEET_TYPE.LOADING,
62
49
  releaseGood
63
50
  )
64
- let foundWSD: any[] = await getRepository(WorksheetDetail).find({
51
+ const foundWSD: WorksheetDetail[] = await getRepository(WorksheetDetail).find({
65
52
  where: {
66
53
  domain,
67
54
  worksheet: foundWorksheet,
@@ -70,50 +57,21 @@ export const loadingWorksheetResolver = {
70
57
  },
71
58
  relations: [
72
59
  'targetInventory',
73
- 'targetInventory.orderProduct',
74
60
  'targetInventory.inventory',
75
61
  'targetInventory.inventory.location',
76
62
  'targetInventory.inventory.product'
77
63
  ]
78
64
  })
79
65
 
80
- if (orderTotesTotal > 0) {
81
- let [toteItems, toteItemsTotal]: OrderToteItem = await getRepository(OrderToteItem).findAndCount({
82
- where: { orderTote: In(orderTotes.map(itm => itm.id)) },
83
- relations: ['orderTote', 'orderInventory']
84
- })
85
-
86
- let toteWsd = []
87
-
88
- for (let i = 0; i < toteItemsTotal; i++) {
89
- let wsdIndex = foundWSD.findIndex(
90
- itm => !itm?.toteName && itm.targetInventory.id == toteItems[i].orderInventory.id
91
- )
92
-
93
- if (wsdIndex >= 0) {
94
- let filterWSD: any = JSON.parse(JSON.stringify(foundWSD[wsdIndex]))
95
- let uomValue =
96
- Math.round((filterWSD.targetInventory.releaseUomValue / filterWSD.targetInventory.releaseQty) * 100) / 100
97
-
98
- foundWSD[wsdIndex].targetInventory.releaseQty -= toteItems[i].qty
99
- foundWSD[wsdIndex].targetInventory.pickedQty -= toteItems[i].qty
100
- foundWSD[wsdIndex].targetInventory.releaseUomValue = foundWSD[wsdIndex].targetInventory.releaseQty * uomValue
101
-
102
- filterWSD.targetInventory.releaseQty = toteItems[i].qty
103
- filterWSD.targetInventory.pickedQty = toteItems[i].qty
104
- filterWSD.targetInventory.releaseUomValue = toteItems[i].qty * uomValue
105
- filterWSD.toteName = toteItems[i].orderTote.name
106
- toteWsd.push(filterWSD)
107
- }
108
- }
109
-
110
- foundWSD = foundWSD.concat(toteWsd)
111
- foundWSD.sort((a, b) => (a.toteName > b.toteName ? 1 : -1))
112
- }
113
-
114
- let worksheetDetailInfos = foundWSD
115
- .filter(itm => itm.targetInventory.releaseQty > 0)
116
- .map((loadingWSD: any) => {
66
+ return {
67
+ worksheetInfo: {
68
+ releaseGood,
69
+ bizplaceName: releaseGood.bizplace.name,
70
+ startedAt: foundWorksheet.startedAt,
71
+ refNo: releaseGood.refNo,
72
+ ownCollection: releaseGood.ownTransport
73
+ },
74
+ worksheetDetailInfos: foundWSD.map(async (loadingWSD: WorksheetDetail) => {
117
75
  const targetInventory: OrderInventory = loadingWSD.targetInventory
118
76
  const inventory: Inventory = targetInventory.inventory
119
77
  return {
@@ -129,20 +87,9 @@ export const loadingWorksheetResolver = {
129
87
  targetName: targetInventory.name,
130
88
  packingType: inventory.packingType,
131
89
  packingSize: inventory.packingSize,
132
- inventory: targetInventory.inventory,
133
- toteName: loadingWSD.toteName
90
+ inventory: targetInventory.inventory
134
91
  }
135
92
  })
136
-
137
- return {
138
- worksheetInfo: {
139
- releaseGood,
140
- bizplaceName: releaseGood.bizplace.name,
141
- startedAt: foundWorksheet.startedAt,
142
- refNo: releaseGood.refNo,
143
- ownCollection: releaseGood.ownTransport
144
- },
145
- worksheetDetailInfos
146
93
  }
147
94
  }
148
95
  }
@@ -11,6 +11,7 @@ import {
11
11
  import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
12
12
  import { Domain } from '@things-factory/shell'
13
13
  import { Inventory, Location } from '@things-factory/warehouse-base'
14
+ import { ProductDetail } from '@things-factory/product-base'
14
15
 
15
16
  import { WORKSHEET_TYPE } from '../../../constants'
16
17
  import { SellercraftController } from '../../../controllers'
@@ -166,7 +167,6 @@ export const packingWorksheetResolver = {
166
167
  shippingProvider: shippingProvider ? shippingProvider : '',
167
168
  trackingNo: trackingNo ? trackingNo : '',
168
169
  airwayBill: releaseGood?.airwayBill,
169
- checkedRemarkBy: releaseGood?.checkedRemarkBy,
170
170
  invoice: releaseGood?.invoice,
171
171
  platform: marketplaceOrder ? marketplaceOrder.marketplaceStore.platform : 'operato',
172
172
  marketplaceStoreId: marketplaceOrder ? marketplaceOrder.marketplaceStore.id : '',
@@ -42,7 +42,7 @@ export async function completeBatchPicking(
42
42
  const worksheet = await pickingWSCtrl.completeBatchPicking(taskNo)
43
43
 
44
44
  const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
45
- const targetInventories: OrderInventory[] = worksheetDetails.filter(wsd=>wsd.status != 'MISSING').map((wsd: WorksheetDetail) => wsd.targetInventory)
45
+ const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)
46
46
 
47
47
  const sellercraft: Sellercraft = await tx
48
48
  .getRepository(Sellercraft)
@@ -248,20 +248,18 @@ export async function completePicking(
248
248
  })
249
249
 
250
250
  if (!existLoadingWorksheet && !releaseGood.courierOption && !releaseGood.packingOption) {
251
- if(pickedTargetInventories.length>0){
252
- const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
253
- let loadingWorksheet: Worksheet = await loadingWSCtrl.generateLoadingWorksheet(
254
- releaseGoodNo,
255
- pickedTargetInventories
256
- )
257
-
258
- if (!loadingWorksheet.worksheetDetails?.length) {
259
- loadingWorksheet = await pickingWSCtrl.findWorksheetById(loadingWorksheet.id)
260
- }
261
-
262
- const loadingWorksheetDetails: WorksheetDetail[] = loadingWorksheet.worksheetDetails
263
- await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails)
251
+ const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
252
+ let loadingWorksheet: Worksheet = await loadingWSCtrl.generateLoadingWorksheet(
253
+ releaseGoodNo,
254
+ pickedTargetInventories
255
+ )
256
+
257
+ if (!loadingWorksheet.worksheetDetails?.length) {
258
+ loadingWorksheet = await pickingWSCtrl.findWorksheetById(loadingWorksheet.id)
264
259
  }
260
+
261
+ const loadingWorksheetDetails: WorksheetDetail[] = loadingWorksheet.worksheetDetails
262
+ await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails)
265
263
  } else {
266
264
  const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
267
265
  let loadingWorksheet: Worksheet = await loadingWSCtrl.updateLoadingWorksheet(
@@ -11,7 +11,6 @@ import { scanProductPickingResolver } from './scan-product-picking'
11
11
  import { scanProductBatchPickingResolver } from './scan-product-batch-picking'
12
12
  import { undoPickingAssigmentResolver } from './undo-picking-assignment'
13
13
  import { undoSerialNumberPickingResolver } from './undo-serial-number-picking'
14
- import { sealToteResolver } from './seal-tote'
15
14
 
16
15
  export const Mutations = {
17
16
  ...assignPickingInventoriesResolver,
@@ -26,6 +25,5 @@ export const Mutations = {
26
25
  ...completeBatchPickingResolver,
27
26
  ...assignPickingWorkerResolver,
28
27
  ...fetchAndAssignPickingTaskResolver,
29
- ...undoSerialNumberPickingResolver,
30
- ...sealToteResolver
28
+ ...undoSerialNumberPickingResolver
31
29
  }
@@ -4,25 +4,9 @@ import { EntityManager } from 'typeorm'
4
4
  import { PickingWorksheetController } from '../../../../controllers'
5
5
 
6
6
  export const pickingResolver = {
7
- async picking(
8
- _: any,
9
- { worksheetDetailName, worksheetType, palletId, locationName, releaseQty, binLocation, serialNumber, toteNo },
10
- context: any
11
- ) {
7
+ async picking(_: any, { worksheetDetailName, worksheetType, palletId, locationName, releaseQty, binLocation, serialNumber }, context: any) {
12
8
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
13
- await picking(
14
- tx,
15
- domain,
16
- user,
17
- worksheetDetailName,
18
- worksheetType,
19
- palletId,
20
- locationName,
21
- releaseQty,
22
- binLocation,
23
- serialNumber,
24
- toteNo
25
- )
9
+ await picking(tx, domain, user, worksheetDetailName, worksheetType, palletId, locationName, releaseQty, binLocation, serialNumber)
26
10
  }
27
11
  }
28
12
 
@@ -36,18 +20,8 @@ export async function picking(
36
20
  locationName: string,
37
21
  releaseQty: number,
38
22
  binLocation?: string,
39
- serialNumber?: string,
40
- toteNo?: string
23
+ serialNumber?: string
41
24
  ) {
42
25
  const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
43
- await worksheetController.picking(
44
- worksheetDetailName,
45
- worksheetType,
46
- palletId,
47
- locationName,
48
- releaseQty,
49
- binLocation,
50
- serialNumber,
51
- toteNo
52
- )
26
+ await worksheetController.picking(worksheetDetailName, worksheetType, palletId, locationName, releaseQty, binLocation, serialNumber)
53
27
  }