diff --git a/app/controllers/deliverables_controller.rb b/app/controllers/deliverables_controller.rb
index a6390cf..bab0483 100644
--- a/app/controllers/deliverables_controller.rb
+++ b/app/controllers/deliverables_controller.rb
@@ -16,6 +16,12 @@ class DeliverablesController < InheritedResources::Base
create! { contract_url(@project, @contract) }
end
+ def update
+ @deliverable = begin_of_association_chain.deliverables.find_by_id(params[:id])
+ @deliverable.attributes = params[:fixed_deliverable] # TODO: hardcoded
+ update! { contract_url(@project, @contract) }
+ end
+
def show
redirect_to contract_url(@project, @contract)
end
diff --git a/app/views/contracts/show.html.erb b/app/views/contracts/show.html.erb
index 3e51d58..0b71d3b 100644
--- a/app/views/contracts/show.html.erb
+++ b/app/views/contracts/show.html.erb
@@ -31,7 +31,7 @@
<%= l(:field_labor) %> |
<%= l(:field_overhead) %> |
<%= l(:field_fixed) %> |
- |
+ <%= l(:button_edit) %> |
<%= l(:button_delete) %> |
@@ -46,7 +46,7 @@
--- |
--- |
--- |
- |
+ <%= link_to(l(:button_edit), edit_contract_deliverable_path(@project, resource, deliverable), :class => 'icon icon-edit') %> |
<%= link_to(l(:button_delete), contract_deliverable_path(@project, resource, deliverable), :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %> |
<% end %>
diff --git a/app/views/deliverables/edit.html.erb b/app/views/deliverables/edit.html.erb
new file mode 100644
index 0000000..09c6900
--- /dev/null
+++ b/app/views/deliverables/edit.html.erb
@@ -0,0 +1,9 @@
+<%= content_tag(:h2, h(resource.title)) %>
+
+<% semantic_form_for [@project, @contract, resource], :url => contract_deliverable_path(@project, @contract, resource), :html => {:class => 'tabular'} do |form| %>
+<%= render :partial => 'form', :object => form, :locals => {:cancel_path => contract_path(@project, resource)} %>
+<% end %>
+
+<% content_for(:header_tags) do %>
+ <%= stylesheet_link_tag "redmine_contracts", :plugin => "redmine_contracts", :media => "screen" %>
+<% end %>
diff --git a/init.rb b/init.rb
index 4373f90..bb68aa5 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 => [:index, :new, :create, :show, :destroy]
+ :deliverables => [:index, :new, :create, :show, :edit, :update, :destroy]
}, :public => true)
end
diff --git a/test/integration/deliverables_edit_test.rb b/test/integration/deliverables_edit_test.rb
new file mode 100644
index 0000000..46c07da
--- /dev/null
+++ b/test/integration/deliverables_edit_test.rb
@@ -0,0 +1,35 @@
+require 'test_helper'
+
+class DeliverablesEditTest < 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, :title => 'The Title')
+ end
+
+ should "allow any user to edit the deliverable" do
+ visit_contract_page(@contract)
+ click_link_within "#fixed_deliverable_#{@deliverable.id}", 'Edit'
+ assert_response :success
+ assert_template 'deliverables/edit'
+
+ assert_select "form#edit_fixed_deliverable_#{@deliverable.id}" do
+ assert_select "input#fixed_deliverable_title[value=?]", /#{@deliverable.title}/
+ assert_select "select#fixed_deliverable_type" do
+ assert_select "option[selected=selected][value=FixedDeliverable]"
+ end
+ end
+
+ fill_in "Title", :with => 'An updated title'
+ click_button "Save"
+
+ assert_response :success
+ assert_template 'contracts/show'
+
+ assert_equal "An updated title", @deliverable.reload.title
+
+ end
+end