# HG changeset patch # User Toshi MARUYAMA # Date 1568636652 -32400 # 月 9月 16 21:24:12 2019 +0900 # Node ID 730a2f38963944807478779566c9c9b8ed202b8c # Parent e939b32b9c1662fa08fb305318cd538841d18ef2 issue-28492-01.diff diff --git a/app/views/settings/_issues.html.erb b/app/views/settings/_issues.html.erb --- a/app/views/settings/_issues.html.erb +++ b/app/views/settings/_issues.html.erb @@ -7,6 +7,8 @@

<%= setting_select :cross_project_subtasks, cross_project_subtasks_options %>

+

<%= setting_check_box :close_parent_issue_when_its_subtask_is_open %>

+

<%= setting_check_box :close_duplicate_issues %>

<%= setting_check_box :issue_group_assignment %>

diff --git a/config/locales/en.yml b/config/locales/en.yml --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -478,6 +478,7 @@ en: setting_new_item_menu_tab: Project menu tab for creating new objects setting_commit_logs_formatting: Apply text formatting to commit messages setting_timelog_required_fields: Required fields for time logs + setting_close_parent_issue_when_its_subtask_is_open: Close parent issue when its subtask is open setting_close_duplicate_issues: Close duplicate issues automatically setting_time_entry_list_defaults: Timelog list defaults setting_timelog_accept_0_hours: Accept time logs with 0 hours diff --git a/config/settings.yml b/config/settings.yml --- a/config/settings.yml +++ b/config/settings.yml @@ -177,6 +177,8 @@ parent_issue_done_ratio: default: 'derived' link_copied_issue: default: 'ask' +close_parent_issue_when_its_subtask_is_open: + default: 0 close_duplicate_issues: default: 1 issue_group_assignment: # HG changeset patch # User Toshi MARUYAMA # Date 1568768189 -32400 # 水 9月 18 09:56:29 2019 +0900 # Node ID ecd52fd13cca39ae0092b38b7e9f26a09a14e3c0 # Parent cb99e92e6724040b577956b8f53dbc85b7c3a190 issue-28492-02.diff diff --git a/app/models/issue.rb b/app/models/issue.rb --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1006,8 +1006,7 @@ class Issue < ActiveRecord::Base statuses << default_status if include_default || (new_record? && statuses.empty?) statuses = statuses.compact.uniq.sort - if blocked? || descendants.open.any? - # cannot close a blocked issue or a parent with open subtasks + if blocked? || (!Setting.close_parent_issue_when_its_subtask_is_open? && descendants.open.any?) statuses.reject!(&:is_closed?) end if ancestors.open(false).any? # HG changeset patch # User Toshi MARUYAMA # Date 1568773474 -32400 # 水 9月 18 11:24:34 2019 +0900 # Node ID fe7e016fdfa4c3043c9f48beeac56e9dfd7b0b75 # Parent 94ad24ebda4d5217a104c52cc86ee2edc5347fef issue-28492-03.diff diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -2082,13 +2082,26 @@ class IssueTest < ActiveSupport::TestCas assert !closed_statuses.empty? end - def test_parent_issues_with_open_subtask_dont_allow_closed_statuses + def test_parent_issues_with_open_subtask_dont_allow_closed_statuses_if_setting_is_false 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?) + with_settings :close_parent_issue_when_its_subtask_is_open => 0 do + allowed_statuses = parent.reload.new_statuses_allowed_to(users(:users_002)) + assert allowed_statuses.any? + assert_equal [], allowed_statuses.select(&:is_closed?) + end + end + + def test_parent_issues_with_open_subtask_dont_allow_closed_statuses_if_setting_is_true + parent = Issue.generate! + child = Issue.generate!(:parent_issue_id => parent.id) + + with_settings :close_parent_issue_when_its_subtask_is_open => 1 do + allowed_statuses = parent.reload.new_statuses_allowed_to(users(:users_002)) + assert allowed_statuses.any? + assert allowed_statuses.select(&:is_closed?).any? + end end def test_parent_issues_with_closed_subtask_allow_closed_statuses