diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2017-01-04 20:47:29 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2017-01-04 20:47:29 +0000 |
commit | c4b1ab644ee60e18d0a62f3ab1ecb6aa57c1d731 (patch) | |
tree | 6ce9e42c502e0e76b39d2ff60b3a803a6655e47b /app/controllers | |
parent | 82a67f4ebe5ac133bede65b7366d5ea31b05f8dc (diff) | |
download | redmine-c4b1ab644ee60e18d0a62f3ab1ecb6aa57c1d731.tar.gz redmine-c4b1ab644ee60e18d0a62f3ab1ecb6aa57c1d731.zip |
Merged r16118 to r16122 (#24693, #24718, #24722).
git-svn-id: http://svn.redmine.org/redmine/branches/3.3-stable@16132 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/controllers')
-rw-r--r-- | app/controllers/issues_controller.rb | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index c640aadbe..a3cd8fb9f 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -325,21 +325,28 @@ class IssuesController < ApplicationController def destroy raise Unauthorized unless @issues.all?(&:deletable?) - @hours = TimeEntry.where(:issue_id => @issues.map(&:id)).sum(:hours).to_f + + # all issues and their descendants are about to be deleted + issues_and_descendants_ids = Issue.self_and_descendants(@issues).pluck(:id) + time_entries = TimeEntry.where(:issue_id => issues_and_descendants_ids) + @hours = time_entries.sum(:hours).to_f + if @hours > 0 case params[:todo] when 'destroy' # nothing to do when 'nullify' - TimeEntry.where(['issue_id IN (?)', @issues]).update_all('issue_id = NULL') + time_entries.update_all(:issue_id => nil) when 'reassign' - reassign_to = @project.issues.find_by_id(params[:reassign_to_id]) + reassign_to = @project && @project.issues.find_by_id(params[:reassign_to_id]) if reassign_to.nil? flash.now[:error] = l(:error_issue_not_found_in_project) return + elsif issues_and_descendants_ids.include?(reassign_to.id) + flash.now[:error] = l(:error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted) + return else - TimeEntry.where(['issue_id IN (?)', @issues]). - update_all("issue_id = #{reassign_to.id}") + time_entries.update_all(:issue_id => reassign_to.id, :project_id => reassign_to.project_id) end else # display the destroy form if it's a user request |