Defect #33281 » 33281-v3.patch
| app/models/project_query.rb | ||
|---|---|---|
| 69 | 69 |
def available_columns |
| 70 | 70 |
return @available_columns if @available_columns |
| 71 | 71 |
@available_columns = self.class.available_columns.dup |
| 72 |
@available_columns += ProjectCustomField.visible.
|
|
| 72 |
@available_columns += project_custom_fields.visible.
|
|
| 73 | 73 |
map {|cf| QueryCustomFieldColumn.new(cf) }
|
| 74 | 74 |
@available_columns |
| 75 | 75 |
end |
| app/models/query.rb | ||
|---|---|---|
| 609 | 609 |
if project |
| 610 | 610 |
project.rolled_up_custom_fields |
| 611 | 611 |
else |
| 612 |
IssueCustomField.all
|
|
| 612 |
IssueCustomField.sorted
|
|
| 613 | 613 |
end |
| 614 | 614 |
end |
| 615 | 615 | |
| 616 | 616 |
# Returns a scope of project custom fields that are available as columns or filters |
| 617 | 617 |
def project_custom_fields |
| 618 |
ProjectCustomField.all |
|
| 618 |
ProjectCustomField.sorted |
|
| 619 |
end |
|
| 620 | ||
| 621 |
# Returns a scope of time entry custom fields that are available as columns or filters |
|
| 622 |
def time_entry_custom_fields |
|
| 623 |
TimeEntryCustomField.sorted |
|
| 619 | 624 |
end |
| 620 | 625 | |
| 621 | 626 |
# Returns a scope of project statuses that are available as columns or filters |
| app/models/time_entry_query.rb | ||
|---|---|---|
| 100 | 100 |
add_available_filter "comments", :type => :text |
| 101 | 101 |
add_available_filter "hours", :type => :float |
| 102 | 102 | |
| 103 |
add_custom_fields_filters(TimeEntryCustomField)
|
|
| 103 |
add_custom_fields_filters(time_entry_custom_fields)
|
|
| 104 | 104 |
add_associations_custom_fields_filters :project |
| 105 | 105 |
add_custom_fields_filters(issue_custom_fields, :issue) |
| 106 | 106 |
add_associations_custom_fields_filters :user |
| ... | ... | |
| 109 | 109 |
def available_columns |
| 110 | 110 |
return @available_columns if @available_columns |
| 111 | 111 |
@available_columns = self.class.available_columns.dup |
| 112 |
@available_columns += TimeEntryCustomField.visible.
|
|
| 112 |
@available_columns += time_entry_custom_fields.visible.
|
|
| 113 | 113 |
map {|cf| QueryCustomFieldColumn.new(cf) }
|
| 114 | 114 |
@available_columns += issue_custom_fields.visible. |
| 115 | 115 |
map {|cf| QueryAssociationCustomFieldColumn.new(:issue, cf, :totalable => false) }
|
| 116 |
@available_columns += ProjectCustomField.visible.
|
|
| 116 |
@available_columns += project_custom_fields.visible.
|
|
| 117 | 117 |
map {|cf| QueryAssociationCustomFieldColumn.new(:project, cf) }
|
| 118 | 118 |
@available_columns |
| 119 | 119 |
end |
| test/unit/query_test.rb | ||
|---|---|---|
| 1802 | 1802 |
assert_include "cf_#{field.id}".to_sym, q.available_totalable_columns.map(&:name)
|
| 1803 | 1803 |
end |
| 1804 | 1804 | |
| 1805 |
def test_available_totalable_columns_should_sort_in_position_order_for_custom_field |
|
| 1806 |
ProjectCustomField.delete_all |
|
| 1807 |
cf_pos3 = ProjectCustomField.generate!(:position => 3, :is_for_all => true, :field_format => 'int') |
|
| 1808 |
cf_pos4 = ProjectCustomField.generate!(:position => 4, :is_for_all => true, :field_format => 'float') |
|
| 1809 |
cf_pos1 = ProjectCustomField.generate!(:position => 1, :is_for_all => true, :field_format => 'float') |
|
| 1810 |
cf_pos2 = ProjectCustomField.generate!(:position => 2, :is_for_all => true, :field_format => 'int') |
|
| 1811 |
q = ProjectQuery.new |
|
| 1812 |
custom_field_columns = q.available_totalable_columns.select{|column| column.is_a?(QueryCustomFieldColumn)}
|
|
| 1813 |
assert_equal [cf_pos1, cf_pos2, cf_pos3, cf_pos4], custom_field_columns.collect(&:custom_field) |
|
| 1814 | ||
| 1815 |
IssueCustomField.delete_all |
|
| 1816 |
cf_pos3 = IssueCustomField.generate!(:position => 3, :is_for_all => true, :field_format => 'int') |
|
| 1817 |
cf_pos4 = IssueCustomField.generate!(:position => 4, :is_for_all => true, :field_format => 'float') |
|
| 1818 |
cf_pos1 = IssueCustomField.generate!(:position => 1, :is_for_all => true, :field_format => 'float') |
|
| 1819 |
cf_pos2 = IssueCustomField.generate!(:position => 2, :is_for_all => true, :field_format => 'int') |
|
| 1820 |
q = IssueQuery.new |
|
| 1821 |
custom_field_columns = q.available_totalable_columns.select{|column| column.is_a?(QueryCustomFieldColumn)}
|
|
| 1822 |
assert_equal [cf_pos1, cf_pos2, cf_pos3, cf_pos4], custom_field_columns.collect(&:custom_field) |
|
| 1823 | ||
| 1824 |
ProjectCustomField.delete_all |
|
| 1825 |
IssueCustomField.delete_all |
|
| 1826 |
TimeEntryCustomField.delete_all |
|
| 1827 |
cf_pos3 = TimeEntryCustomField.generate!(:position => 3, :is_for_all => true, :field_format => 'int') |
|
| 1828 |
cf_pos4 = TimeEntryCustomField.generate!(:position => 4, :is_for_all => true, :field_format => 'float') |
|
| 1829 |
cf_pos1 = TimeEntryCustomField.generate!(:position => 1, :is_for_all => true, :field_format => 'float') |
|
| 1830 |
cf_pos2 = TimeEntryCustomField.generate!(:position => 2, :is_for_all => true, :field_format => 'int') |
|
| 1831 |
q = TimeEntryQuery.new |
|
| 1832 |
custom_field_columns = q.available_totalable_columns.select{|column| column.is_a?(QueryCustomFieldColumn)}
|
|
| 1833 |
assert_equal [cf_pos1, cf_pos2, cf_pos3, cf_pos4], custom_field_columns.collect(&:custom_field) |
|
| 1834 |
end |
|
| 1835 | ||
| 1805 | 1836 |
def test_total_for_estimated_hours |
| 1806 | 1837 |
Issue.delete_all |
| 1807 | 1838 |
Issue.generate!(:estimated_hours => 5.5) |
- « Previous
- 1
- …
- 3
- 4
- 5
- Next »