Instalado OSC Brasil 6.0 no Magento 1.9.4.2 e Valor Total no fechamento está errado, na verdade pode ser o tema usado que está carregando o grandTotal() mais de uma vez, se desligar o OSC o resultado fica correto, se tirar o tema e ativar o OSC o resultado fica correto, na verdade o pedido fica com valores certos é só a visualização que mostra errado, veja abaixo:

Você altera a forma de entrega e o ajax é acionado, mas ele não muda o frete, abaixo deveria ser valor ZERO, foi selecionado frete grátis mas na revisão ele NÃO mudou.

E o total continua muito errado. Olhando em “inspecionar elemento” percebemos ainda que temos um erro 500, veja abaixo:

Desligando o OSC 6.0 tudo se resolve, é um conflito com o tema instalado e como não consegui descobrir o problema e o OSC é muito útil eu fui seguir todo o código e achei uma diferença, na nova versão do Magento está um pouco diferente.
No fonte:
app/code/community/Inovarti/Onestepcheckout/Model/Updater.php
no método _initLayout (linha 87) vamos comentar //$update->addHandle(‘default’); (linha 90), veja abaixo:
protected function _initLayout($layout, $fullTargetActionName) {
/* -- START-- copypaste from Mage_Core_Controller_Varien_Action -- START -- */
$update = $layout->getUpdate();
//$update->addHandle('default'); //load default handle
$update->addHandle('STORE_' . Mage::app()->getStore()->getCode()); // load store handle
$package = Mage::getSingleton('core/design_package');
Veja o comentário: a rotina foi copiada do core do Magento, então como estamos numa versão bem mais nova eu fui olhar e notei a diferença.
Depois desta alteração o fechamento ficou perfeito e não temos mais erros na console do navegador e ainda deve ficar mais rápido a renderização, pois o bloco que vai ser montado é apenas do OSC, não é mais todo o código html do site, porque não foi carregado o ‘default’.
Parte 2)
Mas ao chamar o fechamento a primeira vez ele monta errado o total, a carga do bloco e a renderização ainda tem problema, a solução acima é para as ações nos checkbox do fechamento, para resolver o total errado uma idéia é quando ele montar a tela dar um click de forma automática, para isto temos que mudar um pouco o fonte:
app/design/frontend/[seu_pacote]/[seu_tema]/template/onestepcheckout/onestep/form/shipping_method.php
colocamos estas 3 linhas
<div class=“refresh“ style=“display: none;”>
<input name=“shipping_method” type=“radio” value=“shipping_method” id=“refresh“ class=“radio”/>
</div>
após a linha 18
E uma rotina em javascript, para que na carga da página, acionar o checkbox e remontar a tela de fechamento. A rotina em javascrit é esta:
<script type="text/javascript">
(function($) {
$(document).ready(function(){
var checado = "";
//vamos devolver o checked para o checado verdadeiro
if($(":radio").is(":checked")){
$.each($("input[type='radio']"), function(id , val){
if($(val).is(":checked")){
//checado = $(val).val();
checado = $(val).attr('id');
return false;
};
});
}
document.getElementById("refresh").click();
if (checado) {
//console.log('checked ='+checado);
document.getElementById(checado).click();
}
});
})(jQuery);
</script>
<?php if ($this->canShip()) : ?>
<?php $blockNumber = $this->getBlockNumber(); ?>
<?php $blockNumberClass = (!is_null($blockNumber)) ? "onestepcheckout-number-{$blockNumber}" : ""; ?>
<?php if(Mage::getStoreConfig('onestepcheckout/general/is_show_titles')): ?><div class="step-title"><span class="number onestepcheckout-number <?php echo $blockNumberClass; ?>"><?php echo $blockNumber; ?></span><h2><?php echo $this->__('SHIPPING METHOD'); ?></h2></div><?php endif; ?>
<div class="step a-item">
<div id="onestepcheckout-shipping-method" class="onestepcheckout-add-loader-into-this-block">
<?php $_shippingRateGroups = $this->getShippingRates(); ?>
<?php if (!$_shippingRateGroups) : ?>
<p><?php echo $this->__('Sorry, no quotes are available for this order at this time.') ?></p>
<?php else : ?>
<div class="refresh" style="display: none;">
<input name="shipping_method" type="radio" value="shipping_method" id="refresh" class="radio"/>
</div>
<dl class="sp-methods">
<?php
$_sole = count($_shippingRateGroups) == 1;
foreach ($_shippingRateGroups as $code => $_rates):
?>
<dt><?php echo $this->escapeHtml($this->getCarrierName($code)) ?></dt>
<dd>
<ul>
<?php
$_sole = $_sole && count($_rates) == 1;
foreach ($_rates as $_rate):
?>
<li>
<?php if ($_rate->getErrorMessage()): ?>
<ul class="messages"><li class="error-msg"><ul><li><?php echo $this->escapeHtml($_rate->getErrorMessage()) ?></li></ul></li></ul>
<?php else: ?>
<?php if ($_sole) : ?>
<input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>" checked="checked" class="radio"/>
<?php else: ?>
<input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>"<?php if ($_rate->getCode() === $this->getAddressShippingMethod()) echo ' checked="checked"' ?> class="radio"/>
<?php endif; ?>
<label for="s_method_<?php echo $_rate->getCode() ?>"><?php echo $this->escapeHtml($_rate->getMethodTitle()) ?>
<?php $_excl = $this->getShippingPrice($_rate->getPrice(), $this->helper('tax')->displayShippingPriceIncludingTax()); ?>
<?php $_incl = $this->getShippingPrice($_rate->getPrice(), true); ?>
<?php echo $_excl; ?>
<?php if ($this->helper('tax')->displayShippingBothPrices() && $_incl != $_excl): ?>
(<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
<?php endif; ?>
</label>
<?php endif ?>
</li>
<?php endforeach; ?>
</ul>
</dd>
<?php endforeach; ?>
</dl>
<div class="validation-advice" style="display: none;"></div>
<script type="text/javascript">
var OSCShipment = new OnestepcheckoutShipment({
containerSelector: "#onestepcheckout-shipping-method",
switchMethodInputsSelector: "input[type='radio'][name='shipping_method']",
saveShipmentUrl: <?php echo Zend_Json::encode($this->getSaveShipmentUrl()); ?>
});
</script>
<script type="text/javascript">
(function($) {
$(document).ready(function(){
var checado = "";
//vamos devolver o checked para o checado verdadeiro
if($(":radio").is(":checked")){
$.each($("input[type='radio']"), function(id , val){
if($(val).is(":checked")){
checado = $(val).attr('id');
return false;
};
});
}
document.getElementById("refresh").click();
if (checado) {
//console.log('checked ='+checado);
document.getElementById(checado).click();
}
});
})(jQuery);
</script>
<?php endif; ?>
<?php echo $this->getChildHtml('extra'); ?>
</div>
</div>
<?php endif; ?>
Desta forma, ao montar a tela inicialmente, o java script faz um reload e o total fica correto.
Espero ter ajudado!
Alfredo Letti