@things-factory/worksheet-base 4.3.76 → 4.3.79-alpha.0

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 (64) hide show
  1. package/dist-server/controllers/outbound/packing-worksheet-controller.js +14 -2
  2. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  3. package/dist-server/controllers/outbound/picking-worksheet-controller.js +6 -9
  4. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  5. package/dist-server/controllers/worksheet-controller.js +14 -1
  6. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  7. package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js +12 -0
  8. package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js.map +1 -1
  9. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js +3 -3
  10. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -1
  11. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +4 -4
  12. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
  13. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +67 -28
  14. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
  15. package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js +23 -8
  16. package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js.map +1 -1
  17. package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js +30 -7
  18. package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js.map +1 -1
  19. package/dist-server/graphql/resolvers/worksheet/packing/packing.js +23 -8
  20. package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
  21. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +25 -8
  22. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
  23. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +112 -22
  24. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  25. package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js +87 -79
  26. package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js.map +1 -1
  27. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +51 -25
  28. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
  29. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +2 -2
  30. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  31. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +266 -140
  32. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  33. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +39 -14
  34. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -1
  35. package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js +92 -150
  36. package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js.map +1 -1
  37. package/dist-server/graphql/types/worksheet/index.js +5 -2
  38. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  39. package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js +11 -0
  40. package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js.map +1 -0
  41. package/dist-server/utils/worksheet-util.js +3 -1
  42. package/dist-server/utils/worksheet-util.js.map +1 -1
  43. package/package.json +17 -17
  44. package/server/controllers/outbound/packing-worksheet-controller.ts +21 -2
  45. package/server/controllers/outbound/picking-worksheet-controller.ts +7 -11
  46. package/server/controllers/worksheet-controller.ts +25 -2
  47. package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +13 -0
  48. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +3 -7
  49. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +5 -4
  50. package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +77 -33
  51. package/server/graphql/resolvers/worksheet/packing/activate-packing.ts +26 -9
  52. package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +34 -9
  53. package/server/graphql/resolvers/worksheet/packing/packing.ts +26 -9
  54. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +28 -9
  55. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +128 -23
  56. package/server/graphql/resolvers/worksheet/pending-cancellation-release-order.ts +99 -94
  57. package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +60 -30
  58. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +2 -2
  59. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +288 -149
  60. package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +45 -15
  61. package/server/graphql/resolvers/worksheet/reject-cancellation-release-order.ts +98 -213
  62. package/server/graphql/types/worksheet/index.ts +5 -2
  63. package/server/graphql/types/worksheet/multiple-release-good-worksheet.ts +8 -0
  64. package/server/utils/worksheet-util.ts +3 -1
@@ -24,6 +24,7 @@ export const pendingCancellationReleaseOrder = {
24
24
  relations: ['bizplace', 'orderInventories', 'orderVass']
25
25
  })
26
26
 
27
+ if (foundRO.status === "DONE") throw new Error('Release good has been completed!')
27
28
  if (!foundRO) throw new Error(`Release good order doesn't exists.`)
28
29
  let targetOIs: OrderInventory[] = foundRO.orderInventories
29
30
  let foundOVs: OrderVas[] = foundRO.orderVass
@@ -94,77 +95,81 @@ export const pendingCancellationReleaseOrder = {
94
95
  await tx.getRepository(OrderVas).save(foundOVs)
95
96
  }
96
97
 
97
- if (pickedOIs && pickedOIs.length) {
98
- let pickedWSD: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
99
- where: {
100
- domain,
101
- targetInventory: In(pickedOIs.map(oi => oi.id)),
102
- status: ORDER_INVENTORY_STATUS.DONE
103
- }
104
- })
98
+ // find worksheet and update status to PENDING_CANCEL
99
+ let foundWS: Worksheet = await tx.getRepository(Worksheet).findOne({
100
+ where: {
101
+ domain,
102
+ releaseGood: foundRO
103
+ },
104
+ order: { 'createdAt': 'DESC' }
105
+ })
105
106
 
