osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> {Résolu}[ Atos ] Pb de montant arrondi, le montant de la page CB est faux
xiaopigu23
posté 5 Oct 2004, 12:08
Message #1


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 110
Inscrit : 23-July 04
Lieu : Paris
Membre no 2931



Voila mon pb: a la sortie du checkout_confirmation, le total de ma commande est:
$order->info['total'] = 9.20 euros (normal)

Quand j'arrive sur la page de saisie de CB, il est de 9.19 euors confused.gif



Dans le module ATOS, le montant initial a subi ce traitement (dans la fonction qui crée la commande à envoyer a ATOS):

$amount = sprintf("%03d", $amount * $this->_getCurrencyUnit($currency));

Quelqu'un peut-il me m'expliquer cette ligne?
Avez-vous deja rencontré ce probleme?


confused.gif


--------------------
CREloaded 6.0 FR SP1.1.01 + TVA Intracomm + B2B_b092 + Paiement Atos + Visitors Web Stats 1.7 + OrderCheck
Go to the top of the page
 
toffee
posté 5 Oct 2004, 13:13
Message #2


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 3
Inscrit : 5-October 04
Lieu : Nord Est
Membre no 3419



question bete mais des fois utile ... t'as mis a jour le taux de conversion du $ vers l'Euro ?
tu dois avoir EUR = 1.00000000 et $ = 1.xxxxxxxxx suivant le cours actuel.


--------------------
- tant va la CB a l'eau qu'a la fin elle me les brise -
Go to the top of the page
 
xiaopigu23
posté 5 Oct 2004, 14:06
Message #3


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 110
Inscrit : 23-July 04
Lieu : Paris
Membre no 2931



QUOTE (toffee @ 05 oct 2004, 08:13)
question bete mais des fois utile ... t'as mis a jour le taux de conversion du $ vers l'Euro ?
tu dois avoir EUR = 1.00000000 et $ = 1.xxxxxxxxx suivant le cours actuel.

Dans l'Admin de la boutique tu veux dire ? Je n'ai que l'euro dans les devises

ps. Je ne travaille qu'en euros, tous mes prix sont stockés en euros


--------------------
CREloaded 6.0 FR SP1.1.01 + TVA Intracomm + B2B_b092 + Paiement Atos + Visitors Web Stats 1.7 + OrderCheck
Go to the top of the page
 
toffee
posté 5 Oct 2004, 14:22
Message #4


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 3
Inscrit : 5-October 04
Lieu : Nord Est
Membre no 3419



oui, dans localisation tu fais actualiser les devises apres avoir configuré ton OSC pour l'euro par defaut (normalement si tu as la langue français par defaut et l'ajustement auto langue/monaie c'est bon).

Il semblerait que le script soit a la base configuré pour tout gerer en $ et qu'il convertisse vers l'euro donc c'est possible que sans faire cette manip le taux de conversion a + de 1.000000 te mette dedans ... g eu le meme probleme, et je l'ai résolu comme ca.

A ton écoute ... bonne chance smile.gif


--------------------
- tant va la CB a l'eau qu'a la fin elle me les brise -
Go to the top of the page
 
vinioute
posté 27 Oct 2004, 15:19
Message #5


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 67
Inscrit : 20-March 03
Membre no 974



Il y a un bug dans le module :
CODE

$amount = sprintf("%03d", $amount * $this->_getCurrencyUnit($currency));

à remplacer par :
CODE

$amount = str_pad ($amount * $this->_getCurrencyUnit($currency), 3, 0, STR_PAD_LEFT);


Vinioute
Go to the top of the page
 
xiaopigu23
posté 27 Oct 2004, 22:17
Message #6


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 110
Inscrit : 23-July 04
Lieu : Paris
Membre no 2931




es-tu sûr de ton code vinioute ?

si j'ai un montant de $amount=154.0522

ton instruction donne 15405.22 (au lieu de 15405)


Pour ma part, j'ai finalement laissé le sprintf tel quel... malgré le centime d'ecart de tps en tps


--------------------
CREloaded 6.0 FR SP1.1.01 + TVA Intracomm + B2B_b092 + Paiement Atos + Visitors Web Stats 1.7 + OrderCheck
Go to the top of the page
 
vinioute
posté 4 Nov 2004, 17:38
Message #7


Ceinture jaune OSC
Icône de groupe

Groupe : Membres
Messages : 67
Inscrit : 20-March 03
Membre no 974



Oki alors si tu préfères ça devrait être mieux :

QUOTE

$amount = str_pad (round($amount * $this->_getCurrencyUnit($currency), 0), 3, 0, STR_PAD_LEFT);
Go to the top of the page
 
Gnidhal
posté 21 Mar 2007, 15:34
Message #8


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9206
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



Je pense qu'il y a plus simple :
CODE
      $amount = sprintf("%03d", round($amount,2) * $this->_getCurrencyUnit($currency));

ça devrait effectuer l'arrondi sur deux décimales du montant à transmettre à la banque qui jusque là se trouvait juste tronqué avant conversion en centimes :

