From c2f9b9f117693f0b6c246f8a4803eeabe830c961 Mon Sep 17 00:00:00 2001
From: Karel Picman <%= position %>
<%= file.last_revision.size %>
diff --git a/app/views/dmsf_files/_approval_workflow_button.html.erb b/app/views/dmsf_files/_approval_workflow_button.html.erb
index f23fb74b..66b8f68e 100644
--- a/app/views/dmsf_files/_approval_workflow_button.html.erb
+++ b/app/views/dmsf_files/_approval_workflow_button.html.erb
@@ -36,7 +36,11 @@
:title => l(:title_waiting_for_approval),
:remote => true,
:class => 'icon icon-wf-waiting') %>
+ <% else %>
+
<% end %>
+ <% else %>
+
<% end %>
<% when DmsfWorkflow::STATE_ASSIGNED %>
<% if User.current && (file.last_revision.dmsf_workflow_assigned_by == User.current.id) && wf %>
@@ -46,17 +50,28 @@
:dmsf_file_revision_id => file.last_revision.id),
:title => l(:label_dmsf_wokflow_action_start),
:class => 'icon icon-wf-assigned') %>
+ <% else %>
+
<% end %>
<% when DmsfWorkflow::STATE_APPROVED, DmsfWorkflow::STATE_REJECTED %>
+
<% else %>
<% if workflows_available %>
- <%= link_to('',
- assign_dmsf_workflow_path(
- :project_id => project.id,
- :dmsf_file_revision_id => file.last_revision.id),
- :title => l(:label_dmsf_wokflow_action_assign),
- :remote => true,
- :class => 'icon icon-wf-none') %>
+ <%= link_to('',
+ dmsf_link_id ?
+ assign_dmsf_workflow_path(
+ :id => project.id,
+ :project_id => project.id,
+ :dmsf_link_id => dmsf_link_id) :
+ assign_dmsf_workflow_path(
+ :id => project.id,
+ :project_id => project.id,
+ :dmsf_file_revision_id => file.last_revision.id),
+ :title => l(:label_dmsf_wokflow_action_assign),
+ :remote => true,
+ :class => 'icon icon-wf-none') %>
+ <% else %>
+
<% end %>
<% end %>
-<% end %>
\ No newline at end of file
+<% end %>
diff --git a/app/views/dmsf_files/_link.html.erb b/app/views/dmsf_files/_link.html.erb
index dd6e7d6f..8a884fea 100644
--- a/app/views/dmsf_files/_link.html.erb
+++ b/app/views/dmsf_files/_link.html.erb
@@ -96,6 +96,6 @@
:locals => {:file => dmsf_file,
:file_approval_allowed => User.current.allowed_to?(:file_approval, dmsf_file.project),
:workflows_available => DmsfWorkflow.where(['project_id = ? OR project_id IS NULL', dmsf_file.project.id]).exists?,
- :project => dmsf_file.project, :wf => wf }) %>
+ :project => dmsf_file.project, :wf => wf, :dmsf_link_id => nil }) %>
<%= label_tag('workflow', "#{l(:link_workflow)}:") %>
<%= select_tag(
diff --git a/app/views/dmsf_workflows/assignment.js.erb b/app/views/dmsf_workflows/assignment.js.erb
new file mode 100644
index 00000000..3ce8b82e
--- /dev/null
+++ b/app/views/dmsf_workflows/assignment.js.erb
@@ -0,0 +1,45 @@
+<%
+# encoding: utf-8
+#
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2011-17 Karel Pičman
"
- ).appendTo(linksSpan);
+ $(' ').attr({href: "#", 'class': 'remove-upload icon icon-del'}).click(dmsfRemoveFile)
+ );
+
+ if(awf) {
+
+ linkSpan.append($(' ').attr({
+ href: "/dmsf_workflows/c1/assign?dmsf_link_id=" + linkId,
+ 'class': 'icon icon-wf-none', 'data-remote': 'true', 'title': title
+ }));
+ }
+
+ linkSpan.append("
");
+ linkSpan.appendTo(linksSpan);
}
}
@@ -42,7 +52,6 @@ function dmsfAddFile(inputEl, file, eagerUpload) {
if ($('#dmsf_attachments_fields').children().length < 10) {
var attachmentId = dmsfAddFile.nextAttachmentId++;
-
var fileSpan = $('', { id: 'dmsf_attachments_' + attachmentId });
if($(inputEl).attr('multiple') == 'multiple') {
@@ -60,7 +69,9 @@ function dmsfAddFile(inputEl, file, eagerUpload) {
maxlength: 255,
placeholder: $(inputEl).data('description-placeholder')
}).toggle(!eagerUpload),
- $(' ').attr({href: "#", 'class': 'remove-upload icon icon-del'}).click(dmsfRemoveFile).toggle(!eagerUpload)
+ $(' ').attr({href: "#", 'class': 'remove-upload icon icon-del'}).click(dmsfRemoveFile).toggle(!eagerUpload),
+ $(' ').attr({href: "/dmsf_workflows/c1/assign?attachment_id=" + attachmentId,
+ 'class': 'icon icon-wf-none', 'data-remote': 'true'})
).appendTo('#dmsf_attachments_fields');
}
else{
diff --git a/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb b/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb
index 95997bc7..7f4c54ae 100644
--- a/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb
+++ b/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb
@@ -60,18 +60,20 @@ module RedmineDmsf
params = context[:params]
issue.save_dmsf_attachments(params[:dmsf_attachments])
issue.save_dmsf_links(params[:dmsf_links])
+ issue.save_dmsf_attachments_wfs(params[:dmsf_attachments_wfs], params[:dmsf_attachments])
+ issue.save_dmsf_links_wfs(params[:dmsf_links_wfs])
end
end
def controller_issues_after_save(context)
- # Create attached documents
if context.is_a?(Hash)
issue = context[:issue]
params = context[:params]
+ # Attach DMS documents
uploaded_files = params[:dmsf_attachments]
if uploaded_files && uploaded_files.is_a?(Hash)
system_folder = issue.system_folder(true)
- uploaded_files.each_value do |uploaded_file|
+ uploaded_files.each do |key, uploaded_file|
upload = DmsfUpload.create_from_uploaded_attachment(issue.project, system_folder, uploaded_file)
if upload
uploaded_file[:disk_filename] = upload.disk_filename
@@ -81,22 +83,40 @@ module RedmineDmsf
uploaded_file[:size] = upload.size
uploaded_file[:mime_type] = upload.mime_type
uploaded_file[:tempfile_path] = upload.tempfile_path
+ if params[:dmsf_attachments_wfs].present? && params[:dmsf_attachments_wfs][key].present?
+ uploaded_file[:workflow_id] = params[:dmsf_attachments_wfs][key].to_i
+ end
end
end
DmsfUploadHelper.commit_files_internal uploaded_files, issue.project, system_folder,
context[:controller]
end
- dmsf_links = params[:dmsf_links]
- if dmsf_links && dmsf_links.is_a?(Hash)
+ # Attach DMS links
+ issue.saved_dmsf_links.each do |l|
+ file = l.target_file
+ revision = file.last_revision
system_folder = issue.system_folder(true)
- ids = dmsf_links.map(&:last)
- ids.each do |id|
- l = DmsfLink.find_by_id(id)
- if l
- l.project_id = system_folder.project_id
- l.dmsf_folder_id = system_folder.id
- if l.save
- issue.dmsf_file_added l.target_file
+ if system_folder
+ l.project_id = system_folder.project_id
+ l.dmsf_folder_id = system_folder.id
+ if l.save
+ issue.dmsf_file_added file
+ end
+ wf = issue.saved_dmsf_links_wfs[l.id]
+ if wf
+ # Assign the workflow
+ revision.set_workflow(wf.id, 'assign')
+ revision.assign_workflow(wf.id)
+ # Start the workflow
+ revision.set_workflow(wf.id, 'start')
+ if revision.save
+ begin
+ file.lock!
+ rescue DmsfLockError => e
+ Rails.logger.warn e.message
+ end
+ else
+ Rails.logger.error l(:error_workflow_assign)
end
end
end
diff --git a/lib/redmine_dmsf/patches/issue_patch.rb b/lib/redmine_dmsf/patches/issue_patch.rb
index 1437f3e7..6578e1d0 100644
--- a/lib/redmine_dmsf/patches/issue_patch.rb
+++ b/lib/redmine_dmsf/patches/issue_patch.rb
@@ -62,6 +62,38 @@ module RedmineDmsf
@saved_dmsf_links || []
end
+ def save_dmsf_attachments_wfs(dmsf_attachments_wfs, dmsf_attachments)
+ if dmsf_attachments_wfs
+ @dmsf_attachments_wfs = {}
+ dmsf_attachments_wfs.each do |attachment_id, approval_workflow_id|
+ attachment = dmsf_attachments[attachment_id]
+ if attachment
+ a = Attachment.find_by_token(attachment[:token])
+ wf = DmsfWorkflow.find_by_id approval_workflow_id
+ @dmsf_attachments_wfs[a.id] = wf if wf && a
+ end
+ end
+ end
+ end
+
+ def saved_dmsf_attachments_wfs
+ @dmsf_attachments_wfs || []
+ end
+
+ def save_dmsf_links_wfs(dmsf_links_wfs)
+ if dmsf_links_wfs
+ @saved_dmsf_links_wfs = {}
+ dmsf_links_wfs.each do |dmsf_link_id, approval_workflow_id|
+ wf = DmsfWorkflow.find_by_id approval_workflow_id
+ @saved_dmsf_links_wfs[dmsf_link_id.to_i] = wf if wf
+ end
+ end
+ end
+
+ def saved_dmsf_links_wfs
+ @saved_dmsf_links_wfs || {}
+ end
+
def system_folder(create = false)
parent = DmsfFolder.system.where(:project_id => self.project_id, :title => '.Issues').first
if create && !parent