@things-factory/worksheet-base 5.0.0-alpha.50 → 5.0.0-alpha.53
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/ecommerce/sellercraft-controller.js +15 -7
- package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
- package/dist-server/controllers/inbound/putaway-worksheet-controller.js +22 -13
- package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js +1 -1
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/loading-worksheet-controller.js +47 -10
- package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +148 -7
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js +116 -20
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/render-grn.js +35 -27
- package/dist-server/controllers/render-grn.js.map +1 -1
- package/dist-server/controllers/render-manifest.js +12 -5
- package/dist-server/controllers/render-manifest.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +8 -1
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/entities/index.js +2 -1
- package/dist-server/entities/index.js.map +1 -1
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +174 -0
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +14 -1
- package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js +17 -0
- package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/index.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +40 -18
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/loading.js +3 -10
- package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +55 -21
- package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +1 -0
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js +2 -5
- package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +8 -6
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/index.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/picking.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/picking/picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +10 -1
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +36 -0
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js +11 -6
- package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +0 -21
- package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheet.js +2 -0
- package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheets.js +19 -4
- package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +9 -3
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js +19 -4
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js +24 -34
- package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +8 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +10 -2
- package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js +2 -5
- package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js.map +1 -1
- package/dist-server/graphql/types/worksheet/index.js +14 -0
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js +1 -0
- package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +2 -0
- package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-info.js +2 -0
- package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet.js +1 -0
- package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/types/worksheet-detail/inventory-detail.js +3 -0
- package/dist-server/graphql/types/worksheet-detail/inventory-detail.js.map +1 -1
- package/dist-server/utils/worksheet-no-generator.js +25 -28
- package/dist-server/utils/worksheet-no-generator.js.map +1 -1
- package/package.json +17 -17
- package/server/controllers/ecommerce/sellercraft-controller.ts +28 -7
- package/server/controllers/inbound/putaway-worksheet-controller.ts +27 -13
- package/server/controllers/inbound/unloading-worksheet-controller.ts +1 -1
- package/server/controllers/outbound/loading-worksheet-controller.ts +83 -17
- package/server/controllers/outbound/picking-worksheet-controller.ts +189 -9
- package/server/controllers/outbound/sorting-worksheet-controller.ts +167 -27
- package/server/controllers/render-grn.ts +46 -37
- package/server/controllers/render-manifest.ts +12 -5
- package/server/controllers/worksheet-controller.ts +14 -1
- package/server/entities/index.ts +2 -1
- package/server/entities/warehouse-bizplace-onhand-inventory.ts +147 -0
- package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +14 -0
- package/server/graphql/resolvers/worksheet/cancel-draft-release-order.ts +27 -0
- package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +2 -1
- package/server/graphql/resolvers/worksheet/index.ts +3 -1
- package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +44 -18
- package/server/graphql/resolvers/worksheet/loading/loading.ts +5 -12
- package/server/graphql/resolvers/worksheet/loading-worksheet.ts +66 -13
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +1 -1
- package/server/graphql/resolvers/worksheet/palletizing-pallets.ts +2 -2
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +1 -1
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +13 -11
- package/server/graphql/resolvers/worksheet/picking/index.ts +3 -1
- package/server/graphql/resolvers/worksheet/picking/picking.ts +30 -4
- package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +7 -4
- package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +25 -0
- package/server/graphql/resolvers/worksheet/picking-worksheet.ts +13 -2
- package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +45 -2
- package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +13 -9
- package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +5 -4
- package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +5 -4
- package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +0 -25
- package/server/graphql/resolvers/worksheet/worksheet.ts +2 -0
- package/server/graphql/resolvers/worksheet/worksheets.ts +28 -4
- package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +21 -3
- package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +39 -11
- package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +46 -49
- package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +11 -1
- package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +18 -1
- package/server/graphql/resolvers/worksheet-movement/create-worksheet-movement.ts +2 -2
- package/server/graphql/types/worksheet/index.ts +14 -0
- package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +1 -0
- package/server/graphql/types/worksheet/worksheet-detail-info.ts +2 -0
- package/server/graphql/types/worksheet/worksheet-info.ts +2 -0
- package/server/graphql/types/worksheet/worksheet.ts +1 -0
- package/server/graphql/types/worksheet-detail/inventory-detail.ts +3 -0
- package/server/utils/worksheet-no-generator.ts +25 -25
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Equal, Not } from 'typeorm'
|
|
1
|
+
import { Equal, Not, In } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { Bizplace } from '@things-factory/biz-base'
|
|
4
4
|
import {
|
|
@@ -8,9 +8,11 @@ import {
|
|
|
8
8
|
ORDER_TYPES,
|
|
9
9
|
OrderInventory,
|
|
10
10
|
OrderNoGenerator,
|
|
11
|
-
ReleaseGood
|
|
11
|
+
ReleaseGood,
|
|
12
|
+
OrderToteItem,
|
|
13
|
+
OrderTote
|
|
12
14
|
} from '@things-factory/sales-base'
|
|
13
|
-
import { Inventory, INVENTORY_TRANSACTION_TYPE } from '@things-factory/warehouse-base'
|
|
15
|
+
import { Inventory, INVENTORY_TRANSACTION_TYPE, Tote, TOTE_STATUS } from '@things-factory/warehouse-base'
|
|
14
16
|
|
|
15
17
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
|
|
16
18
|
import { Worksheet, WorksheetDetail } from '../../entities'
|
|
@@ -95,8 +97,8 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
95
97
|
|
|
96
98
|
async loading(
|
|
97
99
|
releaseGoodNo: string,
|
|
98
|
-
worksheetDetails: Partial<WorksheetDetail & { loadedQty: number }>[]
|
|
99
|
-
): Promise<
|
|
100
|
+
worksheetDetails: Partial<WorksheetDetail & { loadedQty: number } & { toteName: string }>[]
|
|
101
|
+
): Promise<any> {
|
|
100
102
|
const releaseGood: ReleaseGood = await this.findRefOrder(
|
|
101
103
|
ReleaseGood,
|
|
102
104
|
{ domain: this.domain, name: releaseGoodNo },
|
|
@@ -104,14 +106,14 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
104
106
|
)
|
|
105
107
|
const bizplace: Bizplace = releaseGood.bizplace
|
|
106
108
|
|
|
107
|
-
for (let
|
|
108
|
-
const loadedQty: number =
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
'targetInventory.product'
|
|
114
|
-
|
|
109
|
+
for (let i = 0; i < worksheetDetails.length; i++) {
|
|
110
|
+
const loadedQty: number = worksheetDetails[i].loadedQty
|
|
111
|
+
const toteName: string = worksheetDetails[i].toteName
|
|
112
|
+
let worksheetDetail = await this.findExecutableWorksheetDetailByName(
|
|
113
|
+
worksheetDetails[i].name,
|
|
114
|
+
WORKSHEET_TYPE.LOADING,
|
|
115
|
+
['worksheet', 'targetInventory', 'targetInventory.inventory', 'targetInventory.product']
|
|
116
|
+
)
|
|
115
117
|
|
|
116
118
|
const worksheet: Worksheet = worksheetDetail.worksheet
|
|
117
119
|
let targetInventory: OrderInventory = worksheetDetail.targetInventory
|
|
@@ -119,9 +121,9 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
119
121
|
let inventory: Inventory = targetInventory.inventory
|
|
120
122
|
|
|
121
123
|
targetInventory.loadedAt = new Date()
|
|
122
|
-
targetInventory.loadedByUser = this.user
|
|
124
|
+
targetInventory.loadedByUser = this.user
|
|
123
125
|
|
|
124
|
-
let loadedBy: string[] = targetInventory.loadedBy ?
|
|
126
|
+
let loadedBy: string[] = targetInventory.loadedBy ? targetInventory.loadedBy.split(',') : []
|
|
125
127
|
if (!loadedBy.find(x => x == this.user.name)) {
|
|
126
128
|
loadedBy.push(this.user.name)
|
|
127
129
|
targetInventory.loadedBy = loadedBy.join(',')
|
|
@@ -174,11 +176,56 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
174
176
|
newTargetInventory.updater = this.user
|
|
175
177
|
newTargetInventory = await this.trxMgr.getRepository(OrderInventory).save(newTargetInventory)
|
|
176
178
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
+
if (toteName) {
|
|
180
|
+
let foundOrderTote = await this.trxMgr
|
|
181
|
+
.getRepository(OrderTote)
|
|
182
|
+
.findOne({ where: { name: toteName, releaseGood } })
|
|
183
|
+
|
|
184
|
+
let foundOrderToteItems = await this.trxMgr
|
|
185
|
+
.getRepository(OrderToteItem)
|
|
186
|
+
.find({ where: { orderInventory: targetInventory.id } })
|
|
187
|
+
|
|
188
|
+
let foundOrderToteItemIds = foundOrderToteItems.map((itm: OrderToteItem) => itm.id)
|
|
189
|
+
|
|
190
|
+
await this.trxMgr
|
|
191
|
+
.getRepository(OrderToteItem)
|
|
192
|
+
.update({ id: In(foundOrderToteItemIds) }, { orderInventory: newTargetInventory })
|
|
193
|
+
|
|
194
|
+
let foundOrderToteItem: OrderToteItem = await this.trxMgr
|
|
195
|
+
.getRepository(OrderToteItem)
|
|
196
|
+
.findOne({ where: { orderInventory: newTargetInventory.id, orderTote: foundOrderTote, qty: loadedQty } })
|
|
197
|
+
|
|
198
|
+
await this.trxMgr
|
|
199
|
+
.getRepository(OrderToteItem)
|
|
200
|
+
.update({ id: foundOrderToteItem.id }, { orderInventory: targetInventory.id })
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
let newWorksheetDetail: any = await this.createWorksheetDetails(
|
|
204
|
+
worksheet,
|
|
205
|
+
WORKSHEET_TYPE.LOADING,
|
|
206
|
+
[newTargetInventory],
|
|
207
|
+
{
|
|
208
|
+
status: WORKSHEET_STATUS.EXECUTING
|
|
209
|
+
}
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
let worksheetDetailName = worksheetDetails[i].name
|
|
213
|
+
worksheetDetails = worksheetDetails.map(record => {
|
|
214
|
+
if (record.name == worksheetDetailName && !record?.targetInventory) {
|
|
215
|
+
return {
|
|
216
|
+
...record,
|
|
217
|
+
name: newWorksheetDetail[0].name
|
|
218
|
+
}
|
|
219
|
+
} else {
|
|
220
|
+
return record
|
|
221
|
+
}
|
|
179
222
|
})
|
|
223
|
+
|
|
224
|
+
worksheetDetails[i].name = worksheetDetailName
|
|
180
225
|
}
|
|
181
226
|
|
|
227
|
+
worksheetDetails[i].targetInventory = targetInventory
|
|
228
|
+
|
|
182
229
|
await generateInventoryHistory(
|
|
183
230
|
inventory,
|
|
184
231
|
releaseGood,
|
|
@@ -189,6 +236,8 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
189
236
|
this.trxMgr
|
|
190
237
|
)
|
|
191
238
|
}
|
|
239
|
+
|
|
240
|
+
return worksheetDetails
|
|
192
241
|
}
|
|
193
242
|
|
|
194
243
|
async undoLoading(deliveryOrder: Partial<DeliveryOrder>, palletIds: string[]): Promise<void> {
|
|
@@ -228,6 +277,10 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
228
277
|
}
|
|
229
278
|
})
|
|
230
279
|
|
|
280
|
+
let undoOrderToteItem: OrderToteItem = await this.trxMgr
|
|
281
|
+
.getRepository(OrderToteItem)
|
|
282
|
+
.findOne({ where: { orderInventory: undoTargetOrderInventory } })
|
|
283
|
+
|
|
231
284
|
if (prevTargetInventory) {
|
|
232
285
|
// If there's prev target inventory
|
|
233
286
|
// Merge qty and uomValue into prev target inventory
|
|
@@ -236,6 +289,13 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
236
289
|
prevTargetInventory.updater = this.user
|
|
237
290
|
await this.updateOrderTargets([prevTargetInventory])
|
|
238
291
|
|
|
292
|
+
//Update order tote item if any
|
|
293
|
+
if (undoOrderToteItem) {
|
|
294
|
+
undoOrderToteItem.orderInventoryId = prevTargetInventory.id
|
|
295
|
+
undoOrderToteItem.orderInventory = prevTargetInventory
|
|
296
|
+
await this.trxMgr.getRepository(OrderToteItem).save(undoOrderToteItem)
|
|
297
|
+
}
|
|
298
|
+
|
|
239
299
|
// Terminate undo target order inventory
|
|
240
300
|
undoTargetOrderInventory.status = ORDER_INVENTORY_STATUS.TERMINATED
|
|
241
301
|
await this.updateOrderTargets([undoTargetOrderInventory])
|
|
@@ -282,6 +342,12 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
282
342
|
status: ORDER_STATUS.LOADING
|
|
283
343
|
})
|
|
284
344
|
|
|
345
|
+
const orderToteIds = await (
|
|
346
|
+
await this.trxMgr.getRepository(OrderTote).find({ where: { releaseGood }, relations: ['tote'] })
|
|
347
|
+
).map((record: OrderTote) => record?.toteId)
|
|
348
|
+
|
|
349
|
+
await this.trxMgr.getRepository(Tote).update({ id: In(orderToteIds) }, { status: TOTE_STATUS.DISPATCHED })
|
|
350
|
+
|
|
285
351
|
const worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.LOADING, [
|
|
286
352
|
'worksheetDetails',
|
|
287
353
|
'worksheetDetails.targetInventory'
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
import { Equal, In, Not } from 'typeorm'
|
|
1
|
+
import { Equal, In, IsNull, Not } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { Bizplace } from '@things-factory/biz-base'
|
|
4
4
|
import { generateId } from '@things-factory/id-rule-base'
|
|
5
5
|
import { Product, ProductDetail } from '@things-factory/product-base'
|
|
6
6
|
import {
|
|
7
7
|
ORDER_INVENTORY_STATUS,
|
|
8
|
+
ORDER_PRODUCT_STATUS,
|
|
8
9
|
ORDER_STATUS,
|
|
9
10
|
OrderInventory,
|
|
10
11
|
OrderNoGenerator,
|
|
12
|
+
OrderProduct,
|
|
13
|
+
OrderTote,
|
|
14
|
+
OrderToteItem,
|
|
15
|
+
OrderToteSeal,
|
|
11
16
|
OrderVas,
|
|
12
17
|
ReleaseGood
|
|
13
18
|
} from '@things-factory/sales-base'
|
|
@@ -20,7 +25,9 @@ import {
|
|
|
20
25
|
InventoryItem,
|
|
21
26
|
InventoryNoGenerator,
|
|
22
27
|
Location,
|
|
23
|
-
LOCATION_TYPE
|
|
28
|
+
LOCATION_TYPE,
|
|
29
|
+
Tote,
|
|
30
|
+
TOTE_STATUS
|
|
24
31
|
} from '@things-factory/warehouse-base'
|
|
25
32
|
|
|
26
33
|
import { TASK_NUMBER_RULE_TYPE, TASK_NUMBER_SETTING_KEY, WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
|
|
@@ -338,7 +345,8 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
338
345
|
'worksheetDetails',
|
|
339
346
|
'worksheetDetails.targetInventory',
|
|
340
347
|
'worksheetDetails.targetInventory.inventory',
|
|
341
|
-
'worksheetDetails.targetInventory.product'
|
|
348
|
+
'worksheetDetails.targetInventory.product',
|
|
349
|
+
'worksheetDetails.targetInventory.orderProduct'
|
|
342
350
|
])
|
|
343
351
|
|
|
344
352
|
const worksheetDetails: WorksheetDetail[] = await this.extractMatchedWorksheetDetails(
|
|
@@ -347,7 +355,7 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
347
355
|
productId,
|
|
348
356
|
packingType,
|
|
349
357
|
packingSize,
|
|
350
|
-
['targetInventory', 'targetInventory.inventory']
|
|
358
|
+
['targetInventory', 'targetInventory.inventory', 'targetInventory.orderProduct']
|
|
351
359
|
)
|
|
352
360
|
|
|
353
361
|
let worksheetDetailIds: string[] = []
|
|
@@ -364,6 +372,13 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
364
372
|
inventory.lockedQty = inventory.lockedQty - targetInventory.releaseQty
|
|
365
373
|
inventory.lockedUomValue = inventory.lockedUomValue - targetInventory.releaseUomValue
|
|
366
374
|
await this.updateInventory(inventory)
|
|
375
|
+
|
|
376
|
+
await this.trxMgr
|
|
377
|
+
.getRepository(OrderProduct)
|
|
378
|
+
.update(
|
|
379
|
+
{ id: targetInventory.orderProduct.id },
|
|
380
|
+
{ status: ORDER_PRODUCT_STATUS.PENDING_ASSIGN, updater: this.user }
|
|
381
|
+
)
|
|
367
382
|
}
|
|
368
383
|
|
|
369
384
|
await this.trxMgr.getRepository(WorksheetDetail).delete(worksheetDetailIds)
|
|
@@ -388,7 +403,8 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
388
403
|
productBarcode: string,
|
|
389
404
|
cartonId: string,
|
|
390
405
|
binLocation?: string,
|
|
391
|
-
serialNumber?: string
|
|
406
|
+
serialNumber?: string,
|
|
407
|
+
toteNo?: string
|
|
392
408
|
): Promise<OrderInventory> {
|
|
393
409
|
try {
|
|
394
410
|
let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(
|
|
@@ -401,6 +417,7 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
401
417
|
'targetInventory.releaseGood',
|
|
402
418
|
'targetInventory.inventory',
|
|
403
419
|
'targetInventory.product',
|
|
420
|
+
'targetInventory.orderProduct',
|
|
404
421
|
'targetInventory.product.productDetails',
|
|
405
422
|
'targetInventory.product.productDetails.product',
|
|
406
423
|
'targetInventory.product.productDetails.childProductDetail'
|
|
@@ -409,8 +426,10 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
409
426
|
|
|
410
427
|
const releaseGood: ReleaseGood = worksheetDetail.targetInventory.releaseGood
|
|
411
428
|
let targetInventory: OrderInventory = worksheetDetail.targetInventory
|
|
429
|
+
let targetProduct: OrderProduct = targetInventory.orderProduct
|
|
412
430
|
const product: Product = targetInventory.product
|
|
413
431
|
let inventory: Inventory = targetInventory.inventory
|
|
432
|
+
let bizplace: Bizplace = worksheetDetail.worksheet.bizplace
|
|
414
433
|
|
|
415
434
|
//validation to prevent duplicated picking
|
|
416
435
|
let oiValidate: OrderInventory = await this.trxMgr.getRepository(OrderInventory).findOne({
|
|
@@ -512,6 +531,10 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
512
531
|
}
|
|
513
532
|
}
|
|
514
533
|
|
|
534
|
+
if (toteNo) {
|
|
535
|
+
await this.toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace)
|
|
536
|
+
}
|
|
537
|
+
|
|
515
538
|
await this.updatePickingTransaction(releaseGood, targetInventory, worksheetDetail, inventory, pickedQty)
|
|
516
539
|
} catch (error) {
|
|
517
540
|
throw error
|
|
@@ -525,7 +548,8 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
525
548
|
locationName: string,
|
|
526
549
|
pickedQty: number,
|
|
527
550
|
binLocation?: string,
|
|
528
|
-
serialNumber?: string
|
|
551
|
+
serialNumber?: string,
|
|
552
|
+
toteNo?: string
|
|
529
553
|
): Promise<void> {
|
|
530
554
|
try {
|
|
531
555
|
let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(
|
|
@@ -533,8 +557,10 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
533
557
|
worksheetType,
|
|
534
558
|
[
|
|
535
559
|
'worksheet',
|
|
560
|
+
'worksheet.bizplace',
|
|
536
561
|
'targetInventory',
|
|
537
562
|
'targetInventory.releaseGood',
|
|
563
|
+
'targetInventory.orderProduct',
|
|
538
564
|
'targetInventory.inventory',
|
|
539
565
|
'targetInventory.inventory.location',
|
|
540
566
|
'targetInventory.product'
|
|
@@ -545,6 +571,8 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
545
571
|
let targetInventory: OrderInventory = worksheetDetail.targetInventory
|
|
546
572
|
const product: Product = targetInventory.product
|
|
547
573
|
let inventory: Inventory = targetInventory.inventory
|
|
574
|
+
let targetProduct: OrderProduct = targetInventory.orderProduct
|
|
575
|
+
let bizplace: Bizplace = worksheetDetail.worksheet.bizplace
|
|
548
576
|
|
|
549
577
|
//validation to prevent duplicated picking
|
|
550
578
|
let oiValidate: OrderInventory = await this.trxMgr.getRepository(OrderInventory).findOne({
|
|
@@ -649,6 +677,10 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
649
677
|
|
|
650
678
|
targetInventory = await this.checkAndSetBinPicking(targetInventory, binLocation)
|
|
651
679
|
|
|
680
|
+
if (toteNo) {
|
|
681
|
+
await this.toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace)
|
|
682
|
+
}
|
|
683
|
+
|
|
652
684
|
await this.updatePickingTransaction(releaseGood, targetInventory, worksheetDetail, inventory, pickedQty)
|
|
653
685
|
|
|
654
686
|
const fromLocation: Location = targetInventory.inventory.location
|
|
@@ -947,6 +979,14 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
947
979
|
status: ORDER_STATUS.PICKING
|
|
948
980
|
})
|
|
949
981
|
|
|
982
|
+
const foundNotSealedOrderTote = await this.trxMgr
|
|
983
|
+
.getRepository(OrderTote)
|
|
984
|
+
.findOne({ where: { releaseGood, closedDate: IsNull() } })
|
|
985
|
+
|
|
986
|
+
if (foundNotSealedOrderTote) {
|
|
987
|
+
throw new Error('Please seal the tote(s) before completing')
|
|
988
|
+
}
|
|
989
|
+
|
|
950
990
|
let worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.PICKING, [
|
|
951
991
|
'worksheetDetails',
|
|
952
992
|
'worksheetDetails.targetInventory'
|
|
@@ -1008,14 +1048,14 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
1008
1048
|
worksheet.updater = this.user
|
|
1009
1049
|
worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)
|
|
1010
1050
|
|
|
1011
|
-
const worksheetDetails:
|
|
1051
|
+
const worksheetDetails: any = worksheet.worksheetDetails.filter(wsD => wsD.status != 'MISSING')
|
|
1012
1052
|
worksheetDetails.forEach((wsd: WorksheetDetail) => {
|
|
1013
1053
|
wsd.status = WORKSHEET_STATUS.DONE
|
|
1014
1054
|
wsd.updater = this.user
|
|
1015
1055
|
})
|
|
1016
1056
|
await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)
|
|
1017
1057
|
|
|
1018
|
-
const targetInventories: OrderInventory[] =
|
|
1058
|
+
const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {
|
|
1019
1059
|
let targetInventory: OrderInventory = wsd.targetInventory
|
|
1020
1060
|
targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED
|
|
1021
1061
|
targetInventory.updater = this.user
|
|
@@ -1023,7 +1063,7 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
1023
1063
|
})
|
|
1024
1064
|
await this.updateOrderTargets(targetInventories)
|
|
1025
1065
|
|
|
1026
|
-
const releaseGoods: ReleaseGood[] =
|
|
1066
|
+
const releaseGoods: ReleaseGood[] = worksheetDetails.map((wsd: WorksheetDetail) => {
|
|
1027
1067
|
let releaseGood: ReleaseGood = wsd.targetInventory.releaseGood
|
|
1028
1068
|
|
|
1029
1069
|
let orderStatus: string
|
|
@@ -1108,6 +1148,9 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
1108
1148
|
}
|
|
1109
1149
|
|
|
1110
1150
|
orderInventory.status = ORDER_INVENTORY_STATUS.PICKED
|
|
1151
|
+
orderInventory.pickedBy = this.user?.name
|
|
1152
|
+
orderInventory.pickedByUser = this.user
|
|
1153
|
+
orderInventory.pickedAt = new Date()
|
|
1111
1154
|
|
|
1112
1155
|
inventory.qty -= orderInventory.releaseQty
|
|
1113
1156
|
inventory.uomValue = Math.round((inventory.uomValue - orderInventory.releaseUomValue) * 100) / 100
|
|
@@ -1367,6 +1410,75 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
1367
1410
|
} catch (e) {}
|
|
1368
1411
|
}
|
|
1369
1412
|
|
|
1413
|
+
private async toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace) {
|
|
1414
|
+
//1. find tote
|
|
1415
|
+
let foundTote: Tote = await this.trxMgr
|
|
1416
|
+
.getRepository(Tote)
|
|
1417
|
+
.findOne({ where: { bizplace, name: toteNo, deletedAt: IsNull() } })
|
|
1418
|
+
|
|
1419
|
+
if (foundTote?.status == TOTE_STATUS.DAMAGED || foundTote?.status == TOTE_STATUS.DISPATCHED) {
|
|
1420
|
+
foundTote = null
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
//2. find order tote
|
|
1424
|
+
let foundOrderTote: OrderTote = await this.trxMgr
|
|
1425
|
+
.getRepository(OrderTote)
|
|
1426
|
+
.findOne({ where: { domain: this.domain, name: toteNo, releaseGood } })
|
|
1427
|
+
|
|
1428
|
+
//if order tote not found the create one, if tote not found means it's tote box
|
|
1429
|
+
//create order tote item
|
|
1430
|
+
if (!foundOrderTote) {
|
|
1431
|
+
const orderTote = await this.trxMgr.getRepository(OrderTote).save({
|
|
1432
|
+
name: toteNo,
|
|
1433
|
+
domain: this.domain,
|
|
1434
|
+
releaseGood,
|
|
1435
|
+
tote: foundTote ? foundTote : null,
|
|
1436
|
+
updater: this.user
|
|
1437
|
+
})
|
|
1438
|
+
|
|
1439
|
+
const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({
|
|
1440
|
+
domain: this.domain,
|
|
1441
|
+
name: OrderNoGenerator.orderToteItem(),
|
|
1442
|
+
orderProduct: targetProduct,
|
|
1443
|
+
orderInventory: targetInventory,
|
|
1444
|
+
orderTote,
|
|
1445
|
+
qty: pickedQty,
|
|
1446
|
+
updater: this.user
|
|
1447
|
+
})
|
|
1448
|
+
} else {
|
|
1449
|
+
if (foundOrderTote.closedDate) {
|
|
1450
|
+
throw new Error('Tote has been sealed, please try another tote!')
|
|
1451
|
+
}
|
|
1452
|
+
|
|
1453
|
+
//if found order tote then check if order tote item exist
|
|
1454
|
+
const foundOrderToteItem: OrderToteItem = await this.trxMgr.getRepository(OrderToteItem).findOne({
|
|
1455
|
+
domain: this.domain,
|
|
1456
|
+
orderProduct: targetProduct,
|
|
1457
|
+
orderInventory: targetInventory,
|
|
1458
|
+
orderTote: foundOrderTote
|
|
1459
|
+
})
|
|
1460
|
+
|
|
1461
|
+
//if not order tote item doesnt exist then create one
|
|
1462
|
+
if (!foundOrderToteItem) {
|
|
1463
|
+
const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({
|
|
1464
|
+
domain: this.domain,
|
|
1465
|
+
name: OrderNoGenerator.orderToteItem(),
|
|
1466
|
+
orderProduct: targetProduct,
|
|
1467
|
+
orderInventory: targetInventory,
|
|
1468
|
+
orderTote: foundOrderTote,
|
|
1469
|
+
qty: pickedQty,
|
|
1470
|
+
updater: this.user
|
|
1471
|
+
})
|
|
1472
|
+
} else {
|
|
1473
|
+
//if found order tote item found then add the quantity
|
|
1474
|
+
const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({
|
|
1475
|
+
...foundOrderToteItem,
|
|
1476
|
+
qty: foundOrderToteItem.qty + pickedQty
|
|
1477
|
+
})
|
|
1478
|
+
}
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1370
1482
|
async undoSerialNumberPicking(worksheetDetailName: string, inventoryItemId: string): Promise<void> {
|
|
1371
1483
|
const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({
|
|
1372
1484
|
where: { name: worksheetDetailName, domain: this.domain, status: Not(Equal(WORKSHEET_STATUS.DEACTIVATED)) },
|
|
@@ -1438,4 +1550,72 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
1438
1550
|
targetInventory.updater = this.user
|
|
1439
1551
|
await this.updateOrderTargets([targetInventory])
|
|
1440
1552
|
}
|
|
1553
|
+
|
|
1554
|
+
async sealTote(sealNo: string, toteNo: string, orderNo: string): Promise<void> {
|
|
1555
|
+
const checkDuplicateSeal = await this.trxMgr.getRepository(OrderToteSeal).findOne({
|
|
1556
|
+
where: {
|
|
1557
|
+
name: sealNo
|
|
1558
|
+
}
|
|
1559
|
+
})
|
|
1560
|
+
|
|
1561
|
+
if (checkDuplicateSeal) {
|
|
1562
|
+
throw new Error('Seal has been scanned before')
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1565
|
+
const releaseGood: ReleaseGood = await this.trxMgr
|
|
1566
|
+
.getRepository(ReleaseGood)
|
|
1567
|
+
.findOne({ where: { domain: this.domain, name: orderNo }, relations: ['bizplace', 'bizplace.domain'] })
|
|
1568
|
+
|
|
1569
|
+
let sealNoSetting: Setting = await this.trxMgr.getRepository(Setting).findOne({
|
|
1570
|
+
where: {
|
|
1571
|
+
domain: releaseGood.bizplace.domain,
|
|
1572
|
+
name: 'minimum-seal-number'
|
|
1573
|
+
}
|
|
1574
|
+
})
|
|
1575
|
+
|
|
1576
|
+
if (!sealNoSetting) {
|
|
1577
|
+
sealNoSetting = await this.trxMgr.getRepository(Setting).findOne({
|
|
1578
|
+
where: {
|
|
1579
|
+
domain: this.domain,
|
|
1580
|
+
name: 'minimum-seal-number'
|
|
1581
|
+
}
|
|
1582
|
+
})
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1585
|
+
const foundOrderTote: OrderTote = await this.trxMgr
|
|
1586
|
+
.getRepository(OrderTote)
|
|
1587
|
+
.findOne({ where: { domain: this.domain, name: toteNo, releaseGood } })
|
|
1588
|
+
|
|
1589
|
+
if (!foundOrderTote) {
|
|
1590
|
+
throw new Error('Tote not scanned under this order')
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1593
|
+
let totalOrderToteItems = await this.trxMgr.getRepository(OrderToteItem).count({
|
|
1594
|
+
where: {
|
|
1595
|
+
orderTote: foundOrderTote
|
|
1596
|
+
}
|
|
1597
|
+
})
|
|
1598
|
+
|
|
1599
|
+
if (totalOrderToteItems < 1) {
|
|
1600
|
+
throw new Error('Tote carton is empty')
|
|
1601
|
+
}
|
|
1602
|
+
|
|
1603
|
+
const newToteOrderSeal: OrderToteSeal = await this.trxMgr.getRepository(OrderToteSeal).save({
|
|
1604
|
+
domain: this.domain,
|
|
1605
|
+
name: sealNo,
|
|
1606
|
+
orderTote: foundOrderTote,
|
|
1607
|
+
updater: this.user
|
|
1608
|
+
})
|
|
1609
|
+
|
|
1610
|
+
const totalSeal = await this.trxMgr.getRepository(OrderToteSeal).count({
|
|
1611
|
+
orderTote: foundOrderTote
|
|
1612
|
+
})
|
|
1613
|
+
|
|
1614
|
+
if (totalSeal >= parseInt(sealNoSetting?.value || 0)) {
|
|
1615
|
+
await this.trxMgr.getRepository(OrderTote).save({
|
|
1616
|
+
...foundOrderTote,
|
|
1617
|
+
closedDate: new Date()
|
|
1618
|
+
})
|
|
1619
|
+
}
|
|
1620
|
+
}
|
|
1441
1621
|
}
|