@things-factory/worksheet-base 5.0.0-alpha.4 → 5.0.0-alpha.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-server/constants/template.js +1 -0
- package/dist-server/constants/template.js.map +1 -1
- package/dist-server/controllers/ecommerce/sellercraft-controller.js +9 -3
- package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js +309 -4
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/index.js +2 -0
- package/dist-server/controllers/index.js.map +1 -1
- package/dist-server/controllers/outbound/loading-worksheet-controller.js +10 -0
- package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/packing-worksheet-controller.js +172 -7
- package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +352 -11
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/returning-worksheet-controller.js +11 -1
- package/dist-server/controllers/outbound/returning-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js +110 -3
- 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 +45 -21
- package/dist-server/controllers/render-grn.js.map +1 -1
- package/dist-server/controllers/render-invoices.js +103 -65
- package/dist-server/controllers/render-invoices.js.map +1 -1
- package/dist-server/controllers/render-orientage-do.js.map +1 -1
- package/dist-server/controllers/render-orientage-grn.js +1 -0
- package/dist-server/controllers/render-orientage-grn.js.map +1 -1
- package/dist-server/controllers/render-po.js +147 -0
- package/dist-server/controllers/render-po.js.map +1 -0
- package/dist-server/controllers/render-ro-do.js +65 -1
- package/dist-server/controllers/render-ro-do.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +15 -0
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +10 -3
- package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +30 -1
- package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js +27 -23
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +3 -0
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +26 -2
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/index.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/packing/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/packing.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +152 -132
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js +13 -10
- package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +6 -19
- 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-assignment-status-by-user.js +49 -58
- package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js.map +1 -0
- 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/sorting-worksheet.js +6 -0
- package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js +3 -2
- package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/index.js +3 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/unloading/unload.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +3 -1
- package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheets.js +18 -0
- 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 +4 -5
- 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-picking-worksheet-details.js +4 -2
- package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
- package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js +11 -0
- package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js.map +1 -0
- package/dist-server/graphql/types/worksheet/index.js +33 -6
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/picking-assignment-status.js +2 -2
- package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +3 -0
- package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-info.js +1 -0
- package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-patch.js +1 -0
- package/dist-server/graphql/types/worksheet/worksheet-patch.js.map +1 -1
- package/dist-server/graphql/types/worksheet-detail/index.js +0 -2
- package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
- package/dist-server/index.js +5 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/routes.js +12 -0
- package/dist-server/routes.js.map +1 -1
- package/dist-server/utils/inventory-util.js +14 -25
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +17 -17
- package/server/constants/template.ts +1 -0
- package/server/controllers/ecommerce/sellercraft-controller.ts +10 -3
- package/server/controllers/inbound/unloading-worksheet-controller.ts +376 -8
- package/server/controllers/index.ts +3 -0
- package/server/controllers/outbound/loading-worksheet-controller.ts +13 -0
- package/server/controllers/outbound/packing-worksheet-controller.ts +224 -9
- package/server/controllers/outbound/picking-worksheet-controller.ts +465 -16
- package/server/controllers/outbound/returning-worksheet-controller.ts +12 -1
- package/server/controllers/outbound/sorting-worksheet-controller.ts +149 -4
- package/server/controllers/render-fm-grn.ts +266 -0
- package/server/controllers/render-grn.ts +57 -23
- package/server/controllers/render-invoices.ts +119 -72
- package/server/controllers/render-orientage-do.ts +11 -11
- package/server/controllers/render-orientage-grn.ts +12 -11
- package/server/controllers/render-po.ts +170 -0
- package/server/controllers/render-ro-do.ts +93 -8
- package/server/controllers/worksheet-controller.ts +18 -2
- package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +13 -4
- package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +35 -2
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.ts +35 -25
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +2 -0
- package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +41 -8
- package/server/graphql/resolvers/worksheet/packing/index.ts +3 -1
- package/server/graphql/resolvers/worksheet/packing/packing.ts +5 -4
- package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +9 -4
- package/server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.ts +24 -0
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +167 -145
- package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +15 -11
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +5 -20
- package/server/graphql/resolvers/worksheet/picking/index.ts +3 -1
- package/server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.ts +62 -61
- package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +24 -0
- 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/sorting-worksheet.ts +6 -0
- package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +6 -2
- package/server/graphql/resolvers/worksheet/unloading/index.ts +4 -0
- package/server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.ts +26 -0
- package/server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.ts +24 -0
- package/server/graphql/resolvers/worksheet/unloading/unload.ts +3 -1
- package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +3 -1
- package/server/graphql/resolvers/worksheet/worksheets.ts +26 -0
- package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +10 -12
- package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +4 -2
- package/server/graphql/types/worksheet/find-release-orders-by-task-no.ts +8 -0
- package/server/graphql/types/worksheet/index.ts +33 -6
- package/server/graphql/types/worksheet/picking-assignment-status.ts +2 -2
- package/server/graphql/types/worksheet/worksheet-detail-info.ts +3 -0
- package/server/graphql/types/worksheet/worksheet-info.ts +1 -0
- package/server/graphql/types/worksheet/worksheet-patch.ts +1 -0
- package/server/graphql/types/worksheet-detail/index.ts +0 -2
- package/server/index.ts +5 -0
- package/server/routes.ts +17 -0
- package/server/utils/inventory-util.ts +15 -23
|
@@ -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 }, context: any) {
|
|
7
|
+
async sortingProduct(_: any, { taskNo, releaseGoodNo, productId, sortingQty, serialNumber }, 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)
|
|
9
|
+
await sortingProduct(tx, domain, user, taskNo, releaseGoodNo, productId, sortingQty, serialNumber)
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
|
|
@@ -17,8 +17,9 @@ export async function sortingProduct(
|
|
|
17
17
|
taskNo: string,
|
|
18
18
|
releaseGoodNo: string,
|
|
19
19
|
productId: string,
|
|
20
|
-
sortingQty: number
|
|
20
|
+
sortingQty: number,
|
|
21
|
+
serialNumber?: string
|
|
21
22
|
) {
|
|
22
23
|
const worksheetController: SortingWorksheetController = new SortingWorksheetController(tx, domain, user)
|
|
23
|
-
await worksheetController.sortingProduct(taskNo, releaseGoodNo, productId, sortingQty)
|
|
24
|
+
await worksheetController.sortingProduct(taskNo, releaseGoodNo, productId, sortingQty, serialNumber)
|
|
24
25
|
}
|
|
@@ -26,22 +26,26 @@ export const sortingWorksheetResolver = {
|
|
|
26
26
|
const qb: SelectQueryBuilder<OrderInventory> = getRepository(OrderInventory).createQueryBuilder('OI')
|
|
27
27
|
qb.select('SUM(OI.releaseQty)', 'releaseQty')
|
|
28
28
|
.addSelect('SUM(OI.sortedQty)', 'sortedQty')
|
|
29
|
+
.addSelect(`string_agg(CONCAT(BIN.name, '(', OI.releaseQty, ')' ), ' ')`, 'binRemarks')
|
|
29
30
|
.addSelect('PROD.id', 'productId')
|
|
30
31
|
.addSelect('PROD.name', 'productName')
|
|
31
32
|
.addSelect('PROD.sku', 'productSku')
|
|
32
33
|
.addSelect('PROD.description', 'productDescription')
|
|
34
|
+
.addSelect('PROD.isRequireSerialNumberScanningOutbound', 'isRequireSerialNumberScanningOutbound')
|
|
33
35
|
.addSelect('OI.batch_id', 'batchId')
|
|
34
36
|
.addSelect('OI.packing_type', 'packingType')
|
|
35
37
|
.addSelect('OI.packing_size', 'packingSize')
|
|
36
38
|
.addSelect('INV.expiration_date', 'expirationDate')
|
|
37
39
|
.leftJoin('OI.product', 'PROD')
|
|
38
40
|
.leftJoin('OI.inventory', 'INV')
|
|
41
|
+
.leftJoin('OI.binLocation', 'BIN')
|
|
39
42
|
.where('OI.release_good_id = :releaseGoodId', { releaseGoodId: releaseGood?.id })
|
|
40
43
|
.andWhere('OI.status <> :releaseGoodStatus', { releaseGoodStatus: ORDER_INVENTORY_STATUS.COMPLETE_SPLIT })
|
|
41
44
|
.groupBy('PROD.id')
|
|
42
45
|
.addGroupBy('PROD.name')
|
|
43
46
|
.addGroupBy('PROD.sku')
|
|
44
47
|
.addGroupBy('PROD.description')
|
|
48
|
+
.addGroupBy('PROD.isRequireSerialNumberScanningOutbound')
|
|
45
49
|
.addGroupBy('INV.expiration_date')
|
|
46
50
|
.addGroupBy('OI.batch_id')
|
|
47
51
|
.addGroupBy('OI.packing_type')
|
|
@@ -67,12 +71,14 @@ export const sortingWorksheetResolver = {
|
|
|
67
71
|
productSku: item?.productSku,
|
|
68
72
|
productName: item?.productName,
|
|
69
73
|
productDescription: item?.productDescription,
|
|
74
|
+
isRequireSerialNumberScanningOutbound: item?.isRequireSerialNumberScanningOutbound,
|
|
70
75
|
releaseQty: item.releaseQty,
|
|
71
76
|
sortedQty: item.sortedQty,
|
|
72
77
|
status: item.status,
|
|
73
78
|
expirationDate: item?.expirationDate,
|
|
74
79
|
packingType: item?.packingType,
|
|
75
80
|
packingSize: item?.packingSize,
|
|
81
|
+
binRemarks: item?.binRemarks,
|
|
76
82
|
releaseGood
|
|
77
83
|
}
|
|
78
84
|
})
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { getRepository, In } from 'typeorm'
|
|
2
|
+
|
|
1
3
|
import { ArrivalNotice, Bizplace, ReturnOrder } from '@things-factory/sales-base'
|
|
2
4
|
import { Domain } from '@things-factory/shell'
|
|
3
5
|
import { Inventory, INVENTORY_STATUS } from '@things-factory/warehouse-base'
|
|
4
|
-
|
|
6
|
+
|
|
5
7
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
|
|
6
8
|
import { WorksheetDetail } from '../../../entities'
|
|
7
9
|
|
|
@@ -46,9 +48,11 @@ export const unloadedInventories = {
|
|
|
46
48
|
})
|
|
47
49
|
const items = foundInv.map((inv: Inventory) => {
|
|
48
50
|
const expirationDate: Date = inv.expirationDate ? new Date(inv.expirationDate) : null
|
|
51
|
+
const manufactureDate: Date = inv.manufactureDate ? new Date(inv.manufactureDate) : null
|
|
49
52
|
return {
|
|
50
53
|
...inv,
|
|
51
|
-
expirationDate: expirationDate
|
|
54
|
+
expirationDate: expirationDate,
|
|
55
|
+
manufactureDate: manufactureDate
|
|
52
56
|
}
|
|
53
57
|
})
|
|
54
58
|
|
|
@@ -3,14 +3,18 @@ import { completeProductScanUnloadResolver } from './complete-product-scan-unloa
|
|
|
3
3
|
import { completeUnloadingResolver } from './complete-unloading'
|
|
4
4
|
import { completeUnloadingPartiallyResolver } from './complete-unloading-partially'
|
|
5
5
|
import { scanProductUnloadResolver } from './scan-product-unload'
|
|
6
|
+
import { scanSerialNumberUnloadResolver } from './scan-serial-number-unload'
|
|
7
|
+
import { undoSerialNumberUnloadResolver } from './undo-serial-number-unload'
|
|
6
8
|
import { undoUnloadingResolver } from './undo-unloading'
|
|
7
9
|
import { unloadResolver } from './unload'
|
|
8
10
|
|
|
9
11
|
export const Mutations = {
|
|
10
12
|
...activateUnloadingResolver,
|
|
11
13
|
...scanProductUnloadResolver,
|
|
14
|
+
...scanSerialNumberUnloadResolver,
|
|
12
15
|
...unloadResolver,
|
|
13
16
|
...undoUnloadingResolver,
|
|
17
|
+
...undoSerialNumberUnloadResolver,
|
|
14
18
|
...completeProductScanUnloadResolver,
|
|
15
19
|
...completeUnloadingResolver,
|
|
16
20
|
...completeUnloadingPartiallyResolver
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
|
+
import { Domain } from '@things-factory/shell'
|
|
5
|
+
import { Inventory } from '@things-factory/warehouse-base'
|
|
6
|
+
|
|
7
|
+
import { UnloadingWorksheetController } from '../../../../controllers'
|
|
8
|
+
|
|
9
|
+
export const scanSerialNumberUnloadResolver = {
|
|
10
|
+
async scanSerialNumberUnload(_: any, { worksheetDetailName, serialNumber, inventory }, context: any) {
|
|
11
|
+
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
12
|
+
await scanSerialNumberUnload(tx, domain, user, worksheetDetailName, serialNumber, inventory)
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async function scanSerialNumberUnload(
|
|
17
|
+
tx: EntityManager,
|
|
18
|
+
domain: Domain,
|
|
19
|
+
user: User,
|
|
20
|
+
worksheetDetailName: string,
|
|
21
|
+
serialNumber: string,
|
|
22
|
+
inventory: Partial<Inventory>
|
|
23
|
+
): Promise<void> {
|
|
24
|
+
const worksheetController: UnloadingWorksheetController = new UnloadingWorksheetController(tx, domain, user)
|
|
25
|
+
await worksheetController.scanSerialNumberUnload(worksheetDetailName, serialNumber, inventory)
|
|
26
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
|
+
import { Domain } from '@things-factory/shell'
|
|
5
|
+
|
|
6
|
+
import { UnloadingWorksheetController } from '../../../../controllers'
|
|
7
|
+
|
|
8
|
+
export const undoSerialNumberUnloadResolver = {
|
|
9
|
+
async undoSerialNumberUnload(_: any, { worksheetDetailName, inventoryItemId }, context: any) {
|
|
10
|
+
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
11
|
+
await undoSerialNumberUnload(tx, domain, user, worksheetDetailName, inventoryItemId)
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async function undoSerialNumberUnload(
|
|
16
|
+
tx: EntityManager,
|
|
17
|
+
domain: Domain,
|
|
18
|
+
user: User,
|
|
19
|
+
worksheetDetailName: string,
|
|
20
|
+
inventoryItemId: string
|
|
21
|
+
): Promise<void> {
|
|
22
|
+
const worksheetController: UnloadingWorksheetController = new UnloadingWorksheetController(tx, domain, user)
|
|
23
|
+
await worksheetController.undoSerialNumberUnload(worksheetDetailName, inventoryItemId)
|
|
24
|
+
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm'
|
|
2
|
+
|
|
1
3
|
import { User } from '@things-factory/auth-base'
|
|
2
4
|
import { Domain } from '@things-factory/shell'
|
|
3
5
|
import { Inventory } from '@things-factory/warehouse-base'
|
|
4
|
-
|
|
6
|
+
|
|
5
7
|
import { UnloadingWorksheetController } from '../../../../controllers'
|
|
6
8
|
|
|
7
9
|
export const unloadResolver = {
|
|
@@ -59,6 +59,7 @@ export const unloadingWorksheetResolver = {
|
|
|
59
59
|
|
|
60
60
|
return {
|
|
61
61
|
worksheetInfo: {
|
|
62
|
+
arrivalNotice,
|
|
62
63
|
bizplaceName: customerBizplace.name,
|
|
63
64
|
partnerDomainId: customerBizplace?.domain.id,
|
|
64
65
|
customerCompanyDomainId: customerCompanyDomain.id,
|
|
@@ -90,7 +91,8 @@ export const unloadingWorksheetResolver = {
|
|
|
90
91
|
actualPackQty: targetProduct.actualPackQty,
|
|
91
92
|
remark: targetProduct.remark,
|
|
92
93
|
issue: productWSD.issue,
|
|
93
|
-
status: productWSD.status
|
|
94
|
+
status: productWSD.status,
|
|
95
|
+
manufactureDate: targetProduct.manufactureDate ? new Date(targetProduct.manufactureDate) : null
|
|
94
96
|
}
|
|
95
97
|
})
|
|
96
98
|
}
|
|
@@ -99,6 +99,7 @@ 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 releaseGoodPickerOptionParam = params.filters.find(param => param.name === 'assignee')
|
|
102
103
|
if (
|
|
103
104
|
releaseGoodParam ||
|
|
104
105
|
releaseGoodRefNoParam ||
|
|
@@ -252,6 +253,31 @@ export const worksheetsResolver = {
|
|
|
252
253
|
}
|
|
253
254
|
}
|
|
254
255
|
|
|
256
|
+
//find assignee
|
|
257
|
+
|
|
258
|
+
const assigneeParam = params.filters.find(param => param.name === 'assignee')
|
|
259
|
+
let assigneeFilter = []
|
|
260
|
+
if (assigneeParam) {
|
|
261
|
+
params.filters.splice(
|
|
262
|
+
params.filters.findIndex(item => item.name == 'assignee'),
|
|
263
|
+
1
|
|
264
|
+
)
|
|
265
|
+
assigneeFilter.push({ ...assigneeParam, name: 'name' })
|
|
266
|
+
|
|
267
|
+
const foundAssignee: User[] = await getRepository(User).find({
|
|
268
|
+
...convertListParams({ filters: assigneeFilter })
|
|
269
|
+
})
|
|
270
|
+
|
|
271
|
+
if (foundAssignee) {
|
|
272
|
+
params.filters.push({
|
|
273
|
+
name: 'assigneeId',
|
|
274
|
+
operator: 'in',
|
|
275
|
+
value: foundAssignee.map((foundIC: User) => foundIC.id),
|
|
276
|
+
relation: false
|
|
277
|
+
})
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
255
281
|
////Set default bizplace filter
|
|
256
282
|
const bizplaceFilter = params.filters.find(param => param.name === 'bizplaceId')
|
|
257
283
|
if (!bizplaceFilter && typeParam.value[0] !== WORKSHEET_TYPE.BATCH_PICKING) {
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import {
|
|
1
|
+
import { EntityManager, getRepository } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
|
+
import { ORDER_INVENTORY_STATUS, ORDER_TYPES, OrderInventory, OrderNoGenerator } from '@things-factory/sales-base'
|
|
4
5
|
import { Setting } from '@things-factory/setting-base'
|
|
5
|
-
import {
|
|
6
|
+
import { Domain } from '@things-factory/shell'
|
|
7
|
+
import { Inventory } from '@things-factory/warehouse-base'
|
|
8
|
+
|
|
6
9
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
|
|
7
10
|
import { Worksheet, WorksheetDetail } from '../../../entities'
|
|
8
|
-
import {
|
|
9
|
-
import { User } from '@things-factory/auth-base'
|
|
10
|
-
import { Domain } from '@things-factory/shell'
|
|
11
|
-
import { generateBatchPickingWorksheetDetailsResolver } from './generate-batch-picking-worksheet-details'
|
|
12
|
-
import orderBy from 'lodash/orderBy'
|
|
11
|
+
import { inventoriesByStrategy, WorksheetNoGenerator } from '../../../utils'
|
|
13
12
|
|
|
14
13
|
export const generateBatchPickingWorksheetDetailsByBulkResolver = {
|
|
15
14
|
async generateBatchPickingWorksheetDetailsByBulk(
|
|
16
15
|
_: any,
|
|
17
|
-
{ worksheetId, bizplaceId, selectedItems
|
|
16
|
+
{ worksheetId, bizplaceId, selectedItems },
|
|
18
17
|
context: any
|
|
19
18
|
): Promise<Boolean> {
|
|
20
19
|
const { tx, user, domain }: { tx: EntityManager; user: User; domain: Domain } = context.state
|
|
@@ -50,7 +49,7 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
|
|
|
50
49
|
})
|
|
51
50
|
|
|
52
51
|
await Promise.all(
|
|
53
|
-
selectedItems.map(async (oi: OrderInventory) => {
|
|
52
|
+
selectedItems.map(async (oi: OrderInventory & { pickingStrategy: string }) => {
|
|
54
53
|
try {
|
|
55
54
|
let pOrderInventories = tx.getRepository(OrderInventory).find({
|
|
56
55
|
where: {
|
|
@@ -72,7 +71,6 @@ export const generateBatchPickingWorksheetDetailsByBulkResolver = {
|
|
|
72
71
|
...oi,
|
|
73
72
|
worksheetId: worksheet.id,
|
|
74
73
|
bizplaceId,
|
|
75
|
-
pickingStrategy,
|
|
76
74
|
locationSortingRules: inventoryAssignmentSetting ? JSON.parse(inventoryAssignmentSetting.value) : false
|
|
77
75
|
},
|
|
78
76
|
domain,
|
|
@@ -20,7 +20,7 @@ import { WorksheetNoGenerator } from '../../../utils'
|
|
|
20
20
|
export const generatePickingWorksheetDetailsResolver = {
|
|
21
21
|
async generatePickingWorksheetDetails(
|
|
22
22
|
_: any,
|
|
23
|
-
{ bizplaceId, selectedItems,
|
|
23
|
+
{ bizplaceId, selectedItems, worksheetNo, locationSortingRules },
|
|
24
24
|
context: any
|
|
25
25
|
): Promise<Boolean> {
|
|
26
26
|
const { tx, user, domain }: { tx: EntityManager; user: User; domain: Domain } = context.state
|
|
@@ -54,7 +54,6 @@ export const generatePickingWorksheetDetailsResolver = {
|
|
|
54
54
|
bizplaceId,
|
|
55
55
|
worksheetId,
|
|
56
56
|
selectedItems,
|
|
57
|
-
pickingStrategy,
|
|
58
57
|
locationSortingRules,
|
|
59
58
|
tx
|
|
60
59
|
)
|
|
@@ -162,6 +161,9 @@ function _composeWorksheetDetails(
|
|
|
162
161
|
|
|
163
162
|
while (compReleaseQty < record.releaseQty) {
|
|
164
163
|
const inv = inventories[idx]
|
|
164
|
+
|
|
165
|
+
if (!inv) break
|
|
166
|
+
|
|
165
167
|
let releaseQty: number = 0
|
|
166
168
|
let releaseUomValue: number = 0
|
|
167
169
|
|
|
@@ -22,6 +22,7 @@ import { WorksheetInfo } from './worksheet-info'
|
|
|
22
22
|
import { WorksheetList } from './worksheet-list'
|
|
23
23
|
import { WorksheetPatch } from './worksheet-patch'
|
|
24
24
|
import { WorksheetWithPagination } from './worksheet-with-pagination'
|
|
25
|
+
import { FindReleaseOrdersByTaskNo } from './find-release-orders-by-task-no'
|
|
25
26
|
|
|
26
27
|
export const Mutation = /* GraphQL */ `
|
|
27
28
|
createWorksheet (
|
|
@@ -164,10 +165,20 @@ export const Mutation = /* GraphQL */ `
|
|
|
164
165
|
worksheetNo: [String!]!
|
|
165
166
|
): [Worksheet] @privilege(category: "worksheet_control", privilege: "mutation") @transaction
|
|
166
167
|
|
|
168
|
+
undoSerialNumberPacking (
|
|
169
|
+
worksheetDetailName: String!
|
|
170
|
+
inventoryItemId: String!
|
|
171
|
+
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
172
|
+
|
|
167
173
|
activateBatchPicking (
|
|
168
174
|
worksheetNo: String!
|
|
169
175
|
): Worksheet @privilege(category: "worksheet_control", privilege: "mutation") @transaction
|
|
170
176
|
|
|
177
|
+
undoSerialNumberPicking (
|
|
178
|
+
worksheetDetailName: String!
|
|
179
|
+
inventoryItemId: String!
|
|
180
|
+
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
181
|
+
|
|
171
182
|
unload (
|
|
172
183
|
worksheetDetailName: String!
|
|
173
184
|
inventory: InventoryPatch!
|
|
@@ -185,6 +196,12 @@ export const Mutation = /* GraphQL */ `
|
|
|
185
196
|
inventory: InventoryPatch!
|
|
186
197
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
187
198
|
|
|
199
|
+
scanSerialNumberUnload (
|
|
200
|
+
worksheetDetailName: String!
|
|
201
|
+
serialNumber: String!
|
|
202
|
+
inventory: InventoryPatch!
|
|
203
|
+
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
204
|
+
|
|
188
205
|
cycleCountAdjustment (
|
|
189
206
|
cycleCountNo: String!
|
|
190
207
|
): Boolean @transaction
|
|
@@ -195,6 +212,11 @@ export const Mutation = /* GraphQL */ `
|
|
|
195
212
|
inventoryIds: [String]!
|
|
196
213
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
197
214
|
|
|
215
|
+
undoSerialNumberUnload (
|
|
216
|
+
worksheetDetailName: String!
|
|
217
|
+
inventoryItemId: String!
|
|
218
|
+
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
219
|
+
|
|
198
220
|
completeUnloadingPartially (
|
|
199
221
|
arrivalNoticeNo: String!
|
|
200
222
|
worksheetDetail: [WorksheetDetailPatch!]
|
|
@@ -307,22 +329,26 @@ export const Mutation = /* GraphQL */ `
|
|
|
307
329
|
releaseGoodNo: String!
|
|
308
330
|
productId: String!
|
|
309
331
|
sortingQty: Float!
|
|
332
|
+
serialNumber: String
|
|
310
333
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
311
334
|
|
|
312
335
|
scanProductSorting (
|
|
313
336
|
taskNo: String!
|
|
314
337
|
releaseGoodNo: String!
|
|
315
338
|
productBarcode: String!
|
|
339
|
+
serialNumber: String
|
|
316
340
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
317
341
|
|
|
318
342
|
packing (
|
|
319
343
|
worksheetDetailName: String!
|
|
320
344
|
releaseQty: Int!
|
|
345
|
+
serialNumber: String
|
|
321
346
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
322
347
|
|
|
323
348
|
scanProductPacking (
|
|
324
349
|
worksheetDetailName: String!
|
|
325
350
|
productBarcode: String!
|
|
351
|
+
serialNumber: String
|
|
326
352
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
327
353
|
|
|
328
354
|
batchPicking (
|
|
@@ -514,7 +540,7 @@ export const Mutation = /* GraphQL */ `
|
|
|
514
540
|
): Boolean @privilege(category: "worksheet_control", privilege: "mutation") @transaction
|
|
515
541
|
|
|
516
542
|
assignPickingWorker (
|
|
517
|
-
worksheetId: String!
|
|
543
|
+
worksheetId: [String]!
|
|
518
544
|
userId: String!
|
|
519
545
|
): Boolean @privilege(category: "worksheet_control", privilege: "mutation") @transaction
|
|
520
546
|
|
|
@@ -655,16 +681,16 @@ export const Query = /* GraphQL */ `
|
|
|
655
681
|
): [Inventory] @privilege(category: "worksheet", privilege: "query")
|
|
656
682
|
|
|
657
683
|
pickingAssignmentStatusByUsers(
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
684
|
+
filters: [Filter],
|
|
685
|
+
pagination: Pagination,
|
|
686
|
+
sortings: [Sorting]
|
|
661
687
|
): [PickingAssignmentStatus] @privilege(category: "worksheet", privilege: "query")
|
|
662
688
|
|
|
663
689
|
myPickingAssignmentStatus: MyPickingAssignmentStatus @privilege(category: "worksheet", privilege: "query")
|
|
664
690
|
|
|
665
691
|
recommendPutawayLocation(worksheetDetailName: String!, optCnt: Int): [Location] @privilege(category: "worksheet", privilege: "query")
|
|
666
692
|
|
|
667
|
-
findReleaseOrdersByTaskNo(taskNo: String!):
|
|
693
|
+
findReleaseOrdersByTaskNo(taskNo: String!): FindReleaseOrdersByTaskNo @privilege(category: "worksheet", privilege: "query") @transaction
|
|
668
694
|
`
|
|
669
695
|
|
|
670
696
|
export const Types = /* GraphQL */ [
|
|
@@ -691,5 +717,6 @@ export const Types = /* GraphQL */ [
|
|
|
691
717
|
ProductApproval,
|
|
692
718
|
WorksheetWithPagination,
|
|
693
719
|
PickingAssignmentStatus,
|
|
694
|
-
MyPickingAssignmentStatus
|
|
720
|
+
MyPickingAssignmentStatus,
|
|
721
|
+
FindReleaseOrdersByTaskNo
|
|
695
722
|
]
|
|
@@ -41,13 +41,11 @@ export const Mutation = /* GraphQL */ `
|
|
|
41
41
|
bizplaceId: String
|
|
42
42
|
locationSortingRules: [Sorting]
|
|
43
43
|
selectedItems: [OrderInventoryPatch]!
|
|
44
|
-
pickingStrategy: String!
|
|
45
44
|
): Boolean @transaction
|
|
46
45
|
|
|
47
46
|
generatePickingWorksheetDetails(
|
|
48
47
|
bizplaceId: String!
|
|
49
48
|
selectedItems: [OrderInventoryPatch]!
|
|
50
|
-
pickingStrategy: String!
|
|
51
49
|
worksheetNo: String!
|
|
52
50
|
locationSortingRules: [Sorting]
|
|
53
51
|
): Boolean @transaction
|
package/server/index.ts
CHANGED
|
@@ -5,4 +5,9 @@ export * from './entities'
|
|
|
5
5
|
export * from './graphql'
|
|
6
6
|
export * from './graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet'
|
|
7
7
|
export * from './graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details'
|
|
8
|
+
export * from './graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet'
|
|
9
|
+
export * from './graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details'
|
|
10
|
+
export * from './graphql/resolvers/worksheet/unloading/activate-unloading'
|
|
11
|
+
export * from './graphql/resolvers/worksheet/picking/activate-picking'
|
|
8
12
|
export * from './migrations'
|
|
13
|
+
export * from './controllers'
|
package/server/routes.ts
CHANGED
|
@@ -8,7 +8,10 @@ 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'
|
|
13
|
+
import { renderPO } from './controllers/render-po'
|
|
14
|
+
|
|
12
15
|
|
|
13
16
|
process.on('bootstrap-module-domain-private-route' as any, (app, routes) => {
|
|
14
17
|
routes.get('/view_document_ro_do/:doNo', async (context, next) => {
|
|
@@ -43,6 +46,10 @@ process.on('bootstrap-module-domain-private-route' as any, (app, routes) => {
|
|
|
43
46
|
context.body = await renderSeebuuGRN(context.params, context)
|
|
44
47
|
})
|
|
45
48
|
|
|
49
|
+
routes.get('/view_fm_grn/:grnNo/:timezoneOffSet', async (context, next) => {
|
|
50
|
+
context.body = await renderFmGRN(context.params, context)
|
|
51
|
+
})
|
|
52
|
+
|
|
46
53
|
routes.get('/view_job_sheet/:ganNo/:timezoneOffSet', async (context, next) => {
|
|
47
54
|
context.body = await renderJobSheet(context.params, context)
|
|
48
55
|
})
|
|
@@ -60,4 +67,14 @@ process.on('bootstrap-module-domain-private-route' as any, (app, routes) => {
|
|
|
60
67
|
context.type = 'application/json'
|
|
61
68
|
context.body = data
|
|
62
69
|
})
|
|
70
|
+
|
|
71
|
+
routes.post('/view_purchase_orders/:timezoneOffSet', async (context, next) => {
|
|
72
|
+
let req = context.request.body || {}
|
|
73
|
+
let timezoneOffSet = context.params.timezoneOffSet || 0
|
|
74
|
+
|
|
75
|
+
let data = await renderPO({ req, timezoneOffSet }, context)
|
|
76
|
+
|
|
77
|
+
context.type = 'application/json'
|
|
78
|
+
context.body = data
|
|
79
|
+
})
|
|
63
80
|
})
|
|
@@ -265,7 +265,9 @@ export async function inventoriesByStrategy(
|
|
|
265
265
|
.andWhere('"INV"."packing_size" = :packingSize')
|
|
266
266
|
.andWhere('"INV"."uom" = :uom')
|
|
267
267
|
.andWhere('"INV"."status" = :status', { status: 'STORED' })
|
|
268
|
-
.andWhere('"LOC"."type" NOT IN (:...locationTypes)', {
|
|
268
|
+
.andWhere('"LOC"."type" NOT IN (:...locationTypes)', {
|
|
269
|
+
locationTypes: [LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE]
|
|
270
|
+
})
|
|
269
271
|
.setParameters({
|
|
270
272
|
domainId: domain.id,
|
|
271
273
|
productId,
|
|
@@ -289,12 +291,7 @@ export async function inventoriesByStrategy(
|
|
|
289
291
|
qb.orderBy('"INV"."created_at"', 'ASC')
|
|
290
292
|
if (locationSortingRules) {
|
|
291
293
|
for (const key in locationSortingRules) {
|
|
292
|
-
|
|
293
|
-
qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
|
|
294
|
-
} else {
|
|
295
|
-
qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
|
|
296
|
-
}
|
|
297
|
-
++locIdx
|
|
294
|
+
qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
|
|
298
295
|
}
|
|
299
296
|
}
|
|
300
297
|
break
|
|
@@ -303,12 +300,7 @@ export async function inventoriesByStrategy(
|
|
|
303
300
|
qb.orderBy('"INV"."created_at"', 'DESC')
|
|
304
301
|
if (locationSortingRules) {
|
|
305
302
|
for (const key in locationSortingRules) {
|
|
306
|
-
|
|
307
|
-
qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
|
|
308
|
-
} else {
|
|
309
|
-
qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
|
|
310
|
-
}
|
|
311
|
-
++locIdx
|
|
303
|
+
qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
|
|
312
304
|
}
|
|
313
305
|
}
|
|
314
306
|
break
|
|
@@ -317,12 +309,16 @@ export async function inventoriesByStrategy(
|
|
|
317
309
|
qb.orderBy('"INV"."expiration_date"', 'ASC')
|
|
318
310
|
if (locationSortingRules) {
|
|
319
311
|
for (const key in locationSortingRules) {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
312
|
+
qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
break
|
|
316
|
+
|
|
317
|
+
case 'FMFO':
|
|
318
|
+
qb.orderBy('"INV"."manufacture_date"', 'ASC')
|
|
319
|
+
if (locationSortingRules) {
|
|
320
|
+
for (const key in locationSortingRules) {
|
|
321
|
+
qb.addOrderBy(`LOC.${key}`, locationSortingRules[key])
|
|
326
322
|
}
|
|
327
323
|
}
|
|
328
324
|
break
|
|
@@ -338,10 +334,6 @@ export async function inventoriesByStrategy(
|
|
|
338
334
|
++locIdx
|
|
339
335
|
}
|
|
340
336
|
} else qb.orderBy('"LOC"."name"', 'DESC')
|
|
341
|
-
break
|
|
342
|
-
default:
|
|
343
|
-
qb.orderBy('"INV"."created_at"', 'ASC')
|
|
344
|
-
|
|
345
337
|
break
|
|
346
338
|
}
|
|
347
339
|
|