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.
Le problème substantiel est que magento ne sait pas quel facteur fiscal utiliser. Lorsqu'il n'y a pas de produits remboursés, il n'y a pas de pourcentage de taxe.
J'ai résolu le problème en utilisant simplement le pourcentage de taxe le plus élevé que je puisse trouver dans les produits, n'hésitez pas à vous adapter à votre cas d'utilisation.
La taxe est calculée dans CalculateTaxForRefundAdjustment à la fin de la classe.
config.xml
app / code / local / Projet / RefundPartialCreditmemoWithTax / Model / Order / Creditmemo / Total / Tax.php
la source
Avec un manque de réponses et de primes expirant demain, mon travail est le suivant:
Entrez le
Adjustment Refund
avec taxes incluses.Notez la ventilation dans les commentaires pour votre référence et les clients.
la source