@things-factory/worksheet-base 4.3.0-alpha.0 → 4.3.1
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/index.js +1 -5
- package/dist-server/constants/index.js.map +1 -1
- package/dist-server/controllers/ecommerce/index.js +1 -5
- package/dist-server/controllers/ecommerce/index.js.map +1 -1
- package/dist-server/controllers/inbound/index.js +1 -5
- package/dist-server/controllers/inbound/index.js.map +1 -1
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js +9 -3
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/index.js +2 -5
- package/dist-server/controllers/index.js.map +1 -1
- package/dist-server/controllers/inspect/index.js +1 -5
- package/dist-server/controllers/inspect/index.js.map +1 -1
- package/dist-server/controllers/outbound/index.js +1 -5
- package/dist-server/controllers/outbound/index.js.map +1 -1
- package/dist-server/controllers/outbound/loading-worksheet-controller.js +47 -10
- package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +142 -5
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js +116 -20
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/render-fm-grn.js +229 -0
- package/dist-server/controllers/render-fm-grn.js.map +1 -0
- package/dist-server/controllers/render-grn.js +18 -18
- package/dist-server/controllers/vas/index.js +1 -5
- package/dist-server/controllers/vas/index.js.map +1 -1
- package/dist-server/graphql/index.js +1 -5
- package/dist-server/graphql/index.js.map +1 -1
- package/dist-server/graphql/resolvers/index.js +1 -5
- package/dist-server/graphql/resolvers/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +14 -1
- package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/loading.js +3 -10
- package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +55 -21
- package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +1 -0
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +8 -6
- 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/picking.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/picking/picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +10 -1
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js +11 -6
- package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/index.js +1 -5
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.js +1 -5
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/index.js +1 -5
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/index.js +1 -5
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/index.js +1 -5
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/index.js +1 -5
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheet.js +2 -0
- package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheets.js +17 -2
- package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +5 -3
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js +15 -4
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +4 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +6 -2
- package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
- package/dist-server/graphql/types/index.js +1 -5
- package/dist-server/graphql/types/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/index.js +10 -0
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js +1 -0
- package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +2 -0
- package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-info.js +2 -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 -5
- package/dist-server/index.js.map +1 -1
- package/dist-server/routes.js +4 -0
- package/dist-server/routes.js.map +1 -1
- package/dist-server/utils/index.js +1 -5
- package/dist-server/utils/index.js.map +1 -1
- package/package.json +17 -17
- package/server/controllers/inbound/unloading-worksheet-controller.ts +14 -3
- package/server/controllers/index.ts +1 -0
- package/server/controllers/outbound/loading-worksheet-controller.ts +83 -17
- package/server/controllers/outbound/picking-worksheet-controller.ts +178 -7
- package/server/controllers/outbound/sorting-worksheet-controller.ts +167 -27
- package/server/controllers/render-fm-grn.ts +266 -0
- package/server/controllers/render-grn.ts +18 -18
- package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +14 -0
- package/server/graphql/resolvers/worksheet/loading/loading.ts +5 -12
- package/server/graphql/resolvers/worksheet/loading-worksheet.ts +66 -13
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +1 -1
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +1 -1
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +13 -11
- package/server/graphql/resolvers/worksheet/picking/index.ts +3 -1
- package/server/graphql/resolvers/worksheet/picking/picking.ts +30 -4
- package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +7 -4
- package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +25 -0
- package/server/graphql/resolvers/worksheet/picking-worksheet.ts +13 -2
- package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +13 -9
- package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +5 -4
- package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +5 -4
- package/server/graphql/resolvers/worksheet/worksheet.ts +2 -0
- package/server/graphql/resolvers/worksheet/worksheets.ts +26 -2
- package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +12 -3
- package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +22 -7
- package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +6 -2
- package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +7 -1
- package/server/graphql/types/worksheet/index.ts +10 -0
- package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +1 -0
- package/server/graphql/types/worksheet/worksheet-detail-info.ts +2 -0
- package/server/graphql/types/worksheet/worksheet-info.ts +2 -0
- package/server/graphql/types/worksheet/worksheet.ts +1 -0
- package/server/routes.ts +5 -0
|
@@ -6,7 +6,7 @@ import { PickingWorksheetController } from '../../../../controllers'
|
|
|
6
6
|
export const scanProductPickingResolver = {
|
|
7
7
|
async scanProductPicking(
|
|
8
8
|
_: any,
|
|
9
|
-
{ worksheetDetailName, worksheetType, productBarcode, cartonId, binLocation, serialNumber },
|
|
9
|
+
{ worksheetDetailName, worksheetType, productBarcode, cartonId, binLocation, serialNumber, toteNo },
|
|
10
10
|
context: any
|
|
11
11
|
) {
|
|
12
12
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
@@ -19,7 +19,8 @@ export const scanProductPickingResolver = {
|
|
|
19
19
|
productBarcode,
|
|
20
20
|
cartonId,
|
|
21
21
|
binLocation,
|
|
22
|
-
serialNumber
|
|
22
|
+
serialNumber,
|
|
23
|
+
toteNo
|
|
23
24
|
)
|
|
24
25
|
}
|
|
25
26
|
}
|
|
@@ -33,7 +34,8 @@ export async function scanProductPicking(
|
|
|
33
34
|
productBarcode: string,
|
|
34
35
|
cartonId: string,
|
|
35
36
|
binLocation?: string,
|
|
36
|
-
serialNumber?: string
|
|
37
|
+
serialNumber?: string,
|
|
38
|
+
toteNo?: string
|
|
37
39
|
) {
|
|
38
40
|
const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
|
|
39
41
|
await worksheetController.scanProductPicking(
|
|
@@ -42,6 +44,7 @@ export async function scanProductPicking(
|
|
|
42
44
|
productBarcode,
|
|
43
45
|
cartonId,
|
|
44
46
|
binLocation,
|
|
45
|
-
serialNumber
|
|
47
|
+
serialNumber,
|
|
48
|
+
toteNo
|
|
46
49
|
)
|
|
47
50
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
|
+
import { Domain } from '@things-factory/shell'
|
|
5
|
+
|
|
6
|
+
import { PickingWorksheetController } from '../../../../controllers'
|
|
7
|
+
|
|
8
|
+
export const sealToteResolver = {
|
|
9
|
+
async sealTote(_: any, { sealNo, toteNo, orderNo }, context: any) {
|
|
10
|
+
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
11
|
+
await sealTote(tx, domain, user, sealNo, toteNo, orderNo)
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async function sealTote(
|
|
16
|
+
tx: EntityManager,
|
|
17
|
+
domain: Domain,
|
|
18
|
+
user: User,
|
|
19
|
+
sealNo: string,
|
|
20
|
+
toteNo: string,
|
|
21
|
+
orderNo: string
|
|
22
|
+
): Promise<void> {
|
|
23
|
+
const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
|
|
24
|
+
await worksheetController.sealTote(sealNo, toteNo, orderNo)
|
|
25
|
+
}
|
|
@@ -2,7 +2,7 @@ import { EntityManager, In, SelectQueryBuilder } from 'typeorm'
|
|
|
2
2
|
|
|
3
3
|
import { ORDER_INVENTORY_STATUS, OrderInventory, ReleaseGood, ShippingOrder } from '@things-factory/sales-base'
|
|
4
4
|
import { Domain } from '@things-factory/shell'
|
|
5
|
-
import { Inventory, Location } from '@things-factory/warehouse-base'
|
|
5
|
+
import { Inventory, Location, InventoryChange } from '@things-factory/warehouse-base'
|
|
6
6
|
|
|
7
7
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
|
|
8
8
|
import { WorksheetDetail } from '../../../entities'
|
|
@@ -109,6 +109,16 @@ export async function pickingWorksheet(
|
|
|
109
109
|
worksheetDetailInfos: worksheetDetails.map(async (pickingWSD: WorksheetDetail) => {
|
|
110
110
|
const targetInventory: OrderInventory = pickingWSD.targetInventory
|
|
111
111
|
const inventory: Inventory = targetInventory.inventory
|
|
112
|
+
|
|
113
|
+
const inventoryChangesCount: number = await tx.getRepository(InventoryChange).count({
|
|
114
|
+
where: {
|
|
115
|
+
inventory: inventory.id,
|
|
116
|
+
status:"PENDING",
|
|
117
|
+
transactionType:"MISSING"
|
|
118
|
+
},
|
|
119
|
+
relations:['inventory','product']
|
|
120
|
+
})
|
|
121
|
+
|
|
112
122
|
return {
|
|
113
123
|
name: pickingWSD.name,
|
|
114
124
|
palletId: inventory?.palletId,
|
|
@@ -127,7 +137,8 @@ export async function pickingWorksheet(
|
|
|
127
137
|
packingSize: inventory?.packingSize,
|
|
128
138
|
expirationDate: inventory?.expirationDate,
|
|
129
139
|
location: inventory?.location,
|
|
130
|
-
relatedOrderInv: targetInventory
|
|
140
|
+
relatedOrderInv: targetInventory,
|
|
141
|
+
hasMissingInventoryChanges:inventoryChangesCount > 0 ? true:false
|
|
131
142
|
}
|
|
132
143
|
})
|
|
133
144
|
}
|
|
@@ -19,16 +19,20 @@ export async function completeOrderSorting(
|
|
|
19
19
|
user: User,
|
|
20
20
|
releaseGoodNo: string
|
|
21
21
|
): Promise<void> {
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
try {
|
|
23
|
+
const sortingWSCtrl: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
|
|
24
|
+
const releaseGood = await sortingWSCtrl.completeOrderSorting(releaseGoodNo)
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
|
|
27
|
+
let loadingWorksheet: Worksheet = await loadingWSCtrl.generateLoadingWorksheet(
|
|
28
|
+
releaseGood.name,
|
|
29
|
+
releaseGood.orderInventories.filter(itm => itm.status != ORDER_INVENTORY_STATUS.COMPLETE_SPLIT)
|
|
30
|
+
)
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
if (loadingWorksheet.status === WORKSHEET_STATUS.DEACTIVATED) {
|
|
33
|
+
await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheet.worksheetDetails)
|
|
34
|
+
}
|
|
35
|
+
} catch (e) {
|
|
36
|
+
throw e
|
|
33
37
|
}
|
|
34
38
|
}
|
|
@@ -4,9 +4,9 @@ import { EntityManager } from 'typeorm'
|
|
|
4
4
|
import { SortingWorksheetController } from '../../../../controllers'
|
|
5
5
|
|
|
6
6
|
export const scanProductSortingResolver = {
|
|
7
|
-
async scanProductSorting(_: any, { taskNo, releaseGoodNo, productBarcode, serialNumber }, context: any) {
|
|
7
|
+
async scanProductSorting(_: any, { taskNo, releaseGoodNo, productBarcode, serialNumber, toteNo }, context: any) {
|
|
8
8
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
9
|
-
await scanProductSorting(tx, domain, user, taskNo, releaseGoodNo, productBarcode, serialNumber)
|
|
9
|
+
await scanProductSorting(tx, domain, user, taskNo, releaseGoodNo, productBarcode, serialNumber, toteNo)
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
|
|
@@ -17,8 +17,9 @@ export async function scanProductSorting(
|
|
|
17
17
|
taskNo: string,
|
|
18
18
|
releaseGoodNo: string,
|
|
19
19
|
productBarcode?: string,
|
|
20
|
-
serialNumber?: string
|
|
20
|
+
serialNumber?: string,
|
|
21
|
+
toteNo?: string
|
|
21
22
|
) {
|
|
22
23
|
const worksheetController: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
|
|
23
|
-
await worksheetController.scanProductSorting(taskNo, releaseGoodNo, productBarcode, serialNumber)
|
|
24
|
+
await worksheetController.scanProductSorting(taskNo, releaseGoodNo, productBarcode, serialNumber, toteNo)
|
|
24
25
|
}
|
|
@@ -4,9 +4,9 @@ import { EntityManager } from 'typeorm'
|
|
|
4
4
|
import { SortingWorksheetController } from '../../../../controllers'
|
|
5
5
|
|
|
6
6
|
export const sortingProductResolver = {
|
|
7
|
-
async sortingProduct(_: any, { taskNo, releaseGoodNo, productId, sortingQty, serialNumber }, context: any) {
|
|
7
|
+
async sortingProduct(_: any, { taskNo, releaseGoodNo, productId, sortingQty, serialNumber, toteNo }, context: any) {
|
|
8
8
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
9
|
-
await sortingProduct(tx, domain, user, taskNo, releaseGoodNo, productId, sortingQty, serialNumber)
|
|
9
|
+
await sortingProduct(tx, domain, user, taskNo, releaseGoodNo, productId, sortingQty, serialNumber, toteNo)
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
|
|
@@ -18,8 +18,9 @@ export async function sortingProduct(
|
|
|
18
18
|
releaseGoodNo: string,
|
|
19
19
|
productId: string,
|
|
20
20
|
sortingQty: number,
|
|
21
|
-
serialNumber?: string
|
|
21
|
+
serialNumber?: string,
|
|
22
|
+
toteNo?: string
|
|
22
23
|
) {
|
|
23
24
|
const worksheetController: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
|
|
24
|
-
await worksheetController.sortingProduct(taskNo, releaseGoodNo, productId, sortingQty, serialNumber)
|
|
25
|
+
await worksheetController.sortingProduct(taskNo, releaseGoodNo, productId, sortingQty, serialNumber, toteNo)
|
|
25
26
|
}
|
|
@@ -117,6 +117,7 @@ export const worksheetResolver = {
|
|
|
117
117
|
.leftJoinAndSelect('oi.releaseGood', 'releaseGood')
|
|
118
118
|
.leftJoinAndSelect('oi.inventory', 'inventory')
|
|
119
119
|
.leftJoinAndSelect('oi.product', 'product')
|
|
120
|
+
.leftJoinAndSelect('oi.orderProduct', 'orderProduct')
|
|
120
121
|
.leftJoinAndSelect('inventory.location', 'location')
|
|
121
122
|
.leftJoinAndSelect('oi.bizplace', 'bizplace')
|
|
122
123
|
.where('"oi"."domain_id" = :domain')
|
|
@@ -146,6 +147,7 @@ export const worksheetResolver = {
|
|
|
146
147
|
.leftJoinAndSelect('oi.releaseGood', 'releaseGood')
|
|
147
148
|
.leftJoinAndSelect('oi.inventory', 'inventory')
|
|
148
149
|
.leftJoinAndSelect('oi.product', 'product')
|
|
150
|
+
.leftJoinAndSelect('oi.orderProduct', 'orderProduct')
|
|
149
151
|
.leftJoinAndSelect('inventory.location', 'location')
|
|
150
152
|
.leftJoinAndSelect('oi.bizplace', 'bizplace')
|
|
151
153
|
.where('"oi"."domain_id" = :domain')
|
|
@@ -99,13 +99,16 @@ export const worksheetsResolver = {
|
|
|
99
99
|
const releaseGoodCrossDockingParam = params.filters.find(param => param.name === 'crossDocking')
|
|
100
100
|
const releaseGoodCourierOptionParam = params.filters.find(param => param.name === 'courierOption')
|
|
101
101
|
const releaseGoodPackingOptionParam = params.filters.find(param => param.name === 'packingOption')
|
|
102
|
+
const orderRemarkParam = params.filters.find(param => param.name === 'orderRemark')
|
|
103
|
+
|
|
102
104
|
const releaseGoodPickerOptionParam = params.filters.find(param => param.name === 'assignee')
|
|
103
105
|
if (
|
|
104
106
|
releaseGoodParam ||
|
|
105
107
|
releaseGoodRefNoParam ||
|
|
106
108
|
releaseGoodCrossDockingParam ||
|
|
107
109
|
releaseGoodCourierOptionParam ||
|
|
108
|
-
releaseGoodPackingOptionParam
|
|
110
|
+
releaseGoodPackingOptionParam ||
|
|
111
|
+
orderRemarkParam
|
|
109
112
|
) {
|
|
110
113
|
let arrFilters = []
|
|
111
114
|
if (releaseGoodParam) {
|
|
@@ -115,6 +118,7 @@ export const worksheetsResolver = {
|
|
|
115
118
|
)
|
|
116
119
|
arrFilters.push({ ...releaseGoodParam, name: 'name' })
|
|
117
120
|
}
|
|
121
|
+
|
|
118
122
|
if (releaseGoodRefNoParam) {
|
|
119
123
|
params.filters.splice(
|
|
120
124
|
params.filters.findIndex(item => item.name == 'releaseGoodRefNo'),
|
|
@@ -147,6 +151,19 @@ export const worksheetsResolver = {
|
|
|
147
151
|
arrFilters.push({ ...releaseGoodPackingOptionParam, name: 'packingOption' })
|
|
148
152
|
}
|
|
149
153
|
|
|
154
|
+
if (orderRemarkParam) {
|
|
155
|
+
params.filters.splice(
|
|
156
|
+
params.filters.findIndex(item => item.name == 'orderRemark'),
|
|
157
|
+
1
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
if (orderRemarkParam?.value == true) {
|
|
161
|
+
arrFilters.push({ operator: 'is_not_null', name: 'remark' })
|
|
162
|
+
} else if (orderRemarkParam?.value == false) {
|
|
163
|
+
arrFilters.push({ operator: 'is_null', name: 'remark' })
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
150
167
|
const foundReleaseGoods: ReleaseGood[] = await getRepository(ReleaseGood).find({
|
|
151
168
|
...convertListParams({ filters: arrFilters })
|
|
152
169
|
})
|
|
@@ -405,7 +422,14 @@ export const worksheetsResolver = {
|
|
|
405
422
|
|
|
406
423
|
qb.orderBy(sort)
|
|
407
424
|
|
|
408
|
-
|
|
425
|
+
let [items, total] = await qb.getManyAndCount()
|
|
426
|
+
|
|
427
|
+
items = items.map(item => {
|
|
428
|
+
return {
|
|
429
|
+
...item,
|
|
430
|
+
orderRemark: item?.releaseGood?.remark ? true : false
|
|
431
|
+
}
|
|
432
|
+
})
|
|
409
433
|
|
|
410
434
|
return { items, total }
|
|
411
435
|
} catch (error) {
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { EntityManager, getRepository } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { User } from '@things-factory/auth-base'
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
ORDER_INVENTORY_STATUS,
|
|
6
|
+
ORDER_TYPES,
|
|
7
|
+
OrderInventory,
|
|
8
|
+
OrderNoGenerator,
|
|
9
|
+
OrderProduct
|
|
10
|
+
} from '@things-factory/sales-base'
|
|
5
11
|
import { Setting } from '@things-factory/setting-base'
|
|
6
12
|
import { Domain } from '@things-factory/shell'
|
|
7
13
|
import { Inventory } from '@things-factory/warehouse-base'
|
|
@@ -60,7 +66,7 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
|
|
|
60
66
|
packingSize: oi.packingSize,
|
|
61
67
|
status: ORDER_INVENTORY_STATUS.PENDING_SPLIT
|
|
62
68
|
},
|
|
63
|
-
relations: ['product', 'releaseGood', 'bizplace'],
|
|
69
|
+
relations: ['product', 'releaseGood', 'bizplace', 'orderProduct'],
|
|
64
70
|
order: {
|
|
65
71
|
releaseQty: 'DESC'
|
|
66
72
|
}
|
|
@@ -137,7 +143,9 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
|
|
|
137
143
|
creator: user,
|
|
138
144
|
inventory: targetInventory,
|
|
139
145
|
releaseQty: allocatedQty,
|
|
140
|
-
releaseUomValue: allocatedUomValue
|
|
146
|
+
releaseUomValue: allocatedUomValue,
|
|
147
|
+
uom: orderInventory.uom,
|
|
148
|
+
orderProduct: orderInventory.orderProduct
|
|
141
149
|
}
|
|
142
150
|
newTargetInventory = await tx.getRepository(OrderInventory).save(newTargetInventory)
|
|
143
151
|
|
|
@@ -150,6 +158,7 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
|
|
|
150
158
|
bizplace: orderInventory.bizplace,
|
|
151
159
|
name: WorksheetNoGenerator.batchPickingDetail(),
|
|
152
160
|
targetInventory: newTargetInventory,
|
|
161
|
+
targetProduct: newTargetInventory.orderProduct,
|
|
153
162
|
type: WORKSHEET_TYPE.BATCH_PICKING,
|
|
154
163
|
status: WORKSHEET_STATUS.DEACTIVATED,
|
|
155
164
|
creator: user
|
package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts
CHANGED
|
@@ -15,7 +15,7 @@ export const generateBatchPickingWorksheetDetailsResolver = {
|
|
|
15
15
|
context: any
|
|
16
16
|
): Promise<void> {
|
|
17
17
|
const { tx, user, domain }: { tx: EntityManager; user: User; domain: Domain } = context.state
|
|
18
|
-
|
|
18
|
+
|
|
19
19
|
// 1. Find Related Worksheet
|
|
20
20
|
const worksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
|
|
21
21
|
where: { name: worksheetNo, domain },
|
|
@@ -28,14 +28,21 @@ export const generateBatchPickingWorksheetDetailsResolver = {
|
|
|
28
28
|
})
|
|
29
29
|
|
|
30
30
|
// Only proceed if worksheet status IS "DEACTIVATED"
|
|
31
|
-
if(worksheet.status != WORKSHEET_STATUS.DEACTIVATED){
|
|
31
|
+
if (worksheet.status != WORKSHEET_STATUS.DEACTIVATED) {
|
|
32
32
|
return
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
// 2. Find all existing order inventory that is related to the product
|
|
36
36
|
let prevOrdInvs: OrderInventory[] = await tx.getRepository(OrderInventory).find({
|
|
37
|
-
where: {
|
|
38
|
-
|
|
37
|
+
where: {
|
|
38
|
+
domain,
|
|
39
|
+
refWorksheetId: worksheet.id,
|
|
40
|
+
product: productId,
|
|
41
|
+
batchId,
|
|
42
|
+
packingType,
|
|
43
|
+
status: ORDER_INVENTORY_STATUS.PENDING_SPLIT
|
|
44
|
+
},
|
|
45
|
+
relations: ['releaseGood', 'bizplace', 'orderProduct']
|
|
39
46
|
})
|
|
40
47
|
|
|
41
48
|
// Sort all release qty from highest to lowest
|
|
@@ -80,6 +87,8 @@ export const generateBatchPickingWorksheetDetailsResolver = {
|
|
|
80
87
|
newTargetInventory.packingType = prevOrdInv.packingType
|
|
81
88
|
newTargetInventory.packingSize = parseFloat(prevOrdInv.packingSize)
|
|
82
89
|
newTargetInventory.creator = user
|
|
90
|
+
newTargetInventory.uom = selectedOrdInv.uom
|
|
91
|
+
newTargetInventory.orderProduct = prevOrdInv.orderProduct
|
|
83
92
|
|
|
84
93
|
let inventory: Inventory = await tx.getRepository(Inventory).findOne(selectedOrdInv.inventory.id)
|
|
85
94
|
|
|
@@ -100,7 +109,7 @@ export const generateBatchPickingWorksheetDetailsResolver = {
|
|
|
100
109
|
|
|
101
110
|
requiredQty = fulfiledQty <= 0 ? 0 : fulfiledQty
|
|
102
111
|
requiredUomValue = fulfiledUomValue <= 0 ? 0 : fulfiledUomValue
|
|
103
|
-
|
|
112
|
+
|
|
104
113
|
await tx.getRepository(Inventory).update(
|
|
105
114
|
{ domain, id: inventory.id },
|
|
106
115
|
{
|
|
@@ -124,6 +133,7 @@ export const generateBatchPickingWorksheetDetailsResolver = {
|
|
|
124
133
|
bizplace: prevOrdInv.bizplace,
|
|
125
134
|
name: WorksheetNoGenerator.batchPickingDetail(),
|
|
126
135
|
targetInventory: newTargetInventory,
|
|
136
|
+
targetProduct: prevOrdInv.orderProduct,
|
|
127
137
|
type: WORKSHEET_TYPE.BATCH_PICKING,
|
|
128
138
|
status: WORKSHEET_STATUS.DEACTIVATED,
|
|
129
139
|
creator: user
|
|
@@ -134,11 +144,16 @@ export const generateBatchPickingWorksheetDetailsResolver = {
|
|
|
134
144
|
selectedOrdInv.releaseUomValue = remainingUomValue <= 0 ? 0 : remainingUomValue
|
|
135
145
|
|
|
136
146
|
// insufficient qty for current order inventory, use the next inventory qty
|
|
137
|
-
if (selectedOrdInv.releaseQty == 0){
|
|
147
|
+
if (selectedOrdInv.releaseQty == 0) {
|
|
138
148
|
j = j + 1
|
|
139
149
|
}
|
|
140
150
|
}
|
|
141
|
-
await tx
|
|
151
|
+
await tx
|
|
152
|
+
.getRepository(OrderInventory)
|
|
153
|
+
.update(
|
|
154
|
+
{ id: prevOrdInvs[i].id },
|
|
155
|
+
{ status: ORDER_INVENTORY_STATUS.COMPLETE_SPLIT, updater: user, updatedAt: new Date() }
|
|
156
|
+
)
|
|
142
157
|
}
|
|
143
158
|
}
|
|
144
159
|
}
|
|
@@ -7,7 +7,8 @@ import {
|
|
|
7
7
|
OrderInventory,
|
|
8
8
|
OrderInventoryPatch,
|
|
9
9
|
OrderNoGenerator,
|
|
10
|
-
ReleaseGood
|
|
10
|
+
ReleaseGood,
|
|
11
|
+
OrderProduct
|
|
11
12
|
} from '@things-factory/sales-base'
|
|
12
13
|
import { Setting } from '@things-factory/setting-base'
|
|
13
14
|
import { Domain } from '@things-factory/shell'
|
|
@@ -124,6 +125,7 @@ export const generatePickingWorksheetDetailsResolver = {
|
|
|
124
125
|
name: WorksheetNoGenerator.pickingDetail(),
|
|
125
126
|
seq: 0,
|
|
126
127
|
targetInventory,
|
|
128
|
+
targetProduct: targetInventory.orderProduct,
|
|
127
129
|
type: WORKSHEET_TYPE.PICKING,
|
|
128
130
|
status: WORKSHEET_STATUS.DEACTIVATED,
|
|
129
131
|
creator: user,
|
|
@@ -198,7 +200,9 @@ function _composeWorksheetDetails(
|
|
|
198
200
|
creator: user,
|
|
199
201
|
updater: user,
|
|
200
202
|
status: ORDER_INVENTORY_STATUS.READY_TO_PICK,
|
|
201
|
-
type: ORDER_TYPES.RELEASE_OF_GOODS
|
|
203
|
+
type: ORDER_TYPES.RELEASE_OF_GOODS,
|
|
204
|
+
uom: record.uom,
|
|
205
|
+
orderProduct: { id: inv.orderProductId }
|
|
202
206
|
}
|
|
203
207
|
})
|
|
204
208
|
|
package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { EntityManager } from 'typeorm'
|
|
|
2
2
|
|
|
3
3
|
import { User } from '@things-factory/auth-base'
|
|
4
4
|
import { Product } from '@things-factory/product-base'
|
|
5
|
-
import { ORDER_INVENTORY_STATUS, OrderInventory, OrderNoGenerator } from '@things-factory/sales-base'
|
|
5
|
+
import { ORDER_INVENTORY_STATUS, OrderInventory, OrderNoGenerator, OrderProduct } from '@things-factory/sales-base'
|
|
6
6
|
import { Domain } from '@things-factory/shell'
|
|
7
7
|
import { Inventory } from '@things-factory/warehouse-base'
|
|
8
8
|
|
|
@@ -74,6 +74,10 @@ export async function generateReleaseGoodWorksheetDetails(
|
|
|
74
74
|
let targetInventory: OrderInventory = wsd.targetInventory
|
|
75
75
|
const inventory: Inventory = await tx.getRepository(Inventory).findOne(targetInventory.inventory.id)
|
|
76
76
|
|
|
77
|
+
let targetProduct: OrderProduct = await tx
|
|
78
|
+
.getRepository(OrderProduct)
|
|
79
|
+
.findOne({ where: { id: wsd.targetProduct.id } })
|
|
80
|
+
|
|
77
81
|
targetInventory = await tx.getRepository(OrderInventory).save({
|
|
78
82
|
...targetInventory,
|
|
79
83
|
domain,
|
|
@@ -87,6 +91,7 @@ export async function generateReleaseGoodWorksheetDetails(
|
|
|
87
91
|
product: await tx.getRepository(Product).findOne(productId),
|
|
88
92
|
packingType,
|
|
89
93
|
packingSize,
|
|
94
|
+
orderProduct: targetProduct,
|
|
90
95
|
creator: user,
|
|
91
96
|
updater: user
|
|
92
97
|
})
|
|
@@ -112,6 +117,7 @@ export async function generateReleaseGoodWorksheetDetails(
|
|
|
112
117
|
bizplace: worksheet.bizplace,
|
|
113
118
|
worksheet,
|
|
114
119
|
name: WorksheetNoGenerator.pickingDetail(),
|
|
120
|
+
targetProduct,
|
|
115
121
|
targetInventory,
|
|
116
122
|
type: WORKSHEET_TYPE.PICKING,
|
|
117
123
|
status: WORKSHEET_STATUS.DEACTIVATED,
|
|
@@ -179,6 +179,12 @@ export const Mutation = /* GraphQL */ `
|
|
|
179
179
|
inventoryItemId: String!
|
|
180
180
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
181
181
|
|
|
182
|
+
sealTote (
|
|
183
|
+
sealNo: String!
|
|
184
|
+
toteNo: String!
|
|
185
|
+
orderNo: String!
|
|
186
|
+
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
187
|
+
|
|
182
188
|
unload (
|
|
183
189
|
worksheetDetailName: String!
|
|
184
190
|
inventory: InventoryPatch!
|
|
@@ -313,6 +319,7 @@ export const Mutation = /* GraphQL */ `
|
|
|
313
319
|
releaseQty: Int!
|
|
314
320
|
binLocation: String
|
|
315
321
|
serialNumber: String
|
|
322
|
+
toteNo: String
|
|
316
323
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
317
324
|
|
|
318
325
|
scanProductPicking (
|
|
@@ -322,6 +329,7 @@ export const Mutation = /* GraphQL */ `
|
|
|
322
329
|
cartonId: String!
|
|
323
330
|
binLocation: String
|
|
324
331
|
serialNumber: String
|
|
332
|
+
toteNo: String
|
|
325
333
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
326
334
|
|
|
327
335
|
sortingProduct (
|
|
@@ -330,6 +338,7 @@ export const Mutation = /* GraphQL */ `
|
|
|
330
338
|
productId: String!
|
|
331
339
|
sortingQty: Float!
|
|
332
340
|
serialNumber: String
|
|
341
|
+
toteNo: String
|
|
333
342
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
334
343
|
|
|
335
344
|
scanProductSorting (
|
|
@@ -337,6 +346,7 @@ export const Mutation = /* GraphQL */ `
|
|
|
337
346
|
releaseGoodNo: String!
|
|
338
347
|
productBarcode: String!
|
|
339
348
|
serialNumber: String
|
|
349
|
+
toteNo: String
|
|
340
350
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
341
351
|
|
|
342
352
|
packing (
|
|
@@ -12,6 +12,7 @@ export const WorksheetInfo = gql`
|
|
|
12
12
|
bizplace: Bizplace
|
|
13
13
|
containerNo: String
|
|
14
14
|
airwayBill: String
|
|
15
|
+
checkedRemarkBy: String
|
|
15
16
|
invoice: String
|
|
16
17
|
shippingProvider: String
|
|
17
18
|
trackingNo: String
|
|
@@ -22,6 +23,7 @@ export const WorksheetInfo = gql`
|
|
|
22
23
|
startedAt: String
|
|
23
24
|
ownCollection: Boolean
|
|
24
25
|
palletId: String
|
|
26
|
+
status: String
|
|
25
27
|
refNo: String
|
|
26
28
|
refNo2: String
|
|
27
29
|
refNo3: String
|
package/server/routes.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { renderOrientageDO } from './controllers/render-orientage-do'
|
|
|
8
8
|
import { renderOrientageGRN } from './controllers/render-orientage-grn'
|
|
9
9
|
import { renderRODO } from './controllers/render-ro-do'
|
|
10
10
|
import { renderSeebuuGRN } from './controllers/render-seebuu-grn'
|
|
11
|
+
import { renderFmGRN } from './controllers/render-fm-grn'
|
|
11
12
|
import { renderInvoices } from './controllers/render-invoices'
|
|
12
13
|
import { renderPO } from './controllers/render-po'
|
|
13
14
|
|
|
@@ -45,6 +46,10 @@ process.on('bootstrap-module-domain-private-route' as any, (app, routes) => {
|
|
|
45
46
|
context.body = await renderSeebuuGRN(context.params, context)
|
|
46
47
|
})
|
|
47
48
|
|
|
49
|
+
routes.get('/view_fm_grn/:grnNo/:timezoneOffSet', async (context, next) => {
|
|
50
|
+
context.body = await renderFmGRN(context.params, context)
|
|
51
|
+
})
|
|
52
|
+
|
|
48
53
|
routes.get('/view_job_sheet/:ganNo/:timezoneOffSet', async (context, next) => {
|
|
49
54
|
context.body = await renderJobSheet(context.params, context)
|
|
50
55
|
})
|