123.2151 se trouve converti en 12321 par la ligne du module Atos alors qu'osC calcule 123.22 par arrondi dans la facture.
Avec cette petite modif le montant transmis sera 12322. (soit l'équivalent de la facture)

C'est, il me semble, plus propre dans le code de la contrib Atos.


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
broquerea
posté 3 Oct 2007, 09:09
Message #9


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 1
Inscrit : 28-April 06
Membre no 10165



Bonjour,

J'ai un souci de montant inférieur de 0,01 € par rapport au prix réel de la commande.
Concernant atos.php (html/boutique/includes/modules/payment) : j’ai modifié selon le topic du forum d’OsCommerce ci-dessus la ligne suivante :

l.526 :

$amount = sprintf("%03d", $amount * $this->_getCurrencyUnit($currency));

Remplacé par :
$amount = sprintf("%03d", round($amount,2) * $this->_getCurrencyUnit($currency));

Mais je viens d'avoir à nouveau un écart sur une commande de 145,69 € au lieu de 145,70...
J'hésite à mettre ce code en production sur le site :
$amount = str_pad (round($amount * $this->_getCurrencyUnit($currency), 0), 3, 0, STR_PAD_LEFT);

Quelqu'un peut-il m'aider s'il vous plaît ?
Elsa Hermantier
Pôle Internet
04 68 41 98 77

Ce message a été modifié par broquerea - 3 Oct 2007, 09:25.
Go to the top of the page
 
demoalt
posté 28 Jul 2008, 18:57
Message #10


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 131
Inscrit : 10-April 05
Membre no 5450



Aucun des patchs ne semblent fonctionner ici. Je viens de trouver la solution (logique en plus).

Oscommerce fait ses arrondis avec la fonction tep_round qui est différente de la fonction round, de ce fait les arrondis sont complètement différents.
Le problème se pose à partir de la 3eme décimale qui affecte l'arrondi sur la 2eme décimale.

Le bon code est:

$amount = tep_round($amount,2)*$this->_getCurrencyUnit($currency);

Dites en moi des nouvelles
Go to the top of the page
 
dero
posté 28 Jul 2008, 21:45
Message #11


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 315
Inscrit : 26-December 05
Lieu : lille
Membre no 8319



J'ai trouvé la solution sur le forum mais je ne sais plus ou

Ce qui est certain c'est que mon probleme de difference de centime est réglé depuis cette modif

Dans le Module ATOS
Remplacer
Citation
$amount = sprintf("%03d", $amount * $this->_getCurrencyUnit($currency));

Par ceci
Citation
$amount = (int)(round($amount,2) * $this->_getCurrencyUnit($currency));


Et Voila


--------------------
Version osCommerce Online Merchant v2.2 RC1 W3C Valid FR
et
Une ancienne creload 6 1.4

Super friendly admin menue ,Visible_countries_1.2b, define_mainpage_v1.3.3, inactive_user, HeaderTags_V_2.6.3, UltraPics_2_08, printable_catalog_3.6, AllProducts_V_4.7, Categories_Box_Bullet, scrolling_bestseller_with_images_1, Ultimate Html Emails v2.1, minimum order amount, Alternative Attribut 7, ultimate seo url 2.7, Quantity Price Breaks Per Product 1.3.5, Google XML Sitemap 1.3, Atos 2.3.0, TVA Intracommunautaire V5.1, Administration level account with categories 2.3.1fr, admin toolbar v4.1,
Go to the top of the page
 
demoalt
posté 29 Jul 2008, 11:01
Message #12


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 131
Inscrit : 10-April 05
Membre no 5450



après un comparatif, les patchs

de gnidall, dero et la mienne fonctionnent. les autres ne donnent pas les bonnes valeurs.
Go to the top of the page
 
LaMachine
posté 2 Feb 2012, 12:21
Message #13


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 10
Inscrit : 26-January 10
Membre no 26954



Je ressors les vieux messages pour signaler que le problème est de nouveau présent sur ma boutique, il y a parfois 1 centime de différence (en faveur du client) sur certaines commandes.
Il y a longtemps j'avais ce code :
Citation
$amount = sprintf("%03d", $amount * $this->_getCurrencyUnit($currency));


Que j'avais remplacé par celui-ci :
Citation
$amount = sprintf("%03d", round($amount,2) * $this->_getCurrencyUnit($currency));


Et ça marchait correctement.
Mais depuis un certain temps j'ai de nouveau cet écart de 1 centime entre la commande et le payement du client reçu en banque (sur certaines commandes, pas toutes).

Je viens d'essayer les 2 autres codes notés dans ce post :

Citation
$amount = tep_round($amount,2)*$this->_getCurrencyUnit($currency);

Citation
$amount = (int)(round($amount,2) * $this->_getCurrencyUnit($currency));

Et ça ne marche pas mieux. sad.gif
Vous n'auriez pas pas vous aussi constaté ce problème de nouveau ? Et trouvé une solution ?
Go to the top of the page
 
planetaire
posté 17 Feb 2012, 16:49
Message #14


Ceinture blanche OSC
Icône de groupe

Groupe : Membres
Messages : 8
Inscrit : 1-March 05
Lieu : LENS
Membre no 4961



J'ai également ce problème d'arrondi avec un module ATOS 2.8

Voici la ligne en question sur cette version :

Code
$amount = sprintf('%03d', (int)(round($amount,2) * $this->_getCurrencyUnit($currency)));

Cela semble pourtant correct.


--------------------
osCommerce Online Merchant v2.2 RC2 W3C Valid FR + STSv4.6 + Ultimate SEO URLs 2.1d + CCGV trad + QTPRO 4.6
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 30th October 2014 - 17:36
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)