66 lines
2.2 KiB
PHP
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
|
|
]);
|
|
}
|
|
}
|
|
} |