Coupon code non mis à jour dans la base

  • Posts: 246
  • Thank you received: 5
9 years 11 months ago #157802

-- HikaShop version -- : 2.3.0
-- Joomla version -- : 3.3
-- PHP version -- : 5.4

Bonjour,

Les mécanismes liés au coupon fonctionnent bien jusqu'au checkout. Il se calcule et s'affiche dans le front avec toutes les bonnes informations. Par contre, dans les factures (front ou back) il n'apparaît pas sur une ligne spécifique bien que les totaux soient bons. En fait, dans la table "order", la colonne "order_discount_code" reste à "0" au lieu d'avoir le coupon attribué. Ce qui fait que la facture "décide" de ne pas imprimer la ligne affichant le coupon. Par contre dans la table "cart" la colonne "cart_coupon" est bien remplie. Il y a-t-il une raison liée à un paramètrage pour que la table ne soit pas mis à jour ou s'agit-il d'un bug ?

PS : le coupon est paramétré pour être attribué automatiquement. Il n'est pas rentré manuellement.

Please Log in or Create an account to join the conversation.

  • Posts: 26025
  • Thank you received: 4006
  • MODERATOR
9 years 11 months ago #157926

Bonsoir,

Il va nous falloir un peu plus de détails sur votre configuration afin de pouvoir investiger et tenter de reproduire votre problème.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 246
  • Thank you received: 5
9 years 11 months ago #158032

