@things-factory/worksheet-base 5.0.0-alpha.50 → 5.0.0-alpha.53

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 (142) hide show
  1. package/dist-server/controllers/ecommerce/sellercraft-controller.js +15 -7
  2. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  3. package/dist-server/controllers/inbound/putaway-worksheet-controller.js +22 -13
  4. package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
  5. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +1 -1
  6. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/outbound/loading-worksheet-controller.js +47 -10
  8. package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/outbound/picking-worksheet-controller.js +148 -7
  10. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  11. package/dist-server/controllers/outbound/sorting-worksheet-controller.js +116 -20
  12. package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/render-grn.js +35 -27
  14. package/dist-server/controllers/render-grn.js.map +1 -1
  15. package/dist-server/controllers/render-manifest.js +12 -5
  16. package/dist-server/controllers/render-manifest.js.map +1 -1
  17. package/dist-server/controllers/worksheet-controller.js +8 -1
  18. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  19. package/dist-server/entities/index.js +2 -1
  20. package/dist-server/entities/index.js.map +1 -1
  21. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +174 -0
  22. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -0
  23. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +14 -1
  24. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
  25. package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js +17 -0
  26. package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js.map +1 -0
  27. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +2 -1
  28. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
  29. package/dist-server/graphql/resolvers/worksheet/index.js +2 -1
  30. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
  31. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +40 -18
  32. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
  33. package/dist-server/graphql/resolvers/worksheet/loading/loading.js +3 -10
  34. package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
  35. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +55 -21
  36. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
  37. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +1 -0
  38. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  39. package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js +2 -5
  40. package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js.map +1 -1
  41. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +1 -1
  42. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  43. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +8 -6
  44. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  45. package/dist-server/graphql/resolvers/worksheet/picking/index.js +2 -1
  46. package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
  47. package/dist-server/graphql/resolvers/worksheet/picking/picking.js +4 -4
  48. package/dist-server/graphql/resolvers/worksheet/picking/picking.js.map +1 -1
  49. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +4 -4
  50. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
  51. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js +15 -0
  52. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js.map +1 -0
  53. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +10 -1
  54. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  55. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +36 -0
  56. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -1
  57. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js +11 -6
  58. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js.map +1 -1
  59. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js +4 -4
  60. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -1
  61. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js +4 -4
  62. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -1
  63. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +0 -21
  64. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -1
  65. package/dist-server/graphql/resolvers/worksheet/worksheet.js +2 -0
  66. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  67. package/dist-server/graphql/resolvers/worksheet/worksheets.js +19 -4
  68. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
  69. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +9 -3
  70. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
  71. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js +19 -4
  72. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js.map +1 -1
  73. package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js +24 -34
  74. package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js.map +1 -1
  75. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +8 -1
  76. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
  77. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +10 -2
  78. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
  79. package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js +2 -5
  80. package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js.map +1 -1
  81. package/dist-server/graphql/types/worksheet/index.js +14 -0
  82. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  83. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js +1 -0
  84. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js.map +1 -1
  85. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +2 -0
  86. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
  87. package/dist-server/graphql/types/worksheet/worksheet-info.js +2 -0
  88. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  89. package/dist-server/graphql/types/worksheet/worksheet.js +1 -0
  90. package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -1
  91. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js +3 -0
  92. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js.map +1 -1
  93. package/dist-server/utils/worksheet-no-generator.js +25 -28
  94. package/dist-server/utils/worksheet-no-generator.js.map +1 -1
  95. package/package.json +17 -17
  96. package/server/controllers/ecommerce/sellercraft-controller.ts +28 -7
  97. package/server/controllers/inbound/putaway-worksheet-controller.ts +27 -13
  98. package/server/controllers/inbound/unloading-worksheet-controller.ts +1 -1
  99. package/server/controllers/outbound/loading-worksheet-controller.ts +83 -17
  100. package/server/controllers/outbound/picking-worksheet-controller.ts +189 -9
  101. package/server/controllers/outbound/sorting-worksheet-controller.ts +167 -27
  102. package/server/controllers/render-grn.ts +46 -37
  103. package/server/controllers/render-manifest.ts +12 -5
  104. package/server/controllers/worksheet-controller.ts +14 -1
  105. package/server/entities/index.ts +2 -1
  106. package/server/entities/warehouse-bizplace-onhand-inventory.ts +147 -0
  107. package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +14 -0
  108. package/server/graphql/resolvers/worksheet/cancel-draft-release-order.ts +27 -0
  109. package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +2 -1
  110. package/server/graphql/resolvers/worksheet/index.ts +3 -1
  111. package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +44 -18
  112. package/server/graphql/resolvers/worksheet/loading/loading.ts +5 -12
  113. package/server/graphql/resolvers/worksheet/loading-worksheet.ts +66 -13
  114. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +1 -1
  115. package/server/graphql/resolvers/worksheet/palletizing-pallets.ts +2 -2
  116. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +1 -1
  117. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +13 -11
  118. package/server/graphql/resolvers/worksheet/picking/index.ts +3 -1
  119. package/server/graphql/resolvers/worksheet/picking/picking.ts +30 -4
  120. package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +7 -4
  121. package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +25 -0
  122. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +13 -2
  123. package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +45 -2
  124. package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +13 -9
  125. package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +5 -4
  126. package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +5 -4
  127. package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +0 -25
  128. package/server/graphql/resolvers/worksheet/worksheet.ts +2 -0
  129. package/server/graphql/resolvers/worksheet/worksheets.ts +28 -4
  130. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +21 -3
  131. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +39 -11
  132. package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +46 -49
  133. package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +11 -1
  134. package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +18 -1
  135. package/server/graphql/resolvers/worksheet-movement/create-worksheet-movement.ts +2 -2
  136. package/server/graphql/types/worksheet/index.ts +14 -0
  137. package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +1 -0
  138. package/server/graphql/types/worksheet/worksheet-detail-info.ts +2 -0
  139. package/server/graphql/types/worksheet/worksheet-info.ts +2 -0
  140. package/server/graphql/types/worksheet/worksheet.ts +1 -0
  141. package/server/graphql/types/worksheet-detail/inventory-detail.ts +3 -0
  142. package/server/utils/worksheet-no-generator.ts +25 -25
