Jump to content

Requète SQL après commande


Recommended Posts

Bonjour à tous,

 

J'aimerais envoyer une requête SQL juste après une commande passée sur ma boutique.

 

Il s'agit de cette commande, qui me sert à mettre à jour le stock entre deux base de donnée:

UPDATE Base1.Table1 Base2.Table2
SET Base1.Table1.ChampA = Base2.Table2.ChampX
WHERE Base1.Table1.ChampB = Base2.Table2.ChampY

J'aimerais donc, après une commande passée, appeler un fichier php contenant ma requête.. Mais je n'y connais rien !

 

Une petite idée ?

 

Merci beaucoup !

A++

Link to comment
Share on other sites

Pour te documenter

Tu peux te baser sur le module mailalerts, il contient tout ce qu'il faut (et même trop de choses)

 

Pour démarrer sur un module vierge que tu appelleras synchro_stock par exemple tu peux aller voir

 

http://emilienmalbranche.fr/prestashop-ecommerce-tutoriels/tutoriels/lecon-3-creer-un-module-sous-prestashop/

 

Il y a un générateur de module vide, des fois un peu compliqué à trouvé dans le zip mais sinon très bien.

 

Voilà au boulot :)

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

  • 2 weeks later...

Bonjour,

 

J'ai bien suivit le tuto et créé un module avec simplemement un fichier php contenant une requête SQL permettant de faire ma mise à jour.

 

J'ai attaché ce module à mon hookNewOrder. Après une commande, la requête SQL fonctionne bien mais sur mon Front Office, j'ai un message "Etat de commande invalide" ! La commande est en statut "annulé" dans le BO.

 

Pourquoi un tel souci ? Faut-il que je m'attache à un autre hook ?

 

Merci

 

Solution de contournement:

 

J'ai directement mis ma requête SQL dans le fichier order-confirmation.php et cela fonctionne. Qu'en pensez-vous ? Est-ce une solution propre que je peux laisser ?

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

Bonjour Tristars

 

La méthode c'était :

 

public function hookActionValidateOrder($params)

J'avais recommandé cette méthode avec le hook le plus 'tardif' sur la commande.

New order est lancé avant c'est donc moins bien et moins prudent dans ce cas, comme tu as pu le constater :)

 

Le mieux reste un hook dans un module avant l'override et bien bien avant la modif d'un fichier (pas propre :P ).

 

Ca va hypermarcher ;)

Link to comment
Share on other sites

J'ai donc modifié mon module avec la fonction install suivante:

public function install()
	{
		if(!parent::install()
			|| !$this->registerHook('updateProduct')
			|| !$this->registerHook('ActionValidateOrder'))
			return false;
		return true;
	}

Puis la fonction HookActionValidateOrder suivante:

public function hookActionValidateOrder($params){
		
		//ma requête sql
		
	}

Après une commande, je n'ai plus d'erreur dans le Front Office et la commande n'est plus en status "annulé" dans le BO. Ceci est une bonne chose ! Mais ma requête SQL ne s'applique pas ! Comme si la fonction hookActionValidateOrder n'était pas appelée..

 

(A savoir que ma requête SQL fonctionne bien avec la fonction hookUpdateProduct lors de la modification du produit en BO)

 

Une idée de mon erreur ?

Link to comment
Share on other sites

Si j'ai bien compris, je met ce var_dump après ma requète SQL comme ceci:

public function hookActionValidateOrder($params){
	
		//requête SQL
		
		var_dump($params);
		exit;
		
	}

Si c'est bien cela, ça ne fonctionne toujours pas.. :(

 

Une autre idée ? Merci pour ton aide !

Link to comment
Share on other sites

 

Si il n'y a pas de dump à l'écran, Prestashop ne sait pas qu'il faut appeler ton hook.

 

Je ne comprend pas ce que tu veux dire par la ? Qu'est ce qu'un dump à l'écran ?

 

Voici le code entier de mon module, peut être vas-tu trouver une erreur ? L'installation semble se dérouler normalement..

<?php
if (!defined('_PS_VERSION_'))
  exit;

class Synchro_stock extends Module
{
	public function __construct()
		{
			$this->name = 'synchro_stock';
			$this->tab = 'Synchro';
			$this->version = 1.0;
			$this->displayName = $this->l('Synchro Stock');
			$this->description = $this->l('Synchronise le stock lors dune commande');
	 
			parent::__construct();
		}
		
	public function install()
	{
		if(!parent::install()
			|| !$this->registerHook('updateProduct')
			|| !$this->registerHook('ActionValidateOrder'))
			return false;
		return true;
	}
 
	public function uninstall()
 	{
 	 	if (!parent::uninstall())
 	 		return false;
		return true;
 	}
	
	public function hookUpdateProduct($params){
		
		// requête SQL
		
	}
	
	public function hookActionValidateOrder($params){
	
		// requête SQL
		
		var_dump($params);
		exit;
		
	}
	
}
?>

De plus, si le module était mal installé, il ne fonctionnerait pas non plus sur le hookUpdateProduct, or ici tout fonctionne sur ce hook !

 

Le hookActionValidateOrder ne s'applique donc pas ici ?

Link to comment
Share on other sites

Tu n'avais pas dit que le  hook UpdateProduct fonctionnait. :ph34r:

 

 

|| !$this->registerHook('ActionValidateOrder'))

à changer par (a minuscule) :

 

|| !$this->registerHook('actionValidateOrder'))

 

Un dump (ou résultat du var_dump) c'est un affichage brut du contenu d'une variable, un objet, un tableau.

C'est juste pour le debug.

 

Pense à réinitialiser ton module dans le BO

 

Si ça marche pas j'installerai ton module dans une de mes boutiques.

Link to comment
Share on other sites

Salut

 

Chez moi ça marche comme ça :

 

<?php
if (!defined('_PS_VERSION_'))
  exit;

class Synchro_stock extends Module
{
    public function __construct()
        {
            $this->name = 'synchro_stock';
            $this->tab = 'Synchro';
            $this->version = 1.0;
            $this->displayName = $this->l('Synchro Stock');
            $this->description = $this->l('Synchronise le stock vers sync.fr lors dune commande');
    
            parent::__construct();
        }
        
    public function install()
    {
        if(!parent::install()
            || !$this->registerHook('updateProduct')
            || !$this->registerHook('actionValidateOrder'))
            return false;
        return true;
    }
 
    public function uninstall()
     {
          if (!parent::uninstall())
              return false;
        return true;
     }
    
    public function hookUpdateProduct($params){
        
                    file_put_contents('synchro_upd.txt', 'action validate order went here');
        
    }
    
    public function hookActionValidateOrder($params){
    
        
            file_put_contents('synchro_avo.txt', 'action validate order went here');
        
    }
    
}
?>

Lorsque je passe une commande, j'ai bien à la racine du site un fichier synchro_avo.txt contenant 'action validate order went here'.

 

Fonctionne en 1.5.5 et à priori avec toutes les 1.5.

 

Bon courage

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

 

Alors sur ma version 1.4.10, j'utilise le hookNewOrder (à la place du hookActionValidateOrder qui fonctionne sur la v1.5) et ma requête SQL est bien exécutée ! Donc on avance :)

Cependant, sur le Front, une page "Etat de commande invalide" apparait lors de la confirmation de la page, bloquant ainsi le client. De plus, le statut de la commande est automatiquement mis sur "annulé" dans le BO. On revient donc à mon problème initial (post #5)

Comment faire ? A-t-on fait le tour de toutes les solutions ?

 

Merci beaucoup

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