@things-factory/worksheet-base 4.3.156 → 4.3.159

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js +1 -3
  2. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js.map +1 -1
  3. package/dist-server/controllers/inbound/putaway-worksheet-controller.js +1 -3
  4. package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
  5. package/dist-server/controllers/outbound/picking-worksheet-controller.js +13 -16
  6. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/worksheet-controller.js +17 -9
  8. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  9. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +0 -4
  10. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  11. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +118 -146
  12. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  13. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +216 -245
  14. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  15. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +4 -12
  16. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -1
  17. package/dist-server/utils/inventory-util.js +1 -29
  18. package/dist-server/utils/inventory-util.js.map +1 -1
  19. package/package.json +18 -18
  20. package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +1 -3
  21. package/server/controllers/inbound/putaway-worksheet-controller.ts +1 -3
  22. package/server/controllers/outbound/picking-worksheet-controller.ts +15 -23
  23. package/server/controllers/worksheet-controller.ts +17 -13
  24. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +0 -7
  25. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +131 -168
  26. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +237 -272
  27. package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +7 -17
  28. package/server/utils/inventory-util.ts +0 -36
@@ -1,4 +1,4 @@
1
- import { EntityManager, getManager, In } from 'typeorm'
1
+ import { EntityManager, getManager } from 'typeorm'
2
2
 
3
3
  import { ApplicationType, User } from '@things-factory/auth-base'
4
4
  import { Bizplace, getMyBizplace } from '@things-factory/biz-base'
@@ -14,10 +14,9 @@ import {
14
14
  ReleaseGood,
15
15
  OrderProduct
16
16
  } from '@things-factory/sales-base'
17
- import { Inventory } from '@things-factory/warehouse-base'
18
17
  import { Setting } from '@things-factory/setting-base'
19
18
  import { Domain } from '@things-factory/shell'
