Approval workflow copying #326

This commit is contained in:
Karel Pičman 2014-12-03 16:32:50 +01:00
parent 5eb8a0c462
commit ef11baad8e
5 changed files with 59 additions and 15 deletions

View File

@ -203,19 +203,36 @@ class DmsfWorkflowsController < ApplicationController
end
def new
@dmsf_workflow = DmsfWorkflow.new
@dmsf_workflow = DmsfWorkflow.new
# Reload
if params[:dmsf_workflow] && params[:dmsf_workflow][:name].present?
@dmsf_workflow.name = params[:dmsf_workflow][:name]
elsif params[:dmsf_workflow_id].present?
wf = DmsfWorkflow.find_by_id params[:dmsf_workflow_id]
@dmsf_workflow.name = "#{wf.name}-#{@project.identifier}" if wf
end
render :layout => !request.xhr?
end
def create
@dmsf_workflow = DmsfWorkflow.new(:name => params[:name], :project_id => params[:project_id])
if request.post? && @dmsf_workflow.save
if params[:dmsf_workflow_id] && params[:dmsf_workflow]
wf = DmsfWorkflow.find_by_id params[:dmsf_workflow_id]
@dmsf_workflow = wf.copy_to @project, params[:dmsf_workflow][:name]
else
@dmsf_workflow = DmsfWorkflow.new(:name => params[:name],
:project_id => @project.id)
@dmsf_workflow.save
end
if request.post? && @dmsf_workflow.valid?
flash[:notice] = l(:notice_successful_create)
if @project
redirect_to settings_project_path(@project, :tab => 'dmsf_workflow')
else
redirect_to dmsf_workflows_path
end
else
else
render :action => 'new'
end
end

View File

@ -1,6 +1,6 @@
# Redmine plugin for Document Management System "Features"
#
# Copyright (C) 2013 Karel Picman <karel.picman@kontron.com>
# Copyright (C) 2011-14 Karel Picman <karel.picman@kontron.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@ -48,10 +48,21 @@ module DmsfWorkflowsHelper
end
def dmsf_workflows_for_select(project, dmsf_workflow_id)
options = Array.new
options = Array.new
DmsfWorkflow.where(['project_id = ? OR project_id IS NULL', project.id]).each do |wf|
options << [wf.name, wf.id]
end
end
options_for_select(options, :selected => dmsf_workflow_id)
end
def dmsf_all_workflows_for_select(dmsf_workflow_id)
options = Array.new
options << ['', 0]
DmsfWorkflow.where('project_id IS NOT NULL').each do |wf|
if User.current.allowed_to?(:manage_workflows, wf.project)
options << [wf.name, wf.id]
end
end
options_for_select(options, :selected => dmsf_workflow_id)
end

View File

@ -204,14 +204,18 @@ class DmsfWorkflow < ActiveRecord::Base
return false
end
def copy_to(project)
def copy_to(project, name = nil)
new_wf = self.dup
new_wf.name = "#{self.name}_#{project.identifier}"
if name
new_wf.name = name
else
new_wf.name << "-#{project.identifier}"
end
new_wf.project_id = project.id
if new_wf.save
self.dmsf_workflow_steps.each do |step|
step.copy_to(new_wf)
end
end
end
return new_wf
end

View File

@ -25,7 +25,7 @@
<%= labelled_form_for @dmsf_workflow do |f| %>
<%= error_messages_for 'workflow' %>
<div class="box tabular">
<p><%= f.label :label_dmsf_workflow_name %><%= text_field_tag :name, @dmsf_workflow.name %><%= submit_tag l(:button_save) %></p>
<p><%= f.text_field :name, :value => @dmsf_workflow.name, :required => true %><%= submit_tag l(:button_save) %></p>
</div>
<% end %>
@ -38,7 +38,7 @@
<thead><tr>
<th><%= l(:label_dmsf_workflow_step) %></th>
<th><%= l(:label_dmsf_workflow_approval_plural) %></th>
<th><%=l(:button_sort)%></th>
<th><%= l(:button_sort)%></th>
<th/>
</tr></thead>
<tbody>

View File

@ -1,6 +1,6 @@
<%# Redmine plugin for Document Management System "Features"
#
# Copyright (C) 2013 Karel Pičman <karel.picman@kontron.com>
# Copyright (C) 2011-14 Karel Pičman <karel.picman@kontron.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@ -26,10 +26,22 @@
<%= labelled_form_for @dmsf_workflow do |f| %>
<%= error_messages_for 'dmsf_workflow' %>
<div class="box tabular">
<p><%= f.label :label_dmsf_workflow_name %><%= text_field_tag :name %></p>
<p>
<%= f.text_field :name, :value => @dmsf_workflow.name, :size => 25, :maxlength => 255, :required => true %>
</p>
<p>
<%= label_tag :label_copy_workflow_from, l(:label_copy_workflow_from) %>
<%= select_tag('dmsf_workflow_id', dmsf_all_workflows_for_select(params[:dmsf_workflow_id])) %>
</p>
<% if project %>
<p><%= hidden_field_tag :project_id, project.id %></p>
<% end %>
</div>
<%= submit_tag l(:button_create) %>
<% end %>
<% end %>
<script type="text/javascript">
$('#dmsf_workflow_id').change(function () {
$('#content').load("<%= url_for(:action => 'new', :project_id => @project.id) %>", $('#new_dmsf_workflow').serialize());
});
</script>