diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb
index 0ce4c46f..c9afb538 100644
--- a/app/models/dmsf_file_revision.rb
+++ b/app/models/dmsf_file_revision.rb
@@ -182,20 +182,22 @@ class DmsfFileRevision < ActiveRecord::Base
unless dmsf_workflow_id.blank?
self.dmsf_workflow_id = dmsf_workflow_id
if commit == 'start'
- self.workflow = DmsfWorkflow::STATE_WAITING_FOR_APPROVAL # Waiting for approval
+ self.workflow = DmsfWorkflow::STATE_WAITING_FOR_APPROVAL
+ self.dmsf_workflow_started_by = User.current.id if User.current
+ self.dmsf_workflow_started_at = DateTime.now
else
- self.workflow = DmsfWorkflow::STATE_DRAFT # Draft
+ self.workflow = DmsfWorkflow::STATE_DRAFT
+ self.dmsf_workflow_assigned_by = User.current.id if User.current
+ self.dmsf_workflow_assigned_at = DateTime.now
end
end
end
end
def assign_workflow(dmsf_workflow_id)
- if User.current.allowed_to?(:file_approval, self.file.project)
- #if self.workflow == DmsfWorkflow::STATE_DRAFT # Waiting for approval
- wf = DmsfWorkflow.find_by_id(dmsf_workflow_id)
- wf.assign(self.id) if wf && self.id
- #end
+ if User.current.allowed_to?(:file_approval, self.file.project)
+ wf = DmsfWorkflow.find_by_id(dmsf_workflow_id)
+ wf.assign(self.id) if wf && self.id
end
end
diff --git a/app/models/dmsf_workflow_step_action.rb b/app/models/dmsf_workflow_step_action.rb
index 568e4252..718bb16d 100644
--- a/app/models/dmsf_workflow_step_action.rb
+++ b/app/models/dmsf_workflow_step_action.rb
@@ -17,17 +17,25 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class DmsfWorkflowStepAction < ActiveRecord::Base
-
+
belongs_to :dmsf_workflow_step_assignment
validates :dmsf_workflow_step_assignment_id, :presence => true
validates :action, :presence => true
validates :note, :presence => true, :unless => lambda { self.action == DmsfWorkflowStepAction::ACTION_APPROVE }
+ validates :author_id, :presence => true
ACTION_APPROVE = 1
ACTION_REJECT = 2
ACTION_DELEGATE = 3
+ ACTION_ASSIGN = 4
+ ACTION_START = 5
+ def initialize(*args)
+ super
+ self.author_id = User.current.id if User.current
+ end
+
def self.is_finished?(action)
action == DmsfWorkflowStepAction::ACTION_APPROVE ||
action == DmsfWorkflowStepAction::ACTION_REJECT
@@ -36,5 +44,5 @@ class DmsfWorkflowStepAction < ActiveRecord::Base
def is_finished?
DmsfWorkflowStepAction.is_finished? self.action
end
-
+
end
\ No newline at end of file
diff --git a/app/views/dmsf/show.html.erb b/app/views/dmsf/show.html.erb
index aec9a1c3..52f8ae8b 100644
--- a/app/views/dmsf/show.html.erb
+++ b/app/views/dmsf/show.html.erb
@@ -65,8 +65,9 @@
<%= l(:link_title) %> |
<%= l(:link_size) %> |
<%= l(:link_modified) %> |
- <%= l(:link_ver) %> |
- <%= l(:link_author) %> |
+ <%= l(:link_ver) %> |
+ <%= l(:link_workflow) %> |
+ <%= l(:link_author) %> |
|
|
|
@@ -93,7 +94,8 @@
<%= image_tag("lockedbycurrent.png", :title => l(:title_locked_by_you), :plugin => :redmine_dmsf) %>
<% end %>
- |
+ |
+ |
<%= h(subfolder.user) %> |
<% if User.current.allowed_to?(:file_approval, @project) %>
@@ -171,9 +173,21 @@
<%= image_tag("lockedbycurrent.png", :title => l(:title_locked_by_you), :plugin => :redmine_dmsf) %>
<% end %>
|
-
- <%= "#{file.last_revision.version} #{file.last_revision.workflow_str(false)}" %>
- |
+ <%= file.last_revision.version %> |
+
+ <% wf = DmsfWorkflow.find_by_id(file.last_revision.dmsf_workflow_id) %>
+ <% if wf %>
+ <%= link_to(
+ file.last_revision.workflow_str(false),
+ log_dmsf_workflow_path(
+ :project_id => @project.id,
+ :id => wf.id,
+ #:dmsf_workflow_step_assignment_id => dmsf_workflow_step_assignment_id,
+ :dmsf_file_revision_id => file.last_revision.id),
+ #:title => l(:title_waiting_for_approval),
+ :remote => true) %>
+ <% end %>
+ |
<%= h(file.last_revision.user) %> |
<% if User.current.allowed_to?(:file_approval, @project) %>
@@ -314,9 +328,9 @@ sUrl = "jquery.dataTables/#{I18n.locale.to_s.downcase}.json" if I18n.locale && !
"aaSorting": [[1,'asc']],
"aaSortingFixed": [[7,'asc']],
"aoColumnDefs": [
- { "bSearchable": false, "aTargets": [0, 6, 7, 8] },
- { "bSortable": false, "aTargets": [0, 6, 7] },
- { "iDataSort": 8, "aTargets": [ 2 ] }
+ { "bSearchable": false, "aTargets": [0, 7, 8, 9] },
+ { "bSortable": false, "aTargets": [0, 7, 8] },
+ { "iDataSort": 9, "aTargets": [ 2 ] }
],
"fnInitComplete": function() {
jQuery("div.controls").prependTo(jQuery("#browser_wrapper div.fg-toolbar")[0]);
diff --git a/app/views/dmsf_workflows/_log.html.erb b/app/views/dmsf_workflows/_log.html.erb
new file mode 100644
index 00000000..ac84c720
--- /dev/null
+++ b/app/views/dmsf_workflows/_log.html.erb
@@ -0,0 +1,49 @@
+<%= l(:title_dmsf_workflow_log) %>
+
+
+ <% if params[:dmsf_file_revision_id].present? %>
+ <% revision = DmsfFileRevision.find_by_id(params[:dmsf_file_revision_id]) %>
+ <% if revision %>
+ <%= link_to @workflow.name, edit_dmsf_workflow_path(@workflow) %><%= " - #{revision.workflow_str false}" %>
+
+
+
+ | <%= l(:label_dmsf_workflow_step) %> |
+ <%= l(:label_user) %> |
+ <%= l(:label_action) %> |
+ <%= l(:label_note) %> |
+ <%=l(:label_date)%> |
+
+
+
+ | - |
+ <%= link_to_user User.find_by_id(revision.dmsf_workflow_assigned_by) if revision.dmsf_workflow_assigned_by %> |
+ Assigned |
+ |
+ <%= format_time(revision.dmsf_workflow_assigned_at) if revision.dmsf_workflow_assigned_at %> |
+
+
+ | - |
+ <%= link_to_user User.find_by_id(revision.dmsf_workflow_started_by) if revision.dmsf_workflow_started_by %> |
+ Started |
+ |
+ <%= format_time(revision.dmsf_workflow_started_at) if revision.dmsf_workflow_started_at %> |
+
+ <% sql = "SELECT c.action, c.note, c.created_at, c.author_id, a.user_id, s.step FROM dmsf_workflow_step_actions c RIGHT JOIN dmsf_workflow_step_assignments a ON a.id = c.dmsf_workflow_step_assignment_id JOIN dmsf_workflow_steps s ON s.id = a.dmsf_workflow_step_id WHERE a.dmsf_file_revision_id = #{revision.id} ORDER BY c.created_at" %>
+ <% result = DmsfWorkflowStep.connection.execute sql %>
+ <% result.each_with_index do |row, i| %>
+
+ | <%= row[5] %> |
+ <%= link_to_user User.find_by_id(row[3].present? ? row[3] : row[4]) %> |
+ <%= revision.workflow_str false %> |
+ <%= row[1] %> |
+ <%= format_time(row[2]) if row[2].present? %> |
+
+ <% end; reset_cycle %>
+
+
+
+ <% end %>
+ <% end %>
+
+
diff --git a/app/views/dmsf_workflows/log.html.erb b/app/views/dmsf_workflows/log.html.erb
deleted file mode 100644
index 6231320b..00000000
--- a/app/views/dmsf_workflows/log.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-WorkflowController#log
diff --git a/app/views/dmsf_workflows/log.js.erb b/app/views/dmsf_workflows/log.js.erb
new file mode 100644
index 00000000..de409eaa
--- /dev/null
+++ b/app/views/dmsf_workflows/log.js.erb
@@ -0,0 +1,3 @@
+$('#ajax-modal').html('<%= escape_javascript(render :partial => 'log', :locals => {:workflow => @workflow}) %>');
+showModal('ajax-modal', '640px');
+$('#ajax-modal').addClass('workflow-log');
\ No newline at end of file
diff --git a/app/views/dmsf_workflows/new_action.js.erb b/app/views/dmsf_workflows/new_action.js.erb
deleted file mode 100644
index 92d31fd2..00000000
--- a/app/views/dmsf_workflows/new_action.js.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-$('#ajax-modal').modal('hide').empty();
-window.location.reload();
\ No newline at end of file
diff --git a/assets/stylesheets/dmsf.css b/assets/stylesheets/dmsf.css
index 21f077df..5c8623cb 100644
--- a/assets/stylesheets/dmsf.css
+++ b/assets/stylesheets/dmsf.css
@@ -14,8 +14,8 @@ table.entries {
}
table.entries td.modified {
- min-width: 140px;
- width: 140px;
+ min-width: 104px;
+ width: 104px;
}
table.entries td.actions {
@@ -24,7 +24,7 @@ table.entries td.actions {
}
table.entries td.title {
- width: 50%;
+ width: 40%;
}
table.entries th.check, table.entries td.check {
@@ -136,6 +136,11 @@ td.version img {
vertical-align:text-top;
}
+td.workflow {
+ font-size: 0.8em;
+ white-space: nowrap;
+}
+
/* DMSF entries list icons */
div.right_icon_box {
@@ -251,11 +256,6 @@ div.revision_box .ui-widget-header {
font-weight: normal;
}
-td.workflow {
- font-size: 0.8em;
- white-space: nowrap;
+table.steps td.note {
+ width: 30%;
}
-
-td.workflow img {
- vertical-align:text-top;
-}
\ No newline at end of file
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 60c31ada..5e6cd109 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -45,7 +45,7 @@ en:
:link_title: "Title"
:link_size: "Size"
:link_modified: "Modified"
- :link_ver: "Version"
+ :link_ver: "Ver."
:link_author: "Author"
:title_check_for_zip_download_or_email: "Check for Zip download or email"
:title_delete: "Delete"
@@ -230,4 +230,7 @@ en:
info_revision: "r%{rev}"
link_workflow: Workflow
button_assign: Assign
- error_empty_note: "The note can't be empty"
\ No newline at end of file
+ error_empty_note: "The note can't be empty"
+ title_dmsf_workflow_log: 'Approval workflow log'
+ label_action: Action
+ label_note: Note
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index 83b8e729..193a6379 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -107,6 +107,7 @@ RedmineApp::Application.routes.draw do
get 'autocomplete_for_user'
get 'action'
get 'assign'
+ get 'log'
post 'new_action'
post 'start'
post 'assignment'
diff --git a/db/migrate/20120822100401_create_dmsf_workflows.rb b/db/migrate/20120822100401_create_dmsf_workflows.rb
index fbb00c29..8bc9de19 100644
--- a/db/migrate/20120822100401_create_dmsf_workflows.rb
+++ b/db/migrate/20120822100401_create_dmsf_workflows.rb
@@ -26,11 +26,19 @@ class CreateDmsfWorkflows < ActiveRecord::Migration
change_table :dmsf_file_revisions do |t|
t.references :dmsf_workflow
+ t.integer :dmsf_workflow_assigned_by
+ t.datetime :dmsf_workflow_assigned_at
+ t.integer :dmsf_workflow_started_by
+ t.datetime :dmsf_workflow_started_at
end
end
def self.down
remove_column :dmsf_file_revisions, :dmsf_workflow_id
+ remove_column :dmsf_file_revisions, :dmsf_workflow_assigned_by
+ remove_column :dmsf_file_revisions, :dmsf_workflow_assigned_at
+ remove_column :dmsf_file_revisions, :dmsf_workflow_started_by
+ remove_column :dmsf_file_revisions, :dmsf_workflow_started_at
drop_table :dmsf_workflows
end
end
diff --git a/db/migrate/20120822100404_create_dmsf_workflow_step_actions.rb b/db/migrate/20120822100404_create_dmsf_workflow_step_actions.rb
index e7704c5e..2ee590e3 100644
--- a/db/migrate/20120822100404_create_dmsf_workflow_step_actions.rb
+++ b/db/migrate/20120822100404_create_dmsf_workflow_step_actions.rb
@@ -23,6 +23,7 @@ class CreateDmsfWorkflowStepActions < ActiveRecord::Migration
t.integer :action, :null => false
t.text :note
t.timestamp :created_at
+ t.integer :author_id, :null => false
end
add_index :dmsf_workflow_step_actions,
:dmsf_workflow_step_assignment_id,
diff --git a/init.rb b/init.rb
index f61b03d2..23f74632 100644
--- a/init.rb
+++ b/init.rb
@@ -57,7 +57,7 @@ Redmine::Plugin.register :redmine_dmsf do
:dmsf_upload => [:upload_files, :upload_file, :commit_files]}
permission :file_approval, {:dmsf_files => [:delete_revision, :notify_activate, :notify_deactivate],
:dmsf => [:notify_activate, :notify_deactivate],
- :dmsf_workflows => [:new, :create, :destroy, :edit, :add_step, :remove_step, :reorder_steps, :update, :start, :assign, :assignment, :action, :new_action]}
+ :dmsf_workflows => [:new, :create, :destroy, :edit, :add_step, :remove_step, :reorder_steps, :update, :start, :assign, :assignment, :action, :new_action, :log]}
permission :force_file_unlock, {}
end
|