diff --git a/app/controllers/deliverables_controller.rb b/app/controllers/deliverables_controller.rb index c8001e0..373c36d 100644 --- a/app/controllers/deliverables_controller.rb +++ b/app/controllers/deliverables_controller.rb @@ -12,6 +12,10 @@ class DeliverablesController < InheritedResources::Base create! { contract_url(@project, @contract) } end + def destroy + destroy! { contract_url(@project, @contract) } + end + protected def begin_of_association_chain diff --git a/app/views/contracts/show.html.erb b/app/views/contracts/show.html.erb index 96c9f4c..3e51d58 100644 --- a/app/views/contracts/show.html.erb +++ b/app/views/contracts/show.html.erb @@ -31,6 +31,8 @@ <%= l(:field_labor) %> <%= l(:field_overhead) %> <%= l(:field_fixed) %> +   + <%= l(:button_delete) %> <% resource.deliverables.each do |deliverable| %> @@ -44,6 +46,9 @@ --- --- --- +   + <%= link_to(l(:button_delete), contract_deliverable_path(@project, resource, deliverable), :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %> + <% end %> <% end %> diff --git a/init.rb b/init.rb index 0a30b1a..5b630df 100644 --- a/init.rb +++ b/init.rb @@ -16,7 +16,7 @@ Redmine::Plugin.register :redmine_contracts do project_module :contracts do permission(:manage_budget, { :contracts => [:index, :new, :create, :show, :edit, :update, :destroy], - :deliverables => [:new, :create] + :deliverables => [:new, :create, :destroy] }, :public => true) end diff --git a/test/integration/deliverables_delete_test.rb b/test/integration/deliverables_delete_test.rb new file mode 100644 index 0000000..8b76d68 --- /dev/null +++ b/test/integration/deliverables_delete_test.rb @@ -0,0 +1,22 @@ +require 'test_helper' + +class DeliverablesDeleteTest < ActionController::IntegrationTest + include Redmine::I18n + + def setup + @project = Project.generate!(:identifier => 'main') + @contract = Contract.generate!(:project => @project, :name => 'A Contract', :payment_terms => 'net_15') + @manager = User.generate! + @deliverable = FixedDeliverable.generate!(:contract => @contract, :manager => @manager) + end + + should "allow anyone to delete the deliverable" do + visit_contract_page(@contract) + + click_link_within "#fixed_deliverable_#{@deliverable.id}", 'Delete' + assert_response :success + assert_template 'contracts/show' + + assert_nil Deliverable.find_by_id(@deliverable.id), "Deliverable not deleted" + end +end