diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb index d2f2d9f1..98a988b9 100644 --- a/app/controllers/dmsf_workflows_controller.rb +++ b/app/controllers/dmsf_workflows_controller.rb @@ -338,12 +338,15 @@ class DmsfWorkflowsController < ApplicationController def reorder_steps if request.put? - unless @dmsf_workflow.reorder_steps(params[:step].to_i, params[:workflow_step][:move_to]) + unless @dmsf_workflow.reorder_steps(params[:step].to_i, params[:dmsf_workflow][:position].to_i) flash[:error] = l(:notice_cannot_renumber_steps) end end respond_to do |format| format.html + format.js { + render inline: "location.replace('#{dmsf_workflow_path(@dmsf_workflow)}');" + } end end diff --git a/app/models/dmsf_workflow.rb b/app/models/dmsf_workflow.rb index d4010777..ed358a99 100644 --- a/app/models/dmsf_workflow.rb +++ b/app/models/dmsf_workflow.rb @@ -19,7 +19,6 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class DmsfWorkflow < ActiveRecord::Base - has_many :dmsf_workflow_steps, -> { order 'step ASC, operator DESC' }, :dependent => :destroy belongs_to :author, :class_name => 'User' @@ -89,51 +88,19 @@ class DmsfWorkflow < ActiveRecord::Base def reorder_steps(step, move_to) DmsfWorkflow.transaction do - case move_to - when 'highest' - unless step == 1 - dmsf_workflow_steps.each do |ws| - if ws.step < step - return false unless ws.update_attribute('step', ws.step + 1) - elsif ws.step == step - return false unless ws.update_attribute('step', 1) - end - end - end - when 'higher' - unless step == 1 - dmsf_workflow_steps.each do |ws| - if ws.step == step - 1 - return false unless ws.update_attribute('step', step) - elsif ws.step == step - return false unless ws.update_attribute('step', step - 1) - end - end - end - when 'lower' - unless step == dmsf_workflow_steps.collect{|s| s.step}.uniq.count - dmsf_workflow_steps.each do |ws| - if ws.step == step + 1 - return false unless ws.update_attribute('step', step) - elsif ws.step == step - return false unless ws.update_attribute('step', step + 1) - end - end - end - when 'lowest' - size = dmsf_workflow_steps.collect{|s| s.step}.uniq.count - unless step == size - dmsf_workflow_steps.each do |ws| - if ws.step > step - return false unless ws.update_attribute('step', ws.step - 1) - elsif ws.step == step - return false unless ws.update_attribute('step', size) - end - end + dmsf_workflow_steps.each do |ws| + if ws.step == step + return false unless ws.update_attribute('step', move_to) + elsif ws.step >= move_to && ws.step < step + # Move up + return false unless ws.update_attribute('step', ws.step + 1) + elsif ws.step <= move_to && ws.step > step + # Move down + return false unless ws.update_attribute('step', ws.step - 1) end + end end - end - return reload + return true end def delegates(q, dmsf_workflow_step_assignment_id, dmsf_file_revision_id) diff --git a/app/views/dmsf_workflows/_steps.html.erb b/app/views/dmsf_workflows/_steps.html.erb index ef3c2699..5d244c57 100644 --- a/app/views/dmsf_workflows/_steps.html.erb +++ b/app/views/dmsf_workflows/_steps.html.erb @@ -42,11 +42,11 @@

<% steps = @dmsf_workflow.dmsf_workflow_steps.collect{|s| s.step}.uniq %> <% if steps.any? %> - +
- + @@ -62,10 +62,8 @@ <%= link_to_user step.user %> <% end %> - @@ -75,4 +73,8 @@ <% else %>

<%= l(:label_no_data) %>

<% end %> - \ No newline at end of file + + +<%= javascript_tag do %> + $(function() { $("table.steps tbody").positionedItems(); }); +<% end %>
<%= l(:label_dmsf_workflow_step) %> <%= l(:label_dmsf_workflow_approval_plural) %><%= l(:button_sort) %>
- <%= reorder_links('workflow_step', {:action => 'edit', :id => @dmsf_workflow, :step => i}, :put) %> - + <%= reorder_handle(@dmsf_workflow, :url => url_for(:action => 'edit', :id => @dmsf_workflow, :step => i) ) %> <%= delete_link edit_dmsf_workflow_path(@dmsf_workflow, :step => i) %>