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
|
# File 'lib/lcp_ruby/workflow/approval/step_evaluator.rb', line 5
def self.evaluate(step, approval_request)
approval_def = find_approval_def(approval_request)
task_model = Registry.task_model
step_model = Registry.step_model
tasks = task_model.where(approval_step_id: step.id)
approved_count = tasks.where(status: "approved").count
rejected_tasks = tasks.where(status: "rejected")
returned_tasks = tasks.where(status: "returned")
if returned_tasks.any?
resolve(approval_request, outcome: :returned, step: step, tasks: tasks)
return
end
if approval_def.on_reject == "any" && rejected_tasks.any?
resolve(approval_request, outcome: :rejected, step: step, tasks: tasks)
return
end
if approval_def.on_reject == "all"
decided_count = tasks.where(status: %w[approved rejected]).count
total_actionable = tasks.where.not(status: %w[delegated cancelled]).count
if decided_count == total_actionable && rejected_tasks.any? && approved_count < step.required_approvals
resolve(approval_request, outcome: :rejected, step: step, tasks: tasks)
return
end
end
if approved_count >= step.required_approvals
step.update!(status: "completed", completed_at: Time.current)
advance(approval_request, approval_def, step_model, task_model)
end
end
|