feat: mejorar validación de seriales en salidas y traspasos de inventario

This commit is contained in:
Juan Felipe Zapata Moreno 2026-02-19 16:53:07 -06:00
parent 6ea9665b0b
commit 115a033510

View File

@ -231,7 +231,7 @@ public function bulkExit(array $data): array
$quantity = (float) $productData['quantity']; $quantity = (float) $productData['quantity'];
$serialNumbers = $productData['serial_numbers'] ?? null; $serialNumbers = $productData['serial_numbers'] ?? null;
// **NUEVO**: Solo exigir seriales si track_serials Y unidad NO permite decimales // Solo exigir seriales si track_serials Y unidad NO permite decimales
$requiresSerials = $inventory->track_serials && !$inventory->unitOfMeasure?->allows_decimals; $requiresSerials = $inventory->track_serials && !$inventory->unitOfMeasure?->allows_decimals;
// Validar y procesar seriales si el producto los requiere // Validar y procesar seriales si el producto los requiere
@ -247,7 +247,7 @@ public function bulkExit(array $data): array
$serialNumbers = array_values($serialNumbers); $serialNumbers = array_values($serialNumbers);
$serialCount = count($serialNumbers); $serialCount = count($serialNumbers);
if ($serialCount !== $quantity) { if ($serialCount != $quantity) {
throw new \Exception("El producto '{$inventory->name}': cantidad de seriales ({$serialCount}) no coincide con cantidad ({$quantity}). Ajuste la cantidad o agregue/elimine seriales."); throw new \Exception("El producto '{$inventory->name}': cantidad de seriales ({$serialCount}) no coincide con cantidad ({$quantity}). Ajuste la cantidad o agregue/elimine seriales.");
} }
@ -261,11 +261,11 @@ public function bulkExit(array $data): array
throw new \Exception("Producto '{$inventory->name}': El serial '{$serialNumber}' no pertenece a este producto."); throw new \Exception("Producto '{$inventory->name}': El serial '{$serialNumber}' no pertenece a este producto.");
} }
if ($serial->status !== 'disponible') { if ($serial->status != 'disponible') {
throw new \Exception("Producto '{$inventory->name}': El serial '{$serialNumber}' no está disponible (estado: {$serial->status})."); throw new \Exception("Producto '{$inventory->name}': El serial '{$serialNumber}' no está disponible (estado: {$serial->status}).");
} }
if ($serial->warehouse_id !== $warehouse->id) { if ($serial->warehouse_id != $warehouse->id) {
throw new \Exception("Producto '{$inventory->name}': El serial '{$serialNumber}' no está en el almacén seleccionado."); throw new \Exception("Producto '{$inventory->name}': El serial '{$serialNumber}' no está en el almacén seleccionado.");
} }
} }
@ -334,7 +334,7 @@ public function bulkTransfer(array $data): array
$serialNumbers = array_values($serialNumbers); $serialNumbers = array_values($serialNumbers);
$serialCount = count($serialNumbers); $serialCount = count($serialNumbers);
if ($serialCount !== $quantity) { if ($serialCount != $quantity) {
throw new \Exception("El producto '{$inventory->name}': cantidad de seriales ({$serialCount}) no coincide con cantidad ({$quantity}). Ajuste la cantidad o agregue/elimine seriales."); throw new \Exception("El producto '{$inventory->name}': cantidad de seriales ({$serialCount}) no coincide con cantidad ({$quantity}). Ajuste la cantidad o agregue/elimine seriales.");
} }
@ -425,10 +425,10 @@ public function exit(array $data): InventoryMovement
$quantity = (float) $data['quantity']; $quantity = (float) $data['quantity'];
$serialNumbers = $data['serial_numbers'] ?? null; $serialNumbers = $data['serial_numbers'] ?? null;
// **NUEVO**: Cargar la unidad de medida // Cargar la unidad de medida
$inventory->load('unitOfMeasure'); $inventory->load('unitOfMeasure');
// **CAMBIO**: Solo validar seriales si track_serials Y la unidad NO permite decimales // Solo validar seriales si track_serials Y la unidad NO permite decimales
$requiresSerials = $inventory->track_serials && !$inventory->unitOfMeasure?->allows_decimals; $requiresSerials = $inventory->track_serials && !$inventory->unitOfMeasure?->allows_decimals;
// Validar y procesar seriales si el producto los requiere // Validar y procesar seriales si el producto los requiere
@ -444,7 +444,7 @@ public function exit(array $data): InventoryMovement
$serialNumbers = array_values($serialNumbers); $serialNumbers = array_values($serialNumbers);
$serialCount = count($serialNumbers); $serialCount = count($serialNumbers);
if ($serialCount !== $quantity) { if ($serialCount != $quantity) {
throw new \Exception("La cantidad de seriales ({$serialCount}) no coincide con la cantidad ({$quantity}). Ajuste la cantidad o agregue/elimine seriales."); throw new \Exception("La cantidad de seriales ({$serialCount}) no coincide con la cantidad ({$quantity}). Ajuste la cantidad o agregue/elimine seriales.");
} }
@ -468,7 +468,7 @@ public function exit(array $data): InventoryMovement
} }
// Eliminar los seriales (salida definitiva) // Eliminar los seriales (salida definitiva)
InventorySerial::whereIn('serial_numbers', $serialNumbers) InventorySerial::whereIn('serial_number', $serialNumbers)
->where('inventory_id', $inventory->id) ->where('inventory_id', $inventory->id)
->delete(); ->delete();
@ -510,7 +510,7 @@ public function transfer(array $data): InventoryMovement
throw new \Exception('No se puede traspasar al mismo almacén.'); throw new \Exception('No se puede traspasar al mismo almacén.');
} }
// **NUEVO**: Solo exigir seriales si track_serials Y unidad NO permite decimales // Solo exigir seriales si track_serials Y unidad NO permite decimales
$requiresSerials = $inventory->track_serials && !$inventory->unitOfMeasure?->allows_decimals; $requiresSerials = $inventory->track_serials && !$inventory->unitOfMeasure?->allows_decimals;
// Validar y procesar seriales si el producto los requiere // Validar y procesar seriales si el producto los requiere
@ -526,7 +526,7 @@ public function transfer(array $data): InventoryMovement
$serialNumbers = array_values($serialNumbers); $serialNumbers = array_values($serialNumbers);
$serialCount = count($serialNumbers); $serialCount = count($serialNumbers);
if ($serialCount !== $quantity) { if ($serialCount != $quantity) {
throw new \Exception("La cantidad de seriales ({$serialCount}) no coincide con la cantidad ({$quantity}). Ajuste la cantidad o agregue/elimine seriales."); throw new \Exception("La cantidad de seriales ({$serialCount}) no coincide con la cantidad ({$quantity}). Ajuste la cantidad o agregue/elimine seriales.");
} }