]> source.dussan.org Git - redmine.git/commitdiff
Prevent parent issue from being closed if a child issue is open (#10989).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 21 Dec 2016 09:09:22 +0000 (09:09 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 21 Dec 2016 09:09:22 +0000 (09:09 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@16108 e93f8b46-1217-0410-a6f0-8f06a7374b81

52 files changed:
app/models/issue.rb
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/unit/issue_subtasking_test.rb
test/unit/issue_test.rb

index b515c4a74146de98d4ad6bf8f266a30ec9defcff..65d0784ad23ee4e87e75fff87f602259e403a4e5 100644 (file)
@@ -723,6 +723,9 @@ class Issue < ActiveRecord::Base
           @parent_issue.self_and_ancestors.any? {|a| a.relations_from.any? {|r| r.relation_type == IssueRelation::TYPE_PRECEDES && r.issue_to.would_reschedule?(self)}}
         )
         errors.add :parent_issue_id, :invalid
+      elsif !closed? && @parent_issue.closed?
+        # cannot attach an open issue to a closed parent
+        errors.add :base, :open_issue_with_closed_parent
       elsif !new_record?
         # moving an existing issue
         if move_possible?(@parent_issue)
@@ -945,9 +948,14 @@ class Issue < ActiveRecord::Base
     end
 
     statuses = statuses.compact.uniq.sort
-    if blocked?
+    if blocked? || descendants.open.any?
+      # cannot close a blocked issue or a parent with open subtasks
       statuses.reject!(&:is_closed?)
     end
+    if ancestors.open(false).any?
+      # cannot reopen a subtask of a closed parent
+      statuses.select!(&:is_closed?)
+    end
     statuses
   end
 
index 6f7c2053e346c2df0b884546f356df8fe646f575..82f3e6ffe3540c348f895aaf1546d274c43b255f 100644 (file)
@@ -130,6 +130,7 @@ ar:
         cant_link_an_issue_with_a_descendant: "لا يمكن ان تكون المشكلة مرتبطة بواحدة من المهام الفرعية"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: الرجاء التحديد
 
index 669674f841f903243978ad4177f913ace8c24792..b13053e274e68760a4bec7744211b9bb091f36f4 100644 (file)
@@ -198,6 +198,7 @@ az:
         cant_link_an_issue_with_a_descendant: "Tapşırıq özünün alt tapşırığı ilə əlaqəli ola bilməz"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   support:
     array:
index f319ed34ede991d38a137414f11530bd1561d38a..6066cefab75d73bcf201ebde453b0707053d8f81 100644 (file)
@@ -132,6 +132,7 @@ bg:
         cant_link_an_issue_with_a_descendant: "Една задача не може да бъде свързвана към своя подзадача"
         earlier_than_minimum_start_date: "не може да бъде по-рано от %{date} поради предхождащи задачи"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Изберете
 
index 2af3df2a0f8a370e5bf9f1d45d604ad862f6135f..c310630d4ead6c5c8980aefd09aacac368ae5986 100644 (file)
@@ -142,6 +142,7 @@ bs:
         cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Molimo odaberite
 
index 527cf712c8ab4b201789a73a95fda81e34c49bd7..9eec91870704ed1ed7e973403bc7e45bb166cc95 100644 (file)
@@ -135,6 +135,7 @@ ca:
         cant_link_an_issue_with_a_descendant: "Un assumpte no es pot enllaçar a una de les seves subtasques"
         earlier_than_minimum_start_date: "no pot ser anterior a %{date} derivat a les peticions precedents"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: "Seleccionar"
 
index e4fc7d06a78d470163cdbd3e3e893977d638ca07..54fbd9df5ed0f0086101d4d1be7bd270aed5b48a 100644 (file)
@@ -136,6 +136,7 @@ cs:
         cant_link_an_issue_with_a_descendant: "Úkol nemůže být spojen s jedním z jeho dílčích úkolů"
         earlier_than_minimum_start_date: "nemůže být dříve než %{date} kvůli předřazeným úkolům"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Prosím vyberte
 
index 114828fc8081d7964e9a5723f3ef6ac5df9055a2..2e81c086e13bd7205184b7661cf263ae1819aaec 100644 (file)
@@ -143,6 +143,7 @@ da:
         cant_link_an_issue_with_a_descendant: "En sag kan ikke relateres til en af dens underopgaver"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
       template:
         header:
