Skip to content

Commit 7a10bd7

Browse files
authored
[COMMS-955] Adjust target version groups for table pdf exports (#24802)
adjust grouping and naming for table pdf exports
1 parent dfe6a8d commit 7a10bd7

2 files changed

Lines changed: 52 additions & 3 deletions

File tree

app/models/exports/pdf/components/wp_table.rb

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,23 @@ def get_sums(query)
4848

4949
def write_grouped!(work_packages, query, columns)
5050
groups_with_work_packages = work_packages.group_by do |work_package|
51-
query.group_by_column.value(work_package)
51+
group_value(query, work_package)
5252
end
53-
sums = transformed_sum_group(query)
53+
sums = transformed_sum_group(query).transform_keys { |group| group_sums_key(group) }
5454
groups_with_work_packages.each do |group, grouped_work_packages|
55-
write_group!(group, grouped_work_packages, query, columns, sums[group] || {})
55+
write_group!(group, grouped_work_packages, query, columns, sums[group_sums_key(group)] || {})
5656
end
5757
end
5858

59+
def group_value(query, work_package)
60+
value = query.group_by_column.value(work_package)
61+
value.is_a?(ActiveRecord::Relation) ? value.to_a : value
62+
end
63+
64+
def group_sums_key(group)
65+
group.is_a?(Array) ? group.map(&:to_s).sort : group
66+
end
67+
5968
# -- start workaround
6069
#
6170
# This code is a workaround for currently getting "which group a WP belongs to" is not implemented

spec/models/work_packages/pdf_export/work_package_list_to_pdf_spec.rb

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,46 @@ def pdf_strings_without_footers(nr_of_pages)
262262
expect(strings).to eq(expected_pdf_strings.join(" "))
263263
end
264264
end
265+
266+
context "when grouped by target versions", with_settings: { work_package_multiple_versions: true } do
267+
let!(:version_two) { create(:version, project:, name: "2.0") }
268+
let!(:version_one) { create(:version, project:, name: "1.0") }
269+
let(:query_attributes) { { group_by: "target_versions" } }
270+
271+
before do
272+
[work_package_parent, work_package_child].each do |work_package|
273+
create(:work_package_version, work_package:, version: version_two)
274+
create(:work_package_version, work_package:, version: version_one)
275+
end
276+
end
277+
278+
it "writes work packages sharing the same target versions into a single group" do
279+
strings = pdf_strings_without_footers(1)
280+
expect(strings).to eq [
281+
query.name,
282+
"2.0, 1.0",
283+
*column_titles,
284+
*work_package_columns(work_package_parent),
285+
*work_package_columns(work_package_child)
286+
].join(" ")
287+
end
288+
289+
context "with sums" do
290+
let(:query_attributes) { { group_by: "target_versions", display_sums: true } }
291+
292+
it "writes the group sums although the versions are ordered by name in the sums" do
293+
strings = pdf_strings_without_footers(1)
294+
expect(strings).to eq [
295+
query.name,
296+
"2.0, 1.0",
297+
*column_titles,
298+
*work_package_columns(work_package_parent),
299+
*work_package_columns(work_package_child),
300+
I18n.t("js.label_sum"), work_packages_sum.to_s, "38%"
301+
].join(" ")
302+
end
303+
end
304+
end
265305
end
266306

267307
describe "grouped with sums" do

0 commit comments

Comments
 (0)