@things-factory/worksheet-base 4.0.0-y.0 → 4.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/dist-server/controllers/ecommerce/ecommerce-controller.js +23 -9
  2. package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/index.js +1 -0
  4. package/dist-server/controllers/ecommerce/index.js.map +1 -1
  5. package/dist-server/controllers/ecommerce/sellercraft-controller.js +168 -0
  6. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -0
  7. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +6 -5
  8. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/index.js +1 -0
  10. package/dist-server/controllers/index.js.map +1 -1
  11. package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js +43 -8
  12. package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/outbound/packing-worksheet-controller.js +16 -1
  14. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  15. package/dist-server/controllers/outbound/picking-worksheet-controller.js +17 -9
  16. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  17. package/dist-server/controllers/render-grn.js +192 -0
  18. package/dist-server/controllers/render-grn.js.map +1 -0
  19. package/dist-server/controllers/render-job-sheet.js +51 -35
  20. package/dist-server/controllers/render-job-sheet.js.map +1 -1
  21. package/dist-server/controllers/render-kimeda-grn.js +12 -5
  22. package/dist-server/controllers/render-kimeda-grn.js.map +1 -1
  23. package/dist-server/controllers/render-ro-do.js +19 -5
  24. package/dist-server/controllers/render-ro-do.js.map +1 -1
  25. package/dist-server/controllers/render-seebuu-grn.js +9 -3
  26. package/dist-server/controllers/render-seebuu-grn.js.map +1 -1
  27. package/dist-server/controllers/vas/vas-worksheet-controller.js +75 -14
  28. package/dist-server/controllers/vas/vas-worksheet-controller.js.map +1 -1
  29. package/dist-server/controllers/worksheet-controller.js +61 -8
  30. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  31. package/dist-server/graphql/resolvers/pallet/pallet-outbound.js +1 -1
  32. package/dist-server/graphql/resolvers/pallet/pallet-outbound.js.map +1 -1
  33. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +23 -1
  34. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
  35. package/dist-server/graphql/resolvers/worksheet/cycle-count-worksheet.js +4 -2
  36. package/dist-server/graphql/resolvers/worksheet/cycle-count-worksheet.js.map +1 -1
  37. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.js +25 -0
  38. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.js.map +1 -0
  39. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.js +4 -4
  40. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.js.map +1 -1
  41. package/dist-server/graphql/resolvers/worksheet/index.js +5 -4
  42. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
  43. package/dist-server/graphql/resolvers/worksheet/not-tally-target-inventories.js +2 -2
  44. package/dist-server/graphql/resolvers/worksheet/not-tally-target-inventories.js.map +1 -1
  45. package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js +13 -1
  46. package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js.map +1 -1
  47. package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js +24 -38
  48. package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js.map +1 -1
  49. package/dist-server/graphql/resolvers/worksheet/packing/packing.js +13 -1
  50. package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
  51. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +13 -1
  52. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
  53. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +60 -19
  54. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  55. package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js +20 -1
  56. package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js.map +1 -1
  57. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +24 -14
  58. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
  59. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-inventories.js +4 -4
  60. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-inventories.js.map +1 -1
  61. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +19 -0
  62. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  63. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +124 -149
  64. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  65. package/dist-server/graphql/resolvers/worksheet/picking/undo-picking-assignment.js +4 -4
  66. package/dist-server/graphql/resolvers/worksheet/picking/undo-picking-assignment.js.map +1 -1
  67. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +2 -1
  68. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  69. package/dist-server/graphql/resolvers/worksheet/recommend-putway-location.js +1 -1
  70. package/dist-server/graphql/resolvers/worksheet/recommend-putway-location.js.map +1 -1
  71. package/dist-server/graphql/resolvers/worksheet/replace-picking-pallets.js +13 -4
  72. package/dist-server/graphql/resolvers/worksheet/replace-picking-pallets.js.map +1 -1
  73. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +21 -2
  74. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -1
  75. package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.js +18 -1
  76. package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.js.map +1 -1
  77. package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js +302 -11
  78. package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js.map +1 -1
  79. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.js.map +1 -1
  80. package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/repackaging.js.map +1 -1
  81. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.js +137 -31
  82. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.js.map +1 -1
  83. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.js +157 -42
  84. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.js.map +1 -1
  85. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.js +35 -21
  86. package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.js.map +1 -1
  87. package/dist-server/graphql/resolvers/worksheet/worksheet.js +33 -27
  88. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  89. package/dist-server/graphql/resolvers/worksheet/worksheets.js +39 -10
  90. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
  91. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +1 -1
  92. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
  93. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +3 -2
  94. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
  95. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.js +3 -2
  96. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.js.map +1 -1
  97. package/dist-server/graphql/types/index.js +2 -1
  98. package/dist-server/graphql/types/index.js.map +1 -1
  99. package/dist-server/graphql/types/pallet/index.js +10 -0
  100. package/dist-server/graphql/types/pallet/index.js.map +1 -0
  101. package/dist-server/graphql/types/worksheet/airwaybill.js +10 -0
  102. package/dist-server/graphql/types/worksheet/airwaybill.js.map +1 -0
  103. package/dist-server/graphql/types/worksheet/index.js +10 -2
  104. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  105. package/dist-server/graphql/types/worksheet/worksheet-info.js +2 -0
  106. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  107. package/dist-server/graphql/types/worksheet-detail/index.js +2 -1
  108. package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
  109. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js +1 -0
  110. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js.map +1 -1
  111. package/dist-server/routes.js +10 -6
  112. package/dist-server/routes.js.map +1 -1
  113. package/dist-server/utils/inventory-util.js +7 -3
  114. package/dist-server/utils/inventory-util.js.map +1 -1
  115. package/package.json +16 -15
  116. package/server/controllers/ecommerce/ecommerce-controller.ts +37 -10
  117. package/server/controllers/ecommerce/index.ts +1 -0
  118. package/server/controllers/ecommerce/sellercraft-controller.ts +223 -0
  119. package/server/controllers/inbound/unloading-worksheet-controller.ts +16 -13
  120. package/server/controllers/index.ts +1 -0
  121. package/server/controllers/inspect/cycle-count-worksheet-controller.ts +108 -43
  122. package/server/controllers/outbound/packing-worksheet-controller.ts +21 -4
  123. package/server/controllers/outbound/picking-worksheet-controller.ts +26 -11
  124. package/server/controllers/render-grn.ts +218 -0
  125. package/server/controllers/render-job-sheet.ts +51 -39
  126. package/server/controllers/render-kimeda-grn.ts +16 -12
  127. package/server/controllers/render-ro-do.ts +22 -6
  128. package/server/controllers/render-seebuu-grn.ts +12 -12
  129. package/server/controllers/vas/vas-worksheet-controller.ts +104 -23
  130. package/server/controllers/worksheet-controller.ts +87 -22
  131. package/server/graphql/resolvers/pallet/pallet-outbound.ts +2 -1
  132. package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +30 -2
  133. package/server/graphql/resolvers/worksheet/cycle-count-worksheet.ts +7 -4
  134. package/server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.ts +30 -0
  135. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.ts +18 -3
  136. package/server/graphql/resolvers/worksheet/index.ts +6 -4
  137. package/server/graphql/resolvers/worksheet/not-tally-target-inventories.ts +4 -2
  138. package/server/graphql/resolvers/worksheet/packing/activate-packing.ts +20 -3
  139. package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +30 -49
  140. package/server/graphql/resolvers/worksheet/packing/packing.ts +22 -3
  141. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +22 -3
  142. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +71 -20
  143. package/server/graphql/resolvers/worksheet/picking/activate-batch-picking.ts +32 -3
  144. package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +31 -17
  145. package/server/graphql/resolvers/worksheet/picking/assign-picking-inventories.ts +4 -3
  146. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +31 -3
  147. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +143 -175
  148. package/server/graphql/resolvers/worksheet/picking/undo-picking-assignment.ts +5 -4
  149. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +5 -2
  150. package/server/graphql/resolvers/worksheet/recommend-putway-location.ts +1 -1
  151. package/server/graphql/resolvers/worksheet/replace-picking-pallets.ts +22 -9
  152. package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +27 -4
  153. package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.ts +23 -2
  154. package/server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts +452 -14
  155. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.ts +36 -1
  156. package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/repackaging.ts +8 -2
  157. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.ts +185 -56
  158. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.ts +210 -54
  159. package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.ts +64 -32
  160. package/server/graphql/resolvers/worksheet/worksheet.ts +67 -62
  161. package/server/graphql/resolvers/worksheet/worksheets.ts +51 -13
  162. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +1 -0
  163. package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +2 -1
  164. package/server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.ts +2 -1
  165. package/server/graphql/types/index.ts +2 -1
  166. package/server/graphql/types/pallet/index.ts +6 -0
  167. package/server/graphql/types/worksheet/airwaybill.ts +7 -0
  168. package/server/graphql/types/worksheet/index.ts +10 -2
  169. package/server/graphql/types/worksheet/worksheet-info.ts +2 -0
  170. package/server/graphql/types/worksheet-detail/index.ts +2 -1
  171. package/server/graphql/types/worksheet-detail/inventory-detail.ts +1 -0
  172. package/server/routes.ts +11 -6
  173. package/server/utils/inventory-util.ts +14 -5