index df27a2eaa4c7407f1f70f1f3740c6ddd8ead3f51..9529b80b4ade0384549b93832b1c12ce757698c5 100644 (file)
@@ -147,6 +147,7 @@ de:
         cant_link_an_issue_with_a_descendant: "Ein Ticket kann nicht mit einer Ihrer Unteraufgaben verlinkt werden"
         earlier_than_minimum_start_date: "kann wegen eines Vorgängertickets nicht vor %{date} liegen"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Bitte auswählen
 
index 5ea82dfa3fd133dfff527b73d1f03243c4d37581..6e662f94c089638b6dc2985340ad2310246ac577 100644 (file)
@@ -132,6 +132,7 @@ el:
         cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Παρακαλώ επιλέξτε
 
index 7be82bc74ad1fae12eeba63880f92bcec69074a4..d1f8ba1e5ed11263e951568c3ad8804e85709545 100644 (file)
@@ -135,6 +135,7 @@ en-GB:
         cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Please select
 
index d5a854f19ab1c8402931647f1eaac4abf62baffe..89fdc88636c5cc484f200322b4875ac3cce3f8b1 100644 (file)
@@ -131,6 +131,7 @@ en:
         cant_link_an_issue_with_a_descendant: "An issue cannot be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Please select
 
index e343621d55fe30cd282de41c28446db3fd5dc484..7be3ca0841ac668412c23babc6fb1f20cb8655b1 100644 (file)
@@ -141,6 +141,7 @@ es-PA:
         cant_link_an_issue_with_a_descendant: "Esta incidencia no puede ser ligada a una de estas tareas"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
         # Append your own errors here or at the model/attributes scope.
 
index b3e4e1a407d31d500bcc681bdcdf14f988201211..90f4f2df704b66809ebcc89e062474a0b87e5dd6 100644 (file)
@@ -139,6 +139,7 @@ es:
         cant_link_an_issue_with_a_descendant: "Esta petición no puede ser ligada a una de estas tareas"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
         # Append your own errors here or at the model/attributes scope.
 
index 2866eb635d3aa2dc9b7f84d89690e5b2e1b02e85..525a6119bcea4998f95c7d0dfc296398bf793cca 100644 (file)
@@ -148,6 +148,7 @@ et:
         cant_link_an_issue_with_a_descendant: "Teemat ei saa sidustada tema enda alamteemaga"
         earlier_than_minimum_start_date: "Tähtpäev ei saa olla varasem kui %{date} eelnevate teemade tähtpäevade tõttu"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: "Palun vali"
 
index a763d62da5b624dda2b00eccad238a2a6c88435b..3142bafcda8187faa177e0b1d21def0b9b94ed50 100644 (file)
@@ -133,6 +133,7 @@ eu:
         cant_link_an_issue_with_a_descendant: "Zeregin bat ezin da bere azpiataza batekin estekatu."
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Hautatu mesedez
 
index 442f98987e46113701008918b37de52d6b284830..5226f2d351a235273959d8e5c71c68545fdc3b26 100644 (file)
@@ -131,6 +131,7 @@ fa:
         cant_link_an_issue_with_a_descendant: "یک مورد نمی‌تواند به یکی از زیر کارهایش پیوند بخورد"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: گزینش کنید
 
index f193a67f7e9444be6c42e94942b4f2774f8e021e..16575e09e3131854bbc960e848fbee67a370fe0c 100644 (file)
@@ -156,6 +156,7 @@ fi:
         cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Valitse, ole hyvä
 
index 757aa5b489fd10ab5fcce712574379c7a92ae808..e23ab86da9b4da37c6311e38d505971e38f2e113 100644 (file)
@@ -151,6 +151,7 @@ fr:
         cant_link_an_issue_with_a_descendant: "Une demande ne peut pas être liée à l'une de ses sous-tâches"
         earlier_than_minimum_start_date: "ne peut pas être antérieure au %{date} à cause des demandes qui précèdent"
         not_a_regexp: "n'est pas une expression regulière valide"
+        open_issue_with_closed_parent: "Une demande ouverte ne peut pas être rattachée à une demande fermée"
 
   actionview_instancetag_blank_option: Choisir
 
index ab0f4e488056271f01ebe8c72eb1175547aff564..de29a5facd352aeba04044cf6decaf88815a2185 100644 (file)
@@ -160,6 +160,7 @@ gl:
         cant_link_an_issue_with_a_descendant: "As peticións non poden estar ligadas coas súas subtarefas"
         earlier_than_minimum_start_date: "Non pode ser antes de %{date} por mor de peticións anteriores"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Por favor seleccione
 
