@things-factory/sales-base 4.3.81 → 4.3.82

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 (171) hide show
  1. package/dist-server/service/arrival-notice/arrival-notice-mutation.js +6 -5
  2. package/dist-server/service/arrival-notice/arrival-notice-mutation.js.map +1 -1
  3. package/dist-server/service/arrival-notice/arrival-notice-query.js.map +1 -1
  4. package/dist-server/service/arrival-notice/arrival-notice-types.js.map +1 -1
  5. package/dist-server/service/arrival-notice/arrival-notice.js +5 -0
  6. package/dist-server/service/arrival-notice/arrival-notice.js.map +1 -1
  7. package/dist-server/service/claim/claim-mutation.js.map +1 -1
  8. package/dist-server/service/claim/claim-query.js.map +1 -1
  9. package/dist-server/service/claim/claim-types.js.map +1 -1
  10. package/dist-server/service/claim/claim.js.map +1 -1
  11. package/dist-server/service/claim-detail/claim-detail-mutation.js.map +1 -1
  12. package/dist-server/service/claim-detail/claim-detail-query.js.map +1 -1
  13. package/dist-server/service/claim-detail/claim-detail-types.js.map +1 -1
  14. package/dist-server/service/claim-detail/claim-detail.js.map +1 -1
  15. package/dist-server/service/claim-order/claim-order-mutation.js.map +1 -1
  16. package/dist-server/service/claim-order/claim-order-query.js.map +1 -1
  17. package/dist-server/service/claim-order/claim-order-types.js.map +1 -1
  18. package/dist-server/service/claim-order/claim-order.js.map +1 -1
  19. package/dist-server/service/collection-order/collection-order-mutation.js.map +1 -1
  20. package/dist-server/service/collection-order/collection-order-query.js.map +1 -1
  21. package/dist-server/service/collection-order/collection-order-types.js.map +1 -1
  22. package/dist-server/service/collection-order/collection-order.js.map +1 -1
  23. package/dist-server/service/delivery-order/delivery-order-mutation.js.map +1 -1
  24. package/dist-server/service/delivery-order/delivery-order-query.js.map +1 -1
  25. package/dist-server/service/delivery-order/delivery-order-types.js.map +1 -1
  26. package/dist-server/service/delivery-order/delivery-order.js.map +1 -1
  27. package/dist-server/service/draft-release-good/draft-release-good-mutation.js +3 -8
  28. package/dist-server/service/draft-release-good/draft-release-good-mutation.js.map +1 -1
  29. package/dist-server/service/draft-release-good/draft-release-good-query.js +4 -7
  30. package/dist-server/service/draft-release-good/draft-release-good-query.js.map +1 -1
  31. package/dist-server/service/draft-release-good/draft-release-good-type.js.map +1 -1
  32. package/dist-server/service/draft-release-good/draft-release-good.js +5 -0
  33. package/dist-server/service/draft-release-good/draft-release-good.js.map +1 -1
  34. package/dist-server/service/goods-receival-note/goods-receival-note-mutation.js.map +1 -1
  35. package/dist-server/service/goods-receival-note/goods-receival-note-query.js.map +1 -1
  36. package/dist-server/service/goods-receival-note/goods-receival-note-types.js.map +1 -1
  37. package/dist-server/service/goods-receival-note/goods-receival-note.js.map +1 -1
  38. package/dist-server/service/inventory-check/inventory-check-mutation.js.map +1 -1
  39. package/dist-server/service/inventory-check/inventory-check-query.js.map +1 -1
  40. package/dist-server/service/inventory-check/inventory-check-types.js.map +1 -1
  41. package/dist-server/service/inventory-check/inventory-check.js.map +1 -1
  42. package/dist-server/service/invoice/invoice-mutation.js.map +1 -1
  43. package/dist-server/service/invoice/invoice-query.js.map +1 -1
  44. package/dist-server/service/invoice/invoice-types.js.map +1 -1
  45. package/dist-server/service/invoice/invoice.js.map +1 -1
  46. package/dist-server/service/invoice-product/invoice-product-mutation.js.map +1 -1
  47. package/dist-server/service/invoice-product/invoice-product-query.js.map +1 -1
  48. package/dist-server/service/invoice-product/invoice-product-types.js.map +1 -1
  49. package/dist-server/service/invoice-product/invoice-product.js +8 -3
  50. package/dist-server/service/invoice-product/invoice-product.js.map +1 -1
  51. package/dist-server/service/job-sheet/job-sheet-mutation.js.map +1 -1
  52. package/dist-server/service/job-sheet/job-sheet-query.js.map +1 -1
  53. package/dist-server/service/job-sheet/job-sheet-types.js.map +1 -1
  54. package/dist-server/service/job-sheet/job-sheet.js.map +1 -1
  55. package/dist-server/service/manifest/manifest-mutation.js.map +1 -1
  56. package/dist-server/service/manifest/manifest-query.js.map +1 -1
  57. package/dist-server/service/manifest/manifest-type.js.map +1 -1
  58. package/dist-server/service/manifest/manifest.js.map +1 -1
  59. package/dist-server/service/order-inventory/order-inventory-mutation.js.map +1 -1
  60. package/dist-server/service/order-inventory/order-inventory-query.js +2 -1
  61. package/dist-server/service/order-inventory/order-inventory-query.js.map +1 -1
  62. package/dist-server/service/order-inventory/order-inventory-types.js +18 -10
  63. package/dist-server/service/order-inventory/order-inventory-types.js.map +1 -1
  64. package/dist-server/service/order-inventory/order-inventory.js +12 -3
  65. package/dist-server/service/order-inventory/order-inventory.js.map +1 -1
  66. package/dist-server/service/order-product/order-product-mutation.js.map +1 -1
  67. package/dist-server/service/order-product/order-product-query.js +1 -0
  68. package/dist-server/service/order-product/order-product-query.js.map +1 -1
  69. package/dist-server/service/order-product/order-product-types.js +18 -10
  70. package/dist-server/service/order-product/order-product-types.js.map +1 -1
  71. package/dist-server/service/order-product/order-product.js.map +1 -1
  72. package/dist-server/service/order-tote/order-tote-mutation.js.map +1 -1
  73. package/dist-server/service/order-tote/order-tote-query.js.map +1 -1
  74. package/dist-server/service/order-tote/order-tote-types.js.map +1 -1
  75. package/dist-server/service/order-tote/order-tote.js.map +1 -1
  76. package/dist-server/service/order-tote-item/order-tote-item-mutation.js.map +1 -1
  77. package/dist-server/service/order-tote-item/order-tote-item-query.js.map +1 -1
  78. package/dist-server/service/order-tote-item/order-tote-item-types.js.map +1 -1
  79. package/dist-server/service/order-tote-item/order-tote-item.js.map +1 -1
  80. package/dist-server/service/order-tote-seal/order-tote-seal-mutation.js.map +1 -1
  81. package/dist-server/service/order-tote-seal/order-tote-seal-query.js.map +1 -1
  82. package/dist-server/service/order-tote-seal/order-tote-seal-types.js.map +1 -1
  83. package/dist-server/service/order-tote-seal/order-tote-seal.js.map +1 -1
  84. package/dist-server/service/order-vas/order-vas-mutation.js.map +1 -1
  85. package/dist-server/service/order-vas/order-vas-query.js.map +1 -1
  86. package/dist-server/service/order-vas/order-vas-types.js.map +1 -1
  87. package/dist-server/service/order-vas/order-vas.js +9 -3
  88. package/dist-server/service/order-vas/order-vas.js.map +1 -1
  89. package/dist-server/service/others/other-query.js +17 -21
  90. package/dist-server/service/others/other-query.js.map +1 -1
  91. package/dist-server/service/others/other-types.js +4 -0
  92. package/dist-server/service/others/other-types.js.map +1 -1
  93. package/dist-server/service/purchase-order/purchase-order-mutation.js +10 -2
  94. package/dist-server/service/purchase-order/purchase-order-mutation.js.map +1 -1
  95. package/dist-server/service/purchase-order/purchase-order-query.js +1 -0
  96. package/dist-server/service/purchase-order/purchase-order-query.js.map +1 -1
  97. package/dist-server/service/purchase-order/purchase-order-types.js.map +1 -1
  98. package/dist-server/service/purchase-order/purchase-order.js.map +1 -1
  99. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-mutation.js.map +1 -1
  100. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-query.js.map +1 -1
  101. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge-types.js.map +1 -1
  102. package/dist-server/service/purchase-order-other-charge/purchase-order-other-charge.js.map +1 -1
  103. package/dist-server/service/release-good/release-good-mutation.js +187 -49
  104. package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
  105. package/dist-server/service/release-good/release-good-query.js +4 -6
  106. package/dist-server/service/release-good/release-good-query.js.map +1 -1
  107. package/dist-server/service/release-good/release-good-types.js +8 -4
  108. package/dist-server/service/release-good/release-good-types.js.map +1 -1
  109. package/dist-server/service/release-good/release-good.js +5 -0
  110. package/dist-server/service/release-good/release-good.js.map +1 -1
  111. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-mutation.js.map +1 -1
  112. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-query.js.map +1 -1
  113. package/dist-server/service/retail-replenishment-order/retail-replenishment-order-types.js.map +1 -1
  114. package/dist-server/service/retail-replenishment-order/retail-replenishment-order.js.map +1 -1
  115. package/dist-server/service/return-order/return-order-mutation.js +2 -0
  116. package/dist-server/service/return-order/return-order-mutation.js.map +1 -1
  117. package/dist-server/service/return-order/return-order-query.js.map +1 -1
  118. package/dist-server/service/return-order/return-order-types.js.map +1 -1
  119. package/dist-server/service/return-order/return-order.js.map +1 -1
  120. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-mutation.js.map +1 -1
  121. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-query.js.map +1 -1
  122. package/dist-server/service/reverse-kitting-order/reverse-kitting-order-type.js.map +1 -1
  123. package/dist-server/service/reverse-kitting-order/reverse-kitting-order.js.map +1 -1
  124. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.js.map +1 -1
  125. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-query.js.map +1 -1
  126. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.js.map +1 -1
  127. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.js +8 -3
  128. package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.js.map +1 -1
  129. package/dist-server/service/shipping-order/shipping-order-mutation.js.map +1 -1
  130. package/dist-server/service/shipping-order/shipping-order-query.js.map +1 -1
  131. package/dist-server/service/shipping-order/shipping-order-types.js.map +1 -1
  132. package/dist-server/service/shipping-order/shipping-order.js.map +1 -1
  133. package/dist-server/service/transfer-order/transfer-order-mutation.js.map +1 -1
  134. package/dist-server/service/transfer-order/transfer-order-query.js.map +1 -1
  135. package/dist-server/service/transfer-order/transfer-order-types.js.map +1 -1
  136. package/dist-server/service/transfer-order/transfer-order.js.map +1 -1
  137. package/dist-server/service/vas/vas-mutation.js.map +1 -1
  138. package/dist-server/service/vas/vas-query.js.map +1 -1
  139. package/dist-server/service/vas/vas-types.js.map +1 -1
  140. package/dist-server/service/vas/vas.js.map +1 -1
  141. package/dist-server/service/vas-order/vas-order-mutation.js.map +1 -1
  142. package/dist-server/service/vas-order/vas-order-query.js.map +1 -1
  143. package/dist-server/service/vas-order/vas-order-types.js.map +1 -1
  144. package/dist-server/service/vas-order/vas-order.js.map +1 -1
  145. package/dist-server/utils/inventory-util.js +33 -102
  146. package/dist-server/utils/inventory-util.js.map +1 -1
  147. package/package.json +13 -13
  148. package/server/service/arrival-notice/arrival-notice-mutation.ts +6 -3
  149. package/server/service/arrival-notice/arrival-notice.ts +4 -0
  150. package/server/service/draft-release-good/draft-release-good-mutation.ts +10 -12
  151. package/server/service/draft-release-good/draft-release-good-query.ts +5 -5
  152. package/server/service/draft-release-good/draft-release-good.ts +4 -0
  153. package/server/service/invoice-product/invoice-product.ts +5 -1
  154. package/server/service/order-inventory/order-inventory-query.ts +2 -0
  155. package/server/service/order-inventory/order-inventory-types.ts +6 -0
  156. package/server/service/order-inventory/order-inventory.ts +8 -1
  157. package/server/service/order-product/order-product-query.ts +1 -0
  158. package/server/service/order-product/order-product-types.ts +6 -0
  159. package/server/service/order-vas/order-vas.ts +6 -1
  160. package/server/service/others/other-query.ts +30 -31
  161. package/server/service/others/other-types.ts +3 -0
  162. package/server/service/purchase-order/purchase-order-mutation.ts +10 -1
  163. package/server/service/purchase-order/purchase-order-query.ts +1 -0
  164. package/server/service/release-good/release-good-mutation.ts +221 -50
  165. package/server/service/release-good/release-good-query.ts +4 -7
  166. package/server/service/release-good/release-good-types.ts +4 -3
  167. package/server/service/release-good/release-good.ts +8 -6
  168. package/server/service/return-order/return-order-mutation.ts +3 -1
  169. package/server/service/return-order/return-order-types.ts +1 -0
  170. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.ts +5 -1
  171. package/server/utils/inventory-util.ts +67 -147
