Jump to content

[Résolu] Remises en pourcentage qui s'appliquent sur l'Ecotaxe, aïe !


Recommended Posts

Bonsoir,

 

Dans la série je me réponds à moi-même et j'en fait profiter le autres.

Actuellement, sur deux boutiques en 1.4.6.2 (qu'il faudrait songer à mettre à jour), j'avais un problème avec les remises qui s'appliquaient sur l'Ecotaxe alors que c'est strictement pas bon du tout du tout ! J'ai fini par retrousser mes manches et ajuster mon clavier et j'ai fouiller le code.

 

Voilà ce que j'ai trouvé.

 

La classe Discount.php, lors de l'appel de la méthode getValue, ligne 313, calcule le montant total des remises en pourcentage sur chaque ligne produit du panier. Ok.

Sauf que, lors de l'appel du prix du produit avec taxes (TVA surtout), le montant renvoyé par cet appel contient l'ecotaxe, ce en proportion du nombre d'articles (ou quantité) de la ligne concernée dans le panier. ... donc, faux !

 

Attention, ce qui suit vaut pour un site qui applique la TVA sur l'Ecotaxe

 

Voici la ligne 313 en question

$amount += ($useTax? $product['total_wt'] : $product['total']) * $percentage;

 

Voici ce que j'ai mis à la place dans une classe Discount.php placée dans le dossier override/classes

 

$taxDiscount = Cart::getTaxesAverageUsed((int)($cart->id));
$tax_rate = 1;
if ($useTax AND isset($taxDiscount) AND $taxDiscount != 1)
$tax_rate = 1 + $taxDiscount / 100;
$amount += ($useTax? $product['total_wt'] - $product['ecotax']*$product['cart_quantity']*$tax_rate : $product['total']) * $percentage;

 

Je retire donc du total TTC de ma ligne de produits du panier, le total TTC de l'ecotaxe.

Je prend la valeur de l'ecotaxe qui est là en HT, bien que renseignée en TTC en backoffice, c'est en HT dans la base de données car j'ai la TVA qui s'applique sur l'ecotaxe.

Je multiplie cette valeur par la quantité de la ligne concernée dans mon panier puis j'applique la TVA ... ici calculée au préalable avec Cart::getTaxesAverageUsed((int)($cart->id));

 

Bref, je ne sais pas si c'est corrigé dans les versions supérieures à la 1.4.6.2 car je n'ai pas eu le temps d'aller voir et on n'est pas prêt de se mettre à jour encore sur les deux sites concernés mais ça à le mérite de fonctionner !

 

Voir plus bas le correctif

Edited by patfrat (see edit history)
Link to comment
Share on other sites

Petite correction due à une mauvaise indentation, j'ai dû ajouté des brackets sur mes boucles {}

if ($this->cumulable_reduction OR (!$product['reduction_applies'] AND !$product['on_sale']))
{
 $taxDiscount = Cart::getTaxesAverageUsed((int)($cart->id));
 $tax_rate = 1;
 if ($useTax AND isset($taxDiscount) AND $taxDiscount != 1) {
$tax_rate = 1 + $taxDiscount / 100;
 }
 $amount += ($useTax? $product['total_wt'] - $product['ecotax']*$product['cart_quantity']*$tax_rate : $product['total']) * $percentage;
//$amount += ($useTax? $product['total_wt'] : $product['total']) * $percentage;
}

Edited by patfrat (see edit history)
  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...