@things-factory/worksheet-base 4.3.144 → 4.3.146
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-server/controllers/ecommerce/ecommerce-controller.js +48 -0
- package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -1
- package/dist-server/controllers/ecommerce/sellercraft-controller.js +82 -31
- package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
- package/dist-server/controllers/outbound/packing-worksheet-controller.js +265 -189
- package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/packing.js +6 -7
- package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +84 -38
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +44 -9
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +41 -11
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/types/worksheet/index.js +6 -5
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-info.js +2 -0
- package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
- package/package.json +18 -18
- package/server/controllers/ecommerce/ecommerce-controller.ts +52 -1
- package/server/controllers/ecommerce/sellercraft-controller.ts +119 -46
- package/server/controllers/outbound/packing-worksheet-controller.ts +314 -211
- package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +5 -4
- package/server/graphql/resolvers/worksheet/packing/packing.ts +6 -8
- package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +6 -9
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +124 -42
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +59 -11
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +47 -12
- package/server/graphql/types/worksheet/index.ts +6 -5
- package/server/graphql/types/worksheet/worksheet-info.ts +2 -0
|
@@ -6,12 +6,11 @@ import { ReleaseGood } from '@things-factory/sales-base'
|
|
|
6
6
|
import { Domain } from '@things-factory/shell'
|
|
7
7
|
|
|
8
8
|
import { PackingWorksheetController, SellercraftController } from '../../../../controllers'
|
|
9
|
-
import { Worksheet } from '../../../../entities'
|
|
10
9
|
|
|
11
10
|
export const packingResolver = {
|
|
12
|
-
async packing(_: any, {
|
|
11
|
+
async packing(_: any, { orderPackageItemId, releaseQty, serialNumber }, context: any) {
|
|
13
12
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
14
|
-
await packing(tx, domain, user,
|
|
13
|
+
await packing(tx, domain, user, orderPackageItemId, releaseQty, serialNumber)
|
|
15
14
|
}
|
|
16
15
|
}
|
|
17
16
|
|
|
@@ -19,22 +18,21 @@ export async function packing(
|
|
|
19
18
|
tx: EntityManager,
|
|
20
19
|
domain: Domain,
|
|
21
20
|
user: User,
|
|
22
|
-
|
|
21
|
+
orderPackageItemId: string,
|
|
23
22
|
releaseQty: number,
|
|
24
23
|
serialNumber: string
|
|
25
24
|
) {
|
|
26
25
|
const worksheetController: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
|
|
27
|
-
const worksheetDetail = await worksheetController.packing(
|
|
26
|
+
const worksheetDetail = await worksheetController.packing(orderPackageItemId, releaseQty, serialNumber)
|
|
28
27
|
|
|
29
|
-
let releaseGood: ReleaseGood = worksheetDetail.
|
|
30
|
-
const worksheet: Worksheet = worksheetDetail.worksheet
|
|
28
|
+
let releaseGood: ReleaseGood = worksheetDetail.releaseGood
|
|
31
29
|
|
|
32
30
|
const orderSource: string = releaseGood.source
|
|
33
31
|
switch (orderSource) {
|
|
34
32
|
case ApplicationType.SELLERCRAFT:
|
|
35
33
|
const sellercraft: Sellercraft = await tx
|
|
36
34
|
.getRepository(Sellercraft)
|
|
37
|
-
.findOne({ domain:
|
|
35
|
+
.findOne({ domain: worksheetDetail.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
38
36
|
|
|
39
37
|
if (sellercraft) {
|
|
40
38
|
const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { EntityManager } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
|
|
5
|
-
import { ReleaseGood } from '@things-factory/sales-base'
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
6
4
|
import { Domain } from '@things-factory/shell'
|
|
7
5
|
|
|
8
|
-
import { PackingWorksheetController
|
|
9
|
-
import { Worksheet } from '../../../../entities'
|
|
6
|
+
import { PackingWorksheetController } from '../../../../controllers'
|
|
10
7
|
|
|
11
8
|
export const scanProductPackingResolver = {
|
|
12
|
-
async scanProductPacking(_: any, {
|
|
9
|
+
async scanProductPacking(_: any, { orderPackageItemId, productBarcode, serialNumber }, context: any) {
|
|
13
10
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
14
|
-
return await scanProductPacking(tx, domain, user,
|
|
11
|
+
return await scanProductPacking(tx, domain, user, orderPackageItemId, productBarcode, serialNumber)
|
|
15
12
|
}
|
|
16
13
|
}
|
|
17
14
|
|
|
@@ -19,7 +16,7 @@ export async function scanProductPacking(
|
|
|
19
16
|
tx: EntityManager,
|
|
20
17
|
domain: Domain,
|
|
21
18
|
user: User,
|
|
22
|
-
|
|
19
|
+
orderPackageItemId: string,
|
|
23
20
|
productBarcode: string,
|
|
24
21
|
serialNumber?: string
|
|
25
22
|
) {
|
|
@@ -27,7 +24,7 @@ export async function scanProductPacking(
|
|
|
27
24
|
console.time('execution time to scan for packing')
|
|
28
25
|
const worksheetController: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
|
|
29
26
|
const inventoryItems = await worksheetController.scanProductPacking(
|
|
30
|
-
|
|
27
|
+
orderPackageItemId,
|
|
31
28
|
productBarcode,
|
|
32
29
|
serialNumber
|
|
33
30
|
)
|
|
@@ -1,22 +1,48 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
EntityManager,
|
|
3
|
+
getManager,
|
|
4
|
+
SelectQueryBuilder
|
|
5
|
+
} from 'typeorm'
|
|
2
6
|
|
|
3
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
ApplicationType,
|
|
9
|
+
User
|
|
10
|
+
} from '@things-factory/auth-base'
|
|
4
11
|
import { logger } from '@things-factory/env'
|
|
5
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
Sellercraft,
|
|
14
|
+
SellercraftStatus
|
|
15
|
+
} from '@things-factory/integration-sellercraft'
|
|
6
16
|
import {
|
|
7
17
|
MarketplaceOrder,
|
|
8
18
|
MarketplaceOrderItem,
|
|
9
19
|
MarketplaceOrderShipping,
|
|
10
20
|
MarketplaceOrderShippingItem
|
|
11
21
|
} from '@things-factory/marketplace-base'
|
|
12
|
-
import {
|
|
13
|
-
|
|
22
|
+
import {
|
|
23
|
+
ORDER_INVENTORY_STATUS,
|
|
24
|
+
ORDER_STATUS,
|
|
25
|
+
OrderInventory,
|
|
26
|
+
OrderPackage,
|
|
27
|
+
OrderProduct,
|
|
28
|
+
ReleaseGood
|
|
29
|
+
} from '@things-factory/sales-base'
|
|
30
|
+
import {
|
|
31
|
+
PartnerSetting,
|
|
32
|
+
Setting
|
|
33
|
+
} from '@things-factory/setting-base'
|
|
14
34
|
import { Domain } from '@things-factory/shell'
|
|
15
|
-
import {
|
|
35
|
+
import { Location } from '@things-factory/warehouse-base'
|
|
16
36
|
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
37
|
+
import {
|
|
38
|
+
WORKSHEET_STATUS,
|
|
39
|
+
WORKSHEET_TYPE
|
|
40
|
+
} from '../../../constants'
|
|
41
|
+
import {
|
|
42
|
+
PackingWorksheetController,
|
|
43
|
+
SellercraftController
|
|
44
|
+
} from '../../../controllers'
|
|
45
|
+
import { Worksheet } from '../../../entities'
|
|
20
46
|
|
|
21
47
|
export const packingWorksheetResolver = {
|
|
22
48
|
async packingWorksheet(_: any, { releaseGoodNo }, context: any) {
|
|
@@ -30,9 +56,12 @@ export const packingWorksheetResolver = {
|
|
|
30
56
|
relations: ['bizplace', 'bizplace.domain']
|
|
31
57
|
})
|
|
32
58
|
|
|
59
|
+
let binLocation: Location = null
|
|
60
|
+
let isBatchPicking: boolean = false
|
|
61
|
+
|
|
33
62
|
// Find Release Order based on Bin
|
|
34
63
|
if (!releaseGood) {
|
|
35
|
-
|
|
64
|
+
binLocation = await tx.getRepository(Location).findOne({
|
|
36
65
|
where: { domain, name: releaseGoodNo }
|
|
37
66
|
})
|
|
38
67
|
|
|
@@ -68,14 +97,42 @@ export const packingWorksheetResolver = {
|
|
|
68
97
|
// @oscarchuaweiwen-fsd @chrislim I suggest using getMany() instead since the total is redundant here
|
|
69
98
|
|
|
70
99
|
// remove duplicated count of release good
|
|
71
|
-
const filteredRO =
|
|
72
|
-
|
|
73
|
-
|
|
100
|
+
const filteredRO = [
|
|
101
|
+
...new Set(
|
|
102
|
+
orderInventoriesByBin.map(oiBin => {
|
|
103
|
+
return oiBin.releaseGood.id
|
|
104
|
+
})
|
|
105
|
+
)
|
|
106
|
+
]
|
|
74
107
|
|
|
75
108
|
if (orderInventoriesByBin.length > 0) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
109
|
+
if (filteredRO?.length > 1) {
|
|
110
|
+
await Promise.all(
|
|
111
|
+
filteredRO.map(async roId => {
|
|
112
|
+
let orderPackages: OrderPackage[] = await tx
|
|
113
|
+
.getRepository(OrderPackage)
|
|
114
|
+
.createQueryBuilder('opk')
|
|
115
|
+
.innerJoinAndSelect('opk.releaseGood', 'rg')
|
|
116
|
+
.innerJoinAndSelect('rg.bizplace', 'bizplace')
|
|
117
|
+
.innerJoinAndSelect('bizplace.domain', 'domain')
|
|
118
|
+
.innerJoinAndSelect('rg.orderInventories', 'oi')
|
|
119
|
+
.where('rg.id = :releaseGoodId', { releaseGoodId: roId })
|
|
120
|
+
.getMany()
|
|
121
|
+
|
|
122
|
+
if (orderPackages?.length) {
|
|
123
|
+
releaseGood = orderPackages[0].releaseGood
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
)
|
|
127
|
+
releaseGoodNo = releaseGood?.name
|
|
128
|
+
isBatchPicking = releaseGood?.orderInventories[0]?.refWorksheetId ? true : false
|
|
129
|
+
} else {
|
|
130
|
+
releaseGoodNo = orderInventoriesByBin[0].releaseGood.name
|
|
131
|
+
releaseGood = orderInventoriesByBin[0].releaseGood
|
|
132
|
+
isBatchPicking = orderInventoriesByBin[0]?.refWorksheetId ? true : false
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
releaseGood.totalInventoriesByBin = filteredRO.length
|
|
79
136
|
releaseGood.isOrderInventoryBin = true
|
|
80
137
|
} else {
|
|
81
138
|
throw new Error(`Bin do not have any existing order.`)
|
|
@@ -85,6 +142,8 @@ export const packingWorksheetResolver = {
|
|
|
85
142
|
|
|
86
143
|
if (!releaseGood) throw new Error(`Release good do not exist.`)
|
|
87
144
|
|
|
145
|
+
const orderSource: string = releaseGood.source
|
|
146
|
+
|
|
88
147
|
const worksheet: Worksheet = await tx
|
|
89
148
|
.getRepository(Worksheet)
|
|
90
149
|
.createQueryBuilder('w')
|
|
@@ -104,9 +163,28 @@ export const packingWorksheetResolver = {
|
|
|
104
163
|
|
|
105
164
|
if (!worksheet) throw new Error('Worksheet does not exist')
|
|
106
165
|
|
|
166
|
+
const orderPackages: OrderPackage[] = await tx.getRepository(OrderPackage).find({
|
|
167
|
+
where: { releaseGood, domain, bizplace: releaseGood.bizplace },
|
|
168
|
+
order: { updatedAt: 'DESC' },
|
|
169
|
+
relations: [
|
|
170
|
+
'orderPackageItems',
|
|
171
|
+
'orderPackageItems.orderProduct',
|
|
172
|
+
'orderPackageItems.orderProduct.product',
|
|
173
|
+
'orderPackageItems.orderProduct.product.productDetails'
|
|
174
|
+
]
|
|
175
|
+
})
|
|
176
|
+
|
|
107
177
|
if (worksheet.status === WORKSHEET_STATUS.DONE) {
|
|
108
178
|
throw new Error(`Worksheet is completed already`)
|
|
179
|
+
} else if (worksheet.status === WORKSHEET_STATUS.EXECUTING) {
|
|
180
|
+
if (orderPackages?.length == 0 && orderSource == ApplicationType.SELLERCRAFT) {
|
|
181
|
+
throw new Error('Waiting for packages from marketplace. Please retry in while.')
|
|
182
|
+
}
|
|
109
183
|
} else if (worksheet.status === WORKSHEET_STATUS.DEACTIVATED) {
|
|
184
|
+
if (orderPackages?.length == 0 && orderSource == ApplicationType.SELLERCRAFT) {
|
|
185
|
+
throw new Error('Waiting for packages from marketplace. Please retry in while.')
|
|
186
|
+
}
|
|
187
|
+
|
|
110
188
|
const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
|
|
111
189
|
|
|
112
190
|
const directActivatePackingWorksheet: Setting = await tx.getRepository(Setting).findOne({
|
|
@@ -145,7 +223,6 @@ export const packingWorksheetResolver = {
|
|
|
145
223
|
let shippingProvider: string
|
|
146
224
|
let marketplaceStatus: string
|
|
147
225
|
|
|
148
|
-
const orderSource: string = releaseGood.source
|
|
149
226
|
switch (orderSource) {
|
|
150
227
|
case ApplicationType.SELLERCRAFT:
|
|
151
228
|
const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
|
|
@@ -201,6 +278,9 @@ export const packingWorksheetResolver = {
|
|
|
201
278
|
break
|
|
202
279
|
}
|
|
203
280
|
|
|
281
|
+
let processingOrderPackage: OrderPackage[] =
|
|
282
|
+
orderPackages.filter(opk => opk.status == ORDER_STATUS.PROCESSING) || []
|
|
283
|
+
|
|
204
284
|
return {
|
|
205
285
|
worksheetInfo: {
|
|
206
286
|
releaseGood,
|
|
@@ -212,37 +292,39 @@ export const packingWorksheetResolver = {
|
|
|
212
292
|
startedAt: worksheet.startedAt,
|
|
213
293
|
shippingProvider: shippingProvider ? shippingProvider : '',
|
|
214
294
|
trackingNo: trackingNo ? trackingNo : '',
|
|
215
|
-
airwayBill:
|
|
295
|
+
airwayBill: processingOrderPackage[0]?.airwayBill,
|
|
216
296
|
checkedRemarkBy: releaseGood?.checkedRemarkBy,
|
|
217
|
-
invoice:
|
|
297
|
+
invoice: processingOrderPackage[0]?.invoice,
|
|
218
298
|
platform: Object.keys(marketplaceOrder).length > 0 ? marketplaceOrder.marketplaceStore?.platform : 'operato',
|
|
219
299
|
marketplaceStoreId: Object.keys(marketplaceOrder).length > 0 ? marketplaceOrder.marketplaceStore?.id : '',
|
|
220
300
|
marketplaceStatus: marketplaceStatus ? marketplaceStatus : '',
|
|
221
|
-
marketplaceOrder: marketplaceOrder ? marketplaceOrder : ''
|
|
301
|
+
marketplaceOrder: marketplaceOrder ? marketplaceOrder : '',
|
|
302
|
+
orderPackage: processingOrderPackage[0],
|
|
303
|
+
orderPackages
|
|
222
304
|
},
|
|
223
|
-
worksheetDetailInfos:
|
|
224
|
-
.map(
|
|
225
|
-
const
|
|
226
|
-
const inventory: Inventory = targetInventory.inventory
|
|
305
|
+
worksheetDetailInfos: processingOrderPackage[0].orderPackageItems
|
|
306
|
+
.map(opi => {
|
|
307
|
+
const orderProduct: OrderProduct = opi.orderProduct
|
|
227
308
|
return {
|
|
228
|
-
id:
|
|
229
|
-
name:
|
|
230
|
-
palletId: inventory.palletId,
|
|
231
|
-
cartonId: inventory.cartonId,
|
|
232
|
-
batchId:
|
|
233
|
-
batchIdRef: inventory.batchIdRef,
|
|
234
|
-
product:
|
|
235
|
-
sku:
|
|
236
|
-
releaseQty:
|
|
237
|
-
packedQty:
|
|
238
|
-
status:
|
|
239
|
-
description: packingWSD.description,
|
|
240
|
-
targetName: targetInventory.name,
|
|
241
|
-
packingType: inventory.packingType,
|
|
242
|
-
packingSize: inventory.packingSize,
|
|
243
|
-
binLocation:
|
|
244
|
-
|
|
245
|
-
|
|
309
|
+
id: opi.id,
|
|
310
|
+
name: opi.name,
|
|
311
|
+
// palletId: inventory.palletId,
|
|
312
|
+
// cartonId: inventory.cartonId,
|
|
313
|
+
batchId: orderProduct.batchId,
|
|
314
|
+
// batchIdRef: inventory.batchIdRef,
|
|
315
|
+
product: orderProduct.product,
|
|
316
|
+
sku: orderProduct.product.sku,
|
|
317
|
+
releaseQty: opi.releaseQty,
|
|
318
|
+
packedQty: opi?.packedQty || 0,
|
|
319
|
+
status: opi.status,
|
|
320
|
+
// description: packingWSD.description,
|
|
321
|
+
// targetName: targetInventory.name,
|
|
322
|
+
// packingType: inventory.packingType,
|
|
323
|
+
// packingSize: inventory.packingSize,
|
|
324
|
+
binLocation: binLocation,
|
|
325
|
+
isBatchPicking
|
|
326
|
+
// location: inventory.location,
|
|
327
|
+
// relatedOrderInv: targetInventory
|
|
246
328
|
}
|
|
247
329
|
})
|
|
248
330
|
.sort((a, b) => {
|
|
@@ -5,7 +5,14 @@ import { Bizplace, getMyBizplace } from '@things-factory/biz-base'
|
|
|
5
5
|
import { MarketplaceStore } from '@things-factory/integration-marketplace'
|
|
6
6
|
import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
|
|
7
7
|
import { MarketplaceOrder } from '@things-factory/marketplace-base'
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
ORDER_STATUS,
|
|
10
|
+
OrderInventory,
|
|
11
|
+
OrderNoGenerator,
|
|
12
|
+
OrderPackage,
|
|
13
|
+
OrderPackageItem,
|
|
14
|
+
ReleaseGood
|
|
15
|
+
} from '@things-factory/sales-base'
|
|
9
16
|
import { Setting } from '@things-factory/setting-base'
|
|
10
17
|
import { Domain } from '@things-factory/shell'
|
|
11
18
|
|
|
@@ -66,7 +73,17 @@ export async function completeBatchPicking(
|
|
|
66
73
|
uniqueReleaseGoods.map(async releaseGood => {
|
|
67
74
|
let foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
|
|
68
75
|
where: { id: releaseGood.id },
|
|
69
|
-
relations: [
|
|
76
|
+
relations: [
|
|
77
|
+
'domain',
|
|
78
|
+
'creator',
|
|
79
|
+
'updater',
|
|
80
|
+
'orderPackages',
|
|
81
|
+
'orderProducts',
|
|
82
|
+
'orderProducts.product',
|
|
83
|
+
'bizplace',
|
|
84
|
+
'bizplace.company',
|
|
85
|
+
'bizplace.company.domain'
|
|
86
|
+
]
|
|
70
87
|
})
|
|
71
88
|
const orderSource: string = foundReleaseGood.source
|
|
72
89
|
switch (orderSource) {
|
|
@@ -80,14 +97,8 @@ export async function completeBatchPicking(
|
|
|
80
97
|
await getManager().transaction(async txMgr => {
|
|
81
98
|
const sellercraftCtrl: SellercraftController = new SellercraftController(txMgr, domain, user)
|
|
82
99
|
|
|
83
|
-
if (!releaseGood?.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
if (releaseGood?.packageId) {
|
|
87
|
-
await txMgr
|
|
88
|
-
.getRepository(ReleaseGood)
|
|
89
|
-
.update({ id: releaseGood.id }, { packageId: releaseGood.packageId, updater: releaseGood.updater })
|
|
90
|
-
}
|
|
100
|
+
if (!releaseGood?.orderPackages?.length) {
|
|
101
|
+
await sellercraftCtrl.packOrder(sellercraft, foundReleaseGood)
|
|
91
102
|
}
|
|
92
103
|
|
|
93
104
|
const rtsTriggerLevel: Setting = await tx.getRepository(Setting).findOne({
|
|
@@ -119,13 +130,50 @@ export async function completeBatchPicking(
|
|
|
119
130
|
})
|
|
120
131
|
const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
|
|
121
132
|
|
|
133
|
+
const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
122
134
|
if (marketplaceStore?.isAutoUpdateShipment) {
|
|
123
|
-
const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
124
135
|
await ecommerceCtrl.createOrderShip(foundReleaseGood, marketplaceStore, marketplaceOrder, companyDomain)
|
|
125
136
|
}
|
|
137
|
+
await ecommerceCtrl.createOrderPackage(
|
|
138
|
+
tx,
|
|
139
|
+
marketplaceOrder,
|
|
140
|
+
companyDomain,
|
|
141
|
+
marketplaceStore,
|
|
142
|
+
foundReleaseGood
|
|
143
|
+
)
|
|
126
144
|
break
|
|
127
145
|
|
|
128
146
|
default:
|
|
147
|
+
const orderPackage: OrderPackage = {
|
|
148
|
+
name: OrderNoGenerator.orderPackage(),
|
|
149
|
+
packageId: null,
|
|
150
|
+
trackingNo: null,
|
|
151
|
+
transporter: null,
|
|
152
|
+
airwayBill: null,
|
|
153
|
+
status: ORDER_STATUS.PROCESSING,
|
|
154
|
+
releaseGood,
|
|
155
|
+
domain: releaseGood.domain,
|
|
156
|
+
bizplace: releaseGood.bizplace,
|
|
157
|
+
creator: releaseGood.creator,
|
|
158
|
+
updater: releaseGood.updater
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
let savedOrderPackage: OrderPackage = await tx.getRepository(OrderPackage).save(orderPackage)
|
|
162
|
+
const orderPackageItems: OrderPackageItem[] = releaseGood.orderProducts.map(op => {
|
|
163
|
+
return {
|
|
164
|
+
name: OrderNoGenerator.orderPackageItem(),
|
|
165
|
+
orderProduct: op,
|
|
166
|
+
status: ORDER_STATUS.PROCESSING,
|
|
167
|
+
releaseQty: op.releaseQty,
|
|
168
|
+
orderPackage: savedOrderPackage,
|
|
169
|
+
domain: releaseGood.domain,
|
|
170
|
+
bizplace: releaseGood.bizplace,
|
|
171
|
+
creator: releaseGood.creator,
|
|
172
|
+
updater: releaseGood.updater
|
|
173
|
+
}
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
await tx.getRepository(OrderPackageItem).save(orderPackageItems)
|
|
129
177
|
break
|
|
130
178
|
}
|
|
131
179
|
})
|
|
@@ -7,7 +7,6 @@ import { Account, AccountingAPI } from '@things-factory/integration-accounting'
|
|
|
7
7
|
import { LastMileAPI, LastMileDelivery } from '@things-factory/integration-lmd'
|
|
8
8
|
import { MarketplaceStore, MarketplaceTransporter } from '@things-factory/integration-marketplace'
|
|
9
9
|
import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
|
|
10
|
-
import { Setting } from '@things-factory/setting-base'
|
|
11
10
|
import {
|
|
12
11
|
MarketplaceOrder,
|
|
13
12
|
MarketplaceOrderItem,
|
|
@@ -18,9 +17,13 @@ import {
|
|
|
18
17
|
ORDER_INVENTORY_STATUS,
|
|
19
18
|
ORDER_STATUS,
|
|
20
19
|
OrderInventory,
|
|
20
|
+
OrderNoGenerator,
|
|
21
|
+
OrderPackage,
|
|
22
|
+
OrderPackageItem,
|
|
21
23
|
OrderProduct,
|
|
22
24
|
ReleaseGood
|
|
23
25
|
} from '@things-factory/sales-base'
|
|
26
|
+
import { Setting } from '@things-factory/setting-base'
|
|
24
27
|
import { Domain } from '@things-factory/shell'
|
|
25
28
|
|
|
26
29
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
|
|
@@ -61,13 +64,17 @@ export async function completePicking(
|
|
|
61
64
|
let releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
|
|
62
65
|
where: { domain, name: releaseGoodNo },
|
|
63
66
|
relations: [
|
|
67
|
+
'domain',
|
|
64
68
|
'bizplace',
|
|
65
69
|
'bizplace.domain',
|
|
66
70
|
'bizplace.company',
|
|
67
71
|
'bizplace.company.domain',
|
|
72
|
+
'orderPackages',
|
|
68
73
|
'orderProducts',
|
|
69
74
|
'orderProducts.product',
|
|
70
|
-
'orderProducts.productDetail'
|
|
75
|
+
'orderProducts.productDetail',
|
|
76
|
+
'creator',
|
|
77
|
+
'updater'
|
|
71
78
|
]
|
|
72
79
|
})
|
|
73
80
|
|
|
@@ -103,18 +110,12 @@ export async function completePicking(
|
|
|
103
110
|
await getManager().transaction(async txMgr => {
|
|
104
111
|
const sellercraftCtrl: SellercraftController = new SellercraftController(txMgr, domain, user)
|
|
105
112
|
|
|
106
|
-
if (!releaseGood?.
|
|
113
|
+
if (!releaseGood?.orderPackages?.length) {
|
|
107
114
|
const orderProducts: OrderProduct[] = await tx.getRepository(OrderProduct).find({
|
|
108
115
|
where: { releaseGood },
|
|
109
116
|
relations: ['product', 'product.productDetails']
|
|
110
117
|
})
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (releaseGood?.packageId) {
|
|
114
|
-
await txMgr
|
|
115
|
-
.getRepository(ReleaseGood)
|
|
116
|
-
.update({ id: releaseGood.id }, { packageId: releaseGood.packageId, updater: releaseGood.updater })
|
|
117
|
-
}
|
|
118
|
+
await sellercraftCtrl.packOrder(sellercraft, { ...releaseGood, orderProducts })
|
|
118
119
|
}
|
|
119
120
|
|
|
120
121
|
const rtsTriggerLevel: Setting = await tx.getRepository(Setting).findOne({
|
|
@@ -145,18 +146,20 @@ export async function completePicking(
|
|
|
145
146
|
})
|
|
146
147
|
|
|
147
148
|
if (marketplaceOrder) {
|
|
149
|
+
const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
148
150
|
const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
|
|
149
151
|
let eTraxOption: boolean
|
|
150
152
|
|
|
151
153
|
if (marketplaceStore?.isAutoUpdateShipment) {
|
|
152
|
-
const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
153
154
|
await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PACKING)
|
|
154
155
|
|
|
155
156
|
await ecommerceCtrl.createOrderShip(releaseGood, marketplaceStore, marketplaceOrder, companyDomain)
|
|
156
157
|
}
|
|
157
158
|
|
|
158
|
-
if (!marketplaceOrder)
|
|
159
|
+
if (!marketplaceOrder) {
|
|
159
160
|
throw new Error('Failed to find ecommerce order, kindly contact our support team regarding this issue')
|
|
161
|
+
}
|
|
162
|
+
|
|
160
163
|
eTraxOption = marketplaceOrder?.marketplaceStore.eTrax
|
|
161
164
|
|
|
162
165
|
// if eTrax option is true
|
|
@@ -248,10 +251,42 @@ export async function completePicking(
|
|
|
248
251
|
else throw resp
|
|
249
252
|
}
|
|
250
253
|
}
|
|
254
|
+
|
|
255
|
+
await ecommerceCtrl.createOrderPackage(tx, marketplaceOrder, companyDomain, marketplaceStore, releaseGood)
|
|
251
256
|
}
|
|
252
257
|
break
|
|
253
258
|
|
|
254
259
|
default:
|
|
260
|
+
const orderPackage: OrderPackage = {
|
|
261
|
+
name: OrderNoGenerator.orderPackage(),
|
|
262
|
+
packageId: null,
|
|
263
|
+
trackingNo: null,
|
|
264
|
+
transporter: null,
|
|
265
|
+
airwayBill: null,
|
|
266
|
+
status: ORDER_STATUS.PROCESSING,
|
|
267
|
+
releaseGood,
|
|
268
|
+
domain: releaseGood.domain,
|
|
269
|
+
bizplace: releaseGood.bizplace,
|
|
270
|
+
creator: releaseGood.creator,
|
|
271
|
+
updater: releaseGood.updater
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
let savedOrderPackage: OrderPackage = await tx.getRepository(OrderPackage).save(orderPackage)
|
|
275
|
+
const orderPackageItems: OrderPackageItem[] = releaseGood.orderProducts.map(op => {
|
|
276
|
+
return {
|
|
277
|
+
name: OrderNoGenerator.orderPackageItem(),
|
|
278
|
+
orderProduct: op,
|
|
279
|
+
status: ORDER_STATUS.PROCESSING,
|
|
280
|
+
releaseQty: op.releaseQty,
|
|
281
|
+
orderPackage: savedOrderPackage,
|
|
282
|
+
domain: releaseGood.domain,
|
|
283
|
+
bizplace: releaseGood.bizplace,
|
|
284
|
+
creator: releaseGood.creator,
|
|
285
|
+
updater: releaseGood.updater
|
|
286
|
+
}
|
|
287
|
+
})
|
|
288
|
+
|
|
289
|
+
await tx.getRepository(OrderPackageItem).save(orderPackageItems)
|
|
255
290
|
break
|
|
256
291
|
}
|
|
257
292
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SellercraftDocument } from './sellercraft-document'
|
|
2
1
|
import { ArrivalNoticeWorksheet } from './arrival-notice-worksheet'
|
|
2
|
+
import { GenerateBatchPickInfo } from './batch-pick-worksheet-info'
|
|
3
3
|
import { ContactPointInfo } from './contact-point-info'
|
|
4
4
|
import { CycleCountWorksheet } from './cycle-count-worksheet'
|
|
5
5
|
import { DeliveryInfo } from './delivery-info'
|
|
@@ -11,12 +11,14 @@ import { FindReleaseOrdersByTaskNo } from './find-release-orders-by-task-no'
|
|
|
11
11
|
import { GoodsDeliveryNote } from './goods-delivery-note'
|
|
12
12
|
import { InventoryCheckWorksheet } from './inventory-check-worksheet'
|
|
13
13
|
import { LoadedWorksheetDetail } from './loaded-worksheet-detail'
|
|
14
|
+
import { MultipleReleaseGoodWorksheet } from './multiple-release-good-worksheet'
|
|
14
15
|
import { MyPickingAssignmentStatus } from './my-picking-assignment-status'
|
|
15
16
|
import { NewWorksheet } from './new-worksheet'
|
|
16
17
|
import { PickingAssignmentStatus } from './picking-assignment-status'
|
|
17
18
|
import { ProductApproval } from './product-approval'
|
|
18
19
|
import { ReleaseGoodWorksheet } from './release-good-worksheet'
|
|
19
20
|
import { ReturnOrderWorksheet } from './return-order-worksheet'
|
|
21
|
+
import { SellercraftDocument } from './sellercraft-document'
|
|
20
22
|
import { VasOrderWorksheet } from './vas-order-worksheet'
|
|
21
23
|
import { Worksheet } from './worksheet'
|
|
22
24
|
import { WorksheetDetailInfo } from './worksheet-detail-info'
|
|
@@ -24,8 +26,6 @@ import { WorksheetInfo } from './worksheet-info'
|
|
|
24
26
|
import { WorksheetList } from './worksheet-list'
|
|
25
27
|
import { WorksheetPatch } from './worksheet-patch'
|
|
26
28
|
import { WorksheetWithPagination } from './worksheet-with-pagination'
|
|
27
|
-
import { GenerateBatchPickInfo } from './batch-pick-worksheet-info'
|
|
28
|
-
import { MultipleReleaseGoodWorksheet } from './multiple-release-good-worksheet'
|
|
29
29
|
|
|
30
30
|
export const Mutation = /* GraphQL */ `
|
|
31
31
|
createWorksheet (
|
|
@@ -355,13 +355,13 @@ export const Mutation = /* GraphQL */ `
|
|
|
355
355
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
356
356
|
|
|
357
357
|
packing (
|
|
358
|
-
|
|
358
|
+
orderPackageItemId: String!
|
|
359
359
|
releaseQty: Int!
|
|
360
360
|
serialNumber: String
|
|
361
361
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
362
362
|
|
|
363
363
|
scanProductPacking (
|
|
364
|
-
|
|
364
|
+
orderPackageItemId: String!
|
|
365
365
|
productBarcode: String!
|
|
366
366
|
serialNumber: String
|
|
367
367
|
): ExecutingWorksheet @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
@@ -438,6 +438,7 @@ export const Mutation = /* GraphQL */ `
|
|
|
438
438
|
|
|
439
439
|
completePacking (
|
|
440
440
|
releaseGoodNo: String!
|
|
441
|
+
orderPackageId: String!
|
|
441
442
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
442
443
|
|
|
443
444
|
completeBatchPicking (
|