Commit 04905110 authored by Jean-Philippe Lang's avatar Jean-Philippe Lang

On the calendar, the gantt and in the Tracker filter on the issue list, only…

On the calendar, the gantt and in the Tracker filter on the issue list, only active trackers of the project (and its sub projects) can be selected.

git-svn-id: http://redmine.rubyforge.org/svn/trunk@1071 e93f8b46-1217-0410-a6f0-8f06a7374b81
parent 18066ba8
......@@ -418,7 +418,7 @@ class ProjectsController < ApplicationController
end
def calendar
@trackers = Tracker.find(:all, :order => 'position')
@trackers = @project.rolled_up_trackers
retrieve_selected_tracker_ids(@trackers)
if params[:year] and params[:year].to_i > 1900
......@@ -445,7 +445,7 @@ class ProjectsController < ApplicationController
end
def gantt
@trackers = Tracker.find(:all, :order => 'position')
@trackers = @project.rolled_up_trackers
retrieve_selected_tracker_ids(@trackers)
if params[:year] and params[:year].to_i >0
......
......@@ -146,6 +146,15 @@ class Project < ActiveRecord::Base
children.select {|child| child.active?}
end
# Returns an array of the trackers used by the project and its sub projects
def rolled_up_trackers
@rolled_up_trackers ||=
Tracker.find(:all, :include => :projects,
:select => "DISTINCT #{Tracker.table_name}.*",
:conditions => ["#{Project.table_name}.id = ? OR #{Project.table_name}.parent_id = ?", id, id],
:order => "#{Tracker.table_name}.position")
end
# Deletes all project's members
def delete_all_members
Member.delete_all(['project_id = ?', id])
......
......@@ -132,8 +132,11 @@ class Query < ActiveRecord::Base
def available_filters
return @available_filters if @available_filters
trackers = project.nil? ? Tracker.find(:all, :order => 'position') : project.rolled_up_trackers
@available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } },
"tracker_id" => { :type => :list, :order => 2, :values => Tracker.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } },
"tracker_id" => { :type => :list, :order => 2, :values => trackers.collect{|s| [s.name, s.id.to_s] } },
"priority_id" => { :type => :list, :order => 3, :values => Enumeration.find(:all, :conditions => ['opt=?','IPRI']).collect{|s| [s.name, s.id.to_s] } },
"subject" => { :type => :text, :order => 8 },
"created_on" => { :type => :date_past, :order => 9 },
......
......@@ -19,6 +19,7 @@ class Tracker < ActiveRecord::Base
before_destroy :check_integrity
has_many :issues
has_many :workflows, :dependent => :delete_all
has_and_belongs_to_many :projects
has_and_belongs_to_many :custom_fields, :class_name => 'IssueCustomField', :join_table => "#{table_name_prefix}custom_fields_trackers#{table_name_suffix}", :association_foreign_key => 'custom_field_id'
acts_as_list
......
......@@ -14,9 +14,6 @@ projects_trackers_002:
projects_trackers_014:
project_id: 5
tracker_id: 2
projects_trackers_003:
project_id: 1
tracker_id: 3
projects_trackers_015:
project_id: 5
tracker_id: 3
......@@ -29,9 +26,6 @@ projects_trackers_005:
projects_trackers_006:
project_id: 2
tracker_id: 3
projects_trackers_007:
project_id: 3
tracker_id: 1
projects_trackers_008:
project_id: 3
tracker_id: 2
......
......@@ -3,11 +3,14 @@ trackers_001:
name: Bug
id: 1
is_in_chlog: true
position: 1
trackers_002:
name: Feature request
id: 2
is_in_chlog: true
position: 2
trackers_003:
name: Support request
id: 3
is_in_chlog: false
position: 3
......@@ -112,10 +112,10 @@ class ProjectsControllerTest < Test::Unit::TestCase
def test_move_issues_to_another_tracker
@request.session[:user_id] = 1
post :move_issues, :id => 1, :issue_ids => [1, 2], :new_tracker_id => 3
post :move_issues, :id => 1, :issue_ids => [1, 2], :new_tracker_id => 2
assert_redirected_to 'projects/ecookbook/issues'
assert_equal 3, Issue.find(1).tracker_id
assert_equal 3, Issue.find(2).tracker_id
assert_equal 2, Issue.find(1).tracker_id
assert_equal 2, Issue.find(2).tracker_id
end
def test_list_files
......
......@@ -18,7 +18,7 @@
require File.dirname(__FILE__) + '/../test_helper'
class ProjectTest < Test::Unit::TestCase
fixtures :projects, :issues, :issue_statuses, :journals, :journal_details, :users, :members, :roles
fixtures :projects, :issues, :issue_statuses, :journals, :journal_details, :users, :members, :roles, :projects_trackers, :trackers
def setup
@ecookbook = Project.find(1)
......@@ -112,6 +112,20 @@ class ProjectTest < Test::Unit::TestCase
sub.parent = Project.find(2)
assert !sub.save
end
def test_rolled_up_trackers
parent = Project.find(1)
child = parent.children.find(3)
assert_equal [1, 2], parent.tracker_ids
assert_equal [2, 3], child.tracker_ids
assert_kind_of Tracker, parent.rolled_up_trackers.first
assert_equal Tracker.find(1), parent.rolled_up_trackers.first
assert_equal [1, 2, 3], parent.rolled_up_trackers.collect(&:id)
assert_equal [2, 3], child.rolled_up_trackers.collect(&:id)
end
def test_issues_status_changes
journals = @ecookbook.issues_status_changes 3.days.ago.to_date, Date.today
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment