Jump to content

PS 1.6.1.6 : Bug transporteur dans le panier


Recommended Posts

Bonjour,

 

Voici un petit bug assez bloquant pour la mise en place d'une politique de frais de port et de transporteurs spécifiques selon des zones de livraisons.

 

Lorsque au moins 2 produits sont dans le panier et que l'un d'entre eux a une restriction de transporteur livrant une zone spécifique, si le client choisi une adresse en dehors de cette zone, la commande n'est pas bloquée.

 

Aucun message d'erreur de type : "Votre sélection ne peut pas être livrée par le(s) transporteur(s) disponible(s)." ne s'affiche.

Le nom du transporteur disparaît laissant place à la case à cocher et au prix seulement.

Une erreur Smarty est générée : "Notice: Undefined offset: 0 in order-carrier.tpl".

 

Le client peut valider la commande et 2 commandes sont générées: # 1 et # 2 avec des frais de ports erronés dont l'une avec aucun transporteur valide.

 


 

Merci d'avance pour l'aide que vous pourrez m'apporter ainsi qu'a la communauté.

 

Cordialement,

 

Greg.

 

Configuration:

Version : PS 1.6.1.6 (fresh install)

Thème : Default bootstrap

Override : aucun

Modules non prestashop : désactivés

Cache activé : oui ou non aucune incidence.

 

 

post-407717-0-02985300-1473844711_thumb.jpg

post-407717-0-71706000-1473844725_thumb.jpg

post-407717-0-33654200-1473844730_thumb.jpg

post-407717-0-56280100-1473844735_thumb.jpg

post-407717-0-00537200-1473844745_thumb.jpg

Link to comment
Share on other sites

Bonjour et merci de votre réponse rapide,

 

J'ai corrigé le bug Smarty selon vos recommandations hormis 2 colonnes qui n'ont pas lieu d’être dans la table "delivery_option_carrier" cela fonctionne mieux désormais au niveau de l'affichage.

 

Cependant il reste plusieurs problèmes il me semble :

 

1 - L'affichage du prix du transport n'est pas le bon pour "Europe" 24€ affiché au lieu de 12€.

2 - La commande peut toujours être validée et est scindée en 2 commandes #1 et #2. Est ce le fonctionnement normal?

3 - Des Frais de manutention TTC apparaissent dans les récapitulatifs des commandes, problème de traduction?

 

Merci d'avance.

 

post-407717-0-81621900-1473856900_thumb.jpg

post-407717-0-54064800-1473856904_thumb.jpg

post-407717-0-14325900-1473856907_thumb.jpg

post-407717-0-51390200-1473856909_thumb.jpg

post-407717-0-90077500-1473856911_thumb.jpg

post-407717-0-33475800-1473856914_thumb.jpg

Link to comment
Share on other sites

Même si il y a quelques éléments cohérents (24 = 20 + 20%, 12 = 10 + 20%), globalement c'est le bordel!

Le fait qu'il y ait deux commandes c'est "normal", c'est la façon de faire de PS: 1 commande par transporteur

Pour le reste, laissez-nous un peu de temps afin de reproduire et d'analyser (sauf si quelqu'un d'autre comprend immédiatement, ou a déjà travaillé dessus...)

Link to comment
Share on other sites

Ok, après une bonne journée de recherche...

 

Pour les frais de manutention c'est bien un problème de traduction :

Traduction Template ORDER-DETAIL -> Shipping & handling -> Frais de manutention à remplacer par "Livraison & Frais de manutention".

 

Le fait qu'il y ait 2 commandes générées si l'un des produits est hors zone est à mon avis pas normal, nous devrions avoir le message "Votre sélection ne peut pas être livrée par le(s) transporteur(s) disponible(s). Veuillez modifier votre panier pour continuer."

Si l'on regarde en détail la commande #1, elle n'a pas de transporteur valide.

