def self.fields_for_order_statement(table=nil)
table ||= table_name
- %w(effective_date name).map {|field| "#{table}.#{field}"}
+ ["(CASE WHEN #{table}.effective_date IS NULL THEN 1 ELSE 0 END)", "#{table}.effective_date", "#{table}.name", "#{table}.id"]
end
+ scope :sorted, order(fields_for_order_statement)
+
# Returns the sharings that +user+ can set the version to
def allowed_sharings(user = User.current)
VERSION_SHARINGS.select do |s|
assert_progress_equal 25.0/100.0*100, v.closed_pourcent
end
+ def test_should_sort_scheduled_then_unscheduled_versions
+ Version.delete_all
+ v4 = Version.create!(:project_id => 1, :name => 'v4')
+ v3 = Version.create!(:project_id => 1, :name => 'v2', :effective_date => '2012-07-14')
+ v2 = Version.create!(:project_id => 1, :name => 'v1')
+ v1 = Version.create!(:project_id => 1, :name => 'v3', :effective_date => '2012-08-02')
+ v5 = Version.create!(:project_id => 1, :name => 'v5', :effective_date => '2012-07-02')
+
+ assert_equal [v5, v3, v1, v2, v4], Version.sorted.all
+ end
+
context "#behind_schedule?" do
setup do
ProjectCustomField.destroy_all # Custom values are a mess to isolate in tests