@@ -1,23 +1,24 @@
1
+ import { EntityManager } from 'typeorm'
2
+
1
3
  import { User } from '@things-factory/auth-base'
2
- import { Bizplace, getMyBizplace, ContactPoint } from '@things-factory/biz-base'
3
- import { OrderInventory, ORDER_INVENTORY_STATUS, ReleaseGood, ORDER_STATUS } from '@things-factory/sales-base'
4
- import { MarketplaceStore } from '@things-factory/integration-marketplace'
4
+ import { Bizplace, ContactPoint, getMyBizplace } from '@things-factory/biz-base'
5
+ import { LastMileAPI, LastMileDelivery } from '@things-factory/integration-lmd'
6
+ import { MarketplaceStore, MarketplaceTransporter } from '@things-factory/integration-marketplace'
7
+ import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
8
+ import { MarketplaceOrder, MarketplaceOrderItem, MarketplaceOrderShipping } from '@things-factory/marketplace-base'
9
+ import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
5
10
  import { Domain } from '@things-factory/shell'
6
- import { EntityManager } from 'typeorm'
7
- import { WORKSHEET_TYPE, WORKSHEET_STATUS } from '../../../../constants'
11
+
12
+ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
8
13
  import {
9
- PackingWorksheetController,
10
14
  LoadingWorksheetController,
11
- PickingWorksheetController
15
+ PackingWorksheetController,
16
+ PickingWorksheetController,
17
+ SellercraftController
12
18
  } from '../../../../controllers/'