@@ -4,9 +4,9 @@ import { EntityManager } from 'typeorm'
4
4
  import { SortingWorksheetController } from '../../../../controllers'
5
5
 
6
6
  export const scanProductSortingResolver = {
7
- async scanProductSorting(_: any, { taskNo, releaseGoodNo, productBarcode, serialNumber }, context: any) {
7
+ async scanProductSorting(_: any, { taskNo, releaseGoodNo, productBarcode, serialNumber, toteNo }, context: any) {
8
8
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
9
- await scanProductSorting(tx, domain, user, taskNo, releaseGoodNo, productBarcode, serialNumber)
9
+ await scanProductSorting(tx, domain, user, taskNo, releaseGoodNo, productBarcode, serialNumber, toteNo)
10
10
  }
11
11
  }
12
12
 
@@ -17,8 +17,9 @@ export async function scanProductSorting(
17
17
  taskNo: string,
18
18
  releaseGoodNo: string,
19
19
  productBarcode?: string,
20
- serialNumber?: string
20
+ serialNumber?: string,
21
+ toteNo?: string
21
22
  ) {
22
23
  const worksheetController: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
23
- await worksheetController.scanProductSorting(taskNo, releaseGoodNo, productBarcode, serialNumber)
24
+ await worksheetController.scanProductSorting(taskNo, releaseGoodNo, productBarcode, serialNumber, toteNo)
24
25
  }
@@ -4,9 +4,9 @@ import { EntityManager } from 'typeorm'
4
4
  import { SortingWorksheetController } from '../../../../controllers'
5
5
 
6
6
  export const sortingProductResolver = {
7
- async sortingProduct(_: any, { taskNo, releaseGoodNo, productId, sortingQty, serialNumber }, context: any) {
7
+ async sortingProduct(_: any, { taskNo, releaseGoodNo, productId, sortingQty, serialNumber, toteNo }, context: any) {
8
8
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
9
- await sortingProduct(tx, domain, user, taskNo, releaseGoodNo, productId, sortingQty, serialNumber)
9
+ await sortingProduct(tx, domain, user, taskNo, releaseGoodNo, productId, sortingQty, serialNumber, toteNo)
10
10
  }
11
11
  }
12
12
 
@@ -18,8 +18,9 @@ export async function sortingProduct(
18
18
  releaseGoodNo: string,
19
19
  productId: string,
20
20
  sortingQty: number,
21
- serialNumber?: string
21
+ serialNumber?: string,
22
+ toteNo?: string
22
23
  ) {
23
24
  const worksheetController: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
24
- await worksheetController.sortingProduct(taskNo, releaseGoodNo, productId, sortingQty, serialNumber)
25
+ await worksheetController.sortingProduct(taskNo, releaseGoodNo, productId, sortingQty, serialNumber, toteNo)
25
26
  }
@@ -2,15 +2,12 @@ import { EntityManager, In } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
4
  import { Bizplace } from '@things-factory/biz-base'
5
- import { MarketplaceStore } from '@things-factory/integration-marketplace'
6
- import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
7
5
  import { ArrivalNotice, generateGoodsReceivalNote } from '@things-factory/sales-base'
8
6
  import { Domain } from '@things-factory/shell'
9
7
  import { Inventory, INVENTORY_STATUS } from '@things-factory/warehouse-base'
10
8
 
11
9
  import { WORKSHEET_STATUS } from '../../../../constants'
12
10
  import { PutawayWorksheetController, UnloadingWorksheetController } from '../../../../controllers'
13
- import { EcommerceController, SellercraftController } from '../../../../controllers/ecommerce'
14
11
  import { Worksheet, WorksheetDetail } from '../../../../entities'
15
12
 
16
13
  export const completeUnloadingResolver = {
@@ -40,28 +37,6 @@ export const completeUnloadingResolver = {
40
37
  where: { domain, refOrderId: arrivalNotice.id, status: In([INVENTORY_STATUS.UNLOADED, INVENTORY_STATUS.CHECKED]) }
41
38
  })
42
39
 
43
- // search for any active marketplace connection
44
- const companyDomain: Domain = arrivalNotice.bizplace.company.domain
45
- const customerDomain: Domain = arrivalNotice.bizplace.domain
46
- const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
47
- where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },
48
- relations: ['marketplaceDistributors']
49
- })
50
-
51
- const sellercraft: Sellercraft = await tx
52
- .getRepository(Sellercraft)
53
- .findOne({ domain: customerDomain, status: SellercraftStatus.ACTIVE })
54
-
55
- if (sellercraft) {
56
- const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
57
- await sellercraftCtrl.registerProductInbound(sellercraft, arrivalNotice)
58
- }
59
-
60
- if (marketplaceStores?.length && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
61
- const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
62
- await ecommerceCtrl.updateProductVariationStock(marketplaceStores, arrivalNotice.orderProducts, companyDomain)
63
- }
64
-
65
40
  putawayWorksheet = await putawayWSCtrl.generatePutawayWorksheet(arrivalNotice.name, inventories)
