@things-factory/worksheet-base 3.8.3 → 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/outbound/packing-worksheet-controller.js +1 -1
- package/dist-server/controllers/outbound/packing-worksheet-controller.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/package.json +2 -2
- package/server/controllers/outbound/packing-worksheet-controller.ts +1 -1
- package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +67 -56
|
@@ -11,7 +11,7 @@ class PackingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
11
11
|
let releaseGood = await this.findRefOrder(sales_base_1.ReleaseGood, {
|
|
12
12
|
domain: this.domain,
|
|
13
13
|
name: releaseGoodNo
|
|
14
|
-
}, ['orderInventories']);
|
|
14
|
+
}, ['orderInventories', 'orderInventories.inventory']);
|
|
15
15
|
let orderInventories = releaseGood.orderInventories;
|
|
16
16
|
const existingPackingWorksheet = await this.trxMgr.getRepository(entities_1.Worksheet).findOne({
|
|
17
17
|
where: { domain: this.domain, releaseGood, type: constants_1.WORKSHEET_TYPE.PACKING, status: constants_1.WORKSHEET_STATUS.DEACTIVATED }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packing-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/packing-worksheet-controller.ts"],"names":[],"mappings":";;;AACA,2DAA8G;AAC9G,mEAAsF;AAEtF,+CAAkE;AAClE,6CAA2D;AAC3D,8EAAwE;AAExE,MAAa,0BAA2B,SAAQ,iDAAsB;IACpE,KAAK,CAAC,wBAAwB,CAAC,aAAqB;QAClD,IAAI,WAAW,GAAgB,MAAM,IAAI,CAAC,YAAY,CACpD,wBAAW,EACX;YACE,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,aAAa;SACpB,EACD,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"packing-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/packing-worksheet-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.fetchAndAssignPickingTaskResolver = void 0;
|
|
4
4
|
const typeorm_1 = require("typeorm");
|
|
5
5
|
const auth_base_1 = require("@things-factory/auth-base");
|
|
6
|
+
const sales_base_1 = require("@things-factory/sales-base");
|
|
6
7
|
const setting_base_1 = require("@things-factory/setting-base");
|
|
7
8
|
const constants_1 = require("../../../../constants");
|
|
8
9
|
const entities_1 = require("../../../../entities");
|
|
@@ -10,63 +11,72 @@ const picking_worksheet_1 = require("../picking-worksheet");
|
|
|
10
11
|
const activate_picking_1 = require("./activate-picking");
|
|
11
12
|
exports.fetchAndAssignPickingTaskResolver = {
|
|
12
13
|
async fetchAndAssignPickingTask(_, {}, context) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
14
|
+
try {
|
|
15
|
+
const { tx, domain, user } = context.state;
|
|
16
|
+
const assignee = await tx.getRepository(auth_base_1.User).findOne(user.id, { relations: ['domains'] });
|
|
17
|
+
if (((assignee === null || assignee === void 0 ? void 0 : assignee.domains) || []).every((userDomain) => userDomain.id !== domain.id))
|
|
18
|
+
throw new Error('Target user is not belong to current domain');
|
|
19
|
+
if (!assignee)
|
|
20
|
+
throw new Error('failed to find target user');
|
|
21
|
+
let worksheet;
|
|
22
|
+
let worksheetQb = await tx.getRepository(entities_1.Worksheet).createQueryBuilder('ws')
|
|
23
|
+
.select('ws.id')
|
|
24
|
+
.addSelect('ws.name')
|
|
25
|
+
.addSelect('ws.status')
|
|
26
|
+
.addSelect('ws.release_good_id')
|
|
27
|
+
.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: constants_1.WORKSHEET_TYPE.PICKING, assignee: assignee.id, status1: constants_1.WORKSHEET_STATUS.EXECUTING, status2: constants_1.WORKSHEET_STATUS.DEACTIVATED })
|
|
28
|
+
.andWhere(qb => {
|
|
29
|
+
const subQuery = qb
|
|
30
|
+
.subQuery()
|
|
31
|
+
.select('COUNT(*) AS totalPS')
|
|
32
|
+
.from(sales_base_1.OrderInventory, 'OrderInventory')
|
|
33
|
+
.where('OrderInventory.release_good_id = ws.release_good_id')
|
|
34
|
+
.andWhere(`OrderInventory.status = 'PENDING_SPLIT'`)
|
|
35
|
+
.groupBy('OrderInventory.release_good_id')
|
|
36
|
+
.having('COUNT(*) > 0')
|
|
37
|
+
.getQuery();
|
|
38
|
+
return 'NOT EXISTS ' + subQuery;
|
|
39
|
+
});
|
|
40
|
+
worksheet = await worksheetQb.getRawOne();
|
|
41
|
+
if (!worksheet) {
|
|
42
|
+
let worksheetQb = await tx.getRepository(entities_1.Worksheet).createQueryBuilder('ws')
|
|
43
|
+
.select('ws.id')
|
|
44
|
+
.addSelect('ws.name')
|
|
45
|
+
.addSelect('ws.status')
|
|
46
|
+
.addSelect('ws.release_good_id')
|
|
47
|
+
.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: constants_1.WORKSHEET_TYPE.PICKING, status1: constants_1.WORKSHEET_STATUS.EXECUTING, status2: constants_1.WORKSHEET_STATUS.DEACTIVATED })
|
|
48
|
+
.andWhere(qb => {
|
|
49
|
+
const subQuery = qb
|
|
50
|
+
.subQuery()
|
|
51
|
+
.select('COUNT(*) AS totalPS')
|
|
52
|
+
.from(sales_base_1.OrderInventory, 'OrderInventory')
|
|
53
|
+
.where('OrderInventory.release_good_id = ws.release_good_id')
|
|
54
|
+
.andWhere(`OrderInventory.status = 'PENDING_SPLIT'`)
|
|
55
|
+
.groupBy('OrderInventory.release_good_id')
|
|
56
|
+
.having('COUNT(*) > 0')
|
|
57
|
+
.getQuery();
|
|
58
|
+
return 'NOT EXISTS ' + subQuery;
|
|
59
|
+
});
|
|
60
|
+
worksheet = await worksheetQb.getRawOne();
|
|
61
|
+
if (!worksheet)
|
|
62
|
+
throw new Error('no suitable worksheet found');
|
|
63
|
+
await (0, typeorm_1.getRepository)(entities_1.Worksheet).update({ id: worksheet.id }, { assignee: assignee });
|
|
38
64
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
status: constants_1.WORKSHEET_STATUS.EXECUTING,
|
|
48
|
-
assignee: null
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
domain,
|
|
52
|
-
type: constants_1.WORKSHEET_TYPE.PICKING,
|
|
53
|
-
status: constants_1.WORKSHEET_STATUS.DEACTIVATED,
|
|
54
|
-
assignee: null
|
|
55
|
-
}
|
|
56
|
-
]
|
|
65
|
+
if (worksheet.status == constants_1.WORKSHEET_STATUS.DEACTIVATED)
|
|
66
|
+
await (0, activate_picking_1.activatePicking)(tx, domain, user, worksheet.ws_name);
|
|
67
|
+
const locationSortingRules = await tx.getRepository(setting_base_1.Setting).findOne({
|
|
68
|
+
where: { domain, name: 'rule-for-picking-product' }
|
|
69
|
+
});
|
|
70
|
+
const sortingRule = JSON.parse(locationSortingRules.value);
|
|
71
|
+
const locationSortingRule = Object.keys(sortingRule).map(field => {
|
|
72
|
+
return { name: field, desc: sortingRule[field] === 'DESC' };
|
|
57
73
|
});
|
|
58
|
-
await
|
|
74
|
+
const releaseGood = await tx.getRepository(sales_base_1.ReleaseGood).findOne(worksheet.release_good_id);
|
|
75
|
+
return await (0, picking_worksheet_1.pickingWorksheet)(domain, releaseGood.name, locationSortingRule, tx);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
throw error;
|
|
59
79
|
}
|
|
60
|
-
if (worksheet.status == constants_1.WORKSHEET_STATUS.DEACTIVATED)
|
|
61
|
-
await (0, activate_picking_1.activatePicking)(tx, domain, user, worksheet.name);
|
|
62
|
-
const locationSortingRules = await tx.getRepository(setting_base_1.Setting).findOne({
|
|
63
|
-
where: { domain, name: 'rule-for-picking-product' }
|
|
64
|
-
});
|
|
65
|
-
const sortingRule = JSON.parse(locationSortingRules.value);
|
|
66
|
-
const locationSortingRule = Object.keys(sortingRule).map(field => {
|
|
67
|
-
return { name: field, desc: sortingRule[field] === 'DESC' };
|
|
68
|
-
});
|
|
69
|
-
return await (0, picking_worksheet_1.pickingWorksheet)(domain, worksheet.releaseGood.name, locationSortingRule, tx);
|
|
70
80
|
}
|
|
71
81
|
};
|
|
72
82
|
//# sourceMappingURL=fetch-and-assign-picking-task.js.map
|
package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-and-assign-picking-task.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts"],"names":[],"mappings":";;;AAAA,qCAAsD;AAEtD,yDAAgD;AAChD,+DAAsD;AAGtD,qDAAwE;AACxE,mDAAgD;AAChD,4DAAuD;AACvD,yDAAoD;AAEvC,QAAA,iCAAiC,GAAG;IAC/C,KAAK,CAAC,yBAAyB,CAAC,CAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"fetch-and-assign-picking-task.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/worksheet-base",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.4",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"@things-factory/transport-base": "^3.8.0",
|
|
40
40
|
"@things-factory/warehouse-base": "^3.8.3"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "9dedf75962d3a804204ae3341588ee91533c63dd"
|
|
43
43
|
}
|
|
@@ -14,7 +14,7 @@ export class PackingWorksheetController extends VasWorksheetController {
|
|
|
14
14
|
domain: this.domain,
|
|
15
15
|
name: releaseGoodNo
|
|
16
16
|
},
|
|
17
|
-
['orderInventories']
|
|
17
|
+
['orderInventories', 'orderInventories.inventory']
|
|
18
18
|
)
|
|
19
19
|
let orderInventories: OrderInventory[] = releaseGood.orderInventories
|
|
20
20
|
|
|
@@ -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
|
}
|