diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb index ecc45015..f4d25c6b 100644 --- a/app/controllers/dmsf_workflows_controller.rb +++ b/app/controllers/dmsf_workflows_controller.rb @@ -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 diff --git a/app/helpers/dmsf_workflows_helper.rb b/app/helpers/dmsf_workflows_helper.rb index d6ba3121..616c1b61 100644 --- a/app/helpers/dmsf_workflows_helper.rb +++ b/app/helpers/dmsf_workflows_helper.rb @@ -1,6 +1,6 @@ # Redmine plugin for Document Management System "Features" # -# Copyright (C) 2013 Karel Picman +# Copyright (C) 2011-14 Karel Picman # # 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 diff --git a/app/models/dmsf_workflow.rb b/app/models/dmsf_workflow.rb index 52a4f4a4..376eee0a 100644 --- a/app/models/dmsf_workflow.rb +++ b/app/models/dmsf_workflow.rb @@ -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 diff --git a/app/views/dmsf_workflows/_steps.html.erb b/app/views/dmsf_workflows/_steps.html.erb index 60848a8e..db08246f 100644 --- a/app/views/dmsf_workflows/_steps.html.erb +++ b/app/views/dmsf_workflows/_steps.html.erb @@ -25,7 +25,7 @@ <%= labelled_form_for @dmsf_workflow do |f| %> <%= error_messages_for 'workflow' %>
-

<%= f.label :label_dmsf_workflow_name %><%= text_field_tag :name, @dmsf_workflow.name %><%= submit_tag l(:button_save) %>

+

<%= f.text_field :name, :value => @dmsf_workflow.name, :required => true %><%= submit_tag l(:button_save) %>

<% end %> @@ -38,7 +38,7 @@ <%= l(:label_dmsf_workflow_step) %> <%= l(:label_dmsf_workflow_approval_plural) %> - <%=l(:button_sort)%> + <%= l(:button_sort)%> diff --git a/app/views/dmsf_workflows/new.html.erb b/app/views/dmsf_workflows/new.html.erb index c7b59a9d..f30f57b1 100644 --- a/app/views/dmsf_workflows/new.html.erb +++ b/app/views/dmsf_workflows/new.html.erb @@ -1,6 +1,6 @@ <%# Redmine plugin for Document Management System "Features" # -# Copyright (C) 2013 Karel Pičman +# Copyright (C) 2011-14 Karel Pičman # # 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' %>
-

<%= f.label :label_dmsf_workflow_name %><%= text_field_tag :name %>

+

+ <%= f.text_field :name, :value => @dmsf_workflow.name, :size => 25, :maxlength => 255, :required => true %> +

+

+ <%= 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])) %> +

<% if project %>

<%= hidden_field_tag :project_id, project.id %>

<% end %>
<%= submit_tag l(:button_create) %> -<% end %> \ No newline at end of file +<% end %> + + \ No newline at end of file