diff --git a/app/models/deliverable.rb b/app/models/deliverable.rb index 0921c25..b1d403b 100644 --- a/app/models/deliverable.rb +++ b/app/models/deliverable.rb @@ -31,7 +31,8 @@ class Deliverable < ActiveRecord::Base delegate "open?", :to => :contract, :prefix => true, :allow_nil => true delegate "closed?", :to => :contract, :prefix => true, :allow_nil => true delegate "locked?", :to => :contract, :prefix => true, :allow_nil => true - + delegate :project, :to => :contract, :allow_nil => true + # Callbacks before_destroy :block_on_locked_contracts before_destroy :block_on_closed_contracts diff --git a/app/models/overhead_budget.rb b/app/models/overhead_budget.rb index ebc13b4..518c549 100644 --- a/app/models/overhead_budget.rb +++ b/app/models/overhead_budget.rb @@ -3,8 +3,10 @@ class OverheadBudget < ActiveRecord::Base # Associations belongs_to :deliverable + belongs_to :time_entry_activity # Validations + validates_presence_of :time_entry_activity_id # Accessors include DollarizedAttribute diff --git a/app/views/deliverables/_finance_form.html.erb b/app/views/deliverables/_finance_form.html.erb index 654f80e..98839d1 100644 --- a/app/views/deliverables/_finance_form.html.erb +++ b/app/views/deliverables/_finance_form.html.erb @@ -41,7 +41,8 @@ <%= overhead_budget.hidden_field(:month) %>
<%= overhead_budget.label(:hours, l(:text_short_hours)) %>
diff --git a/db/migrate/021_add_time_entry_activity_id_to_overhead_budgets.rb b/db/migrate/021_add_time_entry_activity_id_to_overhead_budgets.rb new file mode 100644 index 0000000..66ea53c --- /dev/null +++ b/db/migrate/021_add_time_entry_activity_id_to_overhead_budgets.rb @@ -0,0 +1,10 @@ +class AddTimeEntryActivityIdToOverheadBudgets < ActiveRecord::Migration + def self.up + add_column :overhead_budgets, :time_entry_activity_id, :integer + add_index :overhead_budgets, :time_entry_activity_id + end + + def self.down + remove_column :overhead_budgets, :time_entry_activity_id + end +end diff --git a/lib/redmine_contracts/budget_plugin_migration.rb b/lib/redmine_contracts/budget_plugin_migration.rb index 6625e51..db055c7 100644 --- a/lib/redmine_contracts/budget_plugin_migration.rb +++ b/lib/redmine_contracts/budget_plugin_migration.rb @@ -171,7 +171,8 @@ module RedmineContracts deliverable.overhead_budgets << OverheadBudget.new(:deliverable => deliverable, :budget => old_deliverable['overhead'], - :hours => hours.to_f.round(2)) + :hours => hours.to_f.round(2), + :time_entry_activity => first_non_billable_activity(deliverable.project)) elsif old_deliverable['overhead_percent'].present? overhead = total * (old_deliverable['overhead_percent'].to_f / 100) if @overhead_rate != 0 @@ -182,7 +183,8 @@ module RedmineContracts deliverable.overhead_budgets << OverheadBudget.new(:deliverable => deliverable, :budget => overhead, - :hours => hours.to_f.round(2)) + :hours => hours.to_f.round(2), + :time_entry_activity => first_non_billable_activity(deliverable.project)) end end @@ -233,5 +235,9 @@ module RedmineContracts def self.first_billable_activity(project) project.billable_activities.first || TimeEntryActivity.first end + + def self.first_non_billable_activity(project) + project.non_billable_activities.first || TimeEntryActivity.first + end end end diff --git a/lib/redmine_contracts/patches/project_patch.rb b/lib/redmine_contracts/patches/project_patch.rb index f42a3b3..ae5293b 100644 --- a/lib/redmine_contracts/patches/project_patch.rb +++ b/lib/redmine_contracts/patches/project_patch.rb @@ -21,6 +21,12 @@ module RedmineContracts activity.billable? end.first end + + def non_billable_activities + activities.partition do |activity| + activity.billable? + end.second + end end end end diff --git a/test/integration/deliverables_new_test.rb b/test/integration/deliverables_new_test.rb index 3792029..37dae03 100644 --- a/test/integration/deliverables_new_test.rb +++ b/test/integration/deliverables_new_test.rb @@ -238,6 +238,7 @@ class DeliverablesNewTest < ActionController::IntegrationTest end within("#deliverable-overhead") do + select @non_billable_activity.name, :from => 'Activity' fill_in "hrs", :with => '10' fill_in "$", :with => '$1,000' end @@ -266,6 +267,7 @@ class DeliverablesNewTest < ActionController::IntegrationTest @overhead_budget = @deliverable.overhead_budgets.first assert_equal 10, @overhead_budget.hours assert_equal 1000.0, @overhead_budget.budget + assert_equal @non_billable_activity, @overhead_budget.time_entry_activity assert_equal 1, @deliverable.fixed_budgets.count @fixed_budget = @deliverable.fixed_budgets.first diff --git a/test/unit/overhead_budget_test.rb b/test/unit/overhead_budget_test.rb index 38a3a31..79722b9 100644 --- a/test/unit/overhead_budget_test.rb +++ b/test/unit/overhead_budget_test.rb @@ -2,6 +2,9 @@ require File.dirname(__FILE__) + '/../test_helper' class OverheadBudgetTest < ActiveSupport::TestCase should_belong_to :deliverable + should_belong_to :time_entry_activity + + should_validate_presence_of :time_entry_activity_id context "#budget=" do should "strip dollar signs when writing" do