Added Ruby sorts on the virtual attributes. #1135

This commit is contained in:
Eric Davis
2008-06-03 16:00:15 -07:00
parent e1cea90cd0
commit f21bc2480b
2 changed files with 37 additions and 12 deletions
+34 -8
View File
@@ -9,15 +9,12 @@ class DeliverablesController < ApplicationController
def index
sort_init "#{Deliverable.table_name}.id", "desc"
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
@budget = Budget.new(@project.id)
@@ -114,4 +111,33 @@ class DeliverablesController < ApplicationController
def get_settings
@settings = Setting.plugin_budget_plugin
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
+3 -4
View File
@@ -1,14 +1,13 @@
<% form_tag({}) do -%>
<table id="deliverable-list" class="list deliverables">
<thead><tr>
<%# TODO: Other sorts %>
<%= 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}.budget", :caption => 'Budget') %>
<%= content_tag('th', "Spent") %>
<%= sort_header_tag("spent", :caption => 'Spent') %>
<%= sort_header_tag("#{Deliverable.table_name}.due_date", :caption => 'Due') %>
<%= content_tag('th', "Progress") %>
<%= sort_header_tag("progress", :caption => 'Progress') %>
<%= content_tag('th', "Actions") %>
</tr></thead>
<tbody>