[#4391] Add a Deliverable filter to the issues list.

This commit is contained in:
Eric Davis
2010-08-12 11:27:33 -07:00
parent 6924b32048
commit 25436910fb
6 changed files with 81 additions and 2 deletions

View File

@@ -22,6 +22,8 @@ class Deliverable < ActiveRecord::Base
delegate :name, :to => :contract, :prefix => true, :allow_nil => true
named_scope :by_title, {:order => "#{Deliverable.table_name}.title ASC"}
def short_type
''
end

View File

@@ -44,7 +44,6 @@ end
require 'dispatcher'
Dispatcher.to_prepare :redmine_contracts do
gem 'inherited_resources', :version => '1.0.6'
require_dependency 'inherited_resources'
require_dependency 'inherited_resources/base'
@@ -65,6 +64,10 @@ Dispatcher.to_prepare :redmine_contracts do
Project.send(:include, RedmineContracts::Patches::ProjectPatch)
require_dependency 'issue'
Issue.send(:include, RedmineContracts::Patches::IssuePatch)
require_dependency 'query'
unless Query.included_modules.include? RedmineContracts::Patches::QueryPatch
Query.send(:include, RedmineContracts::Patches::QueryPatch)
end
unless Query.available_columns.collect(&:name).include?(:deliverable_title)
Query.add_available_column(QueryColumn.new(:deliverable_title, :sortable => "#{Deliverable.table_name}.title"))

View File

@@ -7,8 +7,8 @@ module RedmineContracts
base.send(:include, InstanceMethods)
base.class_eval do
unloadable
has_many :contracts
has_many :deliverables, :through => :contracts
end
end

View File

@@ -0,0 +1,40 @@
module RedmineContracts
module Patches
module QueryPatch
def self.included(base)
base.extend(ClassMethods)
base.send(:include, InstanceMethods)
base.class_eval do
unloadable
alias_method_chain :available_filters, :deliverable
end
end
module ClassMethods
end
module InstanceMethods
# TODO: Should have an API on the Redmine core for this
def available_filters_with_deliverable
@available_filters = available_filters_without_deliverable
if project
deliverable_filters = {
"deliverable_id" => {
:type => :list_optional,
:order => 15,
:values => project.deliverables.by_title.collect { |d| [d.title, d.id.to_s] }
}
}
return @available_filters.merge(deliverable_filters)
else
return @available_filters
end
end
end
end
end
end

View File

@@ -5,5 +5,6 @@ class RedmineContracts::Patches::ProjectTest < ActionController::TestCase
context "Project" do
subject { Project.new }
should_have_many :contracts
should_have_many :deliverables
end
end

View File

@@ -0,0 +1,33 @@
require File.dirname(__FILE__) + '/../../../../test_helper'
class RedmineContracts::Patches::QueryTest < ActionController::TestCase
context "Query" do
subject {Query.new}
context "#available_filters with project" do
setup do
@query = Query.new
@query.project = @project = Project.generate!
@contract = Contract.generate!(:project => @project, :name => 'A Contract')
@manager = User.generate!
@deliverable1 = FixedDeliverable.generate!(:contract => @contract, :manager => @manager, :title => 'One')
@deliverable2 = FixedDeliverable.generate!(:contract => @contract, :manager => @manager, :title => 'Two')
end
should "add a deliverable_id filter" do
filters = @query.available_filters
assert filters.keys.include?("deliverable_id")
deliverable_filter = filters["deliverable_id"]
assert_equal :list_optional, deliverable_filter[:type]
assert_equal [
["One", @deliverable1.id.to_s],
["Two", @deliverable2.id.to_s]
], deliverable_filter[:values]
end
end
end
end