ACTION FO+BO Desde 1.5

actionOrderStatusPostUpdate

~3 min de lectura

#Descripcion

Se ejecuta DESPUES de que el nuevo estado del pedido haya sido guardado en la base de datos. A diferencia de actionOrderStatusUpdate, aqui el cambio ya es efectivo. Es el lugar adecuado para ejecutar acciones que dependan de que el estado este confirmado, como generar documentos, actualizar inventario externo o registrar logs.

📍
Disparado por
  • OrderHistory::changeIdOrderState()classes/order/OrderHistory.php

#Parametros

Nombre Tipo Requerido Descripcion
$newOrderStatus OrderState Si Nuevo estado del pedido ya guardado
$id_order int Si ID del pedido afectado
$order Order No Objeto Order del pedido (disponible desde PS 1.7.7)
Retorno
void Este hook no espera valor de retorno

#Ejemplo de codigo

mymodule.php
php
<?php
public function install()
{
    return parent::install()
        && $this->registerHook('actionOrderStatusPostUpdate');
}
mymodule.php
php
<?php
/**
 * Hook actionOrderStatusPostUpdate — despues de actualizar estado
 */
public function hookActionOrderStatusPostUpdate(array $params)
{
    /** @var OrderState $newStatus */
    $newStatus = $params['newOrderStatus'];
    $idOrder = (int) $params['id_order'];
    $order = isset($params['order']) ? $params['order'] : new Order($idOrder);

    // Ejemplo: Generar factura automatica cuando el estado es 'Pago aceptado'
    if ((int) $newStatus->id === (int) Configuration::get('PS_OS_PAYMENT')) {
        // Verificar que no tenga factura ya
        if (!$order->hasInvoice()) {
            $orderInvoice = new OrderInvoice();
            $orderInvoice->id_order = $order->id;
            $orderInvoice->number = Order::getLastInvoiceNumber() + 1;
            // ... generar factura
        }

        // Registrar log de pago confirmado
        PrestaShopLogger::addLog(
            'Pago confirmado para pedido #' . $order->reference,
            1,
            null,
            'Order',
            $idOrder
        );
    }

    // Ejemplo: Marcar como completado en sistema externo cuando se entrega
    if ((int) $newStatus->id === (int) Configuration::get('PS_OS_DELIVERED')) {
        Db::getInstance()->update('mymodule_order_sync', [
            'status'      => 'delivered',
            'date_upd'    => date('Y-m-d H:i:s'),
        ], 'id_order = ' . $idOrder);
    }
}

#Notas y gotchas

  • ⚠️ A diferencia de `actionOrderStatusUpdate`, aqui el nuevo estado YA esta guardado en BD.
  • ⚠️ Es mas seguro para operaciones que dependan del estado final (como enviar emails de confirmacion).
  • ⚠️ El parametro `order` solo esta disponible desde PS 1.7.7.
  • ⚠️ No cambiar el estado del pedido dentro de este hook — puede causar bucles infinitos.
  • ⚠️ Si el pedido pasa por multiples estados rapidamente, este hook se dispara para cada uno.

#Relacionados

#Historial de versiones

Version PSCambio
1.5 Introducido con newOrderStatus e id_order
1.7.7 Añadido el parametro order (objeto Order)
8.0 Sin cambios. Compatible
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.