Jump to content

Problème commandes "liées"


Recommended Posts

Bonjour,

 

J'ai rencontré un problème : Deux commandes d'un même client ayant des ID différents mais la même référence! Cela provoque alors des avertissements de trop payé dans le cadre de paiement par exemple dans le détail de la commande #46 reference CHYKLPRYE :

"Attention : 30 € payé au lieu de 25,50 €

Cette avertissement concerne aussi la commande liée suivante : #45" (la commande #45 ayant aussi pour référence CHYKLPRYE)

 

J'avoue ne pas trop avoir compris pourquoi ces deux commandes se sont retrouvées avec la même référence et pourtant deux ID bien différents.... Depuis la mise en ligne de la boutique il y a deux mois, c'est déjà la troisième fois que cela nous arrive.

 

N'ayant pas trouvé d'explication ni de correction sur le net, je me suis dit que c'était peut être tout simplement que la génération de la référence de 9 lettres n'étaient peut être pas infaillible ou que le client a fait une certaine manipulation qui provoque ce bug et que je n'arrive pas à reproduire.

 

L'idée c'est donc que la référence soit unique du coup j'ai laissé la génération aléatoire de deux lettres à laquelle j'ai ajouté l'année, le mois, le jour, l'heure, les minutes et les secondes. Normalement avec ça, il ne devrait plus y avoir de référence identique pour deux commandes ayant des ID différents peu importe les causes du bug à la base.

 

J'ai résolu mon problème de la manière suivante :

 

En base :

- j'ai modifié le champ order_reference dans les table orders et order_payment. Avant, le champs était de type varchar(9) et je l'ai modifié en varchar(14)

 

Dans les fichiers :

- classes\order\OrderPayment.php = Ligne 48 j'ai remplacé par

'order_reference' => array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 14

- classes\order\Order.php = Ligne 1370 j'ai remplacé par

public static function generateReference()
{
return strtoupper(Tools::passwdGen(2, 'NO_NUMERIC')).date("ymdHis");
}

 

Ce qui donne des références de ce type : CK130524102411 . Ca fait une référence assez longue mais bon... Je n'ai pas trouvé mieux pour le moment.

 

Tout fonctionne correctement avec cette correction même si je doute que le problème vienne de la génération finalement car :

 

Dans le fichier de la fonction qui génère la reference, il y a ce commentaire :

/**
* Gennerate a unique reference for orders generated with the same cart id
* This references, is usefull for check payment
*
* @return String
*/

Je ne vois pas comment deux commandes peuvent être générées avec le même panier.... Quelqu'un sait-il comment cela est possible?

 

Si quelqu'un a une explication par rapport au bug de base ou si quelqu'un a une meilleure suggestion de correction, je suis toute ouïe ;)

 

Merci d'avance!

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

En fouinant un peu, il n'y a que l'envoi multiple qui peut scinder un panier en deux commandes.

Nous utilisons le multiboutique mais cette option d'envoi multiple est bien désactivée sur toutes nos boutiques... Donc ça ne devrait pas venir de là.

 

Quand le client passe une commande, son panier est vidé ensuite et même s'il repasse une commande juste après sans quitter le navigateur, cela créé bien une commande avec ID et reference différente donc ça ne vient pas de là non plus.

Link to comment
Share on other sites

 

J'avoue ne pas trop avoir compris pourquoi ces deux commandes se sont retrouvées avec la même référence et pourtant deux ID bien différents.... Depuis la mise en ligne de la boutique il y a deux mois, c'est déjà la troisième fois que cela nous arrive.

 

Hello,

 

Effectivement soit c'est un multishipping ou un souci de config multiboutique. Surtout si les montants sont scindés, sinon la seconde commande aurait le même montant. Deux commandes peuvent avoir la meme ref, mais auront toujours un id différent.

 

Normalement il n'est pas possible de valider une commande deux fois a partir du même numéro de panier par contre. En back office les deux commandes ont le même numéro de panier, le client n'a qu'un panier ? Un serveur de paiement peut appeler plusieurs fois validation.php parfois, mais normalement le numéro de panier empêche la seconde validation.

 

Même référence de commande, oui c'est une commande scindée d'une façon ou d'un autre. Agrandir le champ ne changera pas les choses. Il faudrait essayer de loguer l'appel de validation.php du module de paiement, en y insérant un envoi de mail ou en utilisant la classe de Log avec Logger::add() et voir les paramètres transmis par le serveur de paiement. Si il y a deux appels avec des montants différents ou si la scission de la commande est faite après la réponse du module de paiement.

 

Je pencherais que la scission se fait après ( sinon les commandes auraient le même montant donc), il faut revérifier les configs transporteurs, stocks avancés, quantité des produits, entrepôts. Si cela ne se répète que sur certaines commandes, il faut trouver le point commun a ces commandes, un produit, un transporteur, un entrepôt, une config des stock etc. Verifier également les options pour toutes les boutiques, le groupe des boutiques, et la boutique.

 

Cordialement

Link to comment
Share on other sites

Bonjour,

 

Je vous remercie pour votre réponse.

 

Effectivement, nous utilisons cash on delivery pour une des deux boutiques et pour l'autre, c'est le paiement par chèque. Mais nous avons constaté ce bug uniquement sur la boutique utilisant le cash on delivery pour le moment (il faut dire aussi qu'il y a beaucoup plus de commandes sur cette boutique que sur l'autre).

 