index b6ce6bb2862ce294c2c24bfc0df4bfbe0a9b7685..241b5f8f86b7d7793580340396b99b9dbf1b6749 100644 (file)
@@ -136,6 +136,7 @@ he:
         cant_link_an_issue_with_a_descendant: "לא ניתן לקשר נושא לתת־משימה שלו"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: בחר בבקשה
 
index d81d995b31b50f4a14a7c40e3e76149ccb0074ac..6441b18c6fccd4d66e5352aa99d5542578d120ae 100644 (file)
@@ -126,6 +126,7 @@ hr:
         cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Molimo odaberite
 
index 2f08d4b4a0f25b09de506dd665652904c1bcd6d1..bb77d3a35797e5b4eb5e4220e91e6e1991405a53 100644 (file)
         cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Kérem válasszon
 
index a9b38916a12c4078fd355dfed14101e9b2fa9302..b14d7cdff65891f00f8cc5ceef5f77d4efc3ba79 100644 (file)
@@ -131,6 +131,7 @@ id:
         cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Silakan pilih
 
index ff4780bf3b679d0e4257077a58caf8e6464ab44a..923cd665a606dd8678dfae3d1679d9fe304174d3 100644 (file)
@@ -136,6 +136,7 @@ it:
         cant_link_an_issue_with_a_descendant: "Una segnalazione non può essere collegata a una delle sue discendenti"
         earlier_than_minimum_start_date: "non può essere precedente a %{date} a causa di una precedente segnalazione"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Scegli
 
index 96f607bfc16654f9379b7587da1d8a2c9aaaaacf..279fbdd0fdfffb6e3f22ce4e077b7d35d425c589 100644 (file)
@@ -152,6 +152,7 @@ ja:
         cant_link_an_issue_with_a_descendant: "親子関係にあるチケット間での関連の設定はできません"
         earlier_than_minimum_start_date: "を%{date}より前にすることはできません。先行するチケットがあります"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: 選んでください
 
index 0852d6d7159f8bdb43b4d93352ccf30a47e15dbc..068bab9cddf08c4ecc8c56ab6bf8c4a26a918285 100644 (file)
@@ -178,6 +178,7 @@ ko:
         cant_link_an_issue_with_a_descendant: "일감은 하위 일감과 연결할 수 없습니다."
         earlier_than_minimum_start_date: "시작날짜 %{date}보다 앞선 시간으로 설정할 수 없습니다."
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: 선택하세요
 
index ea47e8e0fa76a2011ccaf869beb54629e4ed992e..0bd0c0beeff52f59cd71ce42caebbefcc8abac28 100644 (file)
@@ -135,6 +135,7 @@ lt:
         cant_link_an_issue_with_a_descendant: "Darbas negali būti susietas su viena iš savo darbo dalių"
         earlier_than_minimum_start_date: "negali būti anksčiau už %{date} dėl ankstesnių darbų"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Prašom parinkti
 
index d9d791bc5842476eb0cf496f2c58b940701f73f9..3ef7047ff5863e7ca5d5fd8d55196824061f7c5e 100644 (file)
@@ -125,6 +125,7 @@ lv:
         cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Izvēlieties
 
index a196680a1bffea46fe17399404556a08c093e55f..3202236f9452cdd0181e080b95fe5c2dcb0533d5 100644 (file)
@@ -132,6 +132,7 @@ mk:
         cant_link_an_issue_with_a_descendant: "Задача неможе да се поврзе со една од нејзините подзадачи"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Изберете
 
index f9bce484fca789c30119f5c8c983e7623af32eed..b0924485407fdfa355637952ac4d8597b12bc1e8 100644 (file)
@@ -131,6 +131,7 @@ mn:
         cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Сонгоно уу
 
index 5d36166b7b239bcde3da6127584aa2b5b2620b51..f3b0b9259fe6ae7cc9ee08ab93ba105f0f684570 100644 (file)
@@ -129,6 +129,7 @@ nl:
         cant_link_an_issue_with_a_descendant: "Een issue kan niet gelinked worden met een subtask"
         earlier_than_minimum_start_date: "kan niet eerder zijn dan %{date} wegens voorafgaande issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Selecteren
 
index dfab229d86b2bfc3eccce6dcb88bc94daa73da1a..1c8ba3b1a213379b77a38502f07a8a985ac0c133 100644 (file)
         cant_link_an_issue_with_a_descendant: "En sak kan ikke kobles mot en av sine undersaker"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
 
   actionview_instancetag_blank_option: Vennligst velg