66
41
 
67
42
  if (putawayWorksheet.status === WORKSHEET_STATUS.DEACTIVATED) {
@@ -117,6 +117,7 @@ export const worksheetResolver = {
117
117
  .leftJoinAndSelect('oi.releaseGood', 'releaseGood')
118
118
  .leftJoinAndSelect('oi.inventory', 'inventory')
119
119
  .leftJoinAndSelect('oi.product', 'product')
120
+ .leftJoinAndSelect('oi.orderProduct', 'orderProduct')
120
121
  .leftJoinAndSelect('inventory.location', 'location')
121
122
  .leftJoinAndSelect('oi.bizplace', 'bizplace')
122
123
  .where('"oi"."domain_id" = :domain')
@@ -146,6 +147,7 @@ export const worksheetResolver = {
146
147
  .leftJoinAndSelect('oi.releaseGood', 'releaseGood')
147
148
  .leftJoinAndSelect('oi.inventory', 'inventory')
148
149
  .leftJoinAndSelect('oi.product', 'product')
150
+ .leftJoinAndSelect('oi.orderProduct', 'orderProduct')
149
151
  .leftJoinAndSelect('inventory.location', 'location')
150
152
  .leftJoinAndSelect('oi.bizplace', 'bizplace')
151
153
  .where('"oi"."domain_id" = :domain')
@@ -108,13 +108,16 @@ export const worksheetsResolver = {
108
108
  const releaseGoodCrossDockingParam = params.filters.find(param => param.name === 'crossDocking')
109
109
  const releaseGoodCourierOptionParam = params.filters.find(param => param.name === 'courierOption')
110
110
  const releaseGoodPackingOptionParam = params.filters.find(param => param.name === 'packingOption')
111
+ const orderRemarkParam = params.filters.find(param => param.name === 'orderRemark')
112
+
111
113
  const releaseGoodPickerOptionParam = params.filters.find(param => param.name === 'assignee')
112
114
  if (
113
115
  releaseGoodParam ||
114
116
  releaseGoodRefNoParam ||
115
117
  releaseGoodCrossDockingParam ||
116
118
  releaseGoodCourierOptionParam ||
117
- releaseGoodPackingOptionParam
119
+ releaseGoodPackingOptionParam ||
120
+ orderRemarkParam
118
121
  ) {
119
122
  let arrFilters = []
120
123
  if (releaseGoodParam) {
@@ -124,6 +127,7 @@ export const worksheetsResolver = {
124
127
  )
125
128
  arrFilters.push({ ...releaseGoodParam, name: 'name' })
126
129
  }
130
+
127
131
  if (releaseGoodRefNoParam) {
128
132
  params.filters.splice(
129
133
  params.filters.findIndex(item => item.name == 'releaseGoodRefNo'),
@@ -156,8 +160,21 @@ export const worksheetsResolver = {
156
160
  arrFilters.push({ ...releaseGoodPackingOptionParam, name: 'packingOption' })
157
161
  }
158
162
 
163
+ if (orderRemarkParam) {
164
+ params.filters.splice(
165
+ params.filters.findIndex(item => item.name == 'orderRemark'),
166
+ 1
167
+ )
168
+
169
+ if (orderRemarkParam?.value == true) {
170
+ arrFilters.push({ operator: 'is_not_null', name: 'remark' })
171
+ } else if (orderRemarkParam?.value == false) {
172
+ arrFilters.push({ operator: 'is_null', name: 'remark' })
173
+ }
174
+ }
175
+
159
176
  const foundReleaseGoods: ReleaseGood[] = await getRepository(ReleaseGood).find({
160
- ...convertListParams({ filters: arrFilters })
177
+ ...convertListParams({ filters: arrFilters }, { searchables: ['arrivalNoticeNo', 'releaseGoodNo'] })
161
178
  })
162
179
 
163
180
  if (foundReleaseGoods && foundReleaseGoods.length) {
@@ -311,7 +328,7 @@ export const worksheetsResolver = {
311
328
  params.filters = params.filters.filter(param => param.name !== 'name')
312
329
  }
313
330
 
314
- buildQuery(qb, params, context)
331
+ buildQuery(qb, params, context, { searchables: ['arrivalNoticeNo'] })
315
332
 
316
333
  if (orderName !== '') {
317
334
  qb.andWhere(
@@ -414,7 +431,14 @@ export const worksheetsResolver = {
414
431
 
415
432
  qb.orderBy(sort)
416
433
 
417
- const [items, total] = await qb.getManyAndCount()
434
+ let [items, total] = await qb.getManyAndCount()
435
+
436
+ items = items.map(item => {
437
+ return {
438
+ ...item,
439
+ orderRemark: item?.releaseGood?.remark ? true : false
440
+ }
441
+ })
418
442
 
419
443
  return { items, total }
420
444
  } catch (error) {
@@ -1,7 +1,14 @@
1
1
  import { EntityManager, getRepository } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
- import { ORDER_INVENTORY_STATUS, ORDER_TYPES, OrderInventory, OrderNoGenerator } from '@things-factory/sales-base'
4
+ import {
5
+ ORDER_INVENTORY_STATUS,
6
+ ORDER_PRODUCT_STATUS,
7
+ ORDER_TYPES,
8
+ OrderInventory,
9
+ OrderNoGenerator,
10
+ OrderProduct
11
+ } from '@things-factory/sales-base'
5
12
  import { Setting } from '@things-factory/setting-base'
6
13
  import { Domain } from '@things-factory/shell'
7
14
  import { Inventory } from '@things-factory/warehouse-base'
@@ -60,7 +67,7 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
60
67
  packingSize: oi.packingSize,
61
68
  status: ORDER_INVENTORY_STATUS.PENDING_SPLIT
62
69
  },
63
- relations: ['product', 'releaseGood', 'bizplace'],
70
+ relations: ['product', 'releaseGood', 'bizplace', 'orderProduct'],
64
71
  order: {
65
72
  releaseQty: 'DESC'
66
73
  }
@@ -120,6 +127,14 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
120
127
  .where('id = :id', { id: targetInventory.id })
121
128
  await qbInv.execute()
122
129
 
130
+ // update order product status to ASSIGNED
131
+ await tx
132
+ .getRepository(OrderProduct)
133
+ .update(
134
+ { id: orderInventory.orderProduct.id },
135
+ { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: user }
136
+ )
137
+
123
138
  // Create new order inventory with status -> READY_TO_PICK, type -> RELEASE_OF_GOODS
124
139
  let newTargetInventory: OrderInventory = new OrderInventory()
125
140
  newTargetInventory = {
@@ -137,7 +152,9 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
137
152
  creator: user,
138
153
  inventory: targetInventory,
139
154
  releaseQty: allocatedQty,
140
- releaseUomValue: allocatedUomValue
155
+ releaseUomValue: allocatedUomValue,
156
+ uom: orderInventory.uom,
157
+ orderProduct: orderInventory.orderProduct
141
158
  }
142
159
  newTargetInventory = await tx.getRepository(OrderInventory).save(newTargetInventory)
143
160
 
@@ -150,6 +167,7 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
150
167
  bizplace: orderInventory.bizplace,
151
168
  name: WorksheetNoGenerator.batchPickingDetail(),
152
169
  targetInventory: newTargetInventory,
170
+ targetProduct: newTargetInventory.orderProduct,
153
171
  type: WORKSHEET_TYPE.BATCH_PICKING,
154
172
  status: WORKSHEET_STATUS.DEACTIVATED,
155
173
  creator: user
@@ -1,12 +1,20 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
1
4
  import { Product } from '@things-factory/product-base'
2
- import { OrderInventory, OrderNoGenerator, ORDER_INVENTORY_STATUS } from '@things-factory/sales-base'
5
+ import {
6
+ ORDER_INVENTORY_STATUS,
7
+ ORDER_PRODUCT_STATUS,
8
+ OrderInventory,
9
+ OrderNoGenerator,
10
+ OrderProduct
11
+ } from '@things-factory/sales-base'
12
+ import { Domain } from '@things-factory/shell'
3
13
  import { Inventory } from '@things-factory/warehouse-base'
4
- import { EntityManager } from 'typeorm'
14
+
5
15
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
6
16
  import { Worksheet, WorksheetDetail } from '../../../entities'
7
17
  import { WorksheetNoGenerator } from '../../../utils'
8
- import { User } from '@things-factory/auth-base'
9
- import { Domain } from '@things-factory/shell'
10
18
 
11
19
  export const generateBatchPickingWorksheetDetailsResolver = {
12
20
  async generateBatchPickingWorksheetDetails(
@@ -15,7 +23,7 @@ export const generateBatchPickingWorksheetDetailsResolver = {
15
23
  context: any
16
24
  ): Promise<void> {
17
25
  const { tx, user, domain }: { tx: EntityManager; user: User; domain: Domain } = context.state
18
-
26
+
19
27
  // 1. Find Related Worksheet
20
28
  const worksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
21
29
  where: { name: worksheetNo, domain },
@@ -28,14 +36,21 @@ export const generateBatchPickingWorksheetDetailsResolver = {
28
36
  })
29
37
 
30
38
  // Only proceed if worksheet status IS "DEACTIVATED"
31
- if(worksheet.status != WORKSHEET_STATUS.DEACTIVATED){
39
+ if (worksheet.status != WORKSHEET_STATUS.DEACTIVATED) {
32
40
  return
33
41
  }
34
42
 
35
43
  // 2. Find all existing order inventory that is related to the product
36
44
  let prevOrdInvs: OrderInventory[] = await tx.getRepository(OrderInventory).find({
37
- where: { domain, refWorksheetId: worksheet.id, product: productId, batchId, packingType, status: ORDER_INVENTORY_STATUS.PENDING_SPLIT },
38
- relations: ['releaseGood', 'bizplace']
45
+ where: {
46
+ domain,
47
+ refWorksheetId: worksheet.id,
48
+ product: productId,
49
+ batchId,
50
+ packingType,
51
+ status: ORDER_INVENTORY_STATUS.PENDING_SPLIT
52
+ },
53
+ relations: ['releaseGood', 'bizplace', 'orderProduct']
39
54
  })
40
55
 
41
56
  // Sort all release qty from highest to lowest
@@ -80,6 +95,8 @@ export const generateBatchPickingWorksheetDetailsResolver = {
80
95
  newTargetInventory.packingType = prevOrdInv.packingType
81
96
  newTargetInventory.packingSize = parseFloat(prevOrdInv.packingSize)
82
97
  newTargetInventory.creator = user
98
+ newTargetInventory.uom = selectedOrdInv.uom
99
+ newTargetInventory.orderProduct = prevOrdInv.orderProduct
83
100
 
84
101
  let inventory: Inventory = await tx.getRepository(Inventory).findOne(selectedOrdInv.inventory.id)
85
102
 
@@ -100,7 +117,7 @@ export const generateBatchPickingWorksheetDetailsResolver = {
100
117
 
101
118
  requiredQty = fulfiledQty <= 0 ? 0 : fulfiledQty
102
119
  requiredUomValue = fulfiledUomValue <= 0 ? 0 : fulfiledUomValue
103
-
120
+
104
121
  await tx.getRepository(Inventory).update(
105
122
  { domain, id: inventory.id },
106
123
  {
@@ -115,6 +132,11 @@ export const generateBatchPickingWorksheetDetailsResolver = {
115
132
  }
116
133
  )
117
134
 
135
+ // update order product status to ASSIGNED
136
+ await tx
137
+ .getRepository(OrderProduct)
138
+ .update({ id: prevOrdInv.orderProduct.id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: user })
139
+
118
140
  // Generate Worksheet Detail
119
141
  let newWorksheetDetail: WorksheetDetail = new WorksheetDetail()
120
142
  newWorksheetDetail = {
@@ -124,6 +146,7 @@ export const generateBatchPickingWorksheetDetailsResolver = {
124
146
  bizplace: prevOrdInv.bizplace,
125
147
  name: WorksheetNoGenerator.batchPickingDetail(),
126
148
  targetInventory: newTargetInventory,
149
+ targetProduct: prevOrdInv.orderProduct,
127
150
  type: WORKSHEET_TYPE.BATCH_PICKING,
128
151
  status: WORKSHEET_STATUS.DEACTIVATED,
129
152
  creator: user
@@ -134,11 +157,16 @@ export const generateBatchPickingWorksheetDetailsResolver = {
134
157
  selectedOrdInv.releaseUomValue = remainingUomValue <= 0 ? 0 : remainingUomValue
135
158
 
136
159
  // insufficient qty for current order inventory, use the next inventory qty
137
- if (selectedOrdInv.releaseQty == 0){
160
+ if (selectedOrdInv.releaseQty == 0) {
138
161
  j = j + 1
139
162
  }
140
163
  }
141
- await tx.getRepository(OrderInventory).update({id: prevOrdInvs[i].id},{status: ORDER_INVENTORY_STATUS.COMPLETE_SPLIT, updater: user, updatedAt: new Date()})
164
+ await tx
165
+ .getRepository(OrderInventory)
166
+ .update(
167
+ { id: prevOrdInvs[i].id },
168
+ { status: ORDER_INVENTORY_STATUS.COMPLETE_SPLIT, updater: user, updatedAt: new Date() }
169
+ )
142
170
  }
143
171
  }
144
172
  }
@@ -1,33 +1,22 @@
1
- import { Domain } from '@things-factory/shell'
2
- import { EntityManager } from 'typeorm'
1
+ import { EntityManager, In } from 'typeorm'
2
+
3
3
  import { generateId } from '@things-factory/id-rule-base'
4
- import { In } from 'typeorm'
4
+ import { Domain } from '@things-factory/shell'
5
+
5
6
  import { WorksheetDetail } from '../../../entities'
6
7
 
7
8
  export const generatePalletIdResolver = {
8
9
  async generatePalletId(_: any, { targets, type }, context: any) {
9
10
  const { tx, domain }: { tx: EntityManager; domain: Domain } = context.state
10
- // 1. get and set the date
11
- const today = new Date()
12
- const year = today.getFullYear()
13
- const month = today.getMonth()
14
- const day = today.getDate()
15
-
16
- const yy = String(year).substr(String(year).length - 2)
17
- const mm = String(month + 1).padStart(2, '0')
18
- const dd = String(day).padStart(2, '0')
19
-
20
- const date = yy + mm + dd
11
+ // 1. get date in yymmdd format
12
+ const date = new Date().toJSON().slice(0, 10).replace(/-/g, '').slice(2, 8)
21
13
  let results = []
22
14
 
23
- // 2. get worksheet detail
24
- let ids = targets.map(target => target.id)
25
-
26
- // - getRepository using In(array) to pass the value to defined variable
15
+ // 2. get worksheet details
27
16
  const foundWorksheetDetails: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
28
17
  where: {
29
18
  domain,
30
- id: In(ids)
19
+ id: In(targets.map(target => target.id))
31
20
  },
32
21
  relations: [
33
22
  'domain',
@@ -35,6 +24,8 @@ export const generatePalletIdResolver = {
35
24
  'worksheet',
36
25
  'worker',
37
26
  'targetProduct',
27
+ 'targetProduct.arrivalNotice',
28
+ 'targetProduct.arrivalNotice.purchaseOrder',
38
29
  'targetProduct.product',
39
30
  'targetInventory',
40
31
  'targetInventory.product',
@@ -44,8 +35,7 @@ export const generatePalletIdResolver = {
44
35
  })
45
36
 
46
37
  // 3. from worksheet detail get product name, product type, batchid, packing type, bizplace
47
-
48
- if (foundWorksheetDetails.length <= 0) throw new Error('Unable to find worksheet details')
38
+ if (!foundWorksheetDetails?.length) throw new Error('Unable to find worksheet details')
49
39
  else {
50
40
  for (let i = 0; i < foundWorksheetDetails.length; i++) {
51
41
  let foundWSD = foundWorksheetDetails[i]
@@ -53,39 +43,46 @@ export const generatePalletIdResolver = {
53
43
  if (foundWSD.id === targets[idx].id) {
54
44
  // 4. generate pallet id based on print qty > call generateId resolver
55
45
  for (let i = 0; i < targets[idx].printQty; i++) {
56
- const generatedPalletId = await generateId({
57
- domain,
58
- type,
59
- seed: {
60
- batchId: foundWSD?.targetProduct?.batchId
61
- ? foundWSD.targetProduct.batchId
62
- : foundWSD?.targetInventory?.batchId
63
- ? foundWSD.targetInventory.batchId
64
- : foundWSD.targetVas.targetBatchId,
65
- date: date
66
- }
67
- })
68
-
46
+ let result: any = {}
69
47
  // 5. map all data to be returned
70
- if (foundWSD.targetProduct != null) {
71
- results.push({
48
+ if (foundWSD.targetProduct) {
49
+ result = {
72
50
  ...foundWSD.targetProduct,
73
- palletId: generatedPalletId,
74
- bizplace: foundWSD.bizplace
75
- })
76
- } else if (foundWSD.targetInventory != null) {
77
- results.push({
51
+ bizplace: foundWSD.bizplace,
52
+ orderProductRemark: foundWSD.targetProduct.remark,
53
+ purchaseOrderNo: foundWSD.targetProduct.arrivalNotice?.purchaseOrder?.name || '',
54
+ arrivalNoticeRefNo: foundWSD.targetProduct.arrivalNotice?.refNo || ''
55
+ }
56
+ } else if (foundWSD.targetInventory) {
57
+ result = {
78
58
  ...foundWSD.targetInventory,
79
- palletId: generatedPalletId,
80
- bizplace: foundWSD.bizplace
81
- })
82
- } else if (foundWSD.targetVas != null) {
83
- results.push({
59
+ bizplace: foundWSD.bizplace,
60
+ orderProductRemark: '',
61
+ purchaseOrderNo: '',
62
+ arrivalNoticeRefNo: ''
63
+ }
64
+ } else if (foundWSD.targetVas) {
65
+ result = {
84
66
  ...foundWSD.targetVas,
85
- palletId: generatedPalletId,
86
- bizplace: foundWSD.bizplace
87
- })
67
+ bizplace: foundWSD.bizplace,
68
+ batchId: foundWSD.targetVas.targetBatchId,
69
+ orderProductRemark: '',
70
+ purchaseOrderNo: '',
71
+ arrivalNoticeRefNo: ''
72
+ }
88
73
  }
74
+
75
+ results.push({
76
+ ...result,
77
+ palletId: await generateId({
78
+ domain,
79
+ type,
80
+ seed: {
81
+ batchId: result.batchId || '',
82
+ date
83
+ }
84
+ })
85
+ })
89
86
  }
90
87
  }
91
88
  }
@@ -3,10 +3,12 @@ import { EntityManager } from 'typeorm'
3
3
  import { User } from '@things-factory/auth-base'
4
4
  import {
5
5
  ORDER_INVENTORY_STATUS,
6
+ ORDER_PRODUCT_STATUS,
6
7
  ORDER_TYPES,
7
8
  OrderInventory,
8
9
  OrderInventoryPatch,
9
10
  OrderNoGenerator,
11
+ OrderProduct,
10
12
  ReleaseGood
11
13
  } from '@things-factory/sales-base'
12
14
  import { Setting } from '@things-factory/setting-base'
@@ -116,6 +118,11 @@ export const generatePickingWorksheetDetailsResolver = {
116
118
  .where('id = :id', { id: targetInventory.inventory.id })
117
119
  .execute()
118
120
 
121
+ // update order product status to ASSIGNED
122
+ await tx
123
+ .getRepository(OrderProduct)
124
+ .update({ id: targetInventory.orderProduct.id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: user })
125
+
119
126
  // 7. collect new worksheet details records
120
127
  const worksheetDetail: WorksheetDetail = Object.assign(new WorksheetDetail(), {
121
128
  domain,
@@ -124,6 +131,7 @@ export const generatePickingWorksheetDetailsResolver = {
124
131
  name: WorksheetNoGenerator.pickingDetail(),
125
132
  seq: 0,
126
133
  targetInventory,
134
+ targetProduct: targetInventory.orderProduct,
127
135
  type: WORKSHEET_TYPE.PICKING,
128
136
  status: WORKSHEET_STATUS.DEACTIVATED,
129
137
  creator: user,
@@ -198,7 +206,9 @@ function _composeWorksheetDetails(
198
206
  creator: user,
199
207
  updater: user,
200
208
  status: ORDER_INVENTORY_STATUS.READY_TO_PICK,
201
- type: ORDER_TYPES.RELEASE_OF_GOODS.value
209
+ type: ORDER_TYPES.RELEASE_OF_GOODS,
210
+ uom: record.uom,
211
+ orderProduct: { id: inv.orderProductId }
202
212
  }
203
213
  })
204
214
 
@@ -2,7 +2,13 @@ import { EntityManager } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
4
  import { Product } from '@things-factory/product-base'
5
- import { ORDER_INVENTORY_STATUS, OrderInventory, OrderNoGenerator } from '@things-factory/sales-base'
5
+ import {
6
+ ORDER_INVENTORY_STATUS,
7
+ ORDER_PRODUCT_STATUS,
8
+ OrderInventory,
9
+ OrderNoGenerator,
10
+ OrderProduct
11
+ } from '@things-factory/sales-base'
6
12
  import { Domain } from '@things-factory/shell'
7
13
  import { Inventory } from '@things-factory/warehouse-base'
8
14
 
@@ -74,6 +80,10 @@ export async function generateReleaseGoodWorksheetDetails(
74
80
  let targetInventory: OrderInventory = wsd.targetInventory
75
81
  const inventory: Inventory = await tx.getRepository(Inventory).findOne(targetInventory.inventory.id)
76
82
 
83
+ let targetProduct: OrderProduct = await tx
84
+ .getRepository(OrderProduct)
85
+ .findOne({ where: { id: wsd.targetProduct.id } })
86
+
77
87
  targetInventory = await tx.getRepository(OrderInventory).save({
78
88
  ...targetInventory,
79
89
  domain,
@@ -87,6 +97,7 @@ export async function generateReleaseGoodWorksheetDetails(
87
97
  product: await tx.getRepository(Product).findOne(productId),
88
98
  packingType,
89
99
  packingSize,
100
+ orderProduct: targetProduct,
90
101
  creator: user,
91
102
  updater: user
92
103
  })
@@ -105,6 +116,11 @@ export async function generateReleaseGoodWorksheetDetails(
105
116
  updater: user
106
117
  })
107
118
 
119
+ // update order product status to ASSIGNED
120
+ await tx
121
+ .getRepository(OrderProduct)
122
+ .update({ id: targetProduct.id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: user })
123
+
108
124
  // 3. Create worksheet details
109
125
  await tx.getRepository(WorksheetDetail).save({
110
126
  ...wsd,
@@ -112,6 +128,7 @@ export async function generateReleaseGoodWorksheetDetails(
112
128
  bizplace: worksheet.bizplace,
113
129
  worksheet,
114
130
  name: WorksheetNoGenerator.pickingDetail(),
131
+ targetProduct,
115
132
  targetInventory,
116
133
  type: WORKSHEET_TYPE.PICKING,
117
134
  status: WORKSHEET_STATUS.DEACTIVATED,
@@ -1,13 +1,13 @@
1
1
  import { EntityManager } from 'typeorm'
2
2
  import { WorksheetMovement } from '../../../entities'
3
- import uuid from 'uuid/v4'
3
+ import { v4 as uuidv4 } from 'uuid'
4
4
 
5
5
  export const createWorksheetMovement = {
6
6
  async createWorksheetMovement(_, { worksheetMovement: attrs }, context: any) {
7
7
  const { tx }: { tx: EntityManager } = context.state
8
8
  const repository = tx.getRepository(WorksheetMovement)
9
9
  const newWorksheetMovement = {
10
- id: uuid(),
10
+ id: uuidv4(),
11
11
  ...attrs
12
12
  }
13
13
 
@@ -179,6 +179,12 @@ export const Mutation = /* GraphQL */ `
179
179
  inventoryItemId: String!
180
180
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
181
181
 
182
+ sealTote (
183
+ sealNo: String!
184
+ toteNo: String!
185
+ orderNo: String!
186
+ ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
187
+
182
188
  unload (
183
189
  worksheetDetailName: String!
184
190
  inventory: InventoryPatch!
@@ -313,6 +319,7 @@ export const Mutation = /* GraphQL */ `
313
319
  releaseQty: Float!
314
320
  binLocation: String
315
321
  serialNumber: String
322
+ toteNo: String
316
323
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
317
324
 
318
325
  scanProductPicking (
@@ -322,6 +329,7 @@ export const Mutation = /* GraphQL */ `
322
329
  cartonId: String!
323
330
  binLocation: String
324
331
  serialNumber: String
332
+ toteNo: String
325
333
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
326
334
 
327
335
  sortingProduct (
@@ -330,6 +338,7 @@ export const Mutation = /* GraphQL */ `
330
338
  productId: String!
331
339
  sortingQty: Float!
332
340
  serialNumber: String
341
+ toteNo: String
333
342
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
334
343
 
335
344
  scanProductSorting (
@@ -337,6 +346,7 @@ export const Mutation = /* GraphQL */ `
337
346
  releaseGoodNo: String!
338
347
  productBarcode: String!
339
348
  serialNumber: String
349
+ toteNo: String
340
350
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
341
351
 
342
352
  packing (
@@ -551,6 +561,10 @@ export const Mutation = /* GraphQL */ `
551
561
  refOrderNo: String!
552
562
  patches: [OrderVasPatch]
553
563
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
564
+
565
+ cancelDraftReleaseOrder (
566
+ name: String!
567
+ ): Boolean @transaction
554
568
  `
555
569
 
556
570
  export const Query = /* GraphQL */ `
@@ -4,5 +4,6 @@ export const LoadedWorksheetDetail = gql`
4
4
  input LoadedWorksheetDetail {
5
5
  name: String!
6
6
  loadedQty: Float!
7
+ toteName: String
7
8
  }
8
9
  `