[#4182] Added an OverheadBudget to track a Deliverable's overhead.
This commit is contained in:
1 parent
fdd49642b2
commit
b22db284c5
9 files changed
+105
-7
No files matched your search
@@ -2,6 +2,7 @@ module ContractsHelper
|
|||||||
def setup_nested_deliverable_records(deliverable)
|
def setup_nested_deliverable_records(deliverable)
|
||||||
returning(deliverable) do |d|
|
returning(deliverable) do |d|
|
||||||
d.labor_budgets.build if d.labor_budgets.empty?
|
d.labor_budgets.build if d.labor_budgets.empty?
|
||||||
|
d.overhead_budgets.build if d.overhead_budgets.empty?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -5,8 +5,10 @@ class Deliverable < ActiveRecord::Base
|
|||||||
belongs_to :contract
|
belongs_to :contract
|
||||||
belongs_to :manager, :class_name => 'User', :foreign_key => 'manager_id'
|
belongs_to :manager, :class_name => 'User', :foreign_key => 'manager_id'
|
||||||
has_many :labor_budgets
|
has_many :labor_budgets
|
||||||
|
has_many :overhead_budgets
|
||||||
|
|
||||||
accepts_nested_attributes_for :labor_budgets
|
accepts_nested_attributes_for :labor_budgets
|
||||||
|
accepts_nested_attributes_for :overhead_budgets
|
||||||
|
|
||||||
# Validations
|
# Validations
|
||||||
validates_presence_of :title
|
validates_presence_of :title
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
class OverheadBudget < ActiveRecord::Base
|
||||||
|
unloadable
|
||||||
|
|
||||||
|
# Associations
|
||||||
|
belongs_to :deliverable
|
||||||
|
|
||||||
|
# Validations
|
||||||
|
|
||||||
|
# Accessors
|
||||||
|
|
||||||
|
def budget=(v)
|
||||||
|
if v.is_a? String
|
||||||
|
write_attribute(:budget, v.gsub(/[$ ,]/, ''))
|
||||||
|
else
|
||||||
|
write_attribute(:budget, v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -25,11 +25,18 @@
|
|||||||
|
|
||||||
<% form.inputs :name => l(:text_deliverable_finances), :id => 'deliverable-finances' do %>
|
<% form.inputs :name => l(:text_deliverable_finances), :id => 'deliverable-finances' do %>
|
||||||
<% form.semantic_fields_for :labor_budgets do |labor_budget| %>
|
<% form.semantic_fields_for :labor_budgets do |labor_budget| %>
|
||||||
<% labor_budget.inputs :name => l(:field_labor) do %>
|
<% labor_budget.inputs :name => l(:field_labor), :id => 'deliverable-labor' do %>
|
||||||
<%= labor_budget.input :hours, :label => l(:text_short_hours), :input_html => {:size => 10} %>
|
<%= labor_budget.input :hours, :label => l(:text_short_hours), :input_html => {:size => 10} %>
|
||||||
<%= labor_budget.input :budget, :label => l(:text_dollar_sign), :input_html => {:size => 10} %>
|
<%= labor_budget.input :budget, :label => l(:text_dollar_sign), :input_html => {:size => 10} %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<% form.semantic_fields_for :overhead_budgets do |overhead_budget| %>
|
||||||
|
<% overhead_budget.inputs :name => l(:field_overhead), :id => 'deliverable-overhead' do %>
|
||||||
|
<%= overhead_budget.input :hours, :label => l(:text_short_hours), :input_html => {:size => 10} %>
|
||||||
|
<%= overhead_budget.input :budget, :label => l(:text_dollar_sign), :input_html => {:size => 10} %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
class CreateOverheadBudgets < ActiveRecord::Migration
|
||||||
|
def self.up
|
||||||
|
create_table :overhead_budgets do |t|
|
||||||
|
t.decimal :hours, :precision => 15, :scale => 4
|
||||||
|
t.decimal :budget, :precision => 15, :scale => 4
|
||||||
|
t.references :deliverable
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
|
||||||
|
add_index :overhead_budgets, :deliverable_id
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
drop_table :overhead_budgets
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -60,8 +60,15 @@ class DeliverablesEditTest < ActionController::IntegrationTest
|
|||||||
check "Feature Sign Off"
|
check "Feature Sign Off"
|
||||||
check "Warranty Sign Off"
|
check "Warranty Sign Off"
|
||||||
|
|
||||||
fill_in "hrs", :with => '20'
|
within("#deliverable-labor") do
|
||||||
fill_in "$", :with => '$2,000'
|
fill_in "hrs", :with => '20'
|
||||||
|
fill_in "$", :with => '$2,000'
|
||||||
|
end
|
||||||
|
|
||||||
|
within("#deliverable-overhead") do
|
||||||
|
fill_in "hrs", :with => '10'
|
||||||
|
fill_in "$", :with => '$1,000'
|
||||||
|
end
|
||||||
|
|
||||||
click_button "Save"
|
click_button "Save"
|
||||||
|
|
||||||
@@ -78,5 +85,9 @@ class DeliverablesEditTest < ActionController::IntegrationTest
|
|||||||
assert_equal 20, @labor_budget.hours
|
assert_equal 20, @labor_budget.hours
|
||||||
assert_equal 2000.0, @labor_budget.budget
|
assert_equal 2000.0, @labor_budget.budget
|
||||||
|
|
||||||
|
assert_equal 1, @hourly_deliverable.overhead_budgets.count
|
||||||
|
@overhead_budget = @hourly_deliverable.overhead_budgets.first
|
||||||
|
assert_equal 10, @overhead_budget.hours
|
||||||
|
assert_equal 1000.0, @overhead_budget.budget
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -112,7 +112,7 @@ class DeliverablesNewTest < ActionController::IntegrationTest
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
should "create new budget item for the deliverables" do
|
should "create new budget items for the deliverables" do
|
||||||
@manager = User.generate!
|
@manager = User.generate!
|
||||||
@role = Role.generate!
|
@role = Role.generate!
|
||||||
User.add_to_project(@manager, @project, @role)
|
User.add_to_project(@manager, @project, @role)
|
||||||
@@ -128,19 +128,32 @@ class DeliverablesNewTest < ActionController::IntegrationTest
|
|||||||
fill_in "End Date", :with => '2010-12-31'
|
fill_in "End Date", :with => '2010-12-31'
|
||||||
fill_in "Notes", :with => 'Some notes on the deliverable'
|
fill_in "Notes", :with => 'Some notes on the deliverable'
|
||||||
|
|
||||||
fill_in "hrs", :with => '20'
|
within("#deliverable-labor") do
|
||||||
fill_in "$", :with => '$2,000'
|
fill_in "hrs", :with => '20'
|
||||||
|
fill_in "$", :with => '$2,000'
|
||||||
|
end
|
||||||
|
|
||||||
|
within("#deliverable-overhead") do
|
||||||
|
fill_in "hrs", :with => '10'
|
||||||
|
fill_in "$", :with => '$1,000'
|
||||||
|
end
|
||||||
|
|
||||||
click_button "Save"
|
click_button "Save"
|
||||||
|
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_template 'contracts/show'
|
assert_template 'contracts/show'
|
||||||
|
|
||||||
@deliverable = Deliverable.last
|
@deliverable = Deliverable.last
|
||||||
|
|
||||||
assert_equal 1, @deliverable.labor_budgets.count
|
assert_equal 1, @deliverable.labor_budgets.count
|
||||||
@labor_budget = @deliverable.labor_budgets.first
|
@labor_budget = @deliverable.labor_budgets.first
|
||||||
assert_equal 20, @labor_budget.hours
|
assert_equal 20, @labor_budget.hours
|
||||||
assert_equal 2000.0, @labor_budget.budget
|
assert_equal 2000.0, @labor_budget.budget
|
||||||
|
|
||||||
|
assert_equal 1, @deliverable.overhead_budgets.count
|
||||||
|
@overhead_budget = @deliverable.overhead_budgets.first
|
||||||
|
assert_equal 10, @overhead_budget.hours
|
||||||
|
assert_equal 1000.0, @overhead_budget.budget
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -4,6 +4,7 @@ class DeliverableTest < ActiveSupport::TestCase
|
|||||||
should_belong_to :contract
|
should_belong_to :contract
|
||||||
should_belong_to :manager
|
should_belong_to :manager
|
||||||
should_have_many :labor_budgets
|
should_have_many :labor_budgets
|
||||||
|
should_have_many :overhead_budgets
|
||||||
|
|
||||||
should_validate_presence_of :title
|
should_validate_presence_of :title
|
||||||
should_validate_presence_of :type
|
should_validate_presence_of :type
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
require File.dirname(__FILE__) + '/../test_helper'
|
||||||
|
|
||||||
|
class OverheadBudgetTest < ActiveSupport::TestCase
|
||||||
|
should_belong_to :deliverable
|
||||||
|
|
||||||
|
context "#budget=" do
|
||||||
|
should "strip dollar signs when writing" do
|
||||||
|
e = OverheadBudget.new
|
||||||
|
e.budget = '$100.00'
|
||||||
|
|
||||||
|
assert_equal 100.00, e.budget.to_f
|
||||||
|
end
|
||||||
|
|
||||||
|
should "strip commas when writing" do
|
||||||
|
e = OverheadBudget.new
|
||||||
|
e.budget = '20,100.00'
|
||||||
|
|
||||||
|
assert_equal 20100.00, e.budget.to_f
|
||||||
|
end
|
||||||
|
|
||||||
|
should "strip spaces when writing" do
|
||||||
|
e = OverheadBudget.new
|
||||||
|
e.budget = '20 100.00'
|
||||||
|
|
||||||
|
assert_equal 20100.00, e.budget.to_f
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
Reference in new issue
Block a user