106
- pickedWSD = pickedWSD.map((wsd: WorksheetDetail) => {
107
- return {
108
- ...wsd,
109
- status: ORDER_INVENTORY_STATUS.PENDING_CANCEL,
110
- updater: user
111
- }
112
- })
113
- await tx.getRepository(WorksheetDetail).save(pickedWSD)
114
-
115
- let replacedWSD: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
116
- where: {
117
- domain,
118
- targetInventory: In(pickedOIs.map(oi => oi.id)),
119
- status: ORDER_INVENTORY_STATUS.REPLACED
120
- },
121
- relations: ['targetInventory']
107
+ if (foundWS) {
108
+ await tx.getRepository(Worksheet).update({ id: foundWS.id }, {
109
+ status: ORDER_INVENTORY_STATUS.PENDING_CANCEL,
110
+ updater: user
122
111
  })
123
112
 
124
- if (replacedWSD && replacedWSD.length) {
125
- let replacedOI: OrderInventory[] = replacedWSD.map((wsd: WorksheetDetail) => wsd.targetInventory)
126
- replacedOI = replacedOI.map((oi: OrderInventory) => {
113
+ if (pickedOIs && pickedOIs.length) {
114
+ let pickedWSD: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
115
+ where: {
116
+ domain,
117
+ targetInventory: In(pickedOIs.map(oi => oi.id)),
118
+ status: ORDER_INVENTORY_STATUS.DONE,
119
+ worksheet: foundWS
120
+ }
121
+ })
122
+
123
+ pickedWSD = pickedWSD.map((wsd: WorksheetDetail) => {
127
124
  return {
128
- ...oi,
129
- status: ORDER_INVENTORY_STATUS.REPLACED,
125
+ ...wsd,
126
+ status: ORDER_INVENTORY_STATUS.PENDING_CANCEL,
130
127
  updater: user
131
128
  }
132
129
  })
133
- await tx.getRepository(OrderInventory).save(replacedOI)
134
- }
135
- }
130
+ await tx.getRepository(WorksheetDetail).save(pickedWSD)
136
131
 
137
- if (pickingOIs && pickingOIs.length) {
138
- let pickingWSD: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
139
- where: { domain, targetInventory: In(pickingOIs.map(oi => oi.id)) }
140
- })
132
+ let replacedWSD: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
133
+ where: {
134
+ domain,
135
+ targetInventory: In(pickedOIs.map(oi => oi.id)),
136
+ status: ORDER_INVENTORY_STATUS.REPLACED,
137
+ worksheet: foundWS
138
+ },
139
+ relations: ['targetInventory']
140
+ })
141
141
 
142
- pickingWSD = pickingWSD.map((wsd: WorksheetDetail) => {
143
- return {
144
- ...wsd,
145
- status: ORDER_INVENTORY_STATUS.PENDING_CANCEL,
146
- updater: user
142
+ if (replacedWSD && replacedWSD.length) {
143
+ let replacedOI: OrderInventory[] = replacedWSD.map((wsd: WorksheetDetail) => wsd.targetInventory)
144
+ replacedOI = replacedOI.map((oi: OrderInventory) => {
145
+ return {
146
+ ...oi,
147
+ status: ORDER_INVENTORY_STATUS.REPLACED,
148
+ updater: user
149
+ }
150
+ })
151
+ await tx.getRepository(OrderInventory).save(replacedOI)
147
152
  }
148
- })
149
- await tx.getRepository(WorksheetDetail).save(pickingWSD)
150
- }
151
-
152
- // find worksheet and update status to PENDING_CANCEL
153
- let foundWS: Worksheet[] = await tx.getRepository(Worksheet).find({
154
- where: {
155
- domain,
156
- releaseGood: foundRO
157
153
  }
158
- })
159
154
 
160
- foundWS = foundWS.map((ws: Worksheet) => {
161
- return {
162
- ...ws,
163
- status: ORDER_INVENTORY_STATUS.PENDING_CANCEL,
164
- updater: user
155
+ if (pickingOIs && pickingOIs.length) {
156
+ let pickingWSD: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
157
+ where: {
158
+ domain, targetInventory: In(pickingOIs.map(oi => oi.id)),
159
+ worksheet: foundWS
160
+ }
161
+ })
162
+
163
+ pickingWSD = pickingWSD.map((wsd: WorksheetDetail) => {
164
+ return {
165
+ ...wsd,
166
+ status: ORDER_INVENTORY_STATUS.PENDING_CANCEL,
167
+ updater: user
168
+ }
169
+ })
170
+ await tx.getRepository(WorksheetDetail).save(pickingWSD)
165
171
  }
166
- })
167
- await tx.getRepository(Worksheet).save(foundWS)
172
+ }
168
173
 
