##// END OF EJS Templates
Group versions by status in version custom field filter (#23265)....
Jean-Philippe Lang -
r15812:9206d077d460
parent child
Show More
@@ -826,7 +826,7 module Redmine
826 field_attributes :version_status
826 field_attributes :version_status
827
827
828 def possible_values_options(custom_field, object=nil)
828 def possible_values_options(custom_field, object=nil)
829 versions_options(custom_field, object)
829 possible_values_records(custom_field, object).sort.collect{|v| [v.to_s, v.id.to_s] }
830 end
830 end
831
831
832 def before_custom_field_save(custom_field)
832 def before_custom_field_save(custom_field)
@@ -839,13 +839,14 module Redmine
839 protected
839 protected
840
840
841 def query_filter_values(custom_field, query)
841 def query_filter_values(custom_field, query)
842 versions_options(custom_field, query.project, true)
842 versions = possible_values_records(custom_field, query.project, true)
843 Version.sort_by_status(versions).collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s, l("version_status_#{s.status}")] }
843 end
844 end
844
845
845 def versions_options(custom_field, object, all_statuses=false)
846 def possible_values_records(custom_field, object=nil, all_statuses=false)
846 if object.is_a?(Array)
847 if object.is_a?(Array)
847 projects = object.map {|o| o.respond_to?(:project) ? o.project : nil}.compact.uniq
848 projects = object.map {|o| o.respond_to?(:project) ? o.project : nil}.compact.uniq
848 projects.map {|project| possible_values_options(custom_field, project)}.reduce(:&) || []
849 projects.map {|project| possible_values_records(custom_field, project)}.reduce(:&) || []
849 elsif object.respond_to?(:project) && object.project
850 elsif object.respond_to?(:project) && object.project
850 scope = object.project.shared_versions
851 scope = object.project.shared_versions
851 filtered_versions_options(custom_field, scope, all_statuses)
852 filtered_versions_options(custom_field, scope, all_statuses)
@@ -864,7 +865,7 module Redmine
864 scope = scope.where(:status => statuses.map(&:to_s))
865 scope = scope.where(:status => statuses.map(&:to_s))
865 end
866 end
866 end
867 end
867 scope.sort.collect{|u| [u.to_s, u.id.to_s] }
868 scope
868 end
869 end
869 end
870 end
870
871
@@ -82,7 +82,19 class Redmine::VersionFieldFormatTest < ActionView::TestCase
82 version = Version.generate!(:project => project, :status => 'locked')
82 version = Version.generate!(:project => project, :status => 'locked')
83 query = Query.new(:project => project)
83 query = Query.new(:project => project)
84
84
85 assert_not_include version.name, field.possible_values_options(project).map(&:first)
85 full_name = "#{version.project} - #{version.name}"
86 assert_include version.name, field.query_filter_options(query)[:values].call.map(&:first)
86 assert_not_include full_name, field.possible_values_options(project).map(&:first)
87 assert_include full_name, field.query_filter_options(query)[:values].call.map(&:first)
88 end
89
90 def test_query_filter_options_should_include_version_status_for_grouping
91 field = IssueCustomField.new(:field_format => 'version', :version_status => ["open"])
92 project = Project.find(1)
93 version = Version.generate!(:project => project, :status => 'locked')
94 query = Query.new(:project => project)
95
96 full_name = "#{version.project} - #{version.name}"
97 assert_include [full_name, version.id.to_s, l(:version_status_locked)],
98 field.query_filter_options(query)[:values].call
87 end
99 end
88 end
100 end
General Comments 0
You need to be logged in to leave comments. Login now