@things-factory/worksheet-base 4.3.239 → 4.3.242

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 (48) hide show
  1. package/dist-server/controllers/outbound/loading-worksheet-controller.js +36 -9
  2. package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
  3. package/dist-server/controllers/outbound/picking-worksheet-controller.js +13 -7
  4. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  5. package/dist-server/controllers/render-ro-do.js +21 -8
  6. package/dist-server/controllers/render-ro-do.js.map +1 -1
  7. package/dist-server/controllers/vas/vas-worksheet-controller.js +157 -31
  8. package/dist-server/controllers/vas/vas-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/worksheet-controller.js +21 -8
  10. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  11. package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
  12. package/dist-server/graphql/resolvers/worksheet/loading/undo-loading.js +4 -4
  13. package/dist-server/graphql/resolvers/worksheet/loading/undo-loading.js.map +1 -1
  14. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +62 -3
  15. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
  16. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +18 -1
  17. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  18. package/dist-server/graphql/resolvers/worksheet/vas/complete-vas.js +22 -1
  19. package/dist-server/graphql/resolvers/worksheet/vas/complete-vas.js.map +1 -1
  20. package/dist-server/graphql/resolvers/worksheet/vas-worksheet.js +9 -7
  21. package/dist-server/graphql/resolvers/worksheet/vas-worksheet.js.map +1 -1
  22. package/dist-server/graphql/resolvers/worksheet/worksheet.js +31 -16
  23. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  24. package/dist-server/graphql/resolvers/worksheet-detail/create-worksheet-detail.js +3 -0
  25. package/dist-server/graphql/resolvers/worksheet-detail/create-worksheet-detail.js.map +1 -1
  26. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-detail.js +1 -1
  27. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-detail.js.map +1 -1
  28. package/dist-server/graphql/types/worksheet/index.js +2 -1
  29. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  30. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +1 -0
  31. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
  32. package/package.json +4 -4
  33. package/server/controllers/outbound/loading-worksheet-controller.ts +38 -10
  34. package/server/controllers/outbound/picking-worksheet-controller.ts +13 -6
  35. package/server/controllers/render-ro-do.ts +25 -6
  36. package/server/controllers/vas/vas-worksheet-controller.ts +239 -49
  37. package/server/controllers/worksheet-controller.ts +21 -10
  38. package/server/graphql/resolvers/worksheet/loading/loading.ts +0 -2
  39. package/server/graphql/resolvers/worksheet/loading/undo-loading.ts +5 -4
  40. package/server/graphql/resolvers/worksheet/loading-worksheet.ts +68 -2
  41. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +20 -1
  42. package/server/graphql/resolvers/worksheet/vas/complete-vas.ts +27 -2
  43. package/server/graphql/resolvers/worksheet/vas-worksheet.ts +7 -5
  44. package/server/graphql/resolvers/worksheet/worksheet.ts +34 -13
  45. package/server/graphql/resolvers/worksheet-detail/create-worksheet-detail.ts +5 -1
  46. package/server/graphql/resolvers/worksheet-detail/worksheet-detail.ts +1 -1
  47. package/server/graphql/types/worksheet/index.ts +2 -1
  48. package/server/graphql/types/worksheet/worksheet-detail-info.ts +1 -0
@@ -5,9 +5,9 @@ import { EntityManager } from 'typeorm'
5
5
  import { LoadingWorksheetController } from '../../../../controllers'
6
6
 
