@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.
- package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js +1 -3
- package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/inbound/putaway-worksheet-controller.js +1 -3
- package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +13 -16
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +17 -9
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +0 -4
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +118 -146
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +216 -245
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +4 -12
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -1
- package/dist-server/utils/inventory-util.js +1 -29
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +18 -18
- package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +1 -3
- package/server/controllers/inbound/putaway-worksheet-controller.ts +1 -3
- package/server/controllers/outbound/picking-worksheet-controller.ts +15 -23
- package/server/controllers/worksheet-controller.ts +17 -13
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +0 -7
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +131 -168
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +237 -272
- package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +7 -17
- package/server/utils/inventory-util.ts +0 -36
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EntityManager, getManager
|
|
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
|
-
|
|
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 {
|
|
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<
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
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
|
-
|
|
165
|
-
|
|
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
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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
|
-
|
|
207
|
-
|
|
208
|
-
|
|
181
|
+
const pickSortTargetInventories: OrderInventory[] = targetInventories
|
|
182
|
+
.filter(targetInventory => !targetInventory.releaseGood.packingOption)
|
|
183
|
+
.map((pickSortTargetInventory: OrderInventory) => {
|
|
184
|
+
return pickSortTargetInventory
|
|
185
|
+
})
|
|
209
186
|
|
|
210
|
-
|
|
211
|
-
|
|
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
|
-
|
|
216
|
-
|
|
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
|
-
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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
|
}
|