From acc825a4feca4298bbc845758e76599e93b0ea75 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Thu, 13 Oct 2011 09:28:31 -0700 Subject: [PATCH] [#6636] Add overhead table to the deliverable finance report --- app/models/deliverable.rb | 4 ++ app/views/deliverables/_finances.html.erb | 50 +++++++++++++++++++ test/integration/deliverable_finances_test.rb | 33 ++++++++++-- test/unit/deliverable_test.rb | 24 ++++++++- 4 files changed, 107 insertions(+), 4 deletions(-) diff --git a/app/models/deliverable.rb b/app/models/deliverable.rb index 0a117da..2e018c2 100644 --- a/app/models/deliverable.rb +++ b/app/models/deliverable.rb @@ -274,6 +274,10 @@ class Deliverable < ActiveRecord::Base project.activities.select {|activity| activity.billable? } end + def non_billable_time_entry_activities + project.activities.reject {|activity| activity.billable? } + end + # Total amount spent ($) for a given activity def spent_for_activity(activity) issues.all.inject(0.0) do |all_issues_total, issue| diff --git a/app/views/deliverables/_finances.html.erb b/app/views/deliverables/_finances.html.erb index b518fa7..a6cc5ec 100644 --- a/app/views/deliverables/_finances.html.erb +++ b/app/views/deliverables/_finances.html.erb @@ -59,3 +59,53 @@ + + + + + + + + + + <% deliverable.non_billable_time_entry_activities.each do |activity| %> + + <% content_tag_for(:tr, activity, :class => 'overhead ' + cycle('even','')) do %> + + + + + + <% end %> + + <% end %> + + + + + + + + + +
<%= l(:field_overhead) %><%= l(:field_cost) %><%= l(:field_hours) %>
+ <%= h(activity.name) %> + + <%= number_to_currency(deliverable.spent_for_activity(activity), :precision => 0) %> + + <%= number_to_currency(deliverable.budget_for_activity(activity), :precision => 0) %> + + <%= number_with_precision(deliverable.hours_spent_for_activity(activity), :precision => 0) %> + + <%= number_with_precision(deliverable.hours_budget_for_activity(activity), :precision => 0) %> +
+ Totals + + <%= number_to_currency(deliverable.overhead_spent, :precision => 0) %> + + <%= number_to_currency(deliverable.overhead_budget_total, :precision => 0) %> + + <%= number_with_precision(deliverable.overhead_hours_spent_total, :precision => 0) %> + + <%= number_with_precision(deliverable.overhead_budget_hours, :precision => 0) %> +
diff --git a/test/integration/deliverable_finances_test.rb b/test/integration/deliverable_finances_test.rb index 4c99068..194638e 100644 --- a/test/integration/deliverable_finances_test.rb +++ b/test/integration/deliverable_finances_test.rb @@ -22,6 +22,14 @@ class DeliverableFinancesShowTest < ActionController::IntegrationTest :amount => 100 }) + # 5 hours of $100 nonbillable work + create_issue_with_time_for_deliverable(@deliverable1, { + :activity => @non_billable_activity, + :user => @manager, + :hours => 5, + :amount => 100 + }) + @user.reload login_as(@user.login, 'contracts') end @@ -70,9 +78,7 @@ class DeliverableFinancesShowTest < ActionController::IntegrationTest end end - should "render the activities table for the deliverable" do - assert_select "h3", :text => /Activities/ - + should "render the labor activities table for the deliverable" do assert_select "table#deliverable-labor-activities" do assert_select "tr" do assert_select "td.labor", :text => /#{@billable_activity.name}/ @@ -93,5 +99,26 @@ class DeliverableFinancesShowTest < ActionController::IntegrationTest end end + should "render the overhead activities table for the deliverable" do + assert_select "table#deliverable-overhead-activities" do + assert_select "tr" do + assert_select "td.overhead", :text => /#{@non_billable_activity.name}/ + assert_select "td.spent-amount.overhead", :text => /\$500/ + assert_select "td.total-amount.overhead", :text => /\$600/ + assert_select "td.spent-hours.overhead", :text => /5/ + assert_select "td.total-hours.overhead", :text => /30/ # 3 month retainer * 10 + end + + assert_select "tr.total" do + assert_select "td.overhead", :text => /Totals/ + assert_select "td.spent-amount.overhead", :text => /\$500/ + assert_select "td.total-amount.overhead", :text => /\$600/ + assert_select "td.spent-hours.overhead", :text => /5/ + assert_select "td.total-hours.overhead", :text => /30/ + end + + end + end + end end diff --git a/test/unit/deliverable_test.rb b/test/unit/deliverable_test.rb index 65fb19c..ed48aaa 100644 --- a/test/unit/deliverable_test.rb +++ b/test/unit/deliverable_test.rb @@ -101,7 +101,29 @@ class DeliverableTest < ActiveSupport::TestCase end should "not include nonbillable activities" do - assert !@deliverable.billable_time_entry_activities.include?(@non_billable_activity3), "Non billable Activity included" + assert !@deliverable.billable_time_entry_activities.include?(@non_billable_activity), "Non billable Activity included" + end + + end + + context "#non_billable_time_entry_activities" do + setup do + configure_overhead_plugin + create_contract_and_deliverable + end + + should "include all billable activities" do + @non_billable_activity2 = TimeEntryActivity.generate!.reload + @non_billable_activity2.custom_field_values = { @custom_field.id => 'false' } + assert @non_billable_activity2.save + + assert @deliverable.non_billable_time_entry_activities.include?(@non_billable_activity), "Activity not included" + assert @deliverable.non_billable_time_entry_activities.include?(@non_billable_activity2), "Activity not included" + + end + + should "not include billable activities" do + assert !@deliverable.non_billable_time_entry_activities.include?(@billable_activity), "Billable Activity included" end end