169
174
  // find DO and change status to pending cancel
170
175
  let foundDO: DeliveryOrder[] = await tx.getRepository(DeliveryOrder).find({
@@ -186,43 +191,43 @@ export const pendingCancellationReleaseOrder = {
186
191
  updater: user
187
192
  })
188
193
 
189
- // notification logics
190
- // get Office Admin Users
191
- const users: any[] = await tx
192
- .getRepository('users_roles')
193
- .createQueryBuilder('ur')
194
- .select('ur.users_id', 'id')
195
- .where(qb => {
196
- const subQuery = qb
197
- .subQuery()
198
- .select('role.id')
199
- .from(Role, 'role')
200
- .where("role.name = 'Office Admin'")
201
- .andWhere('role.domain_id = :domain', { domain: domain.id })
202
- .getQuery()
203
- return 'ur.roles_id IN ' + subQuery
204
- })
205
- .getRawMany()
206
-
207
- // send notification to Office Admin Users
208
- if (users?.length && context.header?.referer) {
209
- const receivers: any[] = users.map(user => user.id)
210
- const msg = {
211
- title: `${foundRO.name} cancellation`,
212
- body: `${customerBizplace.name} is requesting to cancel order`,
213
- url: context.header.referer,
214
- data: { url: context.header.referer }
215
- }
216
-
217
- /**
218
- * @notes Temporary off sendNotification due to suspect of causing wms down
219
- */
220
194
 
221
- // await sendNotification({
222
- // receivers,
223
- // message: { ...msg }
224
- // })
225
- }
195
+ /**
196
+ * @notes Temporary off sendNotification due to suspect of causing wms down
197
+ */
198
+ // // notification logics
199
+ // // get Office Admin Users
200
+ // const users: any[] = await tx
201
+ // .getRepository('users_roles')
202
+ // .createQueryBuilder('ur')
203
+ // .select('ur.users_id', 'id')
204
+ // .where(qb => {
205
+ // const subQuery = qb
206
+ // .subQuery()
207
+ // .select('role.id')
208
+ // .from(Role, 'role')
209
+ // .where("role.name = 'Office Admin'")
210
+ // .andWhere('role.domain_id = :domain', { domain: domain.id })
211
+ // .getQuery()
212
+ // return 'ur.roles_id IN ' + subQuery
213
+ // })
214
+ // .getRawMany()
215
+
216
+ // // send notification to Office Admin Users
217
+ // if (users?.length && context.header?.referer) {
218
+ // const receivers: any[] = users.map(user => user.id)
219
+ // const msg = {
220
+ // title: `${foundRO.name} cancellation`,
221
+ // body: `${customerBizplace.name} is requesting to cancel order`,
222
+ // url: context.header.referer,
223
+ // data: { url: context.header.referer }
224
+ // }
225
+
226
+ // await sendNotification({
227
+ // receivers,
228
+ // message: { ...msg }
229
+ // })
230
+ // }
226
231
 
227
232
  return
228
233
  }
@@ -1,8 +1,7 @@
1
1
  import { EntityManager } from 'typeorm'
2
2
 
3
- import { User } from '@things-factory/auth-base'
3
+ import { ApplicationType, User } from '@things-factory/auth-base'
4
4
  import { MarketplaceStore } from '@things-factory/integration-marketplace'
5
- import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
6
5
  import { MarketplaceOrder } from '@things-factory/marketplace-base'
7
6
  import { ORDER_STATUS, ReleaseGood } from '@things-factory/sales-base'
8
7
  import { Domain } from '@things-factory/shell'
