@things-factory/worksheet-base 4.3.461 → 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.
Files changed (25) hide show
  1. package/dist-server/graphql/resolvers/worksheet/cancel-arrival-notice.js +55 -0
  2. package/dist-server/graphql/resolvers/worksheet/cancel-arrival-notice.js.map +1 -0
  3. package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js +54 -31
  4. package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js.map +1 -1
  5. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +362 -5
  6. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
  7. package/dist-server/graphql/resolvers/worksheet/index.js +4 -3
  8. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
  9. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js +12 -6
  10. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map +1 -1
  11. package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js +1 -0
  12. package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js.map +1 -1
  13. package/dist-server/graphql/types/worksheet/index.js +5 -1
  14. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  15. package/dist-server/utils/lmd-util.js +5 -3
  16. package/dist-server/utils/lmd-util.js.map +1 -1
  17. package/package.json +9 -9
  18. package/server/graphql/resolvers/worksheet/cancel-arrival-notice.ts +80 -0
  19. package/server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.ts +59 -32
  20. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +469 -8
  21. package/server/graphql/resolvers/worksheet/index.ts +5 -3
  22. package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +13 -7
  23. package/server/graphql/types/worksheet/find-release-orders-by-task-no.ts +1 -0
  24. package/server/graphql/types/worksheet/index.ts +5 -1
  25. package/server/utils/lmd-util.ts +7 -4
@@ -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 { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
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 { PartnerSetting, Setting } from '@things-factory/setting-base'
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
- return new Worksheet()
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
  }
@@ -11,7 +11,7 @@ import { pickingWorksheet } from '../picking-worksheet'
11
11
  import { activatePicking } from './activate-picking'
12
12
 
13
13
  export const fetchAndAssignPickingTaskResolver = {
14
- async fetchAndAssignPickingTask(_: any, { }, context: any) {
14
+ async fetchAndAssignPickingTask(_: any, {}, context: any) {
15
15
  try {
16
16
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
17
17
  const assignee: User = await tx.getRepository(User).findOne(user.id, { relations: ['domains'] })
@@ -67,10 +67,12 @@ export const fetchAndAssignPickingTaskResolver = {
67
67
  INNER JOIN release_goods rg ON rg.id = ws.release_good_id
68
68
  WHERE
69
69
  ws.domain_id = $1 AND
70
- ws.type = 'PICKING' AND
71
- ws.assignee_id IS NULL AND
72
- (ws.status = 'EXECUTING' OR ws.status = 'DEACTIVATED') AND
73
- NOT EXISTS (
70
+ ws.type = 'PICKING'
71
+ AND ws.status IN ('EXECUTING', 'DEACTIVATED')
72
+ AND ws.assignee_id IS NULL
73
+ /*
74
+ (condition is commented as current status in oi not in use)
75
+ AND NOT EXISTS (
74
76
  SELECT count(id) AS "totalPS"
75
77
  FROM order_inventories oi
76
78
  WHERE oi.release_good_id = ws.release_good_id AND
@@ -78,22 +80,26 @@ export const fetchAndAssignPickingTaskResolver = {
78
80
  GROUP BY oi.release_good_id
79
81
  HAVING count(id) > 0
80
82
  )
83
+ */
81
84
  ORDER BY rg.release_date, rg.created_at LIMIT 1
82
85
  ) src where src.id = ws.id
83
86
  RETURNING ws.id;
84
87
  `,
85
88
  [domain.id, assignee.id]
86
89
  )
90
+
87
91
  return x[0]
88
92
  })
89
93
 
90
94
  if (updatedWorksheets.length == 0) throw new Error('no suitable worksheet found')
91
95
 
92
- // relace worksheet with newly assigned worksheet
96
+ // replace worksheet with newly assigned worksheetp
93
97
  worksheet = await tx
94
98
  .getRepository(Worksheet)
95
- .findOne({ where: { id: updatedWorksheets[0].id }, relations: ['releaseGood'] })
99
+ .findOne({ where: { id: updatedWorksheets[0].id, assignee: assignee }, relations: ['releaseGood'] })
96
100
  }
101
+ //validation of the workheet if its assigned to another user
102
+ if (!worksheet) throw new Error('Please try again by clicking the "Get Task" button')
97
103
 
98
104
  if (worksheet.status == WORKSHEET_STATUS.DEACTIVATED) await activatePicking(tx, domain, user, worksheet.name)
99
105
 
@@ -4,5 +4,6 @@ export const FindReleaseOrdersByTaskNo = gql`
4
4
  type FindReleaseOrdersByTaskNo {
5
5
  taskNo: String
6
6
  releaseGoods: [ReleaseGood]
7
+ selectedReleaseGood: String
7
8
  }
8
9
  `
@@ -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 (
@@ -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
- if (currentDate > expiredDate) {
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 - 2 * 60 * 60
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