From 2c04ef4f452263a6de6471ab8faad9772317004e Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Fri, 17 Sep 2010 15:22:53 -0700 Subject: [PATCH] [#4477] Add FixedBudget items into the total and profit Deliverable calculations --- app/models/fixed_deliverable.rb | 2 +- app/models/hourly_deliverable.rb | 6 ++++-- test/unit/fixed_deliverable_test.rb | 3 ++- test/unit/hourly_deliverable_test.rb | 10 ++++++---- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/models/fixed_deliverable.rb b/app/models/fixed_deliverable.rb index 52e6a11..644b751 100644 --- a/app/models/fixed_deliverable.rb +++ b/app/models/fixed_deliverable.rb @@ -23,7 +23,7 @@ class FixedDeliverable < Deliverable # The amount of profit that is budgeted for this deliverable. # Profit = Total - ( Labor + Overhead + Fixed + Markup ) def profit_budget(date=nil) - budgets = labor_budget_total(date) + overhead_budget_total(date) + budgets = labor_budget_total(date) + overhead_budget_total(date) + fixed_budget_total(date) + fixed_markup_budget_total(date) (total(date) || 0.0) - budgets end diff --git a/app/models/hourly_deliverable.rb b/app/models/hourly_deliverable.rb index 5fb3792..dfb1096 100644 --- a/app/models/hourly_deliverable.rb +++ b/app/models/hourly_deliverable.rb @@ -14,12 +14,14 @@ class HourlyDeliverable < Deliverable 'H' end + # Total = ( Labor Hours * Billing Rate ) + ( Fixed + Markup ) def total(date=nil) return 0 if contract.nil? return 0 if contract.billable_rate.blank? return 0 if labor_budgets.count == 0 && overhead_budgets.count == 0 - return contract.billable_rate * labor_budget_hours(date) + fixed_budget_amount = fixed_budget_total(date) + fixed_markup_budget_total(date) + return (contract.billable_rate * labor_budget_hours(date)) + fixed_budget_amount end # Total amount to be billed on the deliverable, using the total time logged @@ -50,7 +52,7 @@ class HourlyDeliverable < Deliverable # The amount of profit that is budgeted for this deliverable # Profit = Total - ( Labor + Overhead + Fixed + Markup ) def profit_budget(date=nil) - budgets = labor_budget_total(date) + overhead_budget_total(date) + budgets = labor_budget_total(date) + overhead_budget_total(date) + fixed_budget_total(date) + fixed_markup_budget_total(date) (total(date) || 0.0) - budgets end diff --git a/test/unit/fixed_deliverable_test.rb b/test/unit/fixed_deliverable_test.rb index b480d76..a55635a 100644 --- a/test/unit/fixed_deliverable_test.rb +++ b/test/unit/fixed_deliverable_test.rb @@ -13,8 +13,9 @@ class FixedDeliverableTest < ActiveSupport::TestCase LaborBudget.generate!(:deliverable => deliverable, :budget => 200) LaborBudget.generate!(:deliverable => deliverable, :budget => 200) OverheadBudget.generate!(:deliverable => deliverable, :budget => 200) + FixedBudget.generate!(:deliverable => deliverable, :budget => '$100', :markup => '50%') # $50 markup - assert_equal 400, deliverable.profit_budget + assert_equal 400 - 150, deliverable.profit_budget end should "be 0 if there is no total" do diff --git a/test/unit/hourly_deliverable_test.rb b/test/unit/hourly_deliverable_test.rb index 9c51191..6f2c4d7 100644 --- a/test/unit/hourly_deliverable_test.rb +++ b/test/unit/hourly_deliverable_test.rb @@ -20,13 +20,14 @@ class HourlyDeliverableTest < ActiveSupport::TestCase assert_equal 0, d.total end - should "multiply the total number of labor budget hours by the contract billable rate" do + should "multiply the total number of labor budget hours by the contract billable rate and add the fixed budget and markup" do contract = Contract.generate!(:billable_rate => 100.0) d = HourlyDeliverable.generate!(:contract => contract) d.labor_budgets << LaborBudget.generate!(:hours => 10) d.overhead_budgets << OverheadBudget.generate!(:hours => 20) + d.fixed_budgets << FixedBudget.generate!(:budget => '$100', :markup => '50%') # $50 markup - assert_equal 100.0 * 10, d.total + assert_equal (100.0 * 10) + (100 + 50), d.total end end @@ -86,9 +87,10 @@ class HourlyDeliverableTest < ActiveSupport::TestCase LaborBudget.generate!(:deliverable => @deliverable, :hours => 5, :budget => 250) LaborBudget.generate!(:deliverable => @deliverable, :hours => 5, :budget => 250) OverheadBudget.generate!(:deliverable => @deliverable, :hours => 3, :budget => 225) + FixedBudget.generate!(:deliverable => @deliverable, :budget => '$100', :markup => '50%') # $50 markup - assert_equal 1500, @deliverable.total - assert_equal 1500 - (225 + 250 + 250), @deliverable.profit_budget + assert_equal 1650, @deliverable.total # has the FixedBudget items added to the total also + assert_equal 1650 - (225 + 250 + 250 + 100 + 50), @deliverable.profit_budget end end