Il y a deux coupons créés (on n'utilise plus les remises) :



Le détail du coupon "-30%" qui n'est appliqué qu'à un seul groupe d'utilisateurs Joomla :




Au moment de commander sur le front, l'affichage du récap de la commande affiche bien le coupon attribué automatiquement et calcul la bonne remise qui est affichée en pied de page (si on regarde la table "cart" en base de données à ce moment là, le code coupon est bien renseigné) :




Une fois qu'on valide la commande et qu'on passe à l'affichage de toutes les commandes pour voir la facture, les totaux sont bons mais la ligne "coupon" n'est plus affichée. C'est "normal" puisque dans la table "order" le code discount est à "0" :




A noter que le paramètrage général stipule que le panier est supprimé au moment de la validation de la commande.

Si nécessaire je peux vous transmettre les codes d'accès par messagerie ou autre.

Laurent

Attachments:

Please Log in or Create an account to join the conversation.

  • Posts: 26025
  • Thank you received: 4006
  • MODERATOR
9 years 11 months ago #158124

Bonjour,

Et qu'en est-il de la commande dans le backend ?
Sinon, vous parlez du "order_discount_code" qui serait à "0" mais pas du "order_discount_price".

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 246
  • Thank you received: 5
9 years 11 months ago #158143

Le order_discount_price est bon lui. C'est d'ailleurs de cette façon que j'ai fait un "patch" sur invoice.php en testant sur cette valeur plutôt que sur le code. Mais comme j'aimerais récupérer ce code pour l'afficher dans la facture à la place du mot "coupon", cela me manque.
C'est pareil dans le back-end.

Please Log in or Create an account to join the conversation.

  • Posts: 246
  • Thank you received: 5
9 years 11 months ago #158887

Bonjour,

Je me permets de vous relancer sur ce point car j'aimerais pouvoir modifier invoice.php pour afficher le code coupon plutôt que la constante "Coupon" dans la facture. Or, je pense qu'il faut que la table en BDD soit à jour pour que je puisse récupérer la bonne valeur. Je ne pense pas que ce code puisse être dans un objet disponible à ce moment là ?

Please Log in or Create an account to join the conversation.

  • Posts: 81642
  • Thank you received: 13089
  • MODERATOR
9 years 11 months ago #158994

Bonjour,

Alors le code coupon est ajouté dans la commande via la ligne:
$order->order_discount_code = @$cart->coupon->discount_code;
dans le fichier components/com_hikashop/controllers/checkout.php
il serait intéressant d'afficher la valeur de la variable à ce moment pour confirmer que le problème est après, durant la sauvegarde vers la base de données.
Si c'est le cas, vue que l'insertion dans la base de données pour le code coupon est faite en même temps que les autres informations, cela signifie qu'il doit y avoir un plugin implémentant la fonction onBeforeOrderCreate qui enlève le coupon de la commande (plugins du groupe : hikashop , hikashoppayment ou system ), ou alors une modification dans le code d'HikaShop qui engendre cela.
Je n'ai par contre pas entendu parlé d'un tel soucis jusqu'à maintenant autre que pour vous, donc cela ressemble à un soucis avec une modification/un plugin que vous auriez rajouté de votre coté.

Please Log in or Create an account to join the conversation.

  • Posts: 246
  • Thank you received: 5
9 years 11 months ago #159059

Bonjour,

Effectivement, à ce stade, le coupon est bon (cf. capture). A part invoice.php, on n'a pas touché au code hikashop. Les plugins activés sont très standards (paiement par chèque, virement, livraison manuelle).. La seule chose est qu'il s'agit d'une association qui ne facture pas la TVA. Est-ce que cela pourrait être lié à la façon dont le panier est transformé en commande en fonction d'un test sur la TVA ? dans quelle partie du code pourrais-je chercher ?

Attachments:

Please Log in or Create an account to join the conversation.

  • Posts: 81642
  • Thank you received: 13089
  • MODERATOR
9 years 11 months ago #159086

Bonjour,

Alors rajoutez des affichages de $order->order_discount_code dans la fonction save de administrator/components/com_hikashop/classes/order.php pour voir à quel moment le code disparaît.

Please Log in or Create an account to join the conversation.

  • Posts: 246
  • Thank you received: 5
9 years 11 months ago #159217

Il semble que la function Save soit appelée deux fois. La première avec la bonne info. La seconde sans. J'ai "tracé" la variable tout au long de cette fonction. Et c'est bien dès le début qu'elle n'est pas transmise la seconde fois.
Cette deuxième occurrence du "save" est-elle "normale" ? Si oui pourquoi est-ce vide la seconde fois ? Si, non d'où cela peut-il provenir selon vous ? J'avoue que je peine à rentrer dans votre code. Ce n'est pas un petit bout de script ! :-)

Ma commande de test n'a qu'un produit, qu'un coupon.... basique

Attachments:

Please Log in or Create an account to join the conversation.

  • Posts: 81642
  • Thank you received: 13089
  • MODERATOR
9 years 11 months ago #159223

Intéressant.

Ajoutez voir ce code:
if(isset($order->order_discount_code) && empty($order->order_discount_code)){
var_dump(debug_backtrace());
}

cela va fournir la pile d'exécution du code dans le cas où order_discount_code est vide et l'on pourra comprendre par où ça passe (il est préférable de regarder le backtrace dans l'HTML de la page ou de faire un htmlentities dessus, sinon c'est illisible).

Please Log in or Create an account to join the conversation.

  • Posts: 246
  • Thank you received: 5
9 years 11 months ago #159303

Je ne sais pas si on progresse mais au deuxième passage " isset($order->order_discount_code)" renvoie "false", j'ai donc modifié votre test pour ne faire le backtrace que si la variable est vide. Et là j'ai un internal server error au bout de 10 secondes environ. Soit la pile est "zarbi", soit il n'est pas possible d'appeler cette fonction sur une variable non initialisée ?
Quoiqu'il en soit, le fait qu'elle soit "désetée" lors du deuxième appel est étrange.

Si cela peut vous donner une piste, lorsque je "termine ma commande" en front, il m'affiche le récap du panier avec le coupon automatiquement attribué (là, tout est ok). Mais si je clique sur la croix pour supprimer le coupon, il rafraîchit l'écran et m'indique un message "joomla" : "coupon supprimé" mais il est toujours là. Je voulais le rentrer à la main pour voir si cela faisait une différence. J'ai donc désactivé l'option d'affectation automatique. Là je peux mettre le coupon que je veux. Mais j'ai toujours le même symptôme du double passage dans "save", une fois avec les bonnes valeurs et la seconde à "0".

Dans ce cas, si je ne saisis aucun coupon. Il passe deux fois par "save" avec les deux fois les mêmes "valeurs" (0) :

Attachments:

Please Log in or Create an account to join the conversation.

  • Posts: 81642
  • Thank you received: 13089
  • MODERATOR
9 years 11 months ago #159326

Si vous avez une internal server error avec le var_dump de la pile d'execution, c'est juste que la pile est grosse pour les limites de mémoire/temps d'execution de votre serveur.
Une solution simple sera d'augmenter ces options du php.ini si possible.

Le fait qu'elle soit "desetée" est positif car pour les mises à jour d'information de commande, le système ne mettra à jour que les variable qui sont "settées". Le soucis, c'est que quelque chose passe cette variable à 0 entre votre apchea 4 et votre apchea 5 et du coup le système met à jour la colonne avec 0 dans la base de données.
La question est donc qu'y a-t-il entre ces deux traces?

Please Log in or Create an account to join the conversation.

  • Posts: 246
  • Thank you received: 5
9 years 11 months ago #159351

Le fichier résultat du backtrace fait 216 000 lignes et 9mo ! Pas chaud pour le mettre sur le forum. Il contient "tout le site".
Le passage de unset à 0 se fait aux alentours des lignes 130 :

if($new) {
			echo "apchea 42 : $order->order_discount_code<br/>";		
			$dispatcher->trigger('onBeforeOrderCreate', array(&$order, &$do) );
		} else {
			echo "apchea 43 : $order->order_discount_code<br/>";		
			$dispatcher->trigger('onBeforeOrderUpdate', array(&$order, &$do) );
		}
		echo "apchea 5 : $order->order_discount_code<br/>";
En fait $new est false et il fait le 'onBeforeOrderUpdate'. Au retour la variable vaut 0 :

Attachments:

Please Log in or Create an account to join the conversation.

  • Posts: 81642
  • Thank you received: 13089
  • MODERATOR
9 years 11 months ago #159400

Mes soupçons de mon premiers messages ( www.hikashop.com/forum/5-support-en-fran...-la-base.html#158994 ) sont donc confirmés. Le order_discount_code est set à 0 via un trigger onBeforeOrderUpdate d'un des plugins de votre site.
Pour trouver le coupable, il va falloir être méthodique. Désactivez un à un les plugins HikaShop/HikaShoppayment/System et faite un test à chaque fois jusqu'à ce que cela fonctionne et vous aurez votre coupable.

Please Log in or Create an account to join the conversation.

  • Posts: 246
  • Thank you received: 5
9 years 11 months ago #159422

pfff.... il s'agissait d'une massaction sur les commandes qu'on avait testée au tout début. L'action n'est pas valide et met à jour le coupon avec quelque chose d'erroné qui est "traduit" par zéro. J'y ai pensé dès que j'ai vu qu'en désactivant le plugin en question cela supprimait "l'erreur". J'aurais pu y penser mais cela remontait à plusieurs semaines. Dommage que cela ne vous est pas fait "tilt", vous étiez sûr du onBeforeOrderUpdate mais vous aviez oublié cette puissante fonction d'hikashop.... :-)

Merci de m'avoir aidé dans cette recherche. Ce fût long mais instructif...

Please Log in or Create an account to join the conversation.

Time to create page: 0.128 seconds
Powered by Kunena Forum