Skip to main content

Problème sur Order API

More
5 years 10 months ago #326249 by clicetcom
-- HikaShop version -- : 4.4.0
-- Joomla version -- : 3.9.22
-- PHP version -- : 7.3

Bonjour,

Je chercher à développer un plugin simple qui va lancer un process à la création d'une commande.

Pour réaliser mes tests j'ai fait un plugin test qui se lance sur function onAfterOrderUpdate(&$order,&$send_email), premier problème concernant cette fonction, elle ne s'exécute que lors du passe en passage en statut "annulé" tous les autres statut ne déclenchent pas ?

Le but étant finalement de l'exécuter avec onAfterOrderCreate(&$order,&$send_email) ou onAfterOrderConfirm(&$order,&$methods,$method_id) pour ne lancer qu'a la création de la commande via le frontoffice, mais ca ne s'exécute pas non plus.

Je passe surement à coté d'un truc, si qqun a une idée ?

Le plugin est installé, ci-dessous le code
Code:
<?php defined('_JEXEC') or die('Restricted access'); ?><?php class plgHikashopCncPlgCmd extends JPlugin { function onAfterOrderUpdate(&$order,&$send_email) { $orderClass= hikashop_get('class.order'); $orderInDB = $orderClass->loadFullOrder($order->order_id); $db = JFactory::getDBO(); foreach($order->products as $product) { $productClass = hikashop_get('class.product'); $productData = $productClass->get($product->product_id); //test echo $orderInDB->order_number;echo "--"; //test echo $productData->product_weight; //test echo $productData->description; //test var_dump($productData); //test echo $orderInDB->order_full_price; $db->setQuery("INSERT INTO `cc_hikashop_order_ebp` (`order_id`, `order_full_price`, `nom`) VALUES ('".$orderInDB->order_number."', '".$orderInDB->order_full_price."', '".$productData->product_name."');"); $db->execute(); } } }


Merci d'avance.

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

More
5 years 10 months ago #326272 by nicolas
Replied by nicolas on topic Problème sur Order API
Bonjour,

Non, n'importe quel changement de statut de commande va appeler les fonctions onAfterOrderUpdate des plugins du groupe hikashop et system.
Donc pour moi c'est un soucis avec votre plugin.
Mais avec juste le code fourni je ne vois pas de soucis.
Peut être est-ce lié au nom de votre class plgHikashopCncPlgCmd et ce qu'il y a dans le XML du plugin.
Pourriez-vous fournir une cpoie du XML ?

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

More
5 years 10 months ago #326276 by clicetcom
Replied by clicetcom on topic Problème sur Order API
Bonjour Nicolas,

Oui surtout que le bout de code fonctionne, mais uniquement en passant d'un statut lambda vers annulé. Test refait à l'instant avec ce plugin passage de annulé à confirmer : rien, repassage de confirmer à annuler : remplissage de la base.

Je suis repartit d'une copie du plugin history à la base.

ci-joint le xml
Code:
<?xml version="1.0" encoding="utf-8"?> <extension type="plugin" version="2.5" method="upgrade" group="hikashop"> <name>Hikashop Clicetcom Plugin</name> <creationDate>22 octobre 2020</creationDate> <version>4.4.0</version> <author>clicetcom</author> <authorEmail>dev@hikashop.com</authorEmail> <authorUrl>http://www.hikashop.com</authorUrl> <copyright>(C) 2010-2020 HIKARI SOFTWARE. All rights reserved.</copyright> <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license> <description>Plug test</description> <files> <filename plugin="cncplgcmd">cncplgcmd.php</filename> </files> </extension>

et le plugin
Code:
<?php /** * @package HikaShop for Joomla! * @version 4.4.0 * @author hikashop.com * @copyright (C) 2010-2020 HIKARI SOFTWARE. All rights reserved. * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html */ defined('_JEXEC') or die('Restricted access'); ?><?php class plgHikashopCncPlgCmd extends JPlugin { function onAfterOrderUpdate(&$order,&$send_email) { $orderClass= hikashop_get('class.order'); $orderInDB = $orderClass->loadFullOrder($order->order_id); $db = JFactory::getDBO(); foreach($order->products as $product) { $productClass = hikashop_get('class.product'); $productData = $productClass->get($product->product_id); //test echo $orderInDB->order_number;echo "--"; //test echo $productData->product_weight; //test echo $productData->description; //test var_dump($productData); //test echo $orderInDB->order_full_price; $db->setQuery("INSERT INTO `cc_hikashop_order_ebp` (`order_id`, `order_full_price`, `nom`) VALUES ('".$orderInDB->order_number."', '".$orderInDB->order_full_price."', '".$productData->product_name."');"); $db->execute(); } } }

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

More
5 years 10 months ago #326288 by nicolas
Replied by nicolas on topic Problème sur Order API
Bonjour,

Je pense que le soucis vient bien du nom de la class de votre plugin.
D'après votre XML, le nom devrait être plgHikashopCncplgcmd et non plgHikashopCncPlgCmd

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

More
5 years 10 months ago #326306 by clicetcom
Replied by clicetcom on topic Problème sur Order API
Merci pour votre retour Nicolas, j'ai changé le nom de classe comme indiqué mais cela ne change rien au comportement.

J'ai désinstallé le plugin, réinstallé. Le plugin de s'exécute que lors du passage en statut 'annulé', je suis perplexe... s'il ne s'exécutait jamais je chercherais l'erreur ailleurs, mais la, il fonctionne bien en passage au statut annulé. je ne comprend même pas comment le trigger onAfterOrderUpdate ne peut se lancer que dans ce cas.

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

More
5 years 10 months ago #326312 by nicolas
Replied by nicolas on topic Problème sur Order API
Peut être que le soucis vient de la manière dont vous faite vos tests ?
Comment changez vous le statut de la commande ?
Comment vérifiez vous que le plugin est appelé ?

Le mieux c'est d'ajouter la ligne:
hikashop_writeToLog('du statut '.$order->old->order_status.' au statut '.@$order->order_status);
au début de votre fonction onAfterOrderUpdate
Cela va ajouter une ligne au fichier de log de paiement d'Hikashop (disponible dans la section "fichiers" de la configuration).
Ainsi, vous pourrez facilement voir si le plugin est appelé ou non, peu importe comment vous faites vos tests, en vérifiant le contenu du fichier de log après le test.

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

More
5 years 10 months ago - 5 years 10 months ago #326340 by clicetcom
Replied by clicetcom on topic Problème sur Order API
Bonjour Nicolas,

Merci pour l'astuce du log, ca me confirme mon incompréhension du pb.

Je réalisais mes tests avec une requête d'insert dans ma base et j'en contrôle le remplissage après chaque exécution. Je réalise le changement de statut via le listing de commande dans le backoffice.

J'ai donc intégré
Code:
hikashop_writeToLog('du statut '.$order->old->order_status.' au statut '.@$order->order_status);

En début de fonction et un autre dans ma boucle foreach et je constate qu'en fait, ma boucle ne s'exécute que lors du passage en statut cancel, ce que je ne comprend pas à vrai dire.

Ci-joint le résultat du log, pour le passage d'une commande avec 2 articles de refounded à confirmed puis a cancel puis à confirmed

11.24.20 08:53:31
du statut refunded au statut confirmed
11.24.20 08:55:32
du statut confirmed au statut cancelled
11.24.20 08:55:32
du statut confirmed au statut cancelled
11.24.20 08:55:32
du statut confirmed au statut cancelled
11.24.20 08:56:36
du statut cancelled au statut confirmed

Voyez-vous une raison pour que la trigger n'exécute la boucle que lors du passage en cancel?

Je vous remet en joint l'exact code en place pour ce test, on ne peut plus simple du coup il me semble.
Code:
<?php /** * @package HikaShop for Joomla! * @version 4.4.0 * @author hikashop.com * @copyright (C) 2010-2020 HIKARI SOFTWARE. All rights reserved. * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html */ defined('_JEXEC') or die('Restricted access'); ?><?php class plgHikashopCncplgcmd extends JPlugin { function onAfterOrderUpdate(&$order,&$send_email) { hikashop_writeToLog('du statut '.$order->old->order_status.' au statut '.@$order->order_status); foreach($order->products as $product) { hikashop_writeToLog('du statut '.$order->old->order_status.' au statut '.@$order->order_status); } } }

Merci par avance.
Last edit: 5 years 10 months ago by clicetcom.

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

More
5 years 10 months ago #326343 by nicolas
Replied by nicolas on topic Problème sur Order API
Bonjour,

Ah oui, je comprends le soucis.
Vous utilisez $order->products
Mais dans $order vous avez juste l'id de la commande et les informations de la commande qui sont changés.
Le code
Code:
$orderClass= hikashop_get('class.order'); $orderInDB = $orderClass->loadFullOrder($order->order_id);
était donc une bonne idée pour charger toutes les infos de la commande, mais il fallait aussi utiliser $orderInDB->products au lieu de $order->products
The following user(s) said Thank You: clicetcom

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

More
5 years 9 months ago #326505 by clicetcom
Replied by clicetcom on topic Problème sur Order API
Ha mais oui !

Merci bcp Nicolas !

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

Time to create page: 0.225 seconds
Powered by Kunena Forum