]> source.dussan.org Git - redmine.git/commitdiff
Merged r16118 to r16122 (#24693, #24718, #24722).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 4 Jan 2017 20:50:27 +0000 (20:50 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 4 Jan 2017 20:50:27 +0000 (20:50 +0000)
git-svn-id: http://svn.redmine.org/redmine/branches/3.2-stable@16133 e93f8b46-1217-0410-a6f0-8f06a7374b81

53 files changed:
app/controllers/issues_controller.rb
app/models/issue.rb
app/views/issues/destroy.html.erb
config/locales/ar.yml
config/locales/az.yml
config/locales/bg.yml
config/locales/bs.yml
config/locales/ca.yml
config/locales/cs.yml
config/locales/da.yml
config/locales/de.yml
config/locales/el.yml
config/locales/en-GB.yml
config/locales/en.yml
config/locales/es-PA.yml
config/locales/es.yml
config/locales/et.yml
config/locales/eu.yml
config/locales/fa.yml
config/locales/fi.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/he.yml
config/locales/hr.yml
config/locales/hu.yml
config/locales/id.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/ko.yml
config/locales/lt.yml
config/locales/lv.yml
config/locales/mk.yml
config/locales/mn.yml
config/locales/nl.yml
config/locales/no.yml
config/locales/pl.yml
config/locales/pt-BR.yml
config/locales/pt.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/sk.yml
config/locales/sl.yml
config/locales/sq.yml
config/locales/sr-YU.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/th.yml
config/locales/tr.yml
config/locales/uk.yml
config/locales/vi.yml
config/locales/zh-TW.yml
config/locales/zh.yml
test/functional/issues_controller_test.rb

index c23c1b51606b4e82782707c0adf5c379d14e7a9e..01a127b5b785ddfe001cb0c20f22e116eaeaa98a 100644 (file)
@@ -317,21 +317,28 @@ class IssuesController < ApplicationController
   end
 
   def destroy
-    @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
index c4748609f7bcea721aec7e90a4a8c959df604a01..2d9ff3eaba64d2771fc089c657ca10a63e1ff4af 100644 (file)
@@ -1042,6 +1042,15 @@ class Issue < ActiveRecord::Base
     end
   end
 
+  # Returns a scope of the given issues and their descendants
+  def self.self_and_descendants(issues)
+    Issue.joins("JOIN #{Issue.table_name} ancestors" +
+        " ON ancestors.root_id = #{Issue.table_name}.root_id" +
+        " AND ancestors.lft <= #{Issue.table_name}.lft AND ancestors.rgt >= #{Issue.table_name}.rgt"
+      ).
+      where(:ancestors => {:id => issues.map(&:id)})
+  end
+
   # Finds an issue relation given its id.
   def find_relation(relation_id)
     IssueRelation.where("issue_to_id = ? OR issue_from_id = ?", id, id).find(relation_id)
index 4a0631e68db5dd18d790f9732e4b9e7f05d205f0..83da014cd8c718c23f6c85ffd9008ea4479ac1bb 100644 (file)
@@ -7,8 +7,10 @@
 <p>
 <label><%= radio_button_tag 'todo', 'destroy', true %> <%= l(:text_destroy_time_entries) %></label><br />
 <label><%= radio_button_tag 'todo', 'nullify', false %> <%= l(:text_assign_time_entries_to_project) %></label><br />
+<% if @project %>
 <label><%= radio_button_tag 'todo', 'reassign', false, :onchange => 'if (this.checked) { $("#reassign_to_id").focus(); }' %> <%= l(:text_reassign_time_entries) %></label>
 <%= text_field_tag 'reassign_to_id', params[:reassign_to_id], :size => 6, :onfocus => '$("#todo_reassign").attr("checked", true);' %>
+<% end %>
 </p>
 </div>
 <%= submit_tag l(:button_apply) %>
index 8cd0a88de26459a69e3805f41f7bfb11d7ec7a22..2d4230066f5d83bf90fcf867be951a4c10bd9aed 100644 (file)
@@ -1182,3 +1182,5 @@ ar:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 9c41d4a791068a4d8441cb51cd681505ee1102dd..f83ee4dbd9405d2bfa14c08892f1e73c1968883a 100644 (file)
@@ -1277,3 +1277,5 @@ az:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 95133921308dc1495d8d751a013d2c3bbcb4d57b..a4538326929c8dca0308029de0f119cf966d99df 100644 (file)
@@ -1173,3 +1173,5 @@ bg:
   description_date_from: Въведете начална дата
   description_date_to: Въведете крайна дата
   text_repository_identifier_info: 'Позволени са малки букви (a-z), цифри, тирета и _.<br />Промяна след създаването му не е възможна.'
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index ca4bd07216c841df5817f883a6ed6f72f8bcee68..bffb4ff514ff774d5b42853a61c12d39cf3de420 100644 (file)
@@ -1195,3 +1195,5 @@ bs:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index d6674a5e53a22fb8949318d234bf52de4f2b397f..019203d7930e7e47a87d76718ad5619d6efa8130 100644 (file)
@@ -1184,3 +1184,5 @@ ca:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 1e5616cc6ddb54067fe8a73a1ebf537574a20966..dbeb0e8a6b972b8edb2b17f8c364070d742a1ba3 100644 (file)
@@ -1183,3 +1183,5 @@ cs:
   label_any_open_issues: otevřené úkoly
   label_no_open_issues: bez otevřených úkolů
   label_default_values_for_new_users: Výchozí hodnoty pro nové uživatele
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index e4543d0c89fcede72df1f21ad2666594822441ec..913c853b24edee53cfadd149d507609a627e26a6 100644 (file)
@@ -1199,3 +1199,5 @@ da:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index e0fc45a2a32a4a08983225429e4fdcaaf81119eb..a9ecb7f05faffb90129cd3ab072ba4fd644d7c39 100644 (file)
@@ -1189,3 +1189,5 @@ de:
   label_any_open_issues: irgendein offenes Ticket
   label_no_open_issues: kein offenes Ticket
   label_default_values_for_new_users: Standardwerte für neue Benutzer
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index d2022735ff2c8f86d2dc6591f0600ef3a3080e10..74a5f33d819a93d9e2648a69cbadd909c33886c9 100644 (file)
@@ -1182,3 +1182,5 @@ el:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 2d1e86a62bbc85420fbb0649cf7953f144610d24..5f3844d6fdf737f94c52d256a22eee9d67db4514 100644 (file)
@@ -1184,3 +1184,5 @@ en-GB:
   setting_attachment_extensions_allowed: Allowed extensions
   setting_attachment_extensions_denied: Disallowed extensions
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 7d98034f6cd32458ec4aa3825588f74390d004e8..d5e52593370e9b593e6d8f91b6b47f2d6cfc58cb 100644 (file)
@@ -212,6 +212,7 @@ en:
   error_invalid_csv_file_or_settings: "The file is not a CSV file or does not match the settings below"
   error_can_not_read_import_file: "An error occurred while reading the file to import"
   error_attachment_extension_not_allowed: "Attachment extension %{extension} is not allowed"
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: "Spent time cannot be reassigned to an issue that is about to be deleted"
 
   mail_subject_lost_password: "Your %{value} password"
   mail_body_lost_password: 'To change your password, click on the following link:'
index 926d4f85aecf8ba5ff4b0078989ae49885250834..3afb5db85b3f509e7f6c568215be026c06c0cc9f 100644 (file)
@@ -1216,3 +1216,5 @@ es-PA:
   label_any_open_issues: cualquier incidencias abierta
   label_no_open_issues: incidencias cerradas
   label_default_values_for_new_users: Valor predeterminado para nuevos usuarios
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index b62e066b30d71065cb4abd84ad32909b210a9818..d89e8991cf2cb81c185006a6282ed34b1f4cc231 100644 (file)
@@ -1214,3 +1214,5 @@ es:
   label_any_open_issues: cualquier peticiones abierta
   label_no_open_issues: peticiones cerradas
   label_default_values_for_new_users: Valor predeterminado para nuevos usuarios
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 87a94c512562a1f74896a71027bb97f2c47df4e2..9210e02490181d1c1de129657278727128b9b70e 100644 (file)
@@ -1195,3 +1195,5 @@ et:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 20e7222cdf7710526fe94533ccbbf956b917ac4d..4ea30f9b178ebfdeaedc5c827a52058787ef1373 100644 (file)
@@ -1183,3 +1183,5 @@ eu:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 3ffc4748651204b5059f7aacbe37e27d52dbc902..d0716e7a4fd21739ddd8af6a30e6888bb127bcd6 100644 (file)
@@ -1183,3 +1183,5 @@ fa:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 5021546cf97c5a352c1a804178e86a63fdf935ff..0c718749b1b21abce2db54edf93903fe2a72c41d 100644 (file)
@@ -1203,3 +1203,5 @@ fi:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 43873caf3e56aec5751f239480451e41af09c459..c68f766c6c7a9db32e3ff5b77cf8a27f30f5ee6a 100644 (file)
@@ -232,6 +232,7 @@ fr:
   error_invalid_csv_file_or_settings: "Le fichier n'est pas un fichier CSV ou n'est pas conforme aux paramètres sélectionnés"
   error_can_not_read_import_file: "Une erreur est survenue lors de la lecture du fichier à importer"
   error_attachment_extension_not_allowed: "L'extension %{extension} n'est pas autorisée"
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: "Le temps passé ne peut pas être réaffecté à une demande qui va être supprimée"
 
   mail_subject_lost_password: "Votre mot de passe %{value}"
   mail_body_lost_password: 'Pour changer votre mot de passe, cliquez sur le lien suivant :'
index 381c2c9e7442a2dfce9a582fc97ce9e0e1a889f4..670ad80992cca2fcfdb3a8c10d4759330b3c0539 100644 (file)
@@ -1190,3 +1190,5 @@ gl:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index cf5a1dd0ef2c0356f91f34f1a661061428afe459..ab17a94b394797bfe77c0b59c472d5f68508b1ee 100644 (file)
@@ -1187,3 +1187,5 @@ he:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 079ddfd8d83dcda6b99533f78d407fea59f82b72..e71614afb40f18b8672d0b17a56a9d540d3f3cd9 100644 (file)
@@ -1181,3 +1181,5 @@ hr:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 026d89fba745660172f28d7c783b02f93620f500..5e7e2b64b407ca45e42da922cbebadabd2086436 100644 (file)
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 01a9304dcb504a24de69a23deb9ee5a72c3f7eb4..a3f2c41159fe8a9de5c09e6e27ec72b1d4876e46 100644 (file)
@@ -1186,3 +1186,5 @@ id:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 0f9da368a82fbef96099460fea939348183a859a..7ba3a923bc4c91f67fda25c1c10312ceddd94e72 100644 (file)
@@ -1177,3 +1177,5 @@ it:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 7fe0d40ec3781e2118908acf763b6e9aea2a4daa..1d4901b36f1a71435fb34d9baaa988c7045853e5 100644 (file)
@@ -1195,3 +1195,5 @@ ja:
   label_any_open_issues: 未完了のチケット
   label_no_open_issues: なし または完了したチケット
   label_default_values_for_new_users: 新しいユーザーのデフォルト設定
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 79ea124876e1f4788791ded582b69dfa10981943..a92128eb5f15abd1634f91cd53eaa8dc06d5203b 100644 (file)
@@ -1223,3 +1223,5 @@ ko:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: 새 사용자 기본값
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 6498353772879dd7d8efbb5454af95ffaf17af13..0c020a9fc1882379a2878ba17660bc03dd5061a9 100644 (file)
@@ -1241,3 +1241,5 @@ lt:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index bcee88d6c06cedc6251be8d5cdc8166301face45..91ed269fcad96041f0ed64e53a6477c458b41968 100644 (file)
@@ -1176,3 +1176,5 @@ lv:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 6c7a2af08125812b795f6635c14ca260f570b8c4..eab7b730d1571ceadbfb999d14f64ba2928d9e8e 100644 (file)
@@ -1182,3 +1182,5 @@ mk:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index c5a74e06f42b2709faa5610d6dd0746eb1518e38..974717a46f372c79845dc47b256e5b84fdfebc7c 100644 (file)
@@ -1183,3 +1183,5 @@ mn:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 9a2a17542c42f631ff22a1759487e66907196f0a..7fdfab7c35a8a9d0f66e271bf11475dc79dbae4e 100644 (file)
@@ -1161,3 +1161,5 @@ nl:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 35f2b8e91f07692fd9721b7ee34436e6c3500196..b01f4c1ee5521e7ab461d960fbec523daf8bdb31 100644 (file)
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 50cd2f39c1fb8c30175cb0e9dae43e663feed99c..a65a34afab5d63fa26e014812c845dec757365e2 100644 (file)
@@ -1197,3 +1197,5 @@ pl:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 43f8b329b5dff379faeafa2ecacc10dafb232ee3..2ae583a17e44189994138b914408497c9298e9d4 100644 (file)
@@ -1201,3 +1201,5 @@ pt-BR:
   label_any_open_issues: Quaisquer tarefas abertas
   label_no_open_issues: Sem tarefas abertas
   label_default_values_for_new_users: Valor padrão para novos usuários
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index da696f2b36733b62ab2b9022c840f2cd663931c9..e3184c1ed2b73ce51cfcbf95ef774df533bd2924 100644 (file)
@@ -1184,3 +1184,5 @@ pt:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 2e89625a162ecbdc153dcc75d26335a846393fe8..d75cec27aa4c686dab3438b99dd5cf7b7a924941 100644 (file)
@@ -1177,3 +1177,5 @@ ro:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index d506da1535c7a4fd5c43646146b20574f653d433..95579c53030719991ab9809ffa4211505b8e4748 100644 (file)
@@ -1283,3 +1283,5 @@ ru:
   label_any_open_issues: любые открытые задачи
   label_no_open_issues: нет открытых задач
   label_default_values_for_new_users: Значения по умолчанию для новых пользователей
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 0508f1fe5c95362a43d771c68d7bbe0a11bf61bb..f2779fea5d0de5ad844e0374c9c7e8104d6663a1 100644 (file)
@@ -1172,3 +1172,5 @@ sk:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 56742220dd6c9e5bcb37fafa8e8b925678bfa6d4..74caf2d94754e315c063626b37c96b5767e77243 100644 (file)
@@ -1182,3 +1182,5 @@ sl:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index fd2fdd33de69562d67bf146a7c6dd3582ea5fe3f..a1754e751633b82f479855b6e6094553c142904f 100644 (file)
@@ -1178,3 +1178,5 @@ sq:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 3b30b09a8b319fc107a44fc2c5d71837352a350c..dd02721b3008a818bf5318ce33d50805f7944ff2 100644 (file)
@@ -1184,3 +1184,5 @@ sr-YU:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 89e5cfa96011f0300f7d36f4735832088d04d98e..4762e7aa5324381bf3ec2fa056dba2b5419f1836 100644 (file)
@@ -1183,3 +1183,5 @@ sr:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 73be757c97d1184f92f9b105caccfbd5b7d42fe9..4cb85264f2a3ae1a44529351c56a56a1cfc3bd69 100644 (file)
@@ -1215,3 +1215,5 @@ sv:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 122fcd4e1c93fed1cd1ad0bec33dae9e3c908587..14d728308626ac26994503665239a932d8ba3806 100644 (file)
@@ -1179,3 +1179,5 @@ th:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 0f700fd4738963fc4c64760dfdea805e0cbcee7f..55e8be7550e7bd504ba630810a5733a93a20cb10 100644 (file)
@@ -1189,3 +1189,5 @@ tr:
   label_any_open_issues: herhangi bir açık iş
   label_no_open_issues: hiçbir açık iş
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 077bfbad31e4a03e538cff759905e16c8e12ba05..fae40b0d1812c0409fec3512b6adda61496e70a7 100644 (file)
@@ -1177,3 +1177,5 @@ uk:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 632e446245024a82e83d909a3b834f7015c2fbc3..f71f646170f7d44844c5cd51cff07848d3f2e80b 100644 (file)
@@ -1235,3 +1235,5 @@ vi:
   label_any_open_issues: any open issues
   label_no_open_issues: no open issues
   label_default_values_for_new_users: Default values for new users
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index c87ba150aedaf46fa4dd8aae31ea16e1a60a2d35..cdbba4f5f554356b98d1d78e20c3564623063deb 100644 (file)
   description_date_from: 輸入起始日期
   description_date_to: 輸入結束日期
   text_repository_identifier_info: '僅允許使用小寫英文字母 (a-z), 阿拉伯數字, 虛線與底線。<br />一旦儲存之後, 代碼便無法再次被更改。'
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index fbae07878e6f3b7151245871255d2f6936c2b926..8382f1a2f2fc961e3b9cb4e37d94cf62d7276162 100644 (file)
@@ -1177,3 +1177,5 @@ zh:
   label_any_open_issues: 任意进行中的问题
   label_no_open_issues: 任意已关闭的问题
   label_default_values_for_new_users: 新用户默认值
+  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: Spent time cannot
+    be reassigned to an issue that is about to be deleted
index 8a8ae6c76c9dba116500286446ac82e91c947444..9c2906e87bc2f230384ccaa774377a0fc3c090dd 100644 (file)
@@ -4442,7 +4442,7 @@ class IssuesControllerTest < ActionController::TestCase
     assert_response :success
   end
 
-  def test_destroy_issue_with_no_time_entries
+  def test_destroy_issue_with_no_time_entries_should_delete_the_issues
     assert_nil TimeEntry.find_by_issue_id(2)
     @request.session[:user_id] = 2
 
@@ -4453,7 +4453,7 @@ class IssuesControllerTest < ActionController::TestCase
     assert_nil Issue.find_by_id(2)
   end
 
-  def test_destroy_issues_with_time_entries
+  def test_destroy_issues_with_time_entries_should_show_the_reassign_form
     @request.session[:user_id] = 2
 
     assert_no_difference 'Issue.count' do
@@ -4469,6 +4469,20 @@ class IssuesControllerTest < ActionController::TestCase
     end
   end
 
+  def test_destroy_issues_with_time_entries_should_show_hours_on_issues_and_descendants
+    parent = Issue.generate_with_child!
+    TimeEntry.generate!(:issue => parent)
+    TimeEntry.generate!(:issue => parent.children.first)
+    leaf = Issue.generate!
+    TimeEntry.generate!(:issue => leaf)
+    @request.session[:user_id] = 2
+
+    delete :destroy, :ids => [parent.id, leaf.id]
+    assert_response :success
+
+    assert_select 'p', :text => /3\.00 hours were reported/
+  end
+
   def test_destroy_issues_and_destroy_time_entries
     @request.session[:user_id] = 2
 
@@ -4510,6 +4524,24 @@ class IssuesControllerTest < ActionController::TestCase
     assert_equal 2, TimeEntry.find(2).issue_id
   end
 
+  def test_destroy_issues_with_time_entries_should_reassign_time_entries_of_issues_and_descendants
+    parent = Issue.generate_with_child!
+    TimeEntry.generate!(:issue => parent)
+    TimeEntry.generate!(:issue => parent.children.first)
+    leaf = Issue.generate!
+    TimeEntry.generate!(:issue => leaf)
+    target = Issue.generate!
+    @request.session[:user_id] = 2
+
+    assert_difference 'Issue.count', -3 do
+      assert_no_difference 'TimeEntry.count' do
+        delete :destroy, :ids => [parent.id, leaf.id], :todo => 'reassign', :reassign_to_id => target.id
+        assert_response 302
+      end
+    end
+    assert_equal 3, target.time_entries.count
+  end
+
   def test_destroy_issues_and_reassign_time_entries_to_an_invalid_issue_should_fail
     @request.session[:user_id] = 2
 
@@ -4523,6 +4555,18 @@ class IssuesControllerTest < ActionController::TestCase
     assert_template 'destroy'
   end
 
+  def test_destroy_issues_and_reassign_time_entries_to_an_issue_to_delete_should_fail
+    @request.session[:user_id] = 2
+
+    assert_no_difference 'Issue.count' do
+      assert_no_difference 'TimeEntry.count' do
+        delete :destroy, :ids => [1, 3], :todo => 'reassign', :reassign_to_id => 3
+      end
+    end
+    assert_response :success
+    assert_select '#flash_error', :text => I18n.t(:error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted)
+  end
+
   def test_destroy_issues_from_different_projects
     @request.session[:user_id] = 2