@things-factory/worksheet-base 4.0.0-y.0 → 4.0.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 (173) hide show
  1. package/dist-server/controllers/ecommerce/ecommerce-controller.js +23 -9
  2. package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/index.js +1 -0
  4. package/dist-server/controllers/ecommerce/index.js.map +1 -1
  5. package/dist-server/controllers/ecommerce/sellercraft-controller.js +168 -0
  6. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -0
  7. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +6 -5
  8. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/index.js +1 -0
  10. package/dist-server/controllers/index.js.map +1 -1
  11. package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js +43 -8
  12. package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/outbound/packing-worksheet-controller.js +16 -1
  14. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  15. package/dist-server/controllers/outbound/picking-worksheet-controller.js +17 -9
  16. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  17. package/dist-server/controllers/render-grn.js +192 -0
  18. package/dist-server/controllers/render-grn.js.map +1 -0
  19. package/dist-server/controllers/render-job-sheet.js +51 -35
  20. package/dist-server/controllers/render-job-sheet.js.map +1 -1
  21. package/dist-server/controllers/render-kimeda-grn.js +12 -5
  22. package/dist-server/controllers/render-kimeda-grn.js.map +1 -1
  23. package/dist-server/controllers/render-ro-do.js +19 -5
  24. package/dist-server/controllers/render-ro-do.js.map +1 -1
  25. package/dist-server/controllers/render-seebuu-grn.js +9 -3
  26. package/dist-server/controllers/render-seebuu-grn.js.map +1 -1
  27. package/dist-server/controllers/vas/vas-worksheet-controller.js +75 -14
  28. package/dist-server/controllers/vas/vas-worksheet-controller.js.map +1 -1
  29. package/dist-server/controllers/worksheet-controller.js +61 -8
  30. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  31. package/dist-server/graphql/resolvers/pallet/pallet-outbound.js +1 -1
  32. package/dist-server/graphql/resolvers/pallet/pallet-outbound.js.map +1 -1
  33. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +23 -1
  34. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
  35. package/dist-server/graphql/resolvers/worksheet/cycle-count-worksheet.js +4 -2
  36. package/dist-server/graphql/resolvers/worksheet/cycle-count-worksheet.js.map +1 -1
  37. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.js +25 -0
  38. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.js.map +1 -0
  39. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.js +4 -4
  40. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.js.map +1 -1
  41. package/dist-server/graphql/resolvers/worksheet/index.js +5 -4
  42. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
  43. package/dist-server/graphql/resolvers/worksheet/not-tally-target-inventories.js +2 -2
  44. package/dist-server/graphql/resolvers/worksheet/not-tally-target-inventories.js.map +1 -1
  45. package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js +13 -1
  46. package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js.map +1 -1
  47. package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js +24 -38
  48. package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js.map +1 -1
  49. package/dist-server/graphql/resolvers/worksheet/packing/packing.js +13 -1
  50. package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
  51. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +13 -1
  52. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
  53. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +60 -19
  54. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  55. package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js +20 -1
  56. package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js.map +1 -1
  57. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +24 -14
  58. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
  59. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-inventories.js +4 -4
  60. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-inventories.js.map +1 -1
  61. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +19 -0
  62. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  63. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +124 -149
  64. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  65. package/dist-server/graphql/resolvers/worksheet/picking/undo-picking-assignment.js +4 -4
  66. package/dist-server/graphql/resolvers/worksheet/picking/undo-picking-assignment.js.map +1 -1
  67. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +2 -1
  68. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  69. package/dist-server/graphql/resolvers/worksheet/recommend-putway-location.js +1 -1
  70. package/dist-server/graphql/resolvers/worksheet/recommend-putway-location.js.map +1 -1
  71. package/dist-server/graphql/resolvers/worksheet/replace-picking-pallets.js +13 -4
  72. package/dist-server/graphql/resolvers/worksheet/replace-picking-pallets.js.map +1 -1
  73. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +21 -2
  74. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -1
  75. package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.js +18 -1
  76. package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.js.map +1 -1
  77. package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js +302 -11
  78. package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js.map +1 -1
  79. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.js.map +1 -1
  80. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/repackaging.js.map +1 -1
  81. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.js +137 -31
  82. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.js.map +1 -1
  83. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.js +157 -42
  84. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.js.map +1 -1
  85. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.js +35 -21
  86. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.js.map +1 -1
  87. package/dist-server/graphql/resolvers/worksheet/worksheet.js +33 -27
  88. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  89. package/dist-server/graphql/resolvers/worksheet/worksheets.js +39 -10
  90. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
  91. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +1 -1
  92. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
  93. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +3 -2
  94. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
  95. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.js +3 -2
  96. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.js.map +1 -1
  97. package/dist-server/graphql/types/index.js +2 -1
  98. package/dist-server/graphql/types/index.js.map +1 -1
  99. package/dist-server/graphql/types/pallet/index.js +10 -0
  100. package/dist-server/graphql/types/pallet/index.js.map +1 -0
  101. package/dist-server/graphql/types/worksheet/airwaybill.js +10 -0
  102. package/dist-server/graphql/types/worksheet/airwaybill.js.map +1 -0
  103. package/dist-server/graphql/types/worksheet/index.js +10 -2
  104. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  105. package/dist-server/graphql/types/worksheet/worksheet-info.js +2 -0
  106. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  107. package/dist-server/graphql/types/worksheet-detail/index.js +2 -1
  108. package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
  109. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js +1 -0
  110. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js.map +1 -1
  111. package/dist-server/routes.js +10 -6
  112. package/dist-server/routes.js.map +1 -1
  113. package/dist-server/utils/inventory-util.js +7 -3
  114. package/dist-server/utils/inventory-util.js.map +1 -1
  115. package/package.json +16 -15
  116. package/server/controllers/ecommerce/ecommerce-controller.ts +37 -10
  117. package/server/controllers/ecommerce/index.ts +1 -0
  118. package/server/controllers/ecommerce/sellercraft-controller.ts +223 -0
  119. package/server/controllers/inbound/unloading-worksheet-controller.ts +16 -13
  120. package/server/controllers/index.ts +1 -0
  121. package/server/controllers/inspect/cycle-count-worksheet-controller.ts +108 -43
  122. package/server/controllers/outbound/packing-worksheet-controller.ts +21 -4
  123. package/server/controllers/outbound/picking-worksheet-controller.ts +26 -11
  124. package/server/controllers/render-grn.ts +218 -0
  125. package/server/controllers/render-job-sheet.ts +51 -39
  126. package/server/controllers/render-kimeda-grn.ts +16 -12
  127. package/server/controllers/render-ro-do.ts +22 -6
  128. package/server/controllers/render-seebuu-grn.ts +12 -12
  129. package/server/controllers/vas/vas-worksheet-controller.ts +104 -23
  130. package/server/controllers/worksheet-controller.ts +87 -22
  131. package/server/graphql/resolvers/pallet/pallet-outbound.ts +2 -1
  132. package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +30 -2
  133. package/server/graphql/resolvers/worksheet/cycle-count-worksheet.ts +7 -4
  134. package/server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.ts +30 -0
  135. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.ts +18 -3
  136. package/server/graphql/resolvers/worksheet/index.ts +6 -4
  137. package/server/graphql/resolvers/worksheet/not-tally-target-inventories.ts +4 -2
  138. package/server/graphql/resolvers/worksheet/packing/activate-packing.ts +20 -3
  139. package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +30 -49
  140. package/server/graphql/resolvers/worksheet/packing/packing.ts +22 -3
  141. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +22 -3
  142. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +71 -20
  143. package/server/graphql/resolvers/worksheet/picking/activate-batch-picking.ts +32 -3
  144. package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +31 -17
  145. package/server/graphql/resolvers/worksheet/picking/assign-picking-inventories.ts +4 -3
  146. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +31 -3
  147. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +143 -175
  148. package/server/graphql/resolvers/worksheet/picking/undo-picking-assignment.ts +5 -4
  149. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +5 -2
  150. package/server/graphql/resolvers/worksheet/recommend-putway-location.ts +1 -1
  151. package/server/graphql/resolvers/worksheet/replace-picking-pallets.ts +22 -9
  152. package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +27 -4
  153. package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.ts +23 -2
  154. package/server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts +452 -14
  155. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.ts +36 -1
  156. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/repackaging.ts +8 -2
  157. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.ts +185 -56
  158. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.ts +210 -54
  159. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.ts +64 -32
  160. package/server/graphql/resolvers/worksheet/worksheet.ts +67 -62
  161. package/server/graphql/resolvers/worksheet/worksheets.ts +51 -13
  162. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +1 -0
  163. package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +2 -1
  164. package/server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.ts +2 -1
  165. package/server/graphql/types/index.ts +2 -1
  166. package/server/graphql/types/pallet/index.ts +6 -0
  167. package/server/graphql/types/worksheet/airwaybill.ts +7 -0
  168. package/server/graphql/types/worksheet/index.ts +10 -2
  169. package/server/graphql/types/worksheet/worksheet-info.ts +2 -0
  170. package/server/graphql/types/worksheet-detail/index.ts +2 -1
  171. package/server/graphql/types/worksheet-detail/inventory-detail.ts +1 -0
  172. package/server/routes.ts +11 -6
  173. package/server/utils/inventory-util.ts +14 -5
