@things-factory/worksheet-base 4.3.393 → 4.3.395

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 (28) hide show
  1. package/dist-server/controllers/outbound/index.js +3 -0
  2. package/dist-server/controllers/outbound/index.js.map +1 -1
  3. package/dist-server/controllers/outbound/picking-worksheet-controller.js +160 -14
  4. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  5. package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js +71 -1
  6. package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js.map +1 -1
  7. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +21 -28
  8. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
  9. package/dist-server/graphql/resolvers/worksheet/picking/bulk-activate-picking.js +21 -4
  10. package/dist-server/graphql/resolvers/worksheet/picking/bulk-activate-picking.js.map +1 -1
  11. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +96 -130
  12. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  13. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +22 -56
  14. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  15. package/dist-server/index.js +3 -0
  16. package/dist-server/index.js.map +1 -1
  17. package/dist-server/utils/lmd-util.js +193 -162
  18. package/dist-server/utils/lmd-util.js.map +1 -1
  19. package/package.json +9 -9
  20. package/server/controllers/outbound/index.ts +2 -0
  21. package/server/controllers/outbound/picking-worksheet-controller.ts +172 -19
  22. package/server/graphql/resolvers/worksheet/picking/activate-batch-picking.ts +107 -6
  23. package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +73 -65
  24. package/server/graphql/resolvers/worksheet/picking/bulk-activate-picking.ts +30 -5
  25. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +34 -56
  26. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +4 -36
  27. package/server/index.ts +2 -0
  28. package/server/utils/lmd-util.ts +180 -144
