@things-factory/operato-hub 4.3.329 → 4.3.331
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/email/send-emails.js +130 -104
- package/dist-server/graphql/resolvers/email/send-emails.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/utils/params.js +5 -0
- package/dist-server/routers/api/restful-apis/v1/utils/params.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/warehouse/complete-delivery-order.js +170 -0
- package/dist-server/routers/api/restful-apis/v1/warehouse/complete-delivery-order.js.map +1 -0
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-inbound-order-details.js +4 -2
- 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-inbound-order-list.js +4 -2
- package/dist-server/routers/api/restful-apis/v1/warehouse/get-inbound-order-list.js.map +1 -1
- package/dist-server/routers/api/restful-apis/v1/warehouse/index.js +1 -0
- package/dist-server/routers/api/restful-apis/v1/warehouse/index.js.map +1 -1
- package/openapi/v1/inbound.yaml +25 -11
- package/openapi/v1/outbound.yaml +477 -0
- package/package.json +4 -4
- package/server/graphql/resolvers/email/send-emails.ts +191 -154
- package/server/routers/api/restful-apis/v1/utils/params.ts +5 -0
- package/server/routers/api/restful-apis/v1/warehouse/complete-delivery-order.ts +190 -0
- package/server/routers/api/restful-apis/v1/warehouse/get-inbound-order-details.ts +4 -2
- package/server/routers/api/restful-apis/v1/warehouse/get-inbound-order-list.ts +4 -2
- package/server/routers/api/restful-apis/v1/warehouse/index.ts +1 -0
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
import * as cronParser from 'cron-parser'
|
|
2
2
|
import gql from 'graphql-tag'
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
import {
|
|
4
|
+
getRepository,
|
|
5
|
+
In
|
|
6
|
+
} from 'typeorm'
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
Partner,
|
|
10
|
+
User
|
|
11
|
+
} from '@things-factory/auth-base'
|
|
6
12
|
import { Bizplace } from '@things-factory/biz-base'
|
|
7
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
objDataToExcel,
|
|
15
|
+
sendEmailSes
|
|
16
|
+
} from '@things-factory/email-base'
|
|
8
17
|
import { logger } from '@things-factory/env'
|
|
9
18
|
import { GraphqlLocalClient } from '@things-factory/shell'
|
|
10
19
|
|
|
11
20
|
import { Email } from '../../../entities'
|
|
12
21
|
|
|
22
|
+
const { PerformanceObserver, performance } = require('node:perf_hooks')
|
|
23
|
+
|
|
13
24
|
const EMAIL_SEARCH_INTERVAL = 35
|
|
14
25
|
|
|
15
26
|
export const sendEmailsResolver = {
|
|
@@ -30,7 +41,7 @@ export const sendEmailsResolver = {
|
|
|
30
41
|
|
|
31
42
|
if (dag < now && dag > thirtyMinsAgo) {
|
|
32
43
|
try {
|
|
33
|
-
|
|
44
|
+
processEmailCronJob(email, startDate.toISOString(), now.toISOString()) // removed await
|
|
34
45
|
} catch (e) {
|
|
35
46
|
logger.error(`[auto_email_log_by_id(${email.id})] ${e}`)
|
|
36
47
|
}
|
|
@@ -39,171 +50,197 @@ export const sendEmailsResolver = {
|
|
|
39
50
|
} catch (e) {
|
|
40
51
|
logger.error(`[auto_email_log] ${e}`)
|
|
41
52
|
}
|
|
42
|
-
|
|
43
53
|
return true
|
|
44
54
|
}
|
|
45
55
|
}
|
|
46
56
|
|
|
47
57
|
function replaceValues(variablesString: string, values: any = []) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
|
|
59
|
+
for (let obj of values) {
|
|
60
|
+
variablesString = variablesString.replace(obj.name, obj.value)
|
|
61
|
+
}
|
|
62
|
+
return JSON.parse(variablesString)
|
|
63
|
+
|
|
52
64
|
}
|
|
53
65
|
|
|
54
66
|
// NOTE: might show unused because of usage in eval function
|
|
55
67
|
function flattenObject(obj, delimiter = '|') {
|
|
56
|
-
var objResult = {}
|
|
57
|
-
for (var items in obj) {
|
|
58
|
-
if (!Object.hasOwnProperty.bind(obj)(items)) continue
|
|
59
68
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
69
|
+
var objResult = {}
|
|
70
|
+
for (var items in obj) {
|
|
71
|
+
if (!Object.hasOwnProperty.bind(obj)(items)) continue
|
|
72
|
+
|
|
73
|
+
if (!!obj[items] && typeof obj[items] == 'object') {
|
|
74
|
+
var flatObject = flattenObject(obj[items], delimiter)
|
|
75
|
+
for (var x in flatObject) {
|
|
76
|
+
if (!Object.hasOwnProperty.bind(flatObject)(x)) continue
|
|
64
77
|
|
|
65
|
-
|
|
78
|
+
objResult[items + delimiter + x] = flatObject[x]
|
|
79
|
+
}
|
|
80
|
+
} else {
|
|
81
|
+
objResult[items] = obj[items]
|
|
66
82
|
}
|
|
67
|
-
} else {
|
|
68
|
-
objResult[items] = obj[items]
|
|
69
83
|
}
|
|
70
|
-
|
|
71
|
-
return objResult
|
|
84
|
+
return objResult
|
|
72
85
|
}
|
|
73
86
|
|
|
74
87
|
async function processEmailCronJob(email, fromDate, toDate) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
let
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
88
|
+
|
|
89
|
+
try {
|
|
90
|
+
performance.mark(`processEmailCronJob start:(${email.id})`)
|
|
91
|
+
// processEmailStartTime = performance.now()
|
|
92
|
+
let attachments: any = []
|
|
93
|
+
// black list filtration
|
|
94
|
+
// let partnerBlackList = JSON.parse(email.partnerBlackList) || []
|
|
95
|
+
|
|
96
|
+
// partner list
|
|
97
|
+
let partnerList = JSON.parse(email.partnerList) || []
|
|
98
|
+
|
|
99
|
+
const partners: Partner[] = await getRepository(Partner).find({
|
|
100
|
+
where: { domain: email.domain, id: In(partnerList) },
|
|
101
|
+
relations: ['partnerDomain']
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
// retrieve and process xlsx attachmennts
|
|
105
|
+
for (let attachment of email.emailAttachments) {
|
|
106
|
+
let client = GraphqlLocalClient.client
|
|
107
|
+
let attachmentVariables = JSON.parse(attachment.attachmentVariables)
|
|
108
|
+
let numberOfMonths: number = attachmentVariables?.numberOfMonths || 1
|
|
109
|
+
let numberOfWeeks: number = attachmentVariables?.numberOfWeeks ? attachmentVariables.numberOfWeeks * 7 : 7
|
|
110
|
+
let numberOfDays: number = attachmentVariables?.numberOfDays || 1
|
|
111
|
+
|
|
112
|
+
for (let partner of partners) {
|
|
113
|
+
const bizplace: Bizplace = await getRepository(Bizplace).findOne({
|
|
114
|
+
where: { domain: partner.partnerDomain }
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
// date params processing
|
|
118
|
+
// let dateValue = new Date()
|
|
119
|
+
// let yesterday = dateValue.getDate() - 1
|
|
120
|
+
// let yesterdayBegin: any = new Date(dateValue.setDate(yesterday))
|
|
121
|
+
// let yesterdayEnd: any = new Date(dateValue.setDate(yesterday))
|
|
122
|
+
|
|
123
|
+
// yesterdayBegin.setHours(0, 0, 0, 0)
|
|
124
|
+
// yesterdayEnd.setHours(23, 59, 59, 999)
|
|
125
|
+
|
|
126
|
+
let timezoneOffset = email?.timezoneOffset || 0
|
|
127
|
+
|
|
128
|
+
let curDate = new Date()
|
|
129
|
+
let curDateForMonth = new Date(curDate)
|
|
130
|
+
let curDateForWeek = new Date(curDate)
|
|
131
|
+
let curDateForDay = new Date(curDate)
|
|
132
|
+
|
|
133
|
+
let prevMonth = curDateForMonth.getMonth() - numberOfMonths
|
|
134
|
+
let prevMonthBegin: any = new Date(curDateForMonth.setMonth(prevMonth))
|
|
135
|
+
prevMonthBegin.setHours(0, 0, 0, 0)
|
|
136
|
+
let prevMonthBeginDateTime = new Date(prevMonthBegin - timezoneOffset * 60000).toISOString()
|
|
137
|
+
|
|
138
|
+
let prevWeek = curDateForWeek.getDate() - numberOfWeeks // subtract 1 week
|
|
139
|
+
let prevWeekBegin: any = new Date(curDateForWeek.setDate(prevWeek))
|
|
140
|
+
prevWeekBegin.setHours(0, 0, 0, 0)
|
|
141
|
+
let prevWeekBeginDateTime = new Date(prevWeekBegin - timezoneOffset * 60000).toISOString()
|
|
142
|
+
|
|
143
|
+
let prevDay = curDateForDay.getDate() - numberOfDays // subtract 1 day
|
|
144
|
+
let prevDayBegin: any = new Date(curDateForDay.setDate(prevDay))
|
|
145
|
+
prevDayBegin.setHours(0, 0, 0, 0)
|
|
146
|
+
let prevDayBeginDateTime = new Date(prevDayBegin - timezoneOffset * 60000).toISOString()
|
|
147
|
+
|
|
148
|
+
let endDate: any = curDate
|
|
149
|
+
endDate.setHours(23, 59, 59, 999)
|
|
150
|
+
let endDateTime = new Date(endDate - timezoneOffset * 60000).toISOString()
|
|
151
|
+
|
|
152
|
+
// let fromDate = new Date(yesterdayBegin - timezoneOffset * 60000).toISOString()
|
|
153
|
+
// let toDate = new Date(yesterdayEnd - timezoneOffset * 60000).toISOString()
|
|
154
|
+
|
|
155
|
+
// to trace UTC conversion in production
|
|
156
|
+
logger.info(`[email_utc_conversion] fromDate: ${fromDate}, toDate: ${toDate}`)
|
|
157
|
+
|
|
158
|
+
let variables = replaceValues(attachment.variables, [
|
|
159
|
+
{ name: '{{bizplaceId}}', value: `"${bizplace.id}"` },
|
|
160
|
+
{ name: '{{timezoneOffset}}', value: `${timezoneOffset}` },
|
|
161
|
+
{ name: '{{lastRunDateTime}}', value: `"${fromDate}"` },
|
|
162
|
+
{ name: '{{toDateTime}}', value: `"${endDateTime}"` },
|
|
163
|
+
{ name: '{{prevMonthBeginDateTime}}', value: `"${prevMonthBeginDateTime}"` },
|
|
164
|
+
{ name: '{{prevWeekBeginDateTime}}', value: `"${prevWeekBeginDateTime}"` },
|
|
165
|
+
{ name: '{{prevDayBeginDateTime}}', value: `"${prevDayBeginDateTime}"` }
|
|
166
|
+
])
|
|
167
|
+
|
|
168
|
+
let user: User = email.creator
|
|
169
|
+
delete user.creatorId
|
|
170
|
+
delete user.updaterId
|
|
171
|
+
|
|
172
|
+
// might show unused because of usage in eval
|
|
173
|
+
const response = await client.query({
|
|
174
|
+
query: gql`
|
|
175
|
+
${attachment.gqlString}
|
|
176
|
+
`,
|
|
177
|
+
variables: variables || {},
|
|
178
|
+
context: { state: { domain: email.domain, user } }
|
|
179
|
+
} as any)
|
|
180
|
+
|
|
181
|
+
let excelResponse
|
|
182
|
+
|
|
183
|
+
try {
|
|
184
|
+
performance.mark(`objDataToExcel start:${email.id}`)
|
|
185
|
+
let mappedResponse = eval(attachment.mappingFunction)
|
|
186
|
+
|
|
187
|
+
let header = JSON.parse(attachment.headers)
|
|
188
|
+
|
|
189
|
+
excelResponse = await objDataToExcel({ name: 'name', data: { header, data: mappedResponse } })
|
|
190
|
+
|
|
191
|
+
performance.mark(`objDataToExcel end:${email.id}`)
|
|
192
|
+
|
|
193
|
+
} catch (e) {
|
|
194
|
+
performance.mark(`objDataToExcel end:${email.id}`)
|
|
195
|
+
logger.error(`[send-email] objDataToExcel(${email.id}): ${e}`)
|
|
196
|
+
} finally {
|
|
197
|
+
let perf = performance.measure(`emailId:${email.id}`, `objDataToExcel start:${email.id}`, `objDataToExcel end:${email.id}`)
|
|
198
|
+
logger.info(`objDataToExcel performance: ${perf.toJSON()}`)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
attachments.push({
|
|
202
|
+
filename: `${bizplace.name} - ${attachment.name}.xlsx`,
|
|
203
|
+
content: excelResponse,
|
|
204
|
+
contentType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
|
205
|
+
})
|
|
206
|
+
}
|
|
175
207
|
}
|
|
176
|
-
}
|
|
177
208
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
+
// modify content and subject
|
|
210
|
+
let bizplace: Bizplace = await getRepository(Bizplace).findOne({
|
|
211
|
+
where: { domain: email.domain },
|
|
212
|
+
relations: ['company']
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
let modifiedContent = email.content.replace('{{companyName}}', bizplace.company.name)
|
|
216
|
+
let modifiedSubject = email.subject.replace('{{warehouseName}}', email.domain.name)
|
|
217
|
+
modifiedSubject = modifiedSubject.replace('{{reportDate}}', new Date().toLocaleDateString('en-GB'))
|
|
218
|
+
|
|
219
|
+
let res = await sendEmailSes({
|
|
220
|
+
attachments,
|
|
221
|
+
subject: modifiedSubject,
|
|
222
|
+
content: modifiedContent,
|
|
223
|
+
toMailList:
|
|
224
|
+
email.emailRecipients
|
|
225
|
+
.filter(er => er.type == 'to')
|
|
226
|
+
.map(er => {
|
|
227
|
+
return er.emailAddress
|
|
228
|
+
}) || [],
|
|
229
|
+
ccMailList:
|
|
230
|
+
email.emailRecipients
|
|
231
|
+
.filter(er => er.type == 'cc')
|
|
232
|
+
.map(er => {
|
|
233
|
+
return er.emailAddress
|
|
234
|
+
}) || []
|
|
235
|
+
})
|
|
236
|
+
|
|
237
|
+
await getRepository(Email).update({ id: email.id }, { lastSent: new Date().toISOString() })
|
|
238
|
+
performance.mark(`processEmailCronJob end:(${email.id})`)
|
|
239
|
+
} catch (e) {
|
|
240
|
+
performance.mark(`processEmailCronJob end:(${email.id})`)
|
|
241
|
+
logger.error(`[send-email] processEmailCronJob(${email.id}): ${e}`)
|
|
242
|
+
} finally {
|
|
243
|
+
let perf = performance.measure(`emailId:${email.id}`, `processEmailCronJob start:(${email.id})`, `processEmailCronJob end:(${email.id})`)
|
|
244
|
+
logger.info(`processEmailCronJob performance: ${perf.toJSON()}`)
|
|
245
|
+
}
|
|
209
246
|
}
|
|
@@ -421,6 +421,7 @@ export const params = {
|
|
|
421
421
|
'shippingOrder.containerNo',
|
|
422
422
|
'shippingOrder.shipName'
|
|
423
423
|
],
|
|
424
|
+
'complete-delivery-order': ['remark', 'bizplaceId', 'name'],
|
|
424
425
|
'update-gan-to-arrived': ['ganNo', 'bizplaceId']
|
|
425
426
|
}
|
|
426
427
|
|
|
@@ -796,6 +797,10 @@ export const reqParams = {
|
|
|
796
797
|
type: 'field'
|
|
797
798
|
}
|
|
798
799
|
],
|
|
800
|
+
'complete-delivery-order': [
|
|
801
|
+
{ name: 'name', required: true, type: 'field' },
|
|
802
|
+
{ name: 'bizplaceId', required: true, type: 'field' }
|
|
803
|
+
],
|
|
799
804
|
'update-gan-to-arrived': [
|
|
800
805
|
{ name: 'ganNo', required: true, type: 'field' },
|
|
801
806
|
{
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { getConnection, EntityManager } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { restfulApiRouter as router } from '@things-factory/api'
|
|
4
|
+
import { TransportVehicle, TRUCK_STATUS } from '@things-factory/warehouse-base'
|
|
5
|
+
import {
|
|
6
|
+
ORDER_TYPES,
|
|
7
|
+
ORDER_STATUS,
|
|
8
|
+
ORDER_INVENTORY_STATUS,
|
|
9
|
+
OrderInventory,
|
|
10
|
+
DeliveryOrder
|
|
11
|
+
} from '@things-factory/sales-base'
|
|
12
|
+
import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
|
|
13
|
+
import { businessMiddleware, loggingMiddleware, validationMiddleware } from '../middlewares'
|
|
14
|
+
|
|
15
|
+
router.post(
|
|
16
|
+
'/v1/warehouse/complete-delivery-order',
|
|
17
|
+
businessMiddleware,
|
|
18
|
+
validationMiddleware,
|
|
19
|
+
loggingMiddleware,
|
|
20
|
+
async (context, next) => {
|
|
21
|
+
try {
|
|
22
|
+
await getConnection().transaction(async (tx: EntityManager) => {
|
|
23
|
+
const { domain, user } = context.state
|
|
24
|
+
const data = context.request.body.data
|
|
25
|
+
const deliveryOrder: DeliveryOrder = await tx.getRepository(DeliveryOrder).findOne({
|
|
26
|
+
where: { domain, name: data.name },
|
|
27
|
+
relations: ['bizplace', 'transportDriver', 'transportVehicle', 'releaseGood', 'releaseGood.shippingOrder']
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
if (!deliveryOrder) throw new ApiError('E04', `Delivery order doesn't exists.`)
|
|
31
|
+
if (deliveryOrder.status !== ORDER_STATUS.DELIVERING) throw new ApiError('E04', `Status is not receivable.`)
|
|
32
|
+
|
|
33
|
+
await tx
|
|
34
|
+
.getRepository(OrderInventory)
|
|
35
|
+
.update(
|
|
36
|
+
{ type: ORDER_TYPES.DELIVERY, status: ORDER_INVENTORY_STATUS.DELIVERING, domain, deliveryOrder },
|
|
37
|
+
{ status: ORDER_INVENTORY_STATUS.DONE }
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
let orderInventories: OrderInventory[] = await tx.getRepository(OrderInventory).find({
|
|
41
|
+
where: { domain, deliveryOrder: deliveryOrder }
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
const updateDoPatch =
|
|
45
|
+
data.remark && data.remark !== ''
|
|
46
|
+
? {
|
|
47
|
+
remark: data.remark,
|
|
48
|
+
status: ORDER_STATUS.DONE,
|
|
49
|
+
updater: user
|
|
50
|
+
}
|
|
51
|
+
: {
|
|
52
|
+
status: ORDER_STATUS.DONE,
|
|
53
|
+
updater: user
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
await tx.getRepository(DeliveryOrder).update({ id: deliveryOrder.id }, updateDoPatch)
|
|
57
|
+
|
|
58
|
+
if (!deliveryOrder?.ownCollection) {
|
|
59
|
+
await tx.getRepository(TransportVehicle).update(
|
|
60
|
+
{ id: deliveryOrder.transportVehicle },
|
|
61
|
+
{
|
|
62
|
+
status: TRUCK_STATUS.IDLE,
|
|
63
|
+
updater: user
|
|
64
|
+
}
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
context.body = {
|
|
69
|
+
data: {
|
|
70
|
+
id: deliveryOrder.id,
|
|
71
|
+
doNo: deliveryOrder.name,
|
|
72
|
+
from: deliveryOrder.from,
|
|
73
|
+
to: deliveryOrder.to,
|
|
74
|
+
contactPointRefId: deliveryOrder.contactPointRefId,
|
|
75
|
+
truckNo: deliveryOrder.truckNo,
|
|
76
|
+
transportDriver: deliveryOrder.transportDriver
|
|
77
|
+
? {
|
|
78
|
+
id: deliveryOrder.transportDriver.id,
|
|
79
|
+
name: deliveryOrder.transportDriver.name,
|
|
80
|
+
driverCode: deliveryOrder.transportDriver.driverCode
|
|
81
|
+
}
|
|
82
|
+
: null,
|
|
83
|
+
transportVehicle: deliveryOrder.transportVehicle
|
|
84
|
+
? {
|
|
85
|
+
id: deliveryOrder.transportVehicle.id,
|
|
86
|
+
name: deliveryOrder.transportVehicle.name
|
|
87
|
+
}
|
|
88
|
+
: null,
|
|
89
|
+
otherDriver: deliveryOrder.otherDriver,
|
|
90
|
+
deliveryDate: deliveryOrder.deliveryDate,
|
|
91
|
+
status: ORDER_STATUS.DONE,
|
|
92
|
+
ownCollection: deliveryOrder.ownCollection,
|
|
93
|
+
looseItem: deliveryOrder.looseItem,
|
|
94
|
+
deliveryDateTime: deliveryOrder.deliveryDateTime,
|
|
95
|
+
loadWeight: deliveryOrder.loadWeight,
|
|
96
|
+
cargoType: deliveryOrder.cargoType,
|
|
97
|
+
urgency: deliveryOrder.urgency,
|
|
98
|
+
telNo: deliveryOrder.telNo,
|
|
99
|
+
refNo: deliveryOrder.refNo,
|
|
100
|
+
palletQty: deliveryOrder.palletQty,
|
|
101
|
+
remark: data.remark && data.remark !== '' ? data.remark : null,
|
|
102
|
+
description: deliveryOrder.description,
|
|
103
|
+
reusablePallet: deliveryOrder.reusablePallet,
|
|
104
|
+
attentionTo: deliveryOrder.attentionTo,
|
|
105
|
+
attentionCompany: deliveryOrder.attentionCompany,
|
|
106
|
+
//shipmentInformation
|
|
107
|
+
city: deliveryOrder.city,
|
|
108
|
+
country: deliveryOrder.country,
|
|
109
|
+
deliveryAddress1: deliveryOrder.deliveryAddress1,
|
|
110
|
+
phone1: deliveryOrder.phone1,
|
|
111
|
+
postalCode: deliveryOrder.postalCode,
|
|
112
|
+
state: deliveryOrder.state,
|
|
113
|
+
billingAddress: deliveryOrder.billingAddress,
|
|
114
|
+
billingCity: deliveryOrder.billingCity,
|
|
115
|
+
billingCountry: deliveryOrder.billingCountry,
|
|
116
|
+
billingPostalCode: deliveryOrder.billingPostalCode,
|
|
117
|
+
billingState: deliveryOrder.billingState,
|
|
118
|
+
bizplace: {
|
|
119
|
+
id: deliveryOrder.bizplace.id,
|
|
120
|
+
name: deliveryOrder.bizplace.name,
|
|
121
|
+
description: deliveryOrder.bizplace.description
|
|
122
|
+
},
|
|
123
|
+
domain: {
|
|
124
|
+
id: domain.id,
|
|
125
|
+
name: domain.name
|
|
126
|
+
},
|
|
127
|
+
releaseGood: {
|
|
128
|
+
id: deliveryOrder.releaseGood.id,
|
|
129
|
+
roNo: deliveryOrder.releaseGood.name,
|
|
130
|
+
description: deliveryOrder.releaseGood.description,
|
|
131
|
+
status: deliveryOrder.releaseGood.status,
|
|
132
|
+
refNo: deliveryOrder.releaseGood.refNo,
|
|
133
|
+
refNo2: deliveryOrder.releaseGood.refNo2,
|
|
134
|
+
refNo3: deliveryOrder.releaseGood.refNo3,
|
|
135
|
+
truckNo: deliveryOrder.releaseGood.truckNo,
|
|
136
|
+
exportOption: deliveryOrder.releaseGood.exportOption,
|
|
137
|
+
ownTransport: deliveryOrder.releaseGood.ownTransport,
|
|
138
|
+
crossDocking: deliveryOrder.releaseGood.crossDocking,
|
|
139
|
+
releaseDateTime: deliveryOrder.releaseGood.releaseDateTime,
|
|
140
|
+
releaseDate: deliveryOrder.releaseGood.releaseDate,
|
|
141
|
+
remark: deliveryOrder.releaseGood.remark,
|
|
142
|
+
courierOption: deliveryOrder.releaseGood.courierOption,
|
|
143
|
+
packingOption: deliveryOrder.releaseGood.packingOption,
|
|
144
|
+
type: deliveryOrder.releaseGood.type,
|
|
145
|
+
acceptedAt: deliveryOrder.releaseGood.acceptedAt,
|
|
146
|
+
marketplaceOrderStatus: deliveryOrder.releaseGood.marketplaceOrderStatus,
|
|
147
|
+
billingAddress: deliveryOrder.releaseGood.billingAddress,
|
|
148
|
+
deliveryAddress1: deliveryOrder.releaseGood.deliveryAddress1,
|
|
149
|
+
deliveryAddress2: deliveryOrder.releaseGood.deliveryAddress2,
|
|
150
|
+
deliveryAddress3: deliveryOrder.releaseGood.deliveryAddress3,
|
|
151
|
+
deliveryAddress4: deliveryOrder.releaseGood.deliveryAddress4,
|
|
152
|
+
deliveryAddress5: deliveryOrder.releaseGood.deliveryAddress5,
|
|
153
|
+
attentionTo: deliveryOrder.releaseGood.attentionTo,
|
|
154
|
+
attentionCompany: deliveryOrder.releaseGood.attentionCompany,
|
|
155
|
+
city: deliveryOrder.releaseGood.city,
|
|
156
|
+
state: deliveryOrder.releaseGood.state,
|
|
157
|
+
postalCode: deliveryOrder.releaseGood.postalCode,
|
|
158
|
+
country: deliveryOrder.releaseGood.country,
|
|
159
|
+
phone1: deliveryOrder.releaseGood.phone1,
|
|
160
|
+
phone2: deliveryOrder.releaseGood.phone2,
|
|
161
|
+
email: deliveryOrder.releaseGood.email,
|
|
162
|
+
transporter: deliveryOrder.releaseGood.transporter,
|
|
163
|
+
trackingNo: deliveryOrder.releaseGood.trackingNo,
|
|
164
|
+
airwayBill: deliveryOrder.releaseGood.airwayBill,
|
|
165
|
+
invoice: deliveryOrder.releaseGood.invoice,
|
|
166
|
+
pickupAddress: deliveryOrder.releaseGood.pickupAddress,
|
|
167
|
+
pickupTime: deliveryOrder.releaseGood.pickupTime,
|
|
168
|
+
handoverType: deliveryOrder.releaseGood.handoverType,
|
|
169
|
+
dropoffAddress: deliveryOrder.releaseGood.dropoffAddress,
|
|
170
|
+
noOfItems: deliveryOrder.releaseGood.noOfItems,
|
|
171
|
+
orderProducts: [],
|
|
172
|
+
shippingOrder: deliveryOrder.releaseGood.shippingOrder
|
|
173
|
+
? {
|
|
174
|
+
containerArrivalDate: deliveryOrder.releaseGood.shippingOrder.containerArrivalDate,
|
|
175
|
+
containerLeavingDate: deliveryOrder.releaseGood.shippingOrder.containerLeavingDate,
|
|
176
|
+
containerNo: deliveryOrder.releaseGood.shippingOrder.containerNo,
|
|
177
|
+
shipName: deliveryOrder.releaseGood.shippingOrder.shipName
|
|
178
|
+
}
|
|
179
|
+
: null
|
|
180
|
+
},
|
|
181
|
+
orderInventories: { ...orderInventories }
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
})
|
|
185
|
+
} catch (e) {
|
|
186
|
+
if (e instanceof ApiError) ApiErrorHandler(context, e)
|
|
187
|
+
else throwInternalServerError(context, e)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import _ from 'lodash'
|
|
1
2
|
import { getRepository } from 'typeorm'
|
|
2
3
|
|
|
3
4
|
import { restfulApiRouter as router } from '@things-factory/api'
|
|
4
5
|
import { ArrivalNotice } from '@things-factory/sales-base'
|
|
5
6
|
|
|
7
|
+
import { businessMiddleware, loggingMiddleware, validationMiddleware } from '../middlewares'
|
|
6
8
|
import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
|
|
7
|
-
import _ from 'lodash'
|
|
8
|
-
import { businessMiddleware, validationMiddleware, loggingMiddleware } from '../middlewares'
|
|
9
9
|
|
|
10
10
|
router.get(
|
|
11
11
|
'/v1/warehouse/get-inbound-order-details',
|
|
@@ -44,6 +44,8 @@ router.get(
|
|
|
44
44
|
batchId: orderProduct.batchId,
|
|
45
45
|
packingType: orderProduct.packingType,
|
|
46
46
|
packingSize: orderProduct.packingSize,
|
|
47
|
+
uom: orderProduct.uom,
|
|
48
|
+
uomValue: orderProduct.uomValue,
|
|
47
49
|
qty: orderProduct.packQty,
|
|
48
50
|
palletQty: orderProduct.palletQty
|
|
49
51
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import _ from 'lodash'
|
|
1
2
|
import { Between, getRepository } from 'typeorm'
|
|
2
3
|
|
|
3
4
|
import { restfulApiRouter as router } from '@things-factory/api'
|
|
4
5
|
import { ArrivalNotice } from '@things-factory/sales-base'
|
|
5
6
|
|
|
7
|
+
import { businessMiddleware, loggingMiddleware, validationMiddleware } from '../middlewares'
|
|
6
8
|
import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
|
|
7
|
-
import _ from 'lodash'
|
|
8
|
-
import { businessMiddleware, validationMiddleware, loggingMiddleware } from '../middlewares'
|
|
9
9
|
|
|
10
10
|
router.get(
|
|
11
11
|
'/v1/warehouse/get-inbound-order-list',
|
|
@@ -52,6 +52,8 @@ router.get(
|
|
|
52
52
|
batchId: orderProduct.batchId,
|
|
53
53
|
packingType: orderProduct.packingType,
|
|
54
54
|
packingSize: orderProduct.packingSize,
|
|
55
|
+
uom: orderProduct.uom,
|
|
56
|
+
uomValue: orderProduct.uomValue,
|
|
55
57
|
qty: orderProduct.packQty,
|
|
56
58
|
palletQty: orderProduct.palletQty
|
|
57
59
|
}
|