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', ]; } }