13
- import { MarketplaceOrder, MarketplaceOrderItem, MarketplaceOrderShipping } from '@things-factory/marketplace-base'
14
- import { MarketplaceTransporter } from '@things-factory/integration-marketplace'
19
+ import { EcommerceController } from '../../../../controllers/ecommerce'
15
20
  import { WorksheetController } from '../../../../controllers/worksheet-controller'
16
21
  import { Worksheet, WorksheetDetail } from '../../../../entities'
17
- import { WorksheetNoGenerator } from '../../../../utils'
18
- import { EcommerceController } from '../../../../controllers/ecommerce'
19
-
20
- import { LastMileDelivery, LastMileAPI } from '@things-factory/integration-lmd'
21
22
 
22
23
  export const completePickingResolver = {
23
24
  async completePicking(_: any, { releaseGoodNo }, context: any) {
@@ -25,31 +26,6 @@ export const completePickingResolver = {
25
26
 
26
27
  await completePicking(tx, domain, user, releaseGoodNo)
27
28
 
28
- const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
29
- where: { domain, name: releaseGoodNo },
30
- relations: [
31
- 'bizplace',
32
- 'bizplace.company',
33
- 'bizplace.company.domain',
34
- 'orderInventories',
35
- 'orderInventories.product'
36
- ]
37
- })
38
-
39
- if (releaseGood.type === 'b2c') {
40
- const companyDomain: Domain = releaseGood.bizplace.company.domain
41
- const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
42
- where: { releaseOrderId: releaseGood.id, domain: companyDomain },
43
- relations: ['marketplaceStore']
44
- })
45
- const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
46
-
47
- if (marketplaceStore.isAutoUpdateShipment) {
48
- const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
49
- await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PACKING)
50
- }
51
- }
52
-
53
29
  const bizplace: Bizplace = await getMyBizplace(domain, user)
54
30
  const worksheetController: WorksheetController = new WorksheetController(tx, domain, user)
55
31
  await worksheetController.notifyToCustomer(bizplace, {
@@ -68,9 +44,16 @@ export async function completePicking(
68
44
  releaseGoodNo: string
69
45
  ): Promise<void> {
70
46
  const pickingWSCtrl: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
71
- const releaseGood: ReleaseGood = await pickingWSCtrl.findRefOrder(ReleaseGood, {
72
- domain,
73
- name: releaseGoodNo
47
+ const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
48
+ where: { domain, name: releaseGoodNo },
49
+ relations: [
50
+ 'bizplace',
51
+ 'bizplace.domain',
52
+ 'bizplace.company',
53
+ 'bizplace.company.domain',
54
+ 'orderInventories',
55
+ 'orderInventories.product'
56
+ ]
74
57
  })
75
58
 
76
59
  const worksheet: Worksheet = await pickingWSCtrl.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.PICKING, [
@@ -87,166 +70,151 @@ export async function completePicking(
87
70
 
88
71
  const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
89
72
  const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)
90
- const pickedTargetInventories: OrderInventory[] = targetInventories
91
- .filter(targetInventory => targetInventory.status === ORDER_INVENTORY_STATUS.PICKED)
92
- .map((pickedTargetInventory: OrderInventory) => {
93
- return pickedTargetInventory
94
- })
73
+ const pickedTargetInventories: OrderInventory[] = targetInventories.filter(
74
+ targetInventory => targetInventory.status === ORDER_INVENTORY_STATUS.PICKED
75
+ )
95
76
 
96
77
  await pickingWSCtrl.completePicking(releaseGoodNo)
97
78
 
98
- // Find Existing Loading Worksheet if any
99
- let existLoadingWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
100
- where: {
101
- releaseGood,
102
- type: WORKSHEET_TYPE.LOADING,
103
- status: WORKSHEET_STATUS.DEACTIVATED
104
- }
105
- })
79
+ if (releaseGood.type == 'b2c') {
80
+ const sellercraft: Sellercraft = await tx
81
+ .getRepository(Sellercraft)
82
+ .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
83
+
84
+ if (sellercraft) {
85
+ const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
86
+ await sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
87
+ } else {
88
+ const companyDomain: Domain = releaseGood.bizplace.company.domain
89
+ let marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
90
+ where: { orderNo: releaseGood.refNo, domain: companyDomain },
91
+ relations: ['marketplaceStore']
92
+ })
93
+ const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
94
+ let eTraxOption: boolean
95
+
96
+ if (marketplaceStore.isAutoUpdateShipment) {
97
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
98
+ await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PACKING)
99
+ }
106
100
 
107
- if (releaseGood.packingOption) {
108
- // find marketplace store to check if there is any eTrax true config
109
- // access marketplaceOrderShipping from marketplaceOrderItems
110
- let marketplaceOrder: MarketplaceOrder
111
- let eTraxOption: boolean
112
- if (releaseGood.type === 'b2c') {
113
101
  marketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
114
- where: { releaseOrderId: releaseGood.id },
102
+ where: { orderNo: releaseGood.refNo },
115
103
  relations: ['marketplaceStore', 'marketplaceOrderItems', 'marketplaceOrderItems.marketplaceOrderShipping']
116
104
  })
117
105
 
118
106
  if (!marketplaceOrder)
119
107
  throw new Error('Failed to find ecommerce order, kindly contact our support team regarding this issue')
120
108
  eTraxOption = marketplaceOrder?.marketplaceStore.eTrax
121
- }
122
109
 
