]> source.dussan.org Git - redmine.git/commitdiff
Group versions by status in issue filters (#10412).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 2 Jul 2016 09:44:53 +0000 (09:44 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 2 Jul 2016 09:44:53 +0000 (09:44 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@15601 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue_query.rb
app/models/version.rb
public/javascripts/application.js
test/unit/query_test.rb

index c4ab37d594c0ac7bae94766a1577c06ea0c06268..807c5cf0e1efc563fd915837bb077c2dcca24dba 100644 (file)
@@ -201,7 +201,7 @@ class IssueQuery < Query
 
     add_available_filter "fixed_version_id",
       :type => :list_optional,
-      :values => versions.sort.collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s] }
+      :values => Version.sort_by_status(versions).collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s, l("version_status_#{s.status}")] }
 
     add_available_filter "category_id",
       :type => :list_optional,
index bc71b72e93a4958e67f976f7aa00db4cdbf0dc57..86c4cb018b2465f26abf64af32ebb204aa73fc86 100644 (file)
@@ -197,6 +197,17 @@ class Version < ActiveRecord::Base
     end
   end
 
+       # Sort versions by status (open, locked then closed versions)
+  def self.sort_by_status(versions)
+    versions.sort do |a, b|
+      if a.status == b.status
+        a <=> b
+      else
+        b.status <=> a.status
+      end
+    end
+  end
+
   def css_classes
     [
       completed? ? 'version-completed' : 'version-incompleted',
index eedeae08b403b2b3ea3247dca923f4be0e966e2c..64d3e8ea9fd13b7b2703212f8bbc022750d5fcf7 100644 (file)
@@ -175,6 +175,11 @@ function buildFilterRow(field, operator, values) {
       if ($.isArray(filterValue)) {
         option.val(filterValue[1]).text(filterValue[0]);
         if ($.inArray(filterValue[1], values) > -1) {option.attr('selected', true);}
+        if (filterValue.length == 3) {
+          var optgroup = select.find('optgroup').filter(function(){return $(this).attr('label') == filterValue[2]});
+          if (!optgroup.length) {optgroup = $('<optgroup>').attr('label', filterValue[2]);}
+          option = optgroup.append(option);
+        }
       } else {
         option.val(filterValue).text(filterValue);
         if ($.inArray(filterValue, values) > -1) {option.attr('selected', true);}
index 2515624d80438cfb6323cf657cc23fe510e29ab0..d6fa254817824307a147ad9875f267811a3e74a2 100644 (file)
@@ -95,7 +95,7 @@ class QueryTest < ActiveSupport::TestCase
     Version.find(2).update_attribute :sharing, 'system'
     query = IssueQuery.new(:project => nil, :name => '_')
     assert query.available_filters.has_key?('fixed_version_id')
-    assert query.available_filters['fixed_version_id'][:values].detect {|v| v.last == '2'}
+    assert query.available_filters['fixed_version_id'][:values].detect {|v| v[1] == '2'}
   end
 
   def test_project_filter_in_global_queries
@@ -146,7 +146,7 @@ class QueryTest < ActiveSupport::TestCase
     query = IssueQuery.new(:project => Project.find(1), :name => '_')
     filter = query.available_filters["fixed_version_id"]
     assert_not_nil filter
-    assert_include subproject_version.id.to_s, filter[:values].map(&:last)
+    assert_include subproject_version.id.to_s, filter[:values].map(&:second)
   end
 
   def test_query_with_multiple_custom_fields