From 597062fdf890b1a55879edb81941ae010996d0e0 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Tue, 13 Jul 2010 18:00:35 -0700 Subject: [PATCH] [#4183] Implemented FixedDeliverable#profit_left (was called profit_spent). --- app/models/fixed_deliverable.rb | 6 +++++ test/unit/fixed_deliverable_test.rb | 37 +++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/app/models/fixed_deliverable.rb b/app/models/fixed_deliverable.rb index 5432ada..c944114 100644 --- a/app/models/fixed_deliverable.rb +++ b/app/models/fixed_deliverable.rb @@ -26,6 +26,12 @@ class FixedDeliverable < Deliverable budgets = labor_budget_total + overhead_budget_total (total || 0.0) - budgets end + + # The amount of money remaining after expenses have been taken out + # Profit left = Total - Labor spent - Overhead spent + def profit_left + total_spent - labor_budget_spent - overhead_spent + end # Hardcoded value used as a wrapper for the old Budget plugin API. # diff --git a/test/unit/fixed_deliverable_test.rb b/test/unit/fixed_deliverable_test.rb index 86f610a..b480d76 100644 --- a/test/unit/fixed_deliverable_test.rb +++ b/test/unit/fixed_deliverable_test.rb @@ -27,4 +27,41 @@ class FixedDeliverableTest < ActiveSupport::TestCase assert_equal 1000, FixedDeliverable.generate(:total => 1_000).total_spent end end + + context "#profit_left" do + should "be the total_spent minus the labor budget spent minus the overhead budget spent" do + configure_overhead_plugin + + @project = Project.generate! + @developer = User.generate! + @manager = User.generate! + @role = Role.generate! + User.add_to_project(@developer, @project, @role) + User.add_to_project(@manager, @project, @role) + @rate = Rate.generate!(:project => @project, + :user => @developer, + :date_in_effect => Date.yesterday, + :amount => 55) + @rate = Rate.generate!(:project => @project, + :user => @manager, + :date_in_effect => Date.yesterday, + :amount => 75) + + @deliverable_1 = FixedDeliverable.generate!(:total => 2000) + @deliverable_1.issues << @issue1 = Issue.generate_for_project!(@project) + TimeEntry.generate!(:hours => 15, :issue => @issue1, :project => @project, + :activity => @billable_activity, + :user => @developer) + TimeEntry.generate!(:hours => 4, :issue => @issue1, :project => @project, + :activity => @non_billable_activity, + :user => @manager) + + # Check intermediate values + assert_equal 825, @deliverable_1.labor_budget_spent + assert_equal 300, @deliverable_1.overhead_spent + + assert_equal 875, @deliverable_1.profit_left + + end + end end