Commit 0cc41947523d5e500dbd016546edf200adc5b8a5
Exists in
theme-brasil-digital-from-staging
and in
9 other branches
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
Showing
3 changed files
with
58 additions
and
28 deletions
Show diff stats
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 < 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 < 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 | ... | ... |