33281-v2.patch

Yuichi HARADA, 2020-04-24 09:13

Download (3.94 KB)

View differences:

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 619
  end
620 620

  
621 621
  # Returns a scope of project statuses that are available as columns or filters
app/models/time_entry_query.rb
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
    q = TimeEntryQuery.new
1816
    custom_field_columns = q.available_totalable_columns.select{|column| column.is_a?(QueryCustomFieldColumn)}
1817
    assert_equal [cf_pos1, cf_pos2, cf_pos3, cf_pos4], custom_field_columns.collect(&:custom_field)
1818

  
1819
    IssueCustomField.delete_all
1820
    cf_pos3 = IssueCustomField.generate!(:position => 3, :is_for_all => true, :field_format => 'int')
1821
    cf_pos4 = IssueCustomField.generate!(:position => 4, :is_for_all => true, :field_format => 'float')
1822
    cf_pos1 = IssueCustomField.generate!(:position => 1, :is_for_all => true, :field_format => 'float')
1823
    cf_pos2 = IssueCustomField.generate!(:position => 2, :is_for_all => true, :field_format => 'int')
1824
    q = IssueQuery.new
1825
    custom_field_columns = q.available_totalable_columns.select{|column| column.is_a?(QueryCustomFieldColumn)}
1826
    assert_equal [cf_pos1, cf_pos2, cf_pos3, cf_pos4], custom_field_columns.collect(&:custom_field)
1827
  end
1828

  
1805 1829
  def test_total_for_estimated_hours
1806 1830
    Issue.delete_all
1807 1831
    Issue.generate!(:estimated_hours => 5.5)