Jump to content

IMPORTANT Prestashop 1.3.7 : problème arrondi TVA toujours présent sur produits personnalisés... preuveS à l'appui


Recommended Posts

Bonjour

pour 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 OK
J'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 FAUX
Dans la base de données :
Total_products_wt (avec TVA) soit 17.2x25 : 405 | total_products (sans TVA) : 338.50 au lieu de 338.63


Test 3 - Produit avec une promo de -0.75 € - RESULTAT FAUX
Dans 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.58


Test 4 - Produit sans promo mais avec personnalisation RESULTAT OK
J'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 OK
J'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 OK
J'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 OK
J'obtiens dans la base de données :
Total_products_wt (avec TVA) soit 18x25 : 450 | total_products (sans TVA) : 376.25


Test 7 - Produit avec attribut qui augmente le prix de 0.57 E TTC RESULTAT OK
J'obtiens dans la base de données :
Total_products_wt (avec TVA) soit 18,57x25 : 464.25 | total_products (sans TVA) : 388.17


Test 8 - Produit sans particularité, acheté par un client dont le groupe client lui donne 4% de réduction RESULTAT FAUX
J'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

Ton sujet m'intéresse étant donné que je vais passer de la version 1.1 à la 1.3.7

As 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

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 ! :P
Quand je vois tout le capital de modules qui a été développé autour de 1.3 c'est vraiment dommage :-S

Des correctifs pour 1.3.7 ce serait bien

Link to comment
Share on other sites

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

Bonjour àtous

oui 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

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

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 %-P


Il 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

Bonjour Jolvil

merci 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

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

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 HT

on 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 remise

Le problème doit être identique pour les remises par montant.

Link to comment
Share on other sites

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

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

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 modifications

classes/Product.php

Vers 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

correction arrondi TVA sur facture en pdf

Fichier classes/PDF.php
chercher 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

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

Bonsoir

et 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

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...