10 sujets de 1 à 10 (sur un total de 10)
  • Auteur
    Messages
  • #54307
    Carole H
    Participant
    Points: 19 pts

    Bonjour,
    Je me permets de vous écrire car je suis en train de finaliser un site et j’ai un petit problème qui me résiste pour les prix.

    Comme c’est un site Suisse, j’ai arrondi les prix au 0 ou 5 centimes.

    Ca fonctionne plutôt bien sauf pour le Sous-total.

    Aucune idée pourquoi.
    J’ai essayé plein de nom mais rien ne change.

    /* Arrondir les prix au 0 ou 5 centimes */
    add_filter( 'woocommerce_product_get_price ', 'round_price_product', 10, 1 );
    add_filter( 'woocommerce_tax_round', 'round_price_product', 10, 1);
    add_filter( 'woocommerce_calculated_total', 'round_price_product', 10, 1);
    add_filter( 'woocommerce_coupon_get_discount_amount', 'round_price_product', 10, 1);
    
    add_filter( 'woocommerce_cart_product_subtotal', 'round_price_product', 10, 1 ); // ici woocommerce_cart_product_subtotal ne fonctionne pas
    
    function round_price_product( $price ){
    return round(($price + 0.000001) * 20) / 20;
    
    }

    Je vous remercie d’avance si vous avez une piste où chercher.
    Belle journée

    depanagewp
    1 utilisateur a remercié l'auteur de ce message.
    #54386
    Guy
    Participant
    Points: 5,495 pts
    ModérateurCertifiéFreelance
    Membre 2 étoiles

    Bonjour,

    Simple curiosité mais, est-ce qu’il y a une obligation légale pour du e-commerce ?
    Parce que je comprends que dans un commerce physique on ne pourra pas me rendre 3 centimes, mais pour des paiements électroniques je ne vois pas le problème.

    Le code c’est pas trop mon truc, mais ce calcul je le trouve bizarre. Ca pourrait avoir un sens mais alors il faudrait enlever les décimales après la multiplication. Et dans ce cas ça ne sert à rien d’ajouter des centimes.

    Je verrais plus quelque chose comme: return round($price * 20, 0) / 20;

     

    Content(e) de mon aide ? Vous pouvez m'offrir un café ! 🙂

    Avant d'appeler à l'aide: Dépannage Woocommerce

    Vous manquez de trafic ? Payez le prix d'un seul backlink et obtenez-en beaucoup plus !

    depanagewp
    #54421
    Mathieu
    Participant
    Points: 1,315 pts
    Membre 2 étoiles

    le calcul d’arrondi vient de la façon dont PHP gère les nombres à virgule flottante.
    si on prend par exemple ce calcul :
    $prix = (1.045 - 1) * 100;
    $prix devrait contenir 4,5 mais en interne PHP stocke 4.4999999999999929
    donc on obtient ces résultats :

    echo round($prix); // 4 puisque l'arrondi est calculé à partir de 4,499
    echo round($prix + 0.000000001); // 5 ce qui est bien le résultat attendu

    il y a le même problème pour la comparaison :

    $prix == 4.5 // retourne FALSE
    abs($prix - 4.5) < 0.000000001 // retourne TRUE

    Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
    Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
    🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.

    depanagewp
    1 utilisateur a remercié l'auteur de ce message.
    Guy
    #54446
    Carole H
    Participant
    Points: 19 pts

    Merci à vous deux pour votre réponse.

    Mon arrondi fonctionne bien, c’est juste pour le sous total dans le processus de commande et les factures PDF qui ne s’arrondit pas.

    Admettons qu’un produit soit à 22.90 + 7.7% de TVA = CHF 24.66

    Partout il me met bien CHF 24.65 sauf pour le sous total.

    Merci d’avance en tout cas pour votre temps
    Belle journée

    depanagewp
    #54455
    Mathieu
    Participant
    Points: 1,315 pts
    Membre 2 étoiles

    qu’indique exactement la loi suisse au sujet de l’arrondi des totaux intermédiaires ? en France par exemple, il est interdit d’afficher des sous-totaux arrondis lors des calculs de T.V.A., seul la somme totale peut l’être.

    par exemple si vous avez 10 produits à 24,66.
    chaque sous total sera indiqué à 24,65 mais ensuite le total sera de 246,60 ou alors de 10 × 24,65 = 246,50 ?

    Développeur PHP et WordPress En Alsace dans l'annuaire des prestataires WordPress et WooCommerce
    Création d'extensions pour WordPress et WooCommerce - Personnalisation d'extensions existantes
    🔶 Si vous appréciez mon aide, vous pouvez me faire un don de n'importe quel montant en cliquant ici.

    depanagewp
    #58012
    jf
    Participant
    Points: 17 pts

    Salut à tous,

    Ce n’est pas une question légale, c’est une question de monnaie. Le centimes n’existent pas dans la monnaie helvétique. La plus petite pièce est 5 centimes, puis 10 centimes, 20 centimes 50 centimes.

    La plupart des logiciels comptables suisses ne permettent pas d’enregistrer des montants de 1-2-3-4-6-7-8-9 centimes, il faut arrondir.

    Dans le cas présent, c’est le sous-total qui n’est pas arrondi.

    J’ai déjà été confronté à un cas similaire, la façon de procéder pour que cela fonctionne parfaitement et de commander à Woocommerce un plugin qui effectue les arrondis. Cela m’a coûté 200 euros et cela fonctionne parfaitement depuis, mais moi c’était pour certains frais.

    Bonne journée

     

     

     

     

     

     

     

    depanagewp
    #59321
    Carole H
    Participant
    Points: 19 pts

    Bonjour,

    Avec un peu de délai, voici le code que j’ai utilisé et qui fonctionne autant pour le site que lors de la création des PDFs.

    add_filter( 'woocommerce_cart_tax_total', 'round_subtotal', 10, 3);
    add_filter( 'woocommerce_get_price_excluding_tax', 'round_price_product', 10, 1 );
    add_filter( 'woocommerce_get_price_including_tax', 'round_price_product', 10, 1 );
    add_filter( 'woocommerce_tax_round', 'round_price_product', 10, 1);
    add_filter( 'woocommerce_product_get_price', 'round_price_product', 10, 1);
    add_filter( 'woocommerce_calculated_total', 'round_price_product', 10, 1);
    add_filter( 'woocommerce_calculated_subtotal', 'round_price_product', 10, 1);
    add_filter( 'woocommerce_cart_subtotal', 'round_subtotal', 10, 3);
    
    function round_subtotal( $cart_subtotal, $compound, $instance ) {
    $origValue = $cart_subtotal;
    preg_match( '/\d+\.\d+/', $origValue, $floatValue);
    $roundedValue = number_format( round_price_product( $floatValue[0] ), 2 );
    $returnValue = str_replace( $floatValue, $roundedValue, $origValue );
    return $returnValue;
    }
    function round_price_product( $price ){
    // Return rounded price
    return round( $price * 2, 1 ) / 2;
    }
    
    

    J’espère que ca vous aidera.

    Belle journée

    depanagewp
    1 utilisateur a remercié l'auteur de ce message.
    #63503
    Olivier
    Participant
    Points: 16 pts

    Bonjour le forum,

    Je me greffe sur ce sujet car j’utilise le code donné par Carole H. pour arrondir les prix. Cependant je suis confronté à un souci que je n’arrive pas à comprendre et fixer malgré des recherches intensives.

    En bref, tout fonctionne bien, sauf pour le “total des lignes produits” du panier qui ne s’arrondi pas. Si je ne me trompe pas sur le nom du “hook” : woocommerce_cart_item_subtotal

    En pièce jointe une image pour illustrer le souci. Le total dans le rectangle rouge N°2 est bien arrondi mais pas le total dans le N°1.

    Merci d’avance pour votre aide précieuse.

    Bonne journée,

    Olivier.

    ****************

    Woocommerce 3.4.2

    Woocommerce Bulk Discount 2.4.5 ( https://fr.wordpress.org/plugins/woocommerce-bulk-discount/ )

    WordPress 4.9.6 (PHP 7.1.8)

     

    depanagewp
    #195335
    Pierre-Marie Philipps
    Participant
    Points: 18 pts

    Bonjour à tous et merci pour ce sujet qui m’intéresse, est ce que le code fonctionne toujours? Dans quel fichier doit on le coller? Merci à vous.

    depanagewp
    #219134
    imbodens89
    Participant
    Points: 13 pts

    j’ai pas compri où intégrer cette formule. Je développe un site Suisse et j’ai du mal également a arrondir les prix de mes produitsd au 5 centime

    depanagewp
10 sujets de 1 à 10 (sur un total de 10)
  • Vous devez être connecté pour répondre à ce sujet.