diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb index 1d6da7b6..21a8b5ec 100644 --- a/app/models/dmsf_file_revision.rb +++ b/app/models/dmsf_file_revision.rb @@ -28,6 +28,7 @@ class DmsfFileRevision < ActiveRecord::Base belongs_to :source_revision, :class_name => 'DmsfFileRevision', :foreign_key => 'source_dmsf_file_revision_id' belongs_to :user belongs_to :deleted_by_user, :class_name => 'User', :foreign_key => 'deleted_by_user_id' + belongs_to :dmsf_workflow has_many :dmsf_file_revision_access, :dependent => :destroy has_many :dmsf_workflow_step_assignment, :dependent => :destroy @@ -311,4 +312,25 @@ class DmsfFileRevision < ActiveRecord::Base dmsf_file.propfind_cache_key end + def workflow_tooltip + tooltip = '' + if self.dmsf_workflow + case workflow + when DmsfWorkflow::STATE_WAITING_FOR_APPROVAL, DmsfWorkflow::STATE_ASSIGNED + assignments = self.dmsf_workflow.next_assignments(self.id) + if assignments + assignments.each_with_index do |assignment, index| + tooltip << ', ' if index > 0 + tooltip << assignment.user.name + end + end + when DmsfWorkflow::STATE_APPROVED, DmsfWorkflow::STATE_REJECTED + action = DmsfWorkflowStepAction.joins(:dmsf_workflow_step_assignment).where( + ['dmsf_workflow_step_assignments.dmsf_file_revision_id', self.id]).order('dmsf_workflow_step_actions.id').last + tooltip << action.author.name if action + end + end + tooltip + end + end diff --git a/app/models/dmsf_workflow.rb b/app/models/dmsf_workflow.rb index 015f6abf..c7a6c87f 100644 --- a/app/models/dmsf_workflow.rb +++ b/app/models/dmsf_workflow.rb @@ -167,19 +167,6 @@ class DmsfWorkflow < ActiveRecord::Base results end - def self.assignments_to_users_str(assignments) - str = '' - if assignments - assignments.each_with_index do |assignment, index| - if index > 0 - str << ', ' - end - str << assignment.user.name - end - end - str - end - def assign(dmsf_file_revision_id) dmsf_workflow_steps.each do |ws| ws.assign(dmsf_file_revision_id) diff --git a/app/models/dmsf_workflow_step_action.rb b/app/models/dmsf_workflow_step_action.rb index 0ab4171e..54de17a5 100644 --- a/app/models/dmsf_workflow_step_action.rb +++ b/app/models/dmsf_workflow_step_action.rb @@ -21,6 +21,7 @@ class DmsfWorkflowStepAction < ActiveRecord::Base belongs_to :dmsf_workflow_step_assignment + belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' validates :dmsf_workflow_step_assignment_id, :presence => true validates :action, :presence => true diff --git a/app/views/dmsf/_file.html.erb b/app/views/dmsf/_file.html.erb index 8690e904..b345f7e4 100644 --- a/app/views/dmsf/_file.html.erb +++ b/app/views/dmsf/_file.html.erb @@ -80,7 +80,7 @@ :project_id => project.id, :id => wf.id, :dmsf_file_revision_id => file.last_revision.id), - :title => DmsfWorkflow.assignments_to_users_str(wf.next_assignments(file.last_revision.id)), + :title => file.last_revision.workflow_tooltip, :remote => true) %> <% else %> <%= file.last_revision.workflow_str(false) %> diff --git a/app/views/dmsf_files/show.html.erb b/app/views/dmsf_files/show.html.erb index 163204dd..f4293a98 100644 --- a/app/views/dmsf_files/show.html.erb +++ b/app/views/dmsf_files/show.html.erb @@ -129,7 +129,7 @@ <%= link_to(revision.workflow_str(false), log_dmsf_workflow_path(:project_id => @project.id, :id => wf.id, :dmsf_file_revision_id => revision.id), - :title => DmsfWorkflow.assignments_to_users_str(wf.next_assignments(revision.id)), + :title => revision.workflow_tooltip, :remote => true) %>

<% end %> diff --git a/test/unit/dmsf_file_revision_test.rb b/test/unit/dmsf_file_revision_test.rb index f7145b37..2f734fc9 100644 --- a/test/unit/dmsf_file_revision_test.rb +++ b/test/unit/dmsf_file_revision_test.rb @@ -22,18 +22,21 @@ require File.expand_path('../../test_helper', __FILE__) class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles, :members, - :member_roles, :enabled_modules, :enumerations, :dmsf_locks + :member_roles, :enabled_modules, :enumerations, :dmsf_locks, :dmsf_workflows, :dmsf_workflow_steps, + :dmsf_workflow_step_assignments, :dmsf_workflow_step_actions def setup @revision1 = DmsfFileRevision.find_by_id 1 @revision2 = DmsfFileRevision.find_by_id 2 @revision5 = DmsfFileRevision.find_by_id 5 + @wf1 = DmsfWorkflow.find_by_id 1 end def test_truth assert_kind_of DmsfFileRevision, @revision1 assert_kind_of DmsfFileRevision, @revision2 assert_kind_of DmsfFileRevision, @revision5 + assert_kind_of DmsfWorkflow, @wf1 end def test_delete_restore @@ -144,4 +147,9 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest RedmineDmsf::Webdav::Cache.init_nullcache end + def test_workflow_tooltip + @revision2.set_workflow @wf1.id, 'start' + assert_equal 'John Smith', @revision2.workflow_tooltip + end + end \ No newline at end of file diff --git a/test/unit/dmsf_workflow_test.rb b/test/unit/dmsf_workflow_test.rb index db0e0ab4..09b0c5b5 100644 --- a/test/unit/dmsf_workflow_test.rb +++ b/test/unit/dmsf_workflow_test.rb @@ -188,12 +188,6 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest assignments = @wf1.next_assignments(2) assert_equal assignments.size, 1 assert_equal assignments[0].user_id, 2 - end - - def test_assignments_to_users_str - assignments = @wf1.next_assignments(2) - str = DmsfWorkflow.assignments_to_users_str(assignments) - assert_equal str, 'John Smith', str end def test_assign