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', ]; } // 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', ]; } public function messages(): array { return [ // Mensajes para traspaso único 'inventory_id.required' => 'El producto es requerido', 'inventory_id.exists' => 'El producto no existe', // 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', // 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', ]; } }