Added the cost of logged time to Fixed Deliverables's spent method. #1439

This commit is contained in:
Eric Davis
2008-07-10 17:43:22 -07:00
parent c90e7337f5
commit 7dd531d0ee
2 changed files with 38 additions and 3 deletions
+18 -3
View File
@@ -6,10 +6,25 @@ class FixedDeliverable < Deliverable
0
end
# Returns the amount spent. It will always be the fixed cost because
# that money has been allocated already and is managed by the user
# Returns the amount spent. It will always be the fixed cost plus logged time
# because that money has been allocated already and is managed by the user.
def spent
self.fixed_cost || 0.0
return 0.0 if self.fixed_cost.nil?
return self.fixed_cost unless self.issues.size > 0
total = fixed_cost.to_f
# Get all timelogs assigned
time_logs = self.issues.collect(&:time_entries).flatten
# Find each Member for their rate
time_logs.each do |time_log|
member = Member.find_by_user_id_and_project_id(time_log.user_id, time_log.project_id)
total += (member.rate * time_log.hours) unless member.nil? || member.rate.nil?
end
return total
end
def profit # :nodoc:
+20
View File
@@ -18,6 +18,26 @@ describe FixedDeliverable, '.spent' do
@deliverable = FixedDeliverable.new({ :subject => 'test' })
@deliverable.spent.should eql(0.0)
end
it 'should always equal the sum of the fixed cost and any logged hours' do
@project = mock_model(Project)
@user = mock_model(User)
@issue1 = mock_model(Issue)
@issue_1_time_entry = mock_model(TimeEntry, :issue_id => @issue1.id, :user_id => @user.id, :project_id => @project.id, :hours => 1.0)
@issue1.stub!(:time_entries).and_return([@issue_1_time_entry])
@member = mock_model(Member, :user => @user, :project => @project, :rate => 60.0)
Member.should_receive(:find_by_user_id_and_project_id).with(@user.id, @project.id).and_return(@member)
@deliverable = FixedDeliverable.new({ :subject => 'test' })
@issues = [@issue1]
@deliverable.stub!(:fixed_cost).and_return(5000.0)
@deliverable.should_receive(:issues).twice.and_return(@issues)
@deliverable.spent.should eql(5060.0)
end
end
describe FixedDeliverable, '.profit as a %' do