Project

General

Profile

Feature #20081 » 0002-Filter-time-entries-after-project-status.patch

Marius BĂLTEANU, 2018-10-22 00:03

View differences:

app/models/time_entry_query.rb
80 80
      :type => :list, :values => activities.map {|a| [a.name, a.id.to_s]}
81 81
    )
82 82

  
83
    add_available_filter("project.status",
84
      :type => :list,
85
      :name => l(:label_attribute_of_project, :name => l(:field_status)),
86
      :values => lambda { project_statuses_values }
87
    ) if project.nil? || !project.leaf?
88

  
83 89
    add_available_filter "comments", :type => :text
84 90
    add_available_filter "hours", :type => :float
85 91

  
......
205 211
    sql_for_field("category_id", operator, value, Issue.table_name, "category_id")
206 212
  end
207 213

  
214
  def sql_for_project_status_field(field, operator, value, options={})
215
    sql_for_field(field, operator, value, Project.table_name, "status")
216
  end
217

  
208 218
  # Accepts :from/:to params as shortcut filters
209 219
  def build_from_params(params, defaults={})
210 220
    super
test/functional/timelog_controller_test.rb
986 986
    assert_equal [entry].map(&:id).map(&:to_s), css_select('input[name="ids[]"]').map {|e| e.attr('value')}
987 987
  end
988 988

  
989
  def test_index_with_project_status_filter
990
    project = Project.find(3)
991
    project.close
992
    project.save
993

  
994
    get :index, :params => {
995
        :set_filter => 1,
996
        :f => ['project.status'],
997
        :op => {'project.status' => '='},
998
        :v => {'project.status' => ['1']}
999
    }
1000

  
1001
    assert_response :success
1002

  
1003
    time_entries = css_select('input[name="ids[]"]').map {|e| e.attr('value')}
1004
    assert_include '1', time_entries
1005
    assert_not_include '4', time_entries
1006
  end
1007

  
989 1008
  def test_index_with_issue_status_column
990 1009
    issue = Issue.generate!(:project_id => 1, :tracker_id => 1, :status_id => 4)
991 1010
    entry = TimeEntry.generate!(:issue => issue)
test/unit/time_entry_query_test.rb
108 108
    query = TimeEntryQuery.new(:project => nil, :name => '_')
109 109
    assert !query.available_filters.has_key?('issue.category_id')
110 110
  end
111

  
112
  def test_project_status_filter_should_be_available_in_global_queries
113
    query = TimeEntryQuery.new(:project => nil, :name => '_')
114
    assert query.available_filters.has_key?('project.status')
115
  end
116

  
117
  def test_project_status_filter_should_be_available_when_project_has_subprojects
118
    query = TimeEntryQuery.new(:project => Project.find(1), :name => '_')
119
    assert query.available_filters.has_key?('project.status')
120
  end
121

  
122
  def test_project_status_filter_should_not_be_available_when_project_is_leaf
123
    query = TimeEntryQuery.new(:project => Project.find(2), :name => '_')
124
    assert !query.available_filters.has_key?('project.status')
125
  end
111 126
end
(1-1/3)