123
- // if eTrax option is true
124
- if (eTraxOption) {
125
- const marketplaceOrderItems: MarketplaceOrderItem[] = marketplaceOrder.marketplaceOrderItems
126
-
127
- // access every marketplaceOrderItems for shipping information you need
128
- // trigger the controller from integration-lmd that trigger the API, build the parameters needed
129
- // for etrax didn't support multi awb per order
130
- const marketplaceOrderShipping: MarketplaceOrderShipping = marketplaceOrderItems[0].marketplaceOrderShipping
131
- const lmd: LastMileDelivery = await tx.getRepository(LastMileDelivery).findOne({
132
- where: {
133
- domain,
134
- platform: 'eTrax'
135
- }
136
- })
110
+ // if eTrax option is true
111
+ if (eTraxOption) {
112
+ const marketplaceOrderItems: MarketplaceOrderItem[] = marketplaceOrder.marketplaceOrderItems
137
113
 
138
- //Get which transporter to use
139
- const marketplaceTransporter: MarketplaceTransporter = await tx.getRepository(MarketplaceTransporter).findOne({
140
- where: { marketplaceStore: marketplaceOrder.marketplaceStore },
141
- relations: ['pickupTransporter', 'deliveryTransporter']
142
- })
114
+ // access every marketplaceOrderItems for shipping information you need
115
+ // trigger the controller from integration-lmd that trigger the API, build the parameters needed
116
+ // for etrax didn't support multi awb per order
117
+ const marketplaceOrderShipping: MarketplaceOrderShipping = marketplaceOrderItems[0].marketplaceOrderShipping
118
+ const lmd: LastMileDelivery = await tx.getRepository(LastMileDelivery).findOne({
119
+ where: {
120
+ domain,
121
+ platform: 'eTrax'
122
+ }
123
+ })
143
124
 
144
- const resp = await LastMileAPI.createShipmentRequest(lmd, {
145
- orderNo: marketplaceOrder.orderNo,
146
- clientId: lmd.clientId,
147
- clientType: lmd.clientType,
148
- clientName: lmd.clientName,
149
- transporterId: marketplaceTransporter.pickupTransporter.transporterId,
150
- pickupName: warehouseContactPoint.name,
151
- pickupAddress1: warehouseContactPoint.address,
152
- pickupAddress2: warehouseContactPoint.address2,
153
- pickupPostcode: warehouseContactPoint.postCode,
154
- pickupState: warehouseContactPoint.state,
155
- pickupCity: warehouseContactPoint.city,
156
- pickupPhone: warehouseContactPoint.phone,
157
- pickupEmail: warehouseContactPoint.email,
158
- name: marketplaceOrderShipping.attentionTo.trim(),
159
- address1: marketplaceOrderShipping.address1.trim(),
160
- address2: marketplaceOrderShipping.address2.trim(),
161
- postCode: marketplaceOrderShipping.postCode.trim(),
162
- city: marketplaceOrderShipping.city.trim(),
163
- state: marketplaceOrderShipping.state.trim(),
164
- phone: marketplaceOrderShipping.phone1 || '',
165
- email: marketplaceOrderShipping.email || '',
166
- attentionTo: marketplaceOrderShipping.attentionTo,
167
- quantity: marketplaceOrderItems.length
168
- })
125
+ //Get which transporter to use
126
+ const marketplaceTransporter: MarketplaceTransporter = await tx.getRepository(MarketplaceTransporter).findOne({
127
+ where: { marketplaceStore: marketplaceOrder.marketplaceStore },
128
+ relations: ['pickupTransporter', 'deliveryTransporter']
129
+ })
169
130
 
170
- const delay = (ms: number) => {
171
- return new Promise(resolve => setTimeout(resolve, ms))
172
- }
131
+ const resp = await LastMileAPI.createShipmentRequest(lmd, {
132
+ orderNo: marketplaceOrder.orderNo,
133
+ clientId: lmd.clientId,
134
+ clientType: lmd.clientType,
135
+ clientName: lmd.clientName,
136
+ transporterId: marketplaceTransporter.pickupTransporter.transporterId,
137
+ pickupName: warehouseContactPoint.name,
138
+ pickupAddress1: warehouseContactPoint.address,
139
+ pickupAddress2: warehouseContactPoint.address2,
140
+ pickupPostcode: warehouseContactPoint.postCode,
141
+ pickupState: warehouseContactPoint.state,
142
+ pickupCity: warehouseContactPoint.city,
143
+ pickupPhone: warehouseContactPoint.phone,
144
+ pickupEmail: warehouseContactPoint.email,
145
+ name: marketplaceOrderShipping?.attentionTo ? marketplaceOrderShipping.attentionTo.trim() : '',
146
+ address1: marketplaceOrderShipping?.address1 ? marketplaceOrderShipping?.address1.trim() : '-',
147
+ address2: marketplaceOrderShipping?.address2 ? marketplaceOrderShipping?.address2.trim() : '-',
148
+ postCode: marketplaceOrderShipping?.postCode ? marketplaceOrderShipping?.postCode.trim() : '',
149
+ city: marketplaceOrderShipping?.city ? marketplaceOrderShipping?.city.trim() : '',
150
+ state: marketplaceOrderShipping?.state ? marketplaceOrderShipping?.state.trim() : '',
151
+ phone: marketplaceOrderShipping.phone1 || '',
152
+ email: marketplaceOrderShipping.email || '',
153
+ attentionTo: marketplaceOrderShipping.attentionTo,
154
+ quantity: marketplaceOrderItems.length
155
+ })
173
156
 
174
- if (resp.Status === 'SUCCESS') {
175
- //Success
176
- let awbObtained = false
177
- let retry = 0
178
- while (!awbObtained) {
179
- const marketplaceOrder2: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
180
- where: { releaseOrderId: releaseGood.id },
181
- relations: ['marketplaceStore', 'marketplaceOrderItems', 'marketplaceOrderItems.marketplaceOrderShipping']
182
- })
183
- const orderShipping = marketplaceOrder2.marketplaceOrderItems[0].marketplaceOrderShipping
184
- if (orderShipping?.airwayBill) {
185
- awbObtained = true
186
- }
187
- await delay(5000)
188
- //Timeout after 15sec
189
- if (++retry > 3) {
190
- break
157
+ const delay = (ms: number) => {
158
+ return new Promise(resolve => setTimeout(resolve, ms))
159
+ }
160
+
161
+ if (resp.Status === 'SUCCESS') {
162
+ //Success
163
+ let awbObtained = false
164
+ let retry = 0
165
+ while (!awbObtained) {
166
+ const marketplaceOrder2: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
167
+ where: { releaseOrderId: releaseGood.id },
168
+ relations: ['marketplaceStore', 'marketplaceOrderItems', 'marketplaceOrderItems.marketplaceOrderShipping']
169
+ })
170
+ const orderShipping = marketplaceOrder2.marketplaceOrderItems[0].marketplaceOrderShipping
171
+ if (orderShipping?.airwayBill) {
172
+ awbObtained = true
173
+ }
174
+ await delay(5000)
175
+ //Timeout after 15sec
176
+ if (++retry > 3) {
177
+ break
178
+ }
191
179
  }
180
+ } else {
181
+ throw resp
182
+ //Failed
192
183
  }
193
- } else {
194
- throw resp
195
- //Failed
196
184
  }
