julesruru Posted October 2, 2015 Share Posted October 2, 2015 Bonjour je souhaiterai savoir comment faire en sorte de déclencher une fonction lorsque mon statut de commande passe à "Expédié". J'ai pu voir que cela se faisait avec le hook (hookUpdateOrderStatus) et les tables ps_order_state et ps_order_state_lang mais est-ce que je pourrai avoir un peu plus de précision ? Je travaille sur la conception d'un module actuellement. J'ai pu voir cet exemple mais je ne sait pas si ceci est correct : public function hookActionOrderStatusUpdate($params) { if($params['newOrderStatus']->id == 2) { if(!$this->doSomething()) return false; } return /*function for changing order's state*/; } Merci de votre aide ! Link to comment Share on other sites More sharing options...
Eolia Posted October 2, 2015 Share Posted October 2, 2015 si le statut 2 correspond bien à "expédié" oui, autrement utilisez : if($params['newOrderStatus']->id == (int)Configuration::get('PS_OS_DELIVERED')) Link to comment Share on other sites More sharing options...
julesruru Posted October 2, 2015 Author Share Posted October 2, 2015 (edited) En réalité le statut shipped correspond à l'id 4 et 5. C'est un peu bizarre. A quoi correspond PS_OS_DELIVERED ? Edited October 2, 2015 by julesruru (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted October 2, 2015 Share Posted October 2, 2015 DELIVERED correspond à livré mais dans votre cas ce serait plutôt PS_OS_PREPARATION (prépa en cours) ou PS_OS_SHIPPING (En cours de livraison et/ou expédié) Link to comment Share on other sites More sharing options...
julesruru Posted October 2, 2015 Author Share Posted October 2, 2015 (edited) Je pense plus à PS_OS_SHIPPING du coup car j'essaie d'envoyer un sms lorsque la livraison à été expédié. Est-ce que ceci pourrai fonctionner : if($params['newOrderStatus']->id == (4|5)Configuration::get('PS_OS_SHIPPING')) ? Merci de votre aide ! Edited October 2, 2015 by julesruru (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted October 2, 2015 Share Posted October 2, 2015 non, là vous allez avoir une belle erreur, mettez ça et ça fonctionnera pour les 2 statuts 4 et 5 : $avalaible_status = array((int)Configuration::get('PS_OS_SHIPPING'),(int)Configuration::get('PS_OS_DELIVERED')); $new_status = (int)$params['newOrderStatus']->id; if( in_array($new_status, $avalaible_status)) { .... } Link to comment Share on other sites More sharing options...
julesruru Posted October 2, 2015 Author Share Posted October 2, 2015 A aucun moment ici je lui précise quel id il doit prendre si ? Pour moi ce serai : static function notif(){ $avalaible_status = array((int) Configuration::get('PS_OS_SHIPPING'), (int) Configuration::get('PS_OS_DELIVERED')); $new_status = (int) $params['newOrderStatus']->id; if( in_array($new_status, $avalaible_status)) { testEnvoieSmsNotification(); } } Link to comment Share on other sites More sharing options...
Eolia Posted October 2, 2015 Share Posted October 2, 2015 euh... mais c'est quoi la question ??? Là vous avez greffé l'action au moment ou la commande change de statut. Si le statut correspond à en cours de livraison ou expédié, vous faites tourner votre code, mais je ne sais pas ce que vous voulez faire... Link to comment Share on other sites More sharing options...
julesruru Posted October 2, 2015 Author Share Posted October 2, 2015 Je veux envoyé un sms au client lorsque le statut passe à "expedié". Si je le fais aussi pour "en cours de livraison" ça me fait envoyer deux messages, il vaut mieux que je ne conserve que "expédié". Link to comment Share on other sites More sharing options...
Yann - Prestaplugins Posted October 4, 2015 Share Posted October 4, 2015 Bonsoir julesruru, Il existe déjà des modules pour ça, ils ne vous conviennent pas ? Link to comment Share on other sites More sharing options...
julesruru Posted October 5, 2015 Author Share Posted October 5, 2015 Oui j'ai vu qu'il y a déjà des modules mais c'est pas mon but, je vous remercie. J'ai donc éssayé de faire ceci : static function notif(){ $avalaible_status = array((int) Configuration::get('PS_OS_SHIPPING')); $new_status = (int) $params['newOrderStatus']->id; if( in_array($new_status, $avalaible_status)) { $this->testEnvoieSmsNotification(); } } Mais ça n'a pas l'air de fonctionner. Est-ce que j'ai bien fait les choses ? Link to comment Share on other sites More sharing options...
Eolia Posted October 5, 2015 Share Posted October 5, 2015 Humm... vous avez changé des éléments... Ou est passé "public function hookActionOrderStatusUpdate($params)" ? Pourquoi votre nouvelle fonction est-elle statique ? (savez-vous au moins ce que cela signifie ?) Ensuite, tout dépend ce que fait $this->testEnvoieSmsNotification(); ? Cette fonction existe dans la même page de code ? Faites le test en remplaçant : $this->testEnvoieSmsNotification(); par d('ok, hook déclenché'); Link to comment Share on other sites More sharing options...
julesruru Posted October 5, 2015 Author Share Posted October 5, 2015 Sachant que je travail en MVC, toutes mes fonctions sont en static mais sachant que celle-ci ne sera pas appelée ailleurs je peux la laisser en public c'est vrai. Oui testenvoiesms est relié à une api et est dans la même page et fonctionne déjà dans les cas précédents. J'ai remplacé $this->testEnvoieSmsNotification(); par d('ok, hook déclenché'); Aucun message "hook déclenché" ne m'est retourné Link to comment Share on other sites More sharing options...
Eolia Posted October 5, 2015 Share Posted October 5, 2015 ben oui, mais là vous appellez $new_status = (int) $params['newOrderStatus']->id; dans une fonction ou $params n'existe pas, alors ca ne peut pas marcher... Link to comment Share on other sites More sharing options...
julesruru Posted October 5, 2015 Author Share Posted October 5, 2015 Si si j'ai bien : public function hookActionOrderStatusUpdate($params) { $avalaible_status = array((int) Configuration::get('PS_OS_SHIPPING')); $new_status = (int) $params['newOrderStatus']->id; if( in_array($new_status, $avalaible_status)) { d('ok, hook déclenché'); } } Link to comment Share on other sites More sharing options...
Eolia Posted October 5, 2015 Share Posted October 5, 2015 Alors faites un debug complet, pas à pas pour voir ce qui se passe: public function hookActionOrderStatusUpdate($params) { p($params); $avalaible_status = array((int) Configuration::get('PS_OS_SHIPPING')); $new_status = (int)$params['newOrderStatus']->id; p($new_status); if( in_array($new_status, $avalaible_status)) { d('ok, hook déclenché'); } } Link to comment Share on other sites More sharing options...
julesruru Posted October 5, 2015 Author Share Posted October 5, 2015 (edited) Lorsque je change l'état de la commande dans le back-office j'ai bien : "Une erreur est survenue lors du changement d'état et/ou de l'envoi de l'e-mail au client" Mais aucune autre erreur et le debug est sensé s'afficher où ? Car je n'ai rien non plus dans le code source. Merci de votre aide. Edited October 5, 2015 by julesruru (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted October 5, 2015 Share Posted October 5, 2015 Commencez par afficher les erreurs PS en modifiant cette ligne au début du fichier config/defines.inc.php : define('_PS_MODE_DEV_', false); par define('_PS_MODE_DEV_', true); Ensuite le debug devrait s'afficher en pleine page navigateur, mais il y a peut-être d'autres soucis sur votre script... Link to comment Share on other sites More sharing options...
julesruru Posted October 5, 2015 Author Share Posted October 5, 2015 J'ai trouvé mon erreur, elle venait du fait que dans l'installation j’appelais mon hook : hookActionOrderStatusUpdate à la place de ActionOrderStatusUpdate Je vous remercie de votre aide précieuse ! Cordialement. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now