index a1a595e20e3f3c26d7454da58d9a254b988e9df5..9e5ec95736f85fee03764fdb8dc06d662de24a23 100644 (file)
@@ -139,6 +139,7 @@ pl:
         cant_link_an_issue_with_a_descendant: "Zagadnienie nie może zostać powiązane z jednym z własnych podzagadnień"
         earlier_than_minimum_start_date: "nie może być wcześniej niż %{date} z powodu poprzedających zagadnień"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   support:
     array:
index 640d6e15a049eb21fa3115de85eb987534be4f15..e0524b8e1ead5b87c5501d022ddc7fe5af2a5094 100644 (file)
@@ -151,6 +151,7 @@ pt-BR:
         cant_link_an_issue_with_a_descendant: "Uma tarefa não pode ser relaciona a uma de suas subtarefas"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Selecione
 
index 71f809c0ab97bbf4c0e4c7fb9ee26bcebfd2e628..e7da736e2a28a0a0624fa422491f85700584bf04 100644 (file)
@@ -140,6 +140,7 @@ pt:
         cant_link_an_issue_with_a_descendant: "Não é possível ligar uma tarefa a uma sub-tarefa que lhe é pertencente"
         earlier_than_minimum_start_date: "não pode ser antes de %{date} devido a tarefas precedentes"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   
   actionview_instancetag_blank_option: Selecione
index 36bd8dd5575dc01b0943be4110a7ddc229358b32..1378762a03d77506e55a723743d5f4ef30ced591 100644 (file)
@@ -126,6 +126,7 @@ ro:
         cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Selectați
 
index cbf591bdc33bf7fe571dbfca330f961fa2b4d07f..1a54014b39398dc8b0bb0a77cf56211170465274 100644 (file)
@@ -208,6 +208,7 @@ ru:
         cant_link_an_issue_with_a_descendant: "Задача не может быть связана со своей подзадачей"
         earlier_than_minimum_start_date: "не может быть раньше %{date} из-за предыдущих задач"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   support:
     array:
index 770dac2a225db8555172cbfa000a8fc0d6047e14..c0ac4ae584970f9d5f581f422d1ae055f0998730 100644 (file)
@@ -130,6 +130,7 @@ sk:
         cant_link_an_issue_with_a_descendant: "Nemožno prepojiť úlohu s niektorou z podúloh"
         earlier_than_minimum_start_date: "nemôže byť skorší ako %{date} z dôvodu nadväznosti na predchádzajúce úlohy"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Vyberte
 
index 33b4a3dd338b34aaf61f3c0d29e397cf537f3987..4b985996775d3b2ccfa7d0a8e550b196494aa114 100644 (file)
@@ -130,6 +130,7 @@ sl:
         cant_link_an_issue_with_a_descendant: "Zahtevek ne more biti povezan s svojo podnalogo"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Prosimo izberite
 
index ece8e293d523ea403cf3fade901b136e453207df..127a6d107bd22a9e0d9a8bc8455f99a83e7303d6 100644 (file)
@@ -131,6 +131,7 @@ sq:
         cant_link_an_issue_with_a_descendant: "Nje ceshtje nuk mund te lidhet me nenceshtje"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Zgjidhni
 
index a4bef20d7695d8666841cb1cfe9904f4517ac832..1e3a0d4c5a5428824b18e3e3dd1572ac1834402a 100644 (file)
@@ -134,6 +134,7 @@ sr-YU:
         cant_link_an_issue_with_a_descendant: "Problem ne može biti povezan sa jednim od svojih podzadataka"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Molim odaberite
 
index 9ebe191440d87aa81d7aa8e68641b80a5d9221ba..e4140d5ee5b0d85c1f430738c2930bff27b23241 100644 (file)
@@ -132,6 +132,7 @@ sr:
         cant_link_an_issue_with_a_descendant: "Проблем не може бити повезан са једним од својих подзадатака"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Молим одаберите
 
index b472e2d975f0367739ee17b011d80ec924def324..b4280641d1aaadcc59c31a76facfeab8b37aea51 100644 (file)
@@ -136,6 +136,7 @@ sv:
         cant_link_an_issue_with_a_descendant: "Ett ärende kan inte länkas till ett av dess underärenden"
         earlier_than_minimum_start_date: "kan inte vara tidigare än% {datum} på grund av föregående ärenden"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   direction: ltr
   date:
