feat: Implement inventory policy for product variants
- Introduced InventoryPolicy enum to manage tracked and unlimited inventory types. - Updated ProductVariant model to include inventory_policy and cantidad_vendida attributes. - Modified addItem and updateItem methods in Cart to check available quantity based on inventory policy. - Added migration to include inventory_policy and cantidad_vendida in productos_variantes table. - Enhanced tests to validate inventory behavior for both tracked and unlimited policies. - Updated various request and resource classes to handle new inventory fields.
This commit is contained in:
@@ -82,9 +82,9 @@ class Cart extends Model
|
||||
return DB::transaction(function () use ($productVariantId, $quantity): CartItem {
|
||||
$variant = $this->resolveScopedVariant($productVariantId, true);
|
||||
|
||||
if ($variant->stock_tecnico < $quantity) {
|
||||
if ($variant->tracksInventory() && $variant->availableQuantity() < $quantity) {
|
||||
throw ValidationException::withMessages([
|
||||
'cantidad' => "Stock insuficiente para la variante solicitada. Maximo disponible: {$variant->stock_tecnico}.",
|
||||
'cantidad' => "Stock insuficiente para la variante solicitada. Maximo disponible: {$variant->availableQuantity()}.",
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ class Cart extends Model
|
||||
$item->save();
|
||||
}
|
||||
|
||||
$variant->incrementReservedStock($quantity);
|
||||
$variant->reserveStock($quantity);
|
||||
|
||||
return $item->fresh();
|
||||
});
|
||||
@@ -128,8 +128,8 @@ class Cart extends Model
|
||||
$variant = $this->resolveScopedVariant($productVariantId, true);
|
||||
$delta = $quantity - $item->cantidad;
|
||||
|
||||
if ($delta > 0 && $variant->stock_tecnico < $delta) {
|
||||
$maxAvailable = $variant->stock_tecnico + $item->cantidad;
|
||||
if ($delta > 0 && $variant->tracksInventory() && $variant->availableQuantity() < $delta) {
|
||||
$maxAvailable = $variant->availableQuantity() + $item->cantidad;
|
||||
throw ValidationException::withMessages([
|
||||
'cantidad' => "El máximo que se puede agregar es {$maxAvailable}.",
|
||||
]);
|
||||
@@ -139,7 +139,7 @@ class Cart extends Model
|
||||
$item->save();
|
||||
|
||||
if ($delta > 0) {
|
||||
$variant->incrementReservedStock($delta);
|
||||
$variant->reserveStock($delta);
|
||||
}
|
||||
|
||||
if ($delta < 0) {
|
||||
|
||||
Reference in New Issue
Block a user