From 7fc3e49a76f6edcfe808485682e8a2641d7f9f1b Mon Sep 17 00:00:00 2001
From: Karel Picman
Date: Tue, 19 Jul 2016 14:04:32 +0200
Subject: [PATCH] Drag&Drop in approval workflow steps ordering
---
app/controllers/dmsf_workflows_controller.rb | 5 +-
app/models/dmsf_workflow.rb | 55 ++++----------------
app/views/dmsf_workflows/_steps.html.erb | 14 ++---
3 files changed, 23 insertions(+), 51 deletions(-)
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? %>
-
+
| <%= l(:label_dmsf_workflow_step) %> |
<%= l(:label_dmsf_workflow_approval_plural) %> |
- <%= l(:button_sort) %> |
+ |
|
@@ -62,10 +62,8 @@
<%= link_to_user step.user %>
<% end %>
-
- <%= 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) %>
|
@@ -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 %>