Merge pull request #1232 from wolfc01/master

Allow approval workflow actions only on x.0 file versions
This commit is contained in:
Karel Picman 2021-04-06 08:44:35 +02:00 committed by GitHub
commit 9dcda992cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 48 additions and 4 deletions

View File

@ -110,6 +110,14 @@ class DmsfFile < ActiveRecord::Base
visible.find_by project_id: project_id, dmsf_folder_id: folder&.id, name: name visible.find_by project_id: project_id, dmsf_folder_id: folder&.id, name: name
end end
def approval_allowed_zero_minor
if Setting.plugin_redmine_dmsf['only_approval_zero_minor_version']
return last_revision.minor_version == 0
else
return true
end
end
def last_revision def last_revision
unless defined?(@last_revision) unless defined?(@last_revision)
@last_revision = deleted? ? dmsf_file_revisions.first : dmsf_file_revisions.visible.first @last_revision = deleted? ? dmsf_file_revisions.first : dmsf_file_revisions.visible.first

View File

@ -24,6 +24,7 @@
<% wf = DmsfWorkflow.find_by(id: dmsf_file.last_revision.dmsf_workflow_id) if dmsf_file.last_revision.dmsf_workflow_id %> <% wf = DmsfWorkflow.find_by(id: dmsf_file.last_revision.dmsf_workflow_id) if dmsf_file.last_revision.dmsf_workflow_id %>
<% file_approval_allowed = User.current.allowed_to?(:file_approval, project) %> <% file_approval_allowed = User.current.allowed_to?(:file_approval, project) %>
<% allowed = User.current && (dmsf_file.last_revision.dmsf_workflow_assigned_by_user == User.current) && wf %> <% allowed = User.current && (dmsf_file.last_revision.dmsf_workflow_assigned_by_user == User.current) && wf %>
<% allowed_minor = dmsf_file.approval_allowed_zero_minor %>
<% if file_approval_allowed %> <% if file_approval_allowed %>
<% case dmsf_file.last_revision.workflow %> <% case dmsf_file.last_revision.workflow %>
@ -32,22 +33,43 @@
<% assignments = wf.next_assignments(dmsf_file.last_revision.id) %> <% assignments = wf.next_assignments(dmsf_file.last_revision.id) %>
<% index = assignments.find_index{ |assignment| assignment.user_id == User.current.id } if assignments %> <% index = assignments.find_index{ |assignment| assignment.user_id == User.current.id } if assignments %>
<% assignment_id = (index && assignments && assignments[index]) ? assignments[index].id : nil %> <% assignment_id = (index && assignments && assignments[index]) ? assignments[index].id : nil %>
<%= context_menu_link l(:title_approval), action_dmsf_workflow_path(project_id: project.id, id: wf.id, <% if allowed_minor %>
<%= context_menu_link l(:title_approval), action_dmsf_workflow_path(project_id: project.id, id: wf.id,
dmsf_workflow_step_assignment_id: assignment_id, dmsf_workflow_step_assignment_id: assignment_id,
dmsf_file_revision_id: dmsf_file.last_revision.id), dmsf_file_revision_id: dmsf_file.last_revision.id),
remote: true, class: 'icon icon-ok', id: 'dmsf-cm-workflow', remote: true, class: 'icon icon-ok', id: 'dmsf-cm-workflow',
disabled: !assignments || !index %> disabled: !assignments || !index %>
<% else %>
<%= context_menu_link l(:title_approval_minor), action_dmsf_workflow_path(project_id: project.id, id: wf.id,
dmsf_workflow_step_assignment_id: assignment_id,
dmsf_file_revision_id: dmsf_file.last_revision.id),
remote: true, class: 'icon icon-ok', id: 'dmsf-cm-workflow',
disabled: true %>
<% end %>
<% end %> <% end %>
<% when DmsfWorkflow::STATE_ASSIGNED %> <% when DmsfWorkflow::STATE_ASSIGNED %>
<%= context_menu_link l(:title_start), start_dmsf_workflow_path(id: dmsf_file.last_revision.dmsf_workflow_id, <% if allowed_minor %>
<%= context_menu_link l(:title_start), start_dmsf_workflow_path(id: dmsf_file.last_revision.dmsf_workflow_id,
dmsf_file_revision_id: dmsf_file.last_revision.id), dmsf_file_revision_id: dmsf_file.last_revision.id),
class: 'icon icon-ok', disabled: !allowed %> class: 'icon icon-ok', disabled: !allowed %>
<% else %>
<%= context_menu_link l(:title_start_minor), start_dmsf_workflow_path(id: dmsf_file.last_revision.dmsf_workflow_id,
dmsf_file_revision_id: dmsf_file.last_revision.id),
class: 'icon icon-ok', disabled: true %>
<% end %>
<% when DmsfWorkflow::STATE_APPROVED, DmsfWorkflow::STATE_REJECTED, DmsfWorkflow::STATE_OBSOLETE %> <% when DmsfWorkflow::STATE_APPROVED, DmsfWorkflow::STATE_REJECTED, DmsfWorkflow::STATE_OBSOLETE %>
<%# %> <%# %>
<% else %> <% else %>
<%= context_menu_link l(:title_assignment), assign_dmsf_workflow_path(id: project.id, project_id: project.id, <% if allowed_minor %>
<%= context_menu_link l(:title_assignment), assign_dmsf_workflow_path(id: project.id, project_id: project.id,
dmsf_file_revision_id: dmsf_file.last_revision.id), dmsf_file_revision_id: dmsf_file.last_revision.id),
remote: true, class: 'icon icon-ok', id: 'dmsf-cm-workflow', remote: true, class: 'icon icon-ok', id: 'dmsf-cm-workflow',
disabled: locked || !workflows_available %> disabled: locked || !workflows_available %>
<% else %>
<%= context_menu_link l(:title_assignment_minor), assign_dmsf_workflow_path(id: project.id, project_id: project.id,
dmsf_file_revision_id: dmsf_file.last_revision.id),
remote: true, class: 'icon icon-ok', id: 'dmsf-cm-workflow',
disabled: true %>
<% end %>
<% end %> <% end %>
<% end %> <% end %>

