pdv.backend/app/Http/Requests/App/InventoryEntryRequest.php
Juan Felipe Zapata Moreno 7f6db1b83c feat: separar stock de importación y validar series
- Elimina gestión de stock inicial en importación (solo catálogo).
- Unifica validación de números de serie en todos los movimientos.
- Restringe controlador de series a lectura y filtra rutas.
2026-02-08 20:24:25 -06:00

81 lines
3.8 KiB
PHP

<?php
namespace App\Http\Requests\App;
use Illuminate\Foundation\Http\FormRequest;
class InventoryEntryRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
if ($this->has('products')) {
return [
'warehouse_id' => 'required|exists:warehouses,id',
'invoice_reference' => 'required|string|max:255',
'notes' => 'nullable|string|max:1000',
// Validación del array de productos
'products' => 'required|array|min:1',
'products.*.inventory_id' => 'required|exists:inventories,id',
'products.*.quantity' => 'required|integer|min:1',
'products.*.unit_cost' => 'required|numeric|min:0',
'products.*.serial_numbers' => 'nullable|array',
'products.*.serial_numbers.*' => 'required|string|distinct|unique:inventory_serials,serial_number',
];
}
return [
'inventory_id' => 'required|exists:inventories,id',
'warehouse_id' => 'required|exists:warehouses,id',
'quantity' => 'required|integer|min:1',
'unit_cost' => 'required|numeric|min:0',
'invoice_reference' => 'required|string|max:255',
'notes' => 'nullable|string|max:1000',
'serial_numbers' => 'nullable|array',
'serial_numbers.*' => 'required|string|distinct|unique:inventory_serials,serial_number',
];
}
public function messages(): array
{
return [
// Mensajes para entrada única
'inventory_id.required' => 'El producto es requerido',
'inventory_id.exists' => 'El producto no existe',
'serial_numbers.array' => 'Los números de serie deben ser un arreglo',
'serial_numbers.*.required' => 'El número de serie no puede estar vacío',
'serial_numbers.*.string' => 'El número de serie debe ser texto',
'serial_numbers.*.distinct' => 'Los números de serie no pueden repetirse',
'serial_numbers.*.unique' => 'El número de serie ya existe en el sistema',
// Mensajes para entrada múltiple
'products.required' => 'Debe incluir al menos un producto',
'products.*.inventory_id.required' => 'El producto es requerido',
'products.*.inventory_id.exists' => 'El producto no existe',
'products.*.quantity.required' => 'La cantidad es requerida',
'products.*.quantity.min' => 'La cantidad debe ser al menos 1',
'products.*.unit_cost.required' => 'El costo unitario es requerido',
'products.*.unit_cost.numeric' => 'El costo unitario debe ser un número',
'products.*.unit_cost.min' => 'El costo unitario no puede ser negativo',
'products.*.serial_numbers.array' => 'Los números de serie deben ser un arreglo',
'products.*.serial_numbers.*.required' => 'El número de serie no puede estar vacío',
'products.*.serial_numbers.*.string' => 'El número de serie debe ser texto',
'products.*.serial_numbers.*.distinct' => 'Los números de serie no pueden repetirse',
'products.*.serial_numbers.*.unique' => 'El número de serie ya existe en el sistema',
// Mensajes comunes
'warehouse_id.required' => 'El almacén es requerido',
'warehouse_id.exists' => 'El almacén no existe',
'quantity.required' => 'La cantidad es requerida',
'quantity.min' => 'La cantidad debe ser al menos 1',
'unit_cost.required' => 'El costo unitario es requerido',
'invoice_reference.required' => 'La referencia de la factura es requerida',
];
}
}