b2comm Posted March 30, 2011 Share Posted March 30, 2011 Bonjourpour faire suite aux nombreux posts édites là dessus, j'en ouvre un nouveau (pour des raisons de clarté, les autres durant depuis longtemps et étant très longs).Je pense que ce post est une fois de plus important (réflexion pour la Team et la communauté).Je viens de faire toute une batterie de tests sur 1.3.7, pour essayer de déterminer au moins d'où vient le problème encore persistant des arrondis TVA dans la facture pdf notamment (mais pas que là).Tests faits avec prix réduits ou non, produits personnalisés ou non, tarifs dégressifs ou non, clients dans un groupe avec réduction ou non, pour couvrir tout le panel des erreurs jusque là détectées dans versions antérieures.Voici, pour les plus courageux, le détail (j'ai abrégé sinon c'est très long).Les seuls résultats concluants sont ceux qui sont en rouge ci-dessous.Si quelqu'un veut re-tester, j'ai marqué tous les paramètres-----------------------------------------------------------Avec un produit à 18 €TTC, TVA à 19.6% (soit HT de 15.05 €), toujours acheté par 25 unités lors du test.Test 1 - Produit sans aucune particularité RESULTAT OKJ'obtiens dans la base de données :Total_products_wt (avec TVA) soit 18x25 : 450 | total_products (sans TVA) : 376.25 Test 2 - Produit avec une promo de 10% - RESULTAT FAUXDans la base de données :Total_products_wt (avec TVA) soit 17.2x25 : 405 | total_products (sans TVA) : 338.50 au lieu de 338.63Test 3 - Produit avec une promo de -0.75 € - RESULTAT FAUXDans la base de données :Total_products_wt (avec TVA) soit 17.25x25 : 431.25 | total_products (sans TVA) : 360.50 au lieu de 360.58Test 4 - Produit sans promo mais avec personnalisation RESULTAT OKJ'obtiens dans la base de données :Total_products_wt (avec TVA) soit 18x25 : 450 | total_products (sans TVA) : 376.25 Test 5 - Produit avec tarif dégressif, 5% dès 20 exemplaires achetés RESULTAT OKJ'obtiens dans la base de données :Total_products_wt (avec TVA) soit 17,10x25 : 427.50 | total_products (sans TVA) : 357.44 Test 5 - Produit avec tarif dégressif, 5% dès 20 exemplaires achetés RESULTAT OKJ'obtiens dans la base de données :Total_products_wt (avec TVA) soit 17,10x25 : 427.50 | total_products (sans TVA) : 357.44 Test 6 - Produit avec attribut qui n'impacte pas le prix RESULTAT OKJ'obtiens dans la base de données :Total_products_wt (avec TVA) soit 18x25 : 450 | total_products (sans TVA) : 376.25Test 7 - Produit avec attribut qui augmente le prix de 0.57 E TTC RESULTAT OKJ'obtiens dans la base de données :Total_products_wt (avec TVA) soit 18,57x25 : 464.25 | total_products (sans TVA) : 388.17Test 8 - Produit sans particularité, acheté par un client dont le groupe client lui donne 4% de réduction RESULTAT FAUXJ'obtiens dans la base de données :Total_products_wt (avec TVA) soit 17.28x25 : 432 | total_products (sans TVA) : 361.25 au lieu de 361.20 Conclusions :- le problème se pose encore sur les produits avec une promotion- le problème se pose encore sur les achats pour un groupe de clients offrant une réduction- le problème intervient lors de L'ENREGISTREMENT EN BASE DE DONNEES du montant sans TVA total_products. Et même avant : d'ailleurs on remarque que le calcul, quand il est faux, est faux dès le panier (il est visible dans la page order.php du front office).Après, les problèmes rencontrés sur la TVA et le montant HT (sur facture en pdf par exemple) sont en fait de "simples" problèmes d'affichage d'un champ faux dès son enregistrement (total_products). Je souhaite juste que ces tests aident à identifier ces problèmes persistants et surtout à déterminer à quel moment et sur quelle partie du code ils interviennent encore... en vue d'un correctif "rapide" ?Je mets toutes ces réflexions dans le Bug Tracker tout de suite.Amicalement Link to comment Share on other sites More sharing options...
Enduro Posted April 3, 2011 Share Posted April 3, 2011 Ton sujet m'intéresse étant donné que je vais passer de la version 1.1 à la 1.3.7As tu eu une réponse de la team. Il serait bien une nouvelle version de Presta 1.3.8 avec correction de cette erreur.Tous le monde ne passe pas à la 1.4 pour le moment ! Link to comment Share on other sites More sharing options...
jolvil Posted April 3, 2011 Share Posted April 3, 2011 J'ai posté un sujet approchant au sujet des arrondis et de la 1.3.7 causant une erreur de calcul et erreur de paiement paypal avec les prix par quantité et taxes desactivées http://www.prestashop.com/forums/viewthread/100445/Je viens de passer de 1.1 à 1.3.7, la 1.1 avait ses problemes mais pas celui là. J'ai passé beaucoup de temps à refaire mes modifs et je pensais réellement trouver une version la plus abouttie de Prestashop apres 2 ans de développement.Je ne suis pas passé en 1.4 car elle vient juste de sortir et si on imagine le même scenario que 1.3, il aura d'autres 1.4 car il y a encore des bugs. De plus il y a beaucoup de modules qui fonctionnent en 1.3 et ne marchent plus sur 1.4.Le seules réponse que j'ai c'est: il n'y a plus de support pour 1.3.7, passe en 1.4 ! Quand je vois tout le capital de modules qui a été développé autour de 1.3 c'est vraiment dommage :-SDes correctifs pour 1.3.7 ce serait bien Link to comment Share on other sites More sharing options...
Enduro Posted April 3, 2011 Share Posted April 3, 2011 Oui, j'ai lu également ton sujet.Donc en conclusion merci à la team pour cette version 1.3.7 final qui ne l'ai en faite pas. des bugs il y en aura toujours mais la sur le prix total çà ne le fait pas et apparemment que ce soit avec ou sans gestion de TVA (ton sujet) Je ne comprends vraiment pas cette course à la nouvelle version...Je suis également dans ton cas un thème et modules travaillés pour la 1.3 "beaucoup d'investissement de temps et d'argent".Nous devons être nombreux à ne pas vouloir passer sur cette version 1.4 pour l'instant et çà peux se comprendre. Link to comment Share on other sites More sharing options...
b2comm Posted April 4, 2011 Author Share Posted April 4, 2011 Bonjour àtousoui j'ai eu une réponse de la Team, bien entendu et malheureusement c'est la même que celle donnée à Jolvil...Très étonnant, cet abandon complet de la version 1.3 quelques jours à peine après la mise en ligne de la version 1.4.Tout le monde n'a pas envie de passer si vite à la nouvelle version, pour des raisons de stabilité (je me méfie toujours des premières versions 1.x.0) mais aussi pour des raisons pratiques : tous les modules , y compris ceux vendus sur prestashop addons, ne sont pas encore dispos pour la 1.4 !Je trouve que tant que c'est le cas, il serait correct qu'un support continue sur la 1.3...Quoi qu'il en soit, j'ai donc cherché de mon côté à régler enfin de façon définitive sur la 1.3.7 ces soucis d'arrondis en m'aidant (grâce à des comparaisons) des fichiers de la 1.4.Et bien, je suis peut-être sur une piste ! S'ensuivent encore quelques tests (les premiers étaient concluants) mais je vous tiens au courant.Il faut aussi que je regarde et essaie de rectifier la facture en pdf, qui affiche des montants étranges même quand ce sont les bons qui sont enregistrés dans la base de données.Donc je reviens le plus rapidement possible.Bien amicalement Link to comment Share on other sites More sharing options...
Enduro Posted April 4, 2011 Share Posted April 4, 2011 Bonjour b2comm,Oui très étonnant qu'il n'y ai plus de support pour cette version. Je suis assez déçu de la réponse que vous avez obtenu de la team.La version 1.4 est très prometteuse mais demande beaucoup de modification pour les modules et thèmes. Alors ce ne sera pas pour tous de suite pour ma boutique.Tous le monde n'a pas le thème et modules de base et heureusement çà serait vraiment moche d'avoir tous la même boutique, bref...Si tu trouve la correction, peut être la proposer à la team pour qu'il la valide et enfin peut être une version 1.3.8 sans ce bug pour faire partager cette version à tout les utilisateurs de Presta 1.3.Si il refuse....Quand pense tu ? Link to comment Share on other sites More sharing options...
jolvil Posted April 4, 2011 Share Posted April 4, 2011 Bien que cela ne sois plus possible (la version 1.3.7 n'est plus listée), j'ai posté mon bug dans le nouveau bug tracker.La réponse est celle que j'attendais: The 1.3.7 version is no longer supported.Please use 1.4 version.Moreover, you can post your bug report on our forum. Donc nous n'avons plus qu'à trouver les solutions nous-même %-PIl y a des propositions de modif sur ce post: http://www.prestashop.com/forums/viewthread/89347/ mais cela ne resoud pas mon probleme d'arrondi, taxes desactivées Link to comment Share on other sites More sharing options...
b2comm Posted April 4, 2011 Author Share Posted April 4, 2011 Bonjour Jolvilmerci pour le lien. Je ne sais pas quelle version est concernée par le post en question, mais pour ma part je fais mes recherches sur la 1.3.7, essentiellement le fichier product.php.Les problèmes d'arrondis semblent se régler uniquement depuis ce fichier - enfin d'après mes tests, par contre j'ai encore quelques soucis lorsque je cumule plusieurs particularités : souci d'arrondi lors d'un cumul réduction sur produit + tarif dégressif.J'avais aussi un problème sur cumul réduction et groupe de clients, mais peut-être que ton post va m'aider à le résoudre.Je continue mes tests et recherches, pas le choix.Quant aux divers posts publiés de-ci de-là, il y a tellement de hacks à faire qu'on ne sait plus ou donner de la tête, et difficile ensuite d'avoir confiance vu qu'on a jamais la même solution proposée. Celle que je cherche fera partie du lot, ça aurait été tellement mieux que la Team corrige proprement et définitivement ces soucis. Link to comment Share on other sites More sharing options...
b2comm Posted April 4, 2011 Author Share Posted April 4, 2011 A Enduro,je ne demande pas mieux que ce que tu proposes.Mais la réponse que la Team m'a donnée est la même que celle citée ci-dessous... ce qui laisse peu d'espoir de voir une 1.3.8 un jour.Quant à moi, je veux bien partager mes découvertes, mais elles vaudront ce qu'elles vaudront, c'est à dire que je tatonne quand même, et que la team ne sera pas passée derrière pour les valider. Ce qui est bien dommage... même pour moi ! Link to comment Share on other sites More sharing options...
Enduro Posted April 4, 2011 Share Posted April 4, 2011 Je récris le message que je viens d'essayer d'envoyer et hop disparition en validant l'envoi du message.Je fais plus court et un copier coller avant d'envoyer (je vais pas me faire avoir 2 fois).Pour la version 1.3.8 je n'y croit plus, on va se débrouiller tous seul. Par contre je n'ai aucune connaissance en PHP mais je pourrai toujours donner mon point de vue.J'ai essayé différente configuration pour les arrondis, l'arrondi classique est apparemment le plus juste. Arrondi classique:Pour un produit prix de base à 18,00 TTC / 15.050167 HTon devrait avoir un prix avec remise de 10 % de 16,20 € TTC / 13.545151 HT le prix pour la méthode de calcul est de 13.55 d'où l'erreur de 0.004849 multiplié par le nombre d'articles.La solution serait peut être pour le calcul total HT de prendre 6 chiffres au lieu de 2 pour les prix avec remiseLe problème doit être identique pour les remises par montant. Link to comment Share on other sites More sharing options...
b2comm Posted April 4, 2011 Author Share Posted April 4, 2011 Oui, bien vu.L'arrondi est faux avec 2 chiffres après la virgule. C'est ce que j'ai fait dans mes tests, et avec des arrondis de 3 chiffres après la virgule, on règle déjà pas mal de problèmes ! Par exemple, tous mes tests d'en haut sont désormais OK.Par contre j'ai encore 2/3 petits soucis sur le CUMUL des réductions, par exemple cumul d'une promo avec un groupe de clients, ou d'une promo + 1 tarif dégressif (les montants s'affichent très bien et très juste sur la facture PDF mais souci de quelques centimes encore dans la base de données... argghhh) c'est pour ça que je n'ai encore rien publié.Je cherche désormais dans le fichier classes/Cart.php car c'est apparemment là que sont initialisés les champs enregistrés en base de données. Par contre j'y trouve la méthode de calcul des montants dure à suivre. Link to comment Share on other sites More sharing options...
Enduro Posted April 4, 2011 Share Posted April 4, 2011 Je vais essayé de te trouver un sujet si quelqu'un a déjà travailler sur ce fameux fichier.Pour l'instant rien, je suis même tombé sur un thread ou tu participé déjà sur l'un des bugs de la TVA . Link to comment Share on other sites More sharing options...
b2comm Posted April 5, 2011 Author Share Posted April 5, 2011 Merci c'est gentil.Oui ce post repart un peu à 0 (en tous cas version 1.3.7), mais ce n'est pas le premier sur le sujet...Allez, j'y retourne. Link to comment Share on other sites More sharing options...
b2comm Posted April 6, 2011 Author Share Posted April 6, 2011 Bon ben,pas trop de temps en ce moment.Mais au niveau des réductions cumulées, dur de trouver surtout que j'essaie de modifier le moins possible les fichiers.Dès que j'ai le temps je fais part de mes premières réflexions (qui règlent apparemment les problèmes relevés tout en haut de ce post).A très bientôt (demain si je peux). Link to comment Share on other sites More sharing options...
Enduro Posted April 6, 2011 Share Posted April 6, 2011 Ok, c'est sympa. J'ai essayé de trouver dans forum mais rien qui pourrait t'avancer.Si tu as réussi a corriger les deux erreurs promo par montant et pourcentage c'est déjà vraiment bien bien. Link to comment Share on other sites More sharing options...
b2comm Posted April 14, 2011 Author Share Posted April 14, 2011 Bonjour,voici les modifs que j'ai effectuées depuis certains posts précédents sur le sujet + en m'inspirant du code de prestashop 1.4.Attention je me répète mais je ne fais pas partie de la prestateam, les modifs ci-dessous ne bénéficient donc pas de son aval. Conservez une copie des fichiers originaux classes/product.php et classes/PDF.php, les seuls modifiés. Et testez, testez, testez...J'ai fait en sorte d'y toucher le moins possible, voici les modificationsclasses/Product.phpVers ligne 1400, chercher /** * Get product price *Trouver public static function getPriceStatic($id_product, $usetax = true, $id_product_attribute = NULL, $decimals = 6, $divisor = NULL, $only_reduc = false, $usereduc = true, $quantity = 1, $forceAssociatedTax = false, $id_customer = NULL, $id_cart = NULL, $id_address_delivery = NULL) { remplacer par public static function getPriceStatic($id_product, $usetax = true, $id_product_attribute = NULL, $decimals = 6, $divisor = NULL, $only_reduc = false, $usereduc = true, $quantity = 1, $forceAssociatedTax = false, $id_customer = NULL, $id_cart = NULL, $id_address_delivery = NULL, $group_reduc = true){ Trouver // Caching system $cacheId = $id_product.'-'.($usetax?'1':'0').'-'.$id_product_attribute.'-'.$decimals.'-'.$divisor.'-'.($only_reduc?'1':'0').'-'.($usereduc?'1':'0').'-'.$quantity.'-'.($id_customer ? $id_customer : '0'); remplacer par // Caching system $cacheId = $id_product.'-'.($usetax?'1':'0').'-'.$id_product_attribute.'-'.$decimals.'-'.$divisor.'-'.($only_reduc?'1':'0').'-'.($usereduc?'1':'0').'-'.($group_reduc?'1':'0').'-'.$quantity.'-'.($id_customer ? $id_customer : '0'); Trouver if ($only_reduc OR $usereduc) $reduc = Tools::ps_round(self::getReductionValue($reduc, $result['reduction_percent'], $result['reduction_from'], $result['reduction_to'], Tools::ps_round($price, 2), $usetax, floatval($result['rate'])), 2); Remplacer par if ($only_reduc OR $usereduc) $reduc = Tools::ps_round(self::getReductionValue($reduc, $result['reduction_percent'], $result['reduction_from'], $result['reduction_to'], Tools::ps_round($price, 2), $usetax, floatval($result['rate'])), 3); Trouver if ($usereduc) { if ($reduc) $price = Tools::ps_round($price, 2); $price -= $reduc; } remplacer par if ($usereduc && $group_reduc) { if ($reduc) $price = Tools::ps_round($price, 2); $price -= $reduc; } Trouver if ($usereduc) $price -= Tools::ps_round($price * Group::getReduction(((isset($id_customer) AND $id_customer) ? $id_customer : 0)) / 100, 2); $price = ($divisor AND $divisor != NULL) ? $price/$divisor : $price; $price = Tools::ps_round($price, $decimals); */ remplacer par if ($usereduc) $price *= ((100 - Group::getReduction(((isset($id_customer) AND $id_customer) ? $id_customer : 0))) / 100); $price = Tools::ps_round($price, $decimals); * * * * * * * * * * * * * * Ces modifications corrigent une bonne partie des arrondis TVA dans le cas d'un achat par un client appartenant à un groupe bénéficiant d'une réduction, dans le cas d'un achat d'un produit avec une promotion.Montants corrigés avant leur insertion dans la base de données.Tests fait avec une seule TVA, à 19.6%, reprend les tests du début du post.Tests fait aussi avec frais de port avec et sans TVA, et sans frais de port.Non testé : ecotax - produit sans TVA.Ces modifications amoindrissent l'écart mais ne corrigent pas les erreurs d'arrondi TVA si on cumule par exemple une réduction + un groupe de réduction, ou un tarif dégressif + 1 réduction.Post suivant : correction (apparemment complte) de l'arrondi TVA sur la facture en pdf Link to comment Share on other sites More sharing options...
b2comm Posted April 14, 2011 Author Share Posted April 14, 2011 correction arrondi TVA sur facture en pdfFichier classes/PDF.phpchercher vers ligne 770 if (!isset($taxes[$product['tax_rate']])) $taxes[$product['tax_rate']] = 0; /* Without tax */ $product['priceWithoutTax'] = Tools::ps_round(self::$_priceDisplayMethod == PS_TAX_EXC ? floatval($product['product_price']) : $product['product_price_wt_but_ecotax'] / (1 + $product['tax_rate'] / 100), 2) * (int)($product['product_quantity']); $amountWithoutTax += $product['priceWithoutTax']; remplacer par if (!isset($taxes[$product['tax_rate']])) $taxes[$product['tax_rate']] = 0; /* Without tax */ $product['priceWithoutTax'] = Tools::ps_round(self::$_priceDisplayMethod == PS_TAX_EXC ? floatval($product['product_price']) : $product['product_price_wt_but_ecotax'] / (1 + $product['tax_rate'] / 100), 5) * (int)($product['product_quantity']); $amountWithoutTax += $product['priceWithoutTax']; Chercher vers ligne 790 $ratio = $amountWithoutTax == 0 ? 0 : $product['priceWithoutTax'] / $amountWithoutTax; $priceWithTaxAndReduction = $product['priceWithTax'] - $discountAmount * $ratio; if (self::$_priceDisplayMethod == PS_TAX_EXC) { $vat = $priceWithTaxAndReduction - Tools::ps_round($priceWithTaxAndReduction / $product['product_quantity'] / ((floatval($product['tax_rate']) / 100) + 1), 2) * $product['product_quantity']; $priceBreakDown['totalsWithoutTax'][$product['tax_rate']] += $product['priceWithoutTax']; $priceBreakDown['totalsProductsWithoutTax'][$product['tax_rate']] += $product['priceWithoutTax']; } remplacer par $ratio = $amountWithoutTax == 0 ? 0 : $product['priceWithoutTax'] / $amountWithoutTax; $priceWithTaxAndReduction = $product['priceWithTax'] - $discountAmount * $ratio; if (self::$_priceDisplayMethod == PS_TAX_EXC) { $vat = $priceWithTaxAndReduction - Tools::ps_round($priceWithTaxAndReduction / $product['product_quantity'] / ((floatval($product['tax_rate']) / 100) + 1), 5) * $product['product_quantity']; $priceBreakDown['totalsWithoutTax'][$product['tax_rate']] += $product['priceWithoutTax']; $priceBreakDown['totalsProductsWithoutTax'][$product['tax_rate']] += $product['priceWithoutTax']; } Ces 2 modifications ont corrigé - cumulées avec les modifications celles du post au-dessous - tous les montants d'arrondis TVA de toutes mes factures : produits avec promotions, avec tarif dégressif, réduction pour groupe de clients... même pour les factures cumulant toutes ces conditions en même temps.Un regret : que la prestateam n'utilise pas la même formule de calcul pour le panier-commande-enregistrement en base de données que celle de la classe PDF.php.Donc : pour les utilisateurs qui se servent de la facture pdf pour établir leur compta, apparemment c'est pas mal.Pour ceux qui importent vers un logiciel les infos de la Base de Données : il y a encore et toujours des écarts dans certaines circonstances désormais un peu plus rares.Pour ce dernier cas (export montant de la base de données vers un logiciel compta) :il faudrait essayer dans la fiche d'édition d'une commande de l'administration, de faire en sorte qu'une alerte s'affiche lorsque le montant du total des produits HT de la base de données est différent de celui de la facture, avec possibilité de le corriger dans un champ de saisie. Je ne vois pas comment récupérer dans la page d'édition de commande, ce montant total produit HT de la facture PDF.Si quelqu'un a une idée, après c'est juste un comparatif à faire avec celui de la base de données. En tous cas, désormais chez moi au niveau affichage pdf, ça marche.si quelqu'un prend le relais et corrige/améliore : tant mieux Amicalement Link to comment Share on other sites More sharing options...
Enduro Posted April 14, 2011 Share Posted April 14, 2011 Merci, pour cette modif ou plutôt ces modifs. çà as du te prendre pas mal de temps pour trouver la solution et effectuer les testes. Donc un grand MERCI !Tu as apparemment corrigé beaucoup d'erreurs d'arrondi TVA (facture et FO).J'essaierais à tête reposé avec un test en semi-production.Amicalement. Link to comment Share on other sites More sharing options...
b2comm Posted April 14, 2011 Author Share Posted April 14, 2011 Bonsoiret merci . Oui c'est bien de faire des essais d'abord sur de la semi-production. Car tout n'est pas corrigé, et même si j'ai fait beaucoup de tests, il en faut d'autres encore pour savoir si c'est vraiment efficace. Et là malheureusement je suis juste en temps.Amitiés 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