|
|
@@ -16,7 +16,7 @@ |
|
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
|
|
|
|
|
|
class QueryColumn |
|
|
|
attr_accessor :name, :sortable, :groupable, :default_order, :include_options |
|
|
|
attr_accessor :name, :sortable, :groupable, :default_order |
|
|
|
include Redmine::I18n |
|
|
|
|
|
|
|
def initialize(name, options={}) |
|
|
@@ -27,7 +27,6 @@ class QueryColumn |
|
|
|
self.groupable = name.to_s |
|
|
|
end |
|
|
|
self.default_order = options[:default_order] |
|
|
|
self.include_options = options[:include] |
|
|
|
end |
|
|
|
|
|
|
|
def caption |
|
|
@@ -49,7 +48,6 @@ class QueryCustomFieldColumn < QueryColumn |
|
|
|
self.groupable = custom_field.order_statement |
|
|
|
end |
|
|
|
self.groupable ||= false |
|
|
|
self.include_options = :custom_values |
|
|
|
@cf = custom_field |
|
|
|
end |
|
|
|
|
|
|
@@ -109,15 +107,15 @@ class Query < ActiveRecord::Base |
|
|
|
|
|
|
|
@@available_columns = [ |
|
|
|
QueryColumn.new(:project, :sortable => "#{Project.table_name}.name", :groupable => true), |
|
|
|
QueryColumn.new(:tracker, :sortable => "#{Tracker.table_name}.position", :groupable => true, :include => :tracker), |
|
|
|
QueryColumn.new(:tracker, :sortable => "#{Tracker.table_name}.position", :groupable => true), |
|
|
|
QueryColumn.new(:status, :sortable => "#{IssueStatus.table_name}.position", :groupable => true), |
|
|
|
QueryColumn.new(:priority, :sortable => "#{IssuePriority.table_name}.position", :default_order => 'desc', :groupable => true), |
|
|
|
QueryColumn.new(:subject, :sortable => "#{Issue.table_name}.subject"), |
|
|
|
QueryColumn.new(:author), |
|
|
|
QueryColumn.new(:assigned_to, :sortable => ["#{User.table_name}.lastname", "#{User.table_name}.firstname", "#{User.table_name}.id"], :groupable => true, :include => :assigned_to), |
|
|
|
QueryColumn.new(:assigned_to, :sortable => ["#{User.table_name}.lastname", "#{User.table_name}.firstname", "#{User.table_name}.id"], :groupable => true), |
|
|
|
QueryColumn.new(:updated_on, :sortable => "#{Issue.table_name}.updated_on", :default_order => 'desc'), |
|
|
|
QueryColumn.new(:category, :sortable => "#{IssueCategory.table_name}.name", :groupable => true, :include => :category), |
|
|
|
QueryColumn.new(:fixed_version, :sortable => ["#{Version.table_name}.effective_date", "#{Version.table_name}.name"], :default_order => 'desc', :groupable => true, :include => :fixed_version), |
|
|
|
QueryColumn.new(:category, :sortable => "#{IssueCategory.table_name}.name", :groupable => true), |
|
|
|
QueryColumn.new(:fixed_version, :sortable => ["#{Version.table_name}.effective_date", "#{Version.table_name}.name"], :default_order => 'desc', :groupable => true), |
|
|
|
QueryColumn.new(:start_date, :sortable => "#{Issue.table_name}.start_date"), |
|
|
|
QueryColumn.new(:due_date, :sortable => "#{Issue.table_name}.due_date"), |
|
|
|
QueryColumn.new(:estimated_hours, :sortable => "#{Issue.table_name}.estimated_hours"), |
|
|
@@ -324,10 +322,6 @@ class Query < ActiveRecord::Base |
|
|
|
def group_by_statement |
|
|
|
group_by_column.groupable |
|
|
|
end |
|
|
|
|
|
|
|
def include_options |
|
|
|
(columns << group_by_column).collect {|column| column && column.include_options}.flatten.compact.uniq |
|
|
|
end |
|
|
|
|
|
|
|
def project_statement |
|
|
|
project_clauses = [] |