summaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2016-10-02 11:21:11 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2016-10-02 11:21:11 +0000
commitb6ed06ca3c59292fd8c98e39e823aed8e65013e6 (patch)
treefda756d1266fc302a9a50d5f33fb92bcec26f9fc /app/models
parentca9aca685b78147bd370453be33c279245ed1ac7 (diff)
downloadredmine-b6ed06ca3c59292fd8c98e39e823aed8e65013e6.tar.gz
redmine-b6ed06ca3c59292fd8c98e39e823aed8e65013e6.zip
Add the possibility to filter issues after Target Version's Status and Due Date (#23215).
Patch by Marius BALTEANU. git-svn-id: http://svn.redmine.org/redmine/trunk@15881 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models')
-rw-r--r--app/models/issue_query.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/app/models/issue_query.rb b/app/models/issue_query.rb
index c3923940c..b0df69149 100644
--- a/app/models/issue_query.rb
+++ b/app/models/issue_query.rb
@@ -153,6 +153,15 @@ class IssueQuery < Query
:type => :list_optional,
: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 "fixed_version.due_date",
+ :type => :date,
+ :name => l(:label_attribute_of_fixed_version, :name => l(:field_effective_date))
+
+ add_available_filter "fixed_version.status",
+ :type => :list,
+ :name => l(:label_attribute_of_fixed_version, :name => l(:field_status)),
+ :values => Version::VERSION_STATUSES.map{|t| [t, t] }
+
add_available_filter "category_id",
:type => :list_optional,
:values => categories.collect{|s| [s.name, s.id.to_s] }
@@ -417,6 +426,22 @@ class IssueQuery < Query
end
end
+ def sql_for_fixed_version_status_field(field, operator, value)
+ where = sql_for_field(field, operator, value, Version.table_name, "status")
+ version_ids = versions(:conditions => [where]).map(&:id)
+
+ nl = operator == "!" ? "#{Issue.table_name}.fixed_version_id IS NULL OR" : ''
+ "(#{nl} #{sql_for_field("fixed_version_id", "=", version_ids, Issue.table_name, "fixed_version_id")})"
+ end
+
+ def sql_for_fixed_version_due_date_field(field, operator, value)
+ where = sql_for_field(field, operator, value, Version.table_name, "effective_date")
+ version_ids = versions(:conditions => [where]).map(&:id)
+
+ nl = operator == "!*" ? "#{Issue.table_name}.fixed_version_id IS NULL OR" : ''
+ "(#{nl} #{sql_for_field("fixed_version_id", "=", version_ids, Issue.table_name, "fixed_version_id")})"
+ end
+
def sql_for_is_private_field(field, operator, value)
op = (operator == "=" ? 'IN' : 'NOT IN')
va = value.map {|v| v == '0' ? self.class.connection.quoted_false : self.class.connection.quoted_true}.uniq.join(',')