diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb index db7aa460..593ec953 100644 --- a/app/controllers/dmsf_workflows_controller.rb +++ b/app/controllers/dmsf_workflows_controller.rb @@ -26,6 +26,7 @@ class DmsfWorkflowsController < ApplicationController before_action :find_project before_action :authorize_custom before_action :permissions, :only => [:new_action, :assignment, :start] + before_action :approver_candidates, :only => [:remove_step, :show, :reorder_steps, :add_step] layout :workflows_layout @@ -425,14 +426,16 @@ class DmsfWorkflowsController < ApplicationController end end end - # Operators + # Operators/Assignees if params[:operator_step].present? params[:operator_step].each do |id, operator| step = DmsfWorkflowStep.find_by_id id if step step.operator = operator.to_i + step.user_id = params[:assignee][id] unless step.save flash[:error] = step.errors.full_messages.to_sentence + Rails.logger.error step.errors.full_messages.to_sentence end end end @@ -492,4 +495,9 @@ private require_admin end end + + def approver_candidates + @approving_candidates = @project ? @project.users.to_a : User.active.to_a + end + end diff --git a/app/views/dmsf_workflows/_steps.html.erb b/app/views/dmsf_workflows/_steps.html.erb index 33002d32..76d65a11 100644 --- a/app/views/dmsf_workflows/_steps.html.erb +++ b/app/views/dmsf_workflows/_steps.html.erb @@ -93,7 +93,9 @@  <%= delete_link delete_step_dmsf_workflow_path(:step => step.id) %>
- <%= link_to_user step.user %> + <%= select_tag "assignee[#{step.id}]", + principals_options_for_select(@approving_candidates | [step.user], step.user), + :include_blank => false %>
<% end %> diff --git a/test/functional/dmsf_workflow_controller_test.rb b/test/functional/dmsf_workflow_controller_test.rb index f8f0aa90..97e66b5a 100644 --- a/test/functional/dmsf_workflow_controller_test.rb +++ b/test/functional/dmsf_workflow_controller_test.rb @@ -381,12 +381,27 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase end def test_update_step_operators - put :update_step, :id => @wf1, :step => '1', :operator_step => {@wfs1.id.to_s => DmsfWorkflowStep::OPERATOR_OR.to_s} + put :update_step, + :id => @wf1, + :step => '1', + :operator_step => { @wfs1.id.to_s => DmsfWorkflowStep::OPERATOR_OR.to_s }, + :assignee => { @wfs1.id.to_s => @wfs1.user_id.to_s } assert_response :redirect @wfs1.reload assert_equal @wfs1.operator, DmsfWorkflowStep::OPERATOR_OR end + def test_update_step_assignee + put :update_step, + :id => @wf1, + :step => '1', + :operator_step => { @wfs1.id.to_s => DmsfWorkflowStep::OPERATOR_OR.to_s }, + :assignee => { @wfs1.id.to_s => @user_non_member.id.to_s } + assert_response :redirect + @wfs1.reload + assert_equal @user_non_member.id, @wfs1.user_id + end + def test_delete_step name = @wfs2.name assert_difference 'DmsfWorkflowStep.count', -1 do