#880 Approval workflows in use are read only now
This commit is contained in:
parent
935c9d03d0
commit
1b16b07462
@ -29,6 +29,7 @@ class DmsfWorkflowsController < ApplicationController
|
||||
before_action :authorize_custom
|
||||
before_action :permissions, only: [:new_action, :assignment, :start]
|
||||
before_action :approver_candidates, only: [:remove_step, :show, :reorder_steps, :add_step]
|
||||
before_action :prevent_from_editing, only: [:destroy, :remove_step, :update, :add_step, :update_step, :reorder_steps]
|
||||
|
||||
layout :workflows_layout
|
||||
|
||||
@ -50,7 +51,8 @@ class DmsfWorkflowsController < ApplicationController
|
||||
|
||||
def index
|
||||
@status = params[:status] || 1
|
||||
@workflow_pages, @workflows = paginate DmsfWorkflow.status(@status).global.sorted, per_page: 25
|
||||
@workflow_pages, @workflows = paginate(DmsfWorkflow.status(@status).global.sorted, per_page: 25)
|
||||
@path = dmsf_workflows_path
|
||||
end
|
||||
|
||||
def action
|
||||
@ -350,7 +352,6 @@ class DmsfWorkflowsController < ApplicationController
|
||||
|
||||
def new_step
|
||||
@steps = @dmsf_workflow.dmsf_workflow_steps.select('step, MAX(name) AS name').group(:step)
|
||||
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.js
|
||||
@ -360,7 +361,7 @@ class DmsfWorkflowsController < ApplicationController
|
||||
def add_step
|
||||
if request.post?
|
||||
if params[:step] == '0'
|
||||
step = @dmsf_workflow.dmsf_workflow_steps.collect{|s| s.step}.uniq.count + 1
|
||||
step = @dmsf_workflow.dmsf_workflow_steps.collect{ |s| s.step }.uniq.count + 1
|
||||
else
|
||||
step = params[:step].to_i
|
||||
end
|
||||
@ -409,7 +410,9 @@ class DmsfWorkflowsController < ApplicationController
|
||||
|
||||
def reorder_steps
|
||||
if request.put?
|
||||
unless @dmsf_workflow.reorder_steps(params[:step].to_i, params[:dmsf_workflow][:position].to_i)
|
||||
if @assigned
|
||||
error_dmsf_workflow_assigned
|
||||
elsif !@dmsf_workflow.reorder_steps(params[:step].to_i, params[:dmsf_workflow][:position].to_i)
|
||||
flash[:error] = l(:notice_cannot_renumber_steps)
|
||||
end
|
||||
end
|
||||
@ -532,4 +535,17 @@ private
|
||||
@approving_candidates = @project ? @project.users.to_a : User.active.to_a
|
||||
end
|
||||
|
||||
def prevent_from_editing
|
||||
# A workflow in use can be neither edited nor deleted
|
||||
@assigned = DmsfFileRevision.where(dmsf_workflow_id: @dmsf_workflow.id).exists?
|
||||
if(@assigned && (!request.put?))
|
||||
flash[:error] = l(:error_dmsf_workflow_assigned)
|
||||
if @project
|
||||
redirect_back_or_default settings_project_path(@project, tab: 'dmsf_workflow')
|
||||
else
|
||||
redirect_back_or_default dmsf_workflows_path
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -100,24 +100,4 @@ module DmsfWorkflowsHelper
|
||||
s.html_safe
|
||||
end
|
||||
|
||||
def change_status_link(workflow)
|
||||
url = { controller: 'dmsf_workflows', action: 'update', id: workflow.id }
|
||||
if workflow.locked?
|
||||
link_to l(:button_unlock), url.merge(dmsf_workflow: { status: DmsfWorkflow::STATUS_ACTIVE }), method: :put,
|
||||
class: 'icon icon-unlock'
|
||||
else
|
||||
link_to l(:button_lock), url.merge(dmsf_workflow: { status: DmsfWorkflow::STATUS_LOCKED }), method: :put,
|
||||
class: 'icon icon-lock'
|
||||
end
|
||||
end
|
||||
|
||||
def workflows_status_options_for_select(selected)
|
||||
worflows_count_by_status = DmsfWorkflow.global.group('status').count.to_hash
|
||||
options_for_select([[l(:label_all), ''],
|
||||
["#{l(:status_active)} (#{worflows_count_by_status[DmsfWorkflow::STATUS_ACTIVE].to_i})",
|
||||
DmsfWorkflow::STATUS_ACTIVE.to_s],
|
||||
["#{l(:status_locked)} (#{worflows_count_by_status[DmsfWorkflow::STATUS_LOCKED].to_i})",
|
||||
DmsfWorkflow::STATUS_LOCKED.to_s]], selected.to_s)
|
||||
end
|
||||
|
||||
end
|
||||
@ -20,23 +20,36 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
%>
|
||||
|
||||
<% @workflows = DmsfWorkflow.active.sorted.where(project_id: @project.id) if @project && @workflows.nil? %>
|
||||
|
||||
<% unless @project %>
|
||||
<% if @project %>
|
||||
<% @status = params[:status] || 1 %>
|
||||
<% @workflows = DmsfWorkflow.status(@status).where(project_id: @project.id).sorted %>
|
||||
<% @path = settings_project_path(@project, tab: 'dmsf_workflow') %>
|
||||
<p>
|
||||
<%= link_to l(:label_dmsf_workflow_new), new_dmsf_workflow_path(project_id: @project&.id), class: 'icon icon-add' %>
|
||||
</p>
|
||||
<% else %>
|
||||
<div class="contextual">
|
||||
<%= link_to l(:label_dmsf_workflow_new), new_dmsf_workflow_path, class: 'icon icon-add' %>
|
||||
<%= link_to l(:label_dmsf_workflow_new), new_dmsf_workflow_path(project_id: @project&.id), class: 'icon icon-add' %>
|
||||
</div>
|
||||
<h2><%= l(:label_dmsf_workflow_plural)%></h2>
|
||||
<%= form_tag(dmsf_workflows_path, method: :get) do %>
|
||||
<fieldset>
|
||||
<legend><%= l(:label_filter_plural) %></legend>
|
||||
<label for='status'><%= l(:field_status) %>:</label>
|
||||
<%= select_tag 'status', workflows_status_options_for_select(@status), class: 'small',
|
||||
onchange: 'this.form.submit(); return false;' %>
|
||||
</fieldset>
|
||||
<% end %>
|
||||
<h2><%= l(:label_dmsf_workflow_plural) %></h2>
|
||||
<% end %>
|
||||
|
||||
<%= form_tag(@path, method: :get) do %>
|
||||
<fieldset>
|
||||
<legend><%= l(:label_filter_plural) %></legend>
|
||||
<label for='status'><%= l(:field_status) %>:</label>
|
||||
<%
|
||||
worflows_count_by_status = DmsfWorkflow.where(project_id: @project&.id).group(:status).count.to_hash
|
||||
options = options_for_select([[l(:label_all), ''],
|
||||
["#{l(:status_active)} (#{worflows_count_by_status[DmsfWorkflow::STATUS_ACTIVE].to_i})",
|
||||
DmsfWorkflow::STATUS_ACTIVE.to_s],
|
||||
["#{l(:status_locked)} (#{worflows_count_by_status[DmsfWorkflow::STATUS_LOCKED].to_i})",
|
||||
DmsfWorkflow::STATUS_LOCKED.to_s]], @status.to_s)
|
||||
%>
|
||||
<%= select_tag 'status', options, class: 'small', onchange: 'this.form.submit(); return false;' %>
|
||||
</fieldset>
|
||||
<% end %>
|
||||
|
||||
<% if @workflows.any? %>
|
||||
<table class="list">
|
||||
<thead><tr>
|
||||
@ -48,8 +61,15 @@
|
||||
<tr id="workflow-<%= workflow.id %>" class="dmsf-workflows <%= workflow.active? ? 'active' : 'locked' %>">
|
||||
<td class="name"><%= link_to(h(workflow.name), dmsf_workflow_path(workflow)) %></td>
|
||||
<td class="buttons">
|
||||
<%= change_status_link(workflow) unless @project %>
|
||||
<%= delete_link dmsf_workflow_path(workflow) %>
|
||||
<% url = { controller: 'dmsf_workflows', action: 'update', id: workflow.id } %>
|
||||
<% if workflow.locked? %>
|
||||
<%= link_to l(:button_unlock), url.merge(dmsf_workflow: { status: DmsfWorkflow::STATUS_ACTIVE }),
|
||||
method: :put, class: 'icon icon-unlock' %>
|
||||
<% else %>
|
||||
<%= link_to l(:button_lock), url.merge(dmsf_workflow: { status: DmsfWorkflow::STATUS_LOCKED }),
|
||||
method: :put, class: 'icon icon-lock' %>
|
||||
<% end %>
|
||||
<%= delete_link dmsf_workflow_path(workflow, back_url: @path) %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
@ -59,13 +79,6 @@
|
||||
<p class="nodata"><%= l(:label_no_data) %></p>
|
||||
<% end %>
|
||||
|
||||
<% if @project %>
|
||||
<p>
|
||||
<%= link_to l(:label_dmsf_workflow_new), new_dmsf_workflow_path(project_id: @project.id),
|
||||
class: 'button button-positive icon icon-add' %>
|
||||
</p>
|
||||
<% else %>
|
||||
<% if @workflow_pages %>
|
||||
<span class="pagination"><%= pagination_links_full @workflow_pages %></span>
|
||||
<% end %>
|
||||
<% unless @project %>
|
||||
<span class="pagination"><%= pagination_links_full @workflow_pages %></span>
|
||||
<% end %>
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
<h3 class="title"><%= l(:dmsf_new_step) %></h3>
|
||||
|
||||
<%= labelled_form_for(@dmsf_workflow, { url: edit_dmsf_workflow_path(@dmsf_workflow), method: :post }) do |f| %>
|
||||
<%= hidden_field_tag :back_url, dmsf_workflow_path(@dmsf_workflow) %>
|
||||
<fieldset class="box">
|
||||
<legend><%= l(:label_dmsf_workflow_add_approver) %></legend>
|
||||
<p><%= label_tag 'user_search', l(:label_user_search) %><%= text_field_tag 'user_search', nil %></p>
|
||||
@ -31,17 +32,15 @@
|
||||
<%= render_principals_for_new_dmsf_workflow_users @dmsf_workflow %>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="box">
|
||||
<legend><%= l(:label_dmsf_workflow_step) %></legend>
|
||||
<%= select_tag 'step', dmsf_workflow_steps_options_for_select(@steps),
|
||||
id: 'selected_step', onchange: "$('#dmsf_step_name').toggle(this.value == 0);", style: 'max-width: 40%' %>
|
||||
id: 'selected_step', onchange: "$('#dmsf_step_name').toggle(this.value == 0);", style: 'max-width: 40%' %>
|
||||
<span id="dmsf_step_name">
|
||||
<%= label_tag 'name', l(:field_name) %>
|
||||
<%= text_field_tag 'name', nil, maxlength: 30, style: 'max-width: 40%' %>
|
||||
</span>
|
||||
</fieldset>
|
||||
|
||||
<p class="buttons">
|
||||
<%= l(:label_add_width) %>
|
||||
<%= f.submit l(:dmsf_and), id: 'add-step-and' %>
|
||||
|
||||
@ -20,13 +20,11 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
%>
|
||||
|
||||
<% if @dmsf_workflow.project %>
|
||||
<h2><%= link_to l(:label_dmsf_workflow_plural), settings_project_path(@project, tab: 'dmsf_workflow') %> » <%=h @dmsf_workflow %></h2>
|
||||
<% else %>
|
||||
<h2><%= link_to l(:label_dmsf_workflow_plural), dmsf_workflows_path %> » <%=h @dmsf_workflow %></h2>
|
||||
<% end %>
|
||||
<% path = @dmsf_workflow.project ? settings_project_path(@project, tab: 'dmsf_workflow') : dmsf_workflows_path %>
|
||||
<h2><%= link_to l(:label_dmsf_workflow_plural), path %> » <%=h @dmsf_workflow %></h2>
|
||||
|
||||
<%= labelled_form_for @dmsf_workflow do |f| %>
|
||||
<%= hidden_field_tag :back_url, dmsf_workflow_path(@dmsf_workflow) %>
|
||||
<%= error_messages_for 'workflow' %>
|
||||
<div class="box tabular">
|
||||
<p>
|
||||
@ -38,7 +36,8 @@
|
||||
|
||||
<div id="tab-content-members">
|
||||
<p>
|
||||
<%= link_to l(:dmsf_new_step_or_approver), new_step_dmsf_workflow_path(@dmsf_workflow), remote: true, class: 'icon icon-add' %>
|
||||
<%= link_to l(:dmsf_new_step_or_approver), new_step_dmsf_workflow_path(@dmsf_workflow), remote: true,
|
||||
class: 'icon icon-add' %>
|
||||
</p>
|
||||
<% steps = @dmsf_workflow.dmsf_workflow_steps.collect{|s| s.step}.uniq %>
|
||||
<% if steps.any? %>
|
||||
@ -56,10 +55,12 @@
|
||||
<td class="id"><%= i %></td>
|
||||
<td class="name">
|
||||
<span id="step-index-<%= index %>-name"><%= @dmsf_workflow.dmsf_workflow_steps[index].name if index %></span>
|
||||
<div id="<%= "step-index-#{index}-name-form" %>" class="hol">
|
||||
<div id="<%= "step-index-#{index}-name-form" %>">
|
||||
<%= form_for(@dmsf_workflow, url: update_step_dmsf_workflow_path(step: index), method: :put,
|
||||
html: { id: "step-index-name-#{index}-form" }) do |f| %>
|
||||
<%= f.text_field(:step_name, value: @dmsf_workflow.dmsf_workflow_steps[index].name, id: "dmsf_workflow_step_name_#{index}") %>
|
||||
<%= hidden_field_tag :back_url, dmsf_workflow_path(@dmsf_workflow) %>
|
||||
<%= f.text_field(:step_name, value: @dmsf_workflow.dmsf_workflow_steps[index].name,
|
||||
id: "dmsf_workflow_step_name_#{index}") %>
|
||||
<p>
|
||||
<%= submit_tag l(:button_change), class: 'small' %>
|
||||
<%= link_to_function(
|
||||
@ -72,7 +73,8 @@
|
||||
</td>
|
||||
<td>
|
||||
<span id="step-index-<%= index %>-approvers">
|
||||
<% stps = @dmsf_workflow.dmsf_workflow_steps.collect{ |s| (s.step == i) ? s : nil }.compact %>
|
||||
<% stps = @dmsf_workflow.dmsf_workflow_steps.order(operator: :desc).
|
||||
collect{ |s| (s.step == i) ? s : nil }.compact %>
|
||||
<% stps.each_with_index do |step, j| %>
|
||||
<% if (j > 0) || (step.operator != DmsfWorkflowStep::OPERATOR_AND) %>
|
||||
<b><%= step.soperator %></b>
|
||||
@ -80,9 +82,10 @@
|
||||
<%= link_to_user step.user %>
|
||||
<% end %>
|
||||
</span>
|
||||
<div id="<%= "step-index-#{index}-approvers-form" %>" class="hol">
|
||||
<div id="<%= "step-index-#{index}-approvers-form" %>">
|
||||
<%= form_for(@dmsf_workflow, url: update_step_dmsf_workflow_path(step: index), method: :put,
|
||||
html: { id: "step-index-operator-#{index}-form"}) do |_| %>
|
||||
<%= hidden_field_tag :back_url, dmsf_workflow_path(@dmsf_workflow) %>
|
||||
<div class="dmsf-parent-container">
|
||||
<% stps.each do |step| %>
|
||||
<div class="dmsf-child-container">
|
||||
@ -121,7 +124,8 @@
|
||||
<%= link_to_function l(:button_edit),
|
||||
"$('#step-index-#{index}-name').hide(); $('#step-index-#{index}-approvers').hide(); $('#step-index-#{index}-name-form').show(); $('#step-index-#{index}-approvers-form').show();",
|
||||
class: 'icon icon-edit' %>
|
||||
<%= delete_link edit_dmsf_workflow_path @dmsf_workflow, step: i %>
|
||||
<%= delete_link edit_dmsf_workflow_path(@dmsf_workflow, step: i,
|
||||
back_url: dmsf_workflow_path(@dmsf_workflow)) %>
|
||||
</td>
|
||||
<% end %>
|
||||
</tr>
|
||||
|
||||
@ -54,9 +54,22 @@
|
||||
}
|
||||
|
||||
/* Approval workflow */
|
||||
#dmsf_users_for_delegate { height: 200px; overflow:auto; }
|
||||
#dmsf_users_for_delegate label { display: block; }
|
||||
.dmsf-workflows.locked a { color: #aaa; }
|
||||
#dmsf_users_for_delegate {
|
||||
height: 200px;
|
||||
overflow:auto;
|
||||
}
|
||||
|
||||
#dmsf_users_for_delegate label {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.dmsf-workflows.locked a {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
div[id^="step-index-"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* DMSF revision box */
|
||||
#new_revision_form_content {
|
||||
|
||||
@ -462,6 +462,7 @@ cs:
|
||||
|
||||
label_dmsf_global_menu_disabled: Globální DMS menu zakázáno
|
||||
note_dmsf_global_menu_disabled: Pokud je zašrtnuto, tak položka DMS není v hlavním menu.
|
||||
error_dmsf_workflow_assigned: Použitý schvalovací proces nemůže být ani upraven ani smazán.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -458,6 +458,7 @@ de:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Der verwendete Genehmigungs-Workflow kann weder bearbeitet noch gelöscht werden.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -462,6 +462,7 @@ en:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -462,6 +462,7 @@ es:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -441,6 +441,7 @@ fa:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -462,6 +462,7 @@ fr:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -461,6 +461,7 @@ hu:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -462,6 +462,7 @@ it: # Italian strings thx 2 Matteo Arceci!
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -463,6 +463,7 @@ ja:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -462,6 +462,7 @@ ko:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -462,6 +462,7 @@ nl:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -462,6 +462,7 @@ pl:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -462,6 +462,7 @@ pt-BR:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -462,6 +462,7 @@ sl:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -461,6 +461,7 @@ zh-TW:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
@ -462,6 +462,7 @@ zh:
|
||||
|
||||
label_dmsf_global_menu_disabled: Global DMS menu disabled
|
||||
note_dmsf_global_menu_disabled: If yes, DMS menu item is not present in the top menu.
|
||||
error_dmsf_workflow_assigned: Approval workflow in use can be neither edited nor deleted.
|
||||
|
||||
easy_pages:
|
||||
modules:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user