r00t3r Posted August 23, 2018 Share Posted August 23, 2018 Hello , guys how to set a new order state after pay with this method i try some method but nothing order stay in payed public function hookPaymentReturn($params) { if ($this->active == false) return; $order = $params['objOrder']; $status = 3; if ($order->getCurrentOrderState()->id != Configuration::get('PS_OS_ERROR')) $this->smarty->assign('status', 'ok'); $this->smarty->assign(array( 'id_order' => $order->id, 'reference' => $order->reference, 'params' => $params, 'id_order_state' => 15, 'total' => Tools::displayPrice($params['total_to_pay'], $params['currencyObj'], false), )); return $this->display(__FILE__, 'views/templates/hook/confirmation.tpl'); } Link to comment Share on other sites More sharing options...
Rolige Posted August 23, 2018 Share Posted August 23, 2018 Hello, You can change the order state with this simple code: $order = new Order($id_order); $order->setCurrentState($id_your_new_order_state); Regards! 1 Link to comment Share on other sites More sharing options...
PrestaMake Posted April 3, 2019 Share Posted April 3, 2019 On 8/23/2018 at 3:14 PM, Rolige said: Hello, You can change the order state with this simple code: $order = new Order($id_order); $order->setCurrentState($id_your_new_order_state); Regards! Expand Gracias por el aporte! Utilizando Ps 1.7.4 ocurre el siguiente problema, el pedido al que uno quiere cambiar no queda como el final. Por ejemplo, yo quiero que al cambiar al estado Pago Aceptado, se cambie al estado Preparacion en curso. Pero ¿que ocurre? al utilizar la funcion en el hook ActionOrderStatusPostUpdate. El primer estado que se actualizará será Preparación en curso, y luego Pago Aceptado (quedando este ultimo, como el estado del pedido, siendo que lo ideal es que quede en el estado del pedido que queremos) Alguna ayuda? Muchas gracias Link to comment Share on other sites More sharing options...
Rolige Posted April 3, 2019 Share Posted April 3, 2019 On 4/3/2019 at 5:47 AM, Daniuz said: Por ejemplo, yo quiero que al cambiar al estado Pago Aceptado, se cambie al estado Preparacion en curso. Expand No es posible, el estatus que quedará es al cual estás cambiando. Si lo que necesitas es meter 2 actualizaciones de estatus pues nada más lo agregas despues. $order = new Order($id_order); $order->setCurrentState($id_state_payment_accepted); $order->setCurrentState($id_state_preparation_in_process); 1 Link to comment Share on other sites More sharing options...
PrestaMake Posted April 3, 2019 Share Posted April 3, 2019 (edited) On 4/3/2019 at 3:55 PM, Rolige said: No es posible, el estatus que quedará es al cual estás cambiando. Si lo que necesitas es meter 2 actualizaciones de estatus pues nada más lo agregas despues. $order = new Order($id_order); $order->setCurrentState($id_state_payment_accepted); $order->setCurrentState($id_state_preparation_in_process); Expand Claro, mi objetivo es que el módulo que estoy creando al ejecutar la funcion hookActionOrderStatusPostUpdate, cambie del estado "Payment Accepted" al estado "Orden de transporte creada" y que este sea el último en quedar luego de confirmar un pago. Pero lo que ocurre es lo siguiente (quedan al reves); Entonces, ¿Esto no es posible de realizar? Muchas gracias! Edited April 3, 2019 by Daniuz (see edit history) Link to comment Share on other sites More sharing options...
Rolige Posted April 4, 2019 Share Posted April 4, 2019 Deberás hacerlo mediante un módulo, donde tendras que engancharte al hook que se ejecuta en la actualización de estatus, en el tendrás que validar cuando es que se trata del estatus de pago aceptado y en ese caso aplicar tu nuevo cambio de estatus. Saludos! 1 Link to comment Share on other sites More sharing options...
PrestaMake Posted April 4, 2019 Share Posted April 4, 2019 (edited) On 4/4/2019 at 3:36 PM, Rolige said: Deberás hacerlo mediante un módulo, donde tendras que engancharte al hook que se ejecuta en la actualización de estatus, en el tendrás que validar cuando es que se trata del estatus de pago aceptado y en ese caso aplicar tu nuevo cambio de estatus. Saludos! Expand Eso es exactamente lo que hice y el resultado es el de la imagen que puse en el comentario anterior Te enseño parte del código que estoy utilizando a ver si me puedes ayudar por favor. public function hookActionOrderStatusPostUpdate($params) { $status = $params['newOrderStatus']; $order = new Order($params['id_order']); // Si el estado es Payment Accepted, cambiar al estado deseado if($status->id == $this->preparation_status) { $order->setCurrentState($this->preparation_post_status); } } Claramente $preparation_status and $preparation_post_status están previamente definidas. Y resulta en esto, y quiero que el estado "Orden de transporte creada" quede como final, no Payment accepted como ocurre actualmente. Muchas gracias por la ayuda Edited April 4, 2019 by Daniuz (see edit history) Link to comment Share on other sites More sharing options...
Rolige Posted April 4, 2019 Share Posted April 4, 2019 El estatus que debes evaluar en el if es el pago aceptado, no el preparacion en proceso. 1 Link to comment Share on other sites More sharing options...
PrestaMake Posted April 4, 2019 Share Posted April 4, 2019 (edited) On 4/4/2019 at 4:00 PM, Rolige said: El estatus que debes evaluar en el if es el pago aceptado, no el preparacion en proceso. Expand Exacto, así lo tengo previamente definido: $preparation_status = 2; // Estado: Pago aceptado $preparation_post_status = 16; // Estado: OT creada me parece extraño que utilizando el hook PostUpdate, se comporte de tal manera ¿será un bug? hookActionOrderStatusPostUpdate Edited April 4, 2019 by Daniuz (see edit history) Link to comment Share on other sites More sharing options...
Rolige Posted April 5, 2019 Share Posted April 5, 2019 Intenta con el otro hook actionOrderStatusUpdate Link to comment Share on other sites More sharing options...
ftardio Posted April 6, 2019 Share Posted April 6, 2019 (edited) If you use several payment modules, you can get different payment status ID. You can use Prestashop constants to check the payment ID status, for example, PS_OS_PAYMENT, PS_OS_WS_PAYMENT (wired payment), PS_OS_CHEQUE, PS_OS_BANKWIRE or PS_OS_PAYPAL (if you use more payment modules, you can get more payment IDs)... Si usas varios módulos de pago, obtendrás diferentes IDs de modo de pago dependiendo del método que se use. Deberías usar las constantes globales de Prestashop para comprobar el pago, como son PS_OS_PAYMENT, PS_OS_WS_PAYMENT, PS_OS_CHEQUE, PS_OS_BANKWIRE o PS_OS_PAYPAL, que corresponden a los métodos de pago por defecto de Prestashop (pago instantáneo, transferencia bancaria, cheque), más Paypal. Si tienes más módulos de pago instalado, puedes recibir otros IDs adicionales de métodos de pago. Desde el panel de Prestashop, en Parámetros de la tienda-> Configuración de pedidos -> estados, puedes verlos todos. También hay otro hook que puedes usar, que es el hookActionPaymentConfirmation(), que se ejecuta cada vez que se confirma el pago de un pedido. Edited April 6, 2019 by ftardio (see edit history) 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