IllicoPresta Posted July 2, 2013 Share Posted July 2, 2013 (edited) Bonjour à tous, Je post ici pour tous ceux qui auraient un soucis avec l'arrondi de TVA sur leur facture. Nous sommes actuellement sur des tests sur Prestashop 1.5.2 à 1.5.4.1 J'ai un soucis lorsque j'ai une facture avec une réduction, le calcul du prix de la TVA des produits est supérieur de 1c au calcul du prix de la TVA total de la commande. Alors 1c ce n'est pas grave me direz-vous, sauf que lorsque je sors le fichier de compta (un module d'export vers Ciel qu'on a créé), la ligne des D n'est pas égales à la ligne des C... et là c'est le drame. Que se passe-t-il? J'ai un produit qui coûte à l'origine 124.58 € HT, TVA à 19.6% On a donc un prix TTC à 148.997€ soit 148.50€. J'applique une réduction de 5% (sur le HT) soit un nouveau prix HT à 118.351€ (enregistré comme tel dans la base, jusque là on est OK), et donc un prix unitaire TTC à 141.5477 soit 141.55€TTC. Je commande 3 quantités de ce produit, donc 118.351 * 3 = 355.053 (arrondi justement à 355.05€ HT sur la facture). Le TTC devrait donc etre 355.053 * 1.196 = 424.6433. Or il est affiché à 424.65 sur ma facture. Alors maintenant que se passe-t-il en base? Ma TVA nouvellement calculé sur le prix réduit est arrondi à 2 chiffres, et stockée comme tel. Résultat j'ai une TVA stockée à 23.200000 l'unité (au lieu de 23.196796). Quand on multiplie par 3 .... on tombe sur 69.600000 d'un côté (faux) ou 69.590388 (juste). La solution est de modifier l'arrondi du calcul de la tva stockée dans la table order_detail_tax. Modifiez donc la fonction saveTaxCalculator du fichier OrderDetail.php (dossier classes > order) comme suis (le plus propre étant de le faire dans l'override): public function saveTaxCalculator(Order $order, $replace = false) { // Nothing to save if ($this->tax_calculator == null) return true; if (!($this->tax_calculator instanceOf TaxCalculator)) return false; if (count($this->tax_calculator->taxes) == 0) return true; if ($order->total_products <= 0) return true; $ratio = $this->unit_price_tax_excl / $order->total_products; $order_reduction_amount = $order->total_discounts_tax_excl * $ratio; $discounted_price_tax_excl = $this->unit_price_tax_excl - $order_reduction_amount; $values = ''; foreach ($this->tax_calculator->getTaxesAmount($discounted_price_tax_excl) as $id_tax => $amount) { $unit_amount = (float)Tools::ps_round($amount, 6); $total_amount = $unit_amount * $this->product_quantity; $values .= '('.(int)$this->id.','.(float)$id_tax.','.$unit_amount.','.(float)$total_amount.'),'; } if ($replace) Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'order_detail_tax` WHERE id_order_detail='.(int)$this->id); $values = rtrim($values, ','); $sql = 'INSERT INTO `'._DB_PREFIX_.'order_detail_tax` (id_order_detail, id_tax, unit_amount, total_amount) VALUES '.$values; return Db::getInstance()->execute($sql); } Il a suffit de remplacer $unit_amount = (float)Tools::ps_round($amount, 2); par $unit_amount = (float)Tools::ps_round($amount, 6); Ma question à la Prestateam du coup: pourquoi faire un stockage à 6 chiffres en base et limiter l'arrondi à 2 (avec toutes les erreurs que cela engendre du coup)? C'est juste pour savoir si cela peut provoquer des effets de bord. Il reste encore le soucis d'affichage sur la facture.. mais j'ai envie de dire.. ce n'est que de l'affichage. Edited July 2, 2013 by IllicoPresta (see edit history) Link to comment Share on other sites More sharing options...
FredCD Posted September 6, 2013 Share Posted September 6, 2013 (edited) Bonjour, Dans mon cas aucune de ces 2 solutions n'a fonctionné sur une 1.5.4. Et ça a même empiré le problème D'un différence de 1 centime pour une commande à 200€ environ je passe à 15 centimes quand je force 6 décimales au lieu de 2 avec les 2 méthodes. Est ce que j'aurais fait un truc de travers ? Edit : mince mauvais sujet, je parlais de la 2nde méthode consistant à modifier la classe product.php Edited September 6, 2013 by FredCD (see edit history) Link to comment Share on other sites More sharing options...
gueshfuli Posted November 9, 2013 Share Posted November 9, 2013 (edited) Hello Je suis en 1.5.2.0 et le problème reste identique quand j'applique la solution d'illicopresta, toutefois il est vrai que j'ai une règle de remise sur la commande qui rentre en jeu en plus... Exemple Total produits TTC :(1) 49,56 € Total bons de réduction TTC (2) -4,96 € Total frais de port TTC : (3) 9,90 € Total HT : (4) 45,59 € Total taxes : (5) 8,91 € Total TTC: 54,50 € Le total HT est incorrecte il devrait être: ((49.56-4.96)+9.9)/1.196 soit Total HT: 45.568 € <=> 54.50/1.196 = 45.568 € Vraiment pas cool comme bug. Merci pour votre aide Edited November 9, 2013 by gueshfuli (see edit history) Link to comment Share on other sites More sharing options...
IllicoPresta Posted November 15, 2013 Author Share Posted November 15, 2013 Bonjour gueshfuli, Notre solution ne fonctionne que pour les commandes qui sont créées après l'application du patch. En effet les montant de TVA sont déjà stockées en base avec une approximation pour les commandes qui existante. Donc du coup même en appliquant la modif, vous ne verrez pas de différence sur une commande existante. Cordialement, Link to comment Share on other sites More sharing options...
gueshfuli Posted November 15, 2013 Share Posted November 15, 2013 ok merci pour l'info mais effectivement le problème pour moi ne se pose pas sur les commandes existantes mais dès le calcul dans le PANIER. Link to comment Share on other sites More sharing options...
Ledfanatic Posted December 15, 2013 Share Posted December 15, 2013 (edited) Quelqu'un chez Prestashop peut-il prendre en compte ce bug ? J'ai le même problème et malgré toutes mes recherches de solution, il ne semble pas que la Team Prestashop daigne prendre en compte ce grave problème de TVA qui met en porte à faux tous les magasins en ligne face à l'administraion fiscale !! Ci joint une copie d'écran éloquente : Edited December 15, 2013 by Ledfanatic (see edit history) Link to comment Share on other sites More sharing options...
glaukabcn Posted February 17, 2014 Share Posted February 17, 2014 Toute a fait d'acord! Team Prestashop une solution!!!! Merci! Link to comment Share on other sites More sharing options...
akhawat Posted February 25, 2014 Share Posted February 25, 2014 bonjour je suis sur 1.5.6.1 et je rencontre le même problème d'arrondi avec les remise, j'ais failli balancer mon logiciel comptable croyant que c'était lui qui faisait n'importe quoi. toujours pas de solution ? ( a part ne pas faire de remise) cdlt Link to comment Share on other sites More sharing options...
eL_CracKos Posted February 27, 2014 Share Posted February 27, 2014 Pareil pour moi, après avoir appliquer une réduction en % à un produit, j'ai mon prix TTC qui est trop élevé quand je suis sur ma fiche produit, MAIS le prix TTC est correct dans la productlist et dans le panier je ne comprend pas, GgrRrrRr ma solution pour le moment est d'appliquer la réduction en € et non en % J'ai besoin d'aide pour pouvoir appliquer m'a réduction en % car en € il faut calculé le montant de réduction pour chaque produit, c'est chiant! Presta version 1.5.4.1 merciiiiii Link to comment Share on other sites More sharing options...
nonofree81 Posted March 14, 2014 Share Posted March 14, 2014 Post créé en juillet 2013, plus de 5 MAJ des versions de prestashop entre temps et toujours pas de corrections ! C'est à croire que ce bug est dérisoire pour les gestionnaire de projet Presta... Je le traine depuis la 1.5.4 et aujourd'hui en 1.5.6.2... La réalité c'est que ce bug est très fâcheux... Erreur de comptabilité, commandes en statut "erreur de paiement", clients qui appellent pour savoir pourquoi leur commande est bloquée, rembourser la différence ou s’asseoir sur des centimes dues... Voilà la réalité de ce bug Ca serait bien qu'il y ait un correctif sur les versions actuelles Link to comment Share on other sites More sharing options...
astragor Posted March 17, 2014 Share Posted March 17, 2014 Pour ma part j'ai pallié au problème en ne faisant pas de réduction au % mais en faisant des reduction en €.Si je veux faire une réduction de 5% sur un article qui vait 10 € j'applique plutot une réduction de 0,50 € au moins j'ai pas ce problème d'arrondi. (A noter que ce problème à TOUJOURS existé sur prestashop et ne remonte pas spécialement à la 1.5). Link to comment Share on other sites More sharing options...
passicool Posted March 23, 2014 Share Posted March 23, 2014 Bonjour, Et la 1.6 à toujours ce problème de TVA...Curieux que Prestashop ne prenne pas ce problème plus au sérieux. Link to comment Share on other sites More sharing options...
tuk66 Posted March 24, 2014 Share Posted March 24, 2014 (edited) Voir quelques exemples à http://www.prestashop.com/forums/topic/166816-pdf-invoice-in-different-prestashop-versions-wrong-amounts-updated/ et la solution à http://www.presta-addons.com. See some examples at http://www.prestashop.com/forums/topic/166816-pdf-invoice-in-different-prestashop-versions-wrong-amounts-updated/ and the solution at http://www.presta-addons.com. Edited March 24, 2014 by tuk66 (see edit history) Link to comment Share on other sites More sharing options...
MathieuB Posted October 9, 2015 Share Posted October 9, 2015 https://www.prestashop.com/forums/topic/234351-resolu-erreur-darrondi-dans-le-calcul-de-la-tva/ Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now