[#4420] When a Retainer's period is changed, it will now reload it's details.
This commit is contained in:
@@ -27,7 +27,11 @@ class DeliverablesController < InheritedResources::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
redirect_to contract_url(@project, @contract)
|
if show_partial?
|
||||||
|
render :partial => 'deliverables/details_row', :locals => {:contract => @contract, :deliverable => @contract.deliverables.find(params[:id])}
|
||||||
|
else
|
||||||
|
redirect_to contract_url(@project, @contract)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@@ -39,6 +43,11 @@ class DeliverablesController < InheritedResources::Base
|
|||||||
def begin_of_association_chain
|
def begin_of_association_chain
|
||||||
@contract
|
@contract
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Is only a partial requested?
|
||||||
|
def show_partial?
|
||||||
|
params[:format] == 'js' && params[:as] == 'deliverable_details_row'
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
|||||||
@@ -108,115 +108,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<tr id="deliverable_details_<%= h(deliverable.id) %>" class="ign">
|
<tr id="deliverable_details_<%= h(deliverable.id) %>" class="ign">
|
||||||
<td colspan="11">
|
<%= render :partial => 'deliverables/details_row', :locals => {:deliverable => deliverable, :contract => resource} %>
|
||||||
|
|
||||||
<div class="expanded">
|
|
||||||
<div class="info">
|
|
||||||
<div class="title">
|
|
||||||
<%= 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') %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<%= textilizable(deliverable, :notes) %>
|
|
||||||
|
|
||||||
<% if deliverable.retainer? %>
|
|
||||||
<form action="">
|
|
||||||
<fieldset>
|
|
||||||
<select name="retainer_period_change_<%= h(deliverable.id) %>" id="retainer_period_change_<%= h(deliverable.id) %>">
|
|
||||||
<%= retainer_period_options(deliverable) %>
|
|
||||||
</select>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<%= show_field(deliverable, :current_period, :html_options => {:class => 'deliverable-current-period'}) 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'}) %>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<%# TODO: Release 2, skinning port %>
|
|
||||||
<div class="finance">
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th> </th>
|
|
||||||
<th>Spent</th>
|
|
||||||
<th>Budget</th>
|
|
||||||
<th>Hours</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tfoot>
|
|
||||||
<tr class="fill">
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
</tfoot>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td class="l"><a href="#"><strong>Labor</strong></a></td>
|
|
||||||
<td><%= h(format_value_field_for_contracts(deliverable.labor_budget_spent)) %></td>
|
|
||||||
<td><%= h(format_value_field_for_contracts(deliverable.labor_budget_total)) %></td>
|
|
||||||
<td> TODO: Release 2 / TODO hrs </td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="l"><a href="#"><strong>Overhead</strong></a></td>
|
|
||||||
<td><%= h(format_value_field_for_contracts(deliverable.overhead_spent)) %></td>
|
|
||||||
<td><%= h(format_value_field_for_contracts(deliverable.overhead_budget_total)) %></td>
|
|
||||||
<td> TODO: Release 2 / TODO hrs </td>
|
|
||||||
</tr>
|
|
||||||
<%# TODO: Release 2, Fixed %>
|
|
||||||
<%# TODO: Release 2, Markup %>
|
|
||||||
<tr>
|
|
||||||
<td class="l">Profit</td>
|
|
||||||
<td><%= h(format_value_field_for_contracts(deliverable.profit_left)) %></td>
|
|
||||||
<td><%= h(format_value_field_for_contracts(deliverable.profit_budget)) %></td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
<tr class="total">
|
|
||||||
<td class="l"><strong>Total:</strong></td>
|
|
||||||
<td><strong><%= h(format_value_field_for_contracts(deliverable.total_spent)) %></strong></td>
|
|
||||||
<td><strong><%= h(format_value_field_for_contracts(deliverable.total)) %></strong></td>
|
|
||||||
<td><strong>TODO: Release 2</strong></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="issue_status">
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th colspan="2"><%= l(:label_issue_status_plural) %></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<%# TODO: Release 2 Issue status counters
|
|
||||||
<tr>
|
|
||||||
<td>Proposed</td>
|
|
||||||
<td class="number">1</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>On Hold</td>
|
|
||||||
<td class="number">1</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Complete</td>
|
|
||||||
<td class="number">14</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><strong>All</strong></td>
|
|
||||||
<td class="number">16</td>
|
|
||||||
</tr>
|
|
||||||
%>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div class="clear"></div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
<td colspan="11" class="deliverable_details_outer_wrapper_<%= h(deliverable.id) %>">
|
||||||
|
|
||||||
|
<div class="expanded">
|
||||||
|
|
||||||
|
<div class="info">
|
||||||
|
<div class="title">
|
||||||
|
<%= link_to(l(:button_edit), edit_contract_deliverable_path(@project, contract, deliverable), :class => 'icon icon-edit') %>
|
||||||
|
<%= link_to(l(:button_delete), contract_deliverable_path(@project, contract, deliverable), :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= textilizable(deliverable, :notes) %>
|
||||||
|
|
||||||
|
<% if deliverable.retainer? %>
|
||||||
|
<form method="get" action="<%= contract_deliverable_path(@project, contract, deliverable, :format => 'js', :as => 'deliverable_details_row') %>">
|
||||||
|
<fieldset>
|
||||||
|
<select name="retainer_period_change_<%= h(deliverable.id) %>" id="retainer_period_change_<%= h(deliverable.id) %>" class="retainer_period_change">
|
||||||
|
<%= retainer_period_options(deliverable) %>
|
||||||
|
</select>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<%= show_field(deliverable, :current_period, :html_options => {:class => 'deliverable-current-period'}) 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'}) %>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%# TODO: Release 2, skinning port %>
|
||||||
|
<div class="finance">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th> </th>
|
||||||
|
<th>Spent</th>
|
||||||
|
<th>Budget</th>
|
||||||
|
<th>Hours</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tfoot>
|
||||||
|
<tr class="fill">
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="l"><a href="#"><strong>Labor</strong></a></td>
|
||||||
|
<td><%= h(format_value_field_for_contracts(deliverable.labor_budget_spent)) %></td>
|
||||||
|
<td><%= h(format_value_field_for_contracts(deliverable.labor_budget_total)) %></td>
|
||||||
|
<td> TODO: Release 2 / TODO hrs </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="l"><a href="#"><strong>Overhead</strong></a></td>
|
||||||
|
<td><%= h(format_value_field_for_contracts(deliverable.overhead_spent)) %></td>
|
||||||
|
<td><%= h(format_value_field_for_contracts(deliverable.overhead_budget_total)) %></td>
|
||||||
|
<td> TODO: Release 2 / TODO hrs </td>
|
||||||
|
</tr>
|
||||||
|
<%# TODO: Release 2, Fixed %>
|
||||||
|
<%# TODO: Release 2, Markup %>
|
||||||
|
<tr>
|
||||||
|
<td class="l">Profit</td>
|
||||||
|
<td><%= h(format_value_field_for_contracts(deliverable.profit_left)) %></td>
|
||||||
|
<td><%= h(format_value_field_for_contracts(deliverable.profit_budget)) %></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="total">
|
||||||
|
<td class="l"><strong>Total:</strong></td>
|
||||||
|
<td><strong><%= h(format_value_field_for_contracts(deliverable.total_spent)) %></strong></td>
|
||||||
|
<td><strong><%= h(format_value_field_for_contracts(deliverable.total)) %></strong></td>
|
||||||
|
<td><strong>TODO: Release 2</strong></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="issue_status">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="2"><%= l(:label_issue_status_plural) %></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<%# TODO: Release 2 Issue status counters
|
||||||
|
<tr>
|
||||||
|
<td>Proposed</td>
|
||||||
|
<td class="number">1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>On Hold</td>
|
||||||
|
<td class="number">1</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Complete</td>
|
||||||
|
<td class="number">14</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><strong>All</strong></td>
|
||||||
|
<td class="number">16</td>
|
||||||
|
</tr>
|
||||||
|
%>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="clear"></div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
jQuery(function($) {
|
jQuery(function($) {
|
||||||
|
$("#ajax-indicator").ajaxStart(function(){ $(this).show(); });
|
||||||
|
$("#ajax-indicator").ajaxStop(function(){ $(this).hide(); });
|
||||||
|
|
||||||
var right_align = $('#contract-terms .finance tr td:nth-child ~ td, .c_overview table.right tr td:nth-child ~ td, #deliverables table tr.click td:nth-child(5) ~ td, .deliverable_finance_table tr.aright td:nth-child ~ td');
|
var right_align = $('#contract-terms .finance tr td:nth-child ~ td, .c_overview table.right tr td:nth-child ~ td, #deliverables table tr.click td:nth-child(5) ~ td, .deliverable_finance_table tr.aright td:nth-child ~ td');
|
||||||
|
|
||||||
@@ -83,6 +85,11 @@ jQuery(function($) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('select.retainer_period_change').live('change', function() {
|
||||||
|
var deliverable_url = $(this).closest('form').attr('action');
|
||||||
|
$(this).closest('tr').load(deliverable_url, this.form.serialize());
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/* Jquery Table Expander Plugin */
|
/* Jquery Table Expander Plugin */
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class DeliverableDetailsShowTest < ActionController::IntegrationTest
|
||||||
|
include Redmine::I18n
|
||||||
|
|
||||||
|
def setup
|
||||||
|
@project = Project.generate!(:identifier => 'main').reload
|
||||||
|
@contract = Contract.generate!(:project => @project)
|
||||||
|
@manager = User.generate!
|
||||||
|
@deliverable1 = FixedDeliverable.generate!(:contract => @contract, :manager => @manager)
|
||||||
|
end
|
||||||
|
|
||||||
|
context "for a JS request" do
|
||||||
|
should "render the details for the deliverable" do
|
||||||
|
visit "/projects/#{@project.id}/contracts/#{@contract.id}/deliverables/#{@deliverable1.id}", :get, {:format => 'js', :as => 'deliverable_details_row'}
|
||||||
|
|
||||||
|
assert_response :success
|
||||||
|
assert_select ".deliverable_details_outer_wrapper_#{@deliverable1.id}"
|
||||||
|
assert_select "table#deliverables", :count => 0 # Not the full table
|
||||||
|
assert_select "tr#deliverable_details_#{@deliverable1.id}", :count => 0 # Not the wrapper tr
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user