@things-factory/worksheet-base 4.0.36 → 4.0.40
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/constants/template.js +1 -0
- package/dist-server/constants/template.js.map +1 -1
- package/dist-server/controllers/ecommerce/sellercraft-controller.js +32 -1
- package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
- package/dist-server/controllers/inbound/unloading-returning-worksheet-controller.js +1 -1
- package/dist-server/controllers/inbound/unloading-returning-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js +16 -12
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js +2 -0
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/render-grn.js +1 -0
- package/dist-server/controllers/render-grn.js.map +1 -1
- package/dist-server/controllers/render-invoices.js +138 -0
- package/dist-server/controllers/render-invoices.js.map +1 -0
- package/dist-server/controllers/render-ro-do.js +5 -1
- package/dist-server/controllers/render-ro-do.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +5 -2
- package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +2 -2
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +10 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +90 -76
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -1
- package/dist-server/routes.js +8 -0
- package/dist-server/routes.js.map +1 -1
- package/package.json +17 -17
- package/server/constants/template.ts +1 -0
- package/server/controllers/ecommerce/sellercraft-controller.ts +37 -1
- package/server/controllers/inbound/unloading-returning-worksheet-controller.ts +1 -1
- package/server/controllers/inbound/unloading-worksheet-controller.ts +21 -14
- package/server/controllers/outbound/sorting-worksheet-controller.ts +1 -0
- package/server/controllers/render-grn.ts +1 -0
- package/server/controllers/render-invoices.ts +154 -0
- package/server/controllers/render-ro-do.ts +6 -1
- package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +11 -6
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +2 -2
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +12 -1
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +96 -79
- package/server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.ts +1 -1
- package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +2 -2
- package/server/routes.ts +11 -0
|
@@ -55,7 +55,10 @@ export async function completePicking(
|
|
|
55
55
|
'bizplace.company.domain',
|
|
56
56
|
'orderInventories',
|
|
57
57
|
'orderInventories.inventory',
|
|
58
|
-
'orderInventories.product'
|
|
58
|
+
'orderInventories.product',
|
|
59
|
+
'orderProducts',
|
|
60
|
+
'orderProducts.product',
|
|
61
|
+
'orderProducts.product.productDetails'
|
|
59
62
|
]
|
|
60
63
|
})
|
|
61
64
|
|
|
@@ -86,6 +89,11 @@ export async function completePicking(
|
|
|
86
89
|
|
|
87
90
|
if (sellercraft) {
|
|
88
91
|
const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
|
|
92
|
+
|
|
93
|
+
if (!releaseGood?.packageId) {
|
|
94
|
+
releaseGood = await sellercraftCtrl.packOrder(sellercraft, releaseGood)
|
|
95
|
+
}
|
|
96
|
+
|
|
89
97
|
releaseGood = await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
|
|
90
98
|
await sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
|
|
91
99
|
} else {
|
|
@@ -94,91 +102,100 @@ export async function completePicking(
|
|
|
94
102
|
where: { orderNo: releaseGood.refNo, domain: companyDomain },
|
|
95
103
|
relations: ['marketplaceStore', 'marketplaceOrderItems', 'marketplaceOrderItems.marketplaceOrderShipping']
|
|
96
104
|
})
|
|
97
|
-
const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
|
|
98
|
-
let eTraxOption: boolean
|
|
99
105
|
|
|
100
|
-
if (
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
}
|
|
106
|
+
if (marketplaceOrder) {
|
|
107
|
+
const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
|
|
108
|
+
let eTraxOption: boolean
|
|
104
109
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
// if eTrax option is true
|
|
110
|
-
if (eTraxOption) {
|
|
111
|
-
const marketplaceOrderItems: MarketplaceOrderItem[] = marketplaceOrder.marketplaceOrderItems
|
|
112
|
-
|
|
113
|
-
// access every marketplaceOrderItems for shipping information you need
|
|
114
|
-
// trigger the controller from integration-lmd that trigger the API, build the parameters needed
|
|
115
|
-
// for etrax didn't support multi awb per order
|
|
116
|
-
const marketplaceOrderShipping: MarketplaceOrderShipping = marketplaceOrderItems[0].marketplaceOrderShipping
|
|
117
|
-
const lmd: LastMileDelivery = await tx.getRepository(LastMileDelivery).findOne({
|
|
118
|
-
where: {
|
|
119
|
-
domain,
|
|
120
|
-
platform: 'eTrax'
|
|
121
|
-
}
|
|
122
|
-
})
|
|
123
|
-
|
|
124
|
-
//Get which transporter to use
|
|
125
|
-
const marketplaceTransporter: MarketplaceTransporter = await tx.getRepository(MarketplaceTransporter).findOne({
|
|
126
|
-
where: { marketplaceStore: marketplaceOrder.marketplaceStore },
|
|
127
|
-
relations: ['pickupTransporter', 'deliveryTransporter']
|
|
128
|
-
})
|
|
129
|
-
|
|
130
|
-
const resp = await LastMileAPI.createShipmentRequest(lmd, {
|
|
131
|
-
orderNo: marketplaceOrder.orderNo,
|
|
132
|
-
clientId: lmd.clientId,
|
|
133
|
-
clientType: lmd.clientType,
|
|
134
|
-
clientName: lmd.clientName,
|
|
135
|
-
transporterId: marketplaceTransporter.pickupTransporter.transporterId,
|
|
136
|
-
pickupName: warehouseContactPoint.name,
|
|
137
|
-
pickupAddress1: warehouseContactPoint.address,
|
|
138
|
-
pickupAddress2: warehouseContactPoint.address2,
|
|
139
|
-
pickupPostcode: warehouseContactPoint.postCode,
|
|
140
|
-
pickupState: warehouseContactPoint.state,
|
|
141
|
-
pickupCity: warehouseContactPoint.city,
|
|
142
|
-
pickupPhone: warehouseContactPoint.phone,
|
|
143
|
-
pickupEmail: warehouseContactPoint.email,
|
|
144
|
-
name: marketplaceOrderShipping?.attentionTo ? marketplaceOrderShipping.attentionTo.trim() : '',
|
|
145
|
-
address1: marketplaceOrderShipping?.address1 ? marketplaceOrderShipping?.address1.trim() : '-',
|
|
146
|
-
address2: marketplaceOrderShipping?.address2 ? marketplaceOrderShipping?.address2.trim() : '-',
|
|
147
|
-
postCode: marketplaceOrderShipping?.postCode ? marketplaceOrderShipping?.postCode.trim() : '',
|
|
148
|
-
city: marketplaceOrderShipping?.city ? marketplaceOrderShipping?.city.trim() : '',
|
|
149
|
-
state: marketplaceOrderShipping?.state ? marketplaceOrderShipping?.state.trim() : '',
|
|
150
|
-
phone: marketplaceOrderShipping.phone1 || '',
|
|
151
|
-
email: marketplaceOrderShipping.email || '',
|
|
152
|
-
attentionTo: marketplaceOrderShipping.attentionTo,
|
|
153
|
-
quantity: marketplaceOrderItems.length
|
|
154
|
-
})
|
|
155
|
-
|
|
156
|
-
const delay = (ms: number) => {
|
|
157
|
-
return new Promise(resolve => setTimeout(resolve, ms))
|
|
110
|
+
if (marketplaceStore.isAutoUpdateShipment) {
|
|
111
|
+
const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
112
|
+
await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PACKING)
|
|
158
113
|
}
|
|
159
114
|
|
|
160
|
-
if (
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
115
|
+
if (!marketplaceOrder)
|
|
116
|
+
throw new Error('Failed to find ecommerce order, kindly contact our support team regarding this issue')
|
|
117
|
+
eTraxOption = marketplaceOrder?.marketplaceStore.eTrax
|
|
118
|
+
|
|
119
|
+
// if eTrax option is true
|
|
120
|
+
if (eTraxOption) {
|
|
121
|
+
const marketplaceOrderItems: MarketplaceOrderItem[] = marketplaceOrder.marketplaceOrderItems
|
|
122
|
+
|
|
123
|
+
// access every marketplaceOrderItems for shipping information you need
|
|
124
|
+
// trigger the controller from integration-lmd that trigger the API, build the parameters needed
|
|
125
|
+
// for etrax didn't support multi awb per order
|
|
126
|
+
const marketplaceOrderShipping: MarketplaceOrderShipping = marketplaceOrderItems[0].marketplaceOrderShipping
|
|
127
|
+
const lmd: LastMileDelivery = await tx.getRepository(LastMileDelivery).findOne({
|
|
128
|
+
where: {
|
|
129
|
+
domain,
|
|
130
|
+
platform: 'eTrax'
|
|
172
131
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
//Get which transporter to use
|
|
135
|
+
const marketplaceTransporter: MarketplaceTransporter = await tx
|
|
136
|
+
.getRepository(MarketplaceTransporter)
|
|
137
|
+
.findOne({
|
|
138
|
+
where: { marketplaceStore: marketplaceOrder.marketplaceStore },
|
|
139
|
+
relations: ['pickupTransporter', 'deliveryTransporter']
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
const resp = await LastMileAPI.createShipmentRequest(lmd, {
|
|
143
|
+
orderNo: marketplaceOrder.orderNo,
|
|
144
|
+
clientId: lmd.clientId,
|
|
145
|
+
clientType: lmd.clientType,
|
|
146
|
+
clientName: lmd.clientName,
|
|
147
|
+
transporterId: marketplaceTransporter.pickupTransporter.transporterId,
|
|
148
|
+
pickupName: warehouseContactPoint.name,
|
|
149
|
+
pickupAddress1: warehouseContactPoint.address,
|
|
150
|
+
pickupAddress2: warehouseContactPoint.address2,
|
|
151
|
+
pickupPostcode: warehouseContactPoint.postCode,
|
|
152
|
+
pickupState: warehouseContactPoint.state,
|
|
153
|
+
pickupCity: warehouseContactPoint.city,
|
|
154
|
+
pickupPhone: warehouseContactPoint.phone,
|
|
155
|
+
pickupEmail: warehouseContactPoint.email,
|
|
156
|
+
name: marketplaceOrderShipping?.attentionTo ? marketplaceOrderShipping.attentionTo.trim() : '',
|
|
157
|
+
address1: marketplaceOrderShipping?.address1 ? marketplaceOrderShipping?.address1.trim() : '-',
|
|
158
|
+
address2: marketplaceOrderShipping?.address2 ? marketplaceOrderShipping?.address2.trim() : '-',
|
|
159
|
+
postCode: marketplaceOrderShipping?.postCode ? marketplaceOrderShipping?.postCode.trim() : '',
|
|
160
|
+
city: marketplaceOrderShipping?.city ? marketplaceOrderShipping?.city.trim() : '',
|
|
161
|
+
state: marketplaceOrderShipping?.state ? marketplaceOrderShipping?.state.trim() : '',
|
|
162
|
+
phone: marketplaceOrderShipping.phone1 || '',
|
|
163
|
+
email: marketplaceOrderShipping.email || '',
|
|
164
|
+
attentionTo: marketplaceOrderShipping.attentionTo,
|
|
165
|
+
quantity: marketplaceOrderItems.length
|
|
166
|
+
})
|
|
167
|
+
|
|
168
|
+
const delay = (ms: number) => {
|
|
169
|
+
return new Promise(resolve => setTimeout(resolve, ms))
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (resp.Status === 'SUCCESS') {
|
|
173
|
+
//Success
|
|
174
|
+
let awbObtained = false
|
|
175
|
+
let retry = 0
|
|
176
|
+
while (!awbObtained) {
|
|
177
|
+
const marketplaceOrder2: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
178
|
+
where: { releaseOrderId: releaseGood.id },
|
|
179
|
+
relations: [
|
|
180
|
+
'marketplaceStore',
|
|
181
|
+
'marketplaceOrderItems',
|
|
182
|
+
'marketplaceOrderItems.marketplaceOrderShipping'
|
|
183
|
+
]
|
|
184
|
+
})
|
|
185
|
+
const orderShipping = marketplaceOrder2.marketplaceOrderItems[0].marketplaceOrderShipping
|
|
186
|
+
if (orderShipping?.airwayBill) {
|
|
187
|
+
awbObtained = true
|
|
188
|
+
}
|
|
189
|
+
await delay(5000)
|
|
190
|
+
//Timeout after 15sec
|
|
191
|
+
if (++retry > 3) {
|
|
192
|
+
break
|
|
193
|
+
}
|
|
177
194
|
}
|
|
195
|
+
} else {
|
|
196
|
+
throw resp
|
|
197
|
+
//Failed
|
|
178
198
|
}
|
|
179
|
-
} else {
|
|
180
|
-
throw resp
|
|
181
|
-
//Failed
|
|
182
199
|
}
|
|
183
200
|
}
|
|
184
201
|
}
|
|
@@ -16,7 +16,7 @@ export async function completeUnloadingPartially(
|
|
|
16
16
|
domain: Domain,
|
|
17
17
|
user: User,
|
|
18
18
|
arrivalNoticeNo: string,
|
|
19
|
-
unloadingWorksheetDetail: Partial<WorksheetDetail>
|
|
19
|
+
unloadingWorksheetDetail: Partial<WorksheetDetail>[]
|
|
20
20
|
): Promise<void> {
|
|
21
21
|
const worksheetController: UnloadingWorksheetController = new UnloadingWorksheetController(tx, domain, user)
|
|
22
22
|
await worksheetController.completeUnloadingPartially(arrivalNoticeNo, unloadingWorksheetDetail)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EntityManager } from 'typeorm'
|
|
1
|
+
import { EntityManager, In } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { User } from '@things-factory/auth-base'
|
|
4
4
|
import { Bizplace } from '@things-factory/biz-base'
|
|
@@ -37,7 +37,7 @@ export const completeUnloadingResolver = {
|
|
|
37
37
|
let putawayWorksheet: Worksheet
|
|
38
38
|
|
|
39
39
|
const inventories: Inventory[] = await tx.getRepository(Inventory).find({
|
|
40
|
-
where: { domain, refOrderId: arrivalNotice.id, status: INVENTORY_STATUS.UNLOADED }
|
|
40
|
+
where: { domain, refOrderId: arrivalNotice.id, status: In([INVENTORY_STATUS.UNLOADED, INVENTORY_STATUS.CHECKED]) }
|
|
41
41
|
})
|
|
42
42
|
|
|
43
43
|
// search for any active marketplace connection
|
package/server/routes.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { renderOrientageDO } from './controllers/render-orientage-do'
|
|
|
8
8
|
import { renderOrientageGRN } from './controllers/render-orientage-grn'
|
|
9
9
|
import { renderRODO } from './controllers/render-ro-do'
|
|
10
10
|
import { renderSeebuuGRN } from './controllers/render-seebuu-grn'
|
|
11
|
+
import { renderInvoices } from './controllers/render-invoices'
|
|
11
12
|
|
|
12
13
|
process.on('bootstrap-module-domain-private-route' as any, (app, routes) => {
|
|
13
14
|
routes.get('/view_document_ro_do/:doNo', async (context, next) => {
|
|
@@ -49,4 +50,14 @@ process.on('bootstrap-module-domain-private-route' as any, (app, routes) => {
|
|
|
49
50
|
routes.get('/view_manifest/:manifestNo', async (context, next) => {
|
|
50
51
|
context.body = await renderManifest(context.params, context)
|
|
51
52
|
})
|
|
53
|
+
|
|
54
|
+
routes.post('/view_invoices/:timezoneOffSet', async (context, next) => {
|
|
55
|
+
let req = context.request.body || {}
|
|
56
|
+
let timezoneOffSet = context.params.timezoneOffSet || 0
|
|
57
|
+
|
|
58
|
+
let data = await renderInvoices({ req, timezoneOffSet }, context)
|
|
59
|
+
|
|
60
|
+
context.type = 'application/json'
|
|
61
|
+
context.body = data
|
|
62
|
+
})
|
|
52
63
|
})
|