Vous trouverez le code qui traite de cela dans la classe Mage_Sales_Model_Order_Creditmemo_Total_Tax
.
La ligne de code $part = $creditmemo->getShippingAmount()/$orderShippingAmount;
(située à la ligne 116) indique clairement que cela est spécifiquement codé pour calculer uniquement les taxes conformément au champ shippingAmount du formulaire creditMemo.
Le changement évident consiste à ajuster ce code pour utiliser également le champ "Remboursement de l'ajustement".
Vous ne pouvez pas réellement réécrire cette classe, en raison de la façon dont magento l'instancie dans le cadre du sous-système de collecte des totaux, dans les calculs de creditmemo.
Vous pouvez cependant ajuster le collecteur pour utiliser votre propre version de la classe, afin que tout ne soit pas perdu.
Ainsi, dans votre propre module, vous placerez le code suivant dans le config.xml. Il va à l'intérieur des <global>
éléments
<global>
<sales>
<order_creditmemo>
<totals>
<tax>
<class>NAMESPACE_MODULE/order_creditmemo_total_tax</class>
<after>subtotal</after>
</tax>
</totals>
</order_creditmemo>
</sales>
<global>
Vous allez maintenant créer le fichier de classe NAMESPACE/MODULE/Model/Order/Creditmemo/Total/Tax
, qui étend le fichier principal.
class NAMESPACE_MODULE_Model_Order_Creditmemo_Total_Tax extends Mage_Sales_Model_Order_Creditmemo_Total_Tax
Vous devrez copier l'intégralité de la méthode `collect 'de la classe principale vers votre nouveau fichier.
Ajoutez le code suivant à la ligne 114 (juste après le code $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 **/
et ajustez la ligne 116 de $part = $creditmemo->getShippingAmount()/$orderShippingAmount;
à$part = $adjustment/$orderShippingAmount;
Cela utilisera alors efficacement le montant d'expédition ou le montant d'ajustement dans le calcul.