20
- import { WORKSHEET_STATUS } from '../../../../constants'
19
+
21
20
  import {
22
21
  PackingWorksheetController,
23
22
  PickingWorksheetController,
@@ -26,7 +25,7 @@ import {
26
25
  } from '../../../../controllers/'
27
26
  import { EcommerceController } from '../../../../controllers/ecommerce'
28
27
  import { WorksheetController } from '../../../../controllers/worksheet-controller'
29
- import { Worksheet, WorksheetDetail } from '../../../../entities'
28
+ import { WorksheetDetail } from '../../../../entities'
30
29
 
31
30
  export const completeBatchPickingResolver = {
32
31
  async completeBatchPicking(_: any, { taskNo }, context: any) {
@@ -50,7 +49,7 @@ export async function completeBatchPicking(
50
49
  domain: Domain,
51
50
  user: User,
52
51
  taskNo: string
53
- ): Promise<any> {
52
+ ): Promise<void> {
54
53
  const pickingWSCtrl: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
55
54
  const worksheet = await pickingWSCtrl.completeBatchPicking(taskNo)
56
55
 
@@ -62,187 +61,151 @@ export async function completeBatchPicking(
62
61
  const releaseGoods: ReleaseGood[] = worksheetDetails.map(
63
62
  worksheetDetail => worksheetDetail.targetInventory && worksheetDetail.targetInventory.releaseGood
64
63
  )
65
-
66
- if (worksheet?.type) {
67
- const uniqueReleaseGoods: ReleaseGood[] = []
68
- const map = new Map()
69
- for (const releaseGood of releaseGoods) {
70
- if (!map.has(releaseGood.id)) {
71
- map.set(releaseGood.id, true)
72
- uniqueReleaseGoods.push({ ...releaseGood })
73
- }
64
+ const uniqueReleaseGoods: ReleaseGood[] = []
65
+ const map = new Map()
66
+ for (const releaseGood of releaseGoods) {
67
+ if (!map.has(releaseGood.id)) {
68
+ map.set(releaseGood.id, true)
69
+ uniqueReleaseGoods.push({ ...releaseGood })
74
70
  }
71
+ }
75
72
 
76
- for (let i = 0; i < uniqueReleaseGoods.length; i++) {
77
- let foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
78
- where: { id: uniqueReleaseGoods[i].id },
79
- relations: [
80
- 'domain',
81
- 'creator',
82
- 'updater',
83
- 'orderPackages',
84
- 'orderProducts',
85
- 'orderProducts.product',
86
- 'bizplace',
87
- 'bizplace.company',
88
- 'bizplace.company.domain'
89
- ]
90
- })
91
- const orderSource: string = foundReleaseGood.source
92
- switch (orderSource) {
93
- case ApplicationType.SELLERCRAFT:
94
- const sellercraft: Sellercraft = await tx
95
- .getRepository(Sellercraft)
96
- .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
97
-
98
- if (sellercraft) {
99
- const initSCOrderShipment = async (sellercraft: Sellercraft, foundReleaseGood: ReleaseGood) => {
100
- await getManager().transaction(async txMgr => {
101
- const sellercraftCtrl: SellercraftController = new SellercraftController(txMgr, domain, user)
102
-
103
- if (!foundReleaseGood?.orderPackages?.length && !foundReleaseGood?.marketPackCallSuccess) {
104
- await sellercraftCtrl.packOrder(sellercraft, foundReleaseGood)
105
- }
106
-
107
- const rtsTriggerLevel: Setting = await tx.getRepository(Setting).findOne({
108
- where: { domain, category: 'id-rule', name: 'rts-trigger-level' }
109
- })
110
-
111
- if (rtsTriggerLevel && parseInt(rtsTriggerLevel?.value || 0) == 1) {
112
- await sellercraftCtrl.initiateOrderShipment(sellercraft, foundReleaseGood)
113
- }
73
+ for (let i = 0; i < uniqueReleaseGoods.length; i++) {
74
+ let foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
75
+ where: { id: uniqueReleaseGoods[i].id },
76
+ relations: [
77
+ 'domain',
78
+ 'creator',
79
+ 'updater',
80
+ 'orderPackages',
81
+ 'orderProducts',
82
+ 'orderProducts.product',
83
+ 'bizplace',
84
+ 'bizplace.company',
85
+ 'bizplace.company.domain'
86
+ ]
87
+ })
88
+ const orderSource: string = foundReleaseGood.source
89
+ switch (orderSource) {
90
+ case ApplicationType.SELLERCRAFT:
91
+ const sellercraft: Sellercraft = await tx
92
+ .getRepository(Sellercraft)
93
+ .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
94
+
95
+ if (sellercraft) {
96
+ const initSCOrderShipment = async (sellercraft: Sellercraft, foundReleaseGood: ReleaseGood) => {
97
+ await getManager().transaction(async txMgr => {
98
+ const sellercraftCtrl: SellercraftController = new SellercraftController(txMgr, domain, user)
99
+
100
+ if (!foundReleaseGood?.orderPackages?.length && !foundReleaseGood?.marketPackCallSuccess) {
101
+ await sellercraftCtrl.packOrder(sellercraft, foundReleaseGood)
102
+ }
103
+
104
+ const rtsTriggerLevel: Setting = await tx.getRepository(Setting).findOne({
105
+ where: { domain, category: 'id-rule', name: 'rts-trigger-level' }
114
106
  })
115
- }
116
107
 
117
- // asynchronouly call to initiate sellercraft order shipment/ RTS
118
- initSCOrderShipment(sellercraft, foundReleaseGood)
119
- }
120
- break
121
-
122
- case ApplicationType.MMS:
123
- const companyDomain: Domain = foundReleaseGood.bizplace.company.domain
124
- const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
125
- where: { orderNo: foundReleaseGood.refNo, domain: companyDomain },
126
- relations: [
127
- 'marketplaceOrderItems',
128
- 'marketplaceOrderItems.marketplaceOrderShippingItems',
129
- 'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping',
130
- 'marketplaceStore',
131
- 'marketplaceStore.marketplaceDistributors'
132
- ]
133
- })
134
- const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
135
-
136
- const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
137
- if (marketplaceStore?.isAutoUpdateShipment) {
138
- await ecommerceCtrl.createOrderShip(foundReleaseGood, marketplaceStore, marketplaceOrder, companyDomain)
108
+ if (rtsTriggerLevel && parseInt(rtsTriggerLevel?.value || 0) == 1) {
109
+ await sellercraftCtrl.initiateOrderShipment(sellercraft, foundReleaseGood)
110
+ }
111
+ })
139
112
  }
140
- await ecommerceCtrl.createOrderPackage(
141
- tx,
142
- marketplaceOrder,
143
- companyDomain,
144
- marketplaceStore,
145
- foundReleaseGood
146
- )
147
- break
148
-
149
- default:
150
- const orderPackage: OrderPackage = {
151
- name: OrderNoGenerator.orderPackage(),
152
- packageId: null,
153
- trackingNo: null,
154
- transporter: null,
155
- airwayBill: null,
113
+
114
+ // asynchronouly call to initiate sellercraft order shipment/ RTS
115
+ initSCOrderShipment(sellercraft, foundReleaseGood)
116
+ }
117
+ break
118
+
119
+ case ApplicationType.MMS:
120
+ const companyDomain: Domain = foundReleaseGood.bizplace.company.domain
121
+ const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
122
+ where: { orderNo: foundReleaseGood.refNo, domain: companyDomain },
123
+ relations: [
124
+ 'marketplaceOrderItems',
125
+ 'marketplaceOrderItems.marketplaceOrderShippingItems',
126
+ 'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping',
127
+ 'marketplaceStore',
128
+ 'marketplaceStore.marketplaceDistributors'
129
+ ]
130
+ })
131
+ const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
132
+
133
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
134
+ if (marketplaceStore?.isAutoUpdateShipment) {
135
+ await ecommerceCtrl.createOrderShip(foundReleaseGood, marketplaceStore, marketplaceOrder, companyDomain)
136
+ }
137
+ await ecommerceCtrl.createOrderPackage(tx, marketplaceOrder, companyDomain, marketplaceStore, foundReleaseGood)
138
+ break
139
+
140
+ default:
141
+ const orderPackage: OrderPackage = {
142
+ name: OrderNoGenerator.orderPackage(),
143
+ packageId: null,
144
+ trackingNo: null,
145
+ transporter: null,
146
+ airwayBill: null,
147
+ status: ORDER_STATUS.PROCESSING,
148
+ releaseGood: foundReleaseGood,
149
+ domain: foundReleaseGood.domain,
150
+ bizplace: foundReleaseGood.bizplace,
151
+ creator: foundReleaseGood.creator,
152
+ updater: foundReleaseGood.updater
153
+ }
154
+
155
+ let savedOrderPackage: OrderPackage = await tx.getRepository(OrderPackage).save(orderPackage)
156
+ const orderPackageItems: OrderPackageItem[] = foundReleaseGood.orderProducts.map(op => {
157
+ return {
158
+ name: OrderNoGenerator.orderPackageItem(),
159
+ orderProduct: op,
156
160
  status: ORDER_STATUS.PROCESSING,
157
- releaseGood: foundReleaseGood,
161
+ releaseQty: op.releaseQty,
162
+ orderPackage: savedOrderPackage,
158
163
  domain: foundReleaseGood.domain,
159
164
  bizplace: foundReleaseGood.bizplace,
160
165
  creator: foundReleaseGood.creator,
161
166
  updater: foundReleaseGood.updater
162
167
  }
168
+ })
163
169
 
164
- let savedOrderPackage: OrderPackage = await tx.getRepository(OrderPackage).save(orderPackage)
165
- const orderPackageItems: OrderPackageItem[] = foundReleaseGood.orderProducts.map(op => {
166
- return {
167
- name: OrderNoGenerator.orderPackageItem(),
168
- orderProduct: op,
169
- status: ORDER_STATUS.PROCESSING,
170
- releaseQty: op.releaseQty,
171
- orderPackage: savedOrderPackage,
172
- domain: foundReleaseGood.domain,
173
- bizplace: foundReleaseGood.bizplace,
174
- creator: foundReleaseGood.creator,
175
- updater: foundReleaseGood.updater
176
- }
177
- })
178
-
179
- await tx.getRepository(OrderPackageItem).save(orderPackageItems)
180
- break
181
- }
170
+ await tx.getRepository(OrderPackageItem).save(orderPackageItems)
171
+ break
182
172
  }
173
+ }
183
174
 
184
- const pickPackTargetInventories: OrderInventory[] = targetInventories
185
- .filter(targetInventory => targetInventory.releaseGood.packingOption)
186
- .map((pickPackTargetInventory: OrderInventory) => {
187
- return pickPackTargetInventory
188
- })
189
-
190
- const pickSortTargetInventories: OrderInventory[] = targetInventories
191
- .filter(targetInventory => !targetInventory.releaseGood.packingOption)
192
- .map((pickSortTargetInventory: OrderInventory) => {
193
- return pickSortTargetInventory
194
- })
195
-
196
- if (pickPackTargetInventories?.length) {
197
- // pull out all unique RO
198
- const roNoList: string[] = pickPackTargetInventories.map((oi: OrderInventory) => oi.releaseGood.name)
199
- let uniqueRoNo: string[] = []
200
- roNoList.forEach(roNo => {
201
- if (!uniqueRoNo.includes(roNo)) {
202
- uniqueRoNo.push(roNo)
203
- }
204
- })
175
+ const pickPackTargetInventories: OrderInventory[] = targetInventories
176
+ .filter(targetInventory => targetInventory.releaseGood.packingOption)
177
+ .map((pickPackTargetInventory: OrderInventory) => {
178
+ return pickPackTargetInventory
179
+ })
205
180
 
206
- // loop to generate packing worksheet
207
- for (let i: number = 0; i < uniqueRoNo.length; i++) {
208
- const releaseGoodNo: string = uniqueRoNo[i]
181
+ const pickSortTargetInventories: OrderInventory[] = targetInventories
182
+ .filter(targetInventory => !targetInventory.releaseGood.packingOption)
183
+ .map((pickSortTargetInventory: OrderInventory) => {
184
+ return pickSortTargetInventory
185
+ })
209
186
 
210
- const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
211
- await packingWSCtrl.generatePackingWorksheet(releaseGoodNo)
187
+ if (pickPackTargetInventories?.length) {
188
+ // pull out all unique RO
189
+ const roNoList: string[] = pickPackTargetInventories.map((oi: OrderInventory) => oi.releaseGood.name)
190
+ let uniqueRoNo: string[] = []
191
+ roNoList.forEach(roNo => {
192
+ if (!uniqueRoNo.includes(roNo)) {
193
+ uniqueRoNo.push(roNo)
212
194
  }
213
- }
195
+ })
196
+
197
+ // loop to generate packing worksheet
198
+ for (let i: number = 0; i < uniqueRoNo.length; i++) {
199
+ const releaseGoodNo: string = uniqueRoNo[i]
214
200
 
215
- // loop to generate sorting worksheet
216
- if (pickSortTargetInventories?.length) {
217
- const sortingWSCtrl: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
218
- await sortingWSCtrl.generateSortingWorksheet(worksheet, pickSortTargetInventories)
201
+ const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
202
+ await packingWSCtrl.generatePackingWorksheet(releaseGoodNo)
219
203
  }
220
- } else {
221
- let foundObsoleteInventories: any = worksheet
222
- await tx.getRepository(Inventory).update({ id: In(foundObsoleteInventories) }, { obsolete: true })
223
-
224
- foundObsoleteInventories = foundObsoleteInventories
225
- .map(inv => {
226
- return "'" + inv.trim() + "'"
227
- })
228
- .join(',')
229
-
230
- //update any orders that is assigned with obsolete inventories
231
- await tx.getRepository(ReleaseGood).query(`
232
- update release_goods rg set status = 'OBSOLETE'
233
- from order_inventories oi
234
- where oi.release_good_id = rg.id
235
- and oi.inventory_id in (${foundObsoleteInventories})
236
- and rg.status in ('PICKING', 'PENDING_WORKSHEET', 'READY_TO_PICK')`)
237
-
238
- await tx.getRepository(Worksheet).query(`
239
- update worksheets w set status = 'DEACTIVATED', updater_id = '${user.id}', assignee_id = null
240
- from worksheet_details wd
241
- inner join order_inventories oi on oi.id = wd.target_inventory_id
242
- where wd.worksheet_id = w.id
243
- and oi.inventory_id in (${foundObsoleteInventories})
244
- `)
245
-
246
- return false
204
+ }
205
+
206
+ // loop to generate sorting worksheet
207
+ if (pickSortTargetInventories?.length) {
208
+ const sortingWSCtrl: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
209
+ await sortingWSCtrl.generateSortingWorksheet(worksheet, pickSortTargetInventories)
247
210
  }
248
211
  }