Added Ruby sorts on the virtual attributes. #1135
This commit is contained in:
1 parent
e1cea90cd0
commit
f21bc2480b
2 files changed
+37
-12
No files matched your search
@@ -9,15 +9,12 @@ class DeliverablesController < ApplicationController
|
|||||||
def index
|
def index
|
||||||
sort_init "#{Deliverable.table_name}.id", "desc"
|
sort_init "#{Deliverable.table_name}.id", "desc"
|
||||||
sort_update
|
sort_update
|
||||||
limit = per_page_option
|
|
||||||
@deliverable_count = Deliverable.count(:conditions => { :project_id => @project.id })
|
|
||||||
@deliverable_pages = Paginator.new self, @deliverable_count, limit, params['page']
|
|
||||||
@deliverables = Deliverable.find(:all,
|
|
||||||
:order => sort_clause,
|
|
||||||
:conditions => { :project_id => @project.id },
|
|
||||||
:limit => limit,
|
|
||||||
:offset => @deliverable_pages.current.offset)
|
|
||||||
|
|
||||||
|
# TODO: pagination
|
||||||
|
@deliverables = Deliverable.find(:all, { :conditions => { :project_id => @project.id} }.merge(sort_stuff))
|
||||||
|
|
||||||
|
@deliverables = sort_if_needed @deliverables
|
||||||
|
|
||||||
@deliverable = Deliverable.new
|
@deliverable = Deliverable.new
|
||||||
|
|
||||||
@budget = Budget.new(@project.id)
|
@budget = Budget.new(@project.id)
|
||||||
@@ -114,4 +111,33 @@ class DeliverablesController < ApplicationController
|
|||||||
def get_settings
|
def get_settings
|
||||||
@settings = Setting.plugin_budget_plugin
|
@settings = Setting.plugin_budget_plugin
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Sorting limits
|
||||||
|
def sort_stuff
|
||||||
|
if %w(score spent progress).include?(session[@sort_name][:key])
|
||||||
|
return { }
|
||||||
|
else
|
||||||
|
return { :limit => per_page_option, :order => sort_clause }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Sort +deliverables+ manually using the virtual fields
|
||||||
|
def sort_if_needed(deliverables)
|
||||||
|
if %w(score spent progress).include?(session[@sort_name][:key])
|
||||||
|
case session[@sort_name][:key]
|
||||||
|
when "score":
|
||||||
|
sorted = deliverables.sort {|a,b| a.score <=> b.score}
|
||||||
|
when "spent":
|
||||||
|
sorted = deliverables.sort {|a,b| a.spent <=> b.spent}
|
||||||
|
when "progress":
|
||||||
|
sorted = deliverables.sort {|a,b| a.progress <=> b.progress}
|
||||||
|
end
|
||||||
|
|
||||||
|
return sorted if session[@sort_name][:order] == 'asc'
|
||||||
|
return sorted.reverse! if session[@sort_name][:order] == 'desc'
|
||||||
|
else
|
||||||
|
return deliverables
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -1,14 +1,13 @@
|
|||||||
<% form_tag({}) do -%>
|
<% form_tag({}) do -%>
|
||||||
<table id="deliverable-list" class="list deliverables">
|
<table id="deliverable-list" class="list deliverables">
|
||||||
<thead><tr>
|
<thead><tr>
|
||||||
<%# TODO: Other sorts %>
|
|
||||||
<%= sort_header_tag("#{Deliverable.table_name}.id", :caption => '#', :default_order => 'desc') %>
|
<%= sort_header_tag("#{Deliverable.table_name}.id", :caption => '#', :default_order => 'desc') %>
|
||||||
<%= content_tag('th', "Score") %>
|
<%= sort_header_tag("score", :caption => 'Score', :default_order => 'desc') %>
|
||||||
<%= sort_header_tag("#{Deliverable.table_name}.subject", :caption => 'Subject') %>
|
<%= sort_header_tag("#{Deliverable.table_name}.subject", :caption => 'Subject') %>
|
||||||
<%= sort_header_tag("#{Deliverable.table_name}.budget", :caption => 'Budget') %>
|
<%= sort_header_tag("#{Deliverable.table_name}.budget", :caption => 'Budget') %>
|
||||||
<%= content_tag('th', "Spent") %>
|
<%= sort_header_tag("spent", :caption => 'Spent') %>
|
||||||
<%= sort_header_tag("#{Deliverable.table_name}.due_date", :caption => 'Due') %>
|
<%= sort_header_tag("#{Deliverable.table_name}.due_date", :caption => 'Due') %>
|
||||||
<%= content_tag('th', "Progress") %>
|
<%= sort_header_tag("progress", :caption => 'Progress') %>
|
||||||
<%= content_tag('th', "Actions") %>
|
<%= content_tag('th', "Actions") %>
|
||||||
</tr></thead>
|
</tr></thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|||||||
Reference in new issue
Block a user