@@ -32,6 +32,8 @@ import {
32
32
  ORDER_TYPES,
33
33
  OrderInventory,
34
34
  OrderNoGenerator,
35
+ OrderPackage,
36
+ OrderPackageItem,
35
37
  OrderProduct,
36
38
  OrderTote,
37
39
  OrderToteItem,
@@ -252,11 +254,13 @@ export class PickingWorksheetController extends VasWorksheetController {
252
254
  'releaseGood.bizplace.domain',
253
255
  'releaseGood.orderProducts',
254
256
  'releaseGood.orderProducts.productDetail',
257
+ 'releaseGood.orderProducts.product',
255
258
  'releaseGood.orderProducts.productDetail.product',
256
259
  'releaseGood.orderPackages',
257
260
  'releaseGood.orderPackages.orderPackageItems',
258
261
  'releaseGood.orderPackages.orderPackageItems.orderProduct',
259
262
  'releaseGood.orderPackages.orderPackageItems.orderProduct.product',
263
+ 'releaseGood.orderPackages.orderPackageItems.orderProduct.productDetail',
260
264
  'domain',
261
265
  'bizplace',
262
266
  'bizplace.domain',
@@ -324,7 +328,7 @@ export class PickingWorksheetController extends VasWorksheetController {
324
328
  if (!releaseGood?.orderPackages?.length) {
325
329
  const orderProducts: OrderProduct[] = await txMgr.getRepository(OrderProduct).find({
326
330
  where: { releaseGood },
327
- relations: ['product', 'product.productDetails','productDetail']
331
+ relations: ['product', 'product.productDetails', 'productDetail']
328
332
  })
329
333
 
330
334
  // asynchronously pack order
@@ -368,6 +372,21 @@ export class PickingWorksheetController extends VasWorksheetController {
368
372
  break
369
373
 
370
374
  default:
375
+ let orderPackage: OrderPackage = {
376
+ name: OrderNoGenerator.orderPackage(),
377
+ packageId: null,
378
+ trackingNo: null,
379
+ transporter: null,
380
+ airwayBill: releaseGood?.airwayBill,
381
+ invoice: releaseGood?.invoice,
382
+ status: ORDER_STATUS.PROCESSING,
383
+ releaseGood,
384
+ domain: releaseGood.domain,
385
+ bizplace: releaseGood.bizplace,
386
+ creator: releaseGood.creator,
387
+ updater: releaseGood.updater
388
+ }
389
+ await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
371
390
  break
372
391
  }
373
392
  } catch (error) {
@@ -388,6 +407,12 @@ export class PickingWorksheetController extends VasWorksheetController {
388
407
  .leftJoinAndSelect('w.worksheetDetails', 'wd')
389
408
  .leftJoinAndSelect('w.releaseGood', 'rg')
390
409
  .leftJoinAndSelect('rg.domain', 'rgd')
410
+ .leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
411
+ .leftJoinAndSelect('rg.orderPackages', 'rgop')
412
+ .leftJoinAndSelect('rgop.orderPackageItems', 'rgopi')
413
+ .leftJoinAndSelect('rgopi.orderProduct', 'op2')
414
+ .leftJoinAndSelect('op2.product', 'p')
415
+ .leftJoinAndSelect('op2.productDetail', 'pd')
391
416
  .leftJoinAndSelect('rg.bizplace', 'rgbz')
392
417
  .leftJoinAndSelect('rgbz.domain', 'bzd')
393
418
  .leftJoinAndSelect('b.domain', 'bd')
@@ -416,11 +441,12 @@ export class PickingWorksheetController extends VasWorksheetController {
416
441
  }
417
442
 
418
443
  const groupedWsBiz = [...groupWs.entries()]
419
- await Promise.all(
444
+ const updatedWs = await Promise.all(
420
445
  groupedWsBiz.map(async ([bizplaceId, worksheetIds]) => {
421
446
  return await this.activateBulkWorksheets(bizplaceId, worksheetIds)
422
447
  })
423
448
  )
449
+ worksheets = updatedWs.flat()
424
450
  } catch (error) {
425
451
  throw error
426
452
  } finally {
@@ -479,7 +505,11 @@ export class PickingWorksheetController extends VasWorksheetController {
479
505
  'releaseGood.orderPackages',
480
506
  'releaseGood.orderPackages.orderPackageItems',
481
507
  'releaseGood.orderPackages.orderPackageItems.orderProduct',
482
- 'releaseGood.orderPackages.orderPackageItems.orderProduct.product'
508
+ 'releaseGood.orderPackages.orderPackageItems.orderProduct.product',
509
+ 'releaseGood.orderPackages.orderPackageItems.orderProduct.productDetail',
510
+ 'releaseGood.orderProducts',
511
+ 'releaseGood.orderProducts.productDetail',
512
+ 'releaseGood.orderProducts.product',
483
513
  ]
484
514
  })
485
515
 
@@ -550,7 +580,22 @@ export class PickingWorksheetController extends VasWorksheetController {
550
580
  break
551
581
 
552
582
  default:
553
- break
583
+ let orderPackage: OrderPackage = {
584
+ name: OrderNoGenerator.orderPackage(),
585
+ packageId: null,
586
+ trackingNo: null,
587
+ transporter: null,
588
+ airwayBill: releaseGood?.airwayBill,
589
+ invoice: releaseGood?.invoice,
590
+ status: ORDER_STATUS.PROCESSING,
591
+ releaseGood,
592
+ domain: releaseGood.domain,
593
+ bizplace: releaseGood.bizplace,
594
+ creator: releaseGood.creator,
595
+ updater: releaseGood.updater
596
+ }
597
+ await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
598
+ break
554
599
  }
555
600
  } catch (error) {
556
601
  logger.error(`picking-worksheet-controller[activateBatchPicking]: ${error}`)
@@ -733,8 +778,49 @@ export class PickingWorksheetController extends VasWorksheetController {
733
778
  }).join(' AND ')}
734
779
  `, worksheetDetailFilters.map((data, idx) => {
735
780
  return data.value
736
- })
737
- )
781
+ }))
782
+
783
+ // find directly without going through the materialized view
784
+ if ((worksheetDetailRaw.length < 1)) {
785
+ worksheetDetailRaw = await this.trxMgr.query(`
786
+ select
787
+ wd.id AS "worksheetDetailId",
788
+ wd.name as "worksheetDetailName",
789
+ w.id as "worksheetId",
790
+ w.domain_id as "domainId",
791
+ op.id as "targetProductId",
792
+ oi.product_id as "productId",
793
+ oi.product_detail_id as "productDetailId",
794
+ op.uom_value as "uomValue",
795
+ pb.id as "productBarcodeId",
796
+ pb.gtin,
797
+ p.is_require_serial_number_scanning_outbound as "productIsRequireSerialNumberScanningOutbound",
798
+ oi.release_good_id as "releaseGoodId",
799
+ oi.id as "orderInventoryId",
800
+ oi.status as "orderInventoryStatus",
801
+ oi.bizplace_id as "bizplaceId",
802
+ i.id as "inventoryId",
803
+ i.carton_id as "inventoryCartonId",
804
+ i.status as "inventoryStatus",
805
+ ici.status as "inventoryCheckItemStatus",
806
+ rg.name as "releaseGoodName",
807
+ rg.ref_no as "refNo"
808
+ FROM worksheet_details wd
809
+ INNER JOIN worksheets w ON wd.worksheet_id = w.id
810
+ inner JOIN order_inventories oi ON oi.id = wd.target_inventory_id
811
+ inner JOIN order_products op ON op.id = oi.order_product_id
812
+ inner join inventories i on i.id = oi.inventory_id
813
+ inner join release_goods rg on rg.id = oi.release_good_id
814
+ left join inventory_check_items ici on ici.inventory_id = oi.inventory_id
815
+ inner join products p on p.id = oi.product_id
816
+ left join product_bundles pb2 on pb2.id = op.product_bundle_id
817
+ LEFT JOIN product_barcodes pb ON pb.product_detail_id = oi.product_detail_id
818
+ left join product_bundle_settings pbs on pbs.product_bundle_id = pb2.id and pbs.product_id = oi.product_id and pbs.product_detail_id = oi.product_detail_id
819
+ WHERE w.type::text = 'PICKING'::text AND w.status::text = 'EXECUTING'::text
820
+ and wd.name = $1 and w.domain_id = $2 and i.carton_id = $3
821
+ ORDER BY w.domain_id, w.bizplace_id, wd.id
822
+ `, [worksheetDetailName, this.domain.id, cartonId])
823
+ }
738
824
 
739
825
  //validation to check matching worksheet detail based on name
740
826
  if ((worksheetDetailRaw.length < 1)) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailName))
@@ -745,7 +831,7 @@ export class PickingWorksheetController extends VasWorksheetController {
745
831
 
746
832
  let targetProduct = { id: worksheetDetailInfos.targetProductId }
747
833
  let bizplace: Partial<Bizplace> = { id: worksheetDetailInfos.bizplaceId }
748
- const releaseGood: Partial<ReleaseGood> = { id: worksheetDetailInfos.releaseGoodId , name: worksheetDetailInfos.releaseGoodName, refNo: worksheetDetailInfos.refNo }
834
+ const releaseGood: Partial<ReleaseGood> = { id: worksheetDetailInfos.releaseGoodId, name: worksheetDetailInfos.releaseGoodName, refNo: worksheetDetailInfos.refNo }
749
835
 
750
836
  let matchingProduct, pickedUomValue
751
837
 
@@ -2408,30 +2494,37 @@ export class PickingWorksheetController extends VasWorksheetController {
2408
2494
  return newWorksheetDetails
2409
2495
  }
2410
2496
 
2411
- async activateBulkWorksheets(bizplaceId, worksheetIds) {
2497
+ async activateBulkWorksheets(bizplaceId, worksheetIds): Promise<Worksheet[]> {
2498
+ const updatedWs: Worksheet[] = []
2412
2499
  try {
2413
2500
  for (const worksheetId of worksheetIds) {
2414
2501
  try {
2415
2502
  let releaseGood: ReleaseGood
2416
2503
  let domain: Domain
2417
2504
 
2418
- getManager().transaction(async (tx: EntityManager) => {
2505
+ await getManager().transaction(async (tx: EntityManager) => {
2419
2506
  const worksheetRepo = tx.getRepository(Worksheet)
2420
2507
  let worksheet = await worksheetRepo
2421
2508
  .createQueryBuilder('w')
2509
+ .leftJoinAndSelect('w.releaseGood', 'rg')
2510
+ .leftJoinAndSelect('rg.bizplace', 'rg_b')
2511
+ .leftJoinAndSelect('rg.domain', 'rg_d')
2512
+ .leftJoinAndSelect('rg.lastMileDelivery', 'rg_lmd')
2513
+ .leftJoinAndSelect('rg_b.domain', 'b_d')
2514
+ .leftJoinAndSelect('rg.orderProducts', 'rg_op')
2515
+ .leftJoinAndSelect('rg_op.product', 'op_p')
2516
+ .leftJoinAndSelect('rg_op.productDetail', 'op_pd')
2517
+ .leftJoinAndSelect('op_pd.product', 'pd_p')
2518
+ .leftJoinAndSelect('rg.orderPackages', 'rg_opc')
2519
+ .leftJoinAndSelect('rg_opc.orderPackageItems', 'opc_opi')
2520
+ .leftJoinAndSelect('opc_opi.orderProduct', 'opi_op')
2521
+ .leftJoinAndSelect('opi_op.product', 'op_p2')
2522
+ .leftJoinAndSelect('opi_op.productDetail', 'op_pd2')
2422
2523
  .leftJoinAndSelect('w.domain', 'd')
2423
2524
  .leftJoinAndSelect('w.bizplace', 'b')
2424
- .leftJoinAndSelect('w.worksheetDetails', 'wd')
2425
- .leftJoinAndSelect('w.releaseGood', 'rg')
2426
- .leftJoinAndSelect('rg.domain', 'rgd')
2427
- .leftJoinAndSelect('rg.bizplace', 'rgbz')
2428
- .leftJoinAndSelect('rgbz.domain', 'bzd')
2429
- .leftJoinAndSelect('rg.orderProducts', 'op')
2430
- .leftJoinAndSelect('op.productDetail', 'pd')
2431
- .leftJoinAndSelect('pd.product', 'p')
2432
- .leftJoinAndSelect('b.domain', 'bd')
2433
2525
  .leftJoinAndSelect('b.company', 'c')
2434
- .leftJoinAndSelect('c.domain', 'cd')
2526
+ .leftJoinAndSelect('c.domain', 'c_d')
2527
+ .leftJoinAndSelect('w.worksheetDetails', 'wd')
2435
2528
  .leftJoinAndSelect('wd.targetInventory', 'ti')
2436
2529
  .leftJoinAndSelect('ti.product', 'tp')
2437
2530
  .where('w.id = :worksheetId', { worksheetId: worksheetId })
@@ -2471,6 +2564,8 @@ export class PickingWorksheetController extends VasWorksheetController {
2471
2564
  worksheet = await this.activateWorksheet(worksheet, worksheetDetails, [], tx)
2472
2565
  releaseGood = worksheet.releaseGood
2473
2566
  domain = worksheet.domain
2567
+
2568
+ updatedWs.push(worksheet)
2474
2569
  })
2475
2570
 
2476
2571
  const orderSource: string = releaseGood?.source
@@ -2535,6 +2630,21 @@ export class PickingWorksheetController extends VasWorksheetController {
2535
2630
  break
2536
2631
 
2537
2632
  default:
2633
+ let orderPackage: OrderPackage = {
2634
+ name: OrderNoGenerator.orderPackage(),
2635
+ packageId: null,
2636
+ trackingNo: null,
2637
+ transporter: null,
2638
+ airwayBill: releaseGood?.airwayBill,
2639
+ invoice: releaseGood?.invoice,
2640
+ status: ORDER_STATUS.PROCESSING,
2641
+ releaseGood,
2642
+ domain: releaseGood.domain,
2643
+ bizplace: releaseGood.bizplace,
2644
+ creator: releaseGood.creator,
2645
+ updater: releaseGood.updater
2646
+ }
2647
+ await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
2538
2648
  break
2539
2649
  }
2540
2650
  } catch (e) {
@@ -2546,5 +2656,48 @@ export class PickingWorksheetController extends VasWorksheetController {
2546
2656
  } catch (e) {
2547
2657
  console.log(e)
2548
2658
  }
2659
+
2660
+ return updatedWs
2549
2661
  }
2662
+
2663
+ }
2664
+
2665
+ export async function createOrderPackageAndItems(tx: EntityManager, releaseGood: ReleaseGood, orderPackage: OrderPackage): Promise<void> {
2666
+ let savedOrderPackage: OrderPackage = await tx.getRepository(OrderPackage).save(orderPackage)
2667
+
2668
+ const orderPackageItems: OrderPackageItem[] = releaseGood.orderProducts.map(op => {
2669
+ if (op.product){
2670
+ return {
2671
+ name: OrderNoGenerator.orderPackageItem(),
2672
+ orderProduct: op,
2673
+ status: ORDER_STATUS.PROCESSING,
2674
+ releaseQty: op.releaseQty,
2675
+ orderPackage: savedOrderPackage,
2676
+ domain: releaseGood.domain,
2677
+ bizplace: releaseGood.bizplace,
2678
+ creator: releaseGood.creator,
2679
+ updater: releaseGood.updater,
2680
+ productDetail: op.productDetail
2681
+ }
2682
+ } else {
2683
+ let productBundle = op.productBundle
2684
+ return productBundle.productBundleSettings.map(pbs => ({
2685
+ name: OrderNoGenerator.orderPackageItem(),
2686
+ orderProduct: op,
2687
+ status: ORDER_STATUS.PROCESSING,
2688
+ releaseQty: op.releaseQty * pbs.bundleQty,
2689
+ orderPackage: savedOrderPackage,
2690
+ domain: releaseGood.domain,
2691
+ bizplace: releaseGood.bizplace,
2692
+ creator: releaseGood.creator,
2693
+ updater: releaseGood.updater,
2694
+ productDetail: pbs.productDetail
2695
+ }))
2696
+ }
2697
+ }).flat()
2698
+
2699
+ await tx.getRepository(OrderPackageItem).save(orderPackageItems)
2700
+ orderPackage.orderPackageItems = orderPackageItems
2701
+ releaseGood.orderPackages = [orderPackage]
2550
2702
  }
2703
+
@@ -1,12 +1,25 @@
1
- import { EntityManager, getConnection } from 'typeorm'
1
+ import {
2
+ EntityManager,
3
+ getConnection,
4
+ In
5
+ } from 'typeorm'
2
6
 
3
- import { User } from '@things-factory/auth-base'
7
+ import {
8
+ ApplicationType,
9
+ User
10
+ } from '@things-factory/auth-base'
11
+ import { logger } from '@things-factory/env'
4
12
  import { MarketplaceStore } from '@things-factory/integration-marketplace'
13
+ import { MarketplaceOrder } from '@things-factory/marketplace-base'
14
+ import { ReleaseGood } from '@things-factory/sales-base'
5
15
  import { Domain } from '@things-factory/shell'
6
16
 
7
- import { EcommerceController, PickingWorksheetController } from '../../../../controllers'
17
+ import {
18
+ EcommerceController,
19
+ PickingWorksheetController
20
+ } from '../../../../controllers'
8
21
  import { Worksheet } from '../../../../entities'
9
- import { logger } from '@things-factory/env'
22
+ import { createLmdParcel } from '../../../../utils'
10
23
 
11
24
  export const activateBatchPickingResolver = {
12
25
  async activateBatchPicking(_: any, { worksheetNo }, context: any) {
@@ -23,17 +36,26 @@ export async function activateBatchPicking(
23
36
  ): Promise<Worksheet> {
24
37
  try {
25
38
  const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
39
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
26
40
  const worksheet = await worksheetController.activateBatchPicking(worksheetNo)
27
41
  const worksheetDetails = worksheet.worksheetDetails
28
42
  const companyDomain: Domain = worksheet?.bizplace.company.domain
29
43
 
44
+ let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
45
+
30
46
  // find for any existing marketplace store connections
31
47
  const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
32
48
  where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },
33
49
  relations: ['marketplaceDistributors']
34
50
  })
35
51
 
36
- const updateMarketplaceProductVariationStock = async (worksheetDetails, domain, user, marketplaceStores, companyDomain) => {
52
+ const updateMarketplaceProductVariationStock = async (
53
+ worksheetDetails,
54
+ domain,
55
+ user,
56
+ marketplaceStores,
57
+ companyDomain
58
+ ) => {
37
59
  try {
38
60
  await getConnection().transaction(async (tx2: EntityManager) => {
39
61
  let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
@@ -49,8 +71,87 @@ export async function activateBatchPicking(
49
71
  updateMarketplaceProductVariationStock(worksheetDetails, domain, user, marketplaceStores, companyDomain)
50
72
  }
51
73
 
52
- return worksheet
74
+ try {
75
+ let releaseGoods: ReleaseGood[] = []
76
+ let releaseGoodIds: ReleaseGood[] = orderInventories.reduce((data, orderInventory) => {
77
+ if (!data.find(x => x.id == orderInventory.releaseGood.id)) {
78
+ data.push(orderInventory.releaseGood.id)
79
+ }
80
+ return data
81
+ }, [])
82
+
83
+ releaseGoods = await tx.getRepository(ReleaseGood).find({
84
+ where: { id: In(releaseGoodIds) },
85
+ relations: [
86
+ 'domain',
87
+ 'lastMileDelivery',
88
+ 'bizplace',
89
+ 'bizplace.domain',
90
+ 'orderPackages',
91
+ 'orderPackages.orderPackageItems',
92
+ 'orderPackages.orderPackageItems.orderProduct',
93
+ 'orderPackages.orderPackageItems.orderProduct.product',
94
+ 'orderPackages.orderPackageItems.orderProduct.productDetail',
95
+ 'orderProducts',
96
+ 'orderProducts.productDetail',
97
+ 'orderProducts.product'
98
+ ]
99
+ })
100
+
101
+ if (releaseGoods?.length) {
102
+ for (const releaseGood of releaseGoods) {
103
+ const orderSource = releaseGood?.source
104
+ const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
105
+ where: { orderNo: releaseGood.refNo, domain: companyDomain },
106
+ relations: ['marketplaceStore']
107
+ })
108
+
109
+ switch (orderSource) {
110
+ case ApplicationType.MMS:
111
+ if (marketplaceStores?.length) {
112
+ if (marketplaceOrder) {
113
+ const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
114
+ await ecommerceCtrl.createOrderPackage(
115
+ tx,
116
+ marketplaceOrder,
117
+ companyDomain,
118
+ marketplaceStore,
119
+ releaseGood
120
+ )
121
+ }
122
+ }
123
+ break
124
+ default:
125
+ break
126
+ }
53
127
 
128
+ if (
129
+ releaseGood?.orderPackages?.length &&
130
+ releaseGood.lmdOption &&
131
+ releaseGood.lastMileDelivery &&
132
+ releaseGood?.orderPackages?.some(op => op.parcelId == null)
133
+ ) {
134
+ await createLmdParcel([releaseGood], tx, domain, user, marketplaceOrder)
135
+
136
+ //where to trigger update parcel count
137
+ let countParcel = releaseGood?.countParcel ? releaseGood.countParcel : 0
138
+ const releaseGoodId = releaseGood?.id
139
+
140
+ await tx.getRepository(ReleaseGood).update(
141
+ { id: releaseGoodId },
142
+ {
143
+ countParcel: countParcel + 1,
144
+ updater: user.id
145
+ }
146
+ )
147
+ }
148
+ }
149
+ }
150
+ } catch (e) {
151
+ logger.error(e)
152
+ }
153
+
154
+ return worksheet
54
155
  } catch (error) {
55
156
  logger.error(`activate-batch-picking[activateBatchPicking]: ${worksheetNo + ':' + error}`)
56
157
  throw new Error('Something went wrong. Please contact support.')
@@ -1,13 +1,26 @@
1
1
  import { EntityManager } from 'typeorm'
2
2
 
3
- import { ApplicationType, User } from '@things-factory/auth-base'
3
+ import {
4
+ ApplicationType,
5
+ User
6
+ } from '@things-factory/auth-base'
4
7
  import { MarketplaceStore } from '@things-factory/integration-marketplace'
5
8
  import { MarketplaceOrder } from '@things-factory/marketplace-base'
6
- import { ORDER_STATUS, ReleaseGood } from '@things-factory/sales-base'
9
+ import {
10
+ ORDER_STATUS,
11
+ ReleaseGood
12
+ } from '@things-factory/sales-base'
7
13
  import { Domain } from '@things-factory/shell'
8
14
 
9
- import { EcommerceController, PickingWorksheetController } from '../../../../controllers'
10
- import { ActiveWorksheetPickingView, Worksheet } from '../../../../entities'
15
+ import {
16
+ EcommerceController,
17
+ PickingWorksheetController
18
+ } from '../../../../controllers'
19
+ import {
20
+ ActiveWorksheetPickingView,
21
+ Worksheet
22
+ } from '../../../../entities'
23
+ import { createLmdParcel } from '../../../../utils'
11
24
 
12
25
  export const activatePickingResolver = {
13
26
  async activatePicking(_: any, { worksheetNo }, context: any) {
@@ -24,81 +37,76 @@ export async function activatePicking(
24
37
  ): Promise<Worksheet> {
25
38
  try {
26
39
  const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
40
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
27
41
  const worksheet = await worksheetController.activatePicking(worksheetNo)
28
42
  const companyDomain: Domain = worksheet?.bizplace.company.domain
29
43
 
30
- let releaseGood: ReleaseGood = worksheet.releaseGood
31
-
32
- const orderSource: string = releaseGood.source
33
- switch (orderSource) {
34
- case ApplicationType.MMS:
35
- // find for any existing marketplace store connections
36
- const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
37
- where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },
38
- relations: ['marketplaceDistributors']
39
- })
40
-
41
- if (marketplaceStores?.length) {
42
- if (marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
43
- const worksheetDetails = worksheet.worksheetDetails
44
- let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
45
- const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
46
- await ecommerceCtrl.updateProductVariationStock(marketplaceStores, orderInventories, companyDomain)
47
- }
48
-
49
- const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
50
- where: { orderNo: releaseGood.refNo, domain: companyDomain },
51
- relations: ['marketplaceStore']
52
- })
44
+ let releaseGood: ReleaseGood = worksheet.releaseGood
45
+ const orderSource: string = releaseGood.source
46
+
47
+ const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
48
+ where: { orderNo: releaseGood.refNo, domain: companyDomain },
49
+ relations: ['marketplaceStore']
50
+ })
51
+
52
+ switch (orderSource) {
53
+ case ApplicationType.MMS:
54
+ // find for any existing marketplace store connections
55
+ const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
56
+ where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },
57
+ relations: ['marketplaceDistributors']
58
+ })
59
+
60
+ if (marketplaceStores?.length) {
61
+ if (marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
62
+ const worksheetDetails = worksheet.worksheetDetails
63
+ let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
64
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
65
+ await ecommerceCtrl.updateProductVariationStock(marketplaceStores, orderInventories, companyDomain)
66
+ }
53
67
 
54
68
  if (marketplaceOrder) {
55
69
  const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
56
70
 
57
- if (marketplaceStore.isAutoUpdateShipment) {
58
- const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
59
- await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
60
- }
71
+ if (marketplaceStore.isAutoUpdateShipment) {
72
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
73
+ await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
61
74
  }
75
+
76
+ await ecommerceCtrl.createOrderPackage(tx, marketplaceOrder, companyDomain, marketplaceStore, releaseGood)
62
77
  }
63
- break
78
+ }
79
+ break
64
80
 
65
81
  default:
66
82
  break
67
83
  }
68
84
 
69
- // if (releaseGood.type === 'b2c') {
70
- // const sellercraft: Sellercraft = await tx
71
- // .getRepository(Sellercraft)
72
- // .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
73
-
74
- // if (marketplaceStores?.length && !sellercraft) {
75
- // if (marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
76
- // const worksheetDetails = worksheet.worksheetDetails
77
- // let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
78
- // const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
79
- // await ecommerceCtrl.updateProductVariationStock(marketplaceStores, orderInventories, companyDomain)
80
- // }
81
-
82
- // const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
83
- // where: { orderNo: releaseGood.refNo, domain: companyDomain },
84
- // relations: ['marketplaceStore']
85
- // })
86
-
87
- // if (marketplaceOrder) {
88
- // const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
89
-
90
- // if (marketplaceStore.isAutoUpdateShipment) {
91
- // const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
92
- // await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
93
- // }
94
- // }
95
- // }
96
- // }
97
- return worksheet
98
- } catch (error) {
99
- throw error
100
- } finally {
101
- ActiveWorksheetPickingView.refreshView()
85
+ if (
86
+ releaseGood?.orderPackages?.length &&
87
+ releaseGood.lmdOption &&
88
+ releaseGood.lastMileDelivery &&
89
+ releaseGood?.orderPackages?.some(op => op.parcelId == null)
90
+ ) {
91
+ await createLmdParcel([releaseGood], tx, domain, user, marketplaceOrder)
92
+
93
+ //where to trigger update parcel count
94
+ let countParcel = releaseGood?.countParcel ? releaseGood.countParcel : 0
95
+ const releaseGoodId = releaseGood?.id
96
+
97
+ await tx.getRepository(ReleaseGood).update(
98
+ { id: releaseGoodId },
99
+ {
100
+ countParcel: countParcel+1,
101
+ updater: user.id
102
+ }
103
+ )
102
104
  }
103
105
 
106
+ return worksheet
107
+ } catch (error) {
108
+ throw error
109
+ } finally {
110
+ ActiveWorksheetPickingView.refreshView()
111
+ }
104
112
  }