diff --git a/app/controllers/my_profile/tasks_controller.rb b/app/controllers/my_profile/tasks_controller.rb index 1888ca4..22398a6 100644 --- a/app/controllers/my_profile/tasks_controller.rb +++ b/app/controllers/my_profile/tasks_controller.rb @@ -26,7 +26,11 @@ class TasksController < MyProfileController end def processed - @tasks = Task.to(profile).without_spam.closed.sort_by(&:created_at) + @tasks = Task.to(profile).without_spam.closed.order('tasks.created_at DESC') + @filter = params[:filter] || {} + @tasks = filter_tasks(@filter, @tasks) + @tasks = @tasks.paginate(:per_page => Task.per_page, :page => params[:page]) + @task_types = Task.closed_types_for(profile) end def change_responsible @@ -102,4 +106,37 @@ class TasksController < MyProfileController render :json => result.map { |task| {:label => task.data[:name], :value => task.data[:name]} } end + protected + + def filter_by_closed_date(filter, tasks) + filter[:closed_from] = Date.parse(filter[:closed_from]) unless filter[:closed_from].blank? + filter[:closed_until] = Date.parse(filter[:closed_until]) unless filter[:closed_until].blank? + + tasks = tasks.where('tasks.end_date >= ?', filter[:closed_from].beginning_of_day) unless filter[:closed_from].blank? + tasks = tasks.where('tasks.end_date <= ?', filter[:closed_until].end_of_day) unless filter[:closed_until].blank? + tasks + end + + def filter_by_creation_date(filter, tasks) + filter[:created_from] = Date.parse(filter[:created_from]) unless filter[:created_from].blank? + filter[:created_until] = Date.parse(filter[:created_until]) unless filter[:created_until].blank? + + tasks = tasks.where('tasks.created_at >= ?', filter[:created_from].beginning_of_day) unless filter[:created_from].blank? + tasks = tasks.where('tasks.created_at <= ?', filter[:created_until].end_of_day) unless filter[:created_until].blank? + tasks + end + + def filter_tasks(filter, tasks) + tasks = tasks.eager_load(:requestor, :closed_by) + tasks = tasks.of(filter[:type].presence) + tasks = tasks.where(:status => filter[:status]) unless filter[:status].blank? + tasks = filter_by_creation_date(filter, tasks) + tasks = filter_by_closed_date(filter, tasks) + + tasks = tasks.where('profiles.name LIKE ?', filter[:requestor]) unless filter[:requestor].blank? + tasks = tasks.where('closed_bies_tasks.name LIKE ?', filter[:closed_by]) unless filter[:closed_by].blank? + tasks = tasks.where('tasks.data LIKE ?', "%#{filter[:text]}%") unless filter[:text].blank? + tasks + end + end diff --git a/app/models/task.rb b/app/models/task.rb index 6507bae..2477704 100644 --- a/app/models/task.rb +++ b/app/models/task.rb @@ -329,6 +329,10 @@ class Task < ActiveRecord::Base Task.to(profile).pending.select('distinct type').map { |t| [t.class.name, t.title] } end + def self.closed_types_for(profile) + Task.to(profile).closed.select('distinct type').map { |t| [t.class.name, t.title] } + end + def opened? status == Task::Status::ACTIVE || status == Task::Status::HIDDEN end diff --git a/app/views/tasks/_task_processed.html.erb b/app/views/tasks/_task_processed.html.erb new file mode 100644 index 0000000..7f35285 --- /dev/null +++ b/app/views/tasks/_task_processed.html.erb @@ -0,0 +1,23 @@ +
<% if @tasks.empty? %> <%= _('No processed tasks.') %> <% else %> -