197
185
  }
186
+ }
198
187
 
188
+ if (releaseGood.packingOption) {
199
189
  const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
200
190
  await packingWSCtrl.generatePackingWorksheet(releaseGoodNo)
201
- }
191
+ } else {
192
+ // Find Existing Loading Worksheet if any
193
+ const existLoadingWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
194
+ where: {
195
+ releaseGood,
196
+ type: WORKSHEET_TYPE.LOADING,
197
+ status: WORKSHEET_STATUS.DEACTIVATED
198
+ }
199
+ })
202
200
 
203
- if (existLoadingWorksheet && !releaseGood.packingOption) {
204
- const bizplace: Bizplace = await getMyBizplace(domain, user)
201
+ if (!existLoadingWorksheet && !releaseGood.courierOption && !releaseGood.packingOption) {
202
+ const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
203
+ let loadingWorksheet: Worksheet = await loadingWSCtrl.generateLoadingWorksheet(
204
+ releaseGoodNo,
205
+ pickedTargetInventories
206
+ )
205
207
 
206
- // 2) Create loading worksheet details
207
- let loadingWorksheetDetails = await Promise.all(
208
- pickedTargetInventories.map(async (targetInventory: OrderInventory) => {
209
- let existingLoadingWorksheetDetail: WorksheetDetail = await tx.getRepository(WorksheetDetail).findOne({
210
- where: {
211
- domain,
212
- worksheet: existLoadingWorksheet,
213
- targetInventory,
214
- type: WORKSHEET_TYPE.LOADING
215
- }
216
- })
208
+ if (!loadingWorksheet.worksheetDetails?.length) {
209
+ loadingWorksheet = await pickingWSCtrl.findWorksheetById(loadingWorksheet.id)
210
+ }
217
211
 
218
- return existingLoadingWorksheetDetail
219
- ? {
220
- ...existingLoadingWorksheetDetail,
221
- status: WORKSHEET_STATUS.DEACTIVATED
222
- }
223
- : {
224
- domain,
225
- bizplace: bizplace,
226
- worksheet: existLoadingWorksheet,
227
- name: WorksheetNoGenerator.generateDetail(WORKSHEET_TYPE.LOADING),
228
- targetInventory,
229
- type: WORKSHEET_TYPE.LOADING,
230
- status: WORKSHEET_STATUS.DEACTIVATED,
231
- creator: user,
232
- updater: user
233
- }
234
- })
235
- )
236
-
237
- loadingWorksheetDetails = await tx.getRepository(WorksheetDetail).save(loadingWorksheetDetails)
238
- } else if (!existLoadingWorksheet && !releaseGood.courierOption && !releaseGood.packingOption) {
239
- const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
240
- let loadingWorksheet: Worksheet = await loadingWSCtrl.generateLoadingWorksheet(
241
- releaseGoodNo,
242
- pickedTargetInventories
243
- )
244
-
245
- if (!loadingWorksheet.worksheetDetails?.length) {
246
- loadingWorksheet = await pickingWSCtrl.findWorksheetById(loadingWorksheet.id)
212
+ const loadingWorksheetDetails: WorksheetDetail[] = loadingWorksheet.worksheetDetails
213
+ await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails)
214
+ } else {
215
+ throw new Error(
216
+ 'Picking completion has been triggered twice, loading worksheet has been generated. Kindly proceed to loading.'
217
+ )
247
218
  }
248
-
249
- const loadingWorksheetDetails: WorksheetDetail[] = loadingWorksheet.worksheetDetails
250
- await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails)
251
219
  }
