cire Posted July 12, 2009 Share Posted July 12, 2009 Version installée : 1.2.0.6 rev 1117Bonjour,j'ai voulu créer 2 transporteurs ayant chacun une tranche de prix :- Tansporteur A - tranches de prix 0 à 10 €- Tansporteur B - tranches de prix 10 à 10000 €Le problème :quand ma commande est inférieur à 10 €, j'ai les 2 transporteurs qui sont proposé alors que je devrai avoir que le Transporteur A.Par contre quand ma commande est supérieur à 10€ j'ai bien que le transporteur B donc là c'est ok.J'ai essayé en recréant mes transporteurs, mes tranches de prix etc.... idemune idée ?Bug de la rev 1117 ?Merci. Link to comment Share on other sites More sharing options...
Alekhine Posted July 12, 2009 Share Posted July 12, 2009 Hello,Ce n'est pas un bug, ça correspond au comportement prévu.Je suppose que pour chaque transporteur vous avez choisi l'option de comportement en cas de poids supérieur à la tranche maximum "Désactiver le transporteur" ? (sinon refaites un essai)Cette option vise donc le cas du dépassement de la tranche supérieure mais ne tiens pas compte de la tranche basse.Pour modifier le comportement concernant la tranche basse il y a une petite modif à faire (je vais rechercher le lien, j'ai oublié de le conserver :s )Autre détail au passage, je vois que vous avez fait des tranches "0 à 10" et "10 à 100" (par exemple),il vaut mieux ne jamais croiser, c'est à dire "0 à 10" et "10.01 à 100" , parce que dans le cas d'un panier à 10 euros (pile) vous allez au devant des problèmes ou d'un affichage innatendu Link to comment Share on other sites More sharing options...
cire Posted July 12, 2009 Author Share Posted July 12, 2009 j'avais oublié de préciser que j'utilise les tranches en "Fonction du prix" (je pense que cela ne change rien au comportement si on utilise "au poids")- J'ai bien choisis : "Désactiver le transporteur" - Cela me rassure : c'est un comportement normal (on tiens compte des tranches hautes mais pas basses.)- Pour ce qui est des tranches "0 à 10" et "10 à 100" : étant donné que le prix de début est "inclu" et prix de fin "exclu" , normalement on peux faire comme ça : donc première tranche "10" est exclu par contre "10" de la 2è tranche est inclu. Si on met "0 à 10" et "10.01 à 100" et si le prix est de "10" pile on n'a pas de transporteur (sauf si on a choisis "prendre la tranche la plus grande" , la pas de soucis) Pour info : je propose de la livraison à domicile en local sur les panier supérieur à 10€ (transporteur mais si le panier inférieur à 10€ je ne veux proposer que de la livraison postal (transporteur A)Alekhine, merci de votre réponse et si vous retrouvez la modif pour tenir compte des tranches basses je suis preneur. Link to comment Share on other sites More sharing options...
Alekhine Posted July 12, 2009 Share Posted July 12, 2009 Vous êtes sûr que la borne haute est exclu ?Parce que si c'est vrai aussi pour les poids j'ai quelques modifs à faire de mon coté [EDIT]J'ai retrouvé le post :http://www.prestashop.com/forums/viewthread/16701/P15/developpement_et_modules/resolu_frais_de_port__problemePar contre attention ça concerne les tranches de poids, mais ça pourra certainement vous aider à travailler sur une modif des tranches de prix... Link to comment Share on other sites More sharing options...
cire Posted July 12, 2009 Author Share Posted July 12, 2009 Non la tranche haute n'est pas exclu, c'est le contraire qui actuellement fonctionne : le transporteur de la tranche basse est bien exclu quand le panier dépasse la tranche basse. Mais le contraire n'est pas vrai.J'ai regardé votre post et ça correspond exactement à ce que je veux faire.je vais essayé de modifier pour l'adapter au tranche de prix.Dès que j'ai fais la modif, je la post ici. Encore merci pour votre aide. Link to comment Share on other sites More sharing options...
cire Posted July 12, 2009 Author Share Posted July 12, 2009 J'ai testé ta modif sur le post que tu m'as donné.J'ai modifié la fonction :"checkDeliveryPriceByPrice" dans classes/carrier.php et la ligne dans order.php comme tu l'as fais pour le poids mais j'ai toujours le même fonctionnement. ça désactive bien le transporteur de la tranche basse quanfd mon panier se trouve dans la tranche haute mais pas l'inverse.Je ne suis pas développeur mais j'ai compris que tu modifiais la requête mysql pour borner avec le "delimiter 1 et 2" alors que d'origine il n'y a que le delimiter 2 (d'ou l'affichage de tous les transporteur quand le prix est supérieur à delimiter2). J'en déduis que ta modif devrais fonctionner puisque l'on borne la requête sur les 2 délimiters.bizarre..... Link to comment Share on other sites More sharing options...
Alekhine Posted July 12, 2009 Share Posted July 12, 2009 Ok,concernant "la borne haute", je voulais parler des bornes définissants la tranche, ce qui n'a rien à voir avec le problème présenté mais qui m'interresse puisque vous sembliez l'avoir compris autrement :Tranches de poids ou de prix, moi je fais "0 à 500" et "500.001 à 1000" etc...D'après ce que j'ai compris vous pensez que "0 à 500" et "500 à 1000" rempli le même rôle, voir même est préférable sinon le "500" pile risquerait de ne pas "exister" dans les tranches ? Link to comment Share on other sites More sharing options...
Alekhine Posted July 12, 2009 Share Posted July 12, 2009 ça désactive bien le transporteur de la tranche basse quanfd mon panier se trouve dans la tranche haute mais pas l'inverse. Donc la modif fonctionne puisqu'elle vise à désactiver le transporteur lorsque le panier est d'un poids inférieur à la tranche la plus basse du transporteur,l'inverse, c'est à dire la désactivation du transporteur lorsque le panier est plus lourd que la tranche la plus haute du transporteur est définie par le choix "désactiver le transporteur" dans le BO (comportement en cas de tranche supérieure dépassé pour ce transporteur)Donc s'il ne se désactive pas y-a un os quelque part :/ Link to comment Share on other sites More sharing options...
cire Posted July 12, 2009 Author Share Posted July 12, 2009 oui tout à fait puisque c'est bien marqué dans le BO:DE xx € (inclu)A xx € (exclu)Donc si :De 0 €A 500 € (donc exclu)etDe 500.001 (inclu)A 1000donc de 500 à 500.0009 est exclu.... et là pas de vente Link to comment Share on other sites More sharing options...
Alekhine Posted July 12, 2009 Share Posted July 12, 2009 Ah oui exact merci !Je n'avais jamais remarqué le "inclu/exclu" parce que je travaillais principalement sur la 1.1 jusqu'à il y a peu...Mais effectivement dans la 1.2 c'est bien précisé Donc je sais ce qu'il me reste à faire Link to comment Share on other sites More sharing options...
cire Posted July 12, 2009 Author Share Posted July 12, 2009 >> "Donc la modif fonctionne puisqu’elle vise à désactiver le transporteur lorsque le panier est d’un poids inférieur à la tranche la plus basse du transporteur,"non ça ne fonctionne pas : si on reprend les données de mon premier message , je veux désactiver le Transporteur B si mon panier est 5€ par exemple.Le contraire fonctionne : si mon panier est de 12€ le Transporteur A est bien désactivé.Mais comme je le disais sur mon message plus haut, ta modif devrai fonctionner puisque on tri sur les 2 bornes mais marche pas.Je vais reprendre tranquillement le code et je reviens.A moins d'une autre idée ? Link to comment Share on other sites More sharing options...
cire Posted July 12, 2009 Author Share Posted July 12, 2009 j'ai repris à nouveau la modif de ton post en l'adaptant au tranche de prix : http://www.prestashop.com/forums/viewthread/16701/P15/developpement_et_modules/resolu_frais_de_port__problemeet ça fonctionne impeccable.Cela me permet de choisir le transporteur en fonction du montant du panier.Pourquoi ce n'est pas intégrer d'origine ? Ce fonctionnement est plus logique , on a un/des transporteurs en fonction du prix ou du poids, cela permet de moduler comme on veut.Merci Alekhine.La modif pour les tranches de prix :dans .classes/carrier.phpmodifier la fonction suivantes : static public function checkDeliveryPriceByPrice($id_carrier, $orderTotal, $id_zone) { $result = Db::getInstance()->getRow(' SELECT d.`price` FROM `'._DB_PREFIX_.'delivery` d LEFT JOIN `'._DB_PREFIX_.'range_price` r ON d.`id_range_price` = r.`id_range_price` WHERE d.`id_zone` = '.intval($id_zone).' AND '.floatval($orderTotal).' <= r.`delimiter2` AND '.floatval($orderTotal).' >= r.`delimiter1` // <-- ligne à ajouter AND d.`id_carrier` = '.intval($id_carrier).' ORDER BY r.`delimiter1` ASC'); if (!isset($result['price'])) return false; return true; } Link to comment Share on other sites More sharing options...
Alekhine Posted July 12, 2009 Share Posted July 12, 2009 Ok impec Oui ça me semble plus logique aussi, mais s'ils ne l'ont pas fait il doit y avoir une raison "lointaine" qu'on ne connait pas. Ca pourrait faire parti des choses à demander aux dév...Pour assurer la compatibilité il suffirait d'ajouter une case à cocher dans la BO (désactivée par défaut) pour accéder à cette modif du code.Par contre, je vois que tu as directement modifié la fonction d'origine, personnellement je l'ai dupliqué car je souhaite que seul le choix des transporteurs soit influencé par cette modif, il faut se méfier car cette fonction est peut-être appelée à d'autres endroits du code pour des raisons un peu différentes... : je n'ai pas pris ce risque. Link to comment Share on other sites More sharing options...
Alekhine Posted July 19, 2009 Share Posted July 19, 2009 Déterrage de topic en règle Je reviens sur le sujet parce que je viens de constater un bug avec cette modif quand le panier fait exactement le poids limite d'une tranche...Exemple: J'ai un panier de 1,0 kg pile poil.sachant qu'à l'origine dans carrier.php on avait AND '.floatval($orderTotal).' < r.`delimiter2` Et que moi j'avais ajouté AND '.floatval($orderTotal).' > r.`delimiter1` pour que le transporteur se désactive AUSSI quand le poid du panier est inférieur à la tranche inférieure (delimiter1),il en résulte, du fait de l'utilisation du signe "supérieur à" que le transporteur se désactive pour un panier de 1kg pile.C'est normal parce que quand on fait des tranches de poids0.500 à 1.0 et 1.0 à 2.0, PS prend "0.500 à 0.99999" et "1.0 à 2.0"Par conséquent il faut écrire: AND '.floatval($orderTotal).' < r.`delimiter2` // LAISSER < AND '.floatval($orderTotal).' >= r.`delimiter1` // METTRE >= Je vois que tu as mis <= et >= , par conséquent tu as modifié le comportement d'origine du délimiter2, par contre tu as corrigé de toi même pour l'ajout du test sur le delimiter1.je sais pas si je suis clair Link to comment Share on other sites More sharing options...
cire Posted July 20, 2009 Author Share Posted July 20, 2009 Exact !!!En plus j'avais pas cherché à comprendre, j'avais laissé la balise d'origine.Comme quoi à chaque fois que l'on modifie du code, il faut revérifier et tester les cas de figures mêmes les moins courant.Merci. Link to comment Share on other sites More sharing options...
Alekhine Posted July 20, 2009 Share Posted July 20, 2009 eh oui, j'ai vu ça complètement par hasard en testant un produit d'1.0kg , pas de transporteur lol ^^La solution est simple mais je n'y ai pas pensé du tout au départ :/ 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