Jump to content
EmmanuelTesson

hookActionOrderStatusPostUpdate et statut final de la commande

Recommended Posts

Bonjour,

J'essaie depuis quelques temps de mettre en oeuvre une approbation des commandes pour les clients faisant partie d'un groupe particulier.

J'ai créé un module qui :

  • ajoute un nouveau staut de commande "En attente d'approbation"
  • teste l'utilisateur courant (appartenance à un groupe)

J'ai essayé de greffer mon module aux hooks suivants sans succès :

  • hookActionValidateOrder
  • hookActionOrderStatusUpdate
  • hookActionObjectOrderHistoryAddAfter

J'obtiens à chaque fois une boucle sans fin, puisque je mets à jour le statut, qui lui-même se met à jour ensuite.

 

Je tente donc d'utiliser le hook "hookActionOrderStatusPostUpdate", mais lorsque je mets à jour le statut, il se place avant le staut par défaut "Préparation en cours".

 

le code du hook :

public function hookActionOrderStatusPostUpdate($params)
{
//	var_dump($params);exit();
	
	$newOrderStatus = $params['newOrderStatus'];
	$id_order = $params['id_order'];
	$cart = $params['cart'];
		
	$order = new Order($id_order);
			
	$groups = Customer::getGroupsStatic($cart->id_customer);
	$approverGroups = Configuration::get(Tools::strtoupper($this->name).'_approvergroup');
				
	$orderHistory = new OrderHistory();
	$orderHistory->id_order = $id_order;
			
	//	var_dump($order);
			/*
			echo 'currentState:  '.$order->getCurrentState().'  Approval status '.Configuration::get('PS_OS_APPROVALORDER');
			exit();
			*/
			
			if(!in_array($approverGroups,$groups) && $order->getCurrentState()== Configuration::get('PS_OS_PREPARATION')){
				//Si non, la commande passe en statut "attente d'approbation" + "mail Approbateur" + mail commandeur
				$orderHistory->changeIdOrderState(Configuration::get('PS_OS_APPROVALORDER'), (int) $id_order);
				$orderHistory->add();
			
			}
			
}

Je ne vois plus comment faire maintenant ?

 

 

EDIT:

bon je constate que si j'utilise le hook actionOrderStatusPostUpdate (ou les autres), je fais une boucle en appelant la fonction changeIdOrderState de la classe Orderhistory.

je souhaite donc modifier directement la valeur de $new_os dans le cas où l'utilisateur n'a pas les droits d'approbation, en utilisant le hook actionOrderStatusUpdate. l'idée est de changer le statut par défaut par le statut custom "En attente d'approbation".

 

est ce que l'on peut m'aider sur ce point ?

Edited by EmmanuelTesson (see edit history)

Share this post


Link to post
Share on other sites

Bonjour

je me réponds à moi même puisque j'ai testé une autre solution, mais avec d'autres problèmes !

 

j'ai tenté d'utiliser le hook OrderConfirmation.

public function hookOrderConfirmation($params)
	{
	//	var_dump($params);exit();
		
		
		$objOrder = $params['objOrder'];
		$history = new OrderHistory();
		$history->id_order = (int)$objOrder->id;
		$history->changeIdOrderState((int)(Configuration::get('PS_OS_APPROVALORDER')), (int)($objOrder->id));
	}

Le changement de statut est bien effectué en fin de commande et apparait bien dans la liste des commandes avec le bon statut (En attente de validation).

Cependant, si je clique dans le détail de la commande, le statut est affiché comme "Préparation en cours", comme dans l'historique des commandes du client ???

cela devient un vrai mystère !

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More