@things-factory/worksheet-base 4.3.137 → 4.3.139
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/unloading-worksheet-controller.js +59 -73
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js +2 -4
- package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/loading-worksheet-controller.js +5 -4
- package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/packing-worksheet-controller.js +23 -23
- package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +157 -120
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js +14 -14
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/vas/vas-worksheet-controller.js +1 -2
- package/dist-server/controllers/vas/vas-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +7 -7
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/entities/index.js +3 -2
- package/dist-server/entities/index.js.map +1 -1
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +29 -62
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +6 -0
- package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js +1 -2
- package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +6 -6
- package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js +2 -2
- package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.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/packing-worksheet.js +4 -1
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +3 -2
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/transfer.js +9 -9
- package/dist-server/graphql/resolvers/worksheet/transfer.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js +17 -17
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +4 -4
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -1
- package/dist-server/graphql/types/worksheet-detail/index.js +1 -0
- package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
- package/dist-server/utils/inventory-util.js +1 -98
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +16 -16
- package/server/controllers/inbound/unloading-worksheet-controller.ts +74 -86
- package/server/controllers/inspect/cycle-count-worksheet-controller.ts +2 -4
- package/server/controllers/outbound/loading-worksheet-controller.ts +13 -3
- package/server/controllers/outbound/packing-worksheet-controller.ts +32 -37
- package/server/controllers/outbound/picking-worksheet-controller.ts +186 -150
- package/server/controllers/outbound/sorting-worksheet-controller.ts +14 -21
- package/server/controllers/vas/vas-worksheet-controller.ts +2 -2
- package/server/controllers/worksheet-controller.ts +15 -10
- package/server/entities/index.ts +2 -2
- package/server/entities/warehouse-bizplace-onhand-inventory.ts +29 -63
- package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +6 -0
- package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +1 -2
- package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +2 -2
- package/server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.ts +2 -2
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +3 -1
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +4 -2
- package/server/graphql/resolvers/worksheet/picking-worksheet.ts +3 -2
- package/server/graphql/resolvers/worksheet/transfer.ts +18 -16
- package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +1 -1
- package/server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts +3 -2
- package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +4 -1
- package/server/graphql/types/worksheet-detail/index.ts +1 -0
- package/server/utils/inventory-util.ts +1 -126
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { In, IsNull } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import { Product, ProductDetail } from '@things-factory/product-base'
|
|
3
|
+
import { Product, ProductDetail, ProductBarcode } from '@things-factory/product-base'
|
|
4
4
|
import {
|
|
5
5
|
ORDER_INVENTORY_STATUS,
|
|
6
6
|
ORDER_STATUS,
|
|
@@ -85,9 +85,8 @@ export class SortingWorksheetController extends VasWorksheetController {
|
|
|
85
85
|
.innerJoinAndSelect('worksheet.worksheetDetails', 'worksheetDetails')
|
|
86
86
|
.innerJoinAndSelect('worksheetDetails.targetInventory', 'targetInventory')
|
|
87
87
|
.innerJoinAndSelect('targetInventory.product', 'product')
|
|
88
|
-
.innerJoinAndSelect('product.productDetails', 'productDetails')
|
|
89
|
-
.leftJoinAndSelect('productDetails.childProductDetail', 'childProductDetail')
|
|
90
88
|
.leftJoinAndSelect('targetInventory.orderProduct', 'orderProduct')
|
|
89
|
+
.leftJoinAndSelect('targetInventory.productDetail', 'productDetail')
|
|
91
90
|
.leftJoinAndSelect('targetInventory.bizplace', 'bizplace')
|
|
92
91
|
.leftJoinAndSelect('targetInventory.inventory', 'inventory')
|
|
93
92
|
.leftJoinAndSelect('targetInventory.releaseGood', 'releaseGood')
|
|
@@ -96,7 +95,6 @@ export class SortingWorksheetController extends VasWorksheetController {
|
|
|
96
95
|
.andWhere('worksheet.type = :type', { type: WORKSHEET_TYPE.SORTING })
|
|
97
96
|
.andWhere('worksheet.status = :status', { status: WORKSHEET_STATUS.EXECUTING })
|
|
98
97
|
.andWhere('releaseGood.name = :rg', { rg: releaseGoodNo })
|
|
99
|
-
.andWhere('productDetails.gtin = :gtin', { gtin: productBarcode })
|
|
100
98
|
.getOne()
|
|
101
99
|
|
|
102
100
|
if (!worksheet) {
|
|
@@ -105,17 +103,15 @@ export class SortingWorksheetController extends VasWorksheetController {
|
|
|
105
103
|
|
|
106
104
|
const worksheetDetails = worksheet.worksheetDetails
|
|
107
105
|
const orderInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)
|
|
108
|
-
const
|
|
109
|
-
|
|
106
|
+
const scanProductBarcode: ProductBarcode = await this.trxMgr.getRepository(ProductBarcode).findOne({
|
|
107
|
+
where: { gtin: productBarcode },
|
|
108
|
+
relations: ['productDetail', 'productDetail.childProductDetail']
|
|
109
|
+
})
|
|
110
|
+
const scannedProductDetail: ProductDetail = scanProductBarcode.productDetail
|
|
110
111
|
const scannedChildProductDetail: ProductDetail = scannedProductDetail.childProductDetail
|
|
111
112
|
|
|
112
113
|
//find matching order inventories based on scanned product detail
|
|
113
|
-
let matchingOIs = orderInventories.filter(
|
|
114
|
-
oi =>
|
|
115
|
-
oi.packingType == scannedProductDetail.packingType &&
|
|
116
|
-
oi.packingSize == scannedProductDetail.packingSize &&
|
|
117
|
-
oi.uom == scannedProductDetail.uom
|
|
118
|
-
)
|
|
114
|
+
let matchingOIs = orderInventories.filter(oi => oi.productDetail.id == scannedProductDetail.id)
|
|
119
115
|
|
|
120
116
|
let productDetail = scannedProductDetail
|
|
121
117
|
|
|
@@ -125,12 +121,7 @@ export class SortingWorksheetController extends VasWorksheetController {
|
|
|
125
121
|
if (!scannedChildProductDetail) {
|
|
126
122
|
throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))
|
|
127
123
|
}
|
|
128
|
-
matchingOIs = orderInventories.filter(
|
|
129
|
-
oi =>
|
|
130
|
-
oi.packingType == scannedChildProductDetail.packingType &&
|
|
131
|
-
oi.packingSize == scannedChildProductDetail.packingSize &&
|
|
132
|
-
oi.uom == scannedChildProductDetail.uom
|
|
133
|
-
)
|
|
124
|
+
matchingOIs = orderInventories.filter(oi => oi.productDetail.id == scannedChildProductDetail.id)
|
|
134
125
|
|
|
135
126
|
productDetail = scannedChildProductDetail
|
|
136
127
|
|
|
@@ -295,7 +286,8 @@ export class SortingWorksheetController extends VasWorksheetController {
|
|
|
295
286
|
'worksheetDetails.targetInventory.inventory.product',
|
|
296
287
|
'worksheetDetails.targetInventory.inventory.product.productDetails',
|
|
297
288
|
'worksheetDetails.targetInventory.inventory.product.productDetails.product',
|
|
298
|
-
'worksheetDetails.targetInventory.releaseGood'
|
|
289
|
+
'worksheetDetails.targetInventory.releaseGood',
|
|
290
|
+
'worksheetDetails.targetInventory.productDetail'
|
|
299
291
|
]
|
|
300
292
|
})
|
|
301
293
|
|
|
@@ -315,6 +307,7 @@ export class SortingWorksheetController extends VasWorksheetController {
|
|
|
315
307
|
const inventory: Inventory = matchingOI.inventory
|
|
316
308
|
const releaseGood: ReleaseGood = matchingOI.releaseGood
|
|
317
309
|
const product: Product = matchingOI.inventory.product
|
|
310
|
+
const productDetail: ProductDetail = matchingOI.productDetail
|
|
318
311
|
const packingType: string = matchingOI.packingType
|
|
319
312
|
const packingSize: number = matchingOI.packingSize
|
|
320
313
|
|
|
@@ -324,8 +317,7 @@ export class SortingWorksheetController extends VasWorksheetController {
|
|
|
324
317
|
}
|
|
325
318
|
|
|
326
319
|
let foundSerialNumber: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({
|
|
327
|
-
where: { domain: this.domain, serialNumber: serialNumber,
|
|
328
|
-
relations: ['product', 'inventory']
|
|
320
|
+
where: { domain: this.domain, serialNumber: serialNumber, productDetail }
|
|
329
321
|
})
|
|
330
322
|
|
|
331
323
|
if (foundSerialNumber) {
|
|
@@ -349,6 +341,7 @@ export class SortingWorksheetController extends VasWorksheetController {
|
|
|
349
341
|
inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND
|
|
350
342
|
inventoryItem.outboundOrderId = releaseGood.id
|
|
351
343
|
inventoryItem.product = product
|
|
344
|
+
inventoryItem.productDetail = productDetail
|
|
352
345
|
inventoryItem.inventory = inventory
|
|
353
346
|
inventoryItem.domain = this.domain
|
|
354
347
|
|
|
@@ -22,7 +22,8 @@ import {
|
|
|
22
22
|
InventoryNoGenerator,
|
|
23
23
|
Location,
|
|
24
24
|
LOCATION_TYPE,
|
|
25
|
-
Warehouse
|
|
25
|
+
Warehouse,
|
|
26
|
+
generateInventoryHistory
|
|
26
27
|
} from '@things-factory/warehouse-base'
|
|
27
28
|
|
|
28
29
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
|
|
@@ -36,7 +37,6 @@ import {
|
|
|
36
37
|
RefOrderType
|
|
37
38
|
} from '../../graphql/resolvers/worksheet/vas-transactions'
|
|
38
39
|
import { PackingUnits } from '../../graphql/resolvers/worksheet/vas-transactions/interfaces/repackaging'
|
|
39
|
-
import { generateInventoryHistory } from '../../utils'
|
|
40
40
|
import { ReferenceOrderType, WorksheetController } from '../worksheet-controller'
|
|
41
41
|
|
|
42
42
|
type CompleteTransactionType = (trxMgr: EntityManager, orderVas: OrderVas, user: User) => Promise<void>
|
|
@@ -19,11 +19,17 @@ import {
|
|
|
19
19
|
VasOrder
|
|
20
20
|
} from '@things-factory/sales-base'
|
|
21
21
|
import { Domain } from '@things-factory/shell'
|
|
22
|
-
import {
|
|
22
|
+
import {
|
|
23
|
+
Inventory,
|
|
24
|
+
INVENTORY_STATUS,
|
|
25
|
+
InventoryItem,
|
|
26
|
+
Pallet,
|
|
27
|
+
generateInventoryHistory
|
|
28
|
+
} from '@things-factory/warehouse-base'
|
|
23
29
|
|
|
24
30
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../constants'
|
|
25
31
|
import { Worksheet, WorksheetDetail } from '../entities'
|
|
26
|
-
import {
|
|
32
|
+
import { WorksheetNoGenerator } from '../utils'
|
|
27
33
|
|
|
28
34
|
export type ReferenceOrderType = ArrivalNotice | ReleaseGood | VasOrder | InventoryCheck | DeliveryOrder | ReturnOrder
|
|
29
35
|
export type OrderTargetTypes = OrderProduct | OrderInventory | OrderVas
|
|
@@ -590,8 +596,7 @@ export class WorksheetController {
|
|
|
590
596
|
return worksheet
|
|
591
597
|
}
|
|
592
598
|
|
|
593
|
-
|
|
594
|
-
async updateWorksheet(
|
|
599
|
+
async updateLoadWorksheet(
|
|
595
600
|
worksheetType: string,
|
|
596
601
|
refOrder: ReferenceOrderType,
|
|
597
602
|
worksheet: Worksheet,
|
|
@@ -1006,11 +1011,9 @@ export class WorksheetController {
|
|
|
1006
1011
|
async getChildQty(
|
|
1007
1012
|
productDetails: ProductDetail[],
|
|
1008
1013
|
productBarcode: string,
|
|
1009
|
-
orderProductDetail: ProductDetail
|
|
1014
|
+
orderProductDetail: ProductDetail,
|
|
1015
|
+
scannedProductDetail: ProductDetail
|
|
1010
1016
|
): Promise<number> {
|
|
1011
|
-
const scannedProductDetail: ProductDetail = productDetails.find(
|
|
1012
|
-
(productDetail: ProductDetail) => productDetail.gtin === productBarcode
|
|
1013
|
-
)
|
|
1014
1017
|
let hasChildRelation: boolean = Boolean(scannedProductDetail?.childProductDetail)
|
|
1015
1018
|
let hasMatchingChild: boolean
|
|
1016
1019
|
let childQty: number
|
|
@@ -1061,16 +1064,18 @@ export class WorksheetController {
|
|
|
1061
1064
|
WITH RECURSIVE cte as (
|
|
1062
1065
|
select * from (
|
|
1063
1066
|
select pd2.product_id as "productId", pd2.id, pd2.packing_size as "packingSize",
|
|
1064
|
-
pd2.packing_type as "packingType", pd2.uom as "uom", (pd2.uom_value * $2::float) as "uomValue", $2::float as "qty",
|
|
1067
|
+
pd2.packing_type as "packingType", pd2.uom as "uom", (pd2.uom_value * $2::float) as "uomValue", $2::float as "qty", pb.gtin
|
|
1065
1068
|
from product_details pd
|
|
1066
1069
|
inner join product_details pd2 on pd.product_id = pd2.product_id and pd.packing_type = pd2.packing_type and pd.packing_size = pd2.packing_size and pd.uom = pd2.uom
|
|
1070
|
+
inner join product_barcodes pb on pb.product_detail_id = pd2.id
|
|
1067
1071
|
where pd.id = $1
|
|
1068
1072
|
) as dt
|
|
1069
1073
|
union all
|
|
1070
1074
|
select pd.product_id as "productId", pd.id, pd.packing_size as "packingSize",
|
|
1071
1075
|
pd.packing_type as "packingType", pd.uom,
|
|
1072
|
-
dt1.qty * pd.packing_size * pd.uom_value as "uomValue", dt1.qty * pd.packing_size as "qty",
|
|
1076
|
+
dt1.qty * pd.packing_size * pd.uom_value as "uomValue", dt1.qty * pd.packing_size as "qty", pb.gtin
|
|
1073
1077
|
from product_details pd
|
|
1078
|
+
inner join product_barcodes pb on pb.product_detail_id = pd.id
|
|
1074
1079
|
inner join cte dt1 on dt1.id = pd.child_product_detail_id
|
|
1075
1080
|
where pd.deleted_at is null
|
|
1076
1081
|
)
|
package/server/entities/index.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { WarehouseBizplaceOnhandInventory } from './warehouse-bizplace-onhand-inventory'
|
|
1
2
|
import { Worksheet } from './worksheet'
|
|
2
3
|
import { WorksheetDetail } from './worksheet-detail'
|
|
3
4
|
import { WorksheetMovement } from './worksheet-movement'
|
|
4
|
-
import { WarehouseBizplaceOnhandInventory } from './warehouse-bizplace-onhand-inventory'
|
|
5
5
|
|
|
6
6
|
export const entities = [Worksheet, WorksheetDetail, WorksheetMovement, WarehouseBizplaceOnhandInventory]
|
|
7
7
|
|
|
8
|
-
export { Worksheet, WorksheetDetail, WorksheetMovement }
|
|
8
|
+
export { WarehouseBizplaceOnhandInventory, Worksheet, WorksheetDetail, WorksheetMovement }
|
|
@@ -2,55 +2,23 @@ import { ViewColumn, ViewEntity } from 'typeorm'
|
|
|
2
2
|
|
|
3
3
|
@ViewEntity({
|
|
4
4
|
expression: `
|
|
5
|
-
select d.name as "
|
|
6
|
-
WITH oi as (
|
|
7
|
-
select
|
|
8
|
-
oi.domain_id,
|
|
9
|
-
oi.bizplace_id,
|
|
10
|
-
SUM(oi.release_qty) AS release_qty,
|
|
11
|
-
SUM(oi.release_uom_value) AS release_uom_value,
|
|
12
|
-
oi.batch_id,
|
|
13
|
-
oi.batch_id_ref,
|
|
14
|
-
oi.product_id,
|
|
15
|
-
oi.packing_type,
|
|
16
|
-
oi.packing_size,
|
|
17
|
-
oi.uom
|
|
18
|
-
FROM
|
|
19
|
-
order_inventories oi
|
|
20
|
-
WHERE
|
|
21
|
-
(oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')
|
|
22
|
-
AND oi.batch_id NOTNULL
|
|
23
|
-
AND oi.product_id NOTNULL
|
|
24
|
-
AND oi.packing_type NOTNULL
|
|
25
|
-
AND oi.packing_size NOTNULL
|
|
26
|
-
AND oi.inventory_id IS NULL
|
|
27
|
-
GROUP BY
|
|
28
|
-
oi.domain_id,
|
|
29
|
-
oi.bizplace_id,
|
|
30
|
-
oi.batch_id,
|
|
31
|
-
oi.batch_id_ref,
|
|
32
|
-
oi.product_id,
|
|
33
|
-
oi.packing_type,
|
|
34
|
-
oi.packing_size,
|
|
35
|
-
oi.uom
|
|
36
|
-
)
|
|
5
|
+
select d.name as "domain_name", b.name as "bizplace_name", src.* from (
|
|
37
6
|
-- SINGLE ITEM INVENTORY QUERY
|
|
38
7
|
select
|
|
39
|
-
i.domain_id as "
|
|
40
|
-
i.bizplace_id as "
|
|
41
|
-
i.packing_type as "
|
|
42
|
-
i.packing_size as "
|
|
8
|
+
i.domain_id as "domain_id",
|
|
9
|
+
i.bizplace_id as "bizplace_id",
|
|
10
|
+
i.packing_type as "packing_type",
|
|
11
|
+
i.packing_size as "packing_size",
|
|
43
12
|
i.uom,
|
|
44
|
-
i.product_id as "
|
|
45
|
-
null as "
|
|
46
|
-
COALESCE(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0))
|
|
47
|
-
COALESCE(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0))
|
|
13
|
+
i.product_id as "product_id",
|
|
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",
|
|
48
17
|
COALESCE(sum(COALESCE(i.qty, 0::double precision))) AS "qty",
|
|
49
|
-
COALESCE(sum(COALESCE(i.uom_value, 0::double precision))) AS "
|
|
50
|
-
'SINGLE' AS "
|
|
18
|
+
COALESCE(sum(COALESCE(i.uom_value, 0::double precision))) AS "uom_value",
|
|
19
|
+
'SINGLE' AS "group_type"
|
|
51
20
|
FROM inventories i
|
|
52
21
|
INNER JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id AND l2.type NOT IN ('QUARANTINE', 'RESERVE')
|
|
53
|
-
LEFT JOIN oi ON i.batch_id = oi.batch_id AND i.product_id = oi.product_id AND i.packing_type = oi.packing_type AND i.packing_size = oi.packing_size AND i.uom = oi.uom
|
|
54
22
|
WHERE i.status = 'STORED'
|
|
55
23
|
GROUP by
|
|
56
24
|
i.domain_id,
|
|
@@ -62,29 +30,28 @@ import { ViewColumn, ViewEntity } from 'typeorm'
|
|
|
62
30
|
union all
|
|
63
31
|
-- BUNDLE ITEM INVENTORY QUERY
|
|
64
32
|
SELECT
|
|
65
|
-
pbs.domain_id as "
|
|
66
|
-
pbs.bizplace_id as "
|
|
67
|
-
pb.packing_type as "
|
|
68
|
-
pb.packing_size as "
|
|
33
|
+
pbs.domain_id as "domain_id",
|
|
34
|
+
pbs.bizplace_id as "bizplace_id",
|
|
35
|
+
pb.packing_type as "packing_type",
|
|
36
|
+
pb.packing_size as "packing_size",
|
|
69
37
|
'UNIT' AS "uom",
|
|
70
|
-
null as "
|
|
71
|
-
pb.id AS "
|
|
72
|
-
COALESCE(MIN(FLOOR(pbs."
|
|
73
|
-
COALESCE(MIN(FLOOR(pbs."
|
|
38
|
+
null as "product_id",
|
|
39
|
+
pb.id AS "product_bundle_id",
|
|
40
|
+
COALESCE(MIN(FLOOR(pbs."available_qty")),0) AS "remain_qty",
|
|
41
|
+
COALESCE(MIN(FLOOR(pbs."available_uom_value")),0) AS "remain_uom_value",
|
|
74
42
|
COALESCE(MIN(FLOOR(pbs."qty")), 0::double precision) AS "qty",
|
|
75
|
-
COALESCE(MIN(FLOOR(pbs."
|
|
76
|
-
'BUNDLE' AS "
|
|
43
|
+
COALESCE(MIN(FLOOR(pbs."uom_value")), 0::double precision) AS "uom_value",
|
|
44
|
+
'BUNDLE' AS "group_type"
|
|
77
45
|
FROM product_bundles pb
|
|
78
46
|
INNER JOIN (
|
|
79
47
|
SELECT i.domain_id, i.bizplace_id, pbs.product_id, pbs.product_bundle_id, min(pbs.bundle_qty),
|
|
80
|
-
(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0))
|
|
81
|
-
(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0))
|
|
48
|
+
(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0))) / min(pbs.bundle_qty) AS "available_qty",
|
|
49
|
+
(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0))) / min(pbs.bundle_qty) AS "available_uom_value",
|
|
82
50
|
(sum(COALESCE(i.qty, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "qty",
|
|
83
|
-
(sum(COALESCE(i.uom_value, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "
|
|
51
|
+
(sum(COALESCE(i.uom_value, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "uom_value"
|
|
84
52
|
FROM product_bundle_settings pbs
|
|
85
53
|
LEFT JOIN inventories i ON i.product_id = pbs.product_id AND i.status = 'STORED'
|
|
86
|
-
INNER JOIN locations l ON i.location_id = l.id AND i.domain_id = l.domain_id AND l.type NOT IN ('QUARANTINE', 'RESERVE')
|
|
87
|
-
LEFT JOIN oi ON oi.product_id = i.product_id
|
|
54
|
+
INNER JOIN locations l ON i.location_id = l.id AND i.domain_id = l.domain_id AND l.type NOT IN ('QUARANTINE', 'RESERVE')
|
|
88
55
|
GROUP by
|
|
89
56
|
i.domain_id,
|
|
90
57
|
i.bizplace_id,
|
|
@@ -101,14 +68,13 @@ import { ViewColumn, ViewEntity } from 'typeorm'
|
|
|
101
68
|
pb.id
|
|
102
69
|
)
|
|
103
70
|
AS src
|
|
104
|
-
inner join domains d on d.id = src."
|
|
105
|
-
inner join bizplaces b on b.id = src."
|
|
106
|
-
where src."
|
|
71
|
+
inner join domains d on d.id = src."domain_id"
|
|
72
|
+
inner join bizplaces b on b.id = src."bizplace_id"
|
|
73
|
+
where src."remain_qty" >= 0
|
|
107
74
|
and src."qty" > 0
|
|
108
|
-
order by src."
|
|
75
|
+
order by src."domain_id"
|
|
109
76
|
`
|
|
110
77
|
})
|
|
111
|
-
|
|
112
78
|
export class WarehouseBizplaceOnhandInventory {
|
|
113
79
|
@ViewColumn()
|
|
114
80
|
domainName: string
|
|
@@ -32,6 +32,7 @@ export const batchPickingWorksheetResolver = {
|
|
|
32
32
|
.addSelect('"PROD".name', 'productName')
|
|
33
33
|
.addSelect('"PROD".sku', 'productSku')
|
|
34
34
|
.addSelect('"PROD".description', 'productDescription')
|
|
35
|
+
.addSelect('"PROD_DET".id', 'productDetailId')
|
|
35
36
|
.addSelect('"INV".qty', 'qty')
|
|
36
37
|
.addSelect('"INV".packing_type', 'packingType')
|
|
37
38
|
.addSelect('"INV".packing_size', 'packingSize')
|
|
@@ -47,6 +48,7 @@ export const batchPickingWorksheetResolver = {
|
|
|
47
48
|
.leftJoin('WSD.targetInventory', 'T_INV')
|
|
48
49
|
.leftJoin('T_INV.inventory', 'INV')
|
|
49
50
|
.leftJoin('T_INV.product', 'PROD')
|
|
51
|
+
.leftJoin('T_INV.productDetail', 'PROD_DET')
|
|
50
52
|
.leftJoin('T_INV.binLocation', 'BIN_LOC')
|
|
51
53
|
.leftJoin('INV.location', 'LOC')
|
|
52
54
|
.where('"WSD"."worksheet_id" = :worksheetId', { worksheetId: worksheet.id })
|
|
@@ -64,6 +66,7 @@ export const batchPickingWorksheetResolver = {
|
|
|
64
66
|
.addGroupBy('"PROD".name')
|
|
65
67
|
.addGroupBy('"PROD".sku')
|
|
66
68
|
.addGroupBy('"PROD".description')
|
|
69
|
+
.addGroupBy('"PROD_DET".id')
|
|
67
70
|
.addGroupBy('"T_INV".batch_id')
|
|
68
71
|
.addGroupBy('"T_INV".packing_type')
|
|
69
72
|
.addGroupBy('BIN_LOC.name')
|
|
@@ -126,6 +129,9 @@ export const batchPickingWorksheetResolver = {
|
|
|
126
129
|
name: item?.productName,
|
|
127
130
|
description: item?.productDescription,
|
|
128
131
|
sku: item?.productSku
|
|
132
|
+
},
|
|
133
|
+
productDetail: {
|
|
134
|
+
id: item?.productDetailId
|
|
129
135
|
}
|
|
130
136
|
}
|
|
131
137
|
}
|
|
@@ -13,10 +13,9 @@ import {
|
|
|
13
13
|
ReleaseGood
|
|
14
14
|
} from '@things-factory/sales-base'
|
|
15
15
|
import { Domain } from '@things-factory/shell'
|
|
16
|
-
import { Inventory, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, Location } from '@things-factory/warehouse-base'
|
|
16
|
+
import { Inventory, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, Location, generateInventoryHistory } from '@things-factory/warehouse-base'
|
|
17
17
|
|
|
18
18
|
import { Worksheet, WorksheetDetail } from '../../../entities'
|
|
19
|
-
import { generateInventoryHistory } from '../../../utils'
|
|
20
19
|
|
|
21
20
|
export const confirmCancellationReleaseOrder = {
|
|
22
21
|
async confirmCancellationReleaseOrder(_: any, { name }, context: any) {
|
|
@@ -4,12 +4,12 @@ import { User } from '@things-factory/auth-base'
|
|
|
4
4
|
import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
|
|
5
5
|
import { InventoryCheck, ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory } from '@things-factory/sales-base'
|
|
6
6
|
import { Domain } from '@things-factory/shell'
|
|
7
|
-
import { Inventory, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, Location } from '@things-factory/warehouse-base'
|
|
7
|
+
import { Inventory, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, Location, generateInventoryHistory } from '@things-factory/warehouse-base'
|
|
8
8
|
|
|
9
9
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
|
|
10
10
|
import { SellercraftController } from '../../../controllers'
|
|
11
11
|
import { Worksheet, WorksheetDetail } from '../../../entities'
|
|
12
|
-
import {
|
|
12
|
+
import { switchLocationStatus } from '../../../utils'
|
|
13
13
|
|
|
14
14
|
export const cycleCountAdjustmentResolver = {
|
|
15
15
|
async cycleCountAdjustment(_: any, { cycleCountNo }, context: any) {
|
|
@@ -19,7 +19,7 @@ export const findSortingReleaseOrdersByTaskNoResolver = {
|
|
|
19
19
|
async findSortingReleaseOrdersByTaskNo(_: any, { taskNo }, context: any) {
|
|
20
20
|
const { domain, tx, user }: { domain: Domain; tx: EntityManager; user: User } = context.state
|
|
21
21
|
let task = await tx.getRepository(WorksheetEntity).findOne({
|
|
22
|
-
where: { taskNo, type: WORKSHEET_TYPE.SORTING },
|
|
22
|
+
where: { taskNo, type: WORKSHEET_TYPE.SORTING, domain },
|
|
23
23
|
relations: ['bizplace', 'bizplace.domain', 'worksheetDetails']
|
|
24
24
|
})
|
|
25
25
|
|
|
@@ -51,7 +51,7 @@ export const findSortingReleaseOrdersByTaskNoResolver = {
|
|
|
51
51
|
if (orderInventoryByBin?.releaseGood_id) {
|
|
52
52
|
taskNo = orderInventoryByBin.ws_task_no
|
|
53
53
|
task = await tx.getRepository(WorksheetEntity).findOne({
|
|
54
|
-
where: { taskNo, status: WORKSHEET_STATUS.DEACTIVATED, type: WORKSHEET_TYPE.SORTING }
|
|
54
|
+
where: { taskNo, status: WORKSHEET_STATUS.DEACTIVATED, type: WORKSHEET_TYPE.SORTING, domain }
|
|
55
55
|
})
|
|
56
56
|
} else {
|
|
57
57
|
throw new Error(`Bin do not have any batch picking order.`)
|
|
@@ -40,6 +40,7 @@ export const inventoriesByPalletResolver = {
|
|
|
40
40
|
qb.leftJoinAndSelect('iv.domain', 'domain')
|
|
41
41
|
.leftJoinAndSelect('iv.bizplace', 'bizplace')
|
|
42
42
|
.leftJoinAndSelect('iv.product', 'product')
|
|
43
|
+
.leftJoinAndSelect('iv.productDetail', 'productDetail')
|
|
43
44
|
.leftJoinAndSelect('iv.warehouse', 'warehouse')
|
|
44
45
|
.leftJoinAndSelect('iv.location', 'location')
|
|
45
46
|
.leftJoinAndSelect('iv.creator', 'creator')
|
|
@@ -134,7 +135,8 @@ export const inventoriesByPalletResolver = {
|
|
|
134
135
|
productName: item.product.name,
|
|
135
136
|
productSKU: item.product.sku,
|
|
136
137
|
productBrand: item.product.brand,
|
|
137
|
-
productId: item.product.id
|
|
138
|
+
productId: item.product.id,
|
|
139
|
+
productDetailId: item.productDetail.id
|
|
138
140
|
}
|
|
139
141
|
})
|
|
140
142
|
)
|
|
@@ -14,7 +14,7 @@ import { PartnerSetting, Setting } from '@things-factory/setting-base'
|
|
|
14
14
|
import { Domain } from '@things-factory/shell'
|
|
15
15
|
import { Inventory, Location } from '@things-factory/warehouse-base'
|
|
16
16
|
|
|
17
|
-
import { WORKSHEET_TYPE } from '../../../constants'
|
|
17
|
+
import { WORKSHEET_TYPE, WORKSHEET_STATUS } from '../../../constants'
|
|
18
18
|
import { PackingWorksheetController, SellercraftController } from '../../../controllers'
|
|
19
19
|
import { Worksheet, WorksheetDetail } from '../../../entities'
|
|
20
20
|
|
|
@@ -104,7 +104,9 @@ export const packingWorksheetResolver = {
|
|
|
104
104
|
|
|
105
105
|
if (!worksheet) throw new Error('Worksheet does not exist')
|
|
106
106
|
|
|
107
|
-
if (worksheet.status ===
|
|
107
|
+
if (worksheet.status === WORKSHEET_STATUS.DONE) {
|
|
108
|
+
throw new Error(`Worksheet is completed already`)
|
|
109
|
+
} else if (worksheet.status === WORKSHEET_STATUS.DEACTIVATED) {
|
|
108
110
|
const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
|
|
109
111
|
|
|
110
112
|
const directActivatePackingWorksheet: Setting = await tx.getRepository(Setting).findOne({
|
|
@@ -76,6 +76,7 @@ export async function pickingWorksheet(
|
|
|
76
76
|
.leftJoinAndSelect('T_INV.binLocation', 'BIN_LOC')
|
|
77
77
|
.leftJoinAndSelect('T_INV.inventory', 'INV')
|
|
78
78
|
.leftJoinAndSelect('T_INV.product', 'PROD')
|
|
79
|
+
.leftJoinAndSelect('T_INV.productDetail', 'PROD_DET')
|
|
79
80
|
.leftJoinAndSelect('INV.location', 'LOC')
|
|
80
81
|
|
|
81
82
|
if (locationSortingRules?.length > 0) {
|
|
@@ -114,8 +115,8 @@ export async function pickingWorksheet(
|
|
|
114
115
|
const inventoryChangesCount: number = await tx.getRepository(InventoryChange).count({
|
|
115
116
|
where: {
|
|
116
117
|
inventory: inventory.id,
|
|
117
|
-
status:
|
|
118
|
-
transactionType:
|
|
118
|
+
status: 'PENDING',
|
|
119
|
+
transactionType: 'MISSING'
|
|
119
120
|
},
|
|
120
121
|
relations: ['inventory', 'product']
|
|
121
122
|
})
|
|
@@ -1,38 +1,36 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm'
|
|
2
|
+
|
|
1
3
|
import { User } from '@things-factory/auth-base'
|
|
2
4
|
import { Bizplace } from '@things-factory/biz-base'
|
|
5
|
+
import { ORDER_PRODUCT_STATUS, OrderInventory } from '@things-factory/sales-base'
|
|
3
6
|
import { Domain } from '@things-factory/shell'
|
|
4
|
-
import { OrderInventory, ORDER_PRODUCT_STATUS } from '@things-factory/sales-base'
|
|
5
7
|
import {
|
|
6
8
|
Inventory,
|
|
7
|
-
InventoryHistory,
|
|
8
|
-
InventoryNoGenerator,
|
|
9
9
|
INVENTORY_STATUS,
|
|
10
|
-
INVENTORY_TRANSACTION_TYPE
|
|
10
|
+
INVENTORY_TRANSACTION_TYPE,
|
|
11
|
+
InventoryHistory,
|
|
12
|
+
InventoryNoGenerator
|
|
11
13
|
} from '@things-factory/warehouse-base'
|
|
12
|
-
|
|
14
|
+
|
|
13
15
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
|
|
14
16
|
import { Worksheet, WorksheetDetail } from '../../../entities'
|
|
15
17
|
|
|
16
18
|
export const transfer = {
|
|
17
19
|
async transfer(_: any, { palletId, toPalletId, qty }, context: any) {
|
|
18
|
-
const {
|
|
19
|
-
|
|
20
|
-
domain,
|
|
21
|
-
bizplace,
|
|
22
|
-
user
|
|
23
|
-
}: { tx: EntityManager; domain: Domain; bizplace: Bizplace; user: User } = context.state
|
|
20
|
+
const { tx, domain, bizplace, user }: { tx: EntityManager; domain: Domain; bizplace: Bizplace; user: User } =
|
|
21
|
+
context.state
|
|
24
22
|
|
|
25
23
|
// 1. get to inventory
|
|
26
24
|
let toInventory: Inventory = await tx.getRepository(Inventory).findOne({
|
|
27
25
|
where: { domain: domain, palletId: toPalletId },
|
|
28
|
-
relations: ['bizplace', 'product', 'warehouse', 'location']
|
|
26
|
+
relations: ['bizplace', 'product', 'productDetail', 'warehouse', 'location']
|
|
29
27
|
})
|
|
30
28
|
if (!toInventory) throw new Error(`to pallet doesn't exists`)
|
|
31
29
|
|
|
32
30
|
// 2. get from inventory
|
|
33
31
|
let fromInventory: Inventory = await tx.getRepository(Inventory).findOne({
|
|
34
32
|
where: { domain: domain, palletId },
|
|
35
|
-
relations: ['bizplace', 'product', 'warehouse', 'location']
|
|
33
|
+
relations: ['bizplace', 'product', 'productDetail', 'warehouse', 'location']
|
|
36
34
|
})
|
|
37
35
|
if (!fromInventory) throw new Error(`from pallet doesn't exists`)
|
|
38
36
|
if (toInventory.batchId !== fromInventory.batchId) throw new Error(`Can't transfer to different batch`)
|
|
@@ -74,6 +72,7 @@ export const transfer = {
|
|
|
74
72
|
domain: domain,
|
|
75
73
|
name: InventoryNoGenerator.inventoryHistoryName(),
|
|
76
74
|
product: toInventory.product,
|
|
75
|
+
productDetail: toInventory.productDetail,
|
|
77
76
|
warehouse: toInventory.warehouse,
|
|
78
77
|
location: toInventory.location,
|
|
79
78
|
seq: toInventory.lastSeq,
|
|
@@ -97,7 +96,7 @@ export const transfer = {
|
|
|
97
96
|
|
|
98
97
|
fromInventory = await tx.getRepository(Inventory).findOne({
|
|
99
98
|
where: { id: fromInventory.id },
|
|
100
|
-
relations: ['bizplace', 'product', 'warehouse', 'location']
|
|
99
|
+
relations: ['bizplace', 'product', 'productDetail', 'warehouse', 'location']
|
|
101
100
|
})
|
|
102
101
|
|
|
103
102
|
// - add inventory history
|
|
@@ -105,6 +104,7 @@ export const transfer = {
|
|
|
105
104
|
...fromInventory,
|
|
106
105
|
name: InventoryNoGenerator.inventoryHistoryName(),
|
|
107
106
|
product: fromInventory.product,
|
|
107
|
+
productDetail: fromInventory.productDetail,
|
|
108
108
|
warehouse: fromInventory.warehouse,
|
|
109
109
|
location: fromInventory.location,
|
|
110
110
|
seq: fromInventory.lastSeq,
|
|
@@ -131,7 +131,7 @@ export const transfer = {
|
|
|
131
131
|
|
|
132
132
|
toInventory = await tx.getRepository(Inventory).findOne({
|
|
133
133
|
where: { id: toInventory.id },
|
|
134
|
-
relations: ['bizplace', 'product', 'warehouse', 'location']
|
|
134
|
+
relations: ['bizplace', 'product', 'productDetail', 'warehouse', 'location']
|
|
135
135
|
})
|
|
136
136
|
// - add inventory history
|
|
137
137
|
delete toInventory.id
|
|
@@ -140,6 +140,7 @@ export const transfer = {
|
|
|
140
140
|
domain,
|
|
141
141
|
name: InventoryNoGenerator.inventoryHistoryName(),
|
|
142
142
|
product: toInventory.product,
|
|
143
|
+
productDetail: toInventory.productDetail,
|
|
143
144
|
warehouse: toInventory.warehouse,
|
|
144
145
|
location: toInventory.location,
|
|
145
146
|
seq: toInventory.lastSeq,
|
|
@@ -157,7 +158,7 @@ export const transfer = {
|
|
|
157
158
|
|
|
158
159
|
fromInventory = await tx.getRepository(Inventory).findOne({
|
|
159
160
|
where: { id: fromInventory.id },
|
|
160
|
-
relations: ['bizplace', 'product', 'warehouse', 'location']
|
|
161
|
+
relations: ['bizplace', 'product', 'productDetail', 'warehouse', 'location']
|
|
161
162
|
})
|
|
162
163
|
|
|
163
164
|
// - add inventory history
|
|
@@ -165,6 +166,7 @@ export const transfer = {
|
|
|
165
166
|
...fromInventory,
|
|
166
167
|
name: InventoryNoGenerator.inventoryHistoryName(),
|
|
167
168
|
product: fromInventory.product,
|
|
169
|
+
productDetail: fromInventory.productDetail,
|
|
168
170
|
warehouse: fromInventory.warehouse,
|
|
169
171
|
location: fromInventory.location,
|
|
170
172
|
seq: fromInventory.lastSeq,
|
|
@@ -44,7 +44,7 @@ export const unloadedInventories = {
|
|
|
44
44
|
orderProductId: In(foundWorksheetDetails.map(wsd => wsd.targetProduct.id)),
|
|
45
45
|
status: In([INVENTORY_STATUS.UNLOADED, INVENTORY_STATUS.CHECKED])
|
|
46
46
|
},
|
|
47
|
-
relations: ['reusablePallet', 'product', 'bizplace']
|
|
47
|
+
relations: ['reusablePallet', 'product', 'bizplace', 'inventoryItems']
|
|
48
48
|
})
|
|
49
49
|
const items = foundInv.map((inv: Inventory) => {
|
|
50
50
|
const expirationDate: Date = inv.expirationDate ? new Date(inv.expirationDate) : null
|
|
@@ -19,12 +19,13 @@ import {
|
|
|
19
19
|
InventoryNoGenerator,
|
|
20
20
|
Location,
|
|
21
21
|
Pallet,
|
|
22
|
-
Warehouse
|
|
22
|
+
Warehouse,
|
|
23
|
+
generateInventoryHistory
|
|
23
24
|
} from '@things-factory/warehouse-base'
|
|
24
25
|
|
|
25
26
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
|
|
26
27
|
import { Worksheet, WorksheetDetail } from '../../../../entities'
|
|
27
|
-
import {
|
|
28
|
+
import { WorksheetNoGenerator } from '../../../../utils'
|
|
28
29
|
import {
|
|
29
30
|
OperationGuideInterface,
|
|
30
31
|
PackingUnits,
|
package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts
CHANGED
|
@@ -19,7 +19,7 @@ import { WorksheetNoGenerator } from '../../../utils'
|
|
|
19
19
|
export const regenerateReleaseGoodWorksheetDetailsResolver = {
|
|
20
20
|
async regenerateReleaseGoodWorksheetDetails(
|
|
21
21
|
_: any,
|
|
22
|
-
{ worksheetNo, batchId, productId, packingType, packingSize, orderProductId, worksheetDetails },
|
|
22
|
+
{ worksheetNo, batchId, productId, productDetailId, packingType, packingSize, orderProductId, worksheetDetails },
|
|
23
23
|
context: any
|
|
24
24
|
): Promise<void> {
|
|
25
25
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
@@ -30,6 +30,7 @@ export const regenerateReleaseGoodWorksheetDetailsResolver = {
|
|
|
30
30
|
worksheetNo,
|
|
31
31
|
batchId,
|
|
32
32
|
productId,
|
|
33
|
+
productDetailId,
|
|
33
34
|
packingType,
|
|
34
35
|
packingSize,
|
|
35
36
|
orderProductId,
|
|
@@ -45,6 +46,7 @@ export async function regenerateReleaseGoodWorksheetDetails(
|
|
|
45
46
|
worksheetNo: string,
|
|
46
47
|
batchId: string,
|
|
47
48
|
productId: string,
|
|
49
|
+
productDetailId: string,
|
|
48
50
|
packingType: string,
|
|
49
51
|
packingSize: number,
|
|
50
52
|
orderProductId: string,
|
|
@@ -115,6 +117,7 @@ export async function regenerateReleaseGoodWorksheetDetails(
|
|
|
115
117
|
batchIdRef: inventory.batchIdRef,
|
|
116
118
|
status: ORDER_INVENTORY_STATUS.READY_TO_PICK,
|
|
117
119
|
product: await tx.getRepository(Product).findOne(productId),
|
|
120
|
+
productDetail: productDetailId,
|
|
118
121
|
packingType,
|
|
119
122
|
packingSize,
|
|
120
123
|
orderProduct: targetProduct,
|