Jump to content

Problème d'arrondi v1.3.1.1


ramdbf

Recommended Posts

Bonjour,

J'ai un problème d'arrondi sur 1.3.1.1 : le montant calculé lors de la confirmation de commande est différent de celui qui figure sur la facture, il y a un écart de quelques centimes.

Il y a manifestement bcp de posts sur ce sujet de pb d'arrondis mais je n'arrive pas à trouver la solution.

Quelqu'un pourrait-il me dire s'il y a une solution et comment corriger ce qui semble être un bug ? Merci d'avance

Link to comment
Share on other sites

  • 2 weeks later...

C'est une question d'arrondis trop utilisés !
Les déclinaison doivent être entrées en TTC mais la boutique est en HT donc pour chaque ligne on enlève la TVA (arrondi), on fait la somme HT et on calcule le total TTC (encore un arrondi). En faisant cela, plus on a de produits, plus il y a de chances d'avoir un écart !!!
Ex : un total TTC 377,10 au lieu de 377,09

J'ai résolu ce problème en modifiant le fichier classes/Cart.php : dans la fonction "getOrderTotal" aux environs de la ligne 656 il y a une boucle qui ajoute le prix de chaque produit au total. Dans cette boucle, j'ai supprimé tous les "Tools::ps_round" (ne pas oublier le paramètre ", 2" de l'arrondi à la fin des lignes concernées)

Maintenant, l'affichage est conforme à la facture !

Link to comment
Share on other sites

merci globole je vais essayer mais suis pas très familiarisé avec la prog.
Mais puisque le problème se règlerait ainsi, pourquoi cette modification n'est-elle pas intégrée dans la version de base de PS ? depuis le temps ?

Link to comment
Share on other sites

Ca fonctionne dans "mon" cas de figure, à vous de tester si ça fonctionne dans le votre !
Voici mes modifs à partir de la ligne 650 (ATTENTION : POUR UNE BOUTIQUE HT !)

        foreach ($products AS $product)
       {
           if ($this->_taxCalculationMethod == PS_TAX_EXC)
           {
               // Here taxes are computed only once the quantity has been applied to the product price
               $price = Product::getPriceStatic(intval($product['id_product']), false, intval($product['id_product_attribute']), 2, NULL, false, true, $product['cart_quantity'], false, (intval($this->id_customer) ? intval($this->id_customer) : NULL), intval($this->id), (intval($this->id_address_delivery) ? intval($this->id_address_delivery) : NULL));
               $total_price = $price * intval($product['cart_quantity']);

               //La ligne après le "if" est modifiée. La suivante, commentée avec "//", est celle d'origine.
               if ($withTaxes)
                   $total_price = $total_price * (1 + floatval(Tax::getApplicableTax(intval($product['id_tax']), floatval($product['rate']))) / 100);
                   //$total_price = Tools::ps_round($total_price * (1 + floatval(Tax::getApplicableTax(intval($product['id_tax']), floatval($product['rate']))) / 100), 2);
           }


Pour une boutique en TTC ce serait juste après (à tester)

            else
           {
               $price = Product::getPriceStatic(intval($product['id_product']), $withTaxes, intval($product['id_product_attribute']), 6, NULL, false, true, $product['cart_quantity'], false, (intval($this->id_customer) ? intval($this->id_customer) : NULL), intval($this->id), (intval($this->id_address_delivery) ? intval($this->id_address_delivery) : NULL));
               if (!$withTaxes)
                   $total_price = $price * intval($product['cart_quantity']); // modifié
               else
                   $total_price = $price * intval($product['cart_quantity']); // modifié
           }

Link to comment
Share on other sites

merci globole je vais essayer mais suis pas très familiarisé avec la prog.
Mais puisque le problème se règlerait ainsi, pourquoi cette modification n'est-elle pas intégrée dans la version de base de PS ? depuis le temps ?

Ce n'est pas à moi d'y répondre !
Peut-être que ma modif ne fonctionne pas dans tous les cas de figure ...

Mais l'avantage premier de l'Open Source ce n'est pas le prix, c'est de pouvoir effectuer soi-même les modifications et les soumettre pour participer à l'effort global. Ce que je fais.
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...