Jump to content

prestashop payment module state


Recommended Posts

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

  • 7 months later...
On 8/23/2018 at 12: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!

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

10 hours ago, Daniuz said:

Por ejemplo, yo quiero que al cambiar al estado Pago Aceptado, se cambie al estado Preparacion en curso.

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);

 

  • Like 1
Link to comment
Share on other sites

8 minutes ago, 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);

 

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);

qdHkwxm.png

 

Entonces, ¿Esto no es posible de realizar?

Muchas gracias!

 

 

 

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

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!

  • Like 1
Link to comment
Share on other sites

11 minutes ago, 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!

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.

qdHkwxm.png

 

Muchas gracias por la ayuda 

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

42 minutes ago, Rolige said:

El estatus que debes evaluar en el if es el pago aceptado, no el preparacion en proceso.

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

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 by ftardio (see edit history)
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...