} from odoo import http from odoo.http import request class NextLevelEventController(http.Controller): @http.route('/next-level', type='http', auth='public', website=True) def render_checkin_page(self, **kwargs): """Renderiza la estructura principal vacía (Paso 1 y Paso 2 en contenedor oculto).""" return request.render('espacio_next_level.checkin_brochure_template', {}) @http.route('/api/next-level/verify', type='json', auth='public', website=True, csrf=False) def verify_attendee(self, search_query): """Valida dinámicamente si el asistente existe en Odoo.""" query = (search_query or '').strip() if not query or len(query) < 3: return {'status': 'error', 'message': 'Ingresa al menos 3 caracteres para buscar.'} # Dominio de búsqueda: Nombre, Email o Cédula (vat) domain = [ '|', '|', ('name', 'ilike', query), ('email', 'ilike', query), ('vat', 'ilike', query) ] # 1. Buscar en registros de eventos attendee = request.env['event.registration'].sudo().search(domain, limit=1) if attendee: return { 'status': 'success', 'name': attendee.name, 'email': attendee.email or '', 'company': attendee.partner_id.parent_id.name if attendee.partner_id.parent_id else 'Asistente' } # 2. Fallback: Buscar en el directorio general de Contactos / CRM partner = request.env['res.partner'].sudo().search(domain, limit=1) if partner: return { 'status': 'success', 'name': partner.name, 'email': partner.email or '', 'company': partner.parent_id.name if partner.parent_id else 'Asistente' } return { 'status': 'not_found', 'message': 'No encontramos tu registro. Verifica los datos o consulta con el equipo en recepción.' }