ACTION FO+BO Desde 1.5

actionOrderHistoryAddAfter

~3 min de lectura

#Descripcion

Se ejecuta despues de que se añade una entrada al historial de un pedido, es decir, cada vez que cambia el estado de un pedido. A diferencia de `actionOrderStatusUpdate` (que se ejecuta ANTES del cambio), este hook se dispara DESPUES de que el estado ya esta guardado en la base de datos. Es el hook mas fiable para reaccionar a cambios de estado.

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

#Parametros

Nombre Tipo Requerido Descripcion
$order_history OrderHistory Si Objeto OrderHistory recien creado
$id_order int Si ID del pedido afectado
$newOrderStatus OrderState Si Nuevo estado del pedido
Retorno
void No se espera valor de retorno

#Ejemplo de codigo

mymodule.php
php
public function install()
{
    return parent::install()
        && $this->registerHook('actionOrderHistoryAddAfter');
}
mymodule.php
php
/**
 * Hook actionOrderHistoryAddAfter — Notificar cambio de estado
 */
public function hookActionOrderHistoryAddAfter($params)
{
    /** @var OrderState $newStatus */
    $newStatus = $params['newOrderStatus'];
    $id_order  = (int)$params['id_order'];
    $order     = new Order($id_order);

    if (!Validate::isLoadedObject($order)) {
        return;
    }

    // Enviar notificacion cuando el pedido se marca como enviado
    if ((int)$newStatus->id === (int)Configuration::get('PS_OS_SHIPPING')) {
        $customer = new Customer($order->id_customer);
        $carrier  = new Carrier($order->id_carrier);

        // Obtener tracking number
        $tracking = $order->getWsShippingNumber();

        // Enviar SMS o notificacion push
        $this->sendShippingNotification([
            'customer_phone' => $this->getCustomerPhone($customer->id),
            'order_ref'      => $order->reference,
            'carrier'        => $carrier->name,
            'tracking'       => $tracking,
        ]);
    }

    // Logging de todos los cambios de estado
    PrestaShopLogger::addLog(
        sprintf('Pedido #%s cambio a estado: %s', $order->reference, $newStatus->name[1]),
        1, null, 'Order', $id_order
    );
}

#Notas y gotchas

  • ⚠️ Se ejecuta DESPUES de que el estado se guarda — el cambio ya esta en la BD. Seguro para notificaciones.
  • ⚠️ A diferencia de `actionOrderStatusUpdate`, aqui el email de PrestaShop ya fue enviado al cliente.
  • ⚠️ Se ejecuta tanto desde el admin como desde procesos automaticos (pagos, transportistas).
  • ⚠️ El parametro `order_history` contiene `id_order_state` (nuevo) y puedes obtener el estado anterior del pedido.
  • ⚠️ Para cancelar o modificar el cambio de estado ANTES de que ocurra, usa `actionOrderStatusUpdate`.

#Relacionados

#Historial de versiones

Version PSCambio
1.5 Introducido como hook post-cambio de estado
1.7.7 Sigue disponible sin cambios en la nueva vista de pedido
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.