@things-factory/worksheet-base 3.8.0 → 3.8.4
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/ecommerce/sellercraft-controller.js +1 -1
- package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
- package/dist-server/controllers/outbound/packing-worksheet-controller.js +2 -6
- package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +12 -14
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/render-elccl-grn.js +6 -6
- package/dist-server/controllers/render-elccl-grn.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +5 -5
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +3 -2
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js +64 -54
- package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map +1 -1
- package/dist-server/utils/inventory-util.js +0 -2
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +7 -7
- package/server/controllers/ecommerce/sellercraft-controller.ts +2 -2
- package/server/controllers/outbound/packing-worksheet-controller.ts +2 -7
- package/server/controllers/outbound/picking-worksheet-controller.ts +32 -38
- package/server/controllers/render-elccl-grn.ts +8 -6
- package/server/controllers/worksheet-controller.ts +5 -5
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +3 -1
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +3 -2
- package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +67 -56
- package/server/utils/inventory-util.ts +0 -2
|
@@ -45,7 +45,7 @@ export async function completePicking(
|
|
|
45
45
|
releaseGoodNo: string
|
|
46
46
|
): Promise<void> {
|
|
47
47
|
const pickingWSCtrl: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
|
|
48
|
-
|
|
48
|
+
let releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
|
|
49
49
|
where: { domain, name: releaseGoodNo },
|
|
50
50
|
relations: [
|
|
51
51
|
'bizplace',
|
|
@@ -53,6 +53,7 @@ export async function completePicking(
|
|
|
53
53
|
'bizplace.company',
|
|
54
54
|
'bizplace.company.domain',
|
|
55
55
|
'orderInventories',
|
|
56
|
+
'orderInventories.inventory',
|
|
56
57
|
'orderInventories.product'
|
|
57
58
|
]
|
|
58
59
|
})
|
|
@@ -84,7 +85,7 @@ export async function completePicking(
|
|
|
84
85
|
|
|
85
86
|
if (sellercraft) {
|
|
86
87
|
const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
|
|
87
|
-
await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
|
|
88
|
+
releaseGood = await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
|
|
88
89
|
await sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
|
|
89
90
|
} else {
|
|
90
91
|
const companyDomain: Domain = releaseGood.bizplace.company.domain
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EntityManager, getRepository } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { User } from '@things-factory/auth-base'
|
|
4
|
+
import { ReleaseGood, OrderInventory } from '@things-factory/sales-base'
|
|
4
5
|
import { Setting } from '@things-factory/setting-base'
|
|
5
6
|
import { Domain } from '@things-factory/shell'
|
|
6
7
|
|
|
@@ -10,69 +11,79 @@ import { pickingWorksheet } from '../picking-worksheet'
|
|
|
10
11
|
import { activatePicking } from './activate-picking'
|
|
11
12
|
|
|
12
13
|
export const fetchAndAssignPickingTaskResolver = {
|
|
13
|
-
async fetchAndAssignPickingTask(_: any, {}, context: any) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
async fetchAndAssignPickingTask(_: any, { }, context: any) {
|
|
15
|
+
try {
|
|
16
|
+
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
17
|
+
const assignee: User = await tx.getRepository(User).findOne(user.id, { relations: ['domains'] })
|
|
18
|
+
if ((assignee?.domains || []).every((userDomain: Domain) => userDomain.id !== domain.id))
|
|
19
|
+
throw new Error('Target user is not belong to current domain')
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
if (!assignee) throw new Error('failed to find target user')
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
})
|
|
23
|
+
let worksheet: any
|
|
24
|
+
let worksheetQb = await tx.getRepository(Worksheet).createQueryBuilder('ws')
|
|
25
|
+
.select('ws.id')
|
|
26
|
+
.addSelect('ws.name')
|
|
27
|
+
.addSelect('ws.status')
|
|
28
|
+
.addSelect('ws.release_good_id')
|
|
29
|
+
.where('(ws.domain_id = :domain_id AND ws.type = :type AND ws.assignee_id =:assignee AND (ws.status = :status1 OR ws.status = :status2))', { domain_id: domain.id, type: WORKSHEET_TYPE.PICKING, assignee: assignee.id, status1: WORKSHEET_STATUS.EXECUTING, status2: WORKSHEET_STATUS.DEACTIVATED })
|
|
30
|
+
.andWhere(qb => {
|
|
31
|
+
const subQuery = qb
|
|
32
|
+
.subQuery()
|
|
33
|
+
.select('COUNT(*) AS totalPS')
|
|
34
|
+
.from(OrderInventory, 'OrderInventory')
|
|
35
|
+
.where('OrderInventory.release_good_id = ws.release_good_id')
|
|
36
|
+
.andWhere(`OrderInventory.status = 'PENDING_SPLIT'`)
|
|
37
|
+
.groupBy('OrderInventory.release_good_id')
|
|
38
|
+
.having('COUNT(*) > 0')
|
|
39
|
+
.getQuery()
|
|
40
|
+
return 'NOT EXISTS ' + subQuery
|
|
41
|
+
})
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
worksheet = await tx.getRepository(Worksheet).findOne({
|
|
45
|
-
relations: ['releaseGood'],
|
|
46
|
-
where: [
|
|
47
|
-
{
|
|
48
|
-
domain,
|
|
49
|
-
type: WORKSHEET_TYPE.PICKING,
|
|
50
|
-
status: WORKSHEET_STATUS.EXECUTING,
|
|
51
|
-
assignee: null
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
domain,
|
|
55
|
-
type: WORKSHEET_TYPE.PICKING,
|
|
56
|
-
status: WORKSHEET_STATUS.DEACTIVATED,
|
|
57
|
-
assignee: null
|
|
58
|
-
}
|
|
59
|
-
]
|
|
60
|
-
})
|
|
43
|
+
worksheet = await worksheetQb.getRawOne();
|
|
61
44
|
|
|
62
|
-
|
|
63
|
-
|
|
45
|
+
if (!worksheet) {
|
|
46
|
+
let worksheetQb = await tx.getRepository(Worksheet).createQueryBuilder('ws')
|
|
47
|
+
.select('ws.id')
|
|
48
|
+
.addSelect('ws.name')
|
|
49
|
+
.addSelect('ws.status')
|
|
50
|
+
.addSelect('ws.release_good_id')
|
|
51
|
+
.where('(ws.domain_id = :domain_id AND ws.type = :type AND ws.assignee_id IS NULL AND (ws.status = :status1 OR ws.status = :status2))', { domain_id: domain.id, type: WORKSHEET_TYPE.PICKING, status1: WORKSHEET_STATUS.EXECUTING, status2: WORKSHEET_STATUS.DEACTIVATED })
|
|
52
|
+
.andWhere(qb => {
|
|
53
|
+
const subQuery = qb
|
|
54
|
+
.subQuery()
|
|
55
|
+
.select('COUNT(*) AS totalPS')
|
|
56
|
+
.from(OrderInventory, 'OrderInventory')
|
|
57
|
+
.where('OrderInventory.release_good_id = ws.release_good_id')
|
|
58
|
+
.andWhere(`OrderInventory.status = 'PENDING_SPLIT'`)
|
|
59
|
+
.groupBy('OrderInventory.release_good_id')
|
|
60
|
+
.having('COUNT(*) > 0')
|
|
61
|
+
.getQuery()
|
|
62
|
+
return 'NOT EXISTS ' + subQuery
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
worksheet = await worksheetQb.getRawOne();
|
|
66
|
+
|
|
67
|
+
if (!worksheet) throw new Error('no suitable worksheet found')
|
|
68
|
+
await getRepository(Worksheet).update({ id: worksheet.id }, { assignee: assignee })
|
|
69
|
+
}
|
|
64
70
|
|
|
65
|
-
|
|
71
|
+
if (worksheet.status == WORKSHEET_STATUS.DEACTIVATED) await activatePicking(tx, domain, user, worksheet.ws_name)
|
|
66
72
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
73
|
+
const locationSortingRules: Setting = await tx.getRepository(Setting).findOne({
|
|
74
|
+
where: { domain, name: 'rule-for-picking-product' }
|
|
75
|
+
})
|
|
70
76
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
77
|
+
const sortingRule = JSON.parse(locationSortingRules.value)
|
|
78
|
+
const locationSortingRule = Object.keys(sortingRule).map(field => {
|
|
79
|
+
return { name: field, desc: sortingRule[field] === 'DESC' }
|
|
80
|
+
})
|
|
75
81
|
|
|
76
|
-
|
|
82
|
+
const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne(worksheet.release_good_id)
|
|
83
|
+
|
|
84
|
+
return await pickingWorksheet(domain, releaseGood.name, locationSortingRule, tx)
|
|
85
|
+
} catch (error) {
|
|
86
|
+
throw error
|
|
87
|
+
}
|
|
77
88
|
}
|
|
78
89
|
}
|
|
@@ -115,8 +115,6 @@ export async function generateInventoryHistory(
|
|
|
115
115
|
inventoryHistory.uom = inventory.uom
|
|
116
116
|
inventoryHistory.qty = qty
|
|
117
117
|
inventoryHistory.openingQty = openingQty
|
|
118
|
-
inventoryHistory.weight = 0
|
|
119
|
-
inventoryHistory.openingWeight = 0
|
|
120
118
|
inventoryHistory.uomValue = uomValue
|
|
121
119
|
inventoryHistory.openingUomValue = openingUomValue
|
|
122
120
|
inventoryHistory.unitCost = inventory.unitCost
|