index bf1d5837da9e42c84d1a54171455dfe8e766c37d..98d0233db7f2facdfc4f43b9418cd8ef1f994ba3 100644 (file)
@@ -129,6 +129,7 @@ th:
         cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: กรุณาเลือก
 
index 43b8b642d0ec51cae27a1f52a26d2906c05e9e5b..2d7ce1b985cec15ca0071dbaf8ee5c56dd3ef20a 100644 (file)
@@ -145,6 +145,7 @@ tr:
         cant_link_an_issue_with_a_descendant: "Bir iş, alt işlerinden birine bağlanamaz"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
       models:
 
   actionview_instancetag_blank_option: Lütfen Seçin
index dc19b8993328cd9d66567f2425b30882588b39e7..8d342afd03ed2783b7ef044a912d0d324e6bb2f3 100644 (file)
@@ -129,6 +129,7 @@ uk:
         cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: Оберіть
 
index 9161940e763ba3c76555ae4748f3f9fe03a893f9..94e1a1a5c909ce81bbf3b0b220ce5c5e3e0d008d 100644 (file)
@@ -146,6 +146,7 @@ vi:
         cant_link_an_issue_with_a_descendant: "Một vấn đề không thể liên kết tới một trong số những tác vụ con của nó"
         earlier_than_minimum_start_date: "cannot be earlier than %{date} because of preceding issues"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   direction: ltr
   date:
index ccaed9f65695fba87ac385b67a317e2c13274806..09b4d2f6b59832a1d0159656fbb1344f7286bba4 100644 (file)
         cant_link_an_issue_with_a_descendant: "議題無法被連結至自己的子任務"
         earlier_than_minimum_start_date: "不能早於 %{date} 因為有前置議題"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
       # You can define own errors for models or model attributes.
       # The values :model, :attribute and :value are always available for interpolation.
index fefc55f8bcf0f349d441be9c2429f900d3f07b8d..9334743d681958f65e5b36c7c273af28c672552b 100644 (file)
@@ -135,6 +135,7 @@ zh:
         cant_link_an_issue_with_a_descendant: "问题不能关联到它的子任务"
         earlier_than_minimum_start_date: "不能早于 %{date} 由于有前置问题"
         not_a_regexp: "is not a valid regular expression"
+        open_issue_with_closed_parent: "An open issue cannot be attached to a closed parent task"
 
   actionview_instancetag_blank_option: 请选择
 
index e878601b1039605321f443f2bf87aa2b0748ca90..2ddfb49c617d845ec1ab52197d7a4f67fa559464 100644 (file)
@@ -330,4 +330,13 @@ class IssueSubtaskingTest < ActiveSupport::TestCase
     parent.generate_child!(:estimated_hours => 7)
     assert_equal 12, parent.reload.total_estimated_hours
   end
+
+  def test_open_issue_with_closed_parent_should_not_validate
+    parent = Issue.generate!(:status_id => 5)
+    child = Issue.generate!
+
+    child.parent_issue_id = parent.id
+    assert !child.save
+    assert_include I18n.t("activerecord.errors.messages.open_issue_with_closed_parent"), child.errors.full_messages
+  end
 end
index 844ed5934faed10ede8b6d6933119d4c86072ccc..235e2e7f7f51bf3b7f52c3219d09c975c214304e 100644 (file)
@@ -1941,6 +1941,24 @@ class IssueTest < ActiveSupport::TestCase
     assert !closed_statuses.empty?
   end
 
+  def test_parent_issues_with_open_subtask_dont_allow_closed_statuses
+    parent = Issue.generate!
+    child = Issue.generate!(:parent_issue_id => parent.id)
+
+    allowed_statuses = parent.reload.new_statuses_allowed_to(users(:users_002))
+    assert allowed_statuses.any?
+    assert_equal [], allowed_statuses.select(&:is_closed?)
+  end
+
+  def test_parent_issues_with_closed_subtask_allow_closed_statuses
+    parent = Issue.generate!
+    child = Issue.generate!(:parent_issue_id => parent.id, :status_id => 5)
+
+    allowed_statuses = parent.reload.new_statuses_allowed_to(users(:users_002))
+    assert allowed_statuses.any?
+    assert allowed_statuses.select(&:is_closed?).any?
+  end
+
   def test_reschedule_an_issue_without_dates
     with_settings :non_working_week_days => [] do
       issue = Issue.new(:start_date => nil, :due_date => nil)