Commit 0cc41947523d5e500dbd016546edf200adc5b8a5

Authored by Victor Costa
2 parents 39e1c4ef 0abe320c

Merge branch 'processed_tasks' into production

Conflicts:
	app/controllers/my_profile/tasks_controller.rb
	app/views/tasks/processed.html.erb
	test/functional/tasks_controller_test.rb
app/controllers/my_profile/tasks_controller.rb
... ... @@ -27,28 +27,10 @@ class TasksController < MyProfileController
27 27 end
28 28  
29 29 def processed
30   - @filter_requestor = params[:filter_requestor].presence
31   - @filter_closed_by = params[:filter_closed_by].presence
32   - @filter_type = params[:filter_type].presence
33   - @filter_text = params[:filter_text].presence
34   - @filter_status = params[:filter_status].presence
35   - @filter_created_from = Date.parse(params[:filter_created_from]) unless params[:filter_created_from].blank?
36   - @filter_created_until = Date.parse(params[:filter_created_until]) unless params[:filter_created_until].blank?
37   - @filter_closed_from = Date.parse(params[:filter_closed_from]) unless params[:filter_closed_from].blank?
38   - @filter_closed_until = Date.parse(params[:filter_closed_until]) unless params[:filter_closed_until].blank?
39   -
40   - @tasks = Task.to(profile).without_spam.closed.joins([:requestor, :closed_by]).order('tasks.created_at DESC')
41   - @tasks = @tasks.of(@filter_type)
42   - @tasks = @tasks.where(:status => params[:filter_status]) unless @filter_status.blank?
43   - @tasks = @tasks.where('tasks.created_at >= ?', @filter_created_from.beginning_of_day) unless @filter_created_from.blank?
44   - @tasks = @tasks.where('tasks.created_at <= ?', @filter_created_until.end_of_day) unless @filter_created_until.blank?
45   - @tasks = @tasks.like('profiles.name', @filter_requestor) unless @filter_requestor.blank?
46   - @tasks = @tasks.like('closed_bies_tasks.name', @filter_closed_by) unless @filter_closed_by.blank?
47   -
48   - @tasks = @tasks.like('tasks.data', @filter_text) unless @filter_text.blank?
49   -
  30 + @tasks = Task.to(profile).without_spam.closed.includes(:requestor, :closed_by).order('tasks.created_at DESC')
  31 + @filter = params[:filter] || {}
  32 + @tasks = filter_tasks(@filter, @tasks)
50 33 @tasks = @tasks.paginate(:per_page => Task.per_page, :page => params[:page])
51   -
52 34 @task_types = Task.closed_types_for(profile)
53 35 end
54 36  
... ... @@ -173,7 +155,29 @@ class TasksController &lt; MyProfileController
173 155 result = ActsAsTaggableOn::Tag.find(:all, :conditions => ['LOWER(name) LIKE ?', "%#{arg}%"])
174 156  
175 157 render :text => prepare_to_token_input_by_label(result).to_json, :content_type => 'application/json'
  158 + end
  159 +
  160 + protected
  161 +
  162 + def filter_tasks(filter, tasks)
  163 + filter[:created_from] = Date.parse(filter[:created_from]) unless filter[:created_from].blank?
  164 + filter[:created_until] = Date.parse(filter[:created_until]) unless filter[:created_until].blank?
  165 + filter[:closed_from] = Date.parse(filter[:closed_from]) unless filter[:closed_from].blank?
  166 + filter[:closed_until] = Date.parse(filter[:closed_until]) unless filter[:closed_until].blank?
  167 +
  168 + tasks = tasks.of(filter[:type].presence)
  169 + tasks = tasks.where(:status => filter[:status]) unless filter[:status].blank?
  170 +
  171 + tasks = tasks.where('tasks.created_at >= ?', filter[:created_from].beginning_of_day) unless filter[:created_from].blank?
  172 + tasks = tasks.where('tasks.created_at <= ?', filter[:created_until].end_of_day) unless filter[:created_until].blank?
  173 +
  174 + tasks = tasks.where('tasks.end_date >= ?', filter[:closed_from].beginning_of_day) unless filter[:closed_from].blank?
  175 + tasks = tasks.where('tasks.end_date <= ?', filter[:closed_until].end_of_day) unless filter[:closed_until].blank?
176 176  
  177 + tasks = tasks.like('profiles.name', filter[:requestor]) unless filter[:requestor].blank?
  178 + tasks = tasks.like('closed_bies_tasks.name', filter[:closed_by]) unless filter[:closed_by].blank?
  179 + tasks = tasks.like('tasks.data', filter[:text]) unless filter[:text].blank?
  180 + tasks
