@steedos/standard-process-approval 3.0.0-beta.68 → 3.0.0-beta.70
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.
|
@@ -132,6 +132,8 @@ module.exports = {
|
|
|
132
132
|
delete pd._id;
|
|
133
133
|
pd.name = `pd_${nowTime}`; // 名称长度不能大于20个字符;名称只能包含小写字母、数字,必须以字母开头,不能以下划线字符结尾或包含两个连续的下划线字符
|
|
134
134
|
pd.active = false; // 批准过程已启用或者已提交过审批, 禁止添加、删除批准步骤
|
|
135
|
+
pd.is_system = false;
|
|
136
|
+
delete pd.record_permissions
|
|
135
137
|
let newPD = await pdObj.insert(pd);
|
|
136
138
|
let newPDID = newPD._id;
|
|
137
139
|
let pns = await pnObj.find({ filters: ['process_definition', '=', recordId] }, userSession);
|
|
@@ -145,6 +147,8 @@ module.exports = {
|
|
|
145
147
|
pn.created_by = userSession.userId
|
|
146
148
|
pn.modified = now;
|
|
147
149
|
pn.modified_by = userSession.userId
|
|
150
|
+
pn.is_system = false;
|
|
151
|
+
delete pn.record_permissions
|
|
148
152
|
await pnObj.directInsert(pn);
|
|
149
153
|
}
|
|
150
154
|
return { state: 'SUCCESS', _id: newPDID };
|
|
@@ -1,21 +1,78 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* @Author: baozhoutao@steedos.com
|
|
3
|
-
* @Date: 2025-01-13 11:05:56
|
|
4
|
-
* @LastEditors: baozhoutao@steedos.com
|
|
5
|
-
* @LastEditTime: 2025-03-05 16:40:58
|
|
6
|
-
* @Description:
|
|
7
|
-
*/
|
|
8
1
|
const _ = require("underscore");
|
|
2
|
+
const { checkAPIName } = require('@steedos/objectql')
|
|
9
3
|
const objectql = require('@steedos/objectql');
|
|
4
|
+
const register = require('@steedos/metadata-registrar');
|
|
5
|
+
const odataMongodb = require("@steedos/odata-v4-mongodb");
|
|
6
|
+
|
|
7
|
+
function parserFilters(filters){
|
|
8
|
+
if(_.isString(filters)){
|
|
9
|
+
filters = odataMongodb.createFilter(filters)
|
|
10
|
+
}
|
|
11
|
+
let query = {};
|
|
12
|
+
if(_.isArray(filters) && filters.length > 0 && _.isArray(filters[0])){
|
|
13
|
+
_.each(filters,function(filter){
|
|
14
|
+
Object.assign(query, parserFilters(filter))
|
|
15
|
+
})
|
|
16
|
+
}else if(_.isArray(filters) && filters.length > 0){
|
|
17
|
+
if(filters[1] && filters[1] == '='){
|
|
18
|
+
let key = filters[0]
|
|
19
|
+
let value = filters[2]
|
|
20
|
+
Object.assign(query, {[key]: value})
|
|
21
|
+
}else if(filters[1] && (filters[1] == '!=' || filters[1] == '<>')){
|
|
22
|
+
let key = filters[0]
|
|
23
|
+
let value = filters[2]
|
|
24
|
+
Object.assign(query, {[key]: {$ne: value}})
|
|
25
|
+
}else if(filters[1] && filters[1] == 'in'){
|
|
26
|
+
let key = filters[0]
|
|
27
|
+
let value = filters[2]
|
|
28
|
+
Object.assign(query, {[key]: {$in: value}})
|
|
29
|
+
}else{
|
|
30
|
+
_.each(filters,function(filter){
|
|
31
|
+
let parsedFilters = parserFilters(filter);
|
|
32
|
+
if(query._id && query._id.$ne && parsedFilters._id && parsedFilters._id.$ne){
|
|
33
|
+
parsedFilters._id.$ne = [parsedFilters._id.$ne]
|
|
34
|
+
parsedFilters._id.$ne = parsedFilters._id.$ne.concat(query._id.$ne);
|
|
35
|
+
delete query._id;
|
|
36
|
+
}
|
|
37
|
+
Object.assign(query, parsedFilters)
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
}else{
|
|
41
|
+
_.each(filters, function (v, k) {
|
|
42
|
+
if(_.isArray(v) && v.length > 0){
|
|
43
|
+
Object.assign(query, parserFilters(v))
|
|
44
|
+
}else{
|
|
45
|
+
if (k === '$and') {
|
|
46
|
+
Object.assign(query, parserFilters(v))
|
|
47
|
+
} else {
|
|
48
|
+
if(_.isArray(filters) && _.isObject(v)){
|
|
49
|
+
Object.assign(query, v)
|
|
50
|
+
}else{
|
|
51
|
+
Object.assign(query, {[k]: v})
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
})
|
|
57
|
+
}
|
|
58
|
+
return query;
|
|
59
|
+
}
|
|
10
60
|
|
|
11
61
|
function setSpaceAndOwner(record, that){
|
|
12
62
|
record['space'] = that.spaceId
|
|
13
63
|
record['owner'] = that.userId
|
|
14
64
|
}
|
|
15
65
|
|
|
16
|
-
const getInternalApprovalProcesses = function(sourceApprovalProcesses, filters){
|
|
66
|
+
const getInternalApprovalProcesses = async function(sourceApprovalProcesses, filters){
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
const datasource = objectql.getDataSource('default');
|
|
70
|
+
const adapter = datasource.adapter
|
|
71
|
+
await adapter.connect()
|
|
72
|
+
const collection = adapter.collection('process_definition');
|
|
73
|
+
|
|
17
74
|
delete filters.active;
|
|
18
|
-
let dbApprovalProcesses =
|
|
75
|
+
let dbApprovalProcesses = await collection.find(filters, {fields:{_id:1, name:1}}).toArray();
|
|
19
76
|
let approvalProcesses = [];
|
|
20
77
|
|
|
21
78
|
if(!filters.is_system){
|
|
@@ -32,7 +89,7 @@ const getInternalApprovalProcesses = function(sourceApprovalProcesses, filters){
|
|
|
32
89
|
|
|
33
90
|
module.exports = {
|
|
34
91
|
beforeInsert: async function () {
|
|
35
|
-
await
|
|
92
|
+
await checkAPIName(this.object_name, 'name', this.doc.name, undefined, [['is_system','!=', true]]);
|
|
36
93
|
|
|
37
94
|
objectql.checkFormula(this.doc.entry_criteria, this.doc.object_name)
|
|
38
95
|
|
|
@@ -42,5 +99,98 @@ module.exports = {
|
|
|
42
99
|
if(!this.doc.recall_record_lock){
|
|
43
100
|
this.doc.recall_record_lock = 'unlock';
|
|
44
101
|
}
|
|
102
|
+
},
|
|
103
|
+
beforeUpdate: async function () {
|
|
104
|
+
if(_.has(this.doc, 'object_name')){
|
|
105
|
+
var process = await objectql.getObject("process_definition").findOne(this.id);
|
|
106
|
+
if(process.object_name != this.doc.object_name){
|
|
107
|
+
throw new Error('禁止修改对象名称');
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
if (_.has(this.doc, 'name')) {
|
|
111
|
+
await checkAPIName(this.object_name, 'name', this.doc.name, this.id, [['is_system','!=', true]]);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
objectql.checkFormula(this.doc.entry_criteria, this.doc.object_name)
|
|
115
|
+
},
|
|
116
|
+
afterFind: async function(){
|
|
117
|
+
let spaceId = this.spaceId;
|
|
118
|
+
let filters = parserFilters(this.query.filters)
|
|
119
|
+
let approvalProcesses = [];
|
|
120
|
+
if(filters.name){
|
|
121
|
+
approvalProcess = register.getSourceApprovalProcess(filters.name);
|
|
122
|
+
if(approvalProcess){
|
|
123
|
+
approvalProcesses.push(approvalProcess);
|
|
124
|
+
}
|
|
125
|
+
}else{
|
|
126
|
+
approvalProcesses = register.getSourceApprovalProcesses();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (filters.object_name){
|
|
130
|
+
approvalProcesses = _.where(approvalProcesses, {object_name: filters.object_name});
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
approvalProcesses = await getInternalApprovalProcesses(approvalProcesses, filters);
|
|
134
|
+
|
|
135
|
+
if(approvalProcesses){
|
|
136
|
+
this.data.values = this.data.values.concat(approvalProcesses)
|
|
137
|
+
this.data.values = objectql.getSteedosSchema().metadataDriver.find(this.data.values, this.query, spaceId);
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
afterAggregate: async function(){
|
|
141
|
+
let filters = parserFilters(this.query.filters)
|
|
142
|
+
let approvalProcesses = [];
|
|
143
|
+
if(filters.name){
|
|
144
|
+
approvalProcess = register.getSourceApprovalProcess(filters.name);
|
|
145
|
+
if(approvalProcess){
|
|
146
|
+
approvalProcesses.push(approvalProcess);
|
|
147
|
+
}
|
|
148
|
+
}else{
|
|
149
|
+
approvalProcesses = register.getSourceApprovalProcesses();
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (filters.object_name){
|
|
153
|
+
approvalProcesses = _.where(approvalProcesses, {object_name: filters.object_name});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
approvalProcesses = await getInternalApprovalProcesses(approvalProcesses, filters);
|
|
157
|
+
|
|
158
|
+
if(approvalProcesses){
|
|
159
|
+
this.data.values = this.data.values.concat(approvalProcesses)
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
afterCount: async function(){
|
|
163
|
+
let filters = parserFilters(this.query.filters)
|
|
164
|
+
let approvalProcesses = [];
|
|
165
|
+
if(filters.name){
|
|
166
|
+
approvalProcess = register.getSourceApprovalProcess(filters.name);
|
|
167
|
+
if(approvalProcess){
|
|
168
|
+
approvalProcesses.push(approvalProcess);
|
|
169
|
+
}
|
|
170
|
+
}else{
|
|
171
|
+
approvalProcesses = register.getSourceApprovalProcesses();
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (filters.object_name){
|
|
175
|
+
approvalProcesses = _.where(approvalProcesses, {object_name: filters.object_name});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
approvalProcesses = await getInternalApprovalProcesses(approvalProcesses, filters);
|
|
179
|
+
|
|
180
|
+
if(approvalProcesses){
|
|
181
|
+
this.data.values = this.data.values + approvalProcesses.length
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
afterFindOne: async function(){
|
|
185
|
+
if(_.isEmpty(this.data.values)){
|
|
186
|
+
let id = this.id
|
|
187
|
+
if(id){
|
|
188
|
+
let approvalProcess = objectql.getSourceApprovalProcess(id);
|
|
189
|
+
if(approvalProcess){
|
|
190
|
+
setSpaceAndOwner(approvalProcess, this);
|
|
191
|
+
this.data.values = approvalProcess;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
45
195
|
}
|
|
46
196
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/standard-process-approval",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.70",
|
|
4
4
|
"main": "package.service.js",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
"steedos"
|
|
11
11
|
],
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@steedos/process": "3.0.0-beta.
|
|
13
|
+
"@steedos/process": "3.0.0-beta.70",
|
|
14
14
|
"nanoid": "^3.3.4"
|
|
15
15
|
},
|
|
16
16
|
"description": "steedos package",
|
|
17
17
|
"repository": {},
|
|
18
18
|
"license": "MIT",
|
|
19
|
-
"gitHead": "
|
|
19
|
+
"gitHead": "597f124ef73efa97a2da52b4de3c7d733ebd6887"
|
|
20
20
|
}
|