Skip to content

Commit

Permalink
Date 'within period' filter: allow it to be open-ended (so we can hav…
Browse files Browse the repository at this point in the history
…e filters like 'from 19/01/2009' or 'to 19/01/2009')
  • Loading branch information
Artem Vasiliev committed Jan 19, 2009
1 parent 244408d commit a2831f2
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 4 deletions.
16 changes: 14 additions & 2 deletions app/models/query.rb
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,13 @@ def validate
# filter requires one or more values
(filters[field][:values] and !filters[field][:values].first.blank?) or
# filter doesn't require any value
["o", "c", "done", "undone", "!*", "*", "t", "w"].include? operator_for(field)
["o", "c", "done", "undone", "!*", "*", "t", "w", "<t<"].include? operator_for(field)

errors.add label_for(field), :activerecord_error_blank if
["<t<"].include?(operator_for(field)) and
# filter requires that at least one value need to be set
(!filters[field][:values] or (filters[field][:values][0].blank? and filters[field][:values][1].blank?))

end if filters
end

Expand Down Expand Up @@ -368,7 +374,13 @@ def statement
when "t"
sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [date_left_bound(Date.today), date_right_bound(Date.today)]
when "<t<"
sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [date_left_bound(v[0].to_s), date_right_bound(v[1].to_s)]
if v[0].blank?
sql = sql + "#{db_table}.#{db_field} <= '%s'" % date_right_bound(v[1])
elsif v[1].blank?
sql = sql + "#{db_table}.#{db_field} >= '%s'" % date_left_bound(v[0])
else
sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [date_left_bound(v[0]), date_right_bound(v[1])]
end
when "w"
from = l(:general_first_day_of_week) == '7' ?
# week starts on sunday
Expand Down
14 changes: 12 additions & 2 deletions test/functional/issues_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,8 @@ def test_date_range_filer_with(issue_date, options = {})
:fields => ["created_on"],
:operators => {"created_on" => "<t<"},
:values => {"created_on" => [""]},
:from_values => {"created_on" => [options[:from]]},
:to_values => {"created_on" => [options[:to]]}
:from_values => {"created_on" => options[:from]},
:to_values => {"created_on" => options[:to]}
issues = assigns(:issues)
tester.call(issues)
end
Expand All @@ -141,6 +141,16 @@ def test_date_range_filer_with_right_edge_issue_date
:to => '2006-07-19')
end

def test_date_range_filer_with_open_left
test_date_range_filer_with('2006-07-19 17:00', :from => nil,
:to => '2006-07-19')
end

def test_date_range_filer_with_open_right
test_date_range_filer_with('2006-07-19 17:00', :from => '2006-07-19',
:to => nil)
end

def test_index_csv_with_project
get :index, :format => 'csv'
assert_response :success
Expand Down

0 comments on commit a2831f2

Please sign in to comment.