Você encontrará o código que lida com isso na classe Mage_Sales_Model_Order_Creditmemo_Total_Tax
.
A linha de código $part = $creditmemo->getShippingAmount()/$orderShippingAmount;
(localizada na linha 116) mostra claramente que isso é codificado especificamente para calcular apenas os impostos de acordo com o campo shippingAmount no formulário creditMemo.
A alteração óbvia é ajustar esse código para também usar o campo "Reembolso de ajuste".
Você não pode realmente reescrever essa classe, devido à forma como o magento a instancia como parte do subsistema de coletores de totais, nos cálculos do creditmemo.
No entanto, você pode ajustar o coletor para usar sua própria versão da classe, para que nem tudo seja perdido.
Portanto, em seu próprio módulo, você colocará o seguinte código no config.xml. Vai dentro dos <global>
elementos
<global>
<sales>
<order_creditmemo>
<totals>
<tax>
<class>NAMESPACE_MODULE/order_creditmemo_total_tax</class>
<after>subtotal</after>
</tax>
</totals>
</order_creditmemo>
</sales>
<global>
Agora você criará o arquivo de classe NAMESPACE/MODULE/Model/Order/Creditmemo/Total/Tax
, que estende o arquivo principal.
class NAMESPACE_MODULE_Model_Order_Creditmemo_Total_Tax extends Mage_Sales_Model_Order_Creditmemo_Total_Tax
Você precisará copiar todo o método `collect 'da classe principal para o seu novo arquivo.
Adicione o seguinte código na linha 114 (logo após o código $shippingDelta = $baseOrderShippingAmount - $baseOrderShippingRefundedAmount
)
/** adjust to also calculate tax on the adjustment value **/
$adjustment = ($creditmemo->getAdjustment() > 0)?$creditmemo->getAdjustment():$creditmemo->getShippingAmount();
if($creditmemo->getAdjustment() > 0 && $creditmemo->getShippingAmount() > 0) {
$adjustment = $creditmemo->getAdjustment() + $creditmemo->getShippingAmount();
}
/** end adjustment **/
e ajuste a linha 116 de $part = $creditmemo->getShippingAmount()/$orderShippingAmount;
para$part = $adjustment/$orderShippingAmount;
Isso usará efetivamente o valor da remessa ou o valor do ajuste no cálculo.
O problema substancial é que o magento não sabe qual fator tributário usar. Quando não há produtos reembolsados, não há percentual de imposto.
Corrigi o problema usando apenas o maior percentual de imposto que posso encontrar nos produtos, sinta-se à vontade para ajustar-se ao seu caso de uso.
O imposto é calculado em generateTaxForRefundAdjustment no final da classe.
config.xml
app / code / local / Project / RefundPartialCreditmemoWithTax / Model / Order / Creditmemo / Total / Tax.php
fonte
Com a falta de respostas e a recompensa expirando amanhã, minha solução é a seguinte:
Insira os
Adjustment Refund
impostos incluídos.Observe a repartição nos comentários para sua referência e para os clientes.
fonte