Change the TimelogController's to/from dates based on the project time entries
Instead of looking for the earliest and latest time entry system wide for the dates in the form, now TimelogController will only look at the time entries for the current project (and parent/sub projects). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4087 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
8900797ada
commit
cdfc57d544
|
@ -260,8 +260,8 @@ private
|
|||
end
|
||||
|
||||
@from, @to = @to, @from if @from && @to && @from > @to
|
||||
@from ||= (TimeEntry.earilest_date_for_project || Date.today) - 1
|
||||
@to ||= (TimeEntry.latest_date_for_project || Date.today)
|
||||
@from ||= (TimeEntry.earilest_date_for_project(@project) || Date.today)
|
||||
@to ||= (TimeEntry.latest_date_for_project(@project) || Date.today)
|
||||
end
|
||||
|
||||
def load_available_criterias
|
||||
|
|
|
@ -493,6 +493,15 @@ class Project < ActiveRecord::Base
|
|||
enabled_modules.clear
|
||||
end
|
||||
end
|
||||
|
||||
# Returns an array of projects that are in this project's hierarchy
|
||||
#
|
||||
# Example: parents, children, siblings
|
||||
def hierarchy
|
||||
parents = project.self_and_ancestors || []
|
||||
descendants = project.descendants || []
|
||||
project_hierarchy = parents | descendants # Set union
|
||||
end
|
||||
|
||||
# Returns an auto-generated project identifier based on the last identifier used
|
||||
def self.next_identifier
|
||||
|
|
|
@ -82,11 +82,19 @@ class TimeEntry < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def self.earilest_date_for_project
|
||||
TimeEntry.minimum(:spent_on, :include => :project, :conditions => Project.allowed_to_condition(User.current, :view_time_entries))
|
||||
def self.earilest_date_for_project(project=nil)
|
||||
finder_conditions = ARCondition.new(Project.allowed_to_condition(User.current, :view_time_entries))
|
||||
if project
|
||||
finder_conditions << ["project_id IN (?)", project.hierarchy.collect(&:id)]
|
||||
end
|
||||
TimeEntry.minimum(:spent_on, :include => :project, :conditions => finder_conditions.conditions)
|
||||
end
|
||||
|
||||
def self.latest_date_for_project
|
||||
TimeEntry.maximum(:spent_on, :include => :project, :conditions => Project.allowed_to_condition(User.current, :view_time_entries))
|
||||
def self.latest_date_for_project(project=nil)
|
||||
finder_conditions = ARCondition.new(Project.allowed_to_condition(User.current, :view_time_entries))
|
||||
if project
|
||||
finder_conditions << ["project_id IN (?)", project.hierarchy.collect(&:id)]
|
||||
end
|
||||
TimeEntry.maximum(:spent_on, :include => :project, :conditions => finder_conditions.conditions)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -283,7 +283,7 @@ class TimelogControllerTest < ActionController::TestCase
|
|||
assert_not_nil assigns(:total_hours)
|
||||
assert_equal "162.90", "%.2f" % assigns(:total_hours)
|
||||
# display all time by default
|
||||
assert_equal '2007-03-11'.to_date, assigns(:from)
|
||||
assert_equal '2007-03-12'.to_date, assigns(:from)
|
||||
assert_equal '2007-04-22'.to_date, assigns(:to)
|
||||
end
|
||||
|
||||
|
@ -325,8 +325,8 @@ class TimelogControllerTest < ActionController::TestCase
|
|||
assert_equal 2, assigns(:entries).size
|
||||
assert_not_nil assigns(:total_hours)
|
||||
assert_equal 154.25, assigns(:total_hours)
|
||||
# display all time by default
|
||||
assert_equal '2007-03-11'.to_date, assigns(:from)
|
||||
# display all time based on what's been logged
|
||||
assert_equal '2007-03-12'.to_date, assigns(:from)
|
||||
assert_equal '2007-04-22'.to_date, assigns(:to)
|
||||
end
|
||||
|
||||
|
|
|
@ -50,17 +50,50 @@ class TimeEntryTest < ActiveSupport::TestCase
|
|||
end
|
||||
|
||||
context "#earilest_date_for_project" do
|
||||
should "return the lowest spent_on value that is visible to the current user" do
|
||||
setup do
|
||||
User.current = nil
|
||||
assert_equal "2007-03-12", TimeEntry.earilest_date_for_project.to_s
|
||||
@public_project = Project.generate!(:is_public => true)
|
||||
@issue = Issue.generate_for_project!(@public_project)
|
||||
TimeEntry.generate!(:spent_on => '2010-01-01',
|
||||
:issue => @issue,
|
||||
:project => @public_project)
|
||||
end
|
||||
|
||||
context "without a project" do
|
||||
should "return the lowest spent_on value that is visible to the current user" do
|
||||
assert_equal "2007-03-12", TimeEntry.earilest_date_for_project.to_s
|
||||
end
|
||||
end
|
||||
|
||||
context "with a project" do
|
||||
should "return the lowest spent_on value that is visible to the current user for that project and it's subprojects only" do
|
||||
assert_equal "2010-01-01", TimeEntry.earilest_date_for_project(@public_project).to_s
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context "#latest_date_for_project" do
|
||||
should "return the highest spent_on value that is visible to the current user" do
|
||||
setup do
|
||||
User.current = nil
|
||||
assert_equal "2007-04-22", TimeEntry.latest_date_for_project.to_s
|
||||
@public_project = Project.generate!(:is_public => true)
|
||||
@issue = Issue.generate_for_project!(@public_project)
|
||||
TimeEntry.generate!(:spent_on => '2010-01-01',
|
||||
:issue => @issue,
|
||||
:project => @public_project)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
context "without a project" do
|
||||
should "return the highest spent_on value that is visible to the current user" do
|
||||
assert_equal "2010-01-01", TimeEntry.latest_date_for_project.to_s
|
||||
end
|
||||
end
|
||||
|
||||
context "with a project" do
|
||||
should "return the highest spent_on value that is visible to the current user for that project and it's subprojects only" do
|
||||
project = Project.find(1)
|
||||
assert_equal "2007-04-22", TimeEntry.latest_date_for_project(project).to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue