@things-factory/sales-base 4.3.524 → 4.3.526

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 (25) hide show
  1. package/dist-server/controllers/ecommerce/powrup-controller.js +33 -341
  2. package/dist-server/controllers/ecommerce/powrup-controller.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/webspert-controller.js +30 -10
  4. package/dist-server/controllers/ecommerce/webspert-controller.js.map +1 -1
  5. package/dist-server/service/order-consignment/order-consignment.js +6 -25
  6. package/dist-server/service/order-consignment/order-consignment.js.map +1 -1
  7. package/dist-server/service/order-package/order-package.js +5 -0
  8. package/dist-server/service/order-package/order-package.js.map +1 -1
  9. package/dist-server/service/release-good/release-good-mutation.js +1 -0
  10. package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
  11. package/dist-server/service/release-good/release-good-query.js +1 -1
  12. package/dist-server/service/release-good/release-good-query.js.map +1 -1
  13. package/dist-server/service/release-good/release-good.js +0 -5
  14. package/dist-server/service/release-good/release-good.js.map +1 -1
  15. package/dist-server/utils/order-no-generator.js +0 -3
  16. package/dist-server/utils/order-no-generator.js.map +1 -1
  17. package/package.json +16 -16
  18. package/server/controllers/ecommerce/powrup-controller.ts +36 -407
  19. package/server/controllers/ecommerce/webspert-controller.ts +49 -43
  20. package/server/service/order-consignment/order-consignment.ts +4 -22
  21. package/server/service/order-package/order-package.ts +5 -1
  22. package/server/service/release-good/release-good-mutation.ts +1 -0
  23. package/server/service/release-good/release-good-query.ts +1 -1
  24. package/server/service/release-good/release-good.ts +0 -5
  25. package/server/utils/order-no-generator.ts +0 -4
@@ -1,5 +1,5 @@
1
1
  import { EntityManager, getConnection, getRepository } from 'typeorm'
2
- import { v4 as uuidv4 } from 'uuid'
2
+
3
3
  import { Bizplace } from '@things-factory/biz-base'
4
4
  import { logger } from '@things-factory/env'
5
5
  import { Platform, Powrup, PowrupAPI } from '@things-factory/integration-powrup'
@@ -14,7 +14,6 @@ import { OrderProduct } from '../../service/order-product/order-product'
14
14
  import { ReleaseGood } from '../../service/release-good/release-good'
15
15
  import { OrderNoGenerator } from '../../utils'
16
16
  import { DateTimeDifference } from '../../utils/datetime-util'
17
- import { OrderConsignment } from '../../service/order-consignment/order-consignment'
18
17
 
19
18
  const { PerformanceObserver, performance } = require('node:perf_hooks')
20
19
 
