@things-factory/worksheet-base 4.3.247 → 4.3.249
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-server/controllers/inbound/putaway-worksheet-controller.js +2 -1
- package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +239 -27
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +6 -4
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheet.js +15 -8
- package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +1 -0
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -1
- package/dist-server/utils/inventory-util.js +6 -6
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +18 -18
- package/server/controllers/inbound/putaway-worksheet-controller.ts +2 -1
- package/server/controllers/outbound/picking-worksheet-controller.ts +326 -36
- package/server/entities/warehouse-bizplace-onhand-inventory.ts +6 -4
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +46 -62
- package/server/graphql/resolvers/worksheet/worksheet.ts +11 -4
- package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +1 -0
- package/server/utils/inventory-util.ts +6 -6
|
@@ -198,11 +198,11 @@ async function isInventoryExpiring(inventory) {
|
|
|
198
198
|
product = inventory.product;
|
|
199
199
|
}
|
|
200
200
|
const { expirationDate } = inventory;
|
|
201
|
-
const { isRequiredCheckExpiry,
|
|
202
|
-
if (!isRequiredCheckExpiry || !
|
|
201
|
+
const { isRequiredCheckExpiry, minInboundShelfLife } = product;
|
|
202
|
+
if (!isRequiredCheckExpiry || !minInboundShelfLife || expirationDate <= 0)
|
|
203
203
|
return false;
|
|
204
204
|
let date = new Date();
|
|
205
|
-
const acceptBefore = new Date(date.setDate(date.getDate() +
|
|
205
|
+
const acceptBefore = new Date(date.setDate(date.getDate() + minInboundShelfLife));
|
|
206
206
|
const expiryDate = new Date(expirationDate);
|
|
207
207
|
return expiryDate < acceptBefore;
|
|
208
208
|
}
|
|
@@ -220,11 +220,11 @@ async function isInventoryObsolete(inventories) {
|
|
|
220
220
|
product = inventory.product;
|
|
221
221
|
}
|
|
222
222
|
let { expirationDate } = inventories[i];
|
|
223
|
-
const {
|
|
224
|
-
if (
|
|
223
|
+
const { minOutboundShelfLife } = product;
|
|
224
|
+
if (minOutboundShelfLife && expirationDate) {
|
|
225
225
|
let date = new Date();
|
|
226
226
|
expirationDate = new Date(expirationDate);
|
|
227
|
-
const releaseBefore = new Date(expirationDate.setDate(expirationDate.getDate() -
|
|
227
|
+
const releaseBefore = new Date(expirationDate.setDate(expirationDate.getDate() - minOutboundShelfLife));
|
|
228
228
|
if (date > releaseBefore) {
|
|
229
229
|
obsoleteInventories.push(inventories[i].id);
|
|
230
230
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inventory-util.js","sourceRoot":"","sources":["../../server/utils/inventory-util.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"inventory-util.js","sourceRoot":"","sources":["../../server/utils/inventory-util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/worksheet-base",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.249",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -23,25 +23,25 @@
|
|
|
23
23
|
"migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@things-factory/auth-base": "^4.3.
|
|
27
|
-
"@things-factory/biz-base": "^4.3.
|
|
26
|
+
"@things-factory/auth-base": "^4.3.248",
|
|
27
|
+
"@things-factory/biz-base": "^4.3.248",
|
|
28
28
|
"@things-factory/document-template-base": "^4.3.237",
|
|
29
|
-
"@things-factory/id-rule-base": "^4.3.
|
|
30
|
-
"@things-factory/integration-accounting": "^4.3.
|
|
31
|
-
"@things-factory/integration-base": "^4.3.
|
|
32
|
-
"@things-factory/integration-lmd": "^4.3.
|
|
33
|
-
"@things-factory/integration-marketplace": "^4.3.
|
|
34
|
-
"@things-factory/integration-powrup": "^4.3.
|
|
35
|
-
"@things-factory/integration-sellercraft": "^4.3.
|
|
36
|
-
"@things-factory/integration-sftp": "^4.3.
|
|
37
|
-
"@things-factory/marketplace-base": "^4.3.
|
|
38
|
-
"@things-factory/notification": "^4.3.
|
|
39
|
-
"@things-factory/sales-base": "^4.3.
|
|
40
|
-
"@things-factory/setting-base": "^4.3.
|
|
29
|
+
"@things-factory/id-rule-base": "^4.3.248",
|
|
30
|
+
"@things-factory/integration-accounting": "^4.3.248",
|
|
31
|
+
"@things-factory/integration-base": "^4.3.248",
|
|
32
|
+
"@things-factory/integration-lmd": "^4.3.248",
|
|
33
|
+
"@things-factory/integration-marketplace": "^4.3.248",
|
|
34
|
+
"@things-factory/integration-powrup": "^4.3.248",
|
|
35
|
+
"@things-factory/integration-sellercraft": "^4.3.248",
|
|
36
|
+
"@things-factory/integration-sftp": "^4.3.248",
|
|
37
|
+
"@things-factory/marketplace-base": "^4.3.248",
|
|
38
|
+
"@things-factory/notification": "^4.3.248",
|
|
39
|
+
"@things-factory/sales-base": "^4.3.249",
|
|
40
|
+
"@things-factory/setting-base": "^4.3.248",
|
|
41
41
|
"@things-factory/shell": "^4.3.237",
|
|
42
|
-
"@things-factory/transport-base": "^4.3.
|
|
43
|
-
"@things-factory/warehouse-base": "^4.3.
|
|
42
|
+
"@things-factory/transport-base": "^4.3.248",
|
|
43
|
+
"@things-factory/warehouse-base": "^4.3.249",
|
|
44
44
|
"uuid": "^9.0.0"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "ebd830d0d88c40b83c406c8f7f663c8fa345b2d5"
|
|
47
47
|
}
|
|
@@ -284,7 +284,8 @@ export class PutawayWorksheetController extends VasWorksheetController {
|
|
|
284
284
|
LOCATION_TYPE.BIN,
|
|
285
285
|
LOCATION_TYPE.QUARANTINE,
|
|
286
286
|
LOCATION_TYPE.RESERVE,
|
|
287
|
-
LOCATION_TYPE.STORAGE
|
|
287
|
+
LOCATION_TYPE.STORAGE,
|
|
288
|
+
LOCATION_TYPE.DAMAGE
|
|
288
289
|
])
|
|
289
290
|
},
|
|
290
291
|
relations: ['warehouse']
|
|
@@ -7,6 +7,7 @@ import { generateId } from '@things-factory/id-rule-base'
|
|
|
7
7
|
import { Powrup } from '@things-factory/integration-powrup'
|
|
8
8
|
import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
|
|
9
9
|
import { Product, ProductBarcode, ProductDetail } from '@things-factory/product-base'
|
|
10
|
+
|
|
10
11
|
import {
|
|
11
12
|
GenerateBatchPickInfo,
|
|
12
13
|
ORDER_INVENTORY_STATUS,
|
|
@@ -20,6 +21,8 @@ import {
|
|
|
20
21
|
OrderToteSeal,
|
|
21
22
|
OrderVas,
|
|
22
23
|
ReleaseGood,
|
|
24
|
+
InventoryUtil,
|
|
25
|
+
ORDER_TYPES,
|
|
23
26
|
PowrupController
|
|
24
27
|
} from '@things-factory/sales-base'
|
|
25
28
|
import { Setting } from '@things-factory/setting-base'
|
|
@@ -34,13 +37,14 @@ import {
|
|
|
34
37
|
Location,
|
|
35
38
|
LOCATION_TYPE,
|
|
36
39
|
Tote,
|
|
37
|
-
TOTE_STATUS
|
|
40
|
+
TOTE_STATUS,
|
|
41
|
+
ProductDetailStock
|
|
38
42
|
} from '@things-factory/warehouse-base'
|
|
39
43
|
|
|
40
44
|
import { TASK_NUMBER_RULE_TYPE, TASK_NUMBER_SETTING_KEY, WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
|
|
41
45
|
import { SellercraftController } from '../../controllers'
|
|
42
46
|
import { Worksheet, WorksheetDetail } from '../../entities'
|
|
43
|
-
import { isInventoryObsolete, WorksheetNoGenerator } from '../../utils'
|
|
47
|
+
import { isInventoryObsolete, WorksheetNoGenerator, inventoriesByStrategy } from '../../utils'
|
|
44
48
|
import { VasWorksheetController } from '../vas/vas-worksheet-controller'
|
|
45
49
|
|
|
46
50
|
export class PickingWorksheetController extends VasWorksheetController {
|
|
@@ -113,6 +117,10 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
113
117
|
})
|
|
114
118
|
})
|
|
115
119
|
|
|
120
|
+
const worksheetPickingAssignment: Setting = await this.trxMgr.getRepository(Setting).findOne({
|
|
121
|
+
where: { domain: this.domain, category: 'id-rule', name: 'enable-worksheet-picking-activation-assignment' }
|
|
122
|
+
})
|
|
123
|
+
|
|
116
124
|
const worksheetSetting: Setting = await this.trxMgr.getRepository(Setting).findOne({
|
|
117
125
|
where: {
|
|
118
126
|
domain: this.domain,
|
|
@@ -136,24 +144,42 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
136
144
|
worksheet.updater = this.user
|
|
137
145
|
worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)
|
|
138
146
|
|
|
139
|
-
if (orderInventories
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
147
|
+
if (orderInventories?.length > 0) {
|
|
148
|
+
if (orderInventories.some((oi: OrderInventory) => oi.inventory?.id)) {
|
|
149
|
+
const hasInventoryOIs: OrderInventory[] = orderInventories.filter(
|
|
150
|
+
(orderInventory: OrderInventory) => orderInventory.inventory !== null
|
|
151
|
+
)
|
|
143
152
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
153
|
+
worksheet.worksheetDetails = await this.createWorksheetDetails(
|
|
154
|
+
worksheet,
|
|
155
|
+
WORKSHEET_TYPE.BATCH_PICKING,
|
|
156
|
+
hasInventoryOIs
|
|
157
|
+
)
|
|
158
|
+
}
|
|
150
159
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
160
|
+
orderInventories.forEach((oi: OrderInventory) => {
|
|
161
|
+
oi.refWorksheetId = worksheet.id
|
|
162
|
+
oi.status = oi.inventory?.id ? ORDER_INVENTORY_STATUS.READY_TO_PICK : ORDER_INVENTORY_STATUS.PENDING_SPLIT
|
|
163
|
+
oi.updater = this.user
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
await this.updateOrderTargets(orderInventories)
|
|
167
|
+
} else {
|
|
168
|
+
let orderProducts: OrderProduct[] = []
|
|
169
|
+
releaseGoods.map((releaseGood: ReleaseGood) => {
|
|
170
|
+
const foundOPs: OrderProduct[] = releaseGood.orderProducts
|
|
171
|
+
foundOPs.map((op: OrderProduct) => {
|
|
172
|
+
orderProducts.push(op)
|
|
173
|
+
})
|
|
174
|
+
})
|
|
175
|
+
if (worksheetPickingAssignment && orderProducts?.length > 0) {
|
|
176
|
+
worksheet.worksheetDetails = await this.createWorksheetDetails(
|
|
177
|
+
worksheet,
|
|
178
|
+
WORKSHEET_TYPE.BATCH_PICKING,
|
|
179
|
+
orderProducts
|
|
180
|
+
)
|
|
181
|
+
}
|
|
182
|
+
}
|
|
157
183
|
|
|
158
184
|
releaseGoods = releaseGoods.map((releaseGood: ReleaseGood) => {
|
|
159
185
|
return {
|
|
@@ -192,6 +218,9 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
192
218
|
'releaseGood.domain',
|
|
193
219
|
'releaseGood.lastMileDelivery',
|
|
194
220
|
'releaseGood.bizplace.domain',
|
|
221
|
+
'releaseGood.orderProducts',
|
|
222
|
+
'releaseGood.orderProducts.productDetail',
|
|
223
|
+
'releaseGood.orderProducts.productDetail.product',
|
|
195
224
|
'releaseGood.orderPackages',
|
|
196
225
|
'releaseGood.orderPackages.orderPackageItems',
|
|
197
226
|
'releaseGood.orderPackages.orderPackageItems.orderProduct',
|
|
@@ -206,17 +235,25 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
206
235
|
'worksheetDetails.targetInventory.product'
|
|
207
236
|
])
|
|
208
237
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
let targetInventory: OrderInventory = wsd.targetInventory
|
|
212
|
-
targetInventory.status = ORDER_INVENTORY_STATUS.PICKING
|
|
213
|
-
targetInventory.updater = this.user
|
|
238
|
+
let worksheetDetails: WorksheetDetail[]
|
|
239
|
+
let releaseGood: ReleaseGood = worksheet.releaseGood
|
|
214
240
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
241
|
+
// assign inventory if unassigned
|
|
242
|
+
if (!releaseGood.assignedInventory) {
|
|
243
|
+
worksheetDetails = await this.assignInventoriesForUnassignedOrder(worksheet)
|
|
244
|
+
worksheet.worksheetDetails = worksheetDetails
|
|
245
|
+
releaseGood.assignedInventory = true
|
|
246
|
+
} else {
|
|
247
|
+
worksheetDetails = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED')
|
|
248
|
+
const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {
|
|
249
|
+
let targetInventory: OrderInventory = wsd.targetInventory
|
|
250
|
+
targetInventory.status = ORDER_INVENTORY_STATUS.PICKING
|
|
251
|
+
targetInventory.updater = this.user
|
|
218
252
|
|
|
219
|
-
|
|
253
|
+
return targetInventory
|
|
254
|
+
})
|
|
255
|
+
this.updateOrderTargets(targetInventories)
|
|
256
|
+
}
|
|
220
257
|
releaseGood.status = ORDER_STATUS.PICKING
|
|
221
258
|
releaseGood.updater = this.user
|
|
222
259
|
this.updateRefOrder(releaseGood)
|
|
@@ -311,6 +348,11 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
311
348
|
async activateBatchPicking(worksheetNo: string): Promise<Worksheet> {
|
|
312
349
|
let worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.BATCH_PICKING, [
|
|
313
350
|
'worksheetDetails',
|
|
351
|
+
'worksheetDetails.targetProduct',
|
|
352
|
+
'worksheetDetails.targetProduct.bizplace',
|
|
353
|
+
'worksheetDetails.targetProduct.product',
|
|
354
|
+
'worksheetDetails.targetProduct.productDetail',
|
|
355
|
+
'worksheetDetails.targetProduct.releaseGood',
|
|
314
356
|
'worksheetDetails.targetInventory',
|
|
315
357
|
'worksheetDetails.targetInventory.releaseGood',
|
|
316
358
|
'worksheetDetails.targetInventory.releaseGood.domain',
|
|
@@ -321,15 +363,21 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
321
363
|
'bizplace.company.domain'
|
|
322
364
|
])
|
|
323
365
|
|
|
324
|
-
|
|
325
|
-
const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {
|
|
326
|
-
let targetInventory: OrderInventory = wsd.targetInventory
|
|
327
|
-
targetInventory.status = ORDER_INVENTORY_STATUS.PICKING
|
|
328
|
-
targetInventory.updater = this.user
|
|
366
|
+
let worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED')
|
|
329
367
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
368
|
+
if (worksheet.worksheetDetails.find(wsd => wsd.targetProduct.releaseGood.assignedInventory == false)) {
|
|
369
|
+
worksheetDetails = await this.assignInventoriesForUnassignedMergedOrder(worksheet)
|
|
370
|
+
worksheet.worksheetDetails = worksheetDetails
|
|
371
|
+
} else {
|
|
372
|
+
const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {
|
|
373
|
+
let targetInventory: OrderInventory = wsd.targetInventory
|
|
374
|
+
targetInventory.status = ORDER_INVENTORY_STATUS.PICKING
|
|
375
|
+
targetInventory.updater = this.user
|
|
376
|
+
|
|
377
|
+
return targetInventory
|
|
378
|
+
})
|
|
379
|
+
this.updateOrderTargets(targetInventories)
|
|
380
|
+
}
|
|
333
381
|
|
|
334
382
|
worksheet = await this.activateWorksheet(worksheet, worksheetDetails, [])
|
|
335
383
|
|
|
@@ -419,7 +467,8 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
419
467
|
return {
|
|
420
468
|
...releaseGood,
|
|
421
469
|
status: ORDER_STATUS.PICKING,
|
|
422
|
-
updater: this.user
|
|
470
|
+
updater: this.user,
|
|
471
|
+
assignedInventory: true
|
|
423
472
|
}
|
|
424
473
|
})
|
|
425
474
|
)
|
|
@@ -1970,4 +2019,245 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
1970
2019
|
})
|
|
1971
2020
|
}
|
|
1972
2021
|
}
|
|
2022
|
+
|
|
2023
|
+
async assignInventoriesForUnassignedOrder(worksheet: Worksheet): Promise<any> {
|
|
2024
|
+
const releaseGood = worksheet.releaseGood
|
|
2025
|
+
const orderProducts = releaseGood.orderProducts
|
|
2026
|
+
let finalOrderInventories: OrderInventory[] = []
|
|
2027
|
+
let newWorksheetDetails: WorksheetDetail[] = []
|
|
2028
|
+
const inventoryAssignmentSetting: Setting = await this.trxMgr.getRepository(Setting).findOne({
|
|
2029
|
+
where: { domain: this.domain, name: 'rule-for-inventory-assignment' }
|
|
2030
|
+
})
|
|
2031
|
+
|
|
2032
|
+
for (let op of orderProducts) {
|
|
2033
|
+
let locationSortingRules = []
|
|
2034
|
+
if (inventoryAssignmentSetting) {
|
|
2035
|
+
let locationSetting = JSON.parse(inventoryAssignmentSetting.value)
|
|
2036
|
+
for (const key in locationSetting) {
|
|
2037
|
+
locationSortingRules.push({ name: key, desc: locationSetting[key] == 'ASC' ? false : true })
|
|
2038
|
+
}
|
|
2039
|
+
}
|
|
2040
|
+
|
|
2041
|
+
let assignedOrderInventories: OrderInventory[] = await InventoryUtil.autoAssignInventoryForRelease(
|
|
2042
|
+
op,
|
|
2043
|
+
op.productDetail.product,
|
|
2044
|
+
op.productDetail,
|
|
2045
|
+
locationSortingRules,
|
|
2046
|
+
releaseGood.bizplace,
|
|
2047
|
+
this.domain,
|
|
2048
|
+
this.trxMgr,
|
|
2049
|
+
op.batchId
|
|
2050
|
+
)
|
|
2051
|
+
|
|
2052
|
+
assignedOrderInventories = assignedOrderInventories.map(aoi => {
|
|
2053
|
+
delete aoi.id
|
|
2054
|
+
return {
|
|
2055
|
+
...aoi,
|
|
2056
|
+
orderProduct: op,
|
|
2057
|
+
status: ORDER_INVENTORY_STATUS.PICKING,
|
|
2058
|
+
name: OrderNoGenerator.orderInventory(),
|
|
2059
|
+
domain: this.domain,
|
|
2060
|
+
bizplace: { id: releaseGood.bizplace.id },
|
|
2061
|
+
releaseGood
|
|
2062
|
+
}
|
|
2063
|
+
})
|
|
2064
|
+
|
|
2065
|
+
finalOrderInventories.push(...assignedOrderInventories)
|
|
2066
|
+
|
|
2067
|
+
await this.trxMgr
|
|
2068
|
+
.getRepository(OrderProduct)
|
|
2069
|
+
.update({ id: op.id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: this.user })
|
|
2070
|
+
}
|
|
2071
|
+
|
|
2072
|
+
for (let oi of finalOrderInventories) {
|
|
2073
|
+
// update inventory locked qty and uom value
|
|
2074
|
+
oi = await this.trxMgr.getRepository(OrderInventory).save({ ...oi })
|
|
2075
|
+
|
|
2076
|
+
await this.trxMgr.getRepository(Inventory).update(oi.inventory.id, {
|
|
2077
|
+
lockedQty: (oi.inventory?.lockedQty || 0) + oi.releaseQty,
|
|
2078
|
+
lockedUomValue: (oi.inventory?.lockedUomValue || 0) + oi.releaseUomValue,
|
|
2079
|
+
updater: this.user
|
|
2080
|
+
})
|
|
2081
|
+
|
|
2082
|
+
// update product detail stock deduct unassigned qty and unassigned uom value
|
|
2083
|
+
await this.trxMgr
|
|
2084
|
+
.getRepository(ProductDetailStock)
|
|
2085
|
+
.createQueryBuilder()
|
|
2086
|
+
.update(ProductDetailStock)
|
|
2087
|
+
.set({
|
|
2088
|
+
unassignedQty: () => `"unassigned_qty" - ${oi.releaseQty}`,
|
|
2089
|
+
unassignedUomValue: () => `"unassigned_uom_value" - ${oi.releaseUomValue}`
|
|
2090
|
+
})
|
|
2091
|
+
.where({ productDetail: oi.productDetail.id })
|
|
2092
|
+
.execute()
|
|
2093
|
+
|
|
2094
|
+
const worksheetDetail: WorksheetDetail = Object.assign(new WorksheetDetail(), {
|
|
2095
|
+
domain: this.domain,
|
|
2096
|
+
bizplace: { id: releaseGood.bizplace.id },
|
|
2097
|
+
worksheet,
|
|
2098
|
+
name: WorksheetNoGenerator.pickingDetail(),
|
|
2099
|
+
seq: 0,
|
|
2100
|
+
targetInventory: oi,
|
|
2101
|
+
targetProduct: oi.orderProduct,
|
|
2102
|
+
type: WORKSHEET_TYPE.PICKING,
|
|
2103
|
+
status: WORKSHEET_STATUS.DEACTIVATED,
|
|
2104
|
+
creator: this.user,
|
|
2105
|
+
updater: this.user
|
|
2106
|
+
})
|
|
2107
|
+
|
|
2108
|
+
newWorksheetDetails.push(worksheetDetail)
|
|
2109
|
+
}
|
|
2110
|
+
newWorksheetDetails = await this.trxMgr.getRepository(WorksheetDetail).save(newWorksheetDetails)
|
|
2111
|
+
|
|
2112
|
+
return newWorksheetDetails
|
|
2113
|
+
}
|
|
2114
|
+
|
|
2115
|
+
async assignInventoriesForUnassignedMergedOrder(worksheet: Worksheet): Promise<any> {
|
|
2116
|
+
//const releaseGood = worksheet.releaseGood
|
|
2117
|
+
const orderProducts = worksheet.worksheetDetails.map(wsd => wsd.targetProduct)
|
|
2118
|
+
const releaseGoodIds = [...new Set(orderProducts.map(op => op.releaseGood.id))]
|
|
2119
|
+
let newWorksheetDetails: WorksheetDetail[] = []
|
|
2120
|
+
|
|
2121
|
+
const inventoryAssignmentSetting: Setting = await this.trxMgr.getRepository(Setting).findOne({
|
|
2122
|
+
where: { domain: this.domain, name: 'rule-for-inventory-assignment' }
|
|
2123
|
+
})
|
|
2124
|
+
|
|
2125
|
+
for (let i = 0; i < orderProducts.length; i++) {
|
|
2126
|
+
let pInventoryList = inventoriesByStrategy(
|
|
2127
|
+
{
|
|
2128
|
+
...orderProducts[i],
|
|
2129
|
+
worksheetId: worksheet.id,
|
|
2130
|
+
bizplaceId: worksheet.bizplace.id,
|
|
2131
|
+
locationSortingRules: inventoryAssignmentSetting ? JSON.parse(inventoryAssignmentSetting.value) : false,
|
|
2132
|
+
pickingStrategy: orderProducts[i].product.pickingStrategy
|
|
2133
|
+
},
|
|
2134
|
+
this.domain,
|
|
2135
|
+
this.trxMgr
|
|
2136
|
+
)
|
|
2137
|
+
|
|
2138
|
+
let idx = 0
|
|
2139
|
+
let [inventoryList] = await Promise.all([pInventoryList])
|
|
2140
|
+
|
|
2141
|
+
let { releaseQty, releaseUomValue } = orderProducts[i]
|
|
2142
|
+
|
|
2143
|
+
while (releaseQty > 0 && idx < inventoryList.items.length) {
|
|
2144
|
+
let targetInventory: Inventory = await this.trxMgr
|
|
2145
|
+
.getRepository(Inventory)
|
|
2146
|
+
.findOne({ where: { id: inventoryList.items[idx].id } })
|
|
2147
|
+
|
|
2148
|
+
let inventoryAvailableQty = targetInventory.qty - (targetInventory?.lockedQty || 0)
|
|
2149
|
+
let inventoryAvailableUomValue = targetInventory.uomValue - (targetInventory?.lockedUomValue || 0)
|
|
2150
|
+
|
|
2151
|
+
if (inventoryAvailableQty > 0) {
|
|
2152
|
+
let allocatedQty = 0,
|
|
2153
|
+
allocatedUomValue = 0
|
|
2154
|
+
if (inventoryAvailableQty < releaseQty) {
|
|
2155
|
+
idx = idx + 1
|
|
2156
|
+
allocatedQty = inventoryAvailableQty
|
|
2157
|
+
allocatedUomValue = inventoryAvailableUomValue
|
|
2158
|
+
} else {
|
|
2159
|
+
allocatedQty = releaseQty
|
|
2160
|
+
allocatedUomValue = releaseUomValue
|
|
2161
|
+
}
|
|
2162
|
+
|
|
2163
|
+
releaseQty = releaseQty - allocatedQty
|
|
2164
|
+
releaseUomValue = releaseUomValue - allocatedUomValue
|
|
2165
|
+
|
|
2166
|
+
//// Update inventory locked quantity
|
|
2167
|
+
await this.trxMgr
|
|
2168
|
+
.getRepository(Inventory)
|
|
2169
|
+
.createQueryBuilder('inv')
|
|
2170
|
+
.update(Inventory)
|
|
2171
|
+
.set({
|
|
2172
|
+
lockedUomValue: () => `COALESCE(locked_uom_value,0) + ${allocatedUomValue}`,
|
|
2173
|
+
lockedQty: () => `COALESCE(locked_qty,0) + ${allocatedQty}`
|
|
2174
|
+
})
|
|
2175
|
+
.where('id = :id', { id: targetInventory.id })
|
|
2176
|
+
.execute()
|
|
2177
|
+
|
|
2178
|
+
// update product detail stock deduct unassigned qty and unassigned uom value
|
|
2179
|
+
await this.trxMgr
|
|
2180
|
+
.getRepository(ProductDetailStock)
|
|
2181
|
+
.createQueryBuilder()
|
|
2182
|
+
.update(ProductDetailStock)
|
|
2183
|
+
.set({
|
|
2184
|
+
unassignedQty: () => `"unassigned_qty" - ${allocatedQty}`,
|
|
2185
|
+
unassignedUomValue: () => `"unassigned_uom_value" - ${allocatedUomValue}`
|
|
2186
|
+
})
|
|
2187
|
+
.where({ productDetail: orderProducts[i].productDetail.id })
|
|
2188
|
+
.execute()
|
|
2189
|
+
|
|
2190
|
+
// update order product status to ASSIGNED
|
|
2191
|
+
await this.trxMgr
|
|
2192
|
+
.getRepository(OrderProduct)
|
|
2193
|
+
.update({ id: orderProducts[i].id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: this.user })
|
|
2194
|
+
|
|
2195
|
+
// Create new order inventory with status -> READY_TO_PICK, type -> RELEASE_OF_GOODS
|
|
2196
|
+
let newTargetInventory: OrderInventory = new OrderInventory()
|
|
2197
|
+
newTargetInventory = {
|
|
2198
|
+
domain: this.domain,
|
|
2199
|
+
bizplace: orderProducts[i].bizplace,
|
|
2200
|
+
name: OrderNoGenerator.orderInventory(),
|
|
2201
|
+
releaseGood: orderProducts[i].releaseGood,
|
|
2202
|
+
batchId: orderProducts[i].batchId,
|
|
2203
|
+
status: ORDER_INVENTORY_STATUS.PICKING,
|
|
2204
|
+
type: ORDER_TYPES.RELEASE_OF_GOODS,
|
|
2205
|
+
refWorksheetId: worksheet.id,
|
|
2206
|
+
product: orderProducts[i].product,
|
|
2207
|
+
productDetail: orderProducts[i].productDetail,
|
|
2208
|
+
packingType: orderProducts[i].packingType,
|
|
2209
|
+
packingSize: parseFloat(orderProducts[i].packingSize),
|
|
2210
|
+
creator: this.user,
|
|
2211
|
+
inventory: targetInventory,
|
|
2212
|
+
releaseQty: allocatedQty,
|
|
2213
|
+
releaseUomValue: allocatedUomValue,
|
|
2214
|
+
uom: orderProducts[i].uom,
|
|
2215
|
+
orderProduct: orderProducts[i]
|
|
2216
|
+
}
|
|
2217
|
+
newTargetInventory = await this.trxMgr.getRepository(OrderInventory).save(newTargetInventory)
|
|
2218
|
+
|
|
2219
|
+
if (idx == 0) {
|
|
2220
|
+
let updatedWorksheetDetail = {
|
|
2221
|
+
...worksheet.worksheetDetails[i],
|
|
2222
|
+
targetInventory: newTargetInventory,
|
|
2223
|
+
worksheet,
|
|
2224
|
+
bizplace: worksheet.bizplace,
|
|
2225
|
+
domain: this.domain,
|
|
2226
|
+
updater: this.user,
|
|
2227
|
+
creator: this.user
|
|
2228
|
+
}
|
|
2229
|
+
await this.trxMgr.getRepository(WorksheetDetail).update(worksheet.worksheetDetails[i].id, {
|
|
2230
|
+
targetInventory: newTargetInventory,
|
|
2231
|
+
worksheet,
|
|
2232
|
+
bizplace: worksheet.bizplace,
|
|
2233
|
+
domain: this.domain,
|
|
2234
|
+
updater: this.user,
|
|
2235
|
+
creator: this.user
|
|
2236
|
+
})
|
|
2237
|
+
|
|
2238
|
+
newWorksheetDetails.push(updatedWorksheetDetail)
|
|
2239
|
+
} else {
|
|
2240
|
+
let newWorksheetDetail = {
|
|
2241
|
+
...worksheet.worksheetDetails[i],
|
|
2242
|
+
name: WorksheetNoGenerator.batchPickingDetail(),
|
|
2243
|
+
targetInventory: newTargetInventory,
|
|
2244
|
+
worksheet,
|
|
2245
|
+
bizplace: worksheet.bizplace,
|
|
2246
|
+
domain: this.domain,
|
|
2247
|
+
updater: this.user,
|
|
2248
|
+
creator: this.user
|
|
2249
|
+
}
|
|
2250
|
+
delete newWorksheetDetail.id
|
|
2251
|
+
|
|
2252
|
+
newWorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).save(newWorksheetDetail)
|
|
2253
|
+
newWorksheetDetails.push(newWorksheetDetail)
|
|
2254
|
+
}
|
|
2255
|
+
} else {
|
|
2256
|
+
idx = idx + 1
|
|
2257
|
+
}
|
|
2258
|
+
}
|
|
2259
|
+
await this.trxMgr.getRepository(ReleaseGood).update(releaseGoodIds, { assignedInventory: true })
|
|
2260
|
+
}
|
|
2261
|
+
return newWorksheetDetails
|
|
2262
|
+
}
|
|
1973
2263
|
}
|
|
@@ -12,8 +12,8 @@ import { ViewColumn, ViewEntity } from 'typeorm'
|
|
|
12
12
|
i.uom,
|
|
13
13
|
i.product_id as "product_id",
|
|
14
14
|
null as "product_bundle_id",
|
|
15
|
-
COALESCE(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0))) AS "remain_qty",
|
|
16
|
-
COALESCE(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0))) AS "remain_uom_value",
|
|
15
|
+
COALESCE(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - SUM(COALESCE(pds.unassigned_qty, 0))) AS "remain_qty",
|
|
16
|
+
COALESCE(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - SUM(COALESCE(pds.unassigned_uom_value, 0))) AS "remain_uom_value",
|
|
17
17
|
COALESCE(sum(COALESCE(i.qty, 0::double precision))) AS "qty",
|
|
18
18
|
COALESCE(sum(COALESCE(i.uom_value, 0::double precision))) AS "uom_value",
|
|
19
19
|
COALESCE(sum(COALESCE(i.transfer_qty, 0::double precision))) AS "transfer_qty",
|
|
@@ -22,6 +22,7 @@ import { ViewColumn, ViewEntity } from 'typeorm'
|
|
|
22
22
|
FROM inventories i
|
|
23
23
|
INNER JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id AND l2.type NOT IN ('QUARANTINE', 'RESERVE')
|
|
24
24
|
INNER JOIN products p ON p.id = i.product_id
|
|
25
|
+
LEFT JOIN product_detail_stocks pds on pds.product_detail_id = i.product_detail_id
|
|
25
26
|
WHERE i.status = 'STORED' AND CASE WHEN i.expiration_date is not null and p.shelf_life is not null then CURRENT_DATE < i.expiration_date - p.shelf_life else true end
|
|
26
27
|
AND i.obsolete is false
|
|
27
28
|
GROUP by
|
|
@@ -51,14 +52,15 @@ import { ViewColumn, ViewEntity } from 'typeorm'
|
|
|
51
52
|
FROM product_bundles pb
|
|
52
53
|
INNER JOIN (
|
|
53
54
|
SELECT i.domain_id, i.bizplace_id, pbs.product_id, pbs.product_bundle_id, min(pbs.bundle_qty),
|
|
54
|
-
(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0))) / min(pbs.bundle_qty) AS "available_qty",
|
|
55
|
-
(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0))) / min(pbs.bundle_qty) AS "available_uom_value",
|
|
55
|
+
(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - SUM(COALESCE(pds.unassigned_qty, 0))) / min(pbs.bundle_qty) AS "available_qty",
|
|
56
|
+
(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - SUM(COALESCE(pds.unassigned_uom_value, 0))) / min(pbs.bundle_qty) AS "available_uom_value",
|
|
56
57
|
(sum(COALESCE(i.qty, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "qty",
|
|
57
58
|
(sum(COALESCE(i.uom_value, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "uom_value",
|
|
58
59
|
(sum(COALESCE(i.transfer_qty, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "transfer_qty",
|
|
59
60
|
(sum(COALESCE(i.transfer_uom_value, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "transfer_uom_value"
|
|
60
61
|
FROM product_bundle_settings pbs
|
|
61
62
|
LEFT JOIN inventories i ON i.product_id = pbs.product_id AND i.status = 'STORED' AND i.obsolete = false
|
|
63
|
+
LEFT JOIN product_detail_stocks pds ON pds.product_detail_id = i.product_detail_id
|
|
62
64
|
INNER JOIN products p ON p.id = pbs.product_id AND CASE WHEN i.expiration_date is not null and p.shelf_life is not null then CURRENT_DATE < i.expiration_date - p.shelf_life else true end
|
|
63
65
|
INNER JOIN locations l ON i.location_id = l.id AND i.domain_id = l.domain_id AND l.type NOT IN ('QUARANTINE', 'RESERVE')
|
|
64
66
|
GROUP by
|