Defect #7114 ยป show_projects_having_a_descendant_with_issue_tracking.patch
| test/unit/lib/redmine/helpers/gantt_test.rb (copie de travail) | ||
|---|---|---|
| 159 | 159 |
:start_date => Date.yesterday, |
| 160 | 160 |
:due_date => 1.week.from_now.to_date) |
| 161 | 161 |
@project.issues << @issue |
| 162 | ||
| 163 |
@response.body = @gantt.subjects |
|
| 164 | 162 |
end |
| 165 | 163 | |
| 166 | 164 |
context "project" do |
| 167 |
should "be rendered" do |
|
| 165 |
should "be rendered" do |
|
| 166 |
@response.body = @gantt.subjects |
|
| 168 | 167 |
assert_select "div.project-name a", /#{@project.name}/
|
| 169 | 168 |
end |
| 170 | 169 | |
| 171 |
should "have an indent of 4" do |
|
| 170 |
should "have an indent of 4" do |
|
| 171 |
@response.body = @gantt.subjects |
|
| 172 | 172 |
assert_select "div.project-name[style*=left:4px]" |
| 173 |
end |
|
| 174 |
|
|
| 175 |
context "with descendants" do |
|
| 176 |
setup do |
|
| 177 |
@child = Project.generate! |
|
| 178 |
@child.set_parent!(@project) |
|
| 179 |
@child.enabled_module_names = ['issue_tracking'] |
|
| 180 |
@grandchild = Project.generate! |
|
| 181 |
@grandchild.set_parent!(@child) |
|
| 182 |
@grandchild.enabled_module_names = ['issue_tracking'] |
|
| 183 |
end |
|
| 184 |
|
|
| 185 |
context ":html format" do |
|
| 186 |
should "render descendants" do |
|
| 187 |
@gantt.subjects |
|
| 188 |
|
|
| 189 |
assert @gantt.subjects.match(/#{@child.name}/)
|
|
| 190 |
assert @gantt.subjects.match(/#{@grandchild.name}/)
|
|
| 191 |
end |
|
| 192 |
|
|
| 193 |
should "render projects having a descendant with issue tracking enabled" do |
|
| 194 |
@project.enabled_module_names = [] |
|
| 195 |
@child.enabled_module_names = [] |
|
| 196 |
@response.body = @gantt.subjects |
|
| 197 |
|
|
| 198 |
assert @gantt.subjects.match(/#{@project.name}/)
|
|
| 199 |
assert @gantt.subjects.match(/#{@child.name}/)
|
|
| 200 |
assert @gantt.subjects.match(/#{@grandchild.name}/)
|
|
| 201 |
end |
|
| 202 |
|
|
| 203 |
should "not render projects not having a descendant with issue tracking enabled" do |
|
| 204 |
@project.enabled_module_names = [] |
|
| 205 |
@child.enabled_module_names = [] |
|
| 206 |
@grandchild.enabled_module_names = [] |
|
| 207 |
@response.body = @gantt.subjects |
|
| 208 |
|
|
| 209 |
assert !@gantt.subjects.match(/#{@project.name}/)
|
|
| 210 |
end |
|
| 211 |
end |
|
| 173 | 212 |
end |
| 174 | 213 |
end |
| 175 | 214 | |
| 176 | 215 |
context "version" do |
| 177 |
should "be rendered" do |
|
| 216 |
should "be rendered" do |
|
| 217 |
@response.body = @gantt.subjects |
|
| 178 | 218 |
assert_select "div.version-name a", /#{@version.name}/
|
| 179 | 219 |
end |
| 180 | 220 | |
| 181 |
should "be indented 24 (one level)" do |
|
| 221 |
should "be indented 24 (one level)" do |
|
| 222 |
@response.body = @gantt.subjects |
|
| 182 | 223 |
assert_select "div.version-name[style*=left:24px]" |
| 183 | 224 |
end |
| 184 | 225 |
end |
| 185 | 226 | |
| 186 | 227 |
context "issue" do |
| 187 |
should "be rendered" do |
|
| 228 |
should "be rendered" do |
|
| 229 |
@response.body = @gantt.subjects |
|
| 188 | 230 |
assert_select "div.issue-subject", /#{@issue.subject}/
|
| 189 | 231 |
end |
| 190 | 232 | |
| 191 |
should "be indented 44 (two levels)" do |
|
| 233 |
should "be indented 44 (two levels)" do |
|
| 234 |
@response.body = @gantt.subjects |
|
| 192 | 235 |
assert_select "div.issue-subject[style*=left:44px]" |
| 193 | 236 |
end |
| 194 | 237 |
end |
| app/models/project.rb (copie de travail) | ||
|---|---|---|
| 513 | 513 |
enabled_modules.each {|mod| mod.destroy unless module_names.include?(mod.name)}
|
| 514 | 514 |
# add new modules |
| 515 | 515 |
module_names.reject {|name| module_enabled?(name)}.each {|name| enabled_modules << EnabledModule.new(:name => name)}
|
| 516 |
enabled_modules.reload |
|
| 516 | 517 |
else |
| 517 | 518 |
enabled_modules.clear |
| 518 | 519 |
end |
| lib/redmine/helpers/gantt.rb (copie de travail) | ||
|---|---|---|
| 104 | 104 |
rows = if @project |
| 105 | 105 |
number_of_rows_on_project(@project) |
| 106 | 106 |
else |
| 107 |
Project.roots.visible.has_module('issue_tracking').inject(0) do |total, project|
|
|
| 107 |
Project.roots.visible.inject(0) do |total, project| |
|
| 108 | 108 |
total += number_of_rows_on_project(project) |
| 109 | 109 |
end |
| 110 | 110 |
end |
| ... | ... | |
| 115 | 115 |
# Returns the number of rows that will be used to list a project on |
| 116 | 116 |
# the Gantt chart. This will recurse for each subproject. |
| 117 | 117 |
def number_of_rows_on_project(project) |
| 118 |
unless project.module_enabled?('issue_tracking') ||
|
|
| 119 |
(!project.leaf? && project.descendants.visible.has_module('issue_tracking').exists?)
|
|
| 120 |
return 0 |
|
| 121 |
end |
|
| 122 |
|
|
| 118 | 123 |
# Remove the project requirement for Versions because it will |
| 119 | 124 |
# restrict issues to only be on the current project. This |
| 120 | 125 |
# ends up missing issues which are assigned to shared versions. |
| ... | ... | |
| 122 | 127 | |
| 123 | 128 |
# One Root project |
| 124 | 129 |
count = 1 |
| 125 |
# Issues without a Version |
|
| 126 |
count += project.issues.for_gantt.without_version.with_query(@query).count |
|
| 130 |
|
|
| 131 |
if project.module_enabled?('issue_tracking')
|
|
| 132 |
# Issues without a Version |
|
| 133 |
count += project.issues.for_gantt.without_version.with_query(@query).count |
|
| 127 | 134 | |
| 128 |
# Versions |
|
| 129 |
count += project.versions.count |
|
| 135 |
# Versions
|
|
| 136 |
count += project.versions.count
|
|
| 130 | 137 | |
| 131 |
# Issues on the Versions |
|
| 132 |
project.versions.each do |version| |
|
| 133 |
count += version.fixed_issues.for_gantt.with_query(@query).count |
|
| 138 |
# Issues on the Versions |
|
| 139 |
project.versions.each do |version| |
|
| 140 |
count += version.fixed_issues.for_gantt.with_query(@query).count |
|
| 141 |
end |
|
| 134 | 142 |
end |
| 135 | 143 | |
| 136 | 144 |
# Subprojects |
| 137 |
project.children.visible.has_module('issue_tracking').each do |subproject|
|
|
| 145 |
project.children.visible.each do |subproject| |
|
| 138 | 146 |
count += number_of_rows_on_project(subproject) |
| 139 |
end |
|
| 147 |
end unless project.leaf?
|
|
| 140 | 148 | |
| 141 | 149 |
count |
| 142 | 150 |
end |
| ... | ... | |
| 163 | 171 |
if @project |
| 164 | 172 |
render_project(@project, options) |
| 165 | 173 |
else |
| 166 |
Project.roots.visible.has_module('issue_tracking').each do |project|
|
|
| 174 |
Project.roots.visible.each do |project| |
|
| 167 | 175 |
render_project(project, options) |
| 168 | 176 |
break if abort? |
| 169 | 177 |
end |
| ... | ... | |
| 176 | 184 |
end |
| 177 | 185 | |
| 178 | 186 |
def render_project(project, options={})
|
| 187 |
unless project.module_enabled?('issue_tracking') ||
|
|
| 188 |
(!project.leaf? && project.descendants.visible.has_module('issue_tracking').exists?)
|
|
| 189 |
return |
|
| 190 |
end |
|
| 191 |
|
|
| 179 | 192 |
options[:top] = 0 unless options.key? :top |
| 180 | 193 |
options[:indent_increment] = 20 unless options.key? :indent_increment |
| 181 | 194 |
options[:top_increment] = 20 unless options.key? :top_increment |
| ... | ... | |
| 188 | 201 |
@number_of_rows += 1 |
| 189 | 202 |
return if abort? |
| 190 | 203 |
|
| 191 |
# Second, Issues without a version |
|
| 192 |
issues = project.issues.for_gantt.without_version.with_query(@query).all(:limit => current_limit) |
|
| 193 |
sort_issues!(issues) |
|
| 194 |
if issues |
|
| 195 |
render_issues(issues, options) |
|
| 196 |
return if abort? |
|
| 197 |
end |
|
| 204 |
if project.module_enabled?('issue_tracking')
|
|
| 205 |
# Second, Issues without a version |
|
| 206 |
issues = project.issues.for_gantt.without_version.with_query(@query).all(:limit => current_limit) |
|
| 207 |
sort_issues!(issues) |
|
| 208 |
if issues |
|
| 209 |
render_issues(issues, options) |
|
| 210 |
return if abort? |
|
| 211 |
end |
|
| 198 | 212 | |
| 199 |
# Third, Versions |
|
| 200 |
project.versions.sort.each do |version| |
|
| 201 |
render_version(version, options) |
|
| 202 |
return if abort? |
|
| 213 |
# Third, Versions |
|
| 214 |
project.versions.sort.each do |version| |
|
| 215 |
render_version(version, options) |
|
| 216 |
return if abort? |
|
| 217 |
end |
|
| 203 | 218 |
end |
| 204 | ||
| 219 |
|
|
| 205 | 220 |
# Fourth, subprojects |
| 206 |
project.children.visible.has_module('issue_tracking').each do |project|
|
|
| 221 |
project.children.visible.each do |project| |
|
| 207 | 222 |
render_project(project, options) |
| 208 | 223 |
return if abort? |
| 209 | 224 |
end unless project.leaf? |