Jump to content

Déclenché un événement lorsque statut passe en "Expédié"


Recommended Posts

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

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

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

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

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

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

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

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

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

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 by julesruru (see edit history)
Link to comment
Share on other sites

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

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