Encontrará el código que se ocupa de esto en la clase Mage_Sales_Model_Order_Creditmemo_Total_Tax
.
La línea de código $part = $creditmemo->getShippingAmount()/$orderShippingAmount;
(ubicada en la línea 116) muestra claramente que esto está codificado específicamente para calcular solo los impuestos según el campo ShippingAmount del formulario creditMemo.
El cambio obvio es ajustar ese código para usar también el campo "Reembolso de ajuste".
En realidad, no puede reescribir esta clase, debido a cómo Mgento la instancia como parte del subsistema de recopiladores de totales, en los cálculos de crédito conmemorativo.
Sin embargo, puede ajustar el recopilador para usar su propia versión de la clase, de modo que no se pierda todo.
Entonces, en su propio módulo colocará el siguiente código en config.xml. Va dentro de los <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>
Ahora creará el archivo de clase NAMESPACE/MODULE/Model/Order/Creditmemo/Total/Tax
, que extiende el archivo central.
class NAMESPACE_MODULE_Model_Order_Creditmemo_Total_Tax extends Mage_Sales_Model_Order_Creditmemo_Total_Tax
Necesitará copiar todo el método 'collect' de la clase principal en su nuevo archivo.
Agregue el siguiente código en la línea 114 (justo después del 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 **/
y ajuste la línea 116 de $part = $creditmemo->getShippingAmount()/$orderShippingAmount;
a$part = $adjustment/$orderShippingAmount;
Esto usará efectivamente el Monto de envío o el Monto de ajuste en el cálculo.
El problema sustancial es que magento no sabe qué factor impositivo usar. Cuando no hay productos reembolsados, no hay porcentaje de impuestos.
Solucioné el problema simplemente usando el porcentaje de impuestos más alto que puedo encontrar en los productos, siéntase libre de adaptarse a su caso de uso.
El impuesto se calcula en CalculateTaxForRefundAdjustment al final de la clase.
config.xml
app / code / local / Project / RefundPartialCreditmemoWithTax / Model / Order / Creditmemo / Total / Tax.php
fuente
Con una falta de respuestas y una recompensa que expira mañana, mi trabajo es el siguiente:
Ingrese el
Adjustment Refund
con impuestos incluidos.Tenga en cuenta el desglose en los comentarios para su referencia y los clientes.
fuente