@@ -36,7 +35,9 @@ export class PowrupController {
36
35
 
37
36
  try {
38
37
  const orderProducts: OrderProduct[] = releaseGood.orderProducts
39
- const orderInformation: any = { refOrderId: releaseGood.refOrderId }
38
+ const orderInformation: any = {
39
+ refOrderId: releaseGood.refOrderId
40
+ }
40
41
 
41
42
  if (
42
43
  releaseGood?.lastMarketPackCall &&
@@ -55,57 +56,47 @@ export class PowrupController {
55
56
  context: { state: { domain: domain || null, user: user || null } }
56
57
  })
57
58
  performance.mark(`end:${releaseGood.refOrderId}`)
58
-
59
59
  if (orderPack?.packages) {
60
60
  const packages: any[] = orderPack.packages
61
+
61
62
  await Promise.all(
62
63
  packages.map(async pkg => {
63
64
  const items = pkg.items
65
+ const orderPackage: any = {
66
+ name: OrderNoGenerator.orderPackage(),
67
+ packageId: pkg.packageId,
68
+ status: ORDER_STATUS.PROCESSING,
69
+ releaseGood,
70
+ domain: releaseGood.domain,
71
+ bizplace: releaseGood.bizplace,
72
+ creator: releaseGood.creator,
73
+ updater: releaseGood.updater
74
+ }
75
+
76
+ let savedOrderPackage: OrderPackage = await trxMgr.getRepository(OrderPackage).save(orderPackage)
64
77
 
65
- const isMps = releaseGood?.lastMileDelivery?.mps
78
+ const orderPackageItems: OrderPackageItem[] = items.map(itm => {
79
+ const { refCode, qty } = itm
80
+ if (!refCode) {
81
+ throw new Error(`universalIdentifier missing`)
82
+ }
83
+ const matchedOrderProduct: OrderProduct = orderProducts.find(op => op.productDetail.refCode == refCode)
66
84
 
67
- if (isMps) {
68
- let newReleaseGood = await splitOrderConsignment(trxMgr, releaseGood, items, user)
69
- await updatePackageId(packages, releaseGood, trxMgr)
70
- } else {
71
- let orderConsignment = await createOrderConsignment(trxMgr, releaseGood, user)
72
- const orderPackage: any = {
73
- name: OrderNoGenerator.orderPackage(),
74
- packageId: pkg.packageId,
85
+ return {
86
+ name: OrderNoGenerator.orderPackageItem(),
87
+ orderProduct: matchedOrderProduct,
75
88
  status: ORDER_STATUS.PROCESSING,
76
- releaseGood,
77
- orderConsignment,
89
+ releaseQty: qty,
90
+ orderPackage: savedOrderPackage,
78
91
  domain: releaseGood.domain,
79
92
  bizplace: releaseGood.bizplace,
80
93
  creator: releaseGood.creator,
81
- updater: releaseGood.updater
94
+ updater: releaseGood.updater,
95
+ productDetail: matchedOrderProduct?.productDetail
82
96
  }
97
+ })
83
98
 
84
- let savedOrderPackage: OrderPackage = await trxMgr.getRepository(OrderPackage).save(orderPackage)
85
-
86
- const orderPackageItems: OrderPackageItem[] = items.map(itm => {
87
- const { refCode, qty } = itm
88
- if (!refCode) {
89
- throw new Error(`universalIdentifier missing`)
90
- }
91
- const matchedOrderProduct: OrderProduct = orderProducts.find(op => op.productDetail.refCode == refCode)
92
-
93
- return {
94
- name: OrderNoGenerator.orderPackageItem(),
95
- orderProduct: matchedOrderProduct,
96
- status: ORDER_STATUS.PROCESSING,
97
- releaseQty: qty,
98
- orderPackage: savedOrderPackage,
99
- domain: releaseGood.domain,
100
- bizplace: releaseGood.bizplace,
101
- creator: releaseGood.creator,
102
- updater: releaseGood.updater,
103
- productDetail: matchedOrderProduct?.productDetail
104
- }
105
- })
106
-
107
- await trxMgr.getRepository(OrderPackageItem).save(orderPackageItems)
108
- }
99
+ await trxMgr.getRepository(OrderPackageItem).save(orderPackageItems)
109
100
  })
110
101
  )
111
102
 
@@ -239,9 +230,8 @@ export class PowrupController {
239
230
  }
240
231
 
241
232
  try {
242
- let orderPackages: OrderPackage[] = await (
243
- trxMgr?.getRepository(OrderPackage) || getRepository(OrderPackage)
244
- ).find({ where: { releaseGood } })
233
+ let orderPackages: OrderPackage[] = await (trxMgr?.getRepository(OrderPackage) || getRepository(OrderPackage))
234
+ .find({ where: { releaseGood } })
245
235
 
246
236
  if (orderPackages?.length) {
247
237
  await Promise.all(
@@ -280,10 +270,7 @@ export class PowrupController {
280
270
  updater: user
281
271
  }
282
272
 
283
- await (trxMgr?.getRepository(OrderPackage) || getRepository(OrderPackage)).update(
284
- { id: op.id },
285
- { ...updateInfo }
286
- )
273
+ await (trxMgr?.getRepository(OrderPackage) || getRepository(OrderPackage)).update({ id: op.id }, { ...updateInfo })
287
274
  }
288
275
  } catch (error) {
289
276
  performance.mark(`end:${releaseGood.refOrderId} - ${op.packageId}`)
@@ -298,9 +285,7 @@ export class PowrupController {
298
285
  })
299
286
  )
300
287
 
301
- releaseGood = await (trxMgr?.getRepository(ReleaseGood) || getRepository(ReleaseGood)).findOne({
302
- id: releaseGood.id
303
- })
288
+ releaseGood = await (trxMgr?.getRepository(ReleaseGood) || getRepository(ReleaseGood)).findOne({ id: releaseGood.id })
304
289
  }
305
290
 
306
291
  return releaseGood
@@ -384,359 +369,3 @@ export class PowrupController {
384
369
  }
385
370
  }
386
371
  }
387
-
388
- export async function createOrderConsignment(
389
- tx: EntityManager,
390
- releaseGood: ReleaseGood,
391
- user?: User,
392
- orderCons?: OrderConsignment
393
- ): Promise<OrderConsignment> {
394
- try {
395
- const orderConsignment: OrderConsignment = {
396
- id: uuidv4(),
397
- name: OrderNoGenerator.orderConsignment(),
398
- noOfPackages: orderCons?.orderPackages?.length ? orderCons.orderPackages.length : 1,
399
- domain: releaseGood.domain,
400
- bizplace: releaseGood.bizplace,
401
- releaseGood: releaseGood,
402
- orderPackages: [],
403
- creator: user,
404
- updater: user
405
- }
406
-
407
- return tx.getRepository(OrderConsignment).save(orderConsignment)
408
- } catch (e) {
409
- logger.error(`[lmd-create-order-consignment]: ${e} `)
410
- }
411
- }
412
-
413
- export async function sortingProduct(items, releaseGood): Promise<any> {
414
- try {
415
- let orderProducts: OrderProduct[] = releaseGood.orderProducts
416
-
417
- const sortedMatchedOrderProducts = items
418
- .map(itm => {
419
- const { refCode, qty } = itm
420
- if (!refCode) {
421
- throw new Error(`universalIdentifier missing`)
422
- }
423
- // Find matched order product for each item
424
- return orderProducts.find(op => op.productDetail.refCode === refCode) || null
425
- })
426
- .filter(item => item) // Filter out any null values
427
- .sort((a, b) => {
428
- if (a.product.packingType !== b.product.packingType) {
429
- return a.product.packingType < b.product.packingType ? -1 : 1
430
- }
431
- if (a.product.sku !== b.product.sku) {
432
- return a.product.sku < b.product.sku ? -1 : 1
433
- }
434
- return 0
435
- })
436
-
437
- return sortedMatchedOrderProducts
438
- } catch (e) {
439
- logger.error(`[lmd-sort-product]: ${e} `)
440
- }
441
- }
442
-
443
- export async function splitOrderConsignment(
444
- tx: EntityManager,
445
- releaseGood: ReleaseGood,
446
- items: any,
447
- user: User
448
- ): Promise<any> {
449
- try {
450
- let currentConsignment = { id: uuidv4(), totalWeight: 0, orderPackages: [] }
451
- let totalConsignments = []
452
- let currOrderProducts = []
453
- let totalConsignmentWeight = 0
454
-
455
- let orderProducts = releaseGood.orderProducts
456
- let maxConsignmentWeight = releaseGood.lastMileDelivery.consignmentWeight
457
-
458
- //sort items from packOrder API
459
- let sortItems = await sortingProduct(items, releaseGood)
460
-
461
- //initialise new orderConsignment created
462
- const createdNewConsignment = () => ({
463
- id: uuidv4(),
464
- totalWeight: 0,
465
- orderPackages: []
466
- })
467
-
468
- //push orderPackage & packageItems into consigment
469
- const createPackageConsignment = (consignment, packageWeight, releaseGood, orderProduct, releaseQty, user) => {
470
- consignment.totalWeight += packageWeight
471
-
472
- currentConsignment.orderPackages.push({
473
- id: uuidv4(),
474
- name: OrderNoGenerator.orderPackage(),
475
- packageId: null,
476
- trackingNo: null,
477
- transporter: null,
478
- airwayBill: releaseGood?.airwayBill,
479
- invoice: releaseGood?.invoice,
480
- status: ORDER_STATUS.PROCESSING,
481
- releaseGood,
482
- domain: releaseGood.domain,
483
- bizplace: releaseGood.bizplace,
484
- creator: user,
485
- updater: user,
486
- orderPackageItems: [
487
- {
488
- id: uuidv4(),
489
- name: OrderNoGenerator.orderPackageItem(),
490
- releaseQty: releaseQty,
491
- orderProduct: orderProduct,
492
- domain: releaseGood.domain,
493
- bizplace: releaseGood.bizplace,
494
- creator: releaseGood.creator,
495
- updater: releaseGood.updater,
496
- productDetail: orderProduct.productDetail
497
- }
498
- ]
499
- })
500
- }
501
-
502
- const createPackage = op => {
503
- let releaseQty = op.productDetail.packingType.toLowerCase() === 'carton' ? 1 : op.releaseQty
504
- let packageWeight =
505
- op.productDetail.packingType.toLowerCase() === 'carton'
506
- ? op.productDetail.grossWeight
507
- : op.productDetail.grossWeight * releaseQty
508
-
509
- const isCarton = op.productDetail.packingType.toLowerCase() === 'carton'
510
- totalConsignmentWeight += packageWeight
511
- const requiresNewConsignment = totalConsignmentWeight + packageWeight >= maxConsignmentWeight
512
-
513
- if (isCarton || op.releaseQty > 1) {
514
- if (requiresNewConsignment) {
515
- //push the current consignment to create new consignment
516
- totalConsignments.push(currentConsignment)
517
-
518
- //Initialise the totalConsignment weight to the new data
519
- totalConsignmentWeight = packageWeight + 0
520
- currentConsignment = createdNewConsignment()
521
- }
522
- createPackageConsignment(currentConsignment, packageWeight, releaseGood, op, releaseQty, user)
523
- } else {
524
- currOrderProducts.push(op)
525
- }
526
- }
527
-
528
- sortItems.forEach(item => {
529
- let productDetail: ProductDetail = item.productDetail
530
- if (productDetail.packingType.toLowerCase() === 'carton') {
531
- for (let i = 0; i < item.releaseQty; i++) {
532
- createPackage(item)
533
- }
534
- } else {
535
- createPackage(item)
536
- }
537
- })
538
-
539
- // Add any remaining items to the last orderPackage
540
- if (currOrderProducts.length > 0) {
541
- let availableConsignment
542
-
543
- for (let i = 0; i < currOrderProducts.length; i++) {
544
- let op = currOrderProducts[i]
545
- let releaseQty = op.releaseQty
546
- let currProductWeight = op.productDetail.grossWeight * op.releaseQty
547
- let lastOrderPackage = currentConsignment.orderPackages[currentConsignment.orderPackages.length - 1]
548
-
549
- //push the product into last current consignment orderPackage
550
- if (currentConsignment.totalWeight + currProductWeight < maxConsignmentWeight) {
551
- if (lastOrderPackage) {
552
- lastOrderPackage.orderPackageItems.push({
553
- id: uuidv4(),
554
- name: OrderNoGenerator.orderPackageItem(),
555
- releaseQty: op.releaseQty,
556
- orderProducts: op,
557
- domain: releaseGood.domain,
558
- bizplace: releaseGood.bizplace,
559
- creator: releaseGood.creator,
560
- updater: releaseGood.updater,
561
- productDetail: op.productDetail
562
- })
563
- } else {
564
- await createPackageConsignment(currentConsignment, currProductWeight, releaseGood, op, releaseQty, user)
565
- }
566
- } else {
567
- //push the currentConsignment into list of all the consignments
568
- if (!totalConsignments.some(tc => tc.id === currentConsignment.id)) {
569
- totalConsignments.push(currentConsignment)
570
- }
571
-
572
- //find one order consignment to include the product
573
- availableConsignment = totalConsignments.find(tc => {
574
- tc.totalWeight += currProductWeight < maxConsignmentWeight
575
- })
576
-
577
- if (availableConsignment) {
578
- let lastOrderPackage = availableConsignment.orderPackages[currentConsignment.orderPackages.length - 1]
579
- lastOrderPackage.orderPackageItems.push({
580
- id: uuidv4(),
581
- name: OrderNoGenerator.orderPackageItem(),
582
- releaseQty: op.releaseQty,
583
- orderProduct: op,
584
- domain: releaseGood.domain,
585
- bizplace: releaseGood.bizplace,
586
- creator: releaseGood.creator,
587
- updater: releaseGood.updater,
588
- productDetail: op.productDetail
589
- })
590
-
591
- //update the totalConsignment data
592
- totalConsignments = totalConsignments.map(tc => {
593
- tc.id === availableConsignment.id ? availableConsignment : tc
594
- })
595
- } else {
596
- //create new consignment if no consignment available
597
- currentConsignment = createdNewConsignment()
598
- createPackageConsignment(currentConsignment, currProductWeight, releaseGood, op, releaseQty, user)
599
-
600
- totalConsignments.push(currentConsignment)
601
- }
602
- }
603
- }
604
- }
605
-
606
- const existingConsignment = totalConsignments.find(tc => tc.id === currentConsignment.id)
607
-
608
- if (!existingConsignment) {
609
- totalConsignments.push(currentConsignment)
610
- }
611
-
612
- let orderConsignment = totalConsignments
613
- let newReleaseGood = await createConsignmentWithMultipackage(tx, orderConsignment, releaseGood, user)
614
-
615
- return newReleaseGood
616
- } catch (e) {
617
- logger.error(e)
618
- }
619
- }
620
-
621
- export async function createConsignmentWithMultipackage(
622
- tx: EntityManager,
623
- orderConsList: OrderConsignment[],
624
- releaseGood: ReleaseGood,
625
- user: User
626
- ): Promise<any> {
627
- try {
628
- let newOrderPackages = []
629
- let newOrderConsignments: OrderConsignment[] = []
630
-
631
- for (const orderCons of orderConsList) {
632
- const savedOrderConsignment = await createOrderConsignment(tx, releaseGood, user, orderCons)
633
-
634
- for (const currentPackage of orderCons.orderPackages) {
635
- const savedOrderPackage = await createConsignmentPackage(
636
- tx,
637
- currentPackage,
638
- releaseGood,
639
- user,
640
- savedOrderConsignment
641
- )
642
- const orderPackageItems = await createConsignmentPackageItem(
643
- tx,
644
- currentPackage.orderPackageItems,
645
- savedOrderPackage,
646
- releaseGood
647
- )
648
-
649
- savedOrderPackage.orderPackageItems = orderPackageItems
650
- savedOrderConsignment.orderPackages.push(savedOrderPackage)
651
- newOrderPackages.push(savedOrderPackage)
652
- }
653
- newOrderConsignments.push(savedOrderConsignment)
654
- }
655
-
656
- releaseGood.orderConsignments = newOrderConsignments
657
- releaseGood.orderPackages = newOrderPackages
658
-
659
- return releaseGood
660
- } catch (error) {
661
- console.error('Error creating consignment with multiple packages:', error)
662
- throw error
663
- }
664
- }
665
-
666
- export async function createConsignmentPackage(
667
- tx: EntityManager,
668
- orderPackageData: any,
669
- releaseGood: ReleaseGood,
670
- user: User,
671
- orderConsignment: OrderConsignment
672
- ): Promise<OrderPackage> {
673
- try {
674
- const orderPackage: any = {
675
- id: uuidv4(),
676
- name: OrderNoGenerator.orderPackage(),
677
- packageId: null,
678
- trackingNo: null,
679
- transporter: null,
680
- airwayBill: releaseGood?.airwayBill,
681
- invoice: releaseGood?.invoice,
682
- status: ORDER_STATUS.PROCESSING,
683
- releaseGood,
684
- domain: releaseGood.domain,
685
- bizplace: releaseGood.bizplace,
686
- creator: user,
687
- updater: user,
688
- orderConsignment
689
- }
690
- return tx.getRepository(OrderPackage).save(orderPackage)
691
- } catch (e) {
692
- logger.error(`[lmd-create-order-package]: ${e} `)
693
- }
694
- }
695
-
696
- export async function createConsignmentPackageItem(
697
- tx: EntityManager,
698
- orderPackageItemsData: any[],
699
- savedOrderPackage: OrderPackage,
700
- releaseGood: ReleaseGood
701
- ): Promise<OrderPackageItem[]> {
702
- try {
703
- const orderPackageItems = orderPackageItemsData.map(opi => ({
704
- id: opi.id,
705
- name: opi.name,
706
- orderProduct: opi.orderProduct,
707
- status: ORDER_STATUS.PROCESSING,
708
- releaseQty: opi.releaseQty,
709
- orderPackage: savedOrderPackage,
710
- domain: releaseGood.domain,
711
- bizplace: releaseGood.bizplace,
712
- creator: releaseGood.creator,
713
- updater: releaseGood.updater,
714
- productDetail: opi.productDetail
715
- }))
716
-
717
- let savedOrderPackageItems: OrderPackageItem[] = await tx.getRepository(OrderPackageItem).save(orderPackageItems)
718
-
719
- return savedOrderPackageItems
720
- } catch (e) {
721
- logger.error(`[lmd-create-order-package]: ${e} `)
722
- }
723
- }
724
-
725
- export async function updatePackageId(packages, releaseGood, trxMgr) {
726
- try {
727
- const orderPackage = await trxMgr.getRepository(OrderPackage).findOne({
728
- where: { releaseGood: { id: releaseGood.id } },
729
- relations: ['releaseGood']
730
- })
731
- if (orderPackage) {
732
- await trxMgr.getRepository(OrderPackage).update(
733
- { name: orderPackage.name },
734
- {
735
- packageId: packages[0].packageId
736
- }
737
- )
738
- }
739
- } catch (e) {
740
- logger.error('unable-to-update-package-id-powrup')
741
- }
742
- }
@@ -2,29 +2,22 @@ import { EntityManager, getConnection, getRepository } from 'typeorm'
2
2
 
3
3
  import { logger } from '@things-factory/env'
4
4
  import { Domain, User } from '@things-factory/shell'
5
- import { config } from '@things-factory/env'
6
-
5
+ import { sleep } from '@things-factory/utils'
7
6
  import { WebspertController as BaseWebspertController } from '@things-factory/warehouse-base'
8
7
 
9
8
  import { ORDER_STATUS } from '../../constants'
10
- import { ReleaseGood, OrderProduct, OrderPackageItem, OrderPackage } from '../../service'
11
-
12
- import { sleep } from '@things-factory/utils'
9
+ import { OrderPackage, OrderPackageItem, OrderProduct, ReleaseGood } from '../../service'
13
10
  import { OrderNoGenerator } from '../../utils'
14
11
 
15
12
  export class WebspertController {
16
- public static async packOrder(
17
- releaseGood: ReleaseGood,
18
- domain: Domain,
19
- user: User
20
- ) {
13
+ public static async packOrder(releaseGood: ReleaseGood, domain: Domain, user: User) {
21
14
  await getConnection().transaction(async trx => {
22
15
  releaseGood = await trx.getRepository(ReleaseGood).findOne({ where: { id: releaseGood.id, domain } })
23
16
 
24
17
  // let releaseOrder = await trx.getRepository(ReleaseGood).findOne({ refNo: releaseGood.refNo, refNo2: releaseGood.refNo2, refNo3: releaseGood.refNo3, domain })
25
18
 
26
19
  // // only recall if releaseGood exists and pack Order fail
27
- if (!releaseGood && (releaseGood.packOrderFail == false)) return false
20
+ if (!releaseGood || releaseGood?.marketPackCallSuccess) return false
28
21
 
29
22
  try {
30
23
  let results = await BaseWebspertController.sendRequestToAPI(
@@ -39,10 +32,11 @@ export class WebspertController {
39
32
  throw new Error(results.statusText)
40
33
  }
41
34
 
42
- if (results?.data?.code === 200) {
35
+ if (results?.data?.code === 0) {
43
36
  await updatePackOrderStatus(trx, releaseGood)
44
37
  return true
45
38
  }
39
+ throw results?.data
46
40
  } catch (error) {
47
41
  logger.error(`webspert-controller[packOrder]: ${error}`)
48
42
  await updatePackOrderStatus(trx, releaseGood, true)
@@ -51,20 +45,22 @@ export class WebspertController {
51
45
  })
52
46
  }
53
47
 
54
- public static async fetchPackageAndDocument(
55
- releaseGood: ReleaseGood,
56
- domain: Domain,
57
- user: User
58
- ) {
48
+ public static async fetchPackageAndDocument(releaseGood: ReleaseGood, domain: Domain, user: User) {
59
49
  await getConnection().transaction(async trx => {
60
50
  let roUpdateFields: Partial<ReleaseGood> = null
61
51
 
62
52
  let releaseOrder = await trx.getRepository(ReleaseGood).findOne({
63
53
  where: { id: releaseGood.id, domain },
64
- relations: ['bizplace', 'domain', 'orderProducts', 'orderProducts.productDetail', 'orderProducts.productDetail.product']
54
+ relations: [
55
+ 'bizplace',
56
+ 'domain',
57
+ 'orderProducts',
58
+ 'orderProducts.productDetail',
59
+ 'orderProducts.productDetail.product'
60
+ ]
65
61
  })
66
62
 
67
- if (releaseOrder) {
63
+ if (releaseOrder && releaseOrder.marketPackCallSuccess) {
68
64
  try {
69
65
  // capture update fields
70
66
  roUpdateFields = {
@@ -103,13 +99,12 @@ export class WebspertController {
103
99
  releaseGood: ReleaseGood,
104
100
  orderPackages: OrderPackage[],
105
101
  domain: Domain,
106
- user: User,
102
+ user: User
107
103
  ) {
108
104
  if (orderPackages == null || orderPackages.length == 0) {
109
105
  if (releaseGood) {
110
106
  orderPackages = await getRepository(OrderPackage).find({ where: { releaseGood } })
111
- }
112
- else {
107
+ } else {
113
108
  console.error('webspert-controller[initiateShipment]: releaseGood is not found')
114
109
  return false
115
110
  }
@@ -143,18 +138,13 @@ export class WebspertController {
143
138
  })
144
139
  }
145
140
 
146
- public static async triggerOrderProcesses(
147
- releaseGood: ReleaseGood,
148
- domain: Domain,
149
- user: User,
150
- triggerRTS: false
151
- ) {
141
+ public static async triggerOrderProcesses(releaseGood: ReleaseGood, domain: Domain, user: User, triggerRTS: false) {
152
142
  try {
153
143
  const waitTime = 200
154
144
 
155
145
  releaseGood = await getRepository(ReleaseGood).findOne({ where: { id: releaseGood.id, domain } })
156
146
  // // only recall if fail
157
- if (releaseGood.packOrderFail == false || releaseGood.packOrderFail === null) {
147
+ if (!releaseGood?.marketPackCallSuccess) {
158
148
  await this.packOrder(releaseGood, domain, user)
159
149
  await sleep(waitTime)
160
150
  }
@@ -167,7 +157,6 @@ export class WebspertController {
167
157
  }
168
158
 
169
159
  return true
170
-
171
160
  } catch (error) {
172
161
  logger.error(error)
173
162
  }
@@ -180,16 +169,17 @@ async function updateRO(releaseGoodId, roUpdateFields, trxMgr) {
180
169
  }
181
170
  }
182
171
 
183
- async function generatePackage(
184
- releaseGood: ReleaseGood,
185
- packages: any[],
186
- user: User,
187
- trxMgr: EntityManager
188
- ) {
172
+ async function generatePackage(releaseGood: ReleaseGood, packages: any[], user: User, trxMgr: EntityManager) {
189
173
  if (packages.length > 0) {
190
174
  packages = await Promise.all(
191
175
  packages.map(async pkg => {
192
- const [items, awbUrl, packageId, trackingNo, transporter] = [pkg.products, pkg.awb_link, pkg.package_id, pkg.tracking_number, pkg.transporter]
176
+ const [items, awbUrl, packageId, trackingNo, transporter] = [
177
+ pkg.products,
178
+ pkg.awb_link,
179
+ pkg.package_id,
180
+ pkg.tracking_number,
181
+ pkg.transporter
182
+ ]
193
183
 
194
184
  if (items.length < 1) {
195
185
  throw new Error('No items found in package')
@@ -235,12 +225,16 @@ async function generatePackage(
235
225
  if (!sku) {
236
226
  throw new Error(`universalIdentifier missing`)
237
227
  }
238
- const matchedOrderPackageItem: OrderPackageItem = orderPackageItems.find(op => op.productDetail.product.sku == sku && op.releaseQty == qty)
228
+ const matchedOrderPackageItem: OrderPackageItem = orderPackageItems.find(
229
+ op => op.productDetail.product.sku == sku && op.releaseQty == qty
230
+ )
239
231
 
240
232
  if (matchedOrderPackageItem) {
241
233
  return matchedOrderPackageItem
242
234
  } else {
243
- const matchedOrderProduct: OrderProduct = releaseGood.orderProducts.find(op => op.productDetail.product.sku == sku)
235
+ const matchedOrderProduct: OrderProduct = releaseGood.orderProducts.find(
236
+ op => op.productDetail.product.sku == sku
237
+ )
244
238
  return {
245
239
  name: OrderNoGenerator.orderPackageItem(),
246
240
  orderProduct: matchedOrderProduct,
@@ -268,20 +262,32 @@ async function generatePackage(
268
262
  if (packages.length == packages.filter(pkg => pkg.packageId).length) {
269
263
  return {
270
264
  packageId: packages[0].packageId,
271
- marketPackCallSuccess: new Date(),
265
+ packOrderFail: false,
272
266
  lastMarketPackCall: new Date(),
273
267
  updatedAt: new Date()
274
268
  }
275
269
  } else {
276
270
  return {
277
271
  lastMarketPackCall: new Date(),
278
- updatedAt: new Date()
272
+ packOrderFail: true,
273
+ updatedAt: new Date(),
279
274
  }
280
275
  }
281
276
  }
282
277
  }
283
278
 
284
279
  async function updatePackOrderStatus(trx, releaseOrder, status: Boolean = false) {
285
- await trx.getRepository(ReleaseGood).update({ id: releaseOrder.id }, { lastMarketPackCall: new Date(), packOrderFail: status })
280
+ let updateValues: any = {
281
+ lastMarketPackCall: new Date()
282
+ }
283
+
284
+ if (status == false) {
285
+ updateValues = {
286
+ ...updateValues,
287
+ marketPackCallSuccess: new Date()
288
+ }
289
+ }
290
+
291
+ await trx.getRepository(ReleaseGood).update({ id: releaseOrder.id }, updateValues)
286
292
  return true
287
- }
293
+ }