@things-factory/worksheet-base 4.3.76 → 4.3.79-alpha.0
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/packing-worksheet-controller.js +14 -2
- package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +6 -9
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +14 -1
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js +12 -0
- package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js +3 -3
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +67 -28
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js +23 -8
- package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js +30 -7
- package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/packing.js +23 -8
- package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +25 -8
- package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +112 -22
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js +87 -79
- package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +51 -25
- 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 +266 -140
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +39 -14
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js +92 -150
- package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js.map +1 -1
- package/dist-server/graphql/types/worksheet/index.js +5 -2
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js +11 -0
- package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js.map +1 -0
- package/dist-server/utils/worksheet-util.js +3 -1
- package/dist-server/utils/worksheet-util.js.map +1 -1
- package/package.json +17 -17
- package/server/controllers/outbound/packing-worksheet-controller.ts +21 -2
- package/server/controllers/outbound/picking-worksheet-controller.ts +7 -11
- package/server/controllers/worksheet-controller.ts +25 -2
- package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +13 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +3 -7
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +5 -4
- package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +77 -33
- package/server/graphql/resolvers/worksheet/packing/activate-packing.ts +26 -9
- package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +34 -9
- package/server/graphql/resolvers/worksheet/packing/packing.ts +26 -9
- package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +28 -9
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +128 -23
- package/server/graphql/resolvers/worksheet/pending-cancellation-release-order.ts +99 -94
- package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +60 -30
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +2 -2
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +288 -149
- package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +45 -15
- package/server/graphql/resolvers/worksheet/reject-cancellation-release-order.ts +98 -213
- package/server/graphql/types/worksheet/index.ts +5 -2
- package/server/graphql/types/worksheet/multiple-release-good-worksheet.ts +8 -0
- package/server/utils/worksheet-util.ts +3 -1
|
@@ -1,21 +1,17 @@
|
|
|
1
1
|
import { EntityManager, getManager } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { User } from '@things-factory/auth-base'
|
|
4
|
-
import { OrderInventory } from '@things-factory/sales-base'
|
|
5
4
|
import { Domain } from '@things-factory/shell'
|
|
6
5
|
|
|
7
|
-
import { PickingWorksheetController } from '../../../../controllers/'
|
|
8
|
-
import { Worksheet, WorksheetDetail } from '../../../../entities'
|
|
9
|
-
|
|
10
6
|
import { generatePickingWorksheet } from './generate-release-good-worksheet'
|
|
11
7
|
|
|
12
8
|
export const generateMultipleReleaseGoodWorksheetResolver = {
|
|
13
|
-
async generateMultipleReleaseGoodWorksheet(_: any, {
|
|
9
|
+
async generateMultipleReleaseGoodWorksheet(_: any, { releaseGoods }, context: any) {
|
|
14
10
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
15
11
|
|
|
16
|
-
for (let idx = 0; idx <
|
|
12
|
+
for (let idx = 0; idx < releaseGoods.length; idx++) {
|
|
17
13
|
await getManager().transaction(async txMgr => {
|
|
18
|
-
await generatePickingWorksheet(txMgr, domain, user,
|
|
14
|
+
await generatePickingWorksheet(txMgr, domain, user, releaseGoods[idx].name, releaseGoods[idx].status)
|
|
19
15
|
});
|
|
20
16
|
}
|
|
21
17
|
|
package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts
CHANGED
|
@@ -11,9 +11,9 @@ import { Worksheet, WorksheetDetail } from '../../../../entities'
|
|
|
11
11
|
import { Inventory, InventoryUtil, INVENTORY_TRANSACTION_TYPE } from '@things-factory/warehouse-base'
|
|
12
12
|
|
|
13
13
|
export const generateReleaseGoodWorksheetResolver = {
|
|
14
|
-
async generateReleaseGoodWorksheet(_: any, { releaseGoodNo }, context: any) {
|
|
14
|
+
async generateReleaseGoodWorksheet(_: any, { releaseGoodNo, currentStatus = null }, context: any) {
|
|
15
15
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
16
|
-
return await generatePickingWorksheet(tx, domain, user, releaseGoodNo)
|
|
16
|
+
return await generatePickingWorksheet(tx, domain, user, releaseGoodNo, currentStatus)
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
|
|
@@ -21,7 +21,8 @@ export async function generatePickingWorksheet(
|
|
|
21
21
|
tx: EntityManager,
|
|
22
22
|
domain: Domain,
|
|
23
23
|
user: User,
|
|
24
|
-
releaseGoodNo: string
|
|
24
|
+
releaseGoodNo: string,
|
|
25
|
+
currentStatus: string = null
|
|
25
26
|
): Promise<Worksheet> {
|
|
26
27
|
try {
|
|
27
28
|
const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
|
|
@@ -78,7 +79,7 @@ export async function generatePickingWorksheet(
|
|
|
78
79
|
|
|
79
80
|
await tx.getRepository(ReleaseGood).update({ id: releaseGood.id }, { status: ORDER_STATUS.DONE })
|
|
80
81
|
} else {
|
|
81
|
-
worksheet = await worksheetController.generatePickingWorksheet(releaseGoodNo)
|
|
82
|
+
worksheet = await worksheetController.generatePickingWorksheet(releaseGoodNo, currentStatus)
|
|
82
83
|
}
|
|
83
84
|
|
|
84
85
|
return worksheet
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EntityManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import { User } from '@things-factory/auth-base'
|
|
3
|
+
import { ApplicationType, 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,42 +58,86 @@ 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
|
-
|
|
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
|
|
61
|
+
const orderSource: string = releaseGood.source
|
|
62
|
+
switch (orderSource) {
|
|
63
|
+
case ApplicationType.SFTP:
|
|
64
|
+
const customerDomain: Domain = releaseGood.bizplace.domain
|
|
65
|
+
const fulfillmentCenter: FulfillmentCenter = await tx
|
|
66
|
+
.getRepository(FulfillmentCenter)
|
|
67
|
+
.findOne({ domain: warehouseCompanyDomain, centerId: domain.subdomain, status: 'active' })
|
|
68
|
+
|
|
69
|
+
if (fulfillmentCenter) {
|
|
70
|
+
let customerAvailableSftp: Sftp = await tx.getRepository(Sftp).findOne({
|
|
71
|
+
where: { domain: customerDomain, status: 'ACTIVE', fulfillmentCenter }
|
|
91
72
|
})
|
|
92
|
-
|
|
73
|
+
if (customerAvailableSftp) {
|
|
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
|
+
}
|
|
93
98
|
}
|
|
94
|
-
|
|
99
|
+
break
|
|
100
|
+
|
|
101
|
+
default:
|
|
102
|
+
break
|
|
95
103
|
}
|
|
96
104
|
|
|
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
|
+
|
|
97
141
|
await worksheetController.completeLoading(releaseGoodNo)
|
|
98
142
|
|
|
99
143
|
if (remainInventories.length) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EntityManager, getManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import { User } from '@things-factory/auth-base'
|
|
3
|
+
import { ApplicationType, 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,15 +38,32 @@ 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
|
-
|
|
41
|
+
const orderSource: string = releaseGood.source
|
|
42
|
+
switch (orderSource) {
|
|
43
|
+
case ApplicationType.SELLERCRAFT:
|
|
44
|
+
const sellercraft: Sellercraft = await tx
|
|
45
|
+
.getRepository(Sellercraft)
|
|
46
|
+
.findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
if (sellercraft) {
|
|
49
|
+
const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
|
|
50
|
+
sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
|
|
51
|
+
}
|
|
52
|
+
break
|
|
53
|
+
|
|
54
|
+
default:
|
|
55
|
+
break
|
|
50
56
|
}
|
|
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
|
+
// }
|
|
51
68
|
return worksheet
|
|
52
69
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { EntityManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import { User } from '@things-factory/auth-base'
|
|
3
|
+
import { ApplicationType, 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'
|
|
7
6
|
import { MarketplaceOrder } from '@things-factory/marketplace-base'
|
|
8
7
|
import { ReleaseGood } from '@things-factory/sales-base'
|
|
9
8
|
import { Domain } from '@things-factory/shell'
|
|
@@ -29,12 +28,9 @@ export const completePackingResolver = {
|
|
|
29
28
|
]
|
|
30
29
|
})
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
.findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
36
|
-
|
|
37
|
-
if (!sellercraft) {
|
|
31
|
+
const orderSource: string = releaseGood.source
|
|
32
|
+
switch (orderSource) {
|
|
33
|
+
case ApplicationType.MMS:
|
|
38
34
|
const companyDomain: Domain = releaseGood.bizplace.company.domain
|
|
39
35
|
const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
40
36
|
where: { orderNo: releaseGood.refNo, domain: companyDomain },
|
|
@@ -52,9 +48,38 @@ export const completePackingResolver = {
|
|
|
52
48
|
const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
53
49
|
await ecommerceCtrl.createOrderShip(releaseGood, marketplaceStore, marketplaceOrder, companyDomain)
|
|
54
50
|
}
|
|
55
|
-
|
|
51
|
+
break
|
|
52
|
+
|
|
53
|
+
default:
|
|
54
|
+
break
|
|
56
55
|
}
|
|
57
56
|
|
|
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
|
+
|
|
58
83
|
const bizplace: Bizplace = await getMyBizplace(domain, user)
|
|
59
84
|
const worksheetController: WorksheetController = new WorksheetController(tx, domain, user)
|
|
60
85
|
await worksheetController.notifyToCustomer(bizplace, {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EntityManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import { User } from '@things-factory/auth-base'
|
|
3
|
+
import { ApplicationType, 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,14 +29,31 @@ 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
|
-
|
|
32
|
+
const orderSource: string = releaseGood.source
|
|
33
|
+
switch (orderSource) {
|
|
34
|
+
case ApplicationType.SELLERCRAFT:
|
|
35
|
+
const sellercraft: Sellercraft = await tx
|
|
36
|
+
.getRepository(Sellercraft)
|
|
37
|
+
.findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
if (sellercraft) {
|
|
40
|
+
const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
|
|
41
|
+
await sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
|
|
42
|
+
}
|
|
43
|
+
break
|
|
44
|
+
|
|
45
|
+
default:
|
|
46
|
+
break
|
|
41
47
|
}
|
|
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
|
+
// }
|
|
42
59
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EntityManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import { User } from '@things-factory/auth-base'
|
|
3
|
+
import { ApplicationType, 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,17 +34,36 @@ 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
|
-
|
|
37
|
+
const orderSource: string = releaseGood.source
|
|
38
|
+
switch (orderSource) {
|
|
39
|
+
case ApplicationType.SELLERCRAFT:
|
|
40
|
+
if (!releaseGood?.airwayBill) {
|
|
41
|
+
const sellercraft: Sellercraft = await tx
|
|
42
|
+
.getRepository(Sellercraft)
|
|
43
|
+
.findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
if (sellercraft) {
|
|
46
|
+
const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
|
|
47
|
+
sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
break
|
|
52
|
+
|
|
53
|
+
default:
|
|
54
|
+
break
|
|
46
55
|
}
|
|
47
56
|
|
|
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
|
+
// }
|
|
48
67
|
} catch (error) {
|
|
49
68
|
throw error
|
|
50
69
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { EntityManager,
|
|
1
|
+
import { EntityManager, getManager, SelectQueryBuilder } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import { User } from '@things-factory/auth-base'
|
|
3
|
+
import { ApplicationType, 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,11 +10,12 @@ 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'
|
|
13
14
|
import { Domain } from '@things-factory/shell'
|
|
14
15
|
import { Inventory, Location } from '@things-factory/warehouse-base'
|
|
15
16
|
|
|
16
17
|
import { WORKSHEET_TYPE } from '../../../constants'
|
|
17
|
-
import { SellercraftController } from '../../../controllers'
|
|
18
|
+
import { PackingWorksheetController, SellercraftController } from '../../../controllers'
|
|
18
19
|
import { Worksheet, WorksheetDetail } from '../../../entities'
|
|
19
20
|
import { fetchExecutingWorksheet } from '../../../utils'
|
|
20
21
|
|
|
@@ -47,7 +48,7 @@ export const packingWorksheetResolver = {
|
|
|
47
48
|
.innerJoinAndSelect(
|
|
48
49
|
'worksheets',
|
|
49
50
|
'ws',
|
|
50
|
-
`orderInventory.release_good_id = ws.release_good_id AND ws.type = 'PACKING' AND ws.status = 'EXECUTING'`
|
|
51
|
+
`orderInventory.release_good_id = ws.release_good_id AND ws.type = 'PACKING' AND (ws.status = 'EXECUTING' OR ws.status = 'DEACTIVATED')`
|
|
51
52
|
)
|
|
52
53
|
.where('orderInventory.domain_id = :domainId', { domainId: domain.id })
|
|
53
54
|
.andWhere('orderInventory.status IN (:...orderInventoryStatus)', {
|
|
@@ -61,11 +62,22 @@ export const packingWorksheetResolver = {
|
|
|
61
62
|
.andWhere('releaseGood.status IN (:...status)', {
|
|
62
63
|
status: [ORDER_STATUS.READY_TO_PACK, ORDER_STATUS.PACKING]
|
|
63
64
|
})
|
|
65
|
+
.orderBy(`case when orderInventory.status = '${ORDER_INVENTORY_STATUS.PACKED}' then 1 end`)
|
|
66
|
+
.addOrderBy('ws.created_at', 'ASC')
|
|
64
67
|
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
const [orderInventoriesByBin, totalInventoriesByBin] = await qb.getManyAndCount()
|
|
69
|
+
// @oscarchuaweiwen-fsd @chrislim I suggest using getMany() instead since the total is redundant here
|
|
70
|
+
|
|
71
|
+
// remove duplicated count of release good
|
|
72
|
+
const filteredRO = orderInventoriesByBin.map(oiBin => {
|
|
73
|
+
return oiBin.releaseGood.name
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
if (orderInventoriesByBin.length > 0) {
|
|
77
|
+
releaseGoodNo = orderInventoriesByBin[0].releaseGood.name
|
|
78
|
+
releaseGood = orderInventoriesByBin[0].releaseGood
|
|
79
|
+
releaseGood.totalInventoriesByBin = [...new Set(filteredRO)].length
|
|
80
|
+
releaseGood.isOrderInventoryBin = true
|
|
69
81
|
} else {
|
|
70
82
|
throw new Error(`Bin do not have any existing order.`)
|
|
71
83
|
}
|
|
@@ -95,24 +107,59 @@ export const packingWorksheetResolver = {
|
|
|
95
107
|
releaseGood
|
|
96
108
|
)
|
|
97
109
|
|
|
98
|
-
|
|
110
|
+
if (worksheet.status === 'DEACTIVATED') {
|
|
111
|
+
const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
|
|
112
|
+
|
|
113
|
+
const directActivatePackingWorksheet: Setting = await tx.getRepository(Setting).findOne({
|
|
114
|
+
where: { domain: domain, category: 'id-rule', name: 'enable-direct-activate-packing-worksheet' }
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
const partnerDirectActivatePackingWorksheetSetting: PartnerSetting = await tx
|
|
118
|
+
.getRepository(PartnerSetting)
|
|
119
|
+
.findOne({
|
|
120
|
+
where: {
|
|
121
|
+
setting: directActivatePackingWorksheet,
|
|
122
|
+
domain: domain,
|
|
123
|
+
partnerDomain: releaseGood.bizplace?.domain
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
if (
|
|
128
|
+
directActivatePackingWorksheet != undefined &&
|
|
129
|
+
directActivatePackingWorksheet.value.toLowerCase() == 'true'
|
|
130
|
+
) {
|
|
131
|
+
if (partnerDirectActivatePackingWorksheetSetting != undefined) {
|
|
132
|
+
if (partnerDirectActivatePackingWorksheetSetting.value.toLowerCase() == 'true')
|
|
133
|
+
await packingWSCtrl.activatePacking(worksheet.name)
|
|
134
|
+
} else {
|
|
135
|
+
await packingWSCtrl.activatePacking(worksheet.name)
|
|
136
|
+
}
|
|
137
|
+
} else {
|
|
138
|
+
throw new Error('Kindly go to packing worksheet page to activate the packing worksheet')
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
let marketplaceOrder: MarketplaceOrder = {}
|
|
99
143
|
let marketplaceOrderItems: MarketplaceOrderItem[] = []
|
|
100
144
|
let marketplaceStore
|
|
101
145
|
let trackingNo: string
|
|
102
146
|
let shippingProvider: string
|
|
103
147
|
let marketplaceStatus: string
|
|
104
148
|
|
|
105
|
-
|
|
149
|
+
const orderSource: string = releaseGood.source
|
|
150
|
+
switch (orderSource) {
|
|
151
|
+
case ApplicationType.SELLERCRAFT:
|
|
152
|
+
const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
|
|
153
|
+
domain: worksheet.bizplace.domain,
|
|
154
|
+
status: SellercraftStatus.ACTIVE
|
|
155
|
+
})
|
|
106
156
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
157
|
+
if (sellercraft) {
|
|
158
|
+
getSellercraftDocument(sellercraft, releaseGood, domain, user)
|
|
159
|
+
}
|
|
160
|
+
break
|
|
111
161
|
|
|
112
|
-
|
|
113
|
-
// asynchronously get document from sellercraft
|
|
114
|
-
getSellercraftDocument(sellercraft, releaseGood, domain, user)
|
|
115
|
-
} else {
|
|
162
|
+
case ApplicationType.MMS:
|
|
116
163
|
marketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
117
164
|
where: { orderNo: releaseGood.refNo },
|
|
118
165
|
relations: [
|
|
@@ -148,9 +195,60 @@ export const packingWorksheetResolver = {
|
|
|
148
195
|
|
|
149
196
|
marketplaceStore = marketplaceOrder?.marketplaceStore
|
|
150
197
|
marketplaceStatus = marketplaceOrder?.status
|
|
151
|
-
|
|
198
|
+
break
|
|
199
|
+
|
|
200
|
+
default:
|
|
201
|
+
break
|
|
152
202
|
}
|
|
153
203
|
|
|
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
|
+
|
|
154
252
|
return {
|
|
155
253
|
worksheetInfo: {
|
|
156
254
|
releaseGood,
|
|
@@ -165,8 +263,8 @@ export const packingWorksheetResolver = {
|
|
|
165
263
|
airwayBill: releaseGood?.airwayBill,
|
|
166
264
|
checkedRemarkBy: releaseGood?.checkedRemarkBy,
|
|
167
265
|
invoice: releaseGood?.invoice,
|
|
168
|
-
platform: marketplaceOrder ? marketplaceOrder.marketplaceStore
|
|
169
|
-
marketplaceStoreId: marketplaceOrder ? marketplaceOrder.marketplaceStore
|
|
266
|
+
platform: Object.keys(marketplaceOrder).length > 0 ? marketplaceOrder.marketplaceStore?.platform : 'operato',
|
|
267
|
+
marketplaceStoreId: Object.keys(marketplaceOrder).length > 0 ? marketplaceOrder.marketplaceStore?.id : '',
|
|
170
268
|
marketplaceStatus: marketplaceStatus ? marketplaceStatus : '',
|
|
171
269
|
marketplaceOrder: marketplaceOrder ? marketplaceOrder : ''
|
|
172
270
|
},
|
|
@@ -265,7 +363,14 @@ async function getSellercraftDocument(sellercraft: Sellercraft, releaseGood: Rel
|
|
|
265
363
|
}
|
|
266
364
|
}
|
|
267
365
|
} catch (error) {
|
|
268
|
-
logger.error(
|
|
366
|
+
logger.error(
|
|
367
|
+
`packing-worksheet[getSellercraftDocument]:(data:${JSON.stringify({
|
|
368
|
+
sellercraft,
|
|
369
|
+
releaseGood,
|
|
370
|
+
domain,
|
|
371
|
+
user
|
|
372
|
+
})}) ${error} `
|
|
373
|
+
)
|
|
269
374
|
}
|
|
270
375
|
})
|
|
271
|
-
}
|
|
376
|
+
}
|