Workflow notification missing #855

This commit is contained in:
Karel Pičman 2018-05-30 13:44:41 +02:00
parent dae39dfe27
commit 44981a54d8
5 changed files with 64 additions and 25 deletions

View File

@ -72,7 +72,7 @@ class DmsfWorkflowsController < ApplicationController
end
if revision.workflow == DmsfWorkflow::STATE_APPROVED
# Just approved
recipients = DmsfMailer.get_notify_users(@project, [revision.dmsf_file])
recipients = DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true)
recipients.each do |user|
DmsfMailer.workflow_notification(
user,
@ -94,7 +94,7 @@ class DmsfWorkflowsController < ApplicationController
recipients = @dmsf_workflow.participiants
recipients.push User.find_by_id revision.dmsf_workflow_assigned_by
recipients.uniq!
recipients = recipients & DmsfMailer.get_notify_users(@project, [revision.dmsf_file])
recipients = recipients & DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true)
recipients.each do |user|
DmsfMailer.workflow_notification(
user,
@ -117,7 +117,7 @@ class DmsfWorkflowsController < ApplicationController
if action.action == DmsfWorkflowStepAction::ACTION_DELEGATE
# Delegation
delegate = User.find_by_id params[:step_action].to_i / 10
if DmsfMailer.get_notify_users(@project).include?(delegate)
if DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true).include?(delegate)
DmsfMailer.workflow_notification(
delegate,
@dmsf_workflow,
@ -137,7 +137,7 @@ class DmsfWorkflowsController < ApplicationController
if assignments.first.dmsf_workflow_step.step != action.dmsf_workflow_step_assignment.dmsf_workflow_step.step
# Next step
assignments.each do |assignment|
if assignment.user && DmsfMailer.get_notify_users(@project).include?(assignment.user)
if assignment.user && DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true).include?(assignment.user)
DmsfMailer.workflow_notification(
assignment.user,
@dmsf_workflow,
@ -148,7 +148,7 @@ class DmsfWorkflowsController < ApplicationController
end
end
to = User.find_by_id revision.dmsf_workflow_assigned_by
if to && DmsfMailer.get_notify_users(@project).include?(to)
if to && DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true).include?(to)
DmsfMailer.workflow_notification(
to,
@dmsf_workflow,
@ -161,7 +161,7 @@ class DmsfWorkflowsController < ApplicationController
recipients = assignments.collect{ |a| a.user }
recipients << to if to
recipients.uniq!
recipients = recipients & DmsfMailer.get_notify_users(@project)
recipients = recipients & DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true)
unless recipients.empty?
to = recipients.collect{ |r| r.name }.first(DMSF_MAX_NOTIFICATION_RECEIVERS_INFO).join(', ')
to << ((recipients.count > DMSF_MAX_NOTIFICATION_RECEIVERS_INFO) ? ',...' : '.')

View File

@ -275,12 +275,10 @@ class DmsfFile < ActiveRecord::Base
new_revision.dmsf_workflow_assigned_at = nil
new_revision.dmsf_workflow_started_by = nil
new_revision.dmsf_workflow_started_at = nil
if self.last_revision.dmsf_workflow_id
wf = DmsfWorkflow.where(:id => self.last_revision.dmsf_workflow_id).first
if wf && (wf.project.nil? || (wf.project.id == project.id))
new_revision.set_workflow(wf.id, nil)
new_revision.assign_workflow(wf.id)
end
wf = last_revision.dmsf_workflow
if wf && (wf.project.nil? || (wf.project.id == project.id))
new_revision.set_workflow(wf.id, nil)
new_revision.assign_workflow(wf.id)
end
if File.exist? self.last_revision.disk_file
FileUtils.cp self.last_revision.disk_file, new_revision.disk_file(false)
@ -486,16 +484,25 @@ class DmsfFile < ActiveRecord::Base
end
def owner?(user)
self.last_revision && (self.last_revision.user == user)
last_revision && (last_revision.user == user)
end
def involved?(user)
self.dmsf_file_revisions.each do |file_revision|
dmsf_file_revisions.each do |file_revision|
return true if file_revision.user == user
end
false
end
def assigned?(user)
if last_revision && last_revision.dmsf_workflow
last_revision.dmsf_workflow.next_assignments(last_revision.id).each do |assignment|
return true if assignment.user == user
end
end
false
end
def custom_value(custom_field)
self.last_revision.custom_field_values.each do |cv|
if cv.custom_field == custom_field
@ -510,7 +517,7 @@ class DmsfFile < ActiveRecord::Base
end
def extension
File.extname(self.last_revision.disk_filename).strip.downcase[1..-1] if self.last_revision
File.extname(last_revision.disk_filename).strip.downcase[1..-1] if last_revision
end
include ActionView::Helpers::NumberHelper

View File

@ -86,9 +86,9 @@ class DmsfMailer < Mailer
end
end
def self.get_notify_users(project, files = [])
def self.get_notify_users(project, files = [], force_notification = false)
return [] unless project.active?
if files.present?
if !force_notification && files.present?
notify_files = files.select { |file| file.notify? }
return [] if notify_files.empty?
end
@ -106,21 +106,30 @@ class DmsfMailer < Mailer
when 'only_my_events'
author = false
files.each do |file|
if file.involved?(notify_user)
if file.involved?(notify_user) || file.assignee?(notify_user)
author = true
break
end
end
author
when 'only_owner', 'only_assigned'
author = false
when 'only_owner'
owner = false
files.each do |file|
if file.owner?(notify_user)
author = true
owner = true
break
end
end
author
owner
when 'only_assigned'
assignee = false
files.each do |file|
if file.assigned?(notify_user)
assignee = true
break
end
end
assignee
else
false
end

View File

@ -221,7 +221,7 @@ class DmsfWorkflow < ActiveRecord::Base
assignments = self.next_assignments revision.id
recipients = assignments.collect{ |a| a.user }
recipients.uniq!
recipients = recipients & DmsfMailer.get_notify_users(project)
recipients = recipients & DmsfMailer.get_notify_users(project, [revision.dmsf_file], true)
recipients.each do |user|
DmsfMailer.workflow_notification(
user,

View File

@ -149,7 +149,7 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
assert_equal 0, @file4.referenced_links.count
@file4.dmsf_folder.lock!
end
def test_copy_to_filename
assert_no_difference '@file1.dmsf_file_revisions.count' do
new_file = @file1.copy_to_filename(@file1.project, nil, 'new_file.txt')
@ -202,7 +202,7 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
assert_nil new_file.last_revision.dmsf_workflow_started_by
assert_nil new_file.last_revision.dmsf_workflow_started_at
end
def test_copy_to
assert_no_difference '@file1.dmsf_file_revisions.count' do
new_file = @file1.copy_to(@file1.project, @folder1)
@ -285,4 +285,27 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = setting
end
def test_owner
assert @file1.owner?(@file1.last_revision.user)
assert !@file1.owner?(@jsmith)
@file1.last_revision.user = @jsmith
assert @file1.owner?(@jsmith)
end
def test_involved
assert @file1.involved?(@file1.last_revision.user)
assert !@file1.involved?(@jsmith)
@file1.dmsf_file_revisions[1].user = @jsmith
assert @file1.involved?(@jsmith)
end
def test_assigned
assert !@file1.assigned?(@admin)
assert !@file1.assigned?(@jsmith)
@file1.last_revision.set_workflow(@wf1.id, nil)
@file1.last_revision.assign_workflow(@wf1.id)
assert @file1.assigned?(@admin)
assert @file1.assigned?(@jsmith)
end
end