Il me semble que des commandes multiples sont générées si le multiShipping est activé, une commande par adresse, là ok. Or depuis la version 1.6. quelque-chose, la fonctionnalité ne semble pas être maintenue.

J'ai actuellement 3 sites en 1.5 et il n'est pas possible de commander si l'un des produits ne peut être livré dans la zone de l'adresse sélectionnée.

 

Je suis donc parti du principe que cela était un dysfonctionnement.

 

Tout ça pour dire que... :)

 

Dans classes\Cart.php, function getDeliveryOptionList, ligne 2096,  j'ai remplacé :

 

if (count($packages) == 1 && count($package['carrier_list']) == 1 && current($package['carrier_list']) == 0)

 

par

 

if (count($package['carrier_list']) == 1 && current($package['carrier_list']) == 0)

 

Modification inspirée de la fonction getDeliveryOptionList de Presta 1.5.

 

Ce qui parait logique, si l'une des options de livraisons pour une adresse dans le panier a un transporteur non valide, renvoyer un array vide.

 

Si quelqu'un a une explication sur la condition "if count($packages) == 1" et son utilité, je suis preneur.

Est ce que cela peut être considéré comme une correction de bug? Je ne sais pas, je vous laisse en faire bon usage.

En tout cas pour moi le résultat est celui escompté.

 

Merci encore à erouvier29 pour l'attention qu'il a porté à ma requête.

 

Cordialement,

 

Greg.

Edited by GregFr24 (see edit history)
Link to comment
Share on other sites

EDIT: JE N'AVAIS PAS VU QUE VOUS AVIEZ TROUVE LA SOLUTION.

DESOLE...

 

 

En faisant la même manip sur un PS 1.6.1.6 vierge, j'obtiens quelque chose de légèrement différent, incorrect certes, mais cohérent:

  • La commande initiale est ventilée en 2 commandes
  • La commande unitaire avec transporteur compatible de la zone de livraison est ok (produits + frais de port)
  • L'autre commande ne mentionne aucun transporteur, ni frais de port

Donc maintenant, y a plus qu'à proposer une correction pour que la commande complète soit bloquée dans ce cas (totalité des transporteurs non disponible)...

 

Ce qui est étonnant chez vous, c'est l'application des frais du port de l'autre transporteur (Europe à 10€ HT + 20%) dans la commande qui ne peut pas être livrée. Quelle version de PS? Peut-être l'effet d'un module tiers? 

 

Quant à la mention "Frais de manutention" dans le suivi des commandes, il s'agit d'une erreur de traduction. La valeur affichée est celle des frais port globaux (incluant les frais de manutention éventuels). Vous pouvez corriger ça facilement:

  1. BO > Localisation > Traductions
  2. Type de traduuction = Front-office
  3. Bloc ORDER-DETAIL
  4. Expression "Shipping & Handling" => "Frais de port" au lieu de "Frais de manutention"
Edited by erouvier29 (see edit history)
Link to comment
Share on other sites

Dans classes\Cart.php, function getDeliveryOptionList, ligne 2096,  j'ai remplacé :

 
if (count($packages) == 1 && count($package['carrier_list']) == 1 && current($package['carrier_list']) == 0)
 
par
 
if (count($package['carrier_list']) == 1 && current($package['carrier_list']) == 0)
 
Modification inspirée de la fonction getDeliveryOptionList de Presta 1.5.
 
Ce qui parait logique, si l'une des options de livraisons pour une adresse dans le panier a un transporteur non valide, renvoyer un array vide.
 
Si quelqu'un a une explication sur la condition "if count($packages) == 1" et son utilité, je suis preneur.
Est ce que cela peut être considéré comme une correction de bug? Je ne sais pas, je vous laisse en faire bon usage.
En tout cas pour moi le résultat est celui escompté.

 

Vous pouvez proposer cette correction vous-même: https://github.com/PrestaShop/PrestaShop

Edited by erouvier29 (see edit history)
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...