@things-factory/operato-hub 4.3.299 → 4.3.301
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/synchronization/powrup-get-tracking-no.js +2 -1
- package/dist-server/graphql/resolvers/synchronization/powrup-get-tracking-no.js.map +1 -1
- package/dist-server/routers/api/restful-apis/unstable/add-release-order.js +12 -8
- package/dist-server/routers/api/restful-apis/unstable/add-release-order.js.map +1 -1
- package/dist-server/routers/api/restful-apis/unstable/get-release-order-list.js +1 -0
- package/dist-server/routers/api/restful-apis/unstable/get-release-order-list.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/utils/params.js +72 -3
- package/dist-server/routers/api/restful-apis/v1/utils/params.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/warehouse/add-release-order.js +15 -11
- package/dist-server/routers/api/restful-apis/v1/warehouse/add-release-order.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/warehouse/dispatch-delivery-order.js +313 -0
- package/dist-server/routers/api/restful-apis/v1/warehouse/dispatch-delivery-order.js.map +1 -0
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-delivery-order-list.js +50 -3
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-delivery-order-list.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-do-document.js +65 -0
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-do-document.js.map +1 -0
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-grn-document.js +101 -0
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-grn-document.js.map +1 -0
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-inbound-order-details.js +3 -1
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-inbound-order-details.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-release-order-details.js +96 -3
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-release-order-details.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-release-order-list.js +12 -3
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-release-order-list.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/warehouse/index.js +4 -0
- package/dist-server/routers/api/restful-apis/v1/warehouse/index.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/warehouse/update-gan-to-arrived.js +96 -0
- package/dist-server/routers/api/restful-apis/v1/warehouse/update-gan-to-arrived.js.map +1 -0
- package/openapi/unstable/outbound.yaml +8 -0
- package/openapi/v1/inbound.yaml +210 -0
- package/openapi/v1/outbound.yaml +812 -0
- package/package.json +17 -17
- package/server/graphql/resolvers/synchronization/powrup-get-tracking-no.ts +1 -0
- package/server/routers/api/restful-apis/unstable/add-release-order.ts +4 -0
- package/server/routers/api/restful-apis/unstable/get-release-order-list.ts +1 -0
- package/server/routers/api/restful-apis/v1/utils/params.ts +72 -3
- package/server/routers/api/restful-apis/v1/warehouse/add-release-order.ts +5 -1
- package/server/routers/api/restful-apis/v1/warehouse/dispatch-delivery-order.ts +356 -0
- package/server/routers/api/restful-apis/v1/warehouse/get-delivery-order-list.ts +50 -3
- package/server/routers/api/restful-apis/v1/warehouse/get-do-document.ts +74 -0
- package/server/routers/api/restful-apis/v1/warehouse/get-grn-document.ts +116 -0
- package/server/routers/api/restful-apis/v1/warehouse/get-inbound-order-details.ts +3 -1
- package/server/routers/api/restful-apis/v1/warehouse/get-release-order-details.ts +102 -4
- package/server/routers/api/restful-apis/v1/warehouse/get-release-order-list.ts +12 -3
- package/server/routers/api/restful-apis/v1/warehouse/index.ts +4 -0
- package/server/routers/api/restful-apis/v1/warehouse/update-gan-to-arrived.ts +109 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/operato-hub",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.301",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -60,8 +60,8 @@
|
|
|
60
60
|
"@things-factory/attachment-base": "^4.3.281",
|
|
61
61
|
"@things-factory/auth-base": "^4.3.281",
|
|
62
62
|
"@things-factory/auth-ui": "^4.3.281",
|
|
63
|
-
"@things-factory/biz-base": "^4.3.
|
|
64
|
-
"@things-factory/biz-ui": "^4.3.
|
|
63
|
+
"@things-factory/biz-base": "^4.3.301",
|
|
64
|
+
"@things-factory/biz-ui": "^4.3.301",
|
|
65
65
|
"@things-factory/board-service": "^4.3.281",
|
|
66
66
|
"@things-factory/board-ui": "^4.3.281",
|
|
67
67
|
"@things-factory/code-ui": "^4.3.281",
|
|
@@ -77,22 +77,22 @@
|
|
|
77
77
|
"@things-factory/i18n-base": "^4.3.281",
|
|
78
78
|
"@things-factory/import-ui": "^4.3.281",
|
|
79
79
|
"@things-factory/import-ui-excel": "^4.3.281",
|
|
80
|
-
"@things-factory/integration-accounting": "^4.3.
|
|
81
|
-
"@things-factory/integration-fulfillment": "^4.3.
|
|
82
|
-
"@things-factory/integration-lmd": "^4.3.
|
|
83
|
-
"@things-factory/integration-marketplace": "^4.3.
|
|
84
|
-
"@things-factory/integration-pos": "^4.3.
|
|
85
|
-
"@things-factory/integration-powrup": "^4.3.
|
|
86
|
-
"@things-factory/integration-sellercraft": "^4.3.
|
|
87
|
-
"@things-factory/integration-sftp": "^4.3.
|
|
80
|
+
"@things-factory/integration-accounting": "^4.3.301",
|
|
81
|
+
"@things-factory/integration-fulfillment": "^4.3.301",
|
|
82
|
+
"@things-factory/integration-lmd": "^4.3.301",
|
|
83
|
+
"@things-factory/integration-marketplace": "^4.3.301",
|
|
84
|
+
"@things-factory/integration-pos": "^4.3.301",
|
|
85
|
+
"@things-factory/integration-powrup": "^4.3.301",
|
|
86
|
+
"@things-factory/integration-sellercraft": "^4.3.301",
|
|
87
|
+
"@things-factory/integration-sftp": "^4.3.301",
|
|
88
88
|
"@things-factory/lite-menu": "^4.3.281",
|
|
89
|
-
"@things-factory/marketplace-base": "^4.3.
|
|
89
|
+
"@things-factory/marketplace-base": "^4.3.301",
|
|
90
90
|
"@things-factory/more-ui": "^4.3.281",
|
|
91
91
|
"@things-factory/notification": "^4.3.281",
|
|
92
92
|
"@things-factory/pdf": "^4.3.281",
|
|
93
|
-
"@things-factory/product-ui": "^4.3.
|
|
93
|
+
"@things-factory/product-ui": "^4.3.301",
|
|
94
94
|
"@things-factory/resource-ui": "^4.3.281",
|
|
95
|
-
"@things-factory/sales-base": "^4.3.
|
|
95
|
+
"@things-factory/sales-base": "^4.3.301",
|
|
96
96
|
"@things-factory/scene-data-transform": "^4.3.281",
|
|
97
97
|
"@things-factory/scene-excel": "^4.3.281",
|
|
98
98
|
"@things-factory/scene-firebase": "^4.3.281",
|
|
@@ -107,8 +107,8 @@
|
|
|
107
107
|
"@things-factory/setting-ui": "^4.3.281",
|
|
108
108
|
"@things-factory/shell": "^4.3.281",
|
|
109
109
|
"@things-factory/system-ui": "^4.3.281",
|
|
110
|
-
"@things-factory/warehouse-base": "^4.3.
|
|
111
|
-
"@things-factory/worksheet-base": "^4.3.
|
|
110
|
+
"@things-factory/warehouse-base": "^4.3.301",
|
|
111
|
+
"@things-factory/worksheet-base": "^4.3.301",
|
|
112
112
|
"cron-parser": "^4.7.0",
|
|
113
113
|
"koa2-swagger-ui": "^5.0.2",
|
|
114
114
|
"swagger-jsdoc": "^5.0.0",
|
|
@@ -120,5 +120,5 @@
|
|
|
120
120
|
"resolutions": {
|
|
121
121
|
"core-js": "^3.16.0"
|
|
122
122
|
},
|
|
123
|
-
"gitHead": "
|
|
123
|
+
"gitHead": "649c7b97ee31690da25cca5afd11583eb2d8f605"
|
|
124
124
|
}
|
|
@@ -111,6 +111,7 @@ router.post(
|
|
|
111
111
|
attentionTo: bodyReq?.deliverTo?.attentionTo || null,
|
|
112
112
|
attentionCompany: bodyReq?.deliverTo?.attentionCompany || null,
|
|
113
113
|
city: bodyReq?.deliverTo?.city || null,
|
|
114
|
+
ward: bodyReq?.deliverTo?.ward || null,
|
|
114
115
|
district: bodyReq?.deliverTo?.district || null,
|
|
115
116
|
state: bodyReq?.deliverTo?.state || null,
|
|
116
117
|
postalCode: bodyReq?.deliverTo?.postalCode || null,
|
|
@@ -249,6 +250,7 @@ router.post(
|
|
|
249
250
|
attentionTo: result.attentionTo,
|
|
250
251
|
attentionCompany: result.attentionCompany,
|
|
251
252
|
city: result.city,
|
|
253
|
+
ward: result.ward,
|
|
252
254
|
district: result.district,
|
|
253
255
|
state: result.state,
|
|
254
256
|
postalCode: result.postalCode,
|
|
@@ -322,6 +324,7 @@ router.post(
|
|
|
322
324
|
attentionTo: result.attentionTo,
|
|
323
325
|
attentionCompany: result.attentionCompany,
|
|
324
326
|
city: result.city,
|
|
327
|
+
ward: result.ward,
|
|
325
328
|
district: result.district,
|
|
326
329
|
state: result.state,
|
|
327
330
|
postalCode: result.postalCode,
|
|
@@ -567,6 +570,7 @@ async function createReleaseGood(
|
|
|
567
570
|
attentionTo: releaseGood?.attentionTo || null,
|
|
568
571
|
attentionCompany: releaseGood?.attentionCompany || null,
|
|
569
572
|
city: releaseGood?.city || null,
|
|
573
|
+
ward: releaseGood?.ward || null,
|
|
570
574
|
district: releaseGood?.district || null,
|
|
571
575
|
state: releaseGood?.state || null,
|
|
572
576
|
postalCode: releaseGood?.postalCode || null,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const limitOffset = ['limit', 'offset']
|
|
2
2
|
const fromToDate = ['fromDate', 'toDate']
|
|
3
3
|
|
|
4
|
+
// Params
|
|
4
5
|
export const params = {
|
|
5
6
|
'get-bizplace-list': [...limitOffset],
|
|
6
7
|
'get-contact-point-list': ['bizplaceId', 'companyName', 'email', ...limitOffset],
|
|
@@ -21,7 +22,7 @@ export const params = {
|
|
|
21
22
|
'get-goods-received-note-list': ['bizplaceId', ...fromToDate, ...limitOffset],
|
|
22
23
|
'get-release-order-list': ['bizplaceId', 'roNo', 'status', ...fromToDate, ...limitOffset],
|
|
23
24
|
'get-release-order-details': ['bizplaceId', 'roNo'],
|
|
24
|
-
'get-delivery-order-list': ['bizplaceId', ...fromToDate, ...limitOffset],
|
|
25
|
+
'get-delivery-order-list': ['bizplaceId', 'doNo', 'vehicleNo', ...fromToDate, ...limitOffset],
|
|
25
26
|
'get-onhand-inventory-list': ['bizplaceId', 'sku', 'batchId', ...fromToDate, ...limitOffset],
|
|
26
27
|
'get-inventory-product-group-list': ['bizplaceId', 'sku', 'batchId', ...fromToDate, ...limitOffset],
|
|
27
28
|
'add-contact-points': [
|
|
@@ -302,6 +303,7 @@ export const params = {
|
|
|
302
303
|
'deliverTo.deliveryAddress5',
|
|
303
304
|
'deliverTo.attentionTo',
|
|
304
305
|
'deliverTo.city',
|
|
306
|
+
'deliverTo.ward',
|
|
305
307
|
'deliverTo.district',
|
|
306
308
|
'deliverTo.postalCode',
|
|
307
309
|
'deliverTo.country',
|
|
@@ -356,6 +358,7 @@ export const params = {
|
|
|
356
358
|
'releaseGood.deliveryAddress1',
|
|
357
359
|
'releaseGood.attentionTo',
|
|
358
360
|
'releaseGood.city',
|
|
361
|
+
'releaseGood.ward',
|
|
359
362
|
'releaseGood.district',
|
|
360
363
|
'releaseGood.country',
|
|
361
364
|
'releaseGood.postalCode',
|
|
@@ -374,9 +377,54 @@ export const params = {
|
|
|
374
377
|
'shippingOrder.containerLeavingDate'
|
|
375
378
|
],
|
|
376
379
|
'update-marketplace-shipping-order': ['storeId', 'orderNo', 'transporter', 'airwayBill', 'trackingNo'],
|
|
377
|
-
'get-
|
|
380
|
+
'get-grn-document': ['fileType', 'bizplaceId', 'grnNo', 'timezoneOffSet'],
|
|
381
|
+
'get-draft-order-list': ['bizplaceId', 'draftOrderNo', ...fromToDate, ...limitOffset],
|
|
382
|
+
'get-do-document': ['bizplaceId', 'doNo', 'fileType'],
|
|
383
|
+
'dispatch-delivery-order': [
|
|
384
|
+
'coNo',
|
|
385
|
+
'contactPoint',
|
|
386
|
+
'deliveryDate',
|
|
387
|
+
'exportOption',
|
|
388
|
+
'name',
|
|
389
|
+
'otherDriver',
|
|
390
|
+
'otherTruck',
|
|
391
|
+
'bizplaceId',
|
|
392
|
+
'remark',
|
|
393
|
+
'totalPalletQty',
|
|
394
|
+
'transportType',
|
|
395
|
+
'transportDriver',
|
|
396
|
+
'transportDriver.id',
|
|
397
|
+
'transportDriver.driverCode',
|
|
398
|
+
'transportDriver.name',
|
|
399
|
+
'transportVehicle',
|
|
400
|
+
'transportVehicle.id',
|
|
401
|
+
'transportVehicle.name',
|
|
402
|
+
'attentionCompany',
|
|
403
|
+
'attentionTo',
|
|
404
|
+
'billingAddress',
|
|
405
|
+
'billingCity',
|
|
406
|
+
'billingCountry',
|
|
407
|
+
'billingPostalCode',
|
|
408
|
+
'billingState',
|
|
409
|
+
'city',
|
|
410
|
+
'country',
|
|
411
|
+
'deliveryAddress1',
|
|
412
|
+
'phone1',
|
|
413
|
+
'postalCode',
|
|
414
|
+
'state',
|
|
415
|
+
'orderInventories',
|
|
416
|
+
'orderInventories.id',
|
|
417
|
+
'orderInventories.remark',
|
|
418
|
+
'shippingOrder ',
|
|
419
|
+
'shippingOrder.containerArrivalDate',
|
|
420
|
+
'shippingOrder.containerLeavingDate',
|
|
421
|
+
'shippingOrder.containerNo',
|
|
422
|
+
'shippingOrder.shipName'
|
|
423
|
+
],
|
|
424
|
+
'update-gan-to-arrived': ['ganNo', 'bizplaceId']
|
|
378
425
|
}
|
|
379
426
|
|
|
427
|
+
// Required Params
|
|
380
428
|
export const reqParams = {
|
|
381
429
|
'get-contact-point-list': ['bizplaceId'],
|
|
382
430
|
'get-product-list': ['bizplaceId'],
|
|
@@ -735,9 +783,29 @@ export const reqParams = {
|
|
|
735
783
|
{ name: 'airwayBill', required: true, type: 'field' },
|
|
736
784
|
{ name: 'trackingNo', required: true, type: 'field' }
|
|
737
785
|
],
|
|
738
|
-
'get-
|
|
786
|
+
'get-grn-document': ['fileType', 'bizplaceId', 'grnNo'],
|
|
787
|
+
'get-draft-order-list': ['bizplaceId'],
|
|
788
|
+
'get-do-document': ['bizplaceId', 'doNo', 'fileType'],
|
|
789
|
+
'dispatch-delivery-order': [
|
|
790
|
+
{ name: 'name', required: true, type: 'field' },
|
|
791
|
+
{ name: 'deliveryDate', required: true, type: 'field' },
|
|
792
|
+
{
|
|
793
|
+
name: 'bizplaceId',
|
|
794
|
+
required: true,
|
|
795
|
+
type: 'field'
|
|
796
|
+
}
|
|
797
|
+
],
|
|
798
|
+
'update-gan-to-arrived': [
|
|
799
|
+
{ name: 'ganNo', required: true, type: 'field' },
|
|
800
|
+
{
|
|
801
|
+
name: 'bizplaceId',
|
|
802
|
+
required: true,
|
|
803
|
+
type: 'field'
|
|
804
|
+
}
|
|
805
|
+
]
|
|
739
806
|
}
|
|
740
807
|
|
|
808
|
+
// Require Offset
|
|
741
809
|
export const requireLimitOffsetValidation = [
|
|
742
810
|
'get-release-order-list',
|
|
743
811
|
'get-onhand-inventory-list',
|
|
@@ -754,6 +822,7 @@ export const requireLimitOffsetValidation = [
|
|
|
754
822
|
'get-draft-order-list'
|
|
755
823
|
]
|
|
756
824
|
|
|
825
|
+
// Require fromDate and toDate
|
|
757
826
|
export const requireFromToDateValidation = [
|
|
758
827
|
'get-release-order-list',
|
|
759
828
|
'get-onhand-inventory-list',
|
|
@@ -116,6 +116,7 @@ router.post(
|
|
|
116
116
|
attentionTo: bodyReq?.deliverTo?.attentionTo || null,
|
|
117
117
|
attentionCompany: bodyReq?.deliverTo?.attentionCompany || null,
|
|
118
118
|
city: bodyReq?.deliverTo?.city || null,
|
|
119
|
+
ward: bodyReq?.deliverTo?.ward,
|
|
119
120
|
district: bodyReq?.deliverTo?.district,
|
|
120
121
|
state: bodyReq?.deliverTo?.state || null,
|
|
121
122
|
postalCode: bodyReq?.deliverTo?.postalCode || null,
|
|
@@ -244,6 +245,7 @@ router.post(
|
|
|
244
245
|
attentionTo: result.attentionTo,
|
|
245
246
|
attentionCompany: result.attentionCompany,
|
|
246
247
|
city: result.city,
|
|
248
|
+
ward: result.ward,
|
|
247
249
|
district: result.district,
|
|
248
250
|
state: result.state,
|
|
249
251
|
postalCode: result.postalCode,
|
|
@@ -300,6 +302,7 @@ router.post(
|
|
|
300
302
|
attentionTo: result.attentionTo,
|
|
301
303
|
attentionCompany: result.attentionCompany,
|
|
302
304
|
city: result.city,
|
|
305
|
+
ward: result.ward,
|
|
303
306
|
district: result.district,
|
|
304
307
|
state: result.state,
|
|
305
308
|
postalCode: result.postalCode,
|
|
@@ -491,7 +494,8 @@ async function createReleaseGood(
|
|
|
491
494
|
attentionTo: releaseGood?.attentionTo || null,
|
|
492
495
|
attentionCompany: releaseGood?.attentionCompany || null,
|
|
493
496
|
city: releaseGood?.city || null,
|
|
494
|
-
|
|
497
|
+
ward: releaseGood?.ward || null,
|
|
498
|
+
district: releaseGood?.district|| null,
|
|
495
499
|
state: releaseGood?.state || null,
|
|
496
500
|
postalCode: releaseGood?.postalCode || null,
|
|
497
501
|
country: deliveryCountry?.description || releaseGood?.country || null,
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { getConnection, EntityManager, In, Brackets } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { restfulApiRouter as router } from '@things-factory/api'
|
|
4
|
+
import { DeliveryOrder, ShippingOrder, OrderNoGenerator, ReleaseGood, OrderInventory } from '@things-factory/sales-base'
|
|
5
|
+
import { TransportDriver, TransportVehicle } from '@things-factory/transport-base'
|
|
6
|
+
import { ContactPoint } from '@things-factory/biz-base'
|
|
7
|
+
|
|
8
|
+
import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
|
|
9
|
+
import { businessMiddleware, loggingMiddleware, validationMiddleware } from '../middlewares'
|
|
10
|
+
|
|
11
|
+
router.post(
|
|
12
|
+
'/v1/warehouse/dispatch-delivery-order',
|
|
13
|
+
businessMiddleware,
|
|
14
|
+
validationMiddleware,
|
|
15
|
+
loggingMiddleware,
|
|
16
|
+
async (context, next) => {
|
|
17
|
+
try {
|
|
18
|
+
const { domain, user } = context.state
|
|
19
|
+
await getConnection().transaction(async (tx: EntityManager) => {
|
|
20
|
+
const foundDeliveryOrder: DeliveryOrder = await tx.getRepository(DeliveryOrder).findOne({
|
|
21
|
+
where: {
|
|
22
|
+
domain: domain,
|
|
23
|
+
name: context.request.body.data.name,
|
|
24
|
+
bizplace: context.request.body.data.bizplaceId
|
|
25
|
+
},
|
|
26
|
+
relations: ['releaseGood']
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
let transportDriver: TransportDriver = {}
|
|
30
|
+
let transportVehicle: TransportVehicle = {}
|
|
31
|
+
const data = context.request.body.data
|
|
32
|
+
const shippingOrder = context.request.body.shippingOrder
|
|
33
|
+
|
|
34
|
+
// throw and error if not found DO
|
|
35
|
+
|
|
36
|
+
// throw and error id do status is not in READY_TO_DISPATCH
|
|
37
|
+
if (foundDeliveryOrder.status !== 'READY_TO_DISPATCH') {
|
|
38
|
+
throw new ApiError('E04', `delivery order status is ${foundDeliveryOrder.status} `)
|
|
39
|
+
}
|
|
40
|
+
// throw error for RO status not in LOADING or DONE
|
|
41
|
+
if (foundDeliveryOrder.releaseGood.status !== 'LOADING' && foundDeliveryOrder.releaseGood.status !== 'DONE') {
|
|
42
|
+
throw new ApiError('E04', `release goods status is ${foundDeliveryOrder.releaseGood.status} `)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// throw an error is totalPalletQty is not a number
|
|
46
|
+
if (data.totalPalletQty) {
|
|
47
|
+
const parsedPalletQty = parseInt(data.totalPalletQty)
|
|
48
|
+
if (isNaN(parsedPalletQty)) {
|
|
49
|
+
throw new ApiError('E02', `totalPalletQty is not an integer`)
|
|
50
|
+
} else {
|
|
51
|
+
data.totalPalletQty = parsedPalletQty
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Drive and Vehicle Validation
|
|
56
|
+
if (
|
|
57
|
+
!data.transportDriver?.name ||
|
|
58
|
+
!data.transportDriver ||
|
|
59
|
+
(!data.transportDriver?.driverCode && data.transportType?.toUpperCase() === 'WAREHOUSE TRANSPORT')
|
|
60
|
+
) {
|
|
61
|
+
throw new ApiError('E03', 'transportDriver')
|
|
62
|
+
} else if (!data.transportVehicle?.name || !data.transportVehicle) {
|
|
63
|
+
throw new ApiError('E03', 'transportVehicle')
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (data.transportType?.toUpperCase() === 'WAREHOUSE TRANSPORT') {
|
|
67
|
+
// find transportDriver & transportVehicle
|
|
68
|
+
const foundTransportDriver: TransportDriver = await tx.getRepository(TransportDriver).findOne({
|
|
69
|
+
where: {
|
|
70
|
+
domain: domain,
|
|
71
|
+
name: data.transportDriver?.name,
|
|
72
|
+
driverCode: data.transportDriver?.driverCode
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
const foundTransporVehicle: TransportVehicle = await tx.getRepository(TransportVehicle).findOne({
|
|
77
|
+
where: { domain: domain, name: data.transportVehicle?.name }
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
// validation for transportDriver & transportVehicle
|
|
81
|
+
if (!foundTransportDriver) {
|
|
82
|
+
throw new ApiError(
|
|
83
|
+
'E04',
|
|
84
|
+
`transportDriver: { name: ${data.transportDriver?.name}, driverCode: ${data.transportDriver?.driverCode}}`
|
|
85
|
+
)
|
|
86
|
+
} else if (!foundTransporVehicle) {
|
|
87
|
+
throw new ApiError('E04', `transportVehicle: { name: ${data.transportVehicle?.name} }`)
|
|
88
|
+
} else {
|
|
89
|
+
transportDriver = foundTransportDriver
|
|
90
|
+
|
|
91
|
+
await tx
|
|
92
|
+
.getRepository(TransportVehicle)
|
|
93
|
+
.update({ id: foundTransporVehicle.id }, { status: 'IN_USE', updater: user })
|
|
94
|
+
|
|
95
|
+
transportVehicle = foundTransporVehicle
|
|
96
|
+
}
|
|
97
|
+
} else if (data.transportType?.toUpperCase() === 'OWN TRANSPORT') {
|
|
98
|
+
transportDriver = { name: data.transportDriver?.name }
|
|
99
|
+
transportVehicle = { name: data.transportVehicle?.name }
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (data.exportOption) {
|
|
103
|
+
// if exportOption is true,
|
|
104
|
+
// update or create shipping order if exportOption is set to true
|
|
105
|
+
if (!shippingOrder?.containerNo) {
|
|
106
|
+
throw new ApiError('E03', 'containerNo')
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// shippingOrderId is present in RG
|
|
110
|
+
if (foundDeliveryOrder.releaseGood.shippingOrderId) {
|
|
111
|
+
const foundShippingOrder: ShippingOrder = await tx.getRepository(ShippingOrder).findOne({
|
|
112
|
+
where: { domain: domain, id: foundDeliveryOrder.releaseGood.shippingOrderId }
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
await tx.getRepository(ShippingOrder).update(
|
|
116
|
+
{
|
|
117
|
+
domain: domain,
|
|
118
|
+
id: foundDeliveryOrder.releaseGood.shippingOrderId
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
containerNo: shippingOrder.containerNo,
|
|
122
|
+
shipName: shippingOrder.shipName ? shippingOrder.shipName : foundShippingOrder.shipName,
|
|
123
|
+
containerArrivalDate: shippingOrder.containerArrivalDate
|
|
124
|
+
? shippingOrder.containerArrivalDate
|
|
125
|
+
: foundShippingOrder.containerArrivalDate,
|
|
126
|
+
containerLeavingDate: shippingOrder.containerLeavingDate
|
|
127
|
+
? shippingOrder.containerLeavingDate
|
|
128
|
+
: foundShippingOrder.containerLeavingDate,
|
|
129
|
+
updatedAt: new Date(),
|
|
130
|
+
updater: user
|
|
131
|
+
}
|
|
132
|
+
)
|
|
133
|
+
} else {
|
|
134
|
+
const newShippingOrder: ShippingOrder = {
|
|
135
|
+
name: OrderNoGenerator.shippingOrder(),
|
|
136
|
+
status: 'PENDING',
|
|
137
|
+
...shippingOrder,
|
|
138
|
+
createdAt: new Date(),
|
|
139
|
+
updatedAt: new Date(),
|
|
140
|
+
bizplace: data.bizplaceId,
|
|
141
|
+
creator: user,
|
|
142
|
+
updater: user,
|
|
143
|
+
domain: domain
|
|
144
|
+
}
|
|
145
|
+
const result = await tx.getRepository(ShippingOrder).insert({ ...newShippingOrder })
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// update DeliveryOrder - setCollection
|
|
149
|
+
await tx.getRepository(DeliveryOrder).update(
|
|
150
|
+
{ id: foundDeliveryOrder.id },
|
|
151
|
+
{
|
|
152
|
+
status: 'DELIVERING',
|
|
153
|
+
deliveryDate: data?.deliveryDate,
|
|
154
|
+
otherDriver: data.transportType?.toUpperCase() === 'OWN TRANSPORT' ? transportDriver.name : null,
|
|
155
|
+
truckNo: transportVehicle.name,
|
|
156
|
+
remark: data.remark || null,
|
|
157
|
+
palletQty: data.totalPalletQty || null,
|
|
158
|
+
transportDriver: data.transportType?.toUpperCase() === 'OWN TRANSPORT' ? null : transportDriver.id,
|
|
159
|
+
transportVehicle: data.transportType?.toUpperCase() === 'OWN TRANSPORT' ? null : transportVehicle.id,
|
|
160
|
+
updatedAt: new Date(),
|
|
161
|
+
updater: user,
|
|
162
|
+
// shipment Info
|
|
163
|
+
city: data.city,
|
|
164
|
+
country: data.country,
|
|
165
|
+
deliveryAddress1: data.deliveryAddress1,
|
|
166
|
+
phone1: data.phone1,
|
|
167
|
+
postalCode: data.postalCode,
|
|
168
|
+
state: data.state,
|
|
169
|
+
attentionCompany: data.attentionCompany || null,
|
|
170
|
+
attentionTo: data.attentionTo || null,
|
|
171
|
+
billingAddress: data.billingAddress || null,
|
|
172
|
+
billingCity: data.billingCity || null,
|
|
173
|
+
billingCountry: data.billingCountry || null,
|
|
174
|
+
billingPostalCode: data.billingPostalCode || null,
|
|
175
|
+
billingState: data.billingState || null
|
|
176
|
+
}
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
// update OrderInventories remark
|
|
180
|
+
|
|
181
|
+
const foundOIs: OrderInventory[] = await tx.getRepository(OrderInventory).find({
|
|
182
|
+
where: {
|
|
183
|
+
id: In(data.orderInventories.map(oi => oi.id)),
|
|
184
|
+
domain: domain,
|
|
185
|
+
releaseGood: foundDeliveryOrder.releaseGood.id
|
|
186
|
+
}
|
|
187
|
+
})
|
|
188
|
+
if (foundOIs.length > 0) {
|
|
189
|
+
await Promise.all(
|
|
190
|
+
foundOIs.map(async orderInventory => {
|
|
191
|
+
await tx.getRepository(OrderInventory).update(
|
|
192
|
+
{ id: orderInventory.id },
|
|
193
|
+
{
|
|
194
|
+
remark: data.orderInventories.find(dOi => dOi.id === orderInventory.id)?.remark,
|
|
195
|
+
updater: user,
|
|
196
|
+
updatedAt: new Date()
|
|
197
|
+
}
|
|
198
|
+
)
|
|
199
|
+
})
|
|
200
|
+
)
|
|
201
|
+
} else {
|
|
202
|
+
throw new ApiError('E04', `Unable to find orderInventory`)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// update release Good
|
|
206
|
+
await tx.getRepository(ReleaseGood).update(
|
|
207
|
+
{ id: foundDeliveryOrder.releaseGood.id },
|
|
208
|
+
{
|
|
209
|
+
exportOption: shippingOrder?.containerNo ? true : false,
|
|
210
|
+
collectionOrderNo: data.transportType?.toUpperCase() === 'OWN TRANSPORT' && data.coNo ? data?.coNo : null
|
|
211
|
+
}
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
const dispatchedDeliveryOrder: DeliveryOrder = await tx.getRepository(DeliveryOrder).findOne({
|
|
215
|
+
where: {
|
|
216
|
+
domain: domain,
|
|
217
|
+
name: context.request.body.data.name,
|
|
218
|
+
bizplace: context.request.body.data.bizplaceId
|
|
219
|
+
},
|
|
220
|
+
relations: [
|
|
221
|
+
'releaseGood',
|
|
222
|
+
'releaseGood.shippingOrder',
|
|
223
|
+
'bizplace',
|
|
224
|
+
'domain',
|
|
225
|
+
'transportDriver',
|
|
226
|
+
'transportVehicle'
|
|
227
|
+
]
|
|
228
|
+
})
|
|
229
|
+
|
|
230
|
+
const allOrderInventories: OrderInventory[] = await tx
|
|
231
|
+
.getRepository(OrderInventory)
|
|
232
|
+
.find({ where: { deliveryOrder: dispatchedDeliveryOrder.id } })
|
|
233
|
+
|
|
234
|
+
context.body = {
|
|
235
|
+
data: {
|
|
236
|
+
id: dispatchedDeliveryOrder.id,
|
|
237
|
+
doNo: dispatchedDeliveryOrder.name,
|
|
238
|
+
from: dispatchedDeliveryOrder.from,
|
|
239
|
+
to: dispatchedDeliveryOrder.to,
|
|
240
|
+
contactPointRefId: dispatchedDeliveryOrder.contactPointRefId,
|
|
241
|
+
truckNo: dispatchedDeliveryOrder.truckNo,
|
|
242
|
+
transportDriver: dispatchedDeliveryOrder.transportDriver
|
|
243
|
+
? {
|
|
244
|
+
id: dispatchedDeliveryOrder.transportDriver.id,
|
|
245
|
+
name: dispatchedDeliveryOrder.transportDriver.name,
|
|
246
|
+
driverCode: dispatchedDeliveryOrder.transportDriver.driverCode
|
|
247
|
+
}
|
|
248
|
+
: null,
|
|
249
|
+
transportVehicle: dispatchedDeliveryOrder.transportVehicle
|
|
250
|
+
? {
|
|
251
|
+
id: dispatchedDeliveryOrder.transportVehicle.id,
|
|
252
|
+
name: dispatchedDeliveryOrder.transportVehicle.name
|
|
253
|
+
}
|
|
254
|
+
: null,
|
|
255
|
+
otherDriver: dispatchedDeliveryOrder.otherDriver,
|
|
256
|
+
deliveryDate: dispatchedDeliveryOrder.deliveryDate,
|
|
257
|
+
status: dispatchedDeliveryOrder.status,
|
|
258
|
+
ownCollection: dispatchedDeliveryOrder.ownCollection,
|
|
259
|
+
looseItem: dispatchedDeliveryOrder.looseItem,
|
|
260
|
+
deliveryDateTime: dispatchedDeliveryOrder.deliveryDateTime,
|
|
261
|
+
loadWeight: dispatchedDeliveryOrder.loadWeight,
|
|
262
|
+
cargoType: dispatchedDeliveryOrder.cargoType,
|
|
263
|
+
urgency: dispatchedDeliveryOrder.urgency,
|
|
264
|
+
telNo: dispatchedDeliveryOrder.telNo,
|
|
265
|
+
refNo: dispatchedDeliveryOrder.refNo,
|
|
266
|
+
palletQty: dispatchedDeliveryOrder.palletQty,
|
|
267
|
+
remark: dispatchedDeliveryOrder.remark,
|
|
268
|
+
description: dispatchedDeliveryOrder.description,
|
|
269
|
+
reusablePallet: dispatchedDeliveryOrder.reusablePallet,
|
|
270
|
+
attentionTo: dispatchedDeliveryOrder.attentionTo,
|
|
271
|
+
attentionCompany: dispatchedDeliveryOrder.attentionCompany,
|
|
272
|
+
//shipmentInformation
|
|
273
|
+
city: dispatchedDeliveryOrder.city,
|
|
274
|
+
country: dispatchedDeliveryOrder.country,
|
|
275
|
+
deliveryAddress1: dispatchedDeliveryOrder.deliveryAddress1,
|
|
276
|
+
phone1: dispatchedDeliveryOrder.phone1,
|
|
277
|
+
postalCode: dispatchedDeliveryOrder.postalCode,
|
|
278
|
+
state: dispatchedDeliveryOrder.state,
|
|
279
|
+
billingAddress: dispatchedDeliveryOrder.billingAddress,
|
|
280
|
+
billingCity: dispatchedDeliveryOrder.billingCity,
|
|
281
|
+
billingCountry: dispatchedDeliveryOrder.billingCountry,
|
|
282
|
+
billingPostalCode: dispatchedDeliveryOrder.billingPostalCode,
|
|
283
|
+
billingState: dispatchedDeliveryOrder.billingState,
|
|
284
|
+
bizplace: {
|
|
285
|
+
id: dispatchedDeliveryOrder.bizplace.id,
|
|
286
|
+
name: dispatchedDeliveryOrder.bizplace.name,
|
|
287
|
+
description: dispatchedDeliveryOrder.bizplace.description
|
|
288
|
+
},
|
|
289
|
+
domain: {
|
|
290
|
+
id: dispatchedDeliveryOrder.domain.id,
|
|
291
|
+
name: dispatchedDeliveryOrder.domain.name
|
|
292
|
+
},
|
|
293
|
+
releaseGood: {
|
|
294
|
+
id: dispatchedDeliveryOrder.releaseGood.id,
|
|
295
|
+
roNo: dispatchedDeliveryOrder.releaseGood.name,
|
|
296
|
+
description: dispatchedDeliveryOrder.releaseGood.description,
|
|
297
|
+
status: dispatchedDeliveryOrder.releaseGood.status,
|
|
298
|
+
refNo: dispatchedDeliveryOrder.releaseGood.refNo,
|
|
299
|
+
refNo2: dispatchedDeliveryOrder.releaseGood.refNo2,
|
|
300
|
+
refNo3: dispatchedDeliveryOrder.releaseGood.refNo3,
|
|
301
|
+
truckNo: dispatchedDeliveryOrder.releaseGood.truckNo,
|
|
302
|
+
exportOption: dispatchedDeliveryOrder.releaseGood.exportOption,
|
|
303
|
+
ownTransport: dispatchedDeliveryOrder.releaseGood.ownTransport,
|
|
304
|
+
crossDocking: dispatchedDeliveryOrder.releaseGood.crossDocking,
|
|
305
|
+
releaseDateTime: dispatchedDeliveryOrder.releaseGood.releaseDateTime,
|
|
306
|
+
releaseDate: dispatchedDeliveryOrder.releaseGood.releaseDate,
|
|
307
|
+
remark: dispatchedDeliveryOrder.releaseGood.remark,
|
|
308
|
+
courierOption: dispatchedDeliveryOrder.releaseGood.courierOption,
|
|
309
|
+
packingOption: dispatchedDeliveryOrder.releaseGood.packingOption,
|
|
310
|
+
type: dispatchedDeliveryOrder.releaseGood.type,
|
|
311
|
+
acceptedAt: dispatchedDeliveryOrder.releaseGood.acceptedAt,
|
|
312
|
+
marketplaceOrderStatus: dispatchedDeliveryOrder.releaseGood.marketplaceOrderStatus,
|
|
313
|
+
billingAddress: dispatchedDeliveryOrder.releaseGood.billingAddress,
|
|
314
|
+
deliveryAddress1: dispatchedDeliveryOrder.releaseGood.deliveryAddress1,
|
|
315
|
+
deliveryAddress2: dispatchedDeliveryOrder.releaseGood.deliveryAddress2,
|
|
316
|
+
deliveryAddress3: dispatchedDeliveryOrder.releaseGood.deliveryAddress3,
|
|
317
|
+
deliveryAddress4: dispatchedDeliveryOrder.releaseGood.deliveryAddress4,
|
|
318
|
+
deliveryAddress5: dispatchedDeliveryOrder.releaseGood.deliveryAddress5,
|
|
319
|
+
attentionTo: dispatchedDeliveryOrder.releaseGood.attentionTo,
|
|
320
|
+
attentionCompany: dispatchedDeliveryOrder.releaseGood.attentionCompany,
|
|
321
|
+
city: dispatchedDeliveryOrder.releaseGood.city,
|
|
322
|
+
state: dispatchedDeliveryOrder.releaseGood.state,
|
|
323
|
+
postalCode: dispatchedDeliveryOrder.releaseGood.postalCode,
|
|
324
|
+
country: dispatchedDeliveryOrder.releaseGood.country,
|
|
325
|
+
phone1: dispatchedDeliveryOrder.releaseGood.phone1,
|
|
326
|
+
phone2: dispatchedDeliveryOrder.releaseGood.phone2,
|
|
327
|
+
email: dispatchedDeliveryOrder.releaseGood.email,
|
|
328
|
+
transporter: dispatchedDeliveryOrder.releaseGood.transporter,
|
|
329
|
+
trackingNo: dispatchedDeliveryOrder.releaseGood.trackingNo,
|
|
330
|
+
airwayBill: dispatchedDeliveryOrder.releaseGood.airwayBill,
|
|
331
|
+
invoice: dispatchedDeliveryOrder.releaseGood.invoice,
|
|
332
|
+
pickupAddress: dispatchedDeliveryOrder.releaseGood.pickupAddress,
|
|
333
|
+
pickupTime: dispatchedDeliveryOrder.releaseGood.pickupTime,
|
|
334
|
+
handoverType: dispatchedDeliveryOrder.releaseGood.handoverType,
|
|
335
|
+
dropoffAddress: dispatchedDeliveryOrder.releaseGood.dropoffAddress,
|
|
336
|
+
noOfItems: dispatchedDeliveryOrder.releaseGood.noOfItems,
|
|
337
|
+
orderProducts: [],
|
|
338
|
+
shippingOrder: dispatchedDeliveryOrder.releaseGood.shippingOrder
|
|
339
|
+
? {
|
|
340
|
+
containerArrivalDate: dispatchedDeliveryOrder.releaseGood.shippingOrder.containerArrivalDate,
|
|
341
|
+
containerLeavingDate: dispatchedDeliveryOrder.releaseGood.shippingOrder.containerLeavingDate,
|
|
342
|
+
containerNo: dispatchedDeliveryOrder.releaseGood.shippingOrder.containerNo,
|
|
343
|
+
shipName: dispatchedDeliveryOrder.releaseGood.shippingOrder.shipName
|
|
344
|
+
}
|
|
345
|
+
: null
|
|
346
|
+
},
|
|
347
|
+
orderInventories: { ...allOrderInventories }
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
})
|
|
351
|
+
} catch (e) {
|
|
352
|
+
if (e instanceof ApiError) ApiErrorHandler(context, e)
|
|
353
|
+
else throwInternalServerError(context, e)
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
)
|