@things-factory/worksheet-base 4.3.393 → 4.3.395
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/outbound/index.js +3 -0
- package/dist-server/controllers/outbound/index.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +160 -14
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js +71 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +21 -28
- package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/bulk-activate-picking.js +21 -4
- package/dist-server/graphql/resolvers/worksheet/picking/bulk-activate-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +96 -130
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +22 -56
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/index.js +3 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/utils/lmd-util.js +193 -162
- package/dist-server/utils/lmd-util.js.map +1 -1
- package/package.json +9 -9
- package/server/controllers/outbound/index.ts +2 -0
- package/server/controllers/outbound/picking-worksheet-controller.ts +172 -19
- package/server/graphql/resolvers/worksheet/picking/activate-batch-picking.ts +107 -6
- package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +73 -65
- package/server/graphql/resolvers/worksheet/picking/bulk-activate-picking.ts +30 -5
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +34 -56
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +4 -36
- package/server/index.ts +2 -0
- package/server/utils/lmd-util.ts +180 -144
|
@@ -32,6 +32,8 @@ import {
|
|
|
32
32
|
ORDER_TYPES,
|
|
33
33
|
OrderInventory,
|
|
34
34
|
OrderNoGenerator,
|
|
35
|
+
OrderPackage,
|
|
36
|
+
OrderPackageItem,
|
|
35
37
|
OrderProduct,
|
|
36
38
|
OrderTote,
|
|
37
39
|
OrderToteItem,
|
|
@@ -252,11 +254,13 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
252
254
|
'releaseGood.bizplace.domain',
|
|
253
255
|
'releaseGood.orderProducts',
|
|
254
256
|
'releaseGood.orderProducts.productDetail',
|
|
257
|
+
'releaseGood.orderProducts.product',
|
|
255
258
|
'releaseGood.orderProducts.productDetail.product',
|
|
256
259
|
'releaseGood.orderPackages',
|
|
257
260
|
'releaseGood.orderPackages.orderPackageItems',
|
|
258
261
|
'releaseGood.orderPackages.orderPackageItems.orderProduct',
|
|
259
262
|
'releaseGood.orderPackages.orderPackageItems.orderProduct.product',
|
|
263
|
+
'releaseGood.orderPackages.orderPackageItems.orderProduct.productDetail',
|
|
260
264
|
'domain',
|
|
261
265
|
'bizplace',
|
|
262
266
|
'bizplace.domain',
|
|
@@ -324,7 +328,7 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
324
328
|
if (!releaseGood?.orderPackages?.length) {
|
|
325
329
|
const orderProducts: OrderProduct[] = await txMgr.getRepository(OrderProduct).find({
|
|
326
330
|
where: { releaseGood },
|
|
327
|
-
relations: ['product', 'product.productDetails','productDetail']
|
|
331
|
+
relations: ['product', 'product.productDetails', 'productDetail']
|
|
328
332
|
})
|
|
329
333
|
|
|
330
334
|
// asynchronously pack order
|
|
@@ -368,6 +372,21 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
368
372
|
break
|
|
369
373
|
|
|
370
374
|
default:
|
|
375
|
+
let orderPackage: OrderPackage = {
|
|
376
|
+
name: OrderNoGenerator.orderPackage(),
|
|
377
|
+
packageId: null,
|
|
378
|
+
trackingNo: null,
|
|
379
|
+
transporter: null,
|
|
380
|
+
airwayBill: releaseGood?.airwayBill,
|
|
381
|
+
invoice: releaseGood?.invoice,
|
|
382
|
+
status: ORDER_STATUS.PROCESSING,
|
|
383
|
+
releaseGood,
|
|
384
|
+
domain: releaseGood.domain,
|
|
385
|
+
bizplace: releaseGood.bizplace,
|
|
386
|
+
creator: releaseGood.creator,
|
|
387
|
+
updater: releaseGood.updater
|
|
388
|
+
}
|
|
389
|
+
await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
|
|
371
390
|
break
|
|
372
391
|
}
|
|
373
392
|
} catch (error) {
|
|
@@ -388,6 +407,12 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
388
407
|
.leftJoinAndSelect('w.worksheetDetails', 'wd')
|
|
389
408
|
.leftJoinAndSelect('w.releaseGood', 'rg')
|
|
390
409
|
.leftJoinAndSelect('rg.domain', 'rgd')
|
|
410
|
+
.leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
|
|
411
|
+
.leftJoinAndSelect('rg.orderPackages', 'rgop')
|
|
412
|
+
.leftJoinAndSelect('rgop.orderPackageItems', 'rgopi')
|
|
413
|
+
.leftJoinAndSelect('rgopi.orderProduct', 'op2')
|
|
414
|
+
.leftJoinAndSelect('op2.product', 'p')
|
|
415
|
+
.leftJoinAndSelect('op2.productDetail', 'pd')
|
|
391
416
|
.leftJoinAndSelect('rg.bizplace', 'rgbz')
|
|
392
417
|
.leftJoinAndSelect('rgbz.domain', 'bzd')
|
|
393
418
|
.leftJoinAndSelect('b.domain', 'bd')
|
|
@@ -416,11 +441,12 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
416
441
|
}
|
|
417
442
|
|
|
418
443
|
const groupedWsBiz = [...groupWs.entries()]
|
|
419
|
-
await Promise.all(
|
|
444
|
+
const updatedWs = await Promise.all(
|
|
420
445
|
groupedWsBiz.map(async ([bizplaceId, worksheetIds]) => {
|
|
421
446
|
return await this.activateBulkWorksheets(bizplaceId, worksheetIds)
|
|
422
447
|
})
|
|
423
448
|
)
|
|
449
|
+
worksheets = updatedWs.flat()
|
|
424
450
|
} catch (error) {
|
|
425
451
|
throw error
|
|
426
452
|
} finally {
|
|
@@ -479,7 +505,11 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
479
505
|
'releaseGood.orderPackages',
|
|
480
506
|
'releaseGood.orderPackages.orderPackageItems',
|
|
481
507
|
'releaseGood.orderPackages.orderPackageItems.orderProduct',
|
|
482
|
-
'releaseGood.orderPackages.orderPackageItems.orderProduct.product'
|
|
508
|
+
'releaseGood.orderPackages.orderPackageItems.orderProduct.product',
|
|
509
|
+
'releaseGood.orderPackages.orderPackageItems.orderProduct.productDetail',
|
|
510
|
+
'releaseGood.orderProducts',
|
|
511
|
+
'releaseGood.orderProducts.productDetail',
|
|
512
|
+
'releaseGood.orderProducts.product',
|
|
483
513
|
]
|
|
484
514
|
})
|
|
485
515
|
|
|
@@ -550,7 +580,22 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
550
580
|
break
|
|
551
581
|
|
|
552
582
|
default:
|
|
553
|
-
|
|
583
|
+
let orderPackage: OrderPackage = {
|
|
584
|
+
name: OrderNoGenerator.orderPackage(),
|
|
585
|
+
packageId: null,
|
|
586
|
+
trackingNo: null,
|
|
587
|
+
transporter: null,
|
|
588
|
+
airwayBill: releaseGood?.airwayBill,
|
|
589
|
+
invoice: releaseGood?.invoice,
|
|
590
|
+
status: ORDER_STATUS.PROCESSING,
|
|
591
|
+
releaseGood,
|
|
592
|
+
domain: releaseGood.domain,
|
|
593
|
+
bizplace: releaseGood.bizplace,
|
|
594
|
+
creator: releaseGood.creator,
|
|
595
|
+
updater: releaseGood.updater
|
|
596
|
+
}
|
|
597
|
+
await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
|
|
598
|
+
break
|
|
554
599
|
}
|
|
555
600
|
} catch (error) {
|
|
556
601
|
logger.error(`picking-worksheet-controller[activateBatchPicking]: ${error}`)
|
|
@@ -733,8 +778,49 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
733
778
|
}).join(' AND ')}
|
|
734
779
|
`, worksheetDetailFilters.map((data, idx) => {
|
|
735
780
|
return data.value
|
|
736
|
-
})
|
|
737
|
-
|
|
781
|
+
}))
|
|
782
|
+
|
|
783
|
+
// find directly without going through the materialized view
|
|
784
|
+
if ((worksheetDetailRaw.length < 1)) {
|
|
785
|
+
worksheetDetailRaw = await this.trxMgr.query(`
|
|
786
|
+
select
|
|
787
|
+
wd.id AS "worksheetDetailId",
|
|
788
|
+
wd.name as "worksheetDetailName",
|
|
789
|
+
w.id as "worksheetId",
|
|
790
|
+
w.domain_id as "domainId",
|
|
791
|
+
op.id as "targetProductId",
|
|
792
|
+
oi.product_id as "productId",
|
|
793
|
+
oi.product_detail_id as "productDetailId",
|
|
794
|
+
op.uom_value as "uomValue",
|
|
795
|
+
pb.id as "productBarcodeId",
|
|
796
|
+
pb.gtin,
|
|
797
|
+
p.is_require_serial_number_scanning_outbound as "productIsRequireSerialNumberScanningOutbound",
|
|
798
|
+
oi.release_good_id as "releaseGoodId",
|
|
799
|
+
oi.id as "orderInventoryId",
|
|
800
|
+
oi.status as "orderInventoryStatus",
|
|
801
|
+
oi.bizplace_id as "bizplaceId",
|
|
802
|
+
i.id as "inventoryId",
|
|
803
|
+
i.carton_id as "inventoryCartonId",
|
|
804
|
+
i.status as "inventoryStatus",
|
|
805
|
+
ici.status as "inventoryCheckItemStatus",
|
|
806
|
+
rg.name as "releaseGoodName",
|
|
807
|
+
rg.ref_no as "refNo"
|
|
808
|
+
FROM worksheet_details wd
|
|
809
|
+
INNER JOIN worksheets w ON wd.worksheet_id = w.id
|
|
810
|
+
inner JOIN order_inventories oi ON oi.id = wd.target_inventory_id
|
|
811
|
+
inner JOIN order_products op ON op.id = oi.order_product_id
|
|
812
|
+
inner join inventories i on i.id = oi.inventory_id
|
|
813
|
+
inner join release_goods rg on rg.id = oi.release_good_id
|
|
814
|
+
left join inventory_check_items ici on ici.inventory_id = oi.inventory_id
|
|
815
|
+
inner join products p on p.id = oi.product_id
|
|
816
|
+
left join product_bundles pb2 on pb2.id = op.product_bundle_id
|
|
817
|
+
LEFT JOIN product_barcodes pb ON pb.product_detail_id = oi.product_detail_id
|
|
818
|
+
left join product_bundle_settings pbs on pbs.product_bundle_id = pb2.id and pbs.product_id = oi.product_id and pbs.product_detail_id = oi.product_detail_id
|
|
819
|
+
WHERE w.type::text = 'PICKING'::text AND w.status::text = 'EXECUTING'::text
|
|
820
|
+
and wd.name = $1 and w.domain_id = $2 and i.carton_id = $3
|
|
821
|
+
ORDER BY w.domain_id, w.bizplace_id, wd.id
|
|
822
|
+
`, [worksheetDetailName, this.domain.id, cartonId])
|
|
823
|
+
}
|
|
738
824
|
|
|
739
825
|
//validation to check matching worksheet detail based on name
|
|
740
826
|
if ((worksheetDetailRaw.length < 1)) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailName))
|
|
@@ -745,7 +831,7 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
745
831
|
|
|
746
832
|
let targetProduct = { id: worksheetDetailInfos.targetProductId }
|
|
747
833
|
let bizplace: Partial<Bizplace> = { id: worksheetDetailInfos.bizplaceId }
|
|
748
|
-
const releaseGood: Partial<ReleaseGood> = { id: worksheetDetailInfos.releaseGoodId
|
|
834
|
+
const releaseGood: Partial<ReleaseGood> = { id: worksheetDetailInfos.releaseGoodId, name: worksheetDetailInfos.releaseGoodName, refNo: worksheetDetailInfos.refNo }
|
|
749
835
|
|
|
750
836
|
let matchingProduct, pickedUomValue
|
|
751
837
|
|
|
@@ -2408,30 +2494,37 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
2408
2494
|
return newWorksheetDetails
|
|
2409
2495
|
}
|
|
2410
2496
|
|
|
2411
|
-
async activateBulkWorksheets(bizplaceId, worksheetIds) {
|
|
2497
|
+
async activateBulkWorksheets(bizplaceId, worksheetIds): Promise<Worksheet[]> {
|
|
2498
|
+
const updatedWs: Worksheet[] = []
|
|
2412
2499
|
try {
|
|
2413
2500
|
for (const worksheetId of worksheetIds) {
|
|
2414
2501
|
try {
|
|
2415
2502
|
let releaseGood: ReleaseGood
|
|
2416
2503
|
let domain: Domain
|
|
2417
2504
|
|
|
2418
|
-
getManager().transaction(async (tx: EntityManager) => {
|
|
2505
|
+
await getManager().transaction(async (tx: EntityManager) => {
|
|
2419
2506
|
const worksheetRepo = tx.getRepository(Worksheet)
|
|
2420
2507
|
let worksheet = await worksheetRepo
|
|
2421
2508
|
.createQueryBuilder('w')
|
|
2509
|
+
.leftJoinAndSelect('w.releaseGood', 'rg')
|
|
2510
|
+
.leftJoinAndSelect('rg.bizplace', 'rg_b')
|
|
2511
|
+
.leftJoinAndSelect('rg.domain', 'rg_d')
|
|
2512
|
+
.leftJoinAndSelect('rg.lastMileDelivery', 'rg_lmd')
|
|
2513
|
+
.leftJoinAndSelect('rg_b.domain', 'b_d')
|
|
2514
|
+
.leftJoinAndSelect('rg.orderProducts', 'rg_op')
|
|
2515
|
+
.leftJoinAndSelect('rg_op.product', 'op_p')
|
|
2516
|
+
.leftJoinAndSelect('rg_op.productDetail', 'op_pd')
|
|
2517
|
+
.leftJoinAndSelect('op_pd.product', 'pd_p')
|
|
2518
|
+
.leftJoinAndSelect('rg.orderPackages', 'rg_opc')
|
|
2519
|
+
.leftJoinAndSelect('rg_opc.orderPackageItems', 'opc_opi')
|
|
2520
|
+
.leftJoinAndSelect('opc_opi.orderProduct', 'opi_op')
|
|
2521
|
+
.leftJoinAndSelect('opi_op.product', 'op_p2')
|
|
2522
|
+
.leftJoinAndSelect('opi_op.productDetail', 'op_pd2')
|
|
2422
2523
|
.leftJoinAndSelect('w.domain', 'd')
|
|
2423
2524
|
.leftJoinAndSelect('w.bizplace', 'b')
|
|
2424
|
-
.leftJoinAndSelect('w.worksheetDetails', 'wd')
|
|
2425
|
-
.leftJoinAndSelect('w.releaseGood', 'rg')
|
|
2426
|
-
.leftJoinAndSelect('rg.domain', 'rgd')
|
|
2427
|
-
.leftJoinAndSelect('rg.bizplace', 'rgbz')
|
|
2428
|
-
.leftJoinAndSelect('rgbz.domain', 'bzd')
|
|
2429
|
-
.leftJoinAndSelect('rg.orderProducts', 'op')
|
|
2430
|
-
.leftJoinAndSelect('op.productDetail', 'pd')
|
|
2431
|
-
.leftJoinAndSelect('pd.product', 'p')
|
|
2432
|
-
.leftJoinAndSelect('b.domain', 'bd')
|
|
2433
2525
|
.leftJoinAndSelect('b.company', 'c')
|
|
2434
|
-
.leftJoinAndSelect('c.domain', '
|
|
2526
|
+
.leftJoinAndSelect('c.domain', 'c_d')
|
|
2527
|
+
.leftJoinAndSelect('w.worksheetDetails', 'wd')
|
|
2435
2528
|
.leftJoinAndSelect('wd.targetInventory', 'ti')
|
|
2436
2529
|
.leftJoinAndSelect('ti.product', 'tp')
|
|
2437
2530
|
.where('w.id = :worksheetId', { worksheetId: worksheetId })
|
|
@@ -2471,6 +2564,8 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
2471
2564
|
worksheet = await this.activateWorksheet(worksheet, worksheetDetails, [], tx)
|
|
2472
2565
|
releaseGood = worksheet.releaseGood
|
|
2473
2566
|
domain = worksheet.domain
|
|
2567
|
+
|
|
2568
|
+
updatedWs.push(worksheet)
|
|
2474
2569
|
})
|
|
2475
2570
|
|
|
2476
2571
|
const orderSource: string = releaseGood?.source
|
|
@@ -2535,6 +2630,21 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
2535
2630
|
break
|
|
2536
2631
|
|
|
2537
2632
|
default:
|
|
2633
|
+
let orderPackage: OrderPackage = {
|
|
2634
|
+
name: OrderNoGenerator.orderPackage(),
|
|
2635
|
+
packageId: null,
|
|
2636
|
+
trackingNo: null,
|
|
2637
|
+
transporter: null,
|
|
2638
|
+
airwayBill: releaseGood?.airwayBill,
|
|
2639
|
+
invoice: releaseGood?.invoice,
|
|
2640
|
+
status: ORDER_STATUS.PROCESSING,
|
|
2641
|
+
releaseGood,
|
|
2642
|
+
domain: releaseGood.domain,
|
|
2643
|
+
bizplace: releaseGood.bizplace,
|
|
2644
|
+
creator: releaseGood.creator,
|
|
2645
|
+
updater: releaseGood.updater
|
|
2646
|
+
}
|
|
2647
|
+
await createOrderPackageAndItems(this.trxMgr, releaseGood, orderPackage)
|
|
2538
2648
|
break
|
|
2539
2649
|
}
|
|
2540
2650
|
} catch (e) {
|
|
@@ -2546,5 +2656,48 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
2546
2656
|
} catch (e) {
|
|
2547
2657
|
console.log(e)
|
|
2548
2658
|
}
|
|
2659
|
+
|
|
2660
|
+
return updatedWs
|
|
2549
2661
|
}
|
|
2662
|
+
|
|
2663
|
+
}
|
|
2664
|
+
|
|
2665
|
+
export async function createOrderPackageAndItems(tx: EntityManager, releaseGood: ReleaseGood, orderPackage: OrderPackage): Promise<void> {
|
|
2666
|
+
let savedOrderPackage: OrderPackage = await tx.getRepository(OrderPackage).save(orderPackage)
|
|
2667
|
+
|
|
2668
|
+
const orderPackageItems: OrderPackageItem[] = releaseGood.orderProducts.map(op => {
|
|
2669
|
+
if (op.product){
|
|
2670
|
+
return {
|
|
2671
|
+
name: OrderNoGenerator.orderPackageItem(),
|
|
2672
|
+
orderProduct: op,
|
|
2673
|
+
status: ORDER_STATUS.PROCESSING,
|
|
2674
|
+
releaseQty: op.releaseQty,
|
|
2675
|
+
orderPackage: savedOrderPackage,
|
|
2676
|
+
domain: releaseGood.domain,
|
|
2677
|
+
bizplace: releaseGood.bizplace,
|
|
2678
|
+
creator: releaseGood.creator,
|
|
2679
|
+
updater: releaseGood.updater,
|
|
2680
|
+
productDetail: op.productDetail
|
|
2681
|
+
}
|
|
2682
|
+
} else {
|
|
2683
|
+
let productBundle = op.productBundle
|
|
2684
|
+
return productBundle.productBundleSettings.map(pbs => ({
|
|
2685
|
+
name: OrderNoGenerator.orderPackageItem(),
|
|
2686
|
+
orderProduct: op,
|
|
2687
|
+
status: ORDER_STATUS.PROCESSING,
|
|
2688
|
+
releaseQty: op.releaseQty * pbs.bundleQty,
|
|
2689
|
+
orderPackage: savedOrderPackage,
|
|
2690
|
+
domain: releaseGood.domain,
|
|
2691
|
+
bizplace: releaseGood.bizplace,
|
|
2692
|
+
creator: releaseGood.creator,
|
|
2693
|
+
updater: releaseGood.updater,
|
|
2694
|
+
productDetail: pbs.productDetail
|
|
2695
|
+
}))
|
|
2696
|
+
}
|
|
2697
|
+
}).flat()
|
|
2698
|
+
|
|
2699
|
+
await tx.getRepository(OrderPackageItem).save(orderPackageItems)
|
|
2700
|
+
orderPackage.orderPackageItems = orderPackageItems
|
|
2701
|
+
releaseGood.orderPackages = [orderPackage]
|
|
2550
2702
|
}
|
|
2703
|
+
|
|
@@ -1,12 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
EntityManager,
|
|
3
|
+
getConnection,
|
|
4
|
+
In
|
|
5
|
+
} from 'typeorm'
|
|
2
6
|
|
|
3
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
ApplicationType,
|
|
9
|
+
User
|
|
10
|
+
} from '@things-factory/auth-base'
|
|
11
|
+
import { logger } from '@things-factory/env'
|
|
4
12
|
import { MarketplaceStore } from '@things-factory/integration-marketplace'
|
|
13
|
+
import { MarketplaceOrder } from '@things-factory/marketplace-base'
|
|
14
|
+
import { ReleaseGood } from '@things-factory/sales-base'
|
|
5
15
|
import { Domain } from '@things-factory/shell'
|
|
6
16
|
|
|
7
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
EcommerceController,
|
|
19
|
+
PickingWorksheetController
|
|
20
|
+
} from '../../../../controllers'
|
|
8
21
|
import { Worksheet } from '../../../../entities'
|
|
9
|
-
import {
|
|
22
|
+
import { createLmdParcel } from '../../../../utils'
|
|
10
23
|
|
|
11
24
|
export const activateBatchPickingResolver = {
|
|
12
25
|
async activateBatchPicking(_: any, { worksheetNo }, context: any) {
|
|
@@ -23,17 +36,26 @@ export async function activateBatchPicking(
|
|
|
23
36
|
): Promise<Worksheet> {
|
|
24
37
|
try {
|
|
25
38
|
const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
|
|
39
|
+
const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
26
40
|
const worksheet = await worksheetController.activateBatchPicking(worksheetNo)
|
|
27
41
|
const worksheetDetails = worksheet.worksheetDetails
|
|
28
42
|
const companyDomain: Domain = worksheet?.bizplace.company.domain
|
|
29
43
|
|
|
44
|
+
let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
|
|
45
|
+
|
|
30
46
|
// find for any existing marketplace store connections
|
|
31
47
|
const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
|
|
32
48
|
where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },
|
|
33
49
|
relations: ['marketplaceDistributors']
|
|
34
50
|
})
|
|
35
51
|
|
|
36
|
-
const updateMarketplaceProductVariationStock = async (
|
|
52
|
+
const updateMarketplaceProductVariationStock = async (
|
|
53
|
+
worksheetDetails,
|
|
54
|
+
domain,
|
|
55
|
+
user,
|
|
56
|
+
marketplaceStores,
|
|
57
|
+
companyDomain
|
|
58
|
+
) => {
|
|
37
59
|
try {
|
|
38
60
|
await getConnection().transaction(async (tx2: EntityManager) => {
|
|
39
61
|
let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
|
|
@@ -49,8 +71,87 @@ export async function activateBatchPicking(
|
|
|
49
71
|
updateMarketplaceProductVariationStock(worksheetDetails, domain, user, marketplaceStores, companyDomain)
|
|
50
72
|
}
|
|
51
73
|
|
|
52
|
-
|
|
74
|
+
try {
|
|
75
|
+
let releaseGoods: ReleaseGood[] = []
|
|
76
|
+
let releaseGoodIds: ReleaseGood[] = orderInventories.reduce((data, orderInventory) => {
|
|
77
|
+
if (!data.find(x => x.id == orderInventory.releaseGood.id)) {
|
|
78
|
+
data.push(orderInventory.releaseGood.id)
|
|
79
|
+
}
|
|
80
|
+
return data
|
|
81
|
+
}, [])
|
|
82
|
+
|
|
83
|
+
releaseGoods = await tx.getRepository(ReleaseGood).find({
|
|
84
|
+
where: { id: In(releaseGoodIds) },
|
|
85
|
+
relations: [
|
|
86
|
+
'domain',
|
|
87
|
+
'lastMileDelivery',
|
|
88
|
+
'bizplace',
|
|
89
|
+
'bizplace.domain',
|
|
90
|
+
'orderPackages',
|
|
91
|
+
'orderPackages.orderPackageItems',
|
|
92
|
+
'orderPackages.orderPackageItems.orderProduct',
|
|
93
|
+
'orderPackages.orderPackageItems.orderProduct.product',
|
|
94
|
+
'orderPackages.orderPackageItems.orderProduct.productDetail',
|
|
95
|
+
'orderProducts',
|
|
96
|
+
'orderProducts.productDetail',
|
|
97
|
+
'orderProducts.product'
|
|
98
|
+
]
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
if (releaseGoods?.length) {
|
|
102
|
+
for (const releaseGood of releaseGoods) {
|
|
103
|
+
const orderSource = releaseGood?.source
|
|
104
|
+
const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
105
|
+
where: { orderNo: releaseGood.refNo, domain: companyDomain },
|
|
106
|
+
relations: ['marketplaceStore']
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
switch (orderSource) {
|
|
110
|
+
case ApplicationType.MMS:
|
|
111
|
+
if (marketplaceStores?.length) {
|
|
112
|
+
if (marketplaceOrder) {
|
|
113
|
+
const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
|
|
114
|
+
await ecommerceCtrl.createOrderPackage(
|
|
115
|
+
tx,
|
|
116
|
+
marketplaceOrder,
|
|
117
|
+
companyDomain,
|
|
118
|
+
marketplaceStore,
|
|
119
|
+
releaseGood
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
break
|
|
124
|
+
default:
|
|
125
|
+
break
|
|
126
|
+
}
|
|
53
127
|
|
|
128
|
+
if (
|
|
129
|
+
releaseGood?.orderPackages?.length &&
|
|
130
|
+
releaseGood.lmdOption &&
|
|
131
|
+
releaseGood.lastMileDelivery &&
|
|
132
|
+
releaseGood?.orderPackages?.some(op => op.parcelId == null)
|
|
133
|
+
) {
|
|
134
|
+
await createLmdParcel([releaseGood], tx, domain, user, marketplaceOrder)
|
|
135
|
+
|
|
136
|
+
//where to trigger update parcel count
|
|
137
|
+
let countParcel = releaseGood?.countParcel ? releaseGood.countParcel : 0
|
|
138
|
+
const releaseGoodId = releaseGood?.id
|
|
139
|
+
|
|
140
|
+
await tx.getRepository(ReleaseGood).update(
|
|
141
|
+
{ id: releaseGoodId },
|
|
142
|
+
{
|
|
143
|
+
countParcel: countParcel + 1,
|
|
144
|
+
updater: user.id
|
|
145
|
+
}
|
|
146
|
+
)
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
} catch (e) {
|
|
151
|
+
logger.error(e)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return worksheet
|
|
54
155
|
} catch (error) {
|
|
55
156
|
logger.error(`activate-batch-picking[activateBatchPicking]: ${worksheetNo + ':' + error}`)
|
|
56
157
|
throw new Error('Something went wrong. Please contact support.')
|
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
import { EntityManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
ApplicationType,
|
|
5
|
+
User
|
|
6
|
+
} from '@things-factory/auth-base'
|
|
4
7
|
import { MarketplaceStore } from '@things-factory/integration-marketplace'
|
|
5
8
|
import { MarketplaceOrder } from '@things-factory/marketplace-base'
|
|
6
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
ORDER_STATUS,
|
|
11
|
+
ReleaseGood
|
|
12
|
+
} from '@things-factory/sales-base'
|
|
7
13
|
import { Domain } from '@things-factory/shell'
|
|
8
14
|
|
|
9
|
-
import {
|
|
10
|
-
|
|
15
|
+
import {
|
|
16
|
+
EcommerceController,
|
|
17
|
+
PickingWorksheetController
|
|
18
|
+
} from '../../../../controllers'
|
|
19
|
+
import {
|
|
20
|
+
ActiveWorksheetPickingView,
|
|
21
|
+
Worksheet
|
|
22
|
+
} from '../../../../entities'
|
|
23
|
+
import { createLmdParcel } from '../../../../utils'
|
|
11
24
|
|
|
12
25
|
export const activatePickingResolver = {
|
|
13
26
|
async activatePicking(_: any, { worksheetNo }, context: any) {
|
|
@@ -24,81 +37,76 @@ export async function activatePicking(
|
|
|
24
37
|
): Promise<Worksheet> {
|
|
25
38
|
try {
|
|
26
39
|
const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
|
|
40
|
+
const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
27
41
|
const worksheet = await worksheetController.activatePicking(worksheetNo)
|
|
28
42
|
const companyDomain: Domain = worksheet?.bizplace.company.domain
|
|
29
43
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
let releaseGood: ReleaseGood = worksheet.releaseGood
|
|
45
|
+
const orderSource: string = releaseGood.source
|
|
46
|
+
|
|
47
|
+
const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
48
|
+
where: { orderNo: releaseGood.refNo, domain: companyDomain },
|
|
49
|
+
relations: ['marketplaceStore']
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
switch (orderSource) {
|
|
53
|
+
case ApplicationType.MMS:
|
|
54
|
+
// find for any existing marketplace store connections
|
|
55
|
+
const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
|
|
56
|
+
where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },
|
|
57
|
+
relations: ['marketplaceDistributors']
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
if (marketplaceStores?.length) {
|
|
61
|
+
if (marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
|
|
62
|
+
const worksheetDetails = worksheet.worksheetDetails
|
|
63
|
+
let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
|
|
64
|
+
const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
65
|
+
await ecommerceCtrl.updateProductVariationStock(marketplaceStores, orderInventories, companyDomain)
|
|
66
|
+
}
|
|
53
67
|
|
|
54
68
|
if (marketplaceOrder) {
|
|
55
69
|
const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
|
|
56
70
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
71
|
+
if (marketplaceStore.isAutoUpdateShipment) {
|
|
72
|
+
const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
73
|
+
await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
|
|
61
74
|
}
|
|
75
|
+
|
|
76
|
+
await ecommerceCtrl.createOrderPackage(tx, marketplaceOrder, companyDomain, marketplaceStore, releaseGood)
|
|
62
77
|
}
|
|
63
|
-
|
|
78
|
+
}
|
|
79
|
+
break
|
|
64
80
|
|
|
65
81
|
default:
|
|
66
82
|
break
|
|
67
83
|
}
|
|
68
84
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
// const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
|
|
89
|
-
|
|
90
|
-
// if (marketplaceStore.isAutoUpdateShipment) {
|
|
91
|
-
// const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
92
|
-
// await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
|
|
93
|
-
// }
|
|
94
|
-
// }
|
|
95
|
-
// }
|
|
96
|
-
// }
|
|
97
|
-
return worksheet
|
|
98
|
-
} catch (error) {
|
|
99
|
-
throw error
|
|
100
|
-
} finally {
|
|
101
|
-
ActiveWorksheetPickingView.refreshView()
|
|
85
|
+
if (
|
|
86
|
+
releaseGood?.orderPackages?.length &&
|
|
87
|
+
releaseGood.lmdOption &&
|
|
88
|
+
releaseGood.lastMileDelivery &&
|
|
89
|
+
releaseGood?.orderPackages?.some(op => op.parcelId == null)
|
|
90
|
+
) {
|
|
91
|
+
await createLmdParcel([releaseGood], tx, domain, user, marketplaceOrder)
|
|
92
|
+
|
|
93
|
+
//where to trigger update parcel count
|
|
94
|
+
let countParcel = releaseGood?.countParcel ? releaseGood.countParcel : 0
|
|
95
|
+
const releaseGoodId = releaseGood?.id
|
|
96
|
+
|
|
97
|
+
await tx.getRepository(ReleaseGood).update(
|
|
98
|
+
{ id: releaseGoodId },
|
|
99
|
+
{
|
|
100
|
+
countParcel: countParcel+1,
|
|
101
|
+
updater: user.id
|
|
102
|
+
}
|
|
103
|
+
)
|
|
102
104
|
}
|
|
103
105
|
|
|
106
|
+
return worksheet
|
|
107
|
+
} catch (error) {
|
|
108
|
+
throw error
|
|
109
|
+
} finally {
|
|
110
|
+
ActiveWorksheetPickingView.refreshView()
|
|
111
|
+
}
|
|
104
112
|
}
|