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
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
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
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
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
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