7
7
  export const undoLoadingResolver = {
8
- async undoLoading(_: any, { deliveryOrder, palletIds }, context: any) {
8
+ async undoLoading(_: any, { deliveryOrder, palletIds, productIds }, context: any) {
9
9
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
10
- await undoLoading(tx, domain, user, deliveryOrder, palletIds)
10
+ await undoLoading(tx, domain, user, deliveryOrder, palletIds, productIds)
11
11
  }
12
12
  }
13
13
 
@@ -16,8 +16,9 @@ export async function undoLoading(
16
16
  domain: Domain,
17
17
  user: User,
18
18
  deliveryOrder: Partial<DeliveryOrder>,
19
- palletIds: string[]
19
+ palletIds: string[],
20
+ productIds: string[]
20
21
  ): Promise<void> {
21
22
  const worksheetController: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
22
- await worksheetController.undoLoading(deliveryOrder, palletIds)
23
+ await worksheetController.undoLoading(deliveryOrder, palletIds, productIds)
23
24
  }
@@ -6,6 +6,7 @@ import {
6
6
  OrderInventory,
7
7
  ReleaseGood,
8
8
  OrderTote,
9
+ OrderVas,
9
10
  OrderToteItem
10
11
  } from '@things-factory/sales-base'
11
12
  import { Domain } from '@things-factory/shell'
@@ -70,6 +71,7 @@ export const loadingWorksheetResolver = {
70
71
  },
71
72
  relations: [
72
73
  'targetInventory',
74
+ 'targetInventory.product',
73
75
  'targetInventory.orderProduct',
74
76
  'targetInventory.inventory',
75
77
  'targetInventory.inventory.location',
@@ -111,6 +113,20 @@ export const loadingWorksheetResolver = {
111
113
  foundWSD.sort((a, b) => (a.toteName > b.toteName ? 1 : -1))
112
114
  }
113
115
 
116
+ let foundOV: OrderVas[] = await getRepository(OrderVas).find({
117
+ where: {
118
+ domain,
119
+ releaseGood: releaseGood,
120
+ status: Not(Equal(WORKSHEET_STATUS.DONE))
121
+ },
122
+ relations: ['newProduct', 'product', 'newProductDetail']
123
+ })
124
+
125
+ if (foundOV.length > 0) {
126
+ foundWSD = await insertVas(foundWSD, foundOV)
127
+ // foundWSD = await formatLoadingDataVas(foundWSD)
128
+ }
129
+
114
130
  let worksheetDetailInfos = foundWSD
115
131
  .filter(itm => itm.targetInventory.releaseQty > 0)
116
132
  .map((loadingWSD: any) => {
@@ -121,7 +137,8 @@ export const loadingWorksheetResolver = {
121
137
  palletId: inventory.palletId,
122
138
  batchId: inventory.batchId,
123
139
  batchIdRef: inventory.batchIdRef,
124
- product: inventory.product,
140
+ product: targetInventory.product,
141
+ pickedQty: targetInventory.pickedQty,
125
142
  releaseQty: targetInventory.releaseQty,
126
143
  releaseUomValue: targetInventory.releaseUomValue,
127
144
  status: loadingWSD.status,
@@ -130,7 +147,8 @@ export const loadingWorksheetResolver = {
130
147
  packingType: inventory.packingType,
131
148
  packingSize: inventory.packingSize,
132
149
  inventory: targetInventory.inventory,
133
- toteName: loadingWSD.toteName
150
+ toteName: loadingWSD.toteName,
151
+ targetVas: loadingWSD.targetVas
134
152
  }
135
153
  })
136
154
 
@@ -146,3 +164,51 @@ export const loadingWorksheetResolver = {
146
164
  }
147
165
  }
148
166
  }
167
+
168
+ export async function insertVas(wsd, ov) {
169
+ wsd = wsd.map(wd => {
170
+ for (let i = 0; i < ov.length; i++) {
171
+ // if (ov[i].newTargetProduct) {
172
+ if (wd.targetInventory.productId == ov[i].product.id && wd.targetInventory.batchId == ov[i].batchId) {
173
+ wd.targetVas = ov[i]
174
+ }
175
+ // }
176
+ }
177
+ return wd
178
+ })
179
+ return wsd
180
+ // }
181
+ }
182
+
183
+ // export async function formatLoadingDataVas(wsd) {
184
+ // let formattedData: WorksheetDetail[] = []
185
+ // formattedData = wsd.map(wd => {
186
+ // if (wd.targetVas) {
187
+ // if (wd.targetVas.newTargetProduct) {
188
+ // const newQty = wd.targetInventory.releaseQty - wd.targetVas.qty
189
+ // wd.targetInventory.releaseQty = newQty
190
+ // wd.targetInventory.pickedQty = newQty
191
+ // const newSku: WorksheetDetail = {
192
+ // ...wd,
193
+ // targetVas: null,
194
+ // targetInventory: {
195
+ // ...wd.targetInventory,
196
+ // releaseQty: wd.targetVas.outputQty,
197
+ // pickedQty: wd.targetVas.outputQty,
198
+ // inventory: { ...wd.targetInventory.inventory, product: wd.targetVas.newTargetProduct }
199
+ // }
200
+ // }
201
+ // wsd.push(newSku)
202
+ // }
203
+ // }
204
+ // return wd
205
+ // })
206
+
207
+ // formattedData = wsd.splice(wd => wd.targetInventory.pickedQty == 0)
208
+
209
+ // // formattedData = formattedData.sort((a, b) =>
210
+ // // a.targetInventory.inventory.batchId > b ? 1 : a.targetVas && !b.targetVas ? -1 : a.targetVas && !b.targetVas ? 1 : 0
211
+ // // )
212
+
213
+ // return formattedData
214
+ // }
@@ -23,6 +23,7 @@ import {
23
23
  OrderPackage,
24
24
  OrderPackageItem,
25
25
  OrderProduct,
26
+ OrderVas,
26
27
  ReleaseGood,
27
28
  Replenishment
28
29
  } from '@things-factory/sales-base'
@@ -43,6 +44,7 @@ import { EcommerceController } from '../../../../controllers/ecommerce'
43
44
  import { WorksheetController } from '../../../../controllers/worksheet-controller'
44
45
  import { Worksheet, WorksheetDetail } from '../../../../entities'
45
46
  import { createLmdParcel } from '../../../../utils'
47
+ import { activateVas } from '../vas/activate-vas'
46
48
 
47
49
  export const completePickingResolver = {
48
50
  async completePicking(_: any, { releaseGoodNo }, context: any) {
@@ -400,8 +402,25 @@ export async function completePicking(
400
402
  }
401
403
  })
402
404
 
405
+ let orderVas: OrderVas[] = await tx.getRepository(OrderVas).find({ where: { domain: domain, releaseGood } })
406
+ if (orderVas) {
407
+ try {
408
+ const vasWorksheet: Worksheet = await tx
409
+ .getRepository(Worksheet)
410
+ .findOne({ where: { releaseGood, type: WORKSHEET_TYPE.VAS } })
411
+
412
+ const vasWorksheetDetails: WorksheetDetail[] = await tx
413
+ .getRepository(WorksheetDetail)
414
+ .find({ where: { domain: domain, worksheet: vasWorksheet.id } })
415
+
416
+ if (vasWorksheet) {
417
+ await activateVas(tx, domain, user, vasWorksheet.name, vasWorksheetDetails)
418
+ }
419
+ } catch (e) { }
420
+ }
421
+ // Can improve by applying "Else" since if got VAS user has to complete then only we generate loading worksheet
403
422
  if (!existLoadingWorksheet && !releaseGood.courierOption && !releaseGood.packingOption) {
404
- if (pickedTargetInventories.length > 0) {
423
+ if (pickedTargetInventories.length > 0 && orderVas.length == 0) {
405
424
  const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
406
425
  let loadingWorksheet: Worksheet = await loadingWSCtrl.generateLoadingWorksheet(
407
426
  releaseGoodNo,
@@ -1,7 +1,7 @@
1
1
  import { User } from '@things-factory/auth-base'
2
2
  import { ArrivalNotice, ReleaseGood } from '@things-factory/sales-base'
3
3
  import { Domain } from '@things-factory/shell'
4
- import { EntityManager } from 'typeorm'
4
+ import { EntityManager, getRepository, In } from 'typeorm'
5
5
  import { WORKSHEET_TYPE } from '../../../../constants'
6
6
  import { LoadingWorksheetController, PutawayWorksheetController, VasWorksheetController } from '../../../../controllers'
7
7
  import { Worksheet, WorksheetDetail } from '../../../../entities'
@@ -9,6 +9,24 @@ import { Worksheet, WorksheetDetail } from '../../../../entities'
9
9
  export const completeVasResolver = {
10
10
  async completeVas(_: any, { orderNo, orderType, worksheetDetails }, context: any) {
11
11
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
12
+ if (!worksheetDetails) {
13
+ const releaseGood: ReleaseGood = await getRepository(ReleaseGood).findOne({
14
+ domain: domain.id,
15
+ name: orderNo
16
+ })
17
+ const worksheet: Worksheet[] = await getRepository(Worksheet).find({
18
+ domain: domain.id,
19
+ releaseGood: releaseGood.id,
20
+ type: WORKSHEET_TYPE.VAS
21
+ })
22
+ const worksheetId = worksheet.map(w => {
23
+ return w.id
24
+ })
25
+ worksheetDetails = await getRepository(WorksheetDetail).find({
26
+ domain: domain.id,
27
+ worksheet: In(worksheetId)
28
+ })
29
+ }
12
30
  await completeVAS(tx, domain, user, orderNo, orderType, worksheetDetails)
13
31
  }
14
32
  }
@@ -22,7 +40,14 @@ export async function completeVAS(
22
40
  worksheetDetails: WorksheetDetail[]
23
41
  ): Promise<Worksheet> {
24
42
  const worksheetController: VasWorksheetController = new VasWorksheetController(tx, domain, user)
25
- let worksheet: Worksheet = await worksheetController.completeVAS(orderNo, orderType, worksheetDetails)
43
+ let worksheet: Worksheet = await worksheetController.completeVAS(
44
+ tx,
45
+ domain,
46
+ user,
47
+ orderNo,
48
+ orderType,
49
+ worksheetDetails
50
+ )
26
51
 
27
52
  // if (orderType === ORDER_TYPES.ARRIVAL_NOTICE) {
28
53
  // if (!worksheet.worksheetDetails?.length || !worksheet.arrivalNotice?.id) {
@@ -43,10 +43,11 @@ export const vasWorksheetResolver = {
43
43
  [
44
44
  'worksheetDetails',
45
45
  'worksheetDetails.targetVas',
46
- 'worksheetDetails.targetVas.vas',
47
46
  'worksheetDetails.targetVas.inventory',
48
- 'worksheetDetails.targetVas.targetProduct',
49
- 'worksheetDetails.targetVas.inventory.location',
47
+ 'worksheetDetails.targetVas.product',
48
+ 'worksheetDetails.targetVas.newProduct',
49
+ 'worksheetDetails.targetVas.orderVasItems',
50
+ 'worksheetDetails.targetVas.orderVasItems.vas',
50
51
  'creator',
51
52
  'updater'
52
53
  ],
@@ -83,7 +84,7 @@ export const vasWorksheetResolver = {
83
84
  relatedOrderInv: wsd.targetInventory,
84
85
  batchId: targetVas?.batchId,
85
86
  targetName: targetVas?.name,
86
- vas: targetVas?.vas,
87
+ vas: targetVas?.orderVasItems?.vas,
87
88
  set: targetVas?.set,
88
89
  inventory: targetVas?.inventory,
89
90
  locationInv: targetVas?.inventory?.location?.name,
@@ -98,7 +99,8 @@ export const vasWorksheetResolver = {
98
99
  description: wsd.description,
99
100
  remark: targetVas?.remark,
100
101
  actualQty: targetVas?.actualQty,
101
- actualUomValue: targetVas?.actualUomValue
102
+ actualUomValue: targetVas?.actualUomValue,
103
+ targetVas: targetVas ? targetVas : null
102
104
  }
103
105
  })
104
106
  }
@@ -8,6 +8,7 @@ import { Inventory, INVENTORY_STATUS, InventoryHistory } from '@things-factory/w
8
8
 
9
9
  import { WORKSHEET_TYPE } from '../../../constants'
10
10
  import { Worksheet, WorksheetDetail } from '../../../entities'
11
+ import { OrderTargetFields } from 'server/controllers'
11
12
 
12
13
  interface WorksheetInterface extends Worksheet {
13
14
  orderProducts: OrderProduct[]
@@ -47,10 +48,15 @@ export const worksheetResolver = {
47
48
  'worksheetDetails.targetProduct',
48
49
  'worksheetDetails.targetProduct.product',
49
50
  'worksheetDetails.targetVas',
51
+ 'worksheetDetails.targetVas.orderInventory',
50
52
  'worksheetDetails.targetVas.vas',
51
53
  'worksheetDetails.targetVas.inventory',
52
54
  'worksheetDetails.targetVas.inventory.location',
53
- 'worksheetDetails.targetVas.targetProduct',
55
+ 'worksheetDetails.targetVas.product',
56
+ 'worksheetDetails.targetVas.newProduct',
57
+ 'worksheetDetails.targetVas.newProductDetail',
58
+ 'worksheetDetails.targetVas.orderVasItems',
59
+ 'worksheetDetails.targetVas.orderVasItems.vas',
54
60
  'worksheetDetails.targetInventory',
55
61
  'worksheetDetails.targetInventory.releaseGood',
56
62
  'worksheetDetails.targetInventory.product',
@@ -255,13 +261,16 @@ export const worksheetResolver = {
255
261
  })
256
262
  }
257
263
 
258
- if (worksheet.orderInventories) {
259
- worksheet.worksheetDetails.sort(function (a, b) {
260
- return (
261
- worksheet.orderInventories.map(oi => oi.id).indexOf(a.targetInventory.id) -
262
- worksheet.orderInventories.map(oi => oi.id).indexOf(b.targetInventory.id)
263
- )
264
- })
264
+ // need use promise all for better performance
265
+ for (let i = 0; i < worksheet.worksheetDetails.length; i++) {
266
+ if (worksheet.worksheetDetails[i].targetInventory !== null) {
267
+ worksheet.worksheetDetails.sort(function (a, b) {
268
+ return (
269
+ worksheet.orderInventories.map(oi => oi.id).indexOf(a.targetInventory.id) -
270
+ worksheet.orderInventories.map(oi => oi.id).indexOf(b.targetInventory.id)
271
+ )
272
+ })
273
+ }
265
274
  }
266
275
 
267
276
  if (worksheet?.returnOrder?.id) {
@@ -310,7 +319,6 @@ export const worksheetResolver = {
310
319
  return worksheet
311
320
  },
312
321
 
313
-
314
322
  async inboundWorksheetDetails(_: any, { name }, context: any) {
315
323
  const { domain }: { domain: Domain } = context.state
316
324
 
@@ -339,7 +347,8 @@ export const worksheetResolver = {
339
347
 
340
348
  let worksheetDetails: WorksheetDetail[] = []
341
349
  if (foundWorksheet.type === 'UNLOADING') {
342
- qbWorksheetDetails.select('worksheetDetails')
350
+ qbWorksheetDetails
351
+ .select('worksheetDetails')
343
352
  .leftJoinAndSelect('worksheetDetails.targetProduct', 'targetProduct')
344
353
  .leftJoinAndSelect('targetProduct.product', 'product')
345
354
  .where('worksheetDetails.worksheet_id =:worksheetId', { worksheetId: foundWorksheet.id })
@@ -360,11 +369,23 @@ export const worksheetResolver = {
360
369
  worksheetDetails = await qbWorksheetDetails.getMany()
361
370
  }
362
371
 
363
- let orderInventories: OrderInventory[] = worksheetDetails.filter(wd => { if (wd.targetInventory) { return wd.targetInventory } })
372
+ let orderInventories: OrderInventory[] = worksheetDetails.filter(wd => {
373
+ if (wd.targetInventory) {
374
+ return wd.targetInventory
375
+ }
376
+ })
364
377
 
365
- let orderProducts: OrderProduct[] = worksheetDetails.filter(wd => { if (wd.targetProduct) { return wd.targetProduct } })
378
+ let orderProducts: OrderProduct[] = worksheetDetails.filter(wd => {
379
+ if (wd.targetProduct) {
380
+ return wd.targetProduct
381
+ }
382
+ })
366
383
 
367
- let orderVas: OrderVas[] = worksheetDetails.filter(wd => { if (wd.targetVas) { return wd.targetVas } })
384
+ let orderVas: OrderVas[] = worksheetDetails.filter(wd => {
385
+ if (wd.targetVas) {
386
+ return wd.targetVas
387
+ }
388
+ })
368
389
 
369
390
  // console.time('map')
370
391
  let worksheet: WorksheetInterface = {
@@ -2,7 +2,7 @@ import { User } from '@things-factory/auth-base'
2
2
  import { Domain } from '@things-factory/shell'
3
3
  import { EntityManager } from 'typeorm'
4
4
  import { getPermittedBizplaceIds, Worker } from '@things-factory/biz-base'
5
- import { OrderProduct, OrderVas } from '@things-factory/sales-base'
5
+ import { OrderProduct, OrderVas, OrderInventory } from '@things-factory/sales-base'
6
6
  import { Worksheet, WorksheetDetail } from '../../../entities'
7
7
 
8
8
  export const createWorksheetDetail = {
@@ -24,6 +24,10 @@ export const createWorksheetDetail = {
24
24
  worksheetDetail.targetProduct = await tx.getRepository(OrderProduct).findOne(worksheetDetail.targetProduct.id)
25
25
  }
26
26
 
27
+ if (worksheetDetail.targetInventory && worksheetDetail.targetInventory.id) {
28
+ worksheetDetail.targetInventory = await tx.getRepository(OrderInventory).findOne(worksheetDetail.targetInventory.id)
29
+ }
30
+
27
31
  if (worksheetDetail.targetVas && worksheetDetail.targetVas.id) {
28
32
  worksheetDetail.targetVas = await tx.getRepository(OrderVas).findOne(worksheetDetail.targetVas.id)
29
33
  }
@@ -14,7 +14,7 @@ export const worksheetDetailResolver = {
14
14
  bizplace: In(await getPermittedBizplaceIds(domain, user)),
15
15
  name
16
16
  },
17
- relations: ['domain', 'bizplace', 'worksheet', 'worker', 'targetProduct', 'targetVas', 'creator', 'updater']
17
+ relations: ['domain', 'bizplace', 'worksheet', 'worker', 'targetInventory', 'targetProduct', 'targetVas', 'creator', 'updater']
18
18
  })
19
19
  }
20
20
  }
@@ -314,6 +314,7 @@ export const Mutation = /* GraphQL */ `
314
314
  undoLoading (
315
315
  deliveryOrder: ObjectRef!
316
316
  palletIds: [String]!
317
+ productIds: [String]!
317
318
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
318
319
 
319
320
  transfer (
@@ -497,7 +498,7 @@ export const Mutation = /* GraphQL */ `
497
498
  completeVas (
498
499
  orderNo: String!
499
500
  orderType: String!
500
- worksheetDetails: [WorksheetDetailPatch]!
501
+ worksheetDetails: [WorksheetDetailPatch]
501
502
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
502
503
 
503
504
  repalletizing (
@@ -41,6 +41,7 @@ export const WorksheetDetailInfo = gql`
41
41
  targetType: String
42
42
  targetBatchId: String
43
43
  targetProduct: Product
44
+ targetVas: OrderVas
44
45
  otherTarget: String
45
46
  vas: Vas
46
47
  targetName: String