@things-factory/worksheet-base 4.3.462 → 4.3.464
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/graphql/resolvers/worksheet/cancel-arrival-notice.js +55 -0
- package/dist-server/graphql/resolvers/worksheet/cancel-arrival-notice.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +362 -5
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/index.js +4 -3
- package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/index.js +5 -1
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/utils/lmd-util.js +5 -3
- package/dist-server/utils/lmd-util.js.map +1 -1
- package/package.json +9 -9
- package/server/graphql/resolvers/worksheet/cancel-arrival-notice.ts +80 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +469 -8
- package/server/graphql/resolvers/worksheet/index.ts +5 -3
- package/server/graphql/types/worksheet/index.ts +5 -1
- package/server/utils/lmd-util.ts +7 -4
package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts
CHANGED
|
@@ -1,19 +1,37 @@
|
|
|
1
|
-
import { EntityManager } from 'typeorm'
|
|
1
|
+
import { EntityManager, In } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { User } from '@things-factory/auth-base'
|
|
4
|
-
import {
|
|
4
|
+
import { logger } from '@things-factory/env'
|
|
5
|
+
import { StoreAPI } from '@things-factory/integration-marketplace'
|
|
6
|
+
import {
|
|
7
|
+
MarketplaceOrder,
|
|
8
|
+
MarketplaceOrderItem,
|
|
9
|
+
MarketplaceOrderPackage,
|
|
10
|
+
MarketplaceOrderPackageItem,
|
|
11
|
+
MarketplaceProductVariation,
|
|
12
|
+
MarketplaceStore
|
|
13
|
+
} from '@things-factory/marketplace-base'
|
|
14
|
+
import {
|
|
15
|
+
ORDER_INVENTORY_STATUS,
|
|
16
|
+
ORDER_STATUS,
|
|
17
|
+
OrderInventory,
|
|
18
|
+
OrderNoGenerator,
|
|
19
|
+
OrderPackage,
|
|
20
|
+
OrderPackageItem,
|
|
21
|
+
ReleaseGood
|
|
22
|
+
} from '@things-factory/sales-base'
|
|
23
|
+
import { Setting } from '@things-factory/setting-base'
|
|
5
24
|
import { Domain } from '@things-factory/shell'
|
|
6
|
-
import {
|
|
25
|
+
import { Inventory, INVENTORY_TRANSACTION_TYPE, InventoryUtil } from '@things-factory/warehouse-base'
|
|
7
26
|
|
|
8
27
|
import { PickingWorksheetController } from '../../../../controllers/'
|
|
9
28
|
import { Worksheet, WorksheetDetail } from '../../../../entities'
|
|
10
|
-
|
|
11
|
-
import { Inventory, InventoryUtil, INVENTORY_TRANSACTION_TYPE } from '@things-factory/warehouse-base'
|
|
29
|
+
import { createLmdParcel } from '../../../../utils'
|
|
12
30
|
|
|
13
31
|
export const generateReleaseGoodWorksheetResolver = {
|
|
14
32
|
async generateReleaseGoodWorksheet(_: any, { releaseGoodNo, currentStatus = null }, context: any) {
|
|
15
33
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
16
|
-
let worksheet = await generatePickingWorksheet(tx, domain, user, releaseGoodNo, currentStatus)
|
|
34
|
+
let worksheet = await generatePickingWorksheet(tx, domain, user, releaseGoodNo, currentStatus, context)
|
|
17
35
|
if (worksheet) {
|
|
18
36
|
return true
|
|
19
37
|
} else {
|
|
@@ -27,7 +45,8 @@ export async function generatePickingWorksheet(
|
|
|
27
45
|
domain: Domain,
|
|
28
46
|
user: User,
|
|
29
47
|
releaseGoodNo: string,
|
|
30
|
-
currentStatus: string = null
|
|
48
|
+
currentStatus: string = null,
|
|
49
|
+
context?: any
|
|
31
50
|
): Promise<Worksheet> {
|
|
32
51
|
try {
|
|
33
52
|
const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
|
|
@@ -47,6 +66,8 @@ export async function generatePickingWorksheet(
|
|
|
47
66
|
if (releaseGood.type == 'b2c' && directReleaseOrder && directReleaseOrder.value.toLowerCase() == 'true') {
|
|
48
67
|
const inventoryUtil = new InventoryUtil(tx, domain, user)
|
|
49
68
|
|
|
69
|
+
await mmsProcessOrder(tx, domain, user, releaseGood, context)
|
|
70
|
+
|
|
50
71
|
let orderInventories: OrderInventory[] = await tx.getRepository(OrderInventory).find({
|
|
51
72
|
where: { domain, releaseGood },
|
|
52
73
|
relations: ['inventory']
|
|
@@ -89,7 +110,8 @@ export async function generatePickingWorksheet(
|
|
|
89
110
|
|
|
90
111
|
return worksheet
|
|
91
112
|
} catch (error) {
|
|
92
|
-
|
|
113
|
+
throw new Error(error.message)
|
|
114
|
+
//return new Worksheet()
|
|
93
115
|
}
|
|
94
116
|
}
|
|
95
117
|
|
|
@@ -115,3 +137,442 @@ export async function generatePickingWorksheetDetail(
|
|
|
115
137
|
const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
|
|
116
138
|
return await worksheetController.generatePickingWorksheetDetail(worksheet, targetInventory)
|
|
117
139
|
}
|
|
140
|
+
|
|
141
|
+
export async function mmsProcessOrder(
|
|
142
|
+
tx: EntityManager,
|
|
143
|
+
domain: Domain,
|
|
144
|
+
user: User,
|
|
145
|
+
foundReleaseGood: ReleaseGood,
|
|
146
|
+
context?: any
|
|
147
|
+
): Promise<void> {
|
|
148
|
+
try {
|
|
149
|
+
let marketplaceOrder: MarketplaceOrder
|
|
150
|
+
let marketplaceOrderPackages: MarketplaceOrderPackage
|
|
151
|
+
let marketplaceOrderItems: MarketplaceOrderItem[]
|
|
152
|
+
let marketplaceStore: MarketplaceStore
|
|
153
|
+
|
|
154
|
+
marketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
155
|
+
where: {
|
|
156
|
+
orderNo: foundReleaseGood.refNo
|
|
157
|
+
},
|
|
158
|
+
relations: [
|
|
159
|
+
'marketplaceStore',
|
|
160
|
+
'marketplaceOrderPackages',
|
|
161
|
+
'marketplaceOrderPackages.marketplaceOrderPackageItems',
|
|
162
|
+
'marketplaceOrderPackages.marketplaceOrderPackageItems.marketplaceOrderItem',
|
|
163
|
+
'marketplaceOrderPackages.marketplaceOrderPackageItems.marketplaceOrderItem.marketplaceProductVariation',
|
|
164
|
+
'marketplaceOrderItems',
|
|
165
|
+
'marketplaceOrderItems.marketplaceProductVariation'
|
|
166
|
+
]
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
let releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
|
|
170
|
+
where: { id: foundReleaseGood.id, domain: domain },
|
|
171
|
+
relations: [
|
|
172
|
+
'orderPackages',
|
|
173
|
+
'orderPackages.orderPackageItems',
|
|
174
|
+
'orderProducts',
|
|
175
|
+
'orderProducts.product',
|
|
176
|
+
'orderProducts.productDetail',
|
|
177
|
+
'domain',
|
|
178
|
+
'bizplace',
|
|
179
|
+
'creator',
|
|
180
|
+
'updater',
|
|
181
|
+
'lastMileDelivery'
|
|
182
|
+
]
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
if (!releaseGood) throw new Error('unable to find release good')
|
|
186
|
+
|
|
187
|
+
marketplaceStore = marketplaceOrder.marketplaceStore
|
|
188
|
+
marketplaceOrderItems = marketplaceOrder?.marketplaceOrderItems ? marketplaceOrder.marketplaceOrderItems : []
|
|
189
|
+
marketplaceOrderPackages = marketplaceOrder?.marketplaceOrderPackages
|
|
190
|
+
? marketplaceOrder.marketplaceOrderPackages
|
|
191
|
+
: []
|
|
192
|
+
|
|
193
|
+
if (marketplaceOrderPackages?.length <= 0) {
|
|
194
|
+
let platform = marketplaceOrder.marketplaceStore.platform
|
|
195
|
+
|
|
196
|
+
if (platform == 'shopee') {
|
|
197
|
+
let orderList = marketplaceOrder.id
|
|
198
|
+
let result = await StoreAPI.getStoreOrderByBatch(marketplaceStore, { orderIdList: orderList })
|
|
199
|
+
|
|
200
|
+
if (result.packageList && result.packageList.length > 0) {
|
|
201
|
+
releaseGood = await mmsPackMarketplaceOrder(
|
|
202
|
+
releaseGood,
|
|
203
|
+
marketplaceOrder,
|
|
204
|
+
marketplaceOrderItems,
|
|
205
|
+
result,
|
|
206
|
+
domain,
|
|
207
|
+
tx
|
|
208
|
+
)
|
|
209
|
+
}
|
|
210
|
+
} else if (platform == 'lazada') {
|
|
211
|
+
try {
|
|
212
|
+
let fullOrderItemList = marketplaceOrderItems.map(moi => moi.name)
|
|
213
|
+
const logisticByPackage = await StoreAPI.getStoreLogisticsByPackage(marketplaceStore, {
|
|
214
|
+
orderId: marketplaceOrder.orderNo,
|
|
215
|
+
orderItemIds: fullOrderItemList
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
if (!logisticByPackage) throw new Error('Shipment provider not found')
|
|
219
|
+
|
|
220
|
+
//panggil packOrder Lazada utk dapatkan packageId utk create op dan opi
|
|
221
|
+
let result = await StoreAPI.setStoreOrderStatusPackedByMarketplace(marketplaceStore, {
|
|
222
|
+
packOrderList: [{ orderId: marketplaceOrder.orderNo, orderItemList: fullOrderItemList }],
|
|
223
|
+
deliveryType: 'dropship',
|
|
224
|
+
shippingAllocateType: logisticByPackage.shippingAllocateType
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
//massage data frst one package
|
|
228
|
+
const data = result.packOrderList.map(pol => {
|
|
229
|
+
const groupedItems = {}
|
|
230
|
+
|
|
231
|
+
pol.orderItemList.forEach(item => {
|
|
232
|
+
const { packageId, shipmentProvider, trackingNumber, orderItemId } = item
|
|
233
|
+
if (!groupedItems[packageId]) {
|
|
234
|
+
groupedItems[packageId] = { packageId, packageItem: [] }
|
|
235
|
+
}
|
|
236
|
+
groupedItems[packageId].packageItem.push({ shipmentProvider, trackingNumber, orderItemId })
|
|
237
|
+
})
|
|
238
|
+
|
|
239
|
+
const massagedData = Object.values(groupedItems)
|
|
240
|
+
result = { packOrderList: massagedData }
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
//create mop , mopi , op & opi
|
|
244
|
+
if (result.packOrderList && result.packOrderList.length) {
|
|
245
|
+
releaseGood = await mmsPackMarketplaceOrder(
|
|
246
|
+
releaseGood,
|
|
247
|
+
marketplaceOrder,
|
|
248
|
+
marketplaceOrderItems,
|
|
249
|
+
result,
|
|
250
|
+
domain,
|
|
251
|
+
tx
|
|
252
|
+
)
|
|
253
|
+
}
|
|
254
|
+
} catch (e) {
|
|
255
|
+
logger.error(`packOrder[lazada]: ${e}`)
|
|
256
|
+
throw e
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
} else {
|
|
260
|
+
try {
|
|
261
|
+
releaseGood = await mmsPackMarketplaceOrder(
|
|
262
|
+
releaseGood,
|
|
263
|
+
marketplaceOrder,
|
|
264
|
+
marketplaceOrderItems,
|
|
265
|
+
[],
|
|
266
|
+
domain,
|
|
267
|
+
tx,
|
|
268
|
+
marketplaceOrderPackages
|
|
269
|
+
)
|
|
270
|
+
} catch (e) {
|
|
271
|
+
logger.error(`packOrder[shopee]: ${e}`)
|
|
272
|
+
throw e
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (
|
|
277
|
+
releaseGood?.orderPackages?.length > 0 &&
|
|
278
|
+
releaseGood.lmdOption &&
|
|
279
|
+
releaseGood.lastMileDelivery &&
|
|
280
|
+
releaseGood?.orderPackages?.some(op => op.parcelId == null)
|
|
281
|
+
) {
|
|
282
|
+
try {
|
|
283
|
+
await createLmdParcel([releaseGood], tx, domain, user, marketplaceOrder)
|
|
284
|
+
|
|
285
|
+
let updatedReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
|
|
286
|
+
where: { id: releaseGood.id },
|
|
287
|
+
relations: ['domain', 'bizplace', 'orderPackages', 'orderPackages.orderPackageItems']
|
|
288
|
+
})
|
|
289
|
+
|
|
290
|
+
let updatedMarketplaceOrderPackages: MarketplaceOrderPackage = await tx
|
|
291
|
+
.getRepository(MarketplaceOrderPackage)
|
|
292
|
+
.find({
|
|
293
|
+
where: { marketplaceOrder: marketplaceOrder.id },
|
|
294
|
+
relations: ['marketplaceOrder', 'marketplaceOrderPackageItems']
|
|
295
|
+
})
|
|
296
|
+
|
|
297
|
+
let updatedOrderPackage: OrderPackage[] = updatedReleaseGood.orderPackages
|
|
298
|
+
|
|
299
|
+
const hasNullAirwaybill = updatedOrderPackage.some(orderPackage => orderPackage.airwaybill === null)
|
|
300
|
+
|
|
301
|
+
// if the user had call the awb more than 5 times
|
|
302
|
+
if (updatedReleaseGood.countParcel > 5 && hasNullAirwaybill) {
|
|
303
|
+
throw new Error(
|
|
304
|
+
'It appears that we are unable to retrieve the AWB from the platform. Please reach out to support for assistance'
|
|
305
|
+
)
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
if (hasNullAirwaybill)
|
|
309
|
+
throw new Error(
|
|
310
|
+
'We are in the process to get the AWB. Please retry by clicking the GENERATE PICKING WORKSHEET'
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
for (let updatePackage of updatedOrderPackage) {
|
|
314
|
+
for (let mop of updatedMarketplaceOrderPackages) {
|
|
315
|
+
// Find match order package based on packageId and releaseGood refOrderId
|
|
316
|
+
if (updatePackage.packageId === mop.packageId && updatedReleaseGood.refOrderId === marketplaceOrder.id) {
|
|
317
|
+
await tx.getRepository(MarketplaceOrderPackage).update(
|
|
318
|
+
{ id: mop.id },
|
|
319
|
+
{
|
|
320
|
+
airwayBill: updatePackage.airwayBill,
|
|
321
|
+
trackingNo: updatePackage.trackingNo,
|
|
322
|
+
transporter: updatePackage?.transporter
|
|
323
|
+
}
|
|
324
|
+
)
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
} catch (e) {
|
|
329
|
+
logger.error(`mms-create-parcel-error: ${e}`)
|
|
330
|
+
throw e
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
//ini belum test fr shopee && lazada
|
|
335
|
+
try {
|
|
336
|
+
if (marketplaceOrder?.marketplaceOrderPackages?.length > 0) {
|
|
337
|
+
await mmsRTSMarketplaceOrder(marketplaceOrder, tx, domain)
|
|
338
|
+
}
|
|
339
|
+
} catch (e) {
|
|
340
|
+
logger.error(`rts-mms-orders:${e}`)
|
|
341
|
+
throw e
|
|
342
|
+
}
|
|
343
|
+
} catch (e) {
|
|
344
|
+
console.log(e)
|
|
345
|
+
throw e
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
export async function mmsPackMarketplaceOrder(
|
|
350
|
+
releaseGood,
|
|
351
|
+
marketplaceOrder,
|
|
352
|
+
marketplaceOrderItems,
|
|
353
|
+
result,
|
|
354
|
+
domain,
|
|
355
|
+
tx,
|
|
356
|
+
existingMarketplaceOrderPackage?
|
|
357
|
+
): Promise<ReleaseGood> {
|
|
358
|
+
try {
|
|
359
|
+
let newMarketplaceOrderPackage: MarketplaceOrderPackage = new MarketplaceOrderPackage()
|
|
360
|
+
let newMarketplaceOrderPackageItem: MarketplaceOrderPackageItem = new MarketplaceOrderPackageItem()
|
|
361
|
+
let orderPackage: OrderPackage = new OrderPackage()
|
|
362
|
+
let orderPackageItem: OrderPackageItem = new OrderPackageItem()
|
|
363
|
+
let newMarketplaceOrderPackages = []
|
|
364
|
+
let newOrderPackages = []
|
|
365
|
+
|
|
366
|
+
if (!existingMarketplaceOrderPackage) {
|
|
367
|
+
let packagePack = result?.packageList ? result.packageList : result.packOrderList
|
|
368
|
+
|
|
369
|
+
for (let j = 0; j < packagePack.length; j++) {
|
|
370
|
+
let marketplacePackage = packagePack[j]
|
|
371
|
+
let packageItems = marketplacePackage?.packageItem || marketplacePackage?.orderItemList
|
|
372
|
+
let marketplaceOrderItem
|
|
373
|
+
|
|
374
|
+
newMarketplaceOrderPackage.name = result.name || marketplaceOrder.name
|
|
375
|
+
newMarketplaceOrderPackage.packageId = marketplacePackage.packageId
|
|
376
|
+
newMarketplaceOrderPackage.transporter = marketplacePackage.transporter
|
|
377
|
+
newMarketplaceOrderPackage.marketplaceOrder = marketplaceOrder
|
|
378
|
+
newMarketplaceOrderPackage.domain = domain
|
|
379
|
+
newMarketplaceOrderPackage.marketplaceOrderPackageItems = []
|
|
380
|
+
|
|
381
|
+
await tx.getRepository(MarketplaceOrderPackage).insert(newMarketplaceOrderPackage)
|
|
382
|
+
|
|
383
|
+
newMarketplaceOrderPackages.push(newMarketplaceOrderPackage)
|
|
384
|
+
|
|
385
|
+
for (let i = 0; i < packageItems.length; i++) {
|
|
386
|
+
let packageItem = packageItems[i]
|
|
387
|
+
marketplaceOrderItem = marketplaceOrderItems.find(itm => {
|
|
388
|
+
return itm.orderId == packageItem.orderItemId
|
|
389
|
+
})
|
|
390
|
+
|
|
391
|
+
newMarketplaceOrderPackageItem.name = marketplaceOrderItem.name
|
|
392
|
+
newMarketplaceOrderPackageItem.qty = marketplaceOrderItem.qty
|
|
393
|
+
newMarketplaceOrderPackageItem.domain = domain
|
|
394
|
+
newMarketplaceOrderPackageItem.marketplaceOrderPackage = newMarketplaceOrderPackage
|
|
395
|
+
newMarketplaceOrderPackageItem.marketplaceOrderItem = marketplaceOrderItem
|
|
396
|
+
|
|
397
|
+
await tx.getRepository(MarketplaceOrderPackageItem).insert(newMarketplaceOrderPackageItem)
|
|
398
|
+
|
|
399
|
+
newMarketplaceOrderPackage.marketplaceOrderPackageItems.push(newMarketplaceOrderPackageItem)
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
marketplaceOrder.marketplaceOrderPackages = newMarketplaceOrderPackages
|
|
403
|
+
|
|
404
|
+
existingMarketplaceOrderPackage = marketplaceOrder?.marketplaceOrderPackages
|
|
405
|
+
? marketplaceOrder.marketplaceOrderPackages
|
|
406
|
+
: []
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
if (releaseGood.orderPackages.length <= 0) {
|
|
410
|
+
for (let i = 0; i < existingMarketplaceOrderPackage.length; i++) {
|
|
411
|
+
let mop = existingMarketplaceOrderPackage[i]
|
|
412
|
+
let mopi = mop.marketplaceOrderPackageItems
|
|
413
|
+
|
|
414
|
+
orderPackage.name = OrderNoGenerator.orderPackage()
|
|
415
|
+
orderPackage.packageId = mop?.packageId
|
|
416
|
+
orderPackage.transporter = null
|
|
417
|
+
orderPackage.airwaybill = null
|
|
418
|
+
orderPackage.status = ORDER_STATUS.PROCESSING
|
|
419
|
+
orderPackage.releaseGood = releaseGood
|
|
420
|
+
orderPackage.domain = releaseGood.domain
|
|
421
|
+
orderPackage.bizplace = releaseGood.bizplace
|
|
422
|
+
orderPackage.creator = releaseGood.creator
|
|
423
|
+
orderPackage.updater = releaseGood.updater
|
|
424
|
+
orderPackage.orderPackageItems = []
|
|
425
|
+
|
|
426
|
+
await tx.getRepository(OrderPackage).save(orderPackage)
|
|
427
|
+
newOrderPackages.push(orderPackage)
|
|
428
|
+
|
|
429
|
+
for (let j = 0; j < mopi?.length; j++) {
|
|
430
|
+
let productVariation: MarketplaceProductVariation = mopi[j].marketplaceOrderItem.marketplaceProductVariation
|
|
431
|
+
|
|
432
|
+
let matchedOrderProduct = releaseGood.orderProducts.find(op => op.product.sku == productVariation.sku)
|
|
433
|
+
|
|
434
|
+
orderPackageItem.name = OrderNoGenerator.orderPackageItem()
|
|
435
|
+
orderPackageItem.orderProduct = matchedOrderProduct
|
|
436
|
+
orderPackageItem.status = ORDER_STATUS.PROCESSING
|
|
437
|
+
orderPackageItem.orderPackage = orderPackage
|
|
438
|
+
orderPackageItem.releaseQty = matchedOrderProduct.releaseQty
|
|
439
|
+
orderPackageItem.domain = releaseGood.domain
|
|
440
|
+
orderPackageItem.bizplace = releaseGood.bizplace
|
|
441
|
+
orderPackageItem.creator = releaseGood.creator
|
|
442
|
+
orderPackageItem.updater = releaseGood.updater
|
|
443
|
+
orderPackageItem.productDetail = matchedOrderProduct?.productDetail
|
|
444
|
+
|
|
445
|
+
await tx.getRepository(OrderPackageItem).save(orderPackageItem)
|
|
446
|
+
orderPackage.orderPackageItems.push(orderPackageItem)
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
releaseGood.orderPackages = newOrderPackages
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
return releaseGood
|
|
453
|
+
} catch (e) {
|
|
454
|
+
logger.error(`mmsPackMarketplaceOrder: ${e}`)
|
|
455
|
+
throw e
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
export async function mmsRTSMarketplaceOrder(mop, tx, domain): Promise<Boolean> {
|
|
460
|
+
try {
|
|
461
|
+
// const { tx } = context.state
|
|
462
|
+
|
|
463
|
+
let marketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
464
|
+
where: {
|
|
465
|
+
id: mop.id
|
|
466
|
+
},
|
|
467
|
+
relations: [
|
|
468
|
+
'marketplaceStore',
|
|
469
|
+
'marketplaceOrderPackages',
|
|
470
|
+
'marketplaceOrderPackages.marketplaceOrderPackageItems',
|
|
471
|
+
'marketplaceOrderPackages.marketplaceOrderPackageItems.marketplaceOrderItem',
|
|
472
|
+
'marketplaceOrderPackages.marketplaceOrderPackageItems.marketplaceOrderItem.marketplaceProductVariation',
|
|
473
|
+
'marketplaceOrderItems',
|
|
474
|
+
'marketplaceOrderItems.marketplaceProductVariation'
|
|
475
|
+
]
|
|
476
|
+
})
|
|
477
|
+
|
|
478
|
+
let marketplaceStore = marketplaceOrder.marketplaceStore
|
|
479
|
+
let marketplaceOrderPackages = marketplaceOrder.marketplaceOrderPackages
|
|
480
|
+
let platform = marketplaceStore.platform
|
|
481
|
+
|
|
482
|
+
if (marketplaceOrder?.marketplaceOrderPackages.length > 0) {
|
|
483
|
+
switch (platform) {
|
|
484
|
+
case 'shopee':
|
|
485
|
+
await rtsShopeeOrder(marketplaceOrder, marketplaceOrderPackages, tx, domain)
|
|
486
|
+
break
|
|
487
|
+
case 'lazada':
|
|
488
|
+
await rtsLazadaOrder(marketplaceOrder, marketplaceOrderPackages, tx, domain)
|
|
489
|
+
break
|
|
490
|
+
default:
|
|
491
|
+
break
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
return true
|
|
495
|
+
} catch (e) {
|
|
496
|
+
logger.error(`mmsRTSMarketplaceOrder[main]: ${e}`)
|
|
497
|
+
throw e
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
async function rtsShopeeOrder(marketplaceOrder, marketplaceOrderPackages, tx, domain) {
|
|
502
|
+
await Promise.all(
|
|
503
|
+
marketplaceOrderPackages.map(async marketplaceOrderPackage => {
|
|
504
|
+
try {
|
|
505
|
+
let deliveryType = {}
|
|
506
|
+
let store = marketplaceOrder.marketplaceStore
|
|
507
|
+
let isMultipackage: Boolean = marketplaceOrderPackages.length > 1 ? true : false
|
|
508
|
+
|
|
509
|
+
// call api to know delivery type
|
|
510
|
+
let shippingParams = await StoreAPI.getLogisticsParam(
|
|
511
|
+
store,
|
|
512
|
+
{ orderNo: marketplaceOrder.name, packageId: marketplaceOrderPackage.packageId, isMultipackage },
|
|
513
|
+
tx
|
|
514
|
+
)
|
|
515
|
+
|
|
516
|
+
//let shippingType = shippingParams?.infoNeeded
|
|
517
|
+
let shippingDetail = shippingParams?.logisticsDetail
|
|
518
|
+
|
|
519
|
+
if (shippingParams?.pickup) {
|
|
520
|
+
deliveryType = {
|
|
521
|
+
pickup: {
|
|
522
|
+
addressId: shippingDetail.addressId,
|
|
523
|
+
branchId: shippingDetail.branchId
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
} else if (shippingParams?.non_integrated) {
|
|
527
|
+
deliveryType = {
|
|
528
|
+
non_integrated: {
|
|
529
|
+
trackingNo: marketplaceOrderPackage.trackingNo
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
} else if (shippingParams?.dropoff) {
|
|
533
|
+
deliveryType = {
|
|
534
|
+
dropoff: shippingDetail?.branchId
|
|
535
|
+
? {
|
|
536
|
+
branchId: shippingDetail.branchId
|
|
537
|
+
}
|
|
538
|
+
: {}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
await StoreAPI.initLogistics(marketplaceOrder.marketplaceStore, {
|
|
543
|
+
deliveryType,
|
|
544
|
+
orderNo: marketplaceOrder.orderNo,
|
|
545
|
+
packageId: marketplaceOrderPackage.packageId,
|
|
546
|
+
isMultipackage
|
|
547
|
+
})
|
|
548
|
+
await tx
|
|
549
|
+
.getRepository(OrderPackage)
|
|
550
|
+
.update(
|
|
551
|
+
{ packageId: marketplaceOrderPackage.packageId, domain: { id: domain.id } },
|
|
552
|
+
{ marketRtsCallSuccess: new Date() }
|
|
553
|
+
)
|
|
554
|
+
} catch (e) {
|
|
555
|
+
logger.error(`mmsRTSMarketplaceOrder[shopee]: ${e}`)
|
|
556
|
+
throw e
|
|
557
|
+
}
|
|
558
|
+
})
|
|
559
|
+
)
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
async function rtsLazadaOrder(marketplaceOrder, marketplaceOrderPackages, tx, domain) {
|
|
563
|
+
const packages = marketplaceOrderPackages.map(item => {
|
|
564
|
+
return { packageId: item.packageId }
|
|
565
|
+
})
|
|
566
|
+
|
|
567
|
+
const packageIds = marketplaceOrderPackages.map(item => item.packageId)
|
|
568
|
+
|
|
569
|
+
try {
|
|
570
|
+
await StoreAPI.setStoreOrderStatusReadyToShip(marketplaceOrder.marketplaceStore, { packages })
|
|
571
|
+
await tx
|
|
572
|
+
.getRepository(OrderPackage)
|
|
573
|
+
.update({ packageId: In(packageIds), domain: { id: domain.id } }, { marketRtsCallSuccess: new Date() })
|
|
574
|
+
} catch (e) {
|
|
575
|
+
logger.error(`mmsRTSMarketplaceOrder[lazada]: ${e}`)
|
|
576
|
+
throw e
|
|
577
|
+
}
|
|
578
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { batchPickingWorksheetResolver } from './batch-picking-worksheet'
|
|
2
|
+
import { cancelArrivalNoticeResolver } from './cancel-arrival-notice'
|
|
2
3
|
import { cancelDraftReleaseOrder } from './cancel-draft-release-order'
|
|
3
4
|
import { cancelReplenishment } from './cancel-replenishment'
|
|
4
5
|
import { checkInventoryReleaseResolver } from './check-inventory-release'
|
|
@@ -7,8 +8,8 @@ import { confirmCancellationReleaseOrder } from './confirm-cancellation-release-
|
|
|
7
8
|
import { createWorksheet } from './create-worksheet'
|
|
8
9
|
import { crossDockPickingResolver } from './cross-dock-picking'
|
|
9
10
|
import { cycleCountAdjustmentResolver } from './cycle-count-adjustment'
|
|
10
|
-
import { cycleCountWorksheetForPalletResolver } from './cycle-count-worksheet-for-pallet'
|
|
11
11
|
import { cycleCountWorksheetForCartonResolver } from './cycle-count-worksheet-for-carton'
|
|
12
|
+
import { cycleCountWorksheetForPalletResolver } from './cycle-count-worksheet-for-pallet'
|
|
12
13
|
import { deleteWorksheet } from './delete-worksheet'
|
|
13
14
|
import { deliveryOrderByWorksheetResolver } from './delivery-order-by-worksheet'
|
|
14
15
|
import { fetchDeliveryOrderROResolver } from './fetch-delivery-order-ro'
|
|
@@ -40,6 +41,7 @@ import { Mutations as PutawayReturnMutations } from './putaway-return'
|
|
|
40
41
|
import { putawayReturningWorksheetResolver } from './putaway-returning-worksheet'
|
|
41
42
|
import { putawayWorksheetResolver } from './putaway-worksheet'
|
|
42
43
|
import { recommendPutawayLocationResolver } from './recommend-putway-location'
|
|
44
|
+
import { refreshActiveWorksheetPickingViews } from './refresh-active-worksheet-picking-views'
|
|
43
45
|
import { rejectCancellationReleaseOrder } from './reject-cancellation-release-order'
|
|
44
46
|
import { replacePickingPalletsResolver } from './replace-picking-pallets'
|
|
45
47
|
import { Mutations as ReplenishmentMutations } from './replenishment'
|
|
@@ -73,7 +75,6 @@ import { worksheetResolver } from './worksheet'
|
|
|
73
75
|
import { worksheetByOrderNoResolver } from './worksheet-by-order-no'
|
|
74
76
|
import { worksheetWithPaginationResolver } from './worksheet-with-pagination'
|
|
75
77
|
import { worksheetsResolver } from './worksheets'
|
|
76
|
-
import { refreshActiveWorksheetPickingViews } from './refresh-active-worksheet-picking-views'
|
|
77
78
|
|
|
78
79
|
export const Query = {
|
|
79
80
|
...refreshActiveWorksheetPickingViews,
|
|
@@ -152,5 +153,6 @@ export const Mutation = {
|
|
|
152
153
|
...fetchPowrupDocumentResolver,
|
|
153
154
|
...cancelDraftReleaseOrder,
|
|
154
155
|
...cancelReplenishment,
|
|
155
|
-
...ReplenishmentMutations
|
|
156
|
+
...ReplenishmentMutations,
|
|
157
|
+
...cancelArrivalNoticeResolver
|
|
156
158
|
}
|
|
@@ -679,7 +679,11 @@ export const Mutation = /* GraphQL */ `
|
|
|
679
679
|
cancelReplenishment (
|
|
680
680
|
name: String!
|
|
681
681
|
): Boolean @transaction
|
|
682
|
-
|
|
682
|
+
|
|
683
|
+
cancelArrivalNotice (
|
|
684
|
+
name: String!
|
|
685
|
+
): Boolean @transaction
|
|
686
|
+
`
|
|
683
687
|
|
|
684
688
|
export const Query = /* GraphQL */ `
|
|
685
689
|
worksheets (
|
package/server/utils/lmd-util.ts
CHANGED
|
@@ -99,7 +99,11 @@ export async function createLmdParcel(releaseGoods, tx, domain, user, marketplac
|
|
|
99
99
|
if (lmd?.platform == 'CITYLINK') {
|
|
100
100
|
const currentDate = new Date()
|
|
101
101
|
let expiredDate = new Date(lmd?.expiresIn)
|
|
102
|
-
|
|
102
|
+
|
|
103
|
+
// Calculate the renewal date as 2 days before the expiry date
|
|
104
|
+
const renewalDate = new Date(expiredDate.getTime() - 2 * 24 * 60 * 60 * 1000)
|
|
105
|
+
|
|
106
|
+
if (currentDate >= renewalDate) {
|
|
103
107
|
let lastMileDelivery = await getAccessTokenCityLink(lmd?.id, { state: { tx } })
|
|
104
108
|
lmd.accessToken = lastMileDelivery.accessToken
|
|
105
109
|
}
|
|
@@ -108,7 +112,7 @@ export async function createLmdParcel(releaseGoods, tx, domain, user, marketplac
|
|
|
108
112
|
|
|
109
113
|
if (lmd?.platform == 'NINJA_VAN') {
|
|
110
114
|
const currentTimestamp: number = Math.floor(Date.now() / 1000)
|
|
111
|
-
const renewalTimestamp = lmd?.expiresIn -
|
|
115
|
+
const renewalTimestamp = lmd?.expiresIn - 12 * 60 * 60 // Renew 12 hr before expiry
|
|
112
116
|
|
|
113
117
|
if (currentTimestamp >= renewalTimestamp) {
|
|
114
118
|
const lastMileDelivery = await refreshAccessTokenNinjavan(lmd?.id, { state: { tx } })
|
|
@@ -157,7 +161,7 @@ export async function createLmdParcel(releaseGoods, tx, domain, user, marketplac
|
|
|
157
161
|
address2: releaseGood.deliveryAddress2,
|
|
158
162
|
address3: releaseGood?.deliveryAddress3,
|
|
159
163
|
ward: releaseGood?.ward?.toUpperCase(), //only for viettel lmd
|
|
160
|
-
city: releaseGood.city?.toUpperCase(),
|
|
164
|
+
city: lmd.platform == 'CITYLINK' ? ' ' : releaseGood.city?.toUpperCase(),
|
|
161
165
|
postcode: releaseGood?.postalCode,
|
|
162
166
|
district: releaseGood?.district?.toUpperCase() || releaseGood.city?.toUpperCase(),
|
|
163
167
|
state:
|
|
@@ -713,7 +717,6 @@ export async function validateLmd(tx, releaseGood, lmdId) {
|
|
|
713
717
|
|
|
714
718
|
lmdResult = await qb.getMany()
|
|
715
719
|
|
|
716
|
-
|
|
717
720
|
const foundLmd = lmdResult.find(lmd => lmd.id === lmdId)
|
|
718
721
|
|
|
719
722
|
return foundLmd ? true : false
|