Vous pensez bien que j'ai épluché sous toutes les coutures les configurations des boutiques en BO ainsi que les paramètres des modules avant de poster ce sujet...

 

Les commandes n'avaient pas les mêmes transporteurs dans 2 cas sur les 3 cas bugués que nous avons constatés :

bdd_or10.jpg

 

C'est donc bien que le client a pu choisir deux transporteurs différents pour le mm id_cart. On dirait que dans ces cas précis, le client a eu accès au multishipping. Je ne sais pas par quel moyen car le multishipping est désactivé sur toutes les boutiques donc ça ne devrait pas pouvoir arriver.

 

Depuis l'ouverture du sujet, nous avons eu plus d'une centaine de nouvelles commandes et le bug n'ait pas réapparu.

 

Cordialement,

 

Edit :

 

Pour prouver ma bonne foi ;)

La seule chose qui change entre les boutiques au niveau de la commande c'est que sur la boutique où nous avons rencontré les problèmes, le type de processus de commande est "one page checkout".

 

multi_12.jpg

 

alafer10.jpg

 

pr10.jpg

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

Bonjour,

 

J'ai enfin trouvé d'où venait le problème!

 

Nous proposons sur notre boutique de la réservation de légumes à venir chercher à la ferme. Le client met les articles qu'ils souhaitent réserver dans son panier et à la fin, il choisit le jour de retrait (chaque jour est égal à un transporteur en fait). Il doit forcément commander au plus tard la veille.

 

Parfois, certains produits ne sont plus disponibles temporairement ou bien certains produits ne sont disponibles que certains jours. Par exemple, les paniers composés sont disponibles uniquement le vendredi et le samedi. En ce moment, les asperges ne sont disponibles qu'à partir de lundi jusqu'à jeudi prochain.

 

Nous sommes samedi et le client souhaite faire une réservation de légumes pour la semaine prochaine. Si le client met dans son panier un panier composé et des asperges, il s'avère qu'au final aucun jour de retrait unique n'est disponible pour les deux articles.

 

Du coup, j'ai réussi à provoquer le bug. A la fin, au moment de proposer les transporteurs et dans ce cas bien précis où il n'y a pas de tranporteur commun possible pour chaque article, cela affiche un transporteur par groupe d'articles. Dans mon exemple, cela affichera "Vendredi - Produit concerné : Panier composé" et "Mardi - Produit concerné : Asperge" (et pas lundi d'ailleurs, ce qui est bizarre aussi enfin bref). (L'affichage de ces lignes se passe ligne 209 du fichier order-carrier.tpl.)

 

Ca ressemble fort à une autre forme de multishipping et donc, si on a désactivé le multishipping, ça ne devrait pas se passer comme ça. Ca devrait tout simplement afficher la traduction de "No carriers available.".

 

Il me faut donc trouver maintenant où cela se "décide" dans le BO si un paramètre existe pour ce cas. Sinon, je vais regarder dans le code.

 

Si quelqu'un a une idée, je suis toute ouïe ;) Merci d'avance!

Edited by Yaku (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 9 years later...

10ans plus tard et en prestashop 1.7.6 toujours ce bug !

bonjour à tous, j'ai eu ce matin une commande d'un clien avec la meme ref 

il a payé en une seule fois et tout les produits étaient bien dispo mais il a pu choisir 2 transporteurs différents pour sa commande (?)

j'avoue que sur ce coup la ça m'étonne que presta aie encore des bug comme ceci 10ans après

si quelqu'un a une réponse à m'apporter

 

image.png

Link to comment
Share on other sites

Il y a 2 heures, webmaster41 a dit :

10ans plus tard et en prestashop 1.7.6 toujours ce bug !

bonjour à tous, j'ai eu ce matin une commande d'un clien avec la meme ref 

il a payé en une seule fois et tout les produits étaient bien dispo mais il a pu choisir 2 transporteurs différents pour sa commande (?)

j'avoue que sur ce coup la ça m'étonne que presta aie encore des bug comme ceci 10ans après

si quelqu'un a une réponse à m'apporter

 

image.png

Ce n'est pas un bug, mais une fonctionnalité, si tous les produits d'un panier n'ont pas tous les transporteurs à associées, alors il va proposer les transporteurs correspondant aux produits du panier et diviser la commande en plusieurs commandes puisque plusieurs transporteurs.

Link to comment
Share on other sites

50 minutes ago, Mediacom87 said:

Ce n'est pas un bug, mais une fonctionnalité, si tous les produits d'un panier n'ont pas tous les transporteurs à associées, alors il va proposer les transporteurs correspondant aux produits du panier et diviser la commande en plusieurs commandes puisque plusieurs transporteurs.

et comment désactiver cette fonctionnalité ? pourtant tout mes produits on les mêmes transporteurs je ne vois pas bien comment cela peut fonctionner 

Link to comment
Share on other sites

Il y a 2 heures, webmaster41 a dit :

et comment désactiver cette fonctionnalité ? pourtant tout mes produits on les mêmes transporteurs je ne vois pas bien comment cela peut fonctionner 

Normalement il suffit de n'associer aucun transporteur aux produits.

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