feat: implement multi-tenant cart system with stock reservation and inventory tracking

This commit is contained in:
2026-07-01 16:21:53 -03:00
parent 230ea57ce0
commit 6a0b08c9d7
8 changed files with 144 additions and 18 deletions

View File

@@ -68,7 +68,7 @@ class Cart extends Model
return DB::transaction(function () use ($productVariantId, $quantity): CartItem {
$variant = $this->resolveScopedVariant($productVariantId, true);
if ($variant->stock < $quantity) {
if ($variant->stock_tecnico < $quantity) {
throw ValidationException::withMessages([
'cantidad' => 'Stock insuficiente para la variante solicitada.',
]);
@@ -90,7 +90,7 @@ class Cart extends Model
$item->save();
}
$variant->decrement('stock', $quantity);
$variant->incrementReservedStock($quantity);
return $item->fresh();
});
@@ -114,7 +114,7 @@ class Cart extends Model
$variant = $this->resolveScopedVariant($productVariantId, true);
$delta = $quantity - $item->cantidad;
if ($delta > 0 && $variant->stock < $delta) {
if ($delta > 0 && $variant->stock_tecnico < $delta) {
throw ValidationException::withMessages([
'cantidad' => 'Stock insuficiente para actualizar la cantidad solicitada.',
]);
@@ -124,11 +124,11 @@ class Cart extends Model
$item->save();
if ($delta > 0) {
$variant->decrement('stock', $delta);
$variant->incrementReservedStock($delta);
}
if ($delta < 0) {
$variant->increment('stock', abs($delta));
$variant->decrementReservedStock(abs($delta));
}
return $item->fresh();
@@ -145,7 +145,7 @@ class Cart extends Model
->firstOrFail();
$variant = $this->resolveScopedVariant($productVariantId, true);
$variant->increment('stock', $item->cantidad);
$variant->decrementReservedStock($item->cantidad);
$item->delete();
});
}