@@ -27,42 +26,73 @@ export async function activatePicking(
27
26
  const worksheet = await worksheetController.activatePicking(worksheetNo)
28
27
  const companyDomain: Domain = worksheet?.bizplace.company.domain
29
28
 
30
- // find for any existing marketplace store connections
31
- const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
32
- where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },
33
- relations: ['marketplaceDistributors']
34
- })
35
-
36
29
  let releaseGood: ReleaseGood = worksheet.releaseGood
37
30
 
38
- if (releaseGood.type === 'b2c') {
39
- const sellercraft: Sellercraft = await tx
40
- .getRepository(Sellercraft)
41
- .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
42
-
43
- if (marketplaceStores?.length && !sellercraft) {
44
- if (marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
45
- const worksheetDetails = worksheet.worksheetDetails
46
- let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
47
- const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
48
- await ecommerceCtrl.updateProductVariationStock(marketplaceStores, orderInventories, companyDomain)
49
- }
50
-
51
- const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
52
- where: { orderNo: releaseGood.refNo, domain: companyDomain },
53
- relations: ['marketplaceStore']
31
+ const orderSource: string = releaseGood.source
32
+ switch (orderSource) {
33
+ case ApplicationType.MMS:
34
+ // find for any existing marketplace store connections
35
+ const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
36
+ where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },
37
+ relations: ['marketplaceDistributors']
54
38
  })
55
39
 
56
- if (marketplaceOrder) {
57
- const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
58
-
59
- if (marketplaceStore.isAutoUpdateShipment) {
40
+ if (marketplaceStores?.length) {
41
+ if (marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
42
+ const worksheetDetails = worksheet.worksheetDetails
43
+ let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
60
44
  const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
61
- await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
45
+ await ecommerceCtrl.updateProductVariationStock(marketplaceStores, orderInventories, companyDomain)
46
+ }
47
+
48
+ const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
49
+ where: { orderNo: releaseGood.refNo, domain: companyDomain },
50
+ relations: ['marketplaceStore']
51
+ })
52
+
53
+ if (marketplaceOrder) {
54
+ const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
55
+
56
+ if (marketplaceStore.isAutoUpdateShipment) {
57
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
58
+ await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
59
+ }
62
60
  }
63
61
  }
64
- }
62
+ break
63
+
64
+ default:
65
+ break
65
66
  }
66
67
 
68
+ // if (releaseGood.type === 'b2c') {
69
+ // const sellercraft: Sellercraft = await tx
70
+ // .getRepository(Sellercraft)
71
+ // .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
72
+
73
+ // if (marketplaceStores?.length && !sellercraft) {
74
+ // if (marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
75
+ // const worksheetDetails = worksheet.worksheetDetails
76
+ // let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
77
+ // const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
78
+ // await ecommerceCtrl.updateProductVariationStock(marketplaceStores, orderInventories, companyDomain)
79
+ // }
80
+
81
+ // const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
82
+ // where: { orderNo: releaseGood.refNo, domain: companyDomain },
83
+ // relations: ['marketplaceStore']
84
+ // })
85
+
86
+ // if (marketplaceOrder) {
87
+ // const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
88
+
89
+ // if (marketplaceStore.isAutoUpdateShipment) {
90
+ // const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
91
+ // await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
92
+ // }
93
+ // }
94
+ // }
95
+ // }
96
+
67
97
  return worksheet
68
98
  }
@@ -69,7 +69,7 @@ export async function completeBatchPicking(
69
69
 
70
70
  let foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
71
71
  where: { id: releaseGood.id },
72
- relations: ['orderProducts', 'orderProducts.product', 'orderProducts.product.productDetails']
72
+ relations: ['orderProducts', 'orderProducts.product']
73
73
  })
74
74
 
75
75
  if (!foundReleaseGood?.packageId) {
@@ -112,7 +112,7 @@ export async function completeBatchPicking(
112
112
  })
113
113
 
114
114
  // loop to generate packing worksheet
115
- for (var i: number = 0; i < uniqueRoNo.length; i++) {
115
+ for (let i: number = 0; i < uniqueRoNo.length; i++) {
116
116
  const releaseGoodNo: string = uniqueRoNo[i]
117
117
  const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
118
118
  await packingWSCtrl.generatePackingWorksheet(releaseGoodNo)