- 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.
77 lines
3.5 KiB
PHP
77 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Requests\App;
|
|
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
|
|
class InventoryTransferRequest extends FormRequest
|
|
{
|
|
public function authorize(): bool
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public function rules(): array
|
|
{
|
|
// Si tiene "products" array, es traspaso múltiple
|
|
if ($this->has('products')) {
|
|
return [
|
|
'warehouse_from_id' => 'required|exists:warehouses,id',
|
|
'warehouse_to_id' => 'required|exists:warehouses,id|different:warehouse_from_id',
|
|
'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.*.serial_numbers' => 'nullable|array',
|
|
'products.*.serial_numbers.*' => 'required|string|exists:inventory_serials,serial_number',
|
|
];
|
|
}
|
|
|
|
// Traspaso único (formato original)
|
|
return [
|
|
'inventory_id' => 'required|exists:inventories,id',
|
|
'warehouse_from_id' => 'required|exists:warehouses,id',
|
|
'warehouse_to_id' => 'required|exists:warehouses,id|different:warehouse_from_id',
|
|
'quantity' => 'required|integer|min:1',
|
|
'notes' => 'nullable|string|max:1000',
|
|
'serial_numbers' => 'nullable|array',
|
|
'serial_numbers.*' => 'required|string|exists:inventory_serials,serial_number',
|
|
];
|
|
}
|
|
|
|
public function messages(): array
|
|
{
|
|
return [
|
|
// Mensajes para traspaso único
|
|
'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.*.exists' => 'El número de serie no existe en el sistema',
|
|
|
|
// Mensajes para traspaso 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.*.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.*.exists' => 'El número de serie no existe en el sistema',
|
|
|
|
// Mensajes comunes
|
|
'warehouse_from_id.required' => 'El almacén origen es requerido',
|
|
'warehouse_from_id.exists' => 'El almacén origen no existe',
|
|
'warehouse_to_id.required' => 'El almacén destino es requerido',
|
|
'warehouse_to_id.exists' => 'El almacén destino no existe',
|
|
'warehouse_to_id.different' => 'El almacén destino debe ser diferente al origen',
|
|
'quantity.required' => 'La cantidad es requerida',
|
|
'quantity.min' => 'La cantidad debe ser al menos 1',
|
|
];
|
|
}
|
|
}
|