@@ -1,21 +1,29 @@
1
+ import { Brackets, Equal, In, Not, SelectQueryBuilder } from 'typeorm'
2
+
1
3
  import { Bizplace } from '@things-factory/biz-base'
2
4
  import {
3
5
  generateCycleCount,
4
6
  InventoryCheck,
5
- OrderInventory,
6
- OrderNoGenerator,
7
7
  ORDER_INVENTORY_STATUS,
8
- ORDER_STATUS
8
+ ORDER_STATUS,
9
+ OrderInventory,
10
+ OrderNoGenerator
9
11
  } from '@things-factory/sales-base'
10
- import { Inventory, Location, INVENTORY_STATUS } from '@things-factory/warehouse-base'
11
- import { Brackets, Equal, Not, SelectQueryBuilder, In } from 'typeorm'
12
+ import { Inventory, INVENTORY_STATUS, Location } from '@things-factory/warehouse-base'
13
+
12
14
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
13
15
  import { Worksheet, WorksheetDetail } from '../../entities'
14
- import { WorksheetController } from '../worksheet-controller'
15
16
  import { WorksheetNoGenerator } from '../../utils'
17
+ import { WorksheetController } from '../worksheet-controller'
16
18
 
17
19
  export class CycleCountWorksheetController extends WorksheetController {
18
- async generateCycleCountWorksheet(executionDate: string, customerId: string, orderInventoryIds: string[] = [], limit: number): Promise<Worksheet> {
20
+ async generateCycleCountWorksheet(
21
+ executionDate: string,
22
+ customerId: string,
23
+ orderInventoryIds: string[] = [],
24
+ orderInventory: OrderInventory[],
25
+ limit: number
26
+ ): Promise<Worksheet> {
19
27
  // Find out warehouse and customer bizplace
20
28
  const customerBizplace: Bizplace = await this.trxMgr.getRepository(Bizplace).findOne(customerId)
21
29
  let foundCycleCountWorksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
@@ -27,11 +35,13 @@ export class CycleCountWorksheetController extends WorksheetController {
27
35
  },
28
36
  relations: ['worksheetDetails', 'worksheetDetails.targetInventory', 'inventoryCheck']
29
37
  })
30
-
38
+
31
39
  // Create second round of cycle count with specified order inventories
32
40
  if (orderInventoryIds.length) {
33
41
  // Update status of target inventories (NOT_TALLY => INSPECTING)
34
- let targetInventories: OrderInventory[] = await this.trxMgr.getRepository(OrderInventory).findByIds(orderInventoryIds)
42
+ let targetInventories: OrderInventory[] = await this.trxMgr
43
+ .getRepository(OrderInventory)
44
+ .findByIds(orderInventoryIds)
35
45
  targetInventories.forEach((targetInventory: OrderInventory) => {
36
46
  targetInventory.status = ORDER_INVENTORY_STATUS.INSPECTING
37
47
  targetInventory.updater = this.user
@@ -68,7 +78,13 @@ export class CycleCountWorksheetController extends WorksheetController {
68
78
  throw new Error(`Unfinished cycle count worksheet exists.`)
69
79
  }
70
80
 
71
- const cycleCount: InventoryCheck = await generateCycleCount(this.trxMgr, this.domain, this.user, executionDate, customerId)
81
+ const cycleCount: InventoryCheck = await generateCycleCount(
82
+ this.trxMgr,
83
+ this.domain,
84
+ this.user,
85
+ executionDate,
86
+ customerId
87
+ )
72
88
 
73
89
  // Find out inventories which is target for cycle counting
74
90
  const qb: SelectQueryBuilder<Inventory> = this.trxMgr.getRepository(Inventory).createQueryBuilder('INV')
@@ -83,11 +99,42 @@ export class CycleCountWorksheetController extends WorksheetController {
83
99
  })
84
100
  )
85
101
 
102
+ if (orderInventory && orderInventory.length > 0) {
103
+ let keyval = {
104
+ batchId: 'batch_id',
105
+ batchIdRef: 'batch_id_ref',
106
+ packingType: 'packing_type',
107
+ packingSize: 'packing_size',
108
+ productId: 'product_id'
109
+ }
110
+
111
+ qb.andWhere(
112
+ new Brackets(qb => {
113
+ orderInventory.forEach((itm, idx) => {
114
+ // sample itm value
115
+ // batchId: 'WO00019730', batchIdRef: null, packingType: 'CARBOY', packingSize: 1, productId: '1d679587-c713-42d6-bd0a-74e587e39cc7'
116
+ qb.orWhere(
117
+ new Brackets(qb2 => {
118
+ let first = true
119
+ for (var prop in itm) {
120
+ if (first) {
121
+ first = false
122
+ qb2.where(`INV.${keyval[prop]} ${itm[prop] == null ? 'is null' : " = '" + itm[prop] + "'"}`)
123
+ } else {
124
+ qb2.andWhere(`INV.${keyval[prop]} ${itm[prop] == null ? 'is null' : " = '" + itm[prop] + "'"}`)
125
+ }
126
+ }
127
+ })
128
+ )
129
+ })
130
+ })
131
+ )
132
+ } else {
86
133
  if (limit > 0) {
87
- qb.orderBy("RANDOM()")
88
- .limit(limit)
134
+ qb.orderBy('RANDOM()').limit(limit)
89
135
  }
90
-
136
+ }
137
+
91
138
  let inventories: Inventory[] = await qb.getMany()
92
139
 
93
140
  if (!inventories.length) {
@@ -234,7 +281,7 @@ export class CycleCountWorksheetController extends WorksheetController {
234
281
  await this.updateOrderTargets([targetInventory])
235
282
 
236
283
  //If all tally, remove lockedQty, lockedWeight, lockedUomValue
237
- if(!isChanged) {
284
+ if (!isChanged) {
238
285
  inventory.lockedQty = 0
239
286
  inventory.lockedWeight = 0
240
287
  inventory.lockedUomValue = 0
@@ -256,9 +303,9 @@ export class CycleCountWorksheetController extends WorksheetController {
256
303
  targetInventory.inspectedUomValue = null
257
304
  targetInventory.inspectedLocation = null
258
305
  targetInventory.status =
259
- targetInventory.status === ORDER_INVENTORY_STATUS.RELOCATED
260
- ? ORDER_INVENTORY_STATUS.MISSING
261
- : ORDER_INVENTORY_STATUS.INSPECTING
306
+ targetInventory.status === ORDER_INVENTORY_STATUS.RELOCATED
307
+ ? ORDER_INVENTORY_STATUS.MISSING
308
+ : ORDER_INVENTORY_STATUS.INSPECTING
262
309
  targetInventory.updater = this.user
263
310
  await this.updateOrderTargets([targetInventory])
264
311
 
@@ -285,15 +332,22 @@ export class CycleCountWorksheetController extends WorksheetController {
285
332
  worksheetDetail.status = WORKSHEET_STATUS.NOT_TALLY
286
333
  worksheetDetail.updater = this.user
287
334
  await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
288
-
335
+
289
336
  targetInventory.status = ORDER_INVENTORY_STATUS.MISSING
290
337
  targetInventory.updater = this.user
291
- await this.updateOrderTargets([targetInventory])
338
+ await this.updateOrderTargets([targetInventory])
292
339
  }
293
340
 
294
- async addExtraPallet(cycleCountNo: string, palletId: string, inspectedBatchNo: string, inspectedQty: number, inspectedUomValue: number, locationName: string): Promise<void> {
341
+ async addExtraPallet(
342
+ cycleCountNo: string,
343
+ palletId: string,
344
+ inspectedBatchNo: string,
345
+ inspectedQty: number,
346
+ inspectedUomValue: number,
347
+ locationName: string
348
+ ): Promise<void> {
295
349
  const inventoryCheck: InventoryCheck = await this.findRefOrder(
296
- InventoryCheck,
350
+ InventoryCheck,
297
351
  {
298
352
  name: cycleCountNo,
299
353
  status: ORDER_STATUS.INSPECTING
@@ -304,26 +358,31 @@ export class CycleCountWorksheetController extends WorksheetController {
304
358
  const bizplace: Bizplace = inventoryCheck.bizplace
305
359
  const qb: SelectQueryBuilder<Inventory> = this.trxMgr.getRepository(Inventory).createQueryBuilder('INV')
306
360
  let inventory: Inventory = await qb
307
- .where('INV.domain = :domainId', { domainId: this.domain.id })
308
- .andWhere('INV.bizplace = :bizplaceId', { bizplaceId: bizplace.id })
309
- .andWhere('INV.palletId = :palletId', { palletId })
310
- .andWhere('INV.status = :status', { status: INVENTORY_STATUS.STORED })
311
- .andWhere(
312
- new Brackets(qb => {
313
- qb.where('INV.lockedQty ISNULL')
314
- qb.orWhere('INV.lockedQty = 0')
315
- })
316
- )
317
- .getOne()
361
+ .where('INV.domain = :domainId', { domainId: this.domain.id })
362
+ .andWhere('INV.bizplace = :bizplaceId', { bizplaceId: bizplace.id })
363
+ .andWhere('INV.palletId = :palletId', { palletId })
364
+ .andWhere('INV.status = :status', { status: INVENTORY_STATUS.STORED })
365
+ .andWhere(
366
+ new Brackets(qb => {
367
+ qb.where('INV.lockedQty ISNULL')
368
+ qb.orWhere('INV.lockedQty = 0')
369
+ })
370
+ )
371
+ .getOne()
318
372
  if (!inventory) throw new Error('Failed to find inventory')
319
373
 
320
374
  const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
321
- where: { domain: this.domain, type: WORKSHEET_TYPE.CYCLE_COUNT, status: WORKSHEET_STATUS.EXECUTING, inventoryCheck }
375
+ where: {
376
+ domain: this.domain,
377
+ type: WORKSHEET_TYPE.CYCLE_COUNT,
378
+ status: WORKSHEET_STATUS.EXECUTING,
379
+ inventoryCheck
380
+ }
322
381
  })
323
382
  const location: Location = await this.trxMgr.getRepository(Location).findOne({
324
383
  where: { domain: this.domain, name: locationName }
325
384
  })
326
-
385
+
327
386
  let targetInventory: OrderInventory = new OrderInventory()
328
387
  targetInventory.domain = this.domain
329
388
  targetInventory.bizplace = bizplace
@@ -338,7 +397,7 @@ export class CycleCountWorksheetController extends WorksheetController {
338
397
  targetInventory.inspectedLocation = location
339
398
  targetInventory.creator = this.user
340
399
  targetInventory.updater = this.user
341
- await this.updateOrderTargets([targetInventory])
400
+ await this.updateOrderTargets([targetInventory])
342
401
 
343
402
  let worksheetDetail: WorksheetDetail = new WorksheetDetail()
344
403
  worksheetDetail.domain = this.domain
@@ -353,34 +412,40 @@ export class CycleCountWorksheetController extends WorksheetController {
353
412
  await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
354
413
  }
355
414
 
356
- async relocatePallet( worksheetDetailName: string, inspectedBatchNo: string, inspectedQty: number, inspectedUomValue: number, inspectedLocationName: string ): Promise<void> {
415
+ async relocatePallet(
416
+ worksheetDetailName: string,
417
+ inspectedBatchNo: string,
418
+ inspectedQty: number,
419
+ inspectedUomValue: number,
420
+ inspectedLocationName: string
421
+ ): Promise<void> {
357
422
  let worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({
358
423
  where: { domain: this.domain, name: worksheetDetailName, type: WORKSHEET_TYPE.CYCLE_COUNT },
359
424
  relations: ['targetInventory', 'targetInventory.inventory', 'targetInventory.inventory.location']
360
425
  })
361
-
426
+
362
427
  if (!worksheetDetail) throw new Error('Failed to find worksheet detail')
363
-
428
+
364
429
  let targetInventory: OrderInventory = worksheetDetail.targetInventory
365
430
  const location: Location = targetInventory?.inventory?.location
366
431
  if (location.name === inspectedLocationName) throw new Error(`You can't relocate at same location`)
367
-
432
+
368
433
  const inspectedLocation: Location = await this.trxMgr.getRepository(Location).findOne({
369
434
  where: { name: inspectedLocationName, domain: this.domain }
370
435
  })
371
-
436
+
372
437
  worksheetDetail.status = WORKSHEET_STATUS.NOT_TALLY
373
438
  worksheetDetail.updater = this.user
374
439
  await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
375
-
440
+
376
441
  targetInventory.inspectedLocation = inspectedLocation
377
442
  targetInventory.inspectedBatchNo = inspectedBatchNo
378
443
  targetInventory.inspectedQty = inspectedQty
379
444
  targetInventory.inspectedWeight = 0
380
- targetInventory.inspectedUomValue = inspectedUomValue
445
+ targetInventory.inspectedUomValue = inspectedUomValue
381
446
  targetInventory.status = ORDER_INVENTORY_STATUS.RELOCATED
382
447
  targetInventory.updater = this.user
383
- await this.updateOrderTargets([targetInventory])
448
+ await this.updateOrderTargets([targetInventory])
384
449
  }
385
450
 
386
451
  async completeCycleCount(inventoryCheckNo: string): Promise<Worksheet> {
@@ -1,6 +1,7 @@
1
1
  import { Product, ProductDetail } from '@things-factory/product-base'
2
- import { OrderInventory, ORDER_INVENTORY_STATUS, ORDER_STATUS, ReleaseGood } from '@things-factory/sales-base'
2
+ import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
3
3
  import { Inventory, INVENTORY_TRANSACTION_TYPE } from '@things-factory/warehouse-base'
4
+
4
5
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
5
6
  import { Worksheet, WorksheetDetail } from '../../entities'
6
7
  import { VasWorksheetController } from '../vas/vas-worksheet-controller'
@@ -18,6 +19,13 @@ export class PackingWorksheetController extends VasWorksheetController {
18
19
  )
19
20
  const orderInventories: OrderInventory[] = releaseGood.orderInventories
20
21
 
22
+ const existingPackingWorksheet: Worksheet = await this.trxMgr
23
+ .getRepository(Worksheet)
24
+ .findOne({
25
+ where: { domain: this.domain, releaseGood, type: WORKSHEET_TYPE.PACKING, status: WORKSHEET_STATUS.DEACTIVATED }
26
+ })
27
+
28
+ if (existingPackingWorksheet) throw new Error('There is existing packing worksheet that has been generated')
21
29
  let worksheet: Worksheet = await this.createWorksheet(releaseGood, WORKSHEET_TYPE.PACKING)
22
30
 
23
31
  if (orderInventories.every((oi: OrderInventory) => oi.inventory?.id) || releaseGood.crossDocking) {
@@ -44,6 +52,8 @@ export class PackingWorksheetController extends VasWorksheetController {
44
52
  async activatePacking(worksheetNo: string): Promise<Worksheet> {
45
53
  let worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.PACKING, [
46
54
  'releaseGood',
55
+ 'releaseGood.bizplace',
56
+ 'releaseGood.bizplace.domain',
47
57
  'worksheetDetails',
48
58
  'worksheetDetails.targetInventory'
49
59
  ])
@@ -67,12 +77,14 @@ export class PackingWorksheetController extends VasWorksheetController {
67
77
  return worksheet
68
78
  }
69
79
 
70
- async packing(worksheetDetailName: string, packedQty: number): Promise<void> {
80
+ async packing(worksheetDetailName: string, packedQty: number): Promise<WorksheetDetail> {
71
81
  let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(
72
82
  worksheetDetailName,
73
83
  WORKSHEET_TYPE.PACKING,
74
84
  [
75
85
  'worksheet',
86
+ 'worksheet.bizplace',
87
+ 'worksheet.bizplace.domain',
76
88
  'targetInventory',
77
89
  'targetInventory.releaseGood',
78
90
  'targetInventory.inventory',
@@ -96,15 +108,18 @@ export class PackingWorksheetController extends VasWorksheetController {
96
108
 
97
109
  worksheetDetail.status = WORKSHEET_STATUS.DONE
98
110
  worksheetDetail.updater = this.user
99
- await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
111
+ worksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
112
+ return worksheetDetail
100
113
  }
101
114
 
102
- async scanProductPacking(worksheetDetailName: string, productBarcode: string): Promise<void> {
115
+ async scanProductPacking(worksheetDetailName: string, productBarcode: string): Promise<WorksheetDetail> {
103
116
  let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(
104
117
  worksheetDetailName,
105
118
  WORKSHEET_TYPE.PACKING,
106
119
  [
107
120
  'worksheet',
121
+ 'worksheet.bizplace',
122
+ 'worksheet.bizplace.domain',
108
123
  'targetInventory',
109
124
  'targetInventory.releaseGood',
110
125
  'targetInventory.inventory',
@@ -147,6 +162,8 @@ export class PackingWorksheetController extends VasWorksheetController {
147
162
  } else {
148
163
  await this.trxMgr.getRepository(OrderInventory).save(targetInventory)
149
164
  }
165
+
166
+ return worksheetDetail
150
167
  }
151
168
 
152
169
  async completePacking(releaseGoodNo: string): Promise<Worksheet> {
@@ -1,27 +1,29 @@
1
+ import { In } from 'typeorm'
2
+
1
3
  import { Bizplace } from '@things-factory/biz-base'
4
+ import { generateId } from '@things-factory/id-rule-base'
2
5
  import { Product, ProductDetail } from '@things-factory/product-base'
3
6
  import {
7
+ ORDER_INVENTORY_STATUS,
8
+ ORDER_STATUS,
4
9
  OrderInventory,
5
10
  OrderNoGenerator,
6
11
  OrderVas,
7
- ORDER_INVENTORY_STATUS,
8
- ORDER_STATUS,
9
12
  ReleaseGood
10
13
  } from '@things-factory/sales-base'
11
- import { generateId } from '@things-factory/id-rule-base'
12
14
  import { Setting } from '@things-factory/setting-base'
13
- import { In } from 'typeorm'
14
15
  import {
15
16
  Inventory,
16
17
  INVENTORY_STATUS,
17
18
  INVENTORY_TRANSACTION_TYPE,
18
- LOCATION_TYPE,
19
- Location
19
+ Location,
20
+ LOCATION_TYPE
20
21
  } from '@things-factory/warehouse-base'
21
- import { WORKSHEET_STATUS, WORKSHEET_TYPE, TASK_NUMBER_SETTING_KEY, TASK_NUMBER_RULE_TYPE } from '../../constants'
22
+
23
+ import { TASK_NUMBER_RULE_TYPE, TASK_NUMBER_SETTING_KEY, WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
22
24
  import { Worksheet, WorksheetDetail } from '../../entities'
23
- import { VasWorksheetController } from '../vas/vas-worksheet-controller'
24
25
  import { WorksheetNoGenerator } from '../../utils'
26
+ import { VasWorksheetController } from '../vas/vas-worksheet-controller'
25
27
 
26
28
  export class PickingWorksheetController extends VasWorksheetController {
27
29
  async generatePickingWorksheet(releaseGoodNo: string): Promise<Worksheet> {
@@ -157,7 +159,9 @@ export class PickingWorksheetController extends VasWorksheetController {
157
159
  let worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.PICKING, [
158
160
  'releaseGood',
159
161
  'releaseGood.bizplace',
162
+ 'domain',
160
163
  'bizplace',
164
+ 'bizplace.domain',
161
165
  'bizplace.company',
162
166
  'bizplace.company.domain',
163
167
  'worksheetDetails',
@@ -203,8 +207,10 @@ export class PickingWorksheetController extends VasWorksheetController {
203
207
  let worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.BATCH_PICKING, [
204
208
  'worksheetDetails',
205
209
  'worksheetDetails.targetInventory',
210
+ 'worksheetDetails.targetInventory.releaseGood',
206
211
  'worksheetDetails.targetInventory.product',
207
212
  'bizplace',
213
+ 'bizplace.domain',
208
214
  'bizplace.company',
209
215
  'bizplace.company.domain'
210
216
  ])
@@ -251,6 +257,7 @@ export class PickingWorksheetController extends VasWorksheetController {
251
257
  batchId: string,
252
258
  productId: string,
253
259
  packingType: string,
260
+ packingSize: number,
254
261
  worksheetDetails: Partial<WorksheetDetail>[]
255
262
  ): Promise<void> {
256
263
  // 1. Remove prev worksheet details if it's exists
@@ -265,7 +272,8 @@ export class PickingWorksheetController extends VasWorksheetController {
265
272
  worksheet.worksheetDetails,
266
273
  batchId,
267
274
  productId,
268
- packingType
275
+ packingType,
276
+ packingSize
269
277
  )
270
278
  // Delete order inventories
271
279
  if (prevWorksheetDetails?.length) {
@@ -301,6 +309,7 @@ export class PickingWorksheetController extends VasWorksheetController {
301
309
  newTargetInventory.batchId = batchId
302
310
  newTargetInventory.product = product
303
311
  newTargetInventory.packingType = packingType
312
+ newTargetInventory.packingSize = packingSize
304
313
  newTargetInventory.creator = this.user
305
314
  newTargetInventory.updater = this.user
306
315
  newTargetInventory = await this.trxMgr.getRepository(OrderInventory).save(newTargetInventory)
@@ -319,7 +328,8 @@ export class PickingWorksheetController extends VasWorksheetController {
319
328
  worksheetNo: string,
320
329
  batchId: string,
321
330
  productId: string,
322
- packingType: string
331
+ packingType: string,
332
+ packingSize: number
323
333
  ): Promise<void> {
324
334
  const worksheet: Worksheet = await this.findWorksheetByNo(worksheetNo, [
325
335
  'worksheetDetails',
@@ -333,6 +343,7 @@ export class PickingWorksheetController extends VasWorksheetController {
333
343
  batchId,
334
344
  productId,
335
345
  packingType,
346
+ packingSize,
336
347
  ['targetInventory', 'targetInventory.inventory']
337
348
  )
338
349
 
@@ -363,6 +374,7 @@ export class PickingWorksheetController extends VasWorksheetController {
363
374
  batchId,
364
375
  product: { id: productId },
365
376
  packingType,
377
+ packingSize,
366
378
  status: ORDER_INVENTORY_STATUS.COMPLETE_SPLIT
367
379
  },
368
380
  { status: ORDER_INVENTORY_STATUS.PENDING_SPLIT, updater: this.user, updatedAt: new Date() }
@@ -849,6 +861,7 @@ export class PickingWorksheetController extends VasWorksheetController {
849
861
  },
850
862
  relations: [
851
863
  'bizplace',
864
+ 'bizplace.domain',
852
865
  'worksheetDetails',
853
866
  'worksheetDetails.targetInventory',
854
867
  'worksheetDetails.targetInventory.releaseGood'
@@ -901,6 +914,7 @@ export class PickingWorksheetController extends VasWorksheetController {
901
914
  standardBatchId: string,
902
915
  standardProductId: string,
903
916
  standardPackingType: string,
917
+ standardPackingSize: number,
904
918
  relations: string[] = ['targetInventory', 'targetInventory.product']
905
919
  ): Promise<WorksheetDetail[]> {
906
920
  for (let wsd of worksheetDetails) {
@@ -913,7 +927,8 @@ export class PickingWorksheetController extends VasWorksheetController {
913
927
  (wsd: WorksheetDetail) =>
914
928
  wsd.targetInventory.batchId === standardBatchId &&
915
929
  wsd.targetInventory.product.id === standardProductId &&
916
- wsd.targetInventory.packingType === standardPackingType
930
+ wsd.targetInventory.packingType === standardPackingType &&
931
+ wsd.targetInventory.packingSize === standardPackingSize
917
932
  )
918
933
 
919
934
  for (let wsd of worksheetDetails) {