diff --git a/app/controllers/deliverables_controller.rb b/app/controllers/deliverables_controller.rb
index a3d69a3..0aea42a 100644
--- a/app/controllers/deliverables_controller.rb
+++ b/app/controllers/deliverables_controller.rb
@@ -14,7 +14,7 @@ class DeliverablesController < InheritedResources::Base
def create
@deliverable = begin_of_association_chain.deliverables.build(params[:deliverable])
- if params[:deliverable] && params[:deliverable][:type] && ['FixedDeliverable','HourlyDeliverable'].include?(params[:deliverable][:type])
+ if params[:deliverable] && params[:deliverable][:type] && ['FixedDeliverable','HourlyDeliverable','RetainerDeliverable'].include?(params[:deliverable][:type])
@deliverable.type = params[:deliverable][:type]
end
create! { contract_url(@project, @contract) }
diff --git a/app/models/deliverable.rb b/app/models/deliverable.rb
index c9cf09d..2915edc 100644
--- a/app/models/deliverable.rb
+++ b/app/models/deliverable.rb
@@ -68,6 +68,10 @@ class Deliverable < ActiveRecord::Base
end_date
end
+ def retainer?
+ type == "RetainerDeliverable"
+ end
+
if Rails.env.test?
generator_for :title, :method => :next_title
diff --git a/app/views/contracts/show.html.erb b/app/views/contracts/show.html.erb
index 5ae5559..c0fbf20 100644
--- a/app/views/contracts/show.html.erb
+++ b/app/views/contracts/show.html.erb
@@ -119,7 +119,18 @@
<%= textilizable(deliverable, :notes) %>
+ <% if deliverable.retainer? %>
+
+ <% end %>
+
+ <%= show_field(deliverable, :frequency, :html_options => {:class => 'deliverable-frequency'}) if deliverable.retainer? %>
<%= show_field(deliverable, :start_date, :format => :format_date, :html_options => {:class => 'deliverable-start-date'}) %>
<%= show_field(deliverable, :end_date, :format => :format_date, :html_options => {:class => 'deliverable-end-date'}) %>
diff --git a/test/integration/deliverables_new_test.rb b/test/integration/deliverables_new_test.rb
index dbe2f3e..41063ce 100644
--- a/test/integration/deliverables_new_test.rb
+++ b/test/integration/deliverables_new_test.rb
@@ -111,6 +111,39 @@ class DeliverablesNewTest < ActionController::IntegrationTest
end
+ should "create a new Retainer deliverable" do
+ @manager = User.generate!
+ @role = Role.generate!
+ User.add_to_project(@manager, @project, @role)
+
+ visit_contract_page(@contract)
+ click_link 'Add New'
+ assert_response :success
+
+ fill_in "Title", :with => 'A New Deliverable'
+ select "Retainer", :from => "Type"
+ select "Monthly", :from => 'deliverable_frequency'
+ select @manager.name, :from => "Manager"
+ fill_in "Start", :with => '2010-01-01'
+ fill_in "End Date", :with => '2010-12-31'
+ fill_in "Notes", :with => 'Some notes on the deliverable'
+ fill_in "Total", :with => '1,000.00'
+
+ click_button "Save"
+
+ assert_response :success
+ assert_template 'contracts/show'
+
+ @deliverable = Deliverable.last
+ assert_equal "A New Deliverable", @deliverable.title
+ assert_equal @contract, @deliverable.contract
+ assert_equal "RetainerDeliverable", @deliverable.type
+ assert_equal '2010-01-01', @deliverable.start_date.to_s
+ assert_equal '2010-12-31', @deliverable.end_date.to_s
+ assert_equal @manager, @deliverable.manager
+ assert_equal "monthly", @deliverable.frequency
+ end
+
should "create new budget items for the deliverables" do
@manager = User.generate!
@role = Role.generate!