Вы найдете код, который занимается этим в классе Mage_Sales_Model_Order_Creditmemo_Total_Tax
.
Строка кода $part = $creditmemo->getShippingAmount()/$orderShippingAmount;
(расположенная в строке 116) ясно показывает, что она специально закодирована, чтобы рассчитывать только налоги в соответствии с полем shippingAmount из формы creditMemo.
Очевидное изменение состоит в том, чтобы настроить этот код так, чтобы он также использовал поле «Корректировка возмещения».
Вы не можете переписать этот класс из-за того, как magento создает его как часть подсистемы сбора итогов в вычислениях creditmemo.
Однако вы можете настроить коллектор на использование собственной версии класса, чтобы не все потеряно.
Итак, в вашем собственном модуле вы поместите следующий код в config.xml. Это идет внутри <global>
элементов
<global>
<sales>
<order_creditmemo>
<totals>
<tax>
<class>NAMESPACE_MODULE/order_creditmemo_total_tax</class>
<after>subtotal</after>
</tax>
</totals>
</order_creditmemo>
</sales>
<global>
Теперь вы создадите файл класса NAMESPACE/MODULE/Model/Order/Creditmemo/Total/Tax
, который расширяет файл ядра.
class NAMESPACE_MODULE_Model_Order_Creditmemo_Total_Tax extends Mage_Sales_Model_Order_Creditmemo_Total_Tax
Вам нужно будет скопировать весь метод `collect 'из базового класса в ваш новый файл.
Добавьте следующий код в строку 114 (сразу после кода $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 **/
и отрегулируйте линию 116 от $part = $creditmemo->getShippingAmount()/$orderShippingAmount;
до$part = $adjustment/$orderShippingAmount;
Тогда это будет эффективно использовать либо Сумму отгрузки, либо Сумму корректировки в расчете.