177 181 end
178 182  
179 183 end
... ...
app/views/tasks/processed.html.erb
... ... @@ -10,21 +10,21 @@
10 10 <%= form_tag '#', :method => 'get' do %>
11 11 <%= field_set_tag _('Filter'), :class => 'filter_fields' do %>
12 12 <div>
13   - <%= labelled_select(_('Type of task')+': ', :filter_type, :first, :last, @filter_type, type_collection, {:id => 'filter-type'}) %>
14   - <%= labelled_select(_('Status:'), :filter_status, :last, :first, @filter_status, [[_('Any'), nil], [_(Task::Status.names[Task::Status::CANCELLED]), 2], [_(Task::Status.names[Task::Status::FINISHED]), 3] ]) %>
  13 + <%= labelled_select(_('Type of task')+': ', 'filter[type]', :first, :last, @filter[:type], type_collection, {:id => 'filter-type'}) %>
  14 + <%= labelled_select(_('Status:'), 'filter[status]', :last, :first, @filter[:status], [[_('Any'), nil], [_(Task::Status.names[Task::Status::CANCELLED]), 2], [_(Task::Status.names[Task::Status::FINISHED]), 3] ]) %>
15 15 </div>
16 16  
17 17 <div>
18   - <%= labelled_text_field(_('Text Filter:'), :filter_text, @filter_text) %>
  18 + <%= labelled_text_field(_('Text Filter:'), 'filter[text]', @filter[:text]) %>
19 19 </div>
20 20  
21 21 <div>
22   - <%= labelled_text_field(_('Requestor:'), :filter_requestor, @filter_requestor) %>
23   - <%= labelled_text_field(_('Closed by:'), :filter_closed_by, @filter_closed_by) %>
  22 + <%= labelled_text_field(_('Requestor:'), 'filter[requestor]', @filter[:requestor]) %>
  23 + <%= labelled_text_field(_('Closed by:'), 'filter[closed_by]', @filter[:closed_by]) %>
24 24 </div>
25 25  
26   - <%= labelled_form_field(_('Creation date'), date_range_field(:filter_created_from, :filter_created_until, @filter_created_from, @filter_created_until, '%Y-%m-%d', { :change_month => true, :change_year => true, :date_format => 'yy-mm-dd' }, { :size => 14, :from_id => 'filter_created_from', :to_id => 'filter_created_until' })) %>
27   - <%= labelled_form_field(_('Processed date'), date_range_field(:filter_closed_from, :filter_closed_until, @filter_closed_from, @filter_closed_until, '%Y-%m-%d', { :change_month => true, :change_year => true, :date_format => 'yy-mm-dd' }, { :size => 14, :from_id => 'filter_closed_from', :to_id => 'filter_closed_until' })) %>
  26 + <%= labelled_form_field(_('Creation date'), date_range_field('filter[created_from]', 'filter[created_until]', @filter[:created_from], @filter[:created_until], '%Y-%m-%d', { :change_month => true, :change_year => true, :date_format => 'yy-mm-dd' }, { :size => 14, :from_id => 'filter_created_from', :to_id => 'filter_created_until' })) %>
  27 + <%= labelled_form_field(_('Processed date'), date_range_field('filter[closed_from]', 'filter[closed_until]', @filter[:closed_from], @filter[:closed_until], '%Y-%m-%d', { :change_month => true, :change_year => true, :date_format => 'yy-mm-dd' }, { :size => 14, :from_id => 'filter_closed_from', :to_id => 'filter_closed_until' })) %>
28 28  
29 29 <div class="actions">
30 30 <%= submit_button(:search, _('Search')) %>
... ...
test/functional/tasks_controller_test.rb
... ... @@ -736,4 +736,30 @@ class TasksControllerTest &lt; ActionController::TestCase
736 736 assert_not_includes task_one.tags_from(nil), 'test'
737 737 end
738 738  
  739 + should 'filter processed tasks by all filters' do
  740 + requestor = fast_create(Person)
  741 + closed_by = fast_create(Person)
  742 + class AnotherTask < Task; end
  743 +
  744 + created_date = DateTime.now
  745 + processed_date = DateTime.now
  746 +
  747 + task_params = {:status => Task::Status::FINISHED, :requestor => requestor, :target => profile, :created_at => created_date, :end_date => processed_date, :closed_by => closed_by, :data => {:field => 'some data field'}}
  748 +
  749 + task = create(AnotherTask, task_params)
  750 + create(Task, task_params)
  751 + create(AnotherTask, task_params.clone.merge(:status => Task::Status::CANCELLED))
  752 + create(AnotherTask, task_params.clone.merge(:created_at => created_date - 1.day))
  753 + create(AnotherTask, task_params.clone.merge(:created_at => created_date + 1.day))
  754 + create(AnotherTask, task_params.clone.merge(:end_date => processed_date - 1.day))
  755 + create(AnotherTask, task_params.clone.merge(:end_date => processed_date + 1.day))
  756 + create(AnotherTask, task_params.clone.merge(:requestor => fast_create(Person, :name => 'another-requestor')))
  757 + create(AnotherTask, task_params.clone.merge(:closed_by => fast_create(Person, :name => 'another-closer')))
  758 + create(AnotherTask, task_params.clone.merge(:data => {:field => 'other data field'}))
  759 +
  760 + get :processed, :filter => {:type => AnotherTask, :status => Task::Status::FINISHED, :created_from => created_date, :created_until => created_date, :closed_from => processed_date, :closed_until => processed_date, :requestor => requestor.name, :closed_by => closed_by.name, :text => 'some data field'}
  761 + assert_response :success
  762 + assert_equal [task], assigns(:tasks)
  763 + end
  764 +
739 765 end
... ...