@things-factory/worksheet-base 4.3.185 → 4.3.187
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/worksheet.js +3 -1
- package/dist-server/constants/worksheet.js.map +1 -1
- package/dist-server/controllers/ecommerce/ecommerce-controller.js +4 -1
- package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -1
- package/dist-server/controllers/ecommerce/sellercraft-controller.js +10 -1
- package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
- package/dist-server/controllers/index.js +1 -0
- package/dist-server/controllers/index.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +19 -4
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/pos/xilnex-controller.js +5 -1
- package/dist-server/controllers/pos/xilnex-controller.js.map +1 -1
- package/dist-server/controllers/replenishment/index.js +18 -0
- package/dist-server/controllers/replenishment/index.js.map +1 -0
- package/dist-server/controllers/replenishment/replenishment-worksheet-controller.js +455 -0
- package/dist-server/controllers/replenishment/replenishment-worksheet-controller.js.map +1 -0
- package/dist-server/controllers/worksheet-controller.js +32 -9
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/entities/index.js +10 -2
- package/dist-server/entities/index.js.map +1 -1
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +15 -1
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -1
- package/dist-server/entities/warehouse-inventory-assignment-ranking.js +37 -0
- package/dist-server/entities/warehouse-inventory-assignment-ranking.js.map +1 -0
- package/dist-server/entities/worksheet.js +13 -9
- package/dist-server/entities/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/cancel-replenishment.js +57 -0
- package/dist-server/graphql/resolvers/worksheet/cancel-replenishment.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js +23 -1
- package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +7 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.js +19 -0
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/index.js +5 -2
- package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +37 -26
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +16 -2
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +290 -264
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/index.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/replenishment-picking.js +12 -0
- package/dist-server/graphql/resolvers/worksheet/picking/replenishment-picking.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +142 -78
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.js +16 -0
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/putaway/index.js +4 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/replenishment-putaway.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/putaway/replenishment-putaway.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.js +16 -0
- package/dist-server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.js +81 -0
- package/dist-server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.js +17 -0
- package/dist-server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/replenishment/index.js +6 -0
- package/dist-server/graphql/resolvers/worksheet/replenishment/index.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/worksheet.js +1 -0
- package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheets.js +28 -2
- package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
- package/dist-server/graphql/types/worksheet/index.js +42 -1
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/replenish-inventory-patch.js +11 -0
- package/dist-server/graphql/types/worksheet/replenish-inventory-patch.js.map +1 -0
- package/dist-server/graphql/types/worksheet/worksheet-info.js +1 -0
- package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet.js +1 -0
- package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -1
- package/dist-server/index.js +1 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/utils/index.js +1 -0
- package/dist-server/utils/index.js.map +1 -1
- package/dist-server/utils/inventory-util.js +2 -0
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/dist-server/utils/lmd-util.js +76 -0
- package/dist-server/utils/lmd-util.js.map +1 -0
- package/dist-server/utils/worksheet-no-generator.js +21 -1
- package/dist-server/utils/worksheet-no-generator.js.map +1 -1
- package/dist-server/utils/worksheet-util.js +3 -0
- package/dist-server/utils/worksheet-util.js.map +1 -1
- package/package.json +13 -13
- package/server/constants/worksheet.ts +3 -1
- package/server/controllers/ecommerce/ecommerce-controller.ts +4 -1
- package/server/controllers/ecommerce/sellercraft-controller.ts +15 -1
- package/server/controllers/index.ts +1 -1
- package/server/controllers/outbound/picking-worksheet-controller.ts +30 -10
- package/server/controllers/pos/xilnex-controller.ts +6 -1
- package/server/controllers/replenishment/index.ts +1 -0
- package/server/controllers/replenishment/replenishment-worksheet-controller.ts +632 -0
- package/server/controllers/worksheet-controller.ts +47 -13
- package/server/entities/index.ts +15 -2
- package/server/entities/warehouse-bizplace-onhand-inventory.ts +13 -1
- package/server/entities/warehouse-inventory-assignment-ranking.ts +19 -0
- package/server/entities/worksheet.ts +5 -1
- package/server/graphql/resolvers/worksheet/cancel-replenishment.ts +69 -0
- package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +22 -1
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +6 -1
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.ts +30 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/index.ts +3 -1
- package/server/graphql/resolvers/worksheet/index.ts +8 -2
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +81 -41
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +16 -2
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +347 -301
- package/server/graphql/resolvers/worksheet/picking/index.ts +3 -1
- package/server/graphql/resolvers/worksheet/picking/replenishment-picking.ts +27 -0
- package/server/graphql/resolvers/worksheet/picking-worksheet.ts +177 -95
- package/server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.ts +25 -0
- package/server/graphql/resolvers/worksheet/putaway/index.ts +7 -1
- package/server/graphql/resolvers/worksheet/putaway/replenishment-putaway.ts +23 -0
- package/server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.ts +22 -0
- package/server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.ts +95 -0
- package/server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.ts +26 -0
- package/server/graphql/resolvers/worksheet/replenishment/index.ts +5 -0
- package/server/graphql/resolvers/worksheet/worksheet.ts +1 -0
- package/server/graphql/resolvers/worksheet/worksheets.ts +38 -3
- package/server/graphql/types/worksheet/index.ts +42 -1
- package/server/graphql/types/worksheet/replenish-inventory-patch.ts +8 -0
- package/server/graphql/types/worksheet/worksheet-info.ts +1 -0
- package/server/graphql/types/worksheet/worksheet.ts +1 -0
- package/server/index.ts +1 -0
- package/server/utils/index.ts +1 -0
- package/server/utils/inventory-util.ts +3 -0
- package/server/utils/lmd-util.ts +86 -0
- package/server/utils/worksheet-no-generator.ts +29 -1
- package/server/utils/worksheet-util.ts +4 -2
|
@@ -21,7 +21,8 @@ import {
|
|
|
21
21
|
OrderPackage,
|
|
22
22
|
OrderPackageItem,
|
|
23
23
|
OrderProduct,
|
|
24
|
-
ReleaseGood
|
|
24
|
+
ReleaseGood,
|
|
25
|
+
Replenishment
|
|
25
26
|
} from '@things-factory/sales-base'
|
|
26
27
|
import { Setting } from '@things-factory/setting-base'
|
|
27
28
|
import { Domain } from '@things-factory/shell'
|
|
@@ -32,11 +33,13 @@ import {
|
|
|
32
33
|
LoadingWorksheetController,
|
|
33
34
|
PackingWorksheetController,
|
|
34
35
|
PickingWorksheetController,
|
|
36
|
+
ReplenishmentWorksheetController,
|
|
35
37
|
SellercraftController
|
|
36
38
|
} from '../../../../controllers/'
|
|
37
39
|
import { EcommerceController } from '../../../../controllers/ecommerce'
|
|
38
40
|
import { WorksheetController } from '../../../../controllers/worksheet-controller'
|
|
39
41
|
import { Worksheet, WorksheetDetail } from '../../../../entities'
|
|
42
|
+
import { createLmdParcel } from '../../../../utils'
|
|
40
43
|
|
|
41
44
|
export const completePickingResolver = {
|
|
42
45
|
async completePicking(_: any, { releaseGoodNo }, context: any) {
|
|
@@ -64,6 +67,11 @@ export async function completePicking(
|
|
|
64
67
|
releaseGoodNo: string
|
|
65
68
|
): Promise<any> {
|
|
66
69
|
const pickingWSCtrl: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
|
|
70
|
+
const replenishmentPickingWSCtrl: ReplenishmentWorksheetController = new ReplenishmentWorksheetController(
|
|
71
|
+
tx,
|
|
72
|
+
domain,
|
|
73
|
+
user
|
|
74
|
+
)
|
|
67
75
|
let releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
|
|
68
76
|
where: { domain, name: releaseGoodNo },
|
|
69
77
|
relations: [
|
|
@@ -72,7 +80,11 @@ export async function completePicking(
|
|
|
72
80
|
'bizplace.domain',
|
|
73
81
|
'bizplace.company',
|
|
74
82
|
'bizplace.company.domain',
|
|
83
|
+
'lastMileDelivery',
|
|
75
84
|
'orderPackages',
|
|
85
|
+
'orderPackages.orderPackageItems',
|
|
86
|
+
'orderPackages.orderPackageItems.orderProduct',
|
|
87
|
+
'orderPackages.orderPackageItems.orderProduct.product',
|
|
76
88
|
'orderProducts',
|
|
77
89
|
'orderProducts.product',
|
|
78
90
|
'orderProducts.productDetail',
|
|
@@ -81,331 +93,354 @@ export async function completePicking(
|
|
|
81
93
|
]
|
|
82
94
|
})
|
|
83
95
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
+
if (releaseGood) {
|
|
97
|
+
const worksheet: Worksheet = await pickingWSCtrl.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.PICKING, [
|
|
98
|
+
'worksheetDetails',
|
|
99
|
+
'worksheetDetails.targetInventory',
|
|
100
|
+
'worksheetDetails.targetInventory.inventory'
|
|
101
|
+
])
|
|
102
|
+
|
|
103
|
+
const warehouseContactPoint: ContactPoint = await tx.getRepository(ContactPoint).findOne({
|
|
104
|
+
where: {
|
|
105
|
+
domain,
|
|
106
|
+
type: 'WAREHOUSE'
|
|
107
|
+
}
|
|
108
|
+
})
|
|
96
109
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
110
|
+
const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
|
|
111
|
+
const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)
|
|
112
|
+
const inventories: Inventory[] = targetInventories.map((ti: OrderInventory) => ti.inventory)
|
|
113
|
+
const pickedTargetInventories: OrderInventory[] = targetInventories.filter(
|
|
114
|
+
targetInventory => targetInventory.status === ORDER_INVENTORY_STATUS.PICKED
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
let foundObsoleteInventories = await pickingWSCtrl.completePicking(releaseGood, worksheet, inventories)
|
|
118
|
+
|
|
119
|
+
if (foundObsoleteInventories?.type) {
|
|
120
|
+
const orderSource: string = releaseGood.source
|
|
121
|
+
switch (orderSource) {
|
|
122
|
+
case ApplicationType.SELLERCRAFT:
|
|
123
|
+
const sellercraft: Sellercraft = await tx
|
|
124
|
+
.getRepository(Sellercraft)
|
|
125
|
+
.findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
126
|
+
|
|
127
|
+
if (sellercraft) {
|
|
128
|
+
const initSCOrderShipment = async sellercraft => {
|
|
129
|
+
await getManager().transaction(async txMgr => {
|
|
130
|
+
const sellercraftCtrl: SellercraftController = new SellercraftController(txMgr, domain, user)
|
|
131
|
+
|
|
132
|
+
if (!releaseGood?.orderPackages?.length && !releaseGood?.marketPackCallSuccess) {
|
|
133
|
+
const orderProducts: OrderProduct[] = await txMgr.getRepository(OrderProduct).find({
|
|
134
|
+
where: { releaseGood },
|
|
135
|
+
relations: ['product', 'product.productDetails']
|
|
136
|
+
})
|
|
137
|
+
await sellercraftCtrl.packOrder(sellercraft, { ...releaseGood, orderProducts })
|
|
138
|
+
}
|
|
103
139
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (foundObsoleteInventories?.type) {
|
|
107
|
-
const orderSource: string = releaseGood.source
|
|
108
|
-
switch (orderSource) {
|
|
109
|
-
case ApplicationType.SELLERCRAFT:
|
|
110
|
-
const sellercraft: Sellercraft = await tx
|
|
111
|
-
.getRepository(Sellercraft)
|
|
112
|
-
.findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
|
|
113
|
-
|
|
114
|
-
if (sellercraft) {
|
|
115
|
-
const initSCOrderShipment = async sellercraft => {
|
|
116
|
-
await getManager().transaction(async txMgr => {
|
|
117
|
-
const sellercraftCtrl: SellercraftController = new SellercraftController(txMgr, domain, user)
|
|
118
|
-
|
|
119
|
-
if (!releaseGood?.orderPackages?.length && !releaseGood?.marketPackCallSuccess) {
|
|
120
|
-
const orderProducts: OrderProduct[] = await txMgr.getRepository(OrderProduct).find({
|
|
121
|
-
where: { releaseGood },
|
|
122
|
-
relations: ['product', 'product.productDetails']
|
|
140
|
+
const rtsTriggerLevel: Setting = await txMgr.getRepository(Setting).findOne({
|
|
141
|
+
where: { domain, category: 'id-rule', name: 'rts-trigger-level' }
|
|
123
142
|
})
|
|
124
|
-
await sellercraftCtrl.packOrder(sellercraft, { ...releaseGood, orderProducts })
|
|
125
|
-
}
|
|
126
143
|
|
|
127
|
-
|
|
128
|
-
|
|
144
|
+
if (rtsTriggerLevel && parseInt(rtsTriggerLevel?.value || 0) == 1) {
|
|
145
|
+
await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
|
|
146
|
+
}
|
|
129
147
|
})
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
})
|
|
148
|
+
}
|
|
149
|
+
// asynchronouly call to initiate sellercraft order shipment/ RTS
|
|
150
|
+
initSCOrderShipment(sellercraft)
|
|
135
151
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
152
|
+
break
|
|
153
|
+
|
|
154
|
+
case ApplicationType.MMS:
|
|
155
|
+
const companyDomain: Domain = releaseGood.bizplace.company.domain
|
|
156
|
+
let marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
157
|
+
where: { orderNo: releaseGood.refNo, domain: companyDomain },
|
|
158
|
+
relations: [
|
|
159
|
+
'marketplaceStore',
|
|
160
|
+
'marketplaceStore.marketplaceDistributors',
|
|
161
|
+
'marketplaceOrderItems',
|
|
162
|
+
'marketplaceOrderItems.marketplaceOrderShippingItems',
|
|
163
|
+
'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping'
|
|
164
|
+
]
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
if (marketplaceOrder) {
|
|
168
|
+
const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
|
|
169
|
+
const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
|
|
170
|
+
let eTraxOption: boolean
|
|
171
|
+
|
|
172
|
+
if (marketplaceStore?.isAutoUpdateShipment) {
|
|
173
|
+
await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PACKING)
|
|
174
|
+
|
|
175
|
+
await ecommerceCtrl.createOrderShip(releaseGood, marketplaceStore, marketplaceOrder, companyDomain)
|
|
176
|
+
}
|
|
158
177
|
|
|
159
|
-
|
|
160
|
-
|
|
178
|
+
if (!marketplaceOrder) {
|
|
179
|
+
throw new Error('Failed to find ecommerce order, kindly contact our support team regarding this issue')
|
|
180
|
+
}
|
|
161
181
|
|
|
162
|
-
|
|
163
|
-
|
|
182
|
+
eTraxOption = marketplaceOrder?.marketplaceStore.eTrax
|
|
183
|
+
|
|
184
|
+
// if eTrax option is true
|
|
185
|
+
if (eTraxOption) {
|
|
186
|
+
const marketplaceOrderItems: MarketplaceOrderItem[] = marketplaceOrder.marketplaceOrderItems
|
|
187
|
+
|
|
188
|
+
// access every marketplaceOrderItems for shipping information you need
|
|
189
|
+
// trigger the controller from integration-lmd that trigger the API, build the parameters needed
|
|
190
|
+
// for etrax didn't support multi awb per order
|
|
191
|
+
const marketplaceOrderShippingItems: MarketplaceOrderShippingItem[] =
|
|
192
|
+
marketplaceOrderItems[0].marketplaceOrderShippingItems
|
|
193
|
+
const marketplaceOrderShipping: MarketplaceOrderShipping =
|
|
194
|
+
marketplaceOrderShippingItems[0].marketplaceOrderShipping
|
|
195
|
+
const lmd: LastMileDelivery = await tx.getRepository(LastMileDelivery).findOne({
|
|
196
|
+
where: {
|
|
197
|
+
domain,
|
|
198
|
+
platform: 'eTrax'
|
|
199
|
+
}
|
|
200
|
+
})
|
|
164
201
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
202
|
+
//Get which transporter to use
|
|
203
|
+
const marketplaceTransporter: MarketplaceTransporter = await tx
|
|
204
|
+
.getRepository(MarketplaceTransporter)
|
|
205
|
+
.findOne({
|
|
206
|
+
where: { marketplaceStore: marketplaceOrder.marketplaceStore },
|
|
207
|
+
relations: ['pickupTransporter', 'deliveryTransporter']
|
|
208
|
+
})
|
|
168
209
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
where: { marketplaceStore: marketplaceOrder.marketplaceStore },
|
|
194
|
-
relations: ['pickupTransporter', 'deliveryTransporter']
|
|
210
|
+
const resp = await LastMileAPI.createShipmentRequest(lmd, {
|
|
211
|
+
orderNo: marketplaceOrder.orderNo,
|
|
212
|
+
clientId: lmd.clientId,
|
|
213
|
+
clientType: lmd.clientType,
|
|
214
|
+
clientName: lmd.clientName,
|
|
215
|
+
transporterId: marketplaceTransporter.pickupTransporter.transporterId,
|
|
216
|
+
pickupName: warehouseContactPoint.name,
|
|
217
|
+
pickupAddress1: warehouseContactPoint.address,
|
|
218
|
+
pickupAddress2: warehouseContactPoint.address2,
|
|
219
|
+
pickupPostcode: warehouseContactPoint.postCode,
|
|
220
|
+
pickupState: warehouseContactPoint.state,
|
|
221
|
+
pickupCity: warehouseContactPoint.city,
|
|
222
|
+
pickupPhone: warehouseContactPoint.phone,
|
|
223
|
+
pickupEmail: warehouseContactPoint.email,
|
|
224
|
+
name: marketplaceOrderShipping?.attentionTo ? marketplaceOrderShipping.attentionTo.trim() : '',
|
|
225
|
+
address1: marketplaceOrderShipping?.address1 ? marketplaceOrderShipping?.address1.trim() : '-',
|
|
226
|
+
address2: marketplaceOrderShipping?.address2 ? marketplaceOrderShipping?.address2.trim() : '-',
|
|
227
|
+
postCode: marketplaceOrderShipping?.postCode ? marketplaceOrderShipping?.postCode.trim() : '',
|
|
228
|
+
city: marketplaceOrderShipping?.city ? marketplaceOrderShipping?.city.trim() : '',
|
|
229
|
+
state: marketplaceOrderShipping?.state ? marketplaceOrderShipping?.state.trim() : '',
|
|
230
|
+
phone: marketplaceOrderShipping.phone1 || '',
|
|
231
|
+
email: marketplaceOrderShipping.email || '',
|
|
232
|
+
attentionTo: marketplaceOrderShipping.attentionTo,
|
|
233
|
+
quantity: marketplaceOrderItems.length
|
|
195
234
|
})
|
|
196
235
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
clientType: lmd.clientType,
|
|
201
|
-
clientName: lmd.clientName,
|
|
202
|
-
transporterId: marketplaceTransporter.pickupTransporter.transporterId,
|
|
203
|
-
pickupName: warehouseContactPoint.name,
|
|
204
|
-
pickupAddress1: warehouseContactPoint.address,
|
|
205
|
-
pickupAddress2: warehouseContactPoint.address2,
|
|
206
|
-
pickupPostcode: warehouseContactPoint.postCode,
|
|
207
|
-
pickupState: warehouseContactPoint.state,
|
|
208
|
-
pickupCity: warehouseContactPoint.city,
|
|
209
|
-
pickupPhone: warehouseContactPoint.phone,
|
|
210
|
-
pickupEmail: warehouseContactPoint.email,
|
|
211
|
-
name: marketplaceOrderShipping?.attentionTo ? marketplaceOrderShipping.attentionTo.trim() : '',
|
|
212
|
-
address1: marketplaceOrderShipping?.address1 ? marketplaceOrderShipping?.address1.trim() : '-',
|
|
213
|
-
address2: marketplaceOrderShipping?.address2 ? marketplaceOrderShipping?.address2.trim() : '-',
|
|
214
|
-
postCode: marketplaceOrderShipping?.postCode ? marketplaceOrderShipping?.postCode.trim() : '',
|
|
215
|
-
city: marketplaceOrderShipping?.city ? marketplaceOrderShipping?.city.trim() : '',
|
|
216
|
-
state: marketplaceOrderShipping?.state ? marketplaceOrderShipping?.state.trim() : '',
|
|
217
|
-
phone: marketplaceOrderShipping.phone1 || '',
|
|
218
|
-
email: marketplaceOrderShipping.email || '',
|
|
219
|
-
attentionTo: marketplaceOrderShipping.attentionTo,
|
|
220
|
-
quantity: marketplaceOrderItems.length
|
|
221
|
-
})
|
|
222
|
-
|
|
223
|
-
const delay = (ms: number) => {
|
|
224
|
-
return new Promise(resolve => setTimeout(resolve, ms))
|
|
225
|
-
}
|
|
236
|
+
const delay = (ms: number) => {
|
|
237
|
+
return new Promise(resolve => setTimeout(resolve, ms))
|
|
238
|
+
}
|
|
226
239
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
240
|
+
if (resp.Status === 'SUCCESS') {
|
|
241
|
+
//Success
|
|
242
|
+
let awbObtained = false
|
|
243
|
+
let retry = 0
|
|
244
|
+
while (!awbObtained) {
|
|
245
|
+
const marketplaceOrder2: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
|
|
246
|
+
where: { releaseOrderId: releaseGood.id },
|
|
247
|
+
relations: [
|
|
248
|
+
'marketplaceStore',
|
|
249
|
+
'marketplaceOrderItems',
|
|
250
|
+
'marketplaceOrderItems.marketplaceOrderShippingItems',
|
|
251
|
+
'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping'
|
|
252
|
+
]
|
|
253
|
+
})
|
|
254
|
+
const orderShipping =
|
|
255
|
+
marketplaceOrder2.marketplaceOrderItems[0].marketplaceOrderShippingItems[0].marketplaceOrderShipping
|
|
256
|
+
if (orderShipping?.airwayBill) {
|
|
257
|
+
awbObtained = true
|
|
258
|
+
}
|
|
259
|
+
await delay(5000)
|
|
260
|
+
//Timeout after 15sec
|
|
261
|
+
if (++retry > 3) {
|
|
262
|
+
break
|
|
263
|
+
}
|
|
250
264
|
}
|
|
265
|
+
} else {
|
|
266
|
+
if (resp?.AWBurl && resp?.TrackingNo)
|
|
267
|
+
await tx
|
|
268
|
+
.getRepository(MarketplaceOrderShipping)
|
|
269
|
+
.update(
|
|
270
|
+
{ id: marketplaceOrderShipping.id },
|
|
271
|
+
{ airwayBill: resp.AWBurl, trackingNo: resp.TrackingNo }
|
|
272
|
+
)
|
|
273
|
+
else throw resp
|
|
251
274
|
}
|
|
252
|
-
} else {
|
|
253
|
-
if (resp?.AWBurl && resp?.TrackingNo)
|
|
254
|
-
await tx
|
|
255
|
-
.getRepository(MarketplaceOrderShipping)
|
|
256
|
-
.update({ id: marketplaceOrderShipping.id }, { airwayBill: resp.AWBurl, trackingNo: resp.TrackingNo })
|
|
257
|
-
else throw resp
|
|
258
275
|
}
|
|
259
|
-
}
|
|
260
276
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
status: ORDER_STATUS.PROCESSING,
|
|
273
|
-
releaseGood,
|
|
274
|
-
domain: releaseGood.domain,
|
|
275
|
-
bizplace: releaseGood.bizplace,
|
|
276
|
-
creator: releaseGood.creator,
|
|
277
|
-
updater: releaseGood.updater
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
let savedOrderPackage: OrderPackage = await tx.getRepository(OrderPackage).save(orderPackage)
|
|
281
|
-
const orderPackageItems: OrderPackageItem[] = releaseGood.orderProducts.map(op => {
|
|
282
|
-
return {
|
|
283
|
-
name: OrderNoGenerator.orderPackageItem(),
|
|
284
|
-
orderProduct: op,
|
|
277
|
+
await ecommerceCtrl.createOrderPackage(tx, marketplaceOrder, companyDomain, marketplaceStore, releaseGood)
|
|
278
|
+
}
|
|
279
|
+
break
|
|
280
|
+
|
|
281
|
+
default:
|
|
282
|
+
let orderPackage: OrderPackage = {
|
|
283
|
+
name: OrderNoGenerator.orderPackage(),
|
|
284
|
+
packageId: null,
|
|
285
|
+
trackingNo: null,
|
|
286
|
+
transporter: null,
|
|
287
|
+
airwayBill: null,
|
|
285
288
|
status: ORDER_STATUS.PROCESSING,
|
|
286
|
-
|
|
287
|
-
orderPackage: savedOrderPackage,
|
|
289
|
+
releaseGood,
|
|
288
290
|
domain: releaseGood.domain,
|
|
289
291
|
bizplace: releaseGood.bizplace,
|
|
290
292
|
creator: releaseGood.creator,
|
|
291
293
|
updater: releaseGood.updater
|
|
292
294
|
}
|
|
293
|
-
})
|
|
294
295
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
296
|
+
let savedOrderPackage: OrderPackage = await tx.getRepository(OrderPackage).save(orderPackage)
|
|
297
|
+
const orderPackageItems: OrderPackageItem[] = releaseGood.orderProducts.map(op => {
|
|
298
|
+
return {
|
|
299
|
+
name: OrderNoGenerator.orderPackageItem(),
|
|
300
|
+
orderProduct: op,
|
|
301
|
+
status: ORDER_STATUS.PROCESSING,
|
|
302
|
+
releaseQty: op.releaseQty,
|
|
303
|
+
orderPackage: savedOrderPackage,
|
|
304
|
+
domain: releaseGood.domain,
|
|
305
|
+
bizplace: releaseGood.bizplace,
|
|
306
|
+
creator: releaseGood.creator,
|
|
307
|
+
updater: releaseGood.updater
|
|
308
|
+
}
|
|
309
|
+
})
|
|
310
|
+
await tx.getRepository(OrderPackageItem).save(orderPackageItems)
|
|
311
|
+
orderPackage.orderPackageItems = orderPackageItems
|
|
312
|
+
releaseGood.orderPackages = [orderPackage]
|
|
313
|
+
break
|
|
314
|
+
}
|
|
298
315
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
316
|
+
const account: Account = await tx
|
|
317
|
+
.getRepository(Account)
|
|
318
|
+
.findOne({ where: { domain: releaseGood.bizplace.domain, status: 'active' }, relations: ['domain'] })
|
|
319
|
+
|
|
320
|
+
// Xilnex Create Sales Order and Post Sales Order to Sales Invoice
|
|
321
|
+
const createSalesOrder = async (account, tx) => {
|
|
322
|
+
if (account) {
|
|
323
|
+
if (account.platform == 'xilnex') {
|
|
324
|
+
let integrationInfo: any = {
|
|
325
|
+
xilnex: {
|
|
326
|
+
accountId: account.accountId,
|
|
327
|
+
startTime: new Date()
|
|
328
|
+
}
|
|
311
329
|
}
|
|
312
|
-
}
|
|
313
330
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
331
|
+
try {
|
|
332
|
+
const salesOrder: any = await AccountingAPI.createSalesOrder(account, {
|
|
333
|
+
releaseGood,
|
|
334
|
+
orderProducts: releaseGood.orderProducts
|
|
335
|
+
})
|
|
319
336
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
337
|
+
if (salesOrder) {
|
|
338
|
+
integrationInfo.xilnex = {
|
|
339
|
+
...integrationInfo.xilnex,
|
|
340
|
+
salesOrderId: salesOrder.id,
|
|
341
|
+
endTime: new Date()
|
|
342
|
+
}
|
|
326
343
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
344
|
+
try {
|
|
345
|
+
const salesInvoice: any = await AccountingAPI.postSalesOrderToSalesInvoice(account, {
|
|
346
|
+
orderId: salesOrder?.id || null
|
|
347
|
+
})
|
|
348
|
+
|
|
349
|
+
if (salesInvoice) {
|
|
350
|
+
integrationInfo.xilnex = {
|
|
351
|
+
...integrationInfo.xilnex,
|
|
352
|
+
salesInvoiceId: salesInvoice.salesId,
|
|
353
|
+
endTime: new Date()
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
const salesOrderItems: any = salesInvoice.sale.items
|
|
357
|
+
await Promise.all(
|
|
358
|
+
releaseGood.orderProducts.map(async op => {
|
|
359
|
+
const matchedProduct: any = salesOrderItems.find(soi => soi.itemId == op.productDetail.refCode)
|
|
360
|
+
if (matchedProduct) {
|
|
361
|
+
await tx.getRepository(OrderProduct).update({ id: op.id }, { refItemId: matchedProduct.id })
|
|
362
|
+
}
|
|
363
|
+
})
|
|
364
|
+
)
|
|
331
365
|
|
|
332
|
-
|
|
366
|
+
await tx
|
|
367
|
+
.getRepository(ReleaseGood)
|
|
368
|
+
.update(
|
|
369
|
+
{ id: releaseGood.id },
|
|
370
|
+
{ collectionOrderNo: salesInvoice.salesId, integrationInfo, updater: releaseGood.updater }
|
|
371
|
+
)
|
|
372
|
+
}
|
|
373
|
+
} catch (error) {
|
|
333
374
|
integrationInfo.xilnex = {
|
|
334
375
|
...integrationInfo.xilnex,
|
|
335
|
-
salesInvoiceId: salesInvoice.salesId,
|
|
336
376
|
endTime: new Date()
|
|
337
377
|
}
|
|
338
378
|
|
|
339
|
-
const salesOrderItems: any = salesInvoice.sale.items
|
|
340
|
-
await Promise.all(
|
|
341
|
-
releaseGood.orderProducts.map(async op => {
|
|
342
|
-
const matchedProduct: any = salesOrderItems.find(soi => soi.itemId == op.productDetail.refCode)
|
|
343
|
-
if (matchedProduct) {
|
|
344
|
-
await tx.getRepository(OrderProduct).update({ id: op.id }, { refItemId: matchedProduct.id })
|
|
345
|
-
}
|
|
346
|
-
})
|
|
347
|
-
)
|
|
348
|
-
|
|
349
379
|
await tx
|
|
350
380
|
.getRepository(ReleaseGood)
|
|
351
381
|
.update(
|
|
352
382
|
{ id: releaseGood.id },
|
|
353
|
-
{
|
|
383
|
+
{ integrationInfo, integrationFail: true, updater: releaseGood.updater }
|
|
354
384
|
)
|
|
385
|
+
logger.error(`complete-picking[createSalesInvoice][${releaseGood.refNo}]: ${error}`)
|
|
355
386
|
}
|
|
356
|
-
} catch (error) {
|
|
357
|
-
integrationInfo.xilnex = {
|
|
358
|
-
...integrationInfo.xilnex,
|
|
359
|
-
endTime: new Date()
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
await tx
|
|
363
|
-
.getRepository(ReleaseGood)
|
|
364
|
-
.update(
|
|
365
|
-
{ id: releaseGood.id },
|
|
366
|
-
{ integrationInfo, integrationFail: true, updater: releaseGood.updater }
|
|
367
|
-
)
|
|
368
|
-
logger.error(`complete-picking[createSalesInvoice][${releaseGood.refNo}]: ${error}`)
|
|
369
387
|
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
}
|
|
388
|
+
} catch (error) {
|
|
389
|
+
integrationInfo.xilnex = {
|
|
390
|
+
...integrationInfo.xilnex,
|
|
391
|
+
endTime: new Date()
|
|
392
|
+
}
|
|
376
393
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
394
|
+
await tx
|
|
395
|
+
.getRepository(ReleaseGood)
|
|
396
|
+
.update(
|
|
397
|
+
{ id: releaseGood.id },
|
|
398
|
+
{ integrationInfo, integrationFail: true, updater: releaseGood.updater }
|
|
399
|
+
)
|
|
400
|
+
logger.error(`complete-picking[createSalesOrder][${releaseGood.refNo}]: ${error}`)
|
|
401
|
+
}
|
|
381
402
|
}
|
|
382
403
|
}
|
|
383
404
|
}
|
|
384
|
-
}
|
|
385
405
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
406
|
+
if (releaseGood.type == 'b2c') {
|
|
407
|
+
await createSalesOrder(account, tx)
|
|
408
|
+
}
|
|
389
409
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
410
|
+
if (releaseGood.packingOption) {
|
|
411
|
+
const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
|
|
412
|
+
await packingWSCtrl.generatePackingWorksheet(releaseGoodNo)
|
|
413
|
+
} else {
|
|
414
|
+
// Find Existing Loading Worksheet if any
|
|
415
|
+
let existLoadingWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
|
|
416
|
+
where: {
|
|
417
|
+
releaseGood,
|
|
418
|
+
type: WORKSHEET_TYPE.LOADING,
|
|
419
|
+
status: WORKSHEET_STATUS.DEACTIVATED
|
|
420
|
+
}
|
|
421
|
+
})
|
|
402
422
|
|
|
403
|
-
|
|
404
|
-
|
|
423
|
+
if (!existLoadingWorksheet && !releaseGood.courierOption && !releaseGood.packingOption) {
|
|
424
|
+
if (pickedTargetInventories.length > 0) {
|
|
425
|
+
const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
|
|
426
|
+
let loadingWorksheet: Worksheet = await loadingWSCtrl.generateLoadingWorksheet(
|
|
427
|
+
releaseGoodNo,
|
|
428
|
+
pickedTargetInventories
|
|
429
|
+
)
|
|
430
|
+
|
|
431
|
+
if (!loadingWorksheet.worksheetDetails?.length) {
|
|
432
|
+
loadingWorksheet = await pickingWSCtrl.findWorksheetById(loadingWorksheet.id)
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
const loadingWorksheetDetails: WorksheetDetail[] = loadingWorksheet.worksheetDetails
|
|
436
|
+
await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails)
|
|
437
|
+
}
|
|
438
|
+
} else {
|
|
405
439
|
const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
|
|
406
|
-
let loadingWorksheet: Worksheet = await loadingWSCtrl.
|
|
440
|
+
let loadingWorksheet: Worksheet = await loadingWSCtrl.updateLoadingWorksheet(
|
|
407
441
|
releaseGoodNo,
|
|
408
|
-
pickedTargetInventories
|
|
442
|
+
pickedTargetInventories,
|
|
443
|
+
existLoadingWorksheet
|
|
409
444
|
)
|
|
410
445
|
|
|
411
446
|
if (!loadingWorksheet.worksheetDetails?.length) {
|
|
@@ -415,41 +450,37 @@ export async function completePicking(
|
|
|
415
450
|
const loadingWorksheetDetails: WorksheetDetail[] = loadingWorksheet.worksheetDetails
|
|
416
451
|
await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails)
|
|
417
452
|
}
|
|
418
|
-
}
|
|
419
|
-
const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
|
|
420
|
-
let loadingWorksheet: Worksheet = await loadingWSCtrl.updateLoadingWorksheet(
|
|
421
|
-
releaseGoodNo,
|
|
422
|
-
pickedTargetInventories,
|
|
423
|
-
existLoadingWorksheet
|
|
424
|
-
)
|
|
425
|
-
|
|
426
|
-
if (!loadingWorksheet.worksheetDetails?.length) {
|
|
427
|
-
loadingWorksheet = await pickingWSCtrl.findWorksheetById(loadingWorksheet.id)
|
|
428
|
-
}
|
|
453
|
+
}
|
|
429
454
|
|
|
430
|
-
|
|
431
|
-
|
|
455
|
+
// trigger LMD API to create parcel
|
|
456
|
+
if (
|
|
457
|
+
releaseGood?.orderPackages?.length &&
|
|
458
|
+
releaseGood.lmdOption &&
|
|
459
|
+
releaseGood.lastMileDelivery &&
|
|
460
|
+
releaseGood?.orderPackages?.some(op => op.parcelId == null)
|
|
461
|
+
) {
|
|
462
|
+
await createLmdParcel([releaseGood], tx)
|
|
432
463
|
}
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
464
|
+
//
|
|
465
|
+
} else {
|
|
466
|
+
//update inventories obsolete to true
|
|
467
|
+
await tx.getRepository(Inventory).update({ id: In(foundObsoleteInventories) }, { obsolete: true })
|
|
437
468
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
469
|
+
foundObsoleteInventories = foundObsoleteInventories
|
|
470
|
+
.map(inv => {
|
|
471
|
+
return "'" + inv.trim() + "'"
|
|
472
|
+
})
|
|
473
|
+
.join(',')
|
|
443
474
|
|
|
444
|
-
|
|
445
|
-
|
|
475
|
+
//update any orders that is assigned with obsolete inventories
|
|
476
|
+
await tx.getRepository(ReleaseGood).query(`
|
|
446
477
|
update release_goods rg set status = 'OBSOLETE'
|
|
447
478
|
from order_inventories oi
|
|
448
479
|
where oi.release_good_id = rg.id
|
|
449
480
|
and oi.inventory_id in (${foundObsoleteInventories})
|
|
450
481
|
and rg.status in ('PICKING', 'PENDING_WORKSHEET', 'READY_TO_PICK')`)
|
|
451
482
|
|
|
452
|
-
|
|
483
|
+
await tx.getRepository(Worksheet).query(`
|
|
453
484
|
update worksheets w set status = 'DEACTIVATED', updater_id = '${user.id}', assignee_id = null
|
|
454
485
|
from worksheet_details wd
|
|
455
486
|
inner join order_inventories oi on oi.id = wd.target_inventory_id
|
|
@@ -457,6 +488,21 @@ export async function completePicking(
|
|
|
457
488
|
and oi.inventory_id in (${foundObsoleteInventories})
|
|
458
489
|
`)
|
|
459
490
|
|
|
460
|
-
|
|
491
|
+
return true
|
|
492
|
+
}
|
|
493
|
+
} else {
|
|
494
|
+
let replenishment: Replenishment = await tx.getRepository(Replenishment).findOne({
|
|
495
|
+
where: { domain, name: releaseGoodNo }
|
|
496
|
+
})
|
|
497
|
+
|
|
498
|
+
const worksheet: Worksheet = await pickingWSCtrl.findWorksheetByRefOrder(
|
|
499
|
+
replenishment,
|
|
500
|
+
WORKSHEET_TYPE.PICKING_REPLENISHMENT,
|
|
501
|
+
['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']
|
|
502
|
+
)
|
|
503
|
+
|
|
504
|
+
await replenishmentPickingWSCtrl.completeReplenishmentPicking(replenishment, worksheet)
|
|
505
|
+
|
|
506
|
+
await replenishmentPickingWSCtrl.generatePutawayReplenishmentWorksheet(releaseGoodNo)
|
|
461
507
|
}
|
|
462
508
|
}
|