ACTION
FO+BO
Desde 1.5
actionUpdateQuantity
~3 min de lectura
#Descripcion
Se ejecuta cuando la cantidad de stock de un producto es actualizada. Se dispara tanto por ventas (reduccion automatica), como por edicion manual en el back office o por importaciones. Es el hook principal para implementar alertas de stock bajo, sincronizar inventario con almacenes o ERP, y controlar la disponibilidad de productos.
Disparado por
-
StockAvailable::updateQuantity()— classes/stock/StockAvailable.php
#Parametros
| Nombre | Tipo | Requerido | Descripcion |
|---|---|---|---|
| $id_product | int | Si | ID del producto cuyo stock cambio |
| $id_product_attribute | int | Si | ID de la combinacion (0 si es producto simple) |
| $quantity | int | Si | Nueva cantidad de stock |
| $id_shop | int | Si | ID de la tienda afectada |
| $operator | string | No | Operacion realizada: 'up' o 'down' (no siempre disponible) |
Retorno
void
Este hook no espera valor de retorno
#Ejemplo de codigo
mymodule.php
php
<?php
public function install()
{
return parent::install()
&& $this->registerHook('actionUpdateQuantity');
}
mymodule.php
php
<?php
/**
* Hook actionUpdateQuantity — stock actualizado
*/
public function hookActionUpdateQuantity(array $params)
{
$idProduct = (int) $params['id_product'];
$idAttribute = (int) $params['id_product_attribute'];
$quantity = (int) $params['quantity'];
$idShop = (int) $params['id_shop'];
// Ejemplo: Alerta de stock bajo
$threshold = (int) Configuration::get('MYMODULE_LOW_STOCK_THRESHOLD');
if ($threshold > 0 && $quantity <= $threshold && $quantity > 0) {
$product = new Product($idProduct, false, Configuration::get('PS_LANG_DEFAULT'));
$reference = $idAttribute
? $product->reference . '-' . Combination::getAttributeName($idAttribute)
: $product->reference;
Mail::send(
(int) Configuration::get('PS_LANG_DEFAULT'),
'low_stock_alert',
sprintf('Stock bajo: %s (quedan %d)', $product->name, $quantity),
[
'{product_name}' => $product->name,
'{reference}' => $reference,
'{quantity}' => $quantity,
'{threshold}' => $threshold,
],
Configuration::get('PS_SHOP_EMAIL'),
null, null, null, null, null,
_PS_MODULE_DIR_ . $this->name . '/mails/'
);
}
// Ejemplo: Desactivar producto sin stock
if ($quantity <= 0 && Configuration::get('MYMODULE_AUTO_DISABLE_OOS')) {
// Verificar si TODAS las combinaciones estan sin stock
$totalStock = StockAvailable::getQuantityAvailableByProduct($idProduct);
if ($totalStock <= 0) {
$product = new Product($idProduct);
$product->active = 0;
$product->update();
}
}
}
#Notas y gotchas
- ⚠️ El parametro `quantity` es la cantidad ACTUAL (nueva), no la cantidad modificada.
- ⚠️ El parametro `operator` no siempre esta disponible — no dependas de el.
- ⚠️ Se dispara con mucha frecuencia durante los pedidos — evita operaciones pesadas.
- ⚠️ Para tiendas multistock, verifica el `id_shop` antes de actuar.
- ⚠️ En importaciones masivas, este hook se dispara para cada producto — considera usar un sistema de cola.
#Relacionados
#Historial de versiones
| Version PS | Cambio |
|---|---|
| 1.5 | Introducido con Advanced Stock Management |
| 1.7 | Sin cambios significativos. Compatible |
| 8.0 | Sin cambios. Compatible |
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.