@steedos-labs/plugin-workflow 3.0.0-beta.9 → 3.0.1-beta.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/main/default/client/instance.client.js +6 -6
- package/main/default/client/object_workflows.client.js +8 -7
- package/main/default/client/socket.client.js +46 -3
- package/main/default/manager/import.js +17 -1
- package/main/default/manager/instance_manager.js +20 -6
- package/main/default/manager/push_manager.js +20 -12
- package/main/default/manager/uuflowManagerForInitApproval.js +794 -0
- package/main/default/manager/uuflow_manager.js +53 -4
- package/main/default/manager/workflow_manager.js +1 -1
- package/main/default/methods/instance_approve.js +258 -0
- package/main/default/methods/trace_approve_cc.js +571 -0
- package/main/default/objectTranslations/flows.en/flows.en.objectTranslation.yml +19 -0
- package/main/default/objectTranslations/flows.zh-CN/flows.zh-CN.objectTranslation.yml +19 -0
- package/main/default/objectTranslations/forms.en/forms.en.objectTranslation.yml +191 -0
- package/main/default/objectTranslations/forms.zh-CN/forms.zh-CN.objectTranslation.yml +246 -0
- package/main/default/objectTranslations/instance_tasks.en/instance_tasks.en.objectTranslation.yml +213 -0
- package/main/default/objectTranslations/instance_tasks.zh-CN/instance_tasks.zh-CN.objectTranslation.yml +213 -0
- package/main/default/objectTranslations/instances.en/instances.en.objectTranslation.yml +212 -0
- package/main/default/objectTranslations/instances.zh-CN/instances.zh-CN.objectTranslation.yml +209 -0
- package/main/default/objects/categories.object.yml +1 -0
- package/main/default/objects/flows/buttons/del.button.yml +7 -10
- package/main/default/objects/flows/buttons/design_form_layout.button.js +5 -2
- package/main/default/objects/flows/buttons/distributeAdmin.button.yml +5 -5
- package/main/default/objects/flows/buttons/newexport.button.yml +1 -1
- package/main/default/objects/flows/buttons/newimport.button.yml +2 -1
- package/main/default/objects/flows/flows.object.yml +12 -4
- package/main/default/objects/forms/forms.object.yml +85 -0
- package/main/default/objects/instance_tasks/buttons/instance_new.button.yml +3 -5
- package/main/default/objects/instances/buttons/instance_cc.button.yml +7 -7
- package/main/default/objects/instances/buttons/instance_delete.button.yml +2 -2
- package/main/default/objects/instances/buttons/instance_delete_many.button.yml +6 -6
- package/main/default/objects/instances/buttons/instance_distribute.button.yml +14 -13
- package/main/default/objects/instances/buttons/instance_flow_chart.button.yml +1 -1
- package/main/default/objects/instances/buttons/instance_forward.button.yml +8 -8
- package/main/default/objects/instances/buttons/instance_new.button.yml +3 -5
- package/main/default/objects/instances/buttons/instance_reassign.button.yml +1 -16
- package/main/default/objects/instances/buttons/instance_related.button.yml +4 -4
- package/main/default/objects/instances/buttons/instance_relocate.button.yml +9 -12
- package/main/default/objects/instances/buttons/instance_retrieve.button.yml +106 -2
- package/main/default/objects/instances/buttons/instance_save.button.yml +3 -9
- package/main/default/objects/instances/buttons/instance_submit.button.yml +1 -1
- package/main/default/objects/instances/buttons/instance_terminate.button.yml +7 -10
- package/main/default/objects/instances/listviews/monitor.listview.yml +0 -1
- package/main/default/pages/flowdetail.page.amis.json +11 -11
- package/main/default/pages/instance_detail.page.amis.json +25 -37
- package/main/default/pages/instance_tasks_detail.page.amis.json +21 -5
- package/main/default/pages/instance_tasks_list.page.amis.json +147 -110
- package/main/default/pages/instances_list.page.amis.json +146 -110
- package/main/default/routes/afterHook.js +34 -0
- package/main/default/routes/am.router.js +49 -2
- package/main/default/routes/api_cc.router.js +5 -12
- package/main/default/routes/api_flow_permission.router.js +7 -2
- package/main/default/routes/api_get_object_workflows.router.js +79 -22
- package/main/default/routes/api_have_read.router.js +73 -0
- package/main/default/routes/api_object_workflow_drafts.router.js +18 -19
- package/main/default/routes/api_workflow_approve_save.router.js +2 -1
- package/main/default/routes/api_workflow_chart.router.js +682 -0
- package/main/default/routes/api_workflow_engine.router.js +4 -4
- package/main/default/routes/api_workflow_flow_version.router.js +61 -0
- package/main/default/routes/api_workflow_form_version.router.js +61 -0
- package/main/default/routes/api_workflow_instance_return.router.js +164 -167
- package/main/default/routes/api_workflow_next_step_users.router.js +13 -8
- package/main/default/routes/api_workflow_reassign.router.js +200 -196
- package/main/default/routes/api_workflow_relocate.router.js +4 -3
- package/main/default/routes/api_workflow_retrieve.router.js +246 -237
- package/main/default/routes/export.router.js +5 -4
- package/main/default/routes/flow_form_design.ejs +33 -8
- package/main/default/routes/flow_form_design.router.js +4 -3
- package/main/default/routes/import.router.js +6 -7
- package/main/default/services/flows.service.js +1 -1
- package/main/default/translations/en.translation.yml +5 -0
- package/main/default/translations/zh-CN.translation.yml +2 -1
- package/main/default/triggers/amis_form_design.trigger.js +27 -5
- package/main/default/triggers/instances.trigger.js +9 -7
- package/main/default/utils/designerManager.js +12 -5
- package/package.json +4 -4
- package/package.service.js +21 -7
- package/public/workflow/index.css +4 -0
- package/src/instance_record_queue.js +1 -3
- package/src/rests/api_workflow_instance_batch_remove.js +4 -3
- package/src/webhook_queue.js +283 -0
- package/main/default/manager/index.js +0 -23
|
@@ -16,6 +16,7 @@ const pushManager = require('./push_manager');
|
|
|
16
16
|
const { t } = require('@steedos/i18n')
|
|
17
17
|
const moment = require('moment')
|
|
18
18
|
const { getObject } = require('@steedos/objectql');
|
|
19
|
+
const { evaluate } = require('amis-formula');
|
|
19
20
|
|
|
20
21
|
const UUFlowManager = {};
|
|
21
22
|
|
|
@@ -556,6 +557,47 @@ UUFlowManager.isFlowSpaceMatched = function (flow, space_id) {
|
|
|
556
557
|
}
|
|
557
558
|
};
|
|
558
559
|
|
|
560
|
+
const isAmisFormula = (formula) => {
|
|
561
|
+
// 有${}包裹的表达式就识别为amis公式
|
|
562
|
+
return /\$\{.+\}/.test(formula);
|
|
563
|
+
};
|
|
564
|
+
|
|
565
|
+
const runAmisFormula = function (formula, data) {
|
|
566
|
+
try {
|
|
567
|
+
const amisFormulaValue = evaluate(
|
|
568
|
+
formula,
|
|
569
|
+
Object.assign({}, data),
|
|
570
|
+
{},
|
|
571
|
+
);
|
|
572
|
+
if (formula === amisFormulaValue) {
|
|
573
|
+
throw new Error(
|
|
574
|
+
`Workflow Condition Step Amis formula "${formula}" evaluate failed "Function is not defined".`,
|
|
575
|
+
);
|
|
576
|
+
} else {
|
|
577
|
+
return amisFormulaValue;
|
|
578
|
+
}
|
|
579
|
+
} catch (e) {
|
|
580
|
+
throw new Error(
|
|
581
|
+
`Catch an error "${e.message}" while evaluate condition step amis formula "${formula}".`,
|
|
582
|
+
);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* Calculate condition for conditional step
|
|
588
|
+
* @param {Object} values - Form values
|
|
589
|
+
* @param {String} condition_str - Condition string
|
|
590
|
+
* @returns {Boolean} Condition result
|
|
591
|
+
*/
|
|
592
|
+
UUFlowManager.calculateConditionWithAmis = function (values, condition_str) {
|
|
593
|
+
try {
|
|
594
|
+
return runAmisFormula(condition_str, values);
|
|
595
|
+
} catch (error) {
|
|
596
|
+
console.error(error.stack);
|
|
597
|
+
return false;
|
|
598
|
+
}
|
|
599
|
+
};
|
|
600
|
+
|
|
559
601
|
/**
|
|
560
602
|
* Calculate condition for conditional step
|
|
561
603
|
* @param {Object} values - Form values
|
|
@@ -829,10 +871,17 @@ UUFlowManager.getNextSteps = async function (instance, flow, step, judge, values
|
|
|
829
871
|
|
|
830
872
|
for (const step_line of step.lines) {
|
|
831
873
|
if (step_line.state === "submitted") {
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
874
|
+
let step_line_condition = step_line.condition;
|
|
875
|
+
let allow = false;
|
|
876
|
+
if (isAmisFormula(step_line_condition)) {
|
|
877
|
+
allow = UUFlowManager.calculateConditionWithAmis(__values, step_line_condition);
|
|
878
|
+
}
|
|
879
|
+
else {
|
|
880
|
+
step_line_condition = step_line.condition.replace(reg, (vowel) => {
|
|
881
|
+
return prefix + vowel.replace(/\{\s*/, "[\"").replace(/\s*\}/, "\"]").replace(/\s*\.\s*/g, "\"][\"");
|
|
882
|
+
});
|
|
883
|
+
allow = UUFlowManager.calculateCondition(__values, step_line_condition);
|
|
884
|
+
}
|
|
836
885
|
if (allow) {
|
|
837
886
|
nextSteps.push(step_line.to_step);
|
|
838
887
|
}
|
|
@@ -246,7 +246,7 @@ WorkflowManager.getUser = async function (spaceId, userId, notNeedDetails) {
|
|
|
246
246
|
}
|
|
247
247
|
|
|
248
248
|
if (typeof userId !== 'string') {
|
|
249
|
-
return WorkflowManager.getUsers(spaceId, userId, notNeedDetails);
|
|
249
|
+
return await WorkflowManager.getUsers(spaceId, userId, notNeedDetails);
|
|
250
250
|
}
|
|
251
251
|
|
|
252
252
|
const spaceUsersCollection = await getCollection('space_users');
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
const { getCollection } = require('../utils/collection');
|
|
2
|
+
const {
|
|
3
|
+
update_instance_tasks,
|
|
4
|
+
update_many_instance_tasks,
|
|
5
|
+
} = require('../manager/instance_tasks_manager')
|
|
6
|
+
module.exports = {
|
|
7
|
+
set_approve_have_read: async function (instanceId, traceId, approveId, ctx = {}) {
|
|
8
|
+
const db = {
|
|
9
|
+
instances: await getCollection('instances')
|
|
10
|
+
};
|
|
11
|
+
var instance, ref, setObj, trace;
|
|
12
|
+
var userId = ctx.userId || this.userId;
|
|
13
|
+
if (!userId) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
instance = await db.instances.findOne({
|
|
17
|
+
_id: instanceId,
|
|
18
|
+
"traces._id": traceId
|
|
19
|
+
}, {
|
|
20
|
+
fields: {
|
|
21
|
+
"traces.$": 1
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
if ((instance != null ? (ref = instance.traces) != null ? ref.length : void 0 : void 0) > 0) {
|
|
25
|
+
trace = instance.traces[0];
|
|
26
|
+
setObj = {
|
|
27
|
+
modified: new Date,
|
|
28
|
+
modified_by: userId
|
|
29
|
+
};
|
|
30
|
+
let key_str = ''
|
|
31
|
+
const approveDoc = {}
|
|
32
|
+
trace.approves.forEach(function (approve, idx) {
|
|
33
|
+
if (approve._id === approveId && !approve.is_read) {
|
|
34
|
+
key_str = `traces.$.approves.${idx}.`;
|
|
35
|
+
// setObj[`traces.$.approves.${idx}.is_read`] = true;
|
|
36
|
+
// return setObj[`traces.$.approves.${idx}.read_date`] = new Date();
|
|
37
|
+
approveDoc[`is_read`] = true;
|
|
38
|
+
approveDoc[`read_date`] = new Date();
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
if (!_.isEmpty(approveDoc) && key_str) {
|
|
42
|
+
for (const key in approveDoc) {
|
|
43
|
+
if (Object.hasOwnProperty.call(approveDoc, key)) {
|
|
44
|
+
setObj[key_str + key] = approveDoc[key]
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
await db.instances.update({
|
|
48
|
+
_id: instanceId,
|
|
49
|
+
"traces._id": traceId
|
|
50
|
+
}, {
|
|
51
|
+
$set: setObj
|
|
52
|
+
});
|
|
53
|
+
await update_instance_tasks(instanceId, traceId, approveId, approveDoc)
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
// change_approve_info: function (instanceId, traceId, approveId, description, finish_date) {
|
|
59
|
+
// var instance, ref, setObj, trace;
|
|
60
|
+
// if (!this.userId) {
|
|
61
|
+
// return;
|
|
62
|
+
// }
|
|
63
|
+
// check(instanceId, String);
|
|
64
|
+
// check(traceId, String);
|
|
65
|
+
// check(approveId, String);
|
|
66
|
+
// check(description, String);
|
|
67
|
+
// check(finish_date, Date);
|
|
68
|
+
// instance = db.instances.findOne({
|
|
69
|
+
// _id: instanceId,
|
|
70
|
+
// "traces._id": traceId
|
|
71
|
+
// }, {
|
|
72
|
+
// fields: {
|
|
73
|
+
// "traces.$": 1
|
|
74
|
+
// }
|
|
75
|
+
// });
|
|
76
|
+
// if ((instance != null ? (ref = instance.traces) != null ? ref.length : void 0 : void 0) > 0) {
|
|
77
|
+
// trace = instance.traces[0];
|
|
78
|
+
// setObj = {};
|
|
79
|
+
// let key_str = ''
|
|
80
|
+
// const approveDoc = {}
|
|
81
|
+
// trace.approves.forEach(function (approve, idx) {
|
|
82
|
+
// if (approve._id === approveId) {
|
|
83
|
+
// setObj['change_time'] = new Date();
|
|
84
|
+
// key_str = `traces.$.approves.${idx}.`
|
|
85
|
+
// // setObj[`traces.$.approves.${idx}.description`] = description;
|
|
86
|
+
// // setObj[`traces.$.approves.${idx}.finish_date`] = finish_date;
|
|
87
|
+
// // setObj[`traces.$.approves.${idx}.cost_time`] = new Date() - approve.start_date;
|
|
88
|
+
// // return setObj[`traces.$.approves.${idx}.read_date`] = new Date();
|
|
89
|
+
// approveDoc[`description`] = description;
|
|
90
|
+
// approveDoc[`finish_date`] = finish_date;
|
|
91
|
+
// approveDoc[`cost_time`] = new Date() - approve.start_date;
|
|
92
|
+
// approveDoc[`read_date`] = new Date();
|
|
93
|
+
// }
|
|
94
|
+
// });
|
|
95
|
+
// if (!_.isEmpty(setObj)) {
|
|
96
|
+
// for (const key in approveDoc) {
|
|
97
|
+
// if (Object.hasOwnProperty.call(approveDoc, key)) {
|
|
98
|
+
// setObj[key_str + key] = approveDoc[key]
|
|
99
|
+
// }
|
|
100
|
+
// }
|
|
101
|
+
// db.instances.update({
|
|
102
|
+
// _id: instanceId,
|
|
103
|
+
// "traces._id": traceId
|
|
104
|
+
// }, {
|
|
105
|
+
// $set: setObj
|
|
106
|
+
// });
|
|
107
|
+
// update_instance_tasks(instanceId, traceId, approveId, approveDoc)
|
|
108
|
+
// }
|
|
109
|
+
// return true;
|
|
110
|
+
// }
|
|
111
|
+
// },
|
|
112
|
+
// update_approve_sign: function (instanceId, traceId, approveId, sign_field_code, description, sign_type, lastSignApprove) {
|
|
113
|
+
// var currentApproveDescription, currentStep, currentTrace, ins, instance, ref, ref1, ref2, ref3, session_userId, showBlankApproveDescription, trace, traces, trimDescription, upObj;
|
|
114
|
+
// check(instanceId, String);
|
|
115
|
+
// check(traceId, String);
|
|
116
|
+
// check(approveId, String);
|
|
117
|
+
// check(sign_field_code, String);
|
|
118
|
+
// check(description, String);
|
|
119
|
+
// if (!this.userId) {
|
|
120
|
+
// return;
|
|
121
|
+
// }
|
|
122
|
+
// trimDescription = description.trim();
|
|
123
|
+
// showBlankApproveDescription = (ref = Meteor.settings.public.workflow) != null ? ref.showBlankApproveDescription : void 0;
|
|
124
|
+
// session_userId = this.userId;
|
|
125
|
+
// if (lastSignApprove) {
|
|
126
|
+
// if (((ref1 = Meteor.settings.public.workflow) != null ? ref1.keepLastSignApproveDescription : void 0) !== false) {
|
|
127
|
+
// if (lastSignApprove.custom_sign_show) {
|
|
128
|
+
// return;
|
|
129
|
+
// }
|
|
130
|
+
// }
|
|
131
|
+
// }
|
|
132
|
+
// instance = db.instances.findOne({
|
|
133
|
+
// _id: instanceId,
|
|
134
|
+
// "traces._id": traceId
|
|
135
|
+
// }, {
|
|
136
|
+
// fields: {
|
|
137
|
+
// "traces.$": 1
|
|
138
|
+
// }
|
|
139
|
+
// });
|
|
140
|
+
// if ((instance != null ? (ref2 = instance.traces) != null ? ref2.length : void 0 : void 0) > 0) {
|
|
141
|
+
// trace = instance.traces[0];
|
|
142
|
+
// upObj = {};
|
|
143
|
+
// currentApproveDescription = '';
|
|
144
|
+
// const approveDoc = {}
|
|
145
|
+
// let key_str = ''
|
|
146
|
+
// trace.approves.forEach(function (approve, idx) {
|
|
147
|
+
// if (approve._id === approveId) {
|
|
148
|
+
// key_str = `traces.$.approves.${idx}.`
|
|
149
|
+
// currentApproveDescription = approve.description;
|
|
150
|
+
// if (sign_field_code) {
|
|
151
|
+
// upObj[`traces.$.approves.${idx}.sign_field_code`] = sign_field_code;
|
|
152
|
+
// }
|
|
153
|
+
// // upObj[`traces.$.approves.${idx}.description`] = description;
|
|
154
|
+
// // upObj[`traces.$.approves.${idx}.sign_show`] = trimDescription || showBlankApproveDescription ? true : false;
|
|
155
|
+
// // upObj[`traces.$.approves.${idx}.modified`] = new Date();
|
|
156
|
+
// // upObj[`traces.$.approves.${idx}.modified_by`] = session_userId;
|
|
157
|
+
// // return upObj[`traces.$.approves.${idx}.read_date`] = new Date();
|
|
158
|
+
// approveDoc[`description`] = description;
|
|
159
|
+
// if (trimDescription || showBlankApproveDescription) {
|
|
160
|
+
// approveDoc[`sign_show`] = true;
|
|
161
|
+
// }
|
|
162
|
+
// approveDoc[`modified`] = new Date();
|
|
163
|
+
// approveDoc[`modified_by`] = session_userId;
|
|
164
|
+
// approveDoc[`read_date`] = new Date();
|
|
165
|
+
// }
|
|
166
|
+
// });
|
|
167
|
+
// if (key_str && !_.isEmpty(approveDoc)) {
|
|
168
|
+
// for (const key in approveDoc) {
|
|
169
|
+
// if (Object.hasOwnProperty.call(approveDoc, key)) {
|
|
170
|
+
// upObj[key_str + key] = approveDoc[key]
|
|
171
|
+
// }
|
|
172
|
+
// }
|
|
173
|
+
// }
|
|
174
|
+
|
|
175
|
+
// const needUpdateApproveIds = []
|
|
176
|
+
// if (((ref3 = Meteor.settings.public.workflow) != null ? ref3.keepLastSignApproveDescription : void 0) === false && (!!currentApproveDescription !== !!trimDescription || showBlankApproveDescription)) {
|
|
177
|
+
// ins = db.instances.findOne({
|
|
178
|
+
// _id: instanceId
|
|
179
|
+
// }, {
|
|
180
|
+
// fields: {
|
|
181
|
+
// "traces": 1
|
|
182
|
+
// }
|
|
183
|
+
// });
|
|
184
|
+
// traces = ins.traces;
|
|
185
|
+
// currentTrace = _.find(traces, function (t) {
|
|
186
|
+
// return t._id === traceId;
|
|
187
|
+
// });
|
|
188
|
+
// currentStep = currentTrace.step;
|
|
189
|
+
// traces.forEach(function (t, tIdx) {
|
|
190
|
+
// if (t.step === currentStep) {
|
|
191
|
+
// return t != null ? t.approves.forEach(function (appr, aIdx) {
|
|
192
|
+
// if (appr.handler === session_userId && appr.is_finished && appr._id !== approveId && !_.has(appr, 'custom_sign_show')) {
|
|
193
|
+
// if ((trimDescription && appr.sign_show === true && (sign_field_code === "" || !appr.sign_field_code || sign_field_code === appr.sign_field_code)) || showBlankApproveDescription) {
|
|
194
|
+
// upObj[`traces.${tIdx}.approves.${aIdx}.sign_show`] = false;
|
|
195
|
+
// return upObj[`traces.${tIdx}.approves.${aIdx}.keepLastSignApproveDescription`] = approveId;
|
|
196
|
+
// } else if (appr.keepLastSignApproveDescription === approveId) {
|
|
197
|
+
// upObj[`traces.${tIdx}.approves.${aIdx}.sign_show`] = true;
|
|
198
|
+
// return upObj[`traces.${tIdx}.approves.${aIdx}.keepLastSignApproveDescription`] = null;
|
|
199
|
+
// }
|
|
200
|
+
// needUpdateApproveIds.push(appr._id)
|
|
201
|
+
// }
|
|
202
|
+
// }) : void 0;
|
|
203
|
+
// }
|
|
204
|
+
// });
|
|
205
|
+
// }
|
|
206
|
+
// if (!_.isEmpty(upObj)) {
|
|
207
|
+
// db.instances.update({
|
|
208
|
+
// _id: instanceId,
|
|
209
|
+
// "traces._id": traceId
|
|
210
|
+
// }, {
|
|
211
|
+
// $set: upObj
|
|
212
|
+
// });
|
|
213
|
+
// update_instance_tasks(instanceId, traceId, approveId, approveDoc)
|
|
214
|
+
// if (needUpdateApproveIds.length > 0) {
|
|
215
|
+
// update_many_instance_tasks(instanceId, traceId, needUpdateApproveIds, ['sign_show', 'keepLastSignApproveDescription'])
|
|
216
|
+
// }
|
|
217
|
+
// }
|
|
218
|
+
// return true;
|
|
219
|
+
// }
|
|
220
|
+
// },
|
|
221
|
+
// update_sign_show: function (objs, myApprove_id) {
|
|
222
|
+
// objs.forEach(function (obj, index) {
|
|
223
|
+
// var instance, ref, setObj, trace;
|
|
224
|
+
// instance = db.instances.findOne({
|
|
225
|
+
// _id: obj.instance,
|
|
226
|
+
// "traces._id": obj.trace
|
|
227
|
+
// }, {
|
|
228
|
+
// fields: {
|
|
229
|
+
// "traces.$": 1
|
|
230
|
+
// }
|
|
231
|
+
// });
|
|
232
|
+
// if ((instance != null ? (ref = instance.traces) != null ? ref.length : void 0 : void 0) > 0) {
|
|
233
|
+
// trace = instance.traces[0];
|
|
234
|
+
// setObj = {};
|
|
235
|
+
// trace.approves.forEach(function (approve, idx) {
|
|
236
|
+
// if (approve._id === obj._id) {
|
|
237
|
+
// setObj[`traces.$.approves.${idx}.sign_show`] = obj.sign_show;
|
|
238
|
+
// setObj[`traces.$.approves.${idx}.custom_sign_show`] = obj.sign_show;
|
|
239
|
+
// setObj[`traces.$.approves.${idx}.read_date`] = new Date();
|
|
240
|
+
// }
|
|
241
|
+
// if (approve._id === myApprove_id) {
|
|
242
|
+
// return setObj[`traces.$.approves.${idx}.read_date`] = new Date();
|
|
243
|
+
// }
|
|
244
|
+
// });
|
|
245
|
+
// if (!_.isEmpty(setObj)) {
|
|
246
|
+
// db.instances.update({
|
|
247
|
+
// _id: obj.instance,
|
|
248
|
+
// "traces._id": obj.trace
|
|
249
|
+
// }, {
|
|
250
|
+
// $set: setObj
|
|
251
|
+
// });
|
|
252
|
+
// update_many_instance_tasks(obj.instance, obj.trace, [obj._id, myApprove_id], ['sign_show', 'custom_sign_show', 'read_date'])
|
|
253
|
+
// }
|
|
254
|
+
// }
|
|
255
|
+
// });
|
|
256
|
+
// return true;
|
|
257
|
+
// }
|
|
258
|
+
};
|