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 PS | Cambio |
|---|---|
| 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.