View File

@ -209,6 +209,14 @@
</em> </em>
</p> </p>
<p>
<%= content_tag(:label, l(:only_approval_zero_minor_version)) %>
<%= check_box_tag 'settings[only_approval_zero_minor_version]', false, @settings['only_approval_zero_minor_version'], size: 50 %>
<em class="info">
<%= l(:only_approval_zero_minor_version) %><br/> <%= l(:label_default) %>: <%= l(:general_text_No)%>
</em>
</p>
<hr/> <hr/>
<em class="info"> <em class="info">
<%= l(:label_webdav) %> <%= l(:label_webdav) %>
@ -331,3 +339,5 @@
<%= l(:text_enable_cjk_ngrams) %> <%= l(:text_enable_cjk_ngrams) %>
</em> </em>
</p> </p>

View File

@ -255,10 +255,13 @@ en:
title_rejection: Rejection title_rejection: Rejection
title_delegation: Delegation title_delegation: Delegation
title_assignment: Assignment title_assignment: Assignment
title_assignment_minor: Assignment not allowed, minor must be zero
title_start: Start title_start: Start
title_start_minor: Start not allowed, minor must be zero
title_dmsf_workflow_log: Approval Workflow Log title_dmsf_workflow_log: Approval Workflow Log
title_assigned: Assigned title_assigned: Assigned
title_approval: Approval title_approval: Approval
title_approval_minor: Approval not allowed, minor must be zero
title_rejected: Rejected title_rejected: Rejected
title_obsolete: Obsolete title_obsolete: Obsolete
dmsf_and: AND dmsf_and: AND
@ -431,4 +434,5 @@ en:
activerecord: activerecord:
errors: errors:
messages: messages:
error_contains_invalid_character: contains invalid character(s) error_contains_invalid_character: contains invalid character(s)
only_approval_zero_minor_version: only approval zero minor version