Commit 62a74f33b947814c8c2de916c8a61c2866b22946
1 parent
556c20c3
Exists in
staging
and in
4 other branches
Improve listing of processed tasks
Showing
5 changed files
with
125 additions
and
10 deletions
Show diff stats
app/controllers/my_profile/tasks_controller.rb
... | ... | @@ -21,7 +21,26 @@ class TasksController < MyProfileController |
21 | 21 | end |
22 | 22 | |
23 | 23 | def processed |
24 | - @tasks = Task.to(profile).without_spam.closed.sort_by(&:created_at) | |
24 | + @filter_requestor = params[:filter_requestor].presence | |
25 | + @filter_type = params[:filter_type].presence | |
26 | + @filter_text = params[:filter_text].presence | |
27 | + @filter_status = params[:filter_status].presence | |
28 | + @filter_created_from = Date.parse(params[:filter_created_from]) unless params[:filter_created_from].blank? | |
29 | + @filter_created_until = Date.parse(params[:filter_created_until]) unless params[:filter_created_until].blank? | |
30 | + @filter_closed_from = Date.parse(params[:filter_closed_from]) unless params[:filter_closed_from].blank? | |
31 | + @filter_closed_until = Date.parse(params[:filter_closed_until]) unless params[:filter_closed_until].blank? | |
32 | + | |
33 | + @tasks = Task.to(profile).without_spam.closed.order('tasks.created_at DESC') | |
34 | + @tasks = @tasks.of(@filter_type) | |
35 | + @tasks = @tasks.where(:status => params[:filter_status]) unless @filter_status.blank? | |
36 | + @tasks = @tasks.where('tasks.created_at >= ?', @filter_created_from.beginning_of_day) unless @filter_created_from.blank? | |
37 | + @tasks = @tasks.where('tasks.created_at <= ?', @filter_created_until.end_of_day) unless @filter_created_until.blank? | |
38 | + @tasks = @tasks.joins(:requestor).like('profiles.name', @filter_requestor) unless @filter_requestor.blank? | |
39 | + @tasks = @tasks.like('tasks.data', @filter_text) unless @filter_text.blank? | |
40 | + | |
41 | + @tasks = @tasks.paginate(:per_page => Task.per_page, :page => params[:page]) | |
42 | + | |
43 | + @task_types = Task.closed_types_for(profile) | |
25 | 44 | end |
26 | 45 | |
27 | 46 | def change_responsible | ... | ... |
app/models/task.rb
... | ... | @@ -242,7 +242,7 @@ class Task < ActiveRecord::Base |
242 | 242 | scope :canceled, :conditions => { :status => Task::Status::CANCELLED } |
243 | 243 | scope :closed, :conditions => { :status => [Task::Status::CANCELLED, Task::Status::FINISHED] } |
244 | 244 | scope :opened, :conditions => { :status => [Task::Status::ACTIVE, Task::Status::HIDDEN] } |
245 | - scope :of, lambda { |type| conditions = type ? "type LIKE '#{type}'" : "1=1"; {:conditions => [conditions]} } | |
245 | + scope :of, lambda { |type| conditions = type ? "tasks.type LIKE '#{type}'" : "1=1"; {:conditions => [conditions]} } | |
246 | 246 | scope :order_by, lambda { |attribute, ord| {:order => "#{attribute} #{ord}"} } |
247 | 247 | scope :like, lambda { |field, value| where("LOWER(#{field}) LIKE ?", "%#{value.downcase}%") if value} |
248 | 248 | scope :pending_all, lambda { |profile, filter_type, filter_text| |
... | ... | @@ -263,6 +263,10 @@ class Task < ActiveRecord::Base |
263 | 263 | Task.to(profile).pending.select('distinct type').map { |t| [t.class.name, t.title] } |
264 | 264 | end |
265 | 265 | |
266 | + def self.closed_types_for(profile) | |
267 | + Task.to(profile).closed.select('distinct type').map { |t| [t.class.name, t.title] } | |
268 | + end | |
269 | + | |
266 | 270 | def opened? |
267 | 271 | status == Task::Status::ACTIVE || status == Task::Status::HIDDEN |
268 | 272 | end | ... | ... |
app/views/tasks/processed.html.erb
1 | +<%= stylesheet_link_tag 'tasks' %> | |
2 | + | |
3 | +<div class="task-processed"> | |
1 | 4 | <h1><%= _("%s's processed tasks") % profile.name %></h1> |
2 | 5 | |
6 | +<div class="task-processed-filter"> | |
7 | +<% | |
8 | + type_collection = [[nil, _('All')]] + @task_types | |
9 | +%> | |
10 | + <%= form_tag '#', :method => 'get' do %> | |
11 | + <%= field_set_tag _('Filter'), :class => 'filter_fields' do %> | |
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] ]) %> | |
15 | + </div> | |
16 | + | |
17 | + <div> | |
18 | + <%= labelled_text_field(_('Text Filter:'), :filter_text, @filter_text) %> | |
19 | + <%= labelled_text_field(_('Requestor Name:'), :filter_requestor, @filter_requestor) %> | |
20 | + </div> | |
21 | + | |
22 | + <%= 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' })) %> | |
23 | + <%= 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' })) %> | |
24 | + | |
25 | + <div class="actions"> | |
26 | + <%= submit_button(:search, _('Search')) %> | |
27 | + </div> | |
28 | + <% end %> | |
29 | + <% end %> | |
30 | +</div> | |
31 | + | |
3 | 32 | <p> |
4 | 33 | <% if @tasks.empty? %> |
5 | 34 | <em><%= _('No processed tasks.') %></em> |
6 | 35 | <% else %> |
7 | - <ul> | |
36 | + <ul class="task-list"> | |
8 | 37 | <% @tasks.each do |item| %> |
9 | - <li> | |
10 | - <strong><%= task_information(item) %></strong> <br/> | |
11 | - <small> | |
12 | - <%= _('Created:') +' '+ show_date(item.created_at) %> | |
38 | + <li class="task status-<%= item.status%>"> | |
39 | + <div class="title"> | |
40 | + <%= task_information(item) %> | |
41 | + </div> | |
42 | + <div class="status"> | |
43 | + <%= _(Task::Status.names[item.status]) %> | |
44 | + </div> | |
45 | + <div class="dates"> | |
46 | + <span class="created"> | |
47 | + <span class="label"><%= _('Created:') %></span> | |
48 | + <span class="value"><%= show_date(item.created_at) %></span> | |
49 | + </span> | |
13 | 50 | — |
14 | - <%= _('Processed:') +' '+ show_date(item.end_date) %> | |
15 | - </small> | |
51 | + <span class="processed"> | |
52 | + <span class="label"><%= _('Processed:') %></span> | |
53 | + <span class="value"><%= show_date(item.end_date) %></span> | |
54 | + </span> | |
55 | + </div> | |
56 | + <% if item.closed_by.present? %> | |
57 | + <div class="closed-by"> | |
58 | + <span class="label"><%= _('Closed by: ') %></span> | |
59 | + <span class="value"><%= link_to(item.closed_by.name, item.closed_by.url) %></span> | |
60 | + </div> | |
61 | + <% end %> | |
16 | 62 | </li> |
17 | 63 | <% end %> |
18 | 64 | </ul> |
65 | + <%= pagination_links(@tasks)%> | |
19 | 66 | <% end %> |
20 | 67 | </p> |
21 | 68 | |
22 | 69 | <% button_bar do %> |
23 | 70 | <%= button(:back, _('Back'), :action => 'index') %> |
24 | 71 | <% end %> |
72 | + | |
73 | +</div> | ... | ... |
public/stylesheets/tasks.css
... | ... | @@ -53,3 +53,46 @@ |
53 | 53 | .task_responsible { |
54 | 54 | text-align: right; |
55 | 55 | } |
56 | + | |
57 | +.task-processed li { | |
58 | + background-color: rgb(240, 240, 240); | |
59 | + border-radius: 8px; | |
60 | + margin: 10px 0; | |
61 | + list-style-type: none; | |
62 | + padding: 12px; | |
63 | +} | |
64 | + | |
65 | +.task-processed .task.status-3 { | |
66 | + background-color: rgb(205, 252, 218); | |
67 | +} | |
68 | + | |
69 | +.task-processed .task.status-2 { | |
70 | + background-color: rgb(255, 203, 203); | |
71 | +} | |
72 | + | |
73 | + | |
74 | +.task-processed ul { | |
75 | + padding: 0; | |
76 | +} | |
77 | + | |
78 | +.task-processed .task-list .task .title { | |
79 | + border-bottom: 1px solid rgba(0, 0, 0, 0.1); | |
80 | + font-weight: bold; | |
81 | + color: rgb(44, 44, 44); | |
82 | +} | |
83 | + | |
84 | +.task-processed .task .status { | |
85 | + float: right; | |
86 | + color: rgb(156, 156, 156); | |
87 | + font-weight: bold; | |
88 | +} | |
89 | + | |
90 | +.task-processed .task .dates { | |
91 | + font-size: 11px; | |
92 | +} | |
93 | +.task-processed .task .closed-by { | |
94 | + font-size: 11px; | |
95 | +} | |
96 | +.task-processed .task .label { | |
97 | + font-weight: bold | |
98 | +} | ... | ... |
test/functional/tasks_controller_test.rb