diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb index 45536c74..68ff6898 100644 --- a/app/controllers/dmsf_workflows_controller.rb +++ b/app/controllers/dmsf_workflows_controller.rb @@ -187,28 +187,47 @@ class DmsfWorkflowsController < ApplicationController def assignment if (params[:commit] == l(:button_submit)) && params[:dmsf_workflow_id].present? && (params[:dmsf_workflow_id] != '-1') - revision = DmsfFileRevision.find_by_id params[:dmsf_file_revision_id] - if revision - revision.set_workflow(params[:dmsf_workflow_id], params[:action]) - revision.assign_workflow(params[:dmsf_workflow_id]) - if request.post? - if revision.save - file = DmsfFile.find_by_id revision.dmsf_file_id - if file - begin - file.lock! - rescue DmsfLockError => e - logger.warn e.message + # DMS file + if params[:dmsf_file_revision_id].present? && params[:dmsf_link_id].blank? && params[:attachment_id].blank? + revision = DmsfFileRevision.find_by_id params[:dmsf_file_revision_id] + if revision + revision.set_workflow(params[:dmsf_workflow_id], params[:action]) + revision.assign_workflow(params[:dmsf_workflow_id]) + if request.post? + if revision.save + file = DmsfFile.find_by_id revision.dmsf_file_id + if file + begin + file.lock! + rescue DmsfLockError => e + Rails.logger.warn e.message + end + flash[:notice] = l(:notice_successful_update) end - flash[:notice] = l(:notice_successful_update) + else + flash[:error] = l(:error_workflow_assign) end - else - flash[:error] = l(:error_workflow_assign) end end + redirect_to :back + return + # DMS link (attached) + elsif params[:dmsf_link_id].present? + @dmsf_link_id = params[:dmsf_link_id] + @dmsf_workflow_id = params[:dmsf_workflow_id] + # Attachment (attached) + elsif params[:attachment_id].present? + @attachment_id = params[:attachment_id] + @dmsf_workflow_id = params[:dmsf_workflow_id] end + else + redirect_to :back + return + end + respond_to do |format| + format.html + format.js end - redirect_to :back end def log diff --git a/app/helpers/dmsf_helper.rb b/app/helpers/dmsf_helper.rb index 32cfecf4..9c72cc98 100644 --- a/app/helpers/dmsf_helper.rb +++ b/app/helpers/dmsf_helper.rb @@ -135,7 +135,7 @@ module DmsfHelper i += 1 tree << [x, pos + (step * i)] else - tree << [x, pos + step + i] + tree << [x, pos + (step * (i + 1))] end end tree diff --git a/app/helpers/dmsf_upload_helper.rb b/app/helpers/dmsf_upload_helper.rb index b0ea3e23..5dc6bfa1 100644 --- a/app/helpers/dmsf_upload_helper.rb +++ b/app/helpers/dmsf_upload_helper.rb @@ -111,7 +111,28 @@ module DmsfUploadHelper else failed_uploads.push(commited_file) end + # Approval workflow + if commited_file[:workflow_id].present? + wf = DmsfWorkflow.find_by_id commited_file[:workflow_id] + if wf + # Assign the workflow + new_revision.set_workflow(wf.id, 'assign') + new_revision.assign_workflow(wf.id) + # Start the workflow + new_revision.set_workflow(wf.id, 'start') + if new_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 end + # Notifications if ((folder && folder.notification?) || (!folder && project.dmsf_notification?)) begin recipients = DmsfMailer.get_notify_users(project, files) diff --git a/app/views/dmsf/_file.html.erb b/app/views/dmsf/_file.html.erb index 059d666b..16669a7f 100644 --- a/app/views/dmsf/_file.html.erb +++ b/app/views/dmsf/_file.html.erb @@ -135,7 +135,7 @@ <% end %> <%= render(:partial => 'dmsf_files/approval_workflow_button', :locals => {:file => file, :file_approval_allowed => @file_approval_allowed, - :workflows_available => @workflows_available, :project => project, :wf => wf }) %> + :workflows_available => @workflows_available, :project => 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