5
6
7
8
9
10
11
12
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
38
39
40
41
42
43
44
45
46
|
# File 'lib/lcp_ruby/workflow/approval/engine.rb', line 5
def self.activate(record, workflow_def, state_name, user:)
approval_def = workflow_def.approval_for(state_name)
return nil unless approval_def
request_model = Registry.request_model
step_model = Registry.step_model
task_model = Registry.task_model
if approval_def.bypass? && bypass_satisfied?(approval_def, record, user)
return bypass_approval(approval_def, record, workflow_def, user)
end
cancel_active_requests(record, state_name, request_model, step_model, task_model)
previous_request = find_previous_request(record, state_name, request_model)
restart_count = previous_request ? (previous_request.restart_count + 1) : 0
approval_request = request_model.create!(
record_type: model_name_for(record),
record_id: record.id,
workflow_name: workflow_def.name,
workflow_version: workflow_def.version,
state_name: state_name,
strategy: approval_def.strategy,
status: "pending",
initiated_by_id: user.id,
initiated_by_snapshot: UserSnapshot.capture(user),
previous_request_id: previous_request&.id,
restart_count: restart_count
)
reset_mode = previous_request ? approval_def.rework_reset_mode : "all"
create_steps(approval_def, approval_request, record, user, step_model, task_model,
reset_mode: reset_mode, previous_request: previous_request)
approval_request
end
|