@things-factory/worksheet-base 4.3.80-alpha.5 → 4.3.83
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/unloading-worksheet-controller.js +49 -49
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js +4 -2
- package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/loading-worksheet-controller.js +4 -10
- package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/packing-worksheet-controller.js +20 -22
- package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +151 -71
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js +14 -12
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/vas/vas-worksheet-controller.js +2 -1
- package/dist-server/controllers/vas/vas-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +37 -2
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/entities/worksheet-detail.js +2 -1
- package/dist-server/entities/worksheet-detail.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +0 -6
- package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +6 -6
- package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +1 -2
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +28 -67
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js +8 -23
- package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js +7 -30
- package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/packing.js +8 -23
- package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +8 -25
- package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +12 -59
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +25 -51
- package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +2 -2
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +118 -262
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +4 -7
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +2 -3
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/proceed-extra-products.js +4 -6
- package/dist-server/graphql/resolvers/worksheet/proceed-extra-products.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +14 -39
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/transfer.js +9 -9
- package/dist-server/graphql/resolvers/worksheet/transfer.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js +17 -17
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +4 -4
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -1
- package/dist-server/graphql/types/worksheet-detail/index.js +0 -1
- package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
- package/dist-server/utils/inventory-util.js +98 -1
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +17 -17
- package/server/controllers/inbound/unloading-worksheet-controller.ts +70 -49
- package/server/controllers/inspect/cycle-count-worksheet-controller.ts +4 -2
- package/server/controllers/outbound/loading-worksheet-controller.ts +3 -9
- package/server/controllers/outbound/packing-worksheet-controller.ts +31 -23
- package/server/controllers/outbound/picking-worksheet-controller.ts +212 -85
- package/server/controllers/outbound/sorting-worksheet-controller.ts +12 -12
- package/server/controllers/vas/vas-worksheet-controller.ts +2 -2
- package/server/controllers/worksheet-controller.ts +49 -5
- package/server/entities/worksheet-detail.ts +5 -0
- package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +0 -6
- package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +2 -1
- package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +2 -2
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +1 -3
- package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +33 -77
- package/server/graphql/resolvers/worksheet/packing/activate-packing.ts +9 -26
- package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +9 -34
- package/server/graphql/resolvers/worksheet/packing/packing.ts +9 -26
- package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +9 -28
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +13 -68
- package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +30 -60
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +2 -2
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +130 -288
- package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +10 -30
- package/server/graphql/resolvers/worksheet/picking-worksheet.ts +2 -3
- package/server/graphql/resolvers/worksheet/proceed-extra-products.ts +4 -5
- package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +15 -45
- package/server/graphql/resolvers/worksheet/transfer.ts +16 -18
- package/server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts +2 -3
- package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +1 -4
- package/server/graphql/types/worksheet-detail/index.ts +0 -1
- package/server/utils/inventory-util.ts +126 -1
|
@@ -19,11 +19,11 @@ import {
|
|
|
19
19
|
VasOrder
|
|
20
20
|
} from '@things-factory/sales-base'
|
|
21
21
|
import { Domain } from '@things-factory/shell'
|
|
22
|
-
import { Inventory, INVENTORY_STATUS, InventoryItem, Pallet
|
|
22
|
+
import { Inventory, INVENTORY_STATUS, InventoryItem, Pallet } from '@things-factory/warehouse-base'
|
|
23
23
|
|
|
24
24
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../constants'
|
|
25
25
|
import { Worksheet, WorksheetDetail } from '../entities'
|
|
26
|
-
import { WorksheetNoGenerator } from '../utils'
|
|
26
|
+
import { generateInventoryHistory, WorksheetNoGenerator } from '../utils'
|
|
27
27
|
|
|
28
28
|
export type ReferenceOrderType = ArrivalNotice | ReleaseGood | VasOrder | InventoryCheck | DeliveryOrder | ReturnOrder
|
|
29
29
|
export type OrderTargetTypes = OrderProduct | OrderInventory | OrderVas
|
|
@@ -393,7 +393,7 @@ export class WorksheetController {
|
|
|
393
393
|
let existingWorksheet: Worksheet
|
|
394
394
|
try {
|
|
395
395
|
existingWorksheet = await this.findWorksheetByRefOrder(refOrder, type)
|
|
396
|
-
} catch (e) {}
|
|
396
|
+
} catch (e) { }
|
|
397
397
|
|
|
398
398
|
if (existingWorksheet)
|
|
399
399
|
throw new Error(
|
|
@@ -1007,9 +1007,11 @@ export class WorksheetController {
|
|
|
1007
1007
|
async getChildQty(
|
|
1008
1008
|
productDetails: ProductDetail[],
|
|
1009
1009
|
productBarcode: string,
|
|
1010
|
-
orderProductDetail: ProductDetail
|
|
1011
|
-
scannedProductDetail: ProductDetail
|
|
1010
|
+
orderProductDetail: ProductDetail
|
|
1012
1011
|
): Promise<number> {
|
|
1012
|
+
const scannedProductDetail: ProductDetail = productDetails.find(
|
|
1013
|
+
(productDetail: ProductDetail) => productDetail.gtin === productBarcode
|
|
1014
|
+
)
|
|
1013
1015
|
let hasChildRelation: boolean = Boolean(scannedProductDetail?.childProductDetail)
|
|
1014
1016
|
let hasMatchingChild: boolean
|
|
1015
1017
|
let childQty: number
|
|
@@ -1052,6 +1054,48 @@ export class WorksheetController {
|
|
|
1052
1054
|
return childQty
|
|
1053
1055
|
}
|
|
1054
1056
|
|
|
1057
|
+
public async getDirectQty(
|
|
1058
|
+
productDetail: ProductDetail,
|
|
1059
|
+
productBarcode: string,
|
|
1060
|
+
qty: number
|
|
1061
|
+
): Promise<any> {
|
|
1062
|
+
try {
|
|
1063
|
+
console.time('getDirectQty')
|
|
1064
|
+
let results = await this.trxMgr.query(`
|
|
1065
|
+
WITH RECURSIVE cte as (
|
|
1066
|
+
select * from (
|
|
1067
|
+
select pd.product_id as "productId", id, pd.packing_size as "packingSize",
|
|
1068
|
+
pd.packing_type as "packingType", pd.uom as "uom", (pd.uom_value * $2::float) as "uomValue", $2::float as "qty", pd.gtin
|
|
1069
|
+
from product_details pd
|
|
1070
|
+
where pd.id = $1
|
|
1071
|
+
) as dt
|
|
1072
|
+
union all
|
|
1073
|
+
select pd.product_id as "productId", pd.id, pd.packing_size as "packingSize",
|
|
1074
|
+
pd.packing_type as "packingType", pd.uom,
|
|
1075
|
+
dt1.qty * pd.packing_size * pd.uom_value as "uomValue", dt1.qty * pd.packing_size as "qty", pd.gtin
|
|
1076
|
+
from product_details pd
|
|
1077
|
+
inner join cte dt1 on dt1.id = pd.child_product_detail_id
|
|
1078
|
+
where pd.deleted_at is null
|
|
1079
|
+
)
|
|
1080
|
+
select * from cte where gtin = $3
|
|
1081
|
+
`, [
|
|
1082
|
+
productDetail.id,
|
|
1083
|
+
qty,
|
|
1084
|
+
productBarcode
|
|
1085
|
+
])
|
|
1086
|
+
|
|
1087
|
+
if (results.length <= 0)
|
|
1088
|
+
throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))
|
|
1089
|
+
|
|
1090
|
+
console.timeEnd('getDirectQty')
|
|
1091
|
+
return results[0]
|
|
1092
|
+
} catch (error) {
|
|
1093
|
+
throw error
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
|
|
1098
|
+
|
|
1055
1099
|
/**
|
|
1056
1100
|
* @summary Check for product child qty at any scanned level
|
|
1057
1101
|
* @description It will check every level of product detail by comparing scanned level and GAN registered level.
|
|
@@ -16,6 +16,11 @@ import { Worksheet } from './worksheet'
|
|
|
16
16
|
'ix_worksheet-detail_1',
|
|
17
17
|
(worksheetDetail: WorksheetDetail) => [worksheetDetail.targetInventory]
|
|
18
18
|
)
|
|
19
|
+
@Index(
|
|
20
|
+
'ix_worksheet-detail_2',
|
|
21
|
+
(worksheetDetail: WorksheetDetail) => [worksheetDetail.id],
|
|
22
|
+
{ unique: true }
|
|
23
|
+
)
|
|
19
24
|
export class WorksheetDetail {
|
|
20
25
|
@PrimaryGeneratedColumn('uuid')
|
|
21
26
|
id: string
|
|
@@ -32,7 +32,6 @@ export const batchPickingWorksheetResolver = {
|
|
|
32
32
|
.addSelect('"PROD".name', 'productName')
|
|
33
33
|
.addSelect('"PROD".sku', 'productSku')
|
|
34
34
|
.addSelect('"PROD".description', 'productDescription')
|
|
35
|
-
.addSelect('"PROD_DET".id', 'productDetailId')
|
|
36
35
|
.addSelect('"INV".qty', 'qty')
|
|
37
36
|
.addSelect('"INV".packing_type', 'packingType')
|
|
38
37
|
.addSelect('"INV".packing_size', 'packingSize')
|
|
@@ -48,7 +47,6 @@ export const batchPickingWorksheetResolver = {
|
|
|
48
47
|
.leftJoin('WSD.targetInventory', 'T_INV')
|
|
49
48
|
.leftJoin('T_INV.inventory', 'INV')
|
|
50
49
|
.leftJoin('T_INV.product', 'PROD')
|
|
51
|
-
.leftJoin('T_INV.productDetail', 'PROD_DET')
|
|
52
50
|
.leftJoin('T_INV.binLocation', 'BIN_LOC')
|
|
53
51
|
.leftJoin('INV.location', 'LOC')
|
|
54
52
|
.where('"WSD"."worksheet_id" = :worksheetId', { worksheetId: worksheet.id })
|
|
@@ -66,7 +64,6 @@ export const batchPickingWorksheetResolver = {
|
|
|
66
64
|
.addGroupBy('"PROD".name')
|
|
67
65
|
.addGroupBy('"PROD".sku')
|
|
68
66
|
.addGroupBy('"PROD".description')
|
|
69
|
-
.addGroupBy('"PROD_DET".id')
|
|
70
67
|
.addGroupBy('"T_INV".batch_id')
|
|
71
68
|
.addGroupBy('"T_INV".packing_type')
|
|
72
69
|
.addGroupBy('BIN_LOC.name')
|
|
@@ -129,9 +126,6 @@ export const batchPickingWorksheetResolver = {
|
|
|
129
126
|
name: item?.productName,
|
|
130
127
|
description: item?.productDescription,
|
|
131
128
|
sku: item?.productSku
|
|
132
|
-
},
|
|
133
|
-
productDetail: {
|
|
134
|
-
id: item?.productDetailId
|
|
135
129
|
}
|
|
136
130
|
}
|
|
137
131
|
}
|
|
@@ -11,9 +11,10 @@ import {
|
|
|
11
11
|
ReleaseGood
|
|
12
12
|
} from '@things-factory/sales-base'
|
|
13
13
|
import { Domain } from '@things-factory/shell'
|
|
14
|
-
import { Inventory, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, Location
|
|
14
|
+
import { Inventory, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, Location } from '@things-factory/warehouse-base'
|
|
15
15
|
|
|
16
16
|
import { Worksheet, WorksheetDetail } from '../../../entities'
|
|
17
|
+
import { generateInventoryHistory } from '../../../utils'
|
|
17
18
|
|
|
18
19
|
export const confirmCancellationReleaseOrder = {
|
|
19
20
|
async confirmCancellationReleaseOrder(_: any, { name }, context: any) {
|
|
@@ -4,12 +4,12 @@ import { User } from '@things-factory/auth-base'
|
|
|
4
4
|
import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
|
|
5
5
|
import { InventoryCheck, ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory } from '@things-factory/sales-base'
|
|
6
6
|
import { Domain } from '@things-factory/shell'
|
|
7
|
-
import { Inventory, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, Location
|
|
7
|
+
import { Inventory, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, Location } from '@things-factory/warehouse-base'
|
|
8
8
|
|
|
9
9
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
|
|
10
10
|
import { SellercraftController } from '../../../controllers'
|
|
11
11
|
import { Worksheet, WorksheetDetail } from '../../../entities'
|
|
12
|
-
import { switchLocationStatus } from '../../../utils'
|
|
12
|
+
import { generateInventoryHistory, switchLocationStatus } from '../../../utils'
|
|
13
13
|
|
|
14
14
|
export const cycleCountAdjustmentResolver = {
|
|
15
15
|
async cycleCountAdjustment(_: any, { cycleCountNo }, context: any) {
|
|
@@ -40,7 +40,6 @@ export const inventoriesByPalletResolver = {
|
|
|
40
40
|
qb.leftJoinAndSelect('iv.domain', 'domain')
|
|
41
41
|
.leftJoinAndSelect('iv.bizplace', 'bizplace')
|
|
42
42
|
.leftJoinAndSelect('iv.product', 'product')
|
|
43
|
-
.leftJoinAndSelect('iv.productDetail', 'productDetail')
|
|
44
43
|
.leftJoinAndSelect('iv.warehouse', 'warehouse')
|
|
45
44
|
.leftJoinAndSelect('iv.location', 'location')
|
|
46
45
|
.leftJoinAndSelect('iv.creator', 'creator')
|
|
@@ -135,8 +134,7 @@ export const inventoriesByPalletResolver = {
|
|
|
135
134
|
productName: item.product.name,
|
|
136
135
|
productSKU: item.product.sku,
|
|
137
136
|
productBrand: item.product.brand,
|
|
138
|
-
productId: item.product.id
|
|
139
|
-
productDetailId: item.productDetail.id
|
|
137
|
+
productId: item.product.id
|
|
140
138
|
}
|
|
141
139
|
})
|
|
142
140
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EntityManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
4
|
import { Bizplace, Company } from '@things-factory/biz-base'
|
|
5
5
|
import { FulfillmentCenter } from '@things-factory/integration-fulfillment'
|
|
6
6
|
import { Sftp, SftpAPI } from '@things-factory/integration-sftp'
|
|
@@ -58,86 +58,42 @@ export async function completeLoading(
|
|
|
58
58
|
const warehouseCompanyBizplaces: Bizplace[] = warehouseBizplaces.filter(biz => biz.domain.extType == 'company')
|
|
59
59
|
const warehouseCompanyDomain: Domain = warehouseCompanyBizplaces[0].domain
|
|
60
60
|
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
61
|
+
const customerDomain: Domain = releaseGood.bizplace.domain
|
|
62
|
+
const fulfillmentCenter: FulfillmentCenter = await tx
|
|
63
|
+
.getRepository(FulfillmentCenter)
|
|
64
|
+
.findOne({ domain: warehouseCompanyDomain, centerId: domain.subdomain, status: 'active' })
|
|
65
|
+
|
|
66
|
+
if (fulfillmentCenter) {
|
|
67
|
+
let customerAvailableSftp: Sftp = await tx.getRepository(Sftp).findOne({
|
|
68
|
+
where: { domain: customerDomain, status: 'ACTIVE', fulfillmentCenter }
|
|
69
|
+
})
|
|
70
|
+
if (customerAvailableSftp) {
|
|
71
|
+
const responseFileTypes: any = JSON.parse(customerAvailableSftp.responseFileTypes)
|
|
72
|
+
|
|
73
|
+
let inventoryItems: InventoryItem[] = await tx.getRepository(InventoryItem).find({
|
|
74
|
+
where: { domain, outboundOrderId: releaseGood.id }
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
// if (responseFileTypes.enableShipment) {
|
|
78
|
+
// let shipmentResult: Sftp = await SftpAPI.createShipment(customerAvailableSftp, {
|
|
79
|
+
// releaseGood,
|
|
80
|
+
// orderInventories: targetInventories,
|
|
81
|
+
// sftp: customerAvailableSftp
|
|
82
|
+
// })
|
|
83
|
+
// customerAvailableSftp = await tx.getRepository(Sftp).save(shipmentResult)
|
|
84
|
+
// }
|
|
85
|
+
|
|
86
|
+
if (responseFileTypes.enableSerialNumber) {
|
|
87
|
+
let snResult: Sftp = await SftpAPI.createSerialNumber(customerAvailableSftp, {
|
|
88
|
+
releaseGood,
|
|
89
|
+
inventoryItems,
|
|
90
|
+
sftp: customerAvailableSftp
|
|
72
91
|
})
|
|
73
|
-
|
|
74
|
-
const responseFileTypes: any = JSON.parse(customerAvailableSftp.responseFileTypes)
|
|
75
|
-
|
|
76
|
-
let inventoryItems: InventoryItem[] = await tx.getRepository(InventoryItem).find({
|
|
77
|
-
where: { domain, outboundOrderId: releaseGood.id }
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
// if (responseFileTypes.enableShipment) {
|
|
81
|
-
// let shipmentResult: Sftp = await SftpAPI.createShipment(customerAvailableSftp, {
|
|
82
|
-
// releaseGood,
|
|
83
|
-
// orderInventories: targetInventories,
|
|
84
|
-
// sftp: customerAvailableSftp
|
|
85
|
-
// })
|
|
86
|
-
// customerAvailableSftp = await tx.getRepository(Sftp).save(shipmentResult)
|
|
87
|
-
// }
|
|
88
|
-
|
|
89
|
-
if (responseFileTypes.enableSerialNumber) {
|
|
90
|
-
let snResult: Sftp = await SftpAPI.createSerialNumber(customerAvailableSftp, {
|
|
91
|
-
releaseGood,
|
|
92
|
-
inventoryItems,
|
|
93
|
-
sftp: customerAvailableSftp
|
|
94
|
-
})
|
|
95
|
-
customerAvailableSftp = await tx.getRepository(Sftp).save(snResult)
|
|
96
|
-
}
|
|
97
|
-
}
|
|
92
|
+
customerAvailableSftp = await tx.getRepository(Sftp).save(snResult)
|
|
98
93
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
default:
|
|
102
|
-
break
|
|
94
|
+
}
|
|
103
95
|
}
|
|
104
96
|
|
|
105
|
-
// const customerDomain: Domain = releaseGood.bizplace.domain
|
|
106
|
-
// const fulfillmentCenter: FulfillmentCenter = await tx
|
|
107
|
-
// .getRepository(FulfillmentCenter)
|
|
108
|
-
// .findOne({ domain: warehouseCompanyDomain, centerId: domain.subdomain, status: 'active' })
|
|
109
|
-
|
|
110
|
-
// if (fulfillmentCenter) {
|
|
111
|
-
// let customerAvailableSftp: Sftp = await tx.getRepository(Sftp).findOne({
|
|
112
|
-
// where: { domain: customerDomain, status: 'ACTIVE', fulfillmentCenter }
|
|
113
|
-
// })
|
|
114
|
-
// if (customerAvailableSftp) {
|
|
115
|
-
// const responseFileTypes: any = JSON.parse(customerAvailableSftp.responseFileTypes)
|
|
116
|
-
|
|
117
|
-
// let inventoryItems: InventoryItem[] = await tx.getRepository(InventoryItem).find({
|
|
118
|
-
// where: { domain, outboundOrderId: releaseGood.id }
|
|
119
|
-
// })
|
|
120
|
-
|
|
121
|
-
// // if (responseFileTypes.enableShipment) {
|
|
122
|
-
// // let shipmentResult: Sftp = await SftpAPI.createShipment(customerAvailableSftp, {
|
|
123
|
-
// // releaseGood,
|
|
124
|
-
// // orderInventories: targetInventories,
|
|
125
|
-
// // sftp: customerAvailableSftp
|
|
126
|
-
// // })
|
|
127
|
-
// // customerAvailableSftp = await tx.getRepository(Sftp).save(shipmentResult)
|
|
128
|
-
// // }
|
|
129
|
-
|
|
130
|
-
// if (responseFileTypes.enableSerialNumber) {
|
|
131
|
-
// let snResult: Sftp = await SftpAPI.createSerialNumber(customerAvailableSftp, {
|
|
132
|
-
// releaseGood,
|
|
133
|
-
// inventoryItems,
|
|
134
|
-
// sftp: customerAvailableSftp
|
|
135
|
-
// })
|
|
136
|
-
// customerAvailableSftp = await tx.getRepository(Sftp).save(snResult)
|
|
137
|
-
// }
|
|
138
|
-
// }
|
|
139
|
-
// }
|
|
140
|
-
|
|
141
97
|
await worksheetController.completeLoading(releaseGoodNo)
|
|
142
98
|
|
|
143
99
|
if (remainInventories.length) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EntityManager, getManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
4
|
import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
|
|
5
5
|
import { ReleaseGood } from '@things-factory/sales-base'
|
|
6
6
|
import { Domain } from '@things-factory/shell'
|
|
@@ -38,32 +38,15 @@ export async function activatePacking(
|
|
|
38
38
|
const worksheet = await worksheetController.activatePacking(worksheetNo)
|
|
39
39
|
let releaseGood: ReleaseGood = worksheet.releaseGood
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
.getRepository(Sellercraft)
|
|
46
|
-
.findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
41
|
+
if (releaseGood.type == 'b2c') {
|
|
42
|
+
const sellercraft: Sellercraft = await tx
|
|
43
|
+
.getRepository(Sellercraft)
|
|
44
|
+
.findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
47
45
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
break
|
|
53
|
-
|
|
54
|
-
default:
|
|
55
|
-
break
|
|
46
|
+
if (sellercraft) {
|
|
47
|
+
const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
|
|
48
|
+
sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
|
|
49
|
+
}
|
|
56
50
|
}
|
|
57
|
-
|
|
58
|
-
// if (releaseGood.type == 'b2c') {
|
|
59
|
-
// const sellercraft: Sellercraft = await tx
|
|
60
|
-
// .getRepository(Sellercraft)
|
|
61
|
-
// .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
62
|
-
|
|
63
|
-
// if (sellercraft) {
|
|
64
|
-
// const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
|
|
65
|
-
// sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
|
|
66
|
-
// }
|
|
67
|
-
// }
|
|
68
51
|
return worksheet
|
|
69
52
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { EntityManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
4
|
import { Bizplace, getMyBizplace } from '@things-factory/biz-base'
|
|
5
5
|
import { MarketplaceStore } from '@things-factory/integration-marketplace'
|
|
6
|
+
import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
|
|
6
7
|
import { MarketplaceOrder } from '@things-factory/marketplace-base'
|
|
7
8
|
import { ReleaseGood } from '@things-factory/sales-base'
|
|
8
9
|
import { Domain } from '@things-factory/shell'
|
|
@@ -28,9 +29,12 @@ export const completePackingResolver = {
|
|
|
28
29
|
]
|
|
29
30
|
})
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
if (releaseGood.type === 'b2c') {
|
|
33
|
+
const sellercraft: Sellercraft = await tx
|
|
34
|
+
.getRepository(Sellercraft)
|
|
35
|
+
.findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
36
|
+
|
|
37
|
+
if (!sellercraft) {
|
|
34
38
|
const companyDomain: Domain = releaseGood.bizplace.company.domain
|
|
35
39
|
const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
36
40
|
where: { orderNo: releaseGood.refNo, domain: companyDomain },
|
|
@@ -48,38 +52,9 @@ export const completePackingResolver = {
|
|
|
48
52
|
const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
49
53
|
await ecommerceCtrl.createOrderShip(releaseGood, marketplaceStore, marketplaceOrder, companyDomain)
|
|
50
54
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
default:
|
|
54
|
-
break
|
|
55
|
+
}
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
// if (releaseGood.type === 'b2c') {
|
|
58
|
-
// const sellercraft: Sellercraft = await tx
|
|
59
|
-
// .getRepository(Sellercraft)
|
|
60
|
-
// .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
61
|
-
|
|
62
|
-
// if (!sellercraft) {
|
|
63
|
-
// const companyDomain: Domain = releaseGood.bizplace.company.domain
|
|
64
|
-
// const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
65
|
-
// where: { orderNo: releaseGood.refNo, domain: companyDomain },
|
|
66
|
-
// relations: [
|
|
67
|
-
// 'marketplaceOrderItems',
|
|
68
|
-
// 'marketplaceOrderItems.marketplaceOrderShippingItems',
|
|
69
|
-
// 'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping',
|
|
70
|
-
// 'marketplaceStore',
|
|
71
|
-
// 'marketplaceStore.marketplaceDistributors'
|
|
72
|
-
// ]
|
|
73
|
-
// })
|
|
74
|
-
// const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
|
|
75
|
-
|
|
76
|
-
// if (marketplaceStore.isAutoUpdateShipment) {
|
|
77
|
-
// const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
78
|
-
// await ecommerceCtrl.createOrderShip(releaseGood, marketplaceStore, marketplaceOrder, companyDomain)
|
|
79
|
-
// }
|
|
80
|
-
// }
|
|
81
|
-
// }
|
|
82
|
-
|
|
83
58
|
const bizplace: Bizplace = await getMyBizplace(domain, user)
|
|
84
59
|
const worksheetController: WorksheetController = new WorksheetController(tx, domain, user)
|
|
85
60
|
await worksheetController.notifyToCustomer(bizplace, {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EntityManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
4
|
import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
|
|
5
5
|
import { ReleaseGood } from '@things-factory/sales-base'
|
|
6
6
|
import { Domain } from '@things-factory/shell'
|
|
@@ -29,31 +29,14 @@ export async function packing(
|
|
|
29
29
|
let releaseGood: ReleaseGood = worksheetDetail.targetInventory.releaseGood
|
|
30
30
|
const worksheet: Worksheet = worksheetDetail.worksheet
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
.getRepository(Sellercraft)
|
|
37
|
-
.findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
32
|
+
if (releaseGood.type === 'b2c' && !releaseGood?.airwayBill) {
|
|
33
|
+
const sellercraft: Sellercraft = await tx
|
|
34
|
+
.getRepository(Sellercraft)
|
|
35
|
+
.findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
38
36
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
break
|
|
44
|
-
|
|
45
|
-
default:
|
|
46
|
-
break
|
|
37
|
+
if (sellercraft) {
|
|
38
|
+
const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
|
|
39
|
+
await sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
|
|
40
|
+
}
|
|
47
41
|
}
|
|
48
|
-
|
|
49
|
-
// if (releaseGood.type === 'b2c' && !releaseGood?.airwayBill) {
|
|
50
|
-
// const sellercraft: Sellercraft = await tx
|
|
51
|
-
// .getRepository(Sellercraft)
|
|
52
|
-
// .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
53
|
-
|
|
54
|
-
// if (sellercraft) {
|
|
55
|
-
// const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
|
|
56
|
-
// await sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
|
|
57
|
-
// }
|
|
58
|
-
// }
|
|
59
42
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EntityManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
4
|
import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
|
|
5
5
|
import { ReleaseGood } from '@things-factory/sales-base'
|
|
6
6
|
import { Domain } from '@things-factory/shell'
|
|
@@ -34,36 +34,17 @@ export async function scanProductPacking(
|
|
|
34
34
|
let releaseGood: ReleaseGood = worksheetDetail.targetInventory.releaseGood
|
|
35
35
|
const worksheet: Worksheet = worksheetDetail.worksheet
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const sellercraft: Sellercraft = await tx
|
|
42
|
-
.getRepository(Sellercraft)
|
|
43
|
-
.findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
37
|
+
if (releaseGood.type === 'b2c' && !releaseGood?.airwayBill) {
|
|
38
|
+
const sellercraft: Sellercraft = await tx
|
|
39
|
+
.getRepository(Sellercraft)
|
|
40
|
+
.findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
44
41
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
break
|
|
52
|
-
|
|
53
|
-
default:
|
|
54
|
-
break
|
|
42
|
+
if (sellercraft) {
|
|
43
|
+
const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
|
|
44
|
+
sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
|
|
45
|
+
}
|
|
55
46
|
}
|
|
56
47
|
|
|
57
|
-
// if (releaseGood.type === 'b2c' && !releaseGood?.airwayBill) {
|
|
58
|
-
// const sellercraft: Sellercraft = await tx
|
|
59
|
-
// .getRepository(Sellercraft)
|
|
60
|
-
// .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
61
|
-
|
|
62
|
-
// if (sellercraft) {
|
|
63
|
-
// const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
|
|
64
|
-
// sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
|
|
65
|
-
// }
|
|
66
|
-
// }
|
|
67
48
|
} catch (error) {
|
|
68
49
|
throw error
|
|
69
50
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { EntityManager,
|
|
1
|
+
import { EntityManager, SelectQueryBuilder, getManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
4
|
import { logger } from '@things-factory/env'
|
|
5
5
|
import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
|
|
6
6
|
import {
|
|
@@ -10,7 +10,6 @@ import {
|
|
|
10
10
|
MarketplaceOrderShippingItem
|
|
11
11
|
} from '@things-factory/marketplace-base'
|
|
12
12
|
import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
|
|
13
|
-
import { PartnerSetting, Setting } from '@things-factory/setting-base'
|
|
14
13
|
import { Domain } from '@things-factory/shell'
|
|
15
14
|
import { Inventory, Location } from '@things-factory/warehouse-base'
|
|
16
15
|
|
|
@@ -18,6 +17,7 @@ import { WORKSHEET_TYPE } from '../../../constants'
|
|
|
18
17
|
import { PackingWorksheetController, SellercraftController } from '../../../controllers'
|
|
19
18
|
import { Worksheet, WorksheetDetail } from '../../../entities'
|
|
20
19
|
import { fetchExecutingWorksheet } from '../../../utils'
|
|
20
|
+
import { PartnerSetting, Setting } from '@things-factory/setting-base'
|
|
21
21
|
|
|
22
22
|
export const packingWorksheetResolver = {
|
|
23
23
|
async packingWorksheet(_: any, { releaseGoodNo }, context: any) {
|
|
@@ -146,20 +146,16 @@ export const packingWorksheetResolver = {
|
|
|
146
146
|
let shippingProvider: string
|
|
147
147
|
let marketplaceStatus: string
|
|
148
148
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
status: SellercraftStatus.ACTIVE
|
|
155
|
-
})
|
|
156
|
-
|
|
157
|
-
if (sellercraft) {
|
|
158
|
-
getSellercraftDocument(sellercraft, releaseGood, domain, user)
|
|
159
|
-
}
|
|
160
|
-
break
|
|
149
|
+
if (releaseGood.type === 'b2c') {
|
|
150
|
+
const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
|
|
151
|
+
domain: worksheet.bizplace.domain,
|
|
152
|
+
status: SellercraftStatus.ACTIVE
|
|
153
|
+
})
|
|
161
154
|
|
|
162
|
-
|
|
155
|
+
if (sellercraft) {
|
|
156
|
+
// asynchronously get document from sellercraft
|
|
157
|
+
getSellercraftDocument(sellercraft, releaseGood, domain, user)
|
|
158
|
+
} else {
|
|
163
159
|
marketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
164
160
|
where: { orderNo: releaseGood.refNo },
|
|
165
161
|
relations: [
|
|
@@ -195,60 +191,9 @@ export const packingWorksheetResolver = {
|
|
|
195
191
|
|
|
196
192
|
marketplaceStore = marketplaceOrder?.marketplaceStore
|
|
197
193
|
marketplaceStatus = marketplaceOrder?.status
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
default:
|
|
201
|
-
break
|
|
194
|
+
}
|
|
202
195
|
}
|
|
203
196
|
|
|
204
|
-
// if (releaseGood.type === 'b2c') {
|
|
205
|
-
// const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
|
|
206
|
-
// domain: worksheet.bizplace.domain,
|
|
207
|
-
// status: SellercraftStatus.ACTIVE
|
|
208
|
-
// })
|
|
209
|
-
|
|
210
|
-
// if (sellercraft) {
|
|
211
|
-
// // asynchronously get document from sellercraft
|
|
212
|
-
// getSellercraftDocument(sellercraft, releaseGood, domain, user)
|
|
213
|
-
// } else {
|
|
214
|
-
// marketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
215
|
-
// where: { orderNo: releaseGood.refNo },
|
|
216
|
-
// relations: [
|
|
217
|
-
// 'domain',
|
|
218
|
-
// 'marketplaceStore',
|
|
219
|
-
// 'marketplaceOrderItems',
|
|
220
|
-
// 'marketplaceOrderItems.marketplaceOrderShippingItems',
|
|
221
|
-
// 'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping'
|
|
222
|
-
// ]
|
|
223
|
-
// })
|
|
224
|
-
|
|
225
|
-
// if (!marketplaceOrder) {
|
|
226
|
-
// throw new Error('Failed to retrieve ecommerce information, kindly contact our support team for this issue.')
|
|
227
|
-
// }
|
|
228
|
-
|
|
229
|
-
// let marketplaceOrderShipping: MarketplaceOrderShipping
|
|
230
|
-
// if (marketplaceOrder.isSplitted) {
|
|
231
|
-
// marketplaceOrderShipping = await tx.getRepository(MarketplaceOrderShipping).findOne({
|
|
232
|
-
// where: { subOrderNoRef: worksheet.releaseGood.refNo2 }
|
|
233
|
-
// })
|
|
234
|
-
// } else {
|
|
235
|
-
// marketplaceOrderShipping = await tx.getRepository(MarketplaceOrderShipping).findOne({
|
|
236
|
-
// where: { orderNoRef: worksheet.releaseGood.refNo }
|
|
237
|
-
// })
|
|
238
|
-
// }
|
|
239
|
-
|
|
240
|
-
// trackingNo = marketplaceOrderShipping.ownTrackingNo
|
|
241
|
-
// ? marketplaceOrderShipping.ownTrackingNo
|
|
242
|
-
// : marketplaceOrderShipping.trackingNo
|
|
243
|
-
// shippingProvider = marketplaceOrderShipping.ownTransporter
|
|
244
|
-
// ? marketplaceOrderShipping.ownTransporter
|
|
245
|
-
// : marketplaceOrderShipping.transporter
|
|
246
|
-
|
|
247
|
-
// marketplaceStore = marketplaceOrder?.marketplaceStore
|
|
248
|
-
// marketplaceStatus = marketplaceOrder?.status
|
|
249
|
-
// }
|
|
250
|
-
// }
|
|
251
|
-
|
|
252
197
|
return {
|
|
253
198
|
worksheetInfo: {
|
|
254
199
|
releaseGood,
|