252
220
  }
@@ -4,9 +4,9 @@ import { EntityManager } from 'typeorm'
4
4
  import { PickingWorksheetController } from '../../../../controllers'
5
5
 
6
6
  export const undoPickingAssigmentResolver = {
7
- async undoPickingAssigment(_: any, { worksheetNo, batchId, productId, packingType }, context: any): Promise<void> {
7
+ async undoPickingAssigment(_: any, { worksheetNo, batchId, productId, packingType, packingSize }, context: any): Promise<void> {
8
8
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
9
- await undoPickingAssigment(tx, domain, user, worksheetNo, batchId, productId, packingType)
9
+ await undoPickingAssigment(tx, domain, user, worksheetNo, batchId, productId, packingType, packingSize)
10
10
  }
11
11
  }
12
12
 
@@ -17,8 +17,9 @@ export async function undoPickingAssigment(
17
17
  worksheetNo: string,
18
18
  batchId: string,
19
19
  productId: string,
20
- packingType: string
20
+ packingType: string,
21
+ packingSize: number
21
22
  ): Promise<void> {
22
23
  const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
23
- await worksheetController.undoPickingAssigment(worksheetNo, batchId, productId, packingType)
24
+ await worksheetController.undoPickingAssigment(worksheetNo, batchId, productId, packingType, packingSize)
24
25
  }
@@ -1,10 +1,12 @@
1
1
  import { createQueryBuilder, getRepository, SelectQueryBuilder } from 'typeorm'
2
+
3
+ import { ORDER_INVENTORY_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
2
4
  import { Domain } from '@things-factory/shell'
3
- import { fetchExecutingWorksheet } from '../../../utils'
4
5
  import { Inventory } from '@things-factory/warehouse-base'
5
- import { OrderInventory, ReleaseGood, ORDER_INVENTORY_STATUS } from '@things-factory/sales-base'
6
+
6
7
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
7
8
  import { WorksheetDetail } from '../../../entities'
9
+ import { fetchExecutingWorksheet } from '../../../utils'
8
10
 
9
11
  export const pickingWorksheetResolver = {
10
12
  async pickingWorksheet(_: any, { releaseGoodNo, locationSortingRules }, context: any) {
@@ -47,6 +49,7 @@ export const pickingWorksheetResolver = {
47
49
  partnerDomainId: releaseGood.bizplace?.domain.id,
48
50
  startedAt: worksheet.startedAt,
49
51
  refNo: releaseGood.refNo,
52
+ refNo2: releaseGood.refNo2,
50
53
  releaseGood
51
54
  },
52
55
  worksheetDetailInfos: worksheetDetails.map(async (pickingWSD: WorksheetDetail) => {
@@ -41,7 +41,7 @@ export const recommendPutawayLocationResolver = {
41
41
  const sortingLevelSetting: Setting = await getRepository(Setting).findOne({
42
42
  where: { domain, name: 'location-recommendation-level' }
43
43
  })
44
- const sortingLevel = sortingLevelSetting.value
44
+ const sortingLevel = sortingLevelSetting?.value
45
45
 
46
46
  switch (sortingLevel) {
47
47
  case 'level 1':
@@ -1,15 +1,18 @@
1
+ import { EntityManager } from 'typeorm'
2
+
1
3
  import { User } from '@things-factory/auth-base'
2
4
  import { Bizplace } from '@things-factory/biz-base'
5
+ import { Product } from '@things-factory/product-base'
3
6
  import {
4
- OrderInventory,
5
- OrderNoGenerator,
6
7
  ORDER_INVENTORY_STATUS,
7
8
  ORDER_TYPES,
9
+ OrderInventory,
10
+ OrderNoGenerator,
8
11
  ReleaseGood
9
12
  } from '@things-factory/sales-base'
10
13
  import { Domain } from '@things-factory/shell'
11
14
  import { Inventory } from '@things-factory/warehouse-base'
12
- import { EntityManager } from 'typeorm'
15
+
13
16
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
14
17
  import { Worksheet, WorksheetDetail } from '../../../entities'
15
18
  import { WorksheetNoGenerator } from '../../../utils'
@@ -29,11 +32,13 @@ export const replacePickingPalletsResolver = {
29
32
  'worksheet',
30
33
  'targetInventory',
31
34
  'targetInventory.releaseGood',
32
- 'targetInventory.inventory'
35
+ 'targetInventory.inventory',
36
+ 'targetInventory.inventory.product'
33
37
  ]
34
38
  })
35
39
  const prevOrderInv: OrderInventory = prevWSD.targetInventory
36
40
  const prevInv: Inventory = prevOrderInv.inventory
41
+ const product: Product = prevInv.product
37
42
  const batchId: string = prevOrderInv.batchId
38
43
  const productName: string = prevOrderInv.productName
39
44
  const packingType: string = prevOrderInv.packingType
@@ -45,9 +50,8 @@ export const replacePickingPalletsResolver = {
45
50
  // remove locked qty and locked uomValue
46
51
  await tx.getRepository(Inventory).save({
47
52
  ...prevInv,
48
- lockedQty: 0,
49
- lockedWeight: 0,
50
- lockedUomValue: 0,
53
+ lockedQty: prevInv.lockedQty - prevOrderInv.releaseQty,
54
+ lockedUomValue: prevInv.lockedUomValue - prevOrderInv.releaseUomValue,
51
55
  updater: user
52
56
  })
53
57
 
@@ -67,7 +71,7 @@ export const replacePickingPalletsResolver = {
67
71
 
68
72
  await Promise.all(
69
73
  inventories.map(async (inventory: Inventory) => {
70
- const foundInv: Inventory = await tx.getRepository(Inventory).findOne({
74
+ let foundInv: Inventory = await tx.getRepository(Inventory).findOne({
71
75
  where: {
72
76
  domain,
73
77
  palletId: inventory.palletId
@@ -85,11 +89,13 @@ export const replacePickingPalletsResolver = {
85
89
  releaseQty: inventory.qty,
86
90
  releaseUomValue: unitUomValue * inventory.qty,
87
91
  inventory: foundInv,
92
+ product,
88
93
  batchId,
89
94
  type: ORDER_TYPES.RELEASE_OF_GOODS,
90
95
  status: ORDER_INVENTORY_STATUS.PICKING,
91
96
  productName,
92
97
  packingType,
98
+ packingSize: inventory.packingSize,
93
99
  creator: user,
94
100
  updater: user
95
101
  })
@@ -110,8 +116,15 @@ export const replacePickingPalletsResolver = {
110
116
  updater: user
111
117
  })
112
118
 
119
+ foundInv.lockedQty = foundInv.lockedQty ? foundInv.lockedQty + inventory.qty : inventory.qty
120
+ foundInv.lockedUomValue = foundInv.lockedUomValue
121
+ ? foundInv.lockedUomValue + unitUomValue * inventory.qty
122
+ : unitUomValue * inventory.qty
123
+
124
+ foundInv = await tx.getRepository(Inventory).save(foundInv)
125
+
113
126
  // 6. execute picking transaction
114
- await picking(tx, domain, user, wsd.name, worksheetType, inventory.palletId, returnLocation, inventory.qty)
127
+ await picking(tx, domain, user, wsd.name, worksheetType, foundInv.palletId, returnLocation, inventory.qty)
115
128
  })
116
129
  )
117
130
  }
@@ -1,14 +1,17 @@
1
+ import { EntityManager } from 'typeorm'
2
+
1
3
  import { User } from '@things-factory/auth-base'
2
4
  import { Bizplace } from '@things-factory/biz-base'
3
- import { ArrivalNotice, generateGoodsReceivalNote } from '@things-factory/sales-base'
4
5
  import { MarketplaceStore } from '@things-factory/integration-marketplace'
6
+ import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
7
+ import { ArrivalNotice, generateGoodsReceivalNote } from '@things-factory/sales-base'
5
8
  import { Domain } from '@things-factory/shell'
6
9
  import { Inventory, INVENTORY_STATUS } from '@things-factory/warehouse-base'
7
- import { EntityManager } from 'typeorm'
10
+
8
11
  import { WORKSHEET_STATUS } from '../../../../constants'
9
12
  import { PutawayWorksheetController, UnloadingWorksheetController } from '../../../../controllers'
13
+ import { EcommerceController, SellercraftController } from '../../../../controllers/ecommerce'
10
14
  import { Worksheet, WorksheetDetail } from '../../../../entities'
11
- import { EcommerceController } from '../../../../controllers/ecommerce'
12
15
 
13
16
  export const completeUnloadingResolver = {
14
17
  async completeUnloading(_: any, { arrivalNoticeNo, worksheetDetails }, context: any) {
@@ -17,7 +20,17 @@ export const completeUnloadingResolver = {
17
20
 
18
21
  const arrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({
19
22
  where: { domain, name: arrivalNoticeNo },
20
- relations: ['bizplace', 'bizplace.company', 'bizplace.company.domain', 'orderProducts', 'orderProducts.product']
23
+ relations: [
24
+ 'purchaseOrder',
25
+ 'bizplace',
26
+ 'bizplace.domain',
27
+ 'bizplace.company',
28
+ 'bizplace.company.domain',
29
+ 'orderProducts',
30
+ 'orderProducts.product',
31
+ 'orderProducts.product.productDetails',
32
+ 'orderProducts.product.productDetails.childProductDetail'
33
+ ]
21
34
  })
22
35
 
23
36
  const putawayWSCtrl: PutawayWorksheetController = new PutawayWorksheetController(tx, domain, user)
@@ -29,11 +42,21 @@ export const completeUnloadingResolver = {
29
42
 
30
43
  // search for any active marketplace connection
31
44
  const companyDomain: Domain = arrivalNotice.bizplace.company.domain
45
+ const customerDomain: Domain = arrivalNotice.bizplace.domain
32
46
  const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
33
47
  where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },
34
48
  relations: ['marketplaceDistributors']
35
49
  })
36
50
 
51
+ const sellercraft: Sellercraft = await tx
52
+ .getRepository(Sellercraft)
53
+ .findOne({ domain: customerDomain, status: SellercraftStatus.ACTIVE })
54
+
55
+ if (sellercraft) {
56
+ const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
57
+ await sellercraftCtrl.registerProductInbound(sellercraft, arrivalNotice)
58
+ }
59
+
37
60
  if (marketplaceStores?.length && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
38
61
  const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
39
62
  await ecommerceCtrl.updateProductVariationStock(marketplaceStores, arrivalNotice.orderProducts, companyDomain)
@@ -1,10 +1,14 @@
1
+ import { EntityManager } from 'typeorm'
2
+
1
3
  import { User } from '@things-factory/auth-base'
4
+ import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
2
5
  import { ReturnOrder } from '@things-factory/sales-base'
3
6
  import { Domain } from '@things-factory/shell'
4
7
  import { Inventory, INVENTORY_STATUS } from '@things-factory/warehouse-base'
5
- import { EntityManager } from 'typeorm'
8
+
6
9
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
7
10
  import { PutawayReturningWorksheetController, UnloadingReturningWorksheetController } from '../../../../controllers'
11
+ import { SellercraftController } from '../../../../controllers/ecommerce'
8
12
  import { Worksheet, WorksheetDetail } from '../../../../entities'
9
13
 
10
14
  export const completeUnloadReturningResolver = {
@@ -14,9 +18,26 @@ export const completeUnloadReturningResolver = {
14
18
 
15
19
  const returnOrder: ReturnOrder = await tx.getRepository(ReturnOrder).findOne({
16
20
  where: { domain, name: returnOrderNo },
17
- relations: ['bizplace']
21
+ relations: [
22
+ 'bizplace',
23
+ 'bizplace.domain',
24
+ 'orderInventories',
25
+ 'orderInventories.inventory',
26
+ 'orderInventories.product',
27
+ 'orderInventories.product.productDetails'
28
+ ]
18
29
  })
19
30
 
31
+ const customerDomain: Domain = returnOrder.bizplace.domain
32
+ const sellercraft: Sellercraft = await tx
33
+ .getRepository(Sellercraft)
34
+ .findOne({ domain: customerDomain, status: SellercraftStatus.ACTIVE })
35
+
36
+ if (sellercraft) {
37
+ const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
38
+ await sellercraftCtrl.registerProductReturn(sellercraft, returnOrder)
39
+ }
40
+
20
41
  const putawayWSCtrl: PutawayReturningWorksheetController = new PutawayReturningWorksheetController(tx, domain, user)
21
42
  let putawayWorksheet: Worksheet
22
43