Files
pos_heidiver/app/Observers/ProductVariantObserver.php
2026-01-06 15:35:59 -05:00

66 lines
2.2 KiB
PHP

<?php
namespace App\Observers;
use App\Models\ProductVariant;
use Illuminate\Support\Facades\Log;
class ProductVariantObserver
{
/**
* Handle the ProductVariant "created" event.
*/
public function created(ProductVariant $variant): void
{
$producto = $variant->producto;
Log::info("Variante creada para producto", [
'variante_id' => $variant->id,
'producto_id' => $producto->id,
'producto_nombre' => $producto->nombre,
'stock_producto_anterior' => $producto->stock
]);
// Si este producto ahora tiene variantes y tenía stock directo, limpiar el stock principal
if ($producto->stock > 0) {
// Obtener el stock anterior para potencial transferencia
$stockAnterior = $producto->stock;
// Limpiar el stock del producto principal
$producto->update(['stock' => 0]);
Log::info("Stock del producto principal limpiado debido a creación de variantes", [
'producto_id' => $producto->id,
'stock_anterior' => $stockAnterior,
'stock_nuevo' => 0
]);
// Opcionalmente, podrías transferir el stock anterior a la nueva variante
// o a una bodega específica, pero por ahora solo lo eliminamos
}
}
/**
* Handle the ProductVariant "deleting" event.
*/
public function deleting(ProductVariant $variant): void
{
$producto = $variant->producto;
// Verificar si esta es la última variante
$variantesRestantes = $producto->variants()->where('id', '!=', $variant->id)->count();
Log::info("Eliminando variante", [
'variante_id' => $variant->id,
'producto_id' => $producto->id,
'variantes_restantes' => $variantesRestantes
]);
// Si esta era la última variante, el producto vuelve a poder tener stock directo
if ($variantesRestantes === 0) {
Log::info("Última variante eliminada - producto puede volver a tener stock directo", [
'producto_id' => $producto->id
]);
}
}
}