@things-factory/worksheet-base 4.3.393 → 4.3.395
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/index.js +3 -0
- package/dist-server/controllers/outbound/index.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +160 -14
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js +71 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +21 -28
- package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/bulk-activate-picking.js +21 -4
- package/dist-server/graphql/resolvers/worksheet/picking/bulk-activate-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +96 -130
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +22 -56
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/index.js +3 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/utils/lmd-util.js +193 -162
- package/dist-server/utils/lmd-util.js.map +1 -1
- package/package.json +9 -9
- package/server/controllers/outbound/index.ts +2 -0
- package/server/controllers/outbound/picking-worksheet-controller.ts +172 -19
- package/server/graphql/resolvers/worksheet/picking/activate-batch-picking.ts +107 -6
- package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +73 -65
- package/server/graphql/resolvers/worksheet/picking/bulk-activate-picking.ts +30 -5
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +34 -56
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +4 -36
- package/server/index.ts +2 -0
- package/server/utils/lmd-util.ts +180 -144
package/server/utils/lmd-util.ts
CHANGED
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
uploadAwb,
|
|
13
13
|
uploadInvoice
|
|
14
14
|
} from '@things-factory/attachment-base'
|
|
15
|
+
import { User } from '@things-factory/auth-base'
|
|
15
16
|
import { Bizplace } from '@things-factory/biz-base'
|
|
16
17
|
import {
|
|
17
18
|
Board,
|
|
@@ -34,7 +35,9 @@ import { MarketplaceStore } from '@things-factory/integration-marketplace'
|
|
|
34
35
|
import { MarketplaceOrder } from '@things-factory/marketplace-base'
|
|
35
36
|
import {
|
|
36
37
|
OrderPackage,
|
|
37
|
-
ReleaseGood
|
|
38
|
+
ReleaseGood,
|
|
39
|
+
ReleaseGoodLogs,
|
|
40
|
+
createReleaseGoodLog
|
|
38
41
|
} from '@things-factory/sales-base'
|
|
39
42
|
import { Domain } from '@things-factory/shell'
|
|
40
43
|
|
|
@@ -53,67 +56,71 @@ export async function createLmdParcel(releaseGoods, tx, domain, user, marketplac
|
|
|
53
56
|
try {
|
|
54
57
|
let parcelsRequest = []
|
|
55
58
|
for (let releaseGood of releaseGoods) {
|
|
56
|
-
|
|
59
|
+
try {
|
|
60
|
+
let lmd: LastMileDelivery = releaseGood.lastMileDelivery
|
|
57
61
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
const bizplace: Bizplace = await tx.getRepository(Bizplace).findOne({
|
|
63
|
+
where: { domain: releaseGood.domain },
|
|
64
|
+
relations: ['domain']
|
|
65
|
+
})
|
|
62
66
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
const senderGeoArea: GeoArea = await tx
|
|
68
|
+
.getRepository(GeoArea)
|
|
69
|
+
.findOne({ where: { postalCode: bizplace.postalCode } })
|
|
66
70
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
const recipientGeoArea: GeoArea = await tx
|
|
72
|
+
.getRepository(GeoArea)
|
|
73
|
+
.findOne({ where: { postalCode: releaseGood.postalCode } })
|
|
70
74
|
|
|
71
|
-
const currentTimestamp: number = Math.floor(Date.now() / 1000)
|
|
72
|
-
if (lmd?.platform == 'NINJA_VAN') {
|
|
73
75
|
const currentTimestamp: number = Math.floor(Date.now() / 1000)
|
|
74
|
-
if (
|
|
75
|
-
const
|
|
76
|
-
lmd
|
|
76
|
+
if (lmd?.platform == 'NINJA_VAN') {
|
|
77
|
+
const currentTimestamp: number = Math.floor(Date.now() / 1000)
|
|
78
|
+
if (currentTimestamp >= lmd?.expiresIn) {
|
|
79
|
+
const lastMileDelivery = await refreshAccessTokenNinjavan(lmd?.id, { state: { tx } })
|
|
80
|
+
lmd.accessToken = lastMileDelivery.accessToken
|
|
81
|
+
}
|
|
77
82
|
}
|
|
78
|
-
}
|
|
79
83
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
if (lmd?.platform == 'EMS') {
|
|
85
|
+
if (currentTimestamp >= lmd?.expiresIn || lmd?.expiresIn == null) {
|
|
86
|
+
let lastMileDelivery = await getAccessTokenEfmx(lmd?.id, lmd?.clientId, lmd?.secretKey, { state: { tx } })
|
|
87
|
+
lmd.accessToken = lastMileDelivery.accessToken
|
|
88
|
+
}
|
|
84
89
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
90
|
+
if (lmd?.platform == 'DHL_EXPRESS') {
|
|
91
|
+
if (
|
|
92
|
+
(releaseGood?.deliveryAddress2 != undefined && releaseGood?.deliveryAddress3 != undefined) ||
|
|
93
|
+
(releaseGood?.deliveryAddress2 == '-' && releaseGood?.deliveryAddress3 == '-') ||
|
|
94
|
+
(releaseGood?.deliveryAddress2 == null && releaseGood?.deliveryAddress3 == null)
|
|
95
|
+
) {
|
|
96
|
+
let addArray = releaseGood.deliveryAddress1?.split(',')
|
|
97
|
+
releaseGood.deliveryAddress1 = addArray[0]?.trim() + ','
|
|
98
|
+
releaseGood.deliveryAddress2 = addArray[1]?.trim() + ','
|
|
99
|
+
releaseGood.deliveryAddress3 = addArray?.slice(2).join(', ').trim()
|
|
100
|
+
}
|
|
96
101
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
102
|
+
let [latitude, longitude] = bizplace?.latlng?.split(',')
|
|
103
|
+
|
|
104
|
+
let data = {
|
|
105
|
+
courier: lmd.platform,
|
|
106
|
+
clientId: lmd?.clientId,
|
|
107
|
+
clientPass: lmd?.secretKey,
|
|
108
|
+
pickupAccountId: lmd?.pickupAccountId,
|
|
109
|
+
soldToAccountId: lmd?.soldToAccountId,
|
|
110
|
+
token: lmd?.accessToken,
|
|
111
|
+
staging: lmd?.staging,
|
|
112
|
+
accountNumber: lmd?.accountNumber,
|
|
113
|
+
accountName: lmd?.name,
|
|
114
|
+
orderDate: lmd.platform == 'DHL_EXPRESS' ? dateTime() : new Date().toISOString(),
|
|
115
|
+
remark: releaseGood?.remark,
|
|
116
|
+
prefix: lmd?.prefix,
|
|
117
|
+
|
|
118
|
+
//pass releaseGoodId for rg logs
|
|
119
|
+
releaseGoodId: releaseGood?.id,
|
|
120
|
+
|
|
121
|
+
orderNo: releaseGood?.refNo,
|
|
122
|
+
cod: releaseGood?.codOption,
|
|
123
|
+
paidAmount: releaseGood?.paidAmount?.toString(),
|
|
117
124
|
|
|
118
125
|
recipient: releaseGood.attentionTo,
|
|
119
126
|
phone: releaseGood.phone1,
|
|
@@ -131,24 +138,24 @@ export async function createLmdParcel(releaseGoods, tx, domain, user, marketplac
|
|
|
131
138
|
releaseGood.city?.toUpperCase(),
|
|
132
139
|
country: releaseGood.country,
|
|
133
140
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
141
|
+
pSender: bizplace.name,
|
|
142
|
+
pAddress: bizplace.address,
|
|
143
|
+
pAddress2: bizplace.address2,
|
|
144
|
+
pPhone: bizplace?.phone,
|
|
145
|
+
pEmail: bizplace.email,
|
|
146
|
+
pWard: bizplace?.ward, // only for viettel lmd
|
|
147
|
+
pCity: bizplace.city || senderGeoArea.cityName,
|
|
148
|
+
pPostcode: bizplace.postalCode || senderGeoArea.postalCode,
|
|
149
|
+
pDistrict: bizplace?.district || bizplace.city,
|
|
150
|
+
pState: bizplace.state || senderGeoArea.stateName,
|
|
151
|
+
pCountry: bizplace.countryCode || senderGeoArea.countryCode,
|
|
152
|
+
pLatitude: latitude,
|
|
153
|
+
pLongitude: longitude,
|
|
154
|
+
|
|
155
|
+
handoverMethod: 1
|
|
156
|
+
}
|
|
150
157
|
|
|
151
|
-
|
|
158
|
+
let unprocessedOrderPackages: OrderPackage[] = releaseGood.orderPackages.filter(op => !op.parcelId)
|
|
152
159
|
|
|
153
160
|
let packagesData = unprocessedOrderPackages.map(op => {
|
|
154
161
|
return {
|
|
@@ -171,56 +178,80 @@ export async function createLmdParcel(releaseGoods, tx, domain, user, marketplac
|
|
|
171
178
|
height: opi?.orderProduct?.productDetail?.height || ' '
|
|
172
179
|
}
|
|
173
180
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
if (lmd.platform == 'SAPX' || lmd.platform == 'VIETTEL_POST') {
|
|
182
|
+
if (lengthUnit == 'mm' || lengthUnit == 'm') {
|
|
183
|
+
;(items.width = (items.width / 10)?.toString()),
|
|
184
|
+
(items.length = (items.length / 10)?.toString()),
|
|
185
|
+
(items.height = (items.height / 10)?.toString())
|
|
186
|
+
} else {
|
|
187
|
+
;(items.width = items.width?.toString()),
|
|
188
|
+
(items.length = items.length?.toString()),
|
|
189
|
+
(items.height = items.height?.toString())
|
|
190
|
+
}
|
|
183
191
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
})
|
|
192
|
+
return items
|
|
193
|
+
})
|
|
194
|
+
}
|
|
195
|
+
})
|
|
189
196
|
|
|
190
|
-
|
|
197
|
+
parcelsRequest.push(...packagesData)
|
|
198
|
+
} catch (e) {
|
|
199
|
+
let errorResponse = JSON.stringify(e.message)
|
|
200
|
+
createReleaseGoodLog('create-lmd-parcel', errorResponse, releaseGood.id, {
|
|
201
|
+
state: { domain: null }
|
|
202
|
+
})
|
|
203
|
+
}
|
|
191
204
|
}
|
|
192
205
|
|
|
193
206
|
if (parcelsRequest && parcelsRequest.length > 0) {
|
|
194
|
-
let
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
207
|
+
let orderPackages: OrderPackage[]
|
|
208
|
+
|
|
209
|
+
try {
|
|
210
|
+
let res = await LastMileAPI.createParcel(
|
|
211
|
+
{ ...releaseGoods[0].lastMileDelivery, platform: 'lmdMiddleware' },
|
|
212
|
+
parcelsRequest
|
|
213
|
+
)
|
|
214
|
+
for (let parcel of res) {
|
|
215
|
+
let courier = parcel.transporter
|
|
216
|
+
let transporter = courier.replace(/_/g, ' ')
|
|
217
|
+
await tx
|
|
218
|
+
.getRepository(OrderPackage)
|
|
219
|
+
.update({ name: parcel.refNo }, { parcelId: parcel.parcelId, transporter: transporter })
|
|
220
|
+
|
|
221
|
+
parcelsRequest.map(rg => {
|
|
222
|
+
createReleaseGoodLog('lmd-create-parcel', parcel.message, rg.releaseGoodId, {
|
|
223
|
+
state: { domain: null }
|
|
224
|
+
})
|
|
225
|
+
})
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const qb: SelectQueryBuilder<OrderPackage> = tx
|
|
202
229
|
.getRepository(OrderPackage)
|
|
203
|
-
.
|
|
204
|
-
|
|
230
|
+
.createQueryBuilder('op')
|
|
231
|
+
.innerJoinAndSelect('op.releaseGood', 'rg')
|
|
232
|
+
.innerJoinAndSelect('rg.domain', 'd')
|
|
233
|
+
.innerJoinAndSelect('rg.bizplace', 'b')
|
|
234
|
+
.innerJoinAndSelect('b.company', 'c')
|
|
235
|
+
.innerJoinAndSelect('c.domain', 'companyDomain')
|
|
236
|
+
.innerJoinAndSelect('b.domain', 'd2')
|
|
237
|
+
.leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
|
|
238
|
+
.where('op.name IN (:...orderPackageIds)', {
|
|
239
|
+
orderPackageIds: res.map(parcel => {
|
|
240
|
+
return parcel.refNo
|
|
241
|
+
})
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
orderPackages = await qb.getMany()
|
|
205
245
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
.
|
|
209
|
-
.
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
.innerJoinAndSelect('b.company', 'c')
|
|
213
|
-
.innerJoinAndSelect('c.domain', 'companyDomain')
|
|
214
|
-
.innerJoinAndSelect('b.domain', 'd2')
|
|
215
|
-
.leftJoinAndSelect('rg.lastMileDelivery', 'lmd')
|
|
216
|
-
.where('op.name IN (:...orderPackageIds)', {
|
|
217
|
-
orderPackageIds: res.map(parcel => {
|
|
218
|
-
return parcel.refNo
|
|
246
|
+
await processAwbAndTrackingNo(orderPackages, tx, domain, user, marketplaceOrder)
|
|
247
|
+
} catch (error) {
|
|
248
|
+
let errorResponse = error.message
|
|
249
|
+
parcelsRequest.map(rg => {
|
|
250
|
+
createReleaseGoodLog('error-lmd-create-parcel', errorResponse, rg.releaseGoodId, {
|
|
251
|
+
state: { domain: null }
|
|
219
252
|
})
|
|
220
253
|
})
|
|
221
|
-
|
|
222
|
-
const orderPackages: OrderPackage[] = await qb.getMany()
|
|
223
|
-
await processAwbAndTrackingNo(orderPackages, tx, domain, user, marketplaceOrder)
|
|
254
|
+
}
|
|
224
255
|
}
|
|
225
256
|
} catch (e) {
|
|
226
257
|
logger.error(`[lmd-create-parcel]: ${e}`)
|
|
@@ -239,7 +270,7 @@ export async function processAwbAndTrackingNo(orderPackages, tx, domain, user, m
|
|
|
239
270
|
{ ...orderPackage.releaseGood.lastMileDelivery, platform: 'lmdMiddleware' },
|
|
240
271
|
{ parcelId: orderPackage.parcelId, staging: orderPackage.releaseGood.lastMileDelivery?.staging }
|
|
241
272
|
)
|
|
242
|
-
|
|
273
|
+
|
|
243
274
|
if (awbRes) {
|
|
244
275
|
let awbContent: any
|
|
245
276
|
let invoiceContent: any
|
|
@@ -343,43 +374,48 @@ export async function processAwbAndTrackingNo(orderPackages, tx, domain, user, m
|
|
|
343
374
|
}
|
|
344
375
|
}
|
|
345
376
|
} catch (e) {
|
|
377
|
+
let releaseGoodId = orderPackage.releaseGood.id
|
|
346
378
|
logger.error(e)
|
|
379
|
+
let errorResponse = e.message
|
|
380
|
+
createReleaseGoodLog('error-process-awb-and-tracking-no', errorResponse, releaseGoodId, {
|
|
381
|
+
state: { domain: null }
|
|
382
|
+
})
|
|
347
383
|
}
|
|
348
|
-
// })
|
|
349
384
|
}
|
|
350
|
-
|
|
351
|
-
// trigger RTS
|
|
352
|
-
// try {
|
|
353
|
-
// let uniqueReleaseOrders: ReleaseGood = [...new Map(releaseOrders.map(item => [item['id'], item])).values()]
|
|
354
|
-
|
|
355
|
-
// for (let releaseOrder of uniqueReleaseOrders) {
|
|
356
|
-
// const orderSource: string = releaseOrder.source
|
|
357
|
-
|
|
358
|
-
// if (orderSource == ApplicationType.SELLERCRAFT) {
|
|
359
|
-
// const sellercraft: Sellercraft = await getRepository(Sellercraft).findOne({
|
|
360
|
-
// domain: releaseOrder.bizplace.domain,
|
|
361
|
-
// status: SellercraftStatus.ACTIVE
|
|
362
|
-
// })
|
|
363
|
-
// if (sellercraft) {
|
|
364
|
-
// await getConnection().transaction(async tx => {
|
|
365
|
-
// const sellercraftCtrl: SellercraftController = new SellercraftController(tx, null, null)
|
|
366
|
-
// const rtsTriggerLevel: Setting = await tx.getRepository(Setting).findOne({
|
|
367
|
-
// where: { domain: releaseOrder.domain, category: 'id-rule', name: 'rts-trigger-level' }
|
|
368
|
-
// })
|
|
369
|
-
|
|
370
|
-
// if (rtsTriggerLevel && parseInt(rtsTriggerLevel?.value || 0) == 1) {
|
|
371
|
-
// await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseOrder)
|
|
372
|
-
// }
|
|
373
|
-
// })
|
|
374
|
-
// }
|
|
375
|
-
// }
|
|
376
|
-
// }
|
|
377
|
-
// } catch (e) {
|
|
378
|
-
// logger.error(`[get-lmd-awb-sof-trigger]: ${e}`)
|
|
379
|
-
// }
|
|
380
|
-
//
|
|
385
|
+
// })
|
|
381
386
|
}
|
|
382
387
|
|
|
388
|
+
// trigger RTS
|
|
389
|
+
// try {
|
|
390
|
+
// let uniqueReleaseOrders: ReleaseGood = [...new Map(releaseOrders.map(item => [item['id'], item])).values()]
|
|
391
|
+
|
|
392
|
+
// for (let releaseOrder of uniqueReleaseOrders) {
|
|
393
|
+
// const orderSource: string = releaseOrder.source
|
|
394
|
+
|
|
395
|
+
// if (orderSource == ApplicationType.SELLERCRAFT) {
|
|
396
|
+
// const sellercraft: Sellercraft = await getRepository(Sellercraft).findOne({
|
|
397
|
+
// domain: releaseOrder.bizplace.domain,
|
|
398
|
+
// status: SellercraftStatus.ACTIVE
|
|
399
|
+
// })
|
|
400
|
+
// if (sellercraft) {
|
|
401
|
+
// await getConnection().transaction(async tx => {
|
|
402
|
+
// const sellercraftCtrl: SellercraftController = new SellercraftController(tx, null, null)
|
|
403
|
+
// const rtsTriggerLevel: Setting = await tx.getRepository(Setting).findOne({
|
|
404
|
+
// where: { domain: releaseOrder.domain, category: 'id-rule', name: 'rts-trigger-level' }
|
|
405
|
+
// })
|
|
406
|
+
|
|
407
|
+
// if (rtsTriggerLevel && parseInt(rtsTriggerLevel?.value || 0) == 1) {
|
|
408
|
+
// await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseOrder)
|
|
409
|
+
// }
|
|
410
|
+
// })
|
|
411
|
+
// }
|
|
412
|
+
// }
|
|
413
|
+
// }
|
|
414
|
+
// } catch (e) {
|
|
415
|
+
// logger.error(`[get-lmd-awb-sof-trigger]: ${e}`)
|
|
416
|
+
// }
|
|
417
|
+
//
|
|
418
|
+
|
|
383
419
|
async function processCallback(packageInfo) {
|
|
384
420
|
try {
|
|
385
421
|
let response = await fetch(`${packageInfo.integration.urlCallback}`, {
|