@@ -3,7 +3,7 @@ import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
3
3
  import { EntityManager, getConnection, getRepository, In, Not, Repository } from 'typeorm'
4
4
 
5
5
  import { Attachment, createAttachments } from '@things-factory/attachment-base'
6
- import { Partner, Role, User } from '@things-factory/auth-base'
6
+ import { ApplicationType, Partner, Role, User } from '@things-factory/auth-base'
7
7
  import {
8
8
  Bizplace,
9
9
  getDomainUsers,
@@ -14,10 +14,9 @@ import {
14
14
  import { generateId } from '@things-factory/id-rule-base'
15
15
  import { MarketplaceStore } from '@things-factory/integration-marketplace'
16
16
  import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
17
- import { Sftp } from '@things-factory/integration-sftp'
18
17
  import { MarketplaceOrder, MarketplaceProductVariation } from '@things-factory/marketplace-base'
19
18
  // import { sendNotification } from '@things-factory/notification'
20
- import { Product, ProductBundleSetting } from '@things-factory/product-base'
19
+ import { Product, ProductBundleSetting, ProductDetail } from '@things-factory/product-base'
21
20
  import { PartnerSetting, Setting } from '@things-factory/setting-base'
22
21
  import { Domain } from '@things-factory/shell'
23
22
  import { Inventory } from '@things-factory/warehouse-base'
@@ -485,20 +484,18 @@ export async function generateReleaseGoodFunction(
485
484
  await InventoryUtil.validateWarehousePartnersProductsQuantity(domain, bizplace, orderInventories, context, tx)
486
485
  /** End Validate Release Order Product Quantity Section */
487
486
 
488
- if (releaseGood.type == 'b2c') {
489
- const sellercraft: Sellercraft = await tx
490
- .getRepository(Sellercraft)
491
- .findOne({ domain: bizplace.domain, status: SellercraftStatus.ACTIVE })
487
+ const orderSource: string = releaseGood.source
488
+ switch (orderSource) {
489
+ case ApplicationType.SELLERCRAFT:
490
+ const sellercraft: Sellercraft = await tx
491
+ .getRepository(Sellercraft)
492
+ .findOne({ domain: bizplace.domain, status: SellercraftStatus.ACTIVE })
492
493
 
493
- let customerAvailableSftp: Sftp = await tx.getRepository(Sftp).findOne({
494
- where: { domain: bizplace.domain }
495
- })
496
-
497
- if (sellercraft) {
498
494
  const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
499
495
  await sellercraftCtrl.checkExistingReleaseGood(sellercraft, releaseGood)
500
- } else if (customerAvailableSftp) {
501
- } else {
496
+ break
497
+
498
+ case ApplicationType.MMS:
502
499
  const refNo: string = releaseGood.refNo
503
500
  const foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
504
501
  where: {
@@ -532,9 +529,62 @@ export async function generateReleaseGoodFunction(
532
529
  throw new Error('Existing release order found')
533
530
  }
534
531
  }
535
- }
532
+ break
533
+
534
+ default:
535
+ break
536
536
  }
537
537
 
538
+ // if (releaseGood.type == 'b2c') {
539
+ // const sellercraft: Sellercraft = await tx
540
+ // .getRepository(Sellercraft)
541
+ // .findOne({ domain: bizplace.domain, status: SellercraftStatus.ACTIVE })
542
+
543
+ // let customerAvailableSftp: Sftp = await tx.getRepository(Sftp).findOne({
544
+ // where: { domain: bizplace.domain }
545
+ // })
546
+
547
+ // if (sellercraft) {
548
+ // const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
549
+ // await sellercraftCtrl.checkExistingReleaseGood(sellercraft, releaseGood)
550
+ // } else if (customerAvailableSftp) {
551
+ // } else {
552
+ // const refNo: string = releaseGood.refNo
553
+ // const foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
554
+ // where: {
555
+ // domain: warehouseDomain,
556
+ // refNo,
557
+ // status: Not(In([ORDER_STATUS.CANCELLED, ORDER_STATUS.PENDING_CANCEL]))
558
+ // },
559
+ // relations: ['bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain']
560
+ // })
561
+
562
+ // if (foundReleaseGood) {
563
+ // const customerCompanyDomain: Domain = foundReleaseGood.bizplace.company.domain
564
+ // const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
565
+ // where: { orderNo: refNo, domain: customerCompanyDomain }
566
+ // })
567
+
568
+ // // Need to restructure the validation
569
+ // if (marketplaceOrder?.isSplitted) {
570
+ // const refNo2: string = releaseGood.refNo2
571
+ // const foundSplittedReleaseGood = await tx.getRepository(ReleaseGood).findOne({
572
+ // where: {
573
+ // domain: warehouseDomain,
574
+ // refNo2,
575
+ // status: Not(In([ORDER_STATUS.CANCELLED, ORDER_STATUS.PENDING_CANCEL]))
576
+ // },
577
+ // relations: ['bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain']
578
+ // })
579
+
580
+ // if (foundSplittedReleaseGood) throw new Error('Existing release order found')
581
+ // } else {
582
+ // throw new Error('Existing release order found')
583
+ // }
584
+ // }
585
+ // }
586
+ // }
587
+
538
588
  let newReleaseGood: ReleaseGood = new ReleaseGood()
539
589
 
540
590
  /** Generate Shipping Order */
@@ -672,7 +722,7 @@ export async function generateReleaseGoodFunction(
672
722
 
673
723
  const pbSettings: ProductBundleSetting[] = await tx.getRepository(ProductBundleSetting).find({
674
724
  where: { productBundle: oi.product.id },
675
- relations: ['product', 'productBundle']
725
+ relations: ['product', 'productBundle', 'productDetail']
676
726
  })
677
727
 
678
728
  pbSettings.forEach(pbs => {
@@ -686,6 +736,9 @@ export async function generateReleaseGoodFunction(
686
736
  id: pbs.product.id,
687
737
  name: pbs.product.name,
688
738
  groupType: PRODUCT_GROUP_TYPE.SINGLE
739
+ },
740
+ productDetail: {
741
+ id: pbs.productDetail.id
689
742
  }
690
743
  }
691
744
  splitBundleOIs.push(splitOI)
@@ -700,6 +753,10 @@ export async function generateReleaseGoodFunction(
700
753
  newReleaseGood = await tx.getRepository(ReleaseGood).save(newReleaseGood)
701
754
 
702
755
  for (let oi of orderInventories) {
756
+ let productDetail: any = await tx
757
+ .getRepository(ProductDetail)
758
+ .findOne(oi.productDetail.id, { relations: ['product'] })
759
+
703
760
  let newOrderInv: OrderInventory = Object.assign({}, oi)
704
761
  newOrderInv = {
705
762
  ...newOrderInv,
@@ -708,7 +765,8 @@ export async function generateReleaseGoodFunction(
708
765
  status: ORDER_INVENTORY_STATUS.PENDING,
709
766
  name: OrderNoGenerator.orderInventory(),
710
767
  releaseGood: newReleaseGood,
711
- product: await tx.getRepository(Product).findOne(oi.product.id),
768
+ product: productDetail.product,
769
+ productDetail,
712
770
  creator: user,
713
771
  updater: user
714
772
  }
@@ -746,9 +804,9 @@ export async function generateReleaseGoodFunction(
746
804
  }
747
805
 
748
806
  let assignedOrderInventories: OrderInventory[] = await InventoryUtil.autoAssignInventoryForRelease(
749
- newOrderInv.product,
750
807
  oi,
751
- oi.packingType,
808
+ productDetail.product,
809
+ productDetail,
752
810
  locationSortingRules,
753
811
  bizplace,
754
812
  warehouseDomain,
@@ -887,16 +945,28 @@ export async function confirmReleaseGood(name: string, context: any, tx?: Entity
887
945
  let foundOVs: OrderVas[] = foundReleaseGood.orderVass
888
946
  let customerBizplace: Bizplace = foundReleaseGood.bizplace
889
947
  const companyDomain: Domain = customerBizplace?.company.domain
890
- const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
891
- where: { domain: foundReleaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE },
892
- relations: ['domain']
893
- })
894
948
 
895
- if (foundReleaseGood.type == 'b2c') {
896
- if (sellercraft) {
949
+ const orderSource: string = foundReleaseGood.source
950
+ switch (orderSource) {
951
+ case ApplicationType.SELLERCRAFT:
952
+ const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
953
+ where: { domain: foundReleaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE },
954
+ relations: ['domain']
955
+ })
956
+
897
957
  const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
898
- foundReleaseGood = await sellercraftCtrl.packOrder(sellercraft, { ...foundReleaseGood, orderProducts: foundOPs })
899
- } else {
958
+ if (foundReleaseGood.type == 'b2c') {
959
+ foundReleaseGood = await sellercraftCtrl.packOrder(sellercraft, {
960
+ ...foundReleaseGood,
961
+ orderProducts: foundOPs
962
+ })
963
+ } else if (foundReleaseGood.type == 'b2b') {
964
+ await sellercraftCtrl.updateSellercraftStock(sellercraft, foundOPs, 'CONFIRM_ORDER')
965
+ }
966
+
967
+ break
968
+
969
+ case ApplicationType.MMS:
900
970
  // find for any existing marketplace store connections
901
971
  let marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
902
972
  where: { domain: companyDomain, status: 'ACTIVE' },
@@ -959,16 +1029,94 @@ export async function confirmReleaseGood(name: string, context: any, tx?: Entity
959
1029
  const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
960
1030
  await ecommerceCtrl.updateProductVariationStock(marketplaceStores, productIds, companyDomain)
961
1031
  }
962
- }
963
- }
1032
+ break
964
1033
 
965
- if (foundReleaseGood.type == 'b2b') {
966
- if (sellercraft) {
967
- const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
968
- await sellercraftCtrl.updateSellercraftStock(sellercraft, foundOPs, 'CONFIRM_ORDER')
969
- }
1034
+ default:
1035
+ break
970
1036
  }
971
1037
 
1038
+ // const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
1039
+ // where: { domain: foundReleaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE },
1040
+ // relations: ['domain']
1041
+ // })
1042
+
1043
+ // if (foundReleaseGood.type == 'b2c') {
1044
+ // if (sellercraft) {
1045
+ // const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
1046
+ // foundReleaseGood = await sellercraftCtrl.packOrder(sellercraft, { ...foundReleaseGood, orderProducts: foundOPs })
1047
+ // } else {
1048
+ // // find for any existing marketplace store connections
1049
+ // let marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
1050
+ // where: { domain: companyDomain, status: 'ACTIVE' },
1051
+ // relations: ['marketplaceDistributors']
1052
+ // })
1053
+
1054
+ // const foundMarketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
1055
+ // where: { domain: companyDomain, orderNo: foundReleaseGood.refNo },
1056
+ // relations: ['marketplaceStore']
1057
+ // })
1058
+
1059
+ // let matchedMarketplaceStore: MarketplaceStore
1060
+ // if (foundMarketplaceOrder) {
1061
+ // matchedMarketplaceStore = marketplaceStores.filter(
1062
+ // marketplaceStore => marketplaceStore.id == foundMarketplaceOrder.marketplaceStore.id
1063
+ // )[0]
1064
+ // }
1065
+
1066
+ // let combinedOrderInventories: any[] = foundOIs.map(oi => {
1067
+ // return {
1068
+ // sku: oi.product.sku,
1069
+ // releaseQty: oi.releaseQty
1070
+ // }
1071
+ // })
1072
+
1073
+ // if (foundBundleInfo?.length) {
1074
+ // foundBundleInfo.map(bundle => {
1075
+ // combinedOrderInventories.push({
1076
+ // sku: bundle.sku,
1077
+ // releaseQty: bundle.releaseQty
1078
+ // })
1079
+ // })
1080
+ // }
1081
+
1082
+ // for (let oi of combinedOrderInventories) {
1083
+ // let foundMarketplaceProductVariations: MarketplaceProductVariation[] = await tx
1084
+ // .getRepository(MarketplaceProductVariation)
1085
+ // .find({
1086
+ // where: { domain: companyDomain, sku: oi.sku },
1087
+ // relations: ['marketplaceProduct', 'marketplaceProduct.marketplaceStore']
1088
+ // })
1089
+
1090
+ // if (foundMarketplaceProductVariations) {
1091
+ // await Promise.all(
1092
+ // foundMarketplaceProductVariations.map(async variation => {
1093
+ // if (variation.marketplaceProduct.marketplaceStore.reserveEnabled) {
1094
+ // variation.reserveQty -= oi.releaseQty
1095
+ // }
1096
+
1097
+ // await tx.getRepository(MarketplaceProductVariation).save(variation)
1098
+ // })
1099
+ // )
1100
+ // }
1101
+ // }
1102
+
1103
+ // if (marketplaceStores?.length && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
1104
+ // marketplaceStores = marketplaceStores.filter(marketplaceStore => marketplaceStore.isAutoUpdateStockQty)
1105
+ // let productIds: string[] = foundOIs.map(oi => oi.product.id)
1106
+ // productIds = Array.from(new Set([...productIds]))
1107
+ // const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
1108
+ // await ecommerceCtrl.updateProductVariationStock(marketplaceStores, productIds, companyDomain)
1109
+ // }
1110
+ // }
1111
+ // }
1112
+
1113
+ // if (foundReleaseGood.type == 'b2b') {
1114
+ // if (sellercraft) {
1115
+ // const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
1116
+ // await sellercraftCtrl.updateSellercraftStock(sellercraft, foundOPs, 'CONFIRM_ORDER')
1117
+ // }
1118
+ // }
1119
+
972
1120
  // 1. RO Status change (PENDING => PENDING_RECEIVE)
973
1121
  const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).save({
974
1122
  ...foundReleaseGood,
@@ -1183,15 +1331,32 @@ export async function rejectReleaseGood(
1183
1331
  }
1184
1332
 
1185
1333
  if (foundOPs && foundOPs.length) {
1186
- const sellercraft: Sellercraft = await tx
1187
- .getRepository(Sellercraft)
1188
- .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
1334
+ const orderSource: string = releaseGood.source
1335
+ switch (orderSource) {
1336
+ case ApplicationType.SELLERCRAFT:
1337
+ const sellercraft: Sellercraft = await tx
1338
+ .getRepository(Sellercraft)
1339
+ .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
1340
+
1341
+ if (sellercraft) {
1342
+ const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
1343
+ await sellercraftCtrl.updateSellercraftStock(sellercraft, foundOPs, 'REJECT_ORDER')
1344
+ }
1345
+ break
1189
1346
 
1190
- if (sellercraft) {
1191
- const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
1192
- await sellercraftCtrl.updateSellercraftStock(sellercraft, foundOPs, 'REJECT_ORDER')
1347
+ default:
1348
+ break
1193
1349
  }
1194
1350
 
1351
+ // const sellercraft: Sellercraft = await tx
1352
+ // .getRepository(Sellercraft)
1353
+ // .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
1354
+
1355
+ // if (sellercraft) {
1356
+ // const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
1357
+ // await sellercraftCtrl.updateSellercraftStock(sellercraft, foundOPs, 'REJECT_ORDER')
1358
+ // }
1359
+
1195
1360
  await tx.getRepository(OrderProduct).save(
1196
1361
  await Promise.all(
1197
1362
  foundOPs.map(async (op: OrderProduct) => {
@@ -1288,6 +1453,7 @@ export async function bulkGenerateReleaseGood(
1288
1453
  phone1: releaseGood?.phone1 || null,
1289
1454
  phone2: releaseGood?.phone2 || null,
1290
1455
  email: releaseGood?.email || null,
1456
+ source: releaseGood?.source || null,
1291
1457
  airwayBill: releaseGood?.airwayBill,
1292
1458
  refNo: releaseGood.refNo,
1293
1459
  refNo2: releaseGood.refNo2,
@@ -1296,8 +1462,8 @@ export async function bulkGenerateReleaseGood(
1296
1462
  ownTransport: releaseGood?.ownTransport || false,
1297
1463
  orderMethod: ORDER_METHOD.SELECT_BY_PRODUCT,
1298
1464
  status: ORDER_STATUS.PENDING,
1299
- creator: user,
1300
- updater: user
1465
+ creator: releaseGood?.creator || user,
1466
+ updater: releaseGood?.updater || user
1301
1467
  }
1302
1468
 
1303
1469
  newReleaseGood = await tx.getRepository(ReleaseGood).save(newReleaseGood)
@@ -1339,12 +1505,17 @@ export async function bulkGenerateReleaseGood(
1339
1505
  }
1340
1506
  }
1341
1507
 
1342
- const product: Product = await tx.getRepository(Product).findOne(oi.productId)
1508
+ let productDetail = oi.orderProduct?.productDetail
1509
+ let product = oi.orderProduct?.product
1510
+ if (!productDetail) {
1511
+ productDetail = await tx.getRepository(ProductDetail).findOne(oi.productDetailId, { relations: ['product'] })
1512
+ product = productDetail.product
1513
+ }
1343
1514
 
1344
1515
  let assignedResult = await InventoryUtil.autoAssignInventoryForRelease(
1345
- product,
1346
1516
  oi,
1347
- oi.packingType,
1517
+ product,
1518
+ productDetail,
1348
1519
  locationSortingRules,
1349
1520
  bizplace,
1350
1521
  warehouseDomain,
@@ -1370,8 +1541,8 @@ export async function bulkGenerateReleaseGood(
1370
1541
  status: ORDER_INVENTORY_STATUS.PENDING,
1371
1542
  name: OrderNoGenerator.orderInventory(),
1372
1543
  releaseGood: newReleaseGood,
1373
- creator: user,
1374
- updater: user
1544
+ creator: newReleaseGood?.creator || user,
1545
+ updater: newReleaseGood?.updater || user
1375
1546
  }
1376
1547
 
1377
1548
  let newOrderProduct: Partial<OrderProduct>
@@ -1393,8 +1564,8 @@ export async function bulkGenerateReleaseGood(
1393
1564
  actualPalletQty: 0,
1394
1565
  status: ORDER_PRODUCT_STATUS.ASSIGNED,
1395
1566
  releaseGood: newReleaseGood,
1396
- creator: user,
1397
- updater: user
1567
+ creator: newReleaseGood?.creator || user,
1568
+ updater: newReleaseGood?.updater || user
1398
1569
  }
1399
1570
 
1400
1571
  newOrderProduct = await tx.getRepository(OrderProduct).save(newOrderProduct)
@@ -1403,7 +1574,7 @@ export async function bulkGenerateReleaseGood(
1403
1574
  ...oi.orderProduct,
1404
1575
  totalUomValue: `${oi.orderProduct.releaseUomValue} ${oi.orderProduct.uom}`,
1405
1576
  status: ORDER_PRODUCT_STATUS.ASSIGNED,
1406
- updater: user
1577
+ updater: newReleaseGood?.updater || user
1407
1578
  })
1408
1579
  }
1409
1580
 
@@ -196,6 +196,7 @@ export class ReleaseGoodQuery {
196
196
  .createQueryBuilder('oi')
197
197
  .leftJoinAndSelect('oi.inventory', 'inventory')
198
198
  .leftJoinAndSelect('oi.product', 'product')
199
+ .leftJoinAndSelect('oi.productDetail', 'productDetail')
199
200
  .leftJoinAndSelect('inventory.location', 'location')
200
201
  .where('oi.domain_id = :domainId', { domainId: domain.id })
201
202
  .andWhere('oi.release_good_id = :releaseGoodId', { releaseGoodId: releaseGood.id })
@@ -226,6 +227,7 @@ export class ReleaseGoodQuery {
226
227
  batchIdRef: inventory.batchIdRef,
227
228
  palletId: inventory.palletId,
228
229
  product: orderInv.product,
230
+ productDetail: orderInv.productDetail,
229
231
  productIdRef: orderInv.product.id,
230
232
  productName: `${orderInv.product.name} (${orderInv.product.description})`,
231
233
  packingType: orderInv.packingType,
@@ -375,10 +377,7 @@ export class ReleaseGoodQuery {
375
377
  params.filters.push({
376
378
  name: typeFilter == 'b2c' ? 'releaseDate' : 'createdAt',
377
379
  operator: 'gte',
378
- value:
379
- typeFilter == 'b2c'
380
- ? releaseDateFrom
381
- : fromDateVal.toISOString(),
380
+ value: typeFilter == 'b2c' ? releaseDateFrom : fromDateVal.toISOString(),
382
381
  relation: false
383
382
  })
384
383
  }
@@ -393,9 +392,7 @@ export class ReleaseGoodQuery {
393
392
  name: typeFilter == 'b2c' ? 'releaseDate' : 'createdAt',
394
393
  operator: typeFilter == 'b2c' ? 'lte' : 'lt',
395
394
  value:
396
- typeFilter == 'b2c'
397
- ? releaseDateTo
398
- : new Date(toDateVal.setDate(toDateVal.getDate() + 1)).toISOString(),
395
+ typeFilter == 'b2c' ? releaseDateTo : new Date(toDateVal.setDate(toDateVal.getDate() + 1)).toISOString(),
399
396
  relation: false
400
397
  })
401
398
  }
@@ -1,6 +1,6 @@
1
1
  import { Field, Float, InputType, Int, ObjectType } from 'type-graphql'
2
2
 
3
- import { Product } from '@things-factory/product-base'
3
+ import { Product, ProductDetail } from '@things-factory/product-base'
4
4
  import { ObjectRef } from '@things-factory/shell'
5
5
  import { Location } from '@things-factory/warehouse-base'
6
6
 
@@ -77,6 +77,9 @@ export class InventoryInfos {
77
77
  @Field(type => Product, { nullable: true })
78
78
  product?: Product
79
79
 
80
+ @Field(type => ProductDetail, { nullable: true })
81
+ productDetail?: ProductDetail
82
+
80
83
  @Field({ nullable: true })
81
84
  packingType?: string
82
85
 
@@ -185,8 +188,6 @@ export class NewReleaseGood {
185
188
  @Field({ nullable: true })
186
189
  orderMethod: string
187
190
 
188
-
189
-
190
191
  @Field({ nullable: true })
191
192
  collectionOrderNo: string
192
193
 
@@ -95,8 +95,8 @@ export class ReleaseGood {
95
95
  DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
96
96
  ? 'enum'
97
97
  : DATABASE_TYPE == 'oracle'
98
- ? 'varchar2'
99
- : 'smallint',
98
+ ? 'varchar2'
99
+ : 'smallint',
100
100
  enum: ReleaseOrderType,
101
101
  default: ReleaseOrderType.B2B
102
102
  })
@@ -167,15 +167,13 @@ export class ReleaseGood {
167
167
  DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
168
168
  ? 'enum'
169
169
  : DATABASE_TYPE == 'oracle'
170
- ? 'varchar2'
171
- : 'smallint',
170
+ ? 'varchar2'
171
+ : 'smallint',
172
172
  enum: DispatchmentStatus,
173
173
  default: DispatchmentStatus.READY_TO_DISPATCH
174
174
  })
175
175
  dispatchmentStatus: DispatchmentStatus
176
176
 
177
-
178
-
179
177
  @Column({ nullable: true })
180
178
  @Field({ nullable: true })
181
179
  refNo: String
@@ -443,6 +441,10 @@ export class ReleaseGood {
443
441
  @Field({ nullable: true })
444
442
  stopId: string
445
443
 
444
+ @Column({ nullable: true })
445
+ @Field({ nullable: true })
446
+ source: string
447
+
446
448
  @Column({ nullable: true })
447
449
  @Field({ nullable: true })
448
450
  manifestedAt: Date
@@ -6,7 +6,7 @@ import { Attachment, createAttachments } from '@things-factory/attachment-base'
6
6
  import { Role, User } from '@things-factory/auth-base'
7
7
  import { Bizplace, getDomainUsers } from '@things-factory/biz-base'
8
8
  import { sendNotification } from '@things-factory/notification'
9
- import { Product } from '@things-factory/product-base'
9
+ import { Product, ProductDetail } from '@things-factory/product-base'
10
10
  import { Domain } from '@things-factory/shell'
11
11
  import { Inventory } from '@things-factory/warehouse-base'
12
12
 
@@ -59,6 +59,7 @@ export class ReturnOrderMutation {
59
59
  itm =>
60
60
  itm.product.id === curr.product.id &&
61
61
  itm.packingType === curr.packingType &&
62
+ itm.productDetailId === curr.product.productDetailId &&
62
63
  itm.batchId === curr.batchId &&
63
64
  itm.packingSize === curr.packingSize
64
65
  )
@@ -99,6 +100,7 @@ export class ReturnOrderMutation {
99
100
  newOrderInv.name = OrderNoGenerator.orderInventory()
100
101
  newOrderInv.returnOrder = createdReturnOrder
101
102
  newOrderInv.product = await tx.getRepository(Product).findOne(moi.product.id)
103
+ newOrderInv.productDetail = await tx.getRepository(ProductDetail).findOne(moi.productDetail.id)
102
104
  newOrderInv.creator = user
103
105
  newOrderInv.updater = user
104
106
 
@@ -115,6 +115,7 @@ export class NewReturnOrder {
115
115
  @Field({ nullable: true })
116
116
  truckNo: string
117
117
 
118
+
118
119
  @Field({ nullable: true })
119
120
  deliveryOrderNo: string
120
121
 
@@ -12,7 +12,7 @@ import {
12
12
 
13
13
  import { User } from '@things-factory/auth-base'
14
14
  import { Bizplace } from '@things-factory/biz-base'
15
- import { Product } from '@things-factory/product-base'
15
+ import { Product, ProductDetail } from '@things-factory/product-base'
16
16
  import { Domain } from '@things-factory/shell'
17
17
  import { Inventory } from '@things-factory/warehouse-base'
18
18
 
@@ -127,6 +127,10 @@ export class ReverseKittingOrderInventory {
127
127
  @Field({ nullable: true })
128
128
  updatedAt?: Date
129
129
 
130
+ @ManyToOne(type => ProductDetail, { nullable: true })
131
+ @Field({ nullable: true })
132
+ productDetail: ProductDetail
133
+
130
134
  @ManyToOne(type => User, { nullable: true })
131
135
  @Field({ nullable: true })
132
136
  creator?: User