Jump to content

Pb Transporteur et tranches de prix


Recommended Posts

Version installée : 1.2.0.6 rev 1117

Bonjour,

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

une idée ?
Bug de la rev 1117 ?

Merci.

Share this post


Link to post
Share on other sites

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 ;)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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é :o


[EDIT]
J'ai retrouvé le post :
http://www.prestashop.com/forums/viewthread/16701/P15/developpement_et_modules/resolu_frais_de_port__probleme

Par contre attention ça concerne les tranches de poids, mais ça pourra certainement vous aider à travailler sur une modif des tranches de prix...

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 ?

Share this post


Link to post
Share on other sites

ç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 :/

Share this post


Link to post
Share on other sites

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)

et

De 500.001 (inclu)
A 1000

donc de 500 à 500.0009 est exclu.... et là pas de vente ;)

Share this post


Link to post
Share on other sites

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é :o

Donc je sais ce qu'il me reste à faire :D

Share this post


Link to post
Share on other sites

>> "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 ?

Share this post


Link to post
Share on other sites

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__probleme
et ç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.php
modifier 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;
   }

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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 poids
0.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 :P

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More