Ável Eventos

Eventos vão além da agenda. São experiências que permanecem.

Nossos próximos eventos

Avel Agenda
'; return; } renderEventsList(events.slice(0, state.displayedEventsCount)); // Adiciona botão "Ver Mais" se houver mais eventos if (events.length > state.displayedEventsCount) { const loadMoreWrapper = document.createElement('div'); loadMoreWrapper.className = 'avel-load-more-wrapper'; loadMoreWrapper.innerHTML = ` `; container.appendChild(loadMoreWrapper); } }; const renderEventsList = (events) => { const container = getEl('avelEventsContainer'); const indexMap = new Map(state.rawData.map((e, i) => [e, i])); // Agrupa eventos por mês const monthGroups = new Map(); events.forEach((event) => { const monthLabel = getMonthLabel(event.data); if (!monthGroups.has(monthLabel)) monthGroups.set(monthLabel, []); monthGroups.get(monthLabel).push(event); }); const monthOrder = Array.from(monthGroups.keys()); const buildCard = (event) => { const displayDate = formatDisplayDate(event.data); const eventIndex = indexMap.get(event); const isFechado = event.modalidade.toLowerCase().includes('fechado'); let actionHtml = ''; if (isFechado) { actionHtml = ` `; } else { const hasMaterial = (event.convite && event.convite.trim() !== '') || (event.texto && event.texto.trim() !== ''); const disabledAttr = hasMaterial ? '' : 'disabled'; actionHtml = ` `; } return `
${escapeHTML(displayDate)}

${escapeHTML(event.assunto)}

${escapeHTML(event.tipo)} ${escapeHTML(event.modalidade)}
${escapeHTML(event.cidade)}
${escapeHTML(event.horario)}
${actionHtml}
`; }; let html = monthOrder.map((monthKey) => { const monthEvents = monthGroups.get(monthKey) || []; return `
${escapeHTML(monthKey)} ${monthEvents.length} evento${monthEvents.length !== 1 ? 's' : ''}
${monthEvents.map(buildCard).join('')}
`; }).join(''); // Adiciona espaço extra se todos os eventos foram carregados if (state.displayedEventsCount >= state.filteredEvents.length) { html += '
'; } container.innerHTML = html; }; const applyQuickFilters = (events) => { let filtered = events; // Filtro de eventos abertos (não fechados) if (state.quickFilters.open) { filtered = filtered.filter(e => !e.modalidade.toLowerCase().includes('fechado')); } // Filtro de eventos fechados if (state.quickFilters.closed) { filtered = filtered.filter(e => e.modalidade.toLowerCase().includes('fechado')); } // Filtro de eventos com material disponível (Ignora se for fechado) if (state.quickFilters.material) { filtered = filtered.filter(e => { const isFechado = e.modalidade.toLowerCase().includes('fechado'); const hasMaterial = (e.convite && e.convite.trim() !== '') || (e.texto && e.texto.trim() !== ''); return hasMaterial && !isFechado; }); } return filtered; }; const applyFilters = () => { const searchTerm = getEl('avelSearch').value.trim().toLowerCase(); let filteredEvents = filterEvents(state.rawData, searchTerm); filteredEvents = applyFilterLogic(filteredEvents); filteredEvents = applyQuickFilters(filteredEvents); renderEvents(filteredEvents); }; const loadMoreEvents = () => { if (state.isLoadingMore || state.displayedEventsCount >= state.filteredEvents.length) return; state.isLoadingMore = true; state.displayedEventsCount = state.filteredEvents.length; const container = getEl('avelEventsContainer'); const loadMoreWrapper = container.querySelector('.avel-load-more-wrapper'); if (loadMoreWrapper) loadMoreWrapper.remove(); renderEventsList(state.filteredEvents.slice(0, state.displayedEventsCount)); state.isLoadingMore = false; }; const setupViewToggle = (viewMode) => { const container = getEl('avelEventsContainer'); const listBtn = getEl('listViewBtn'); const gridBtn = getEl('gridViewBtn'); listBtn.classList.remove('active'); gridBtn.classList.remove('active'); if (viewMode === 'grid') { container.classList.add('grid-view'); gridBtn.classList.add('active'); } else { container.classList.remove('grid-view'); listBtn.classList.add('active'); } }; const toggleView = (viewMode) => { const normalizedView = viewMode === 'grid' ? 'grid' : 'list'; state.viewMode = normalizedView; try { localStorage.setItem('avelViewMode', normalizedView); } catch(e) { /* storage unavailable */ } setupViewToggle(normalizedView); }; const toggleQuickFilter = (filterType) => { // Se clicar no mesmo filtro, desativa if (state.quickFilters[filterType]) { state.quickFilters[filterType] = false; } else { // Se for 'open' ou 'closed', desativa o outro if (filterType === 'open') { state.quickFilters.open = true; state.quickFilters.closed = false; } else if (filterType === 'closed') { state.quickFilters.closed = true; state.quickFilters.open = false; } else { state.quickFilters[filterType] = true; } } // Atualiza UI apenas do botão de material que sobrou const matBtn = getEl('quickFilterMaterial'); if (matBtn) matBtn.classList.toggle('active', state.quickFilters.material); applyFilters(); }; const openModal = (eventIndex) => { const event = state.rawData[eventIndex]; document.getElementById('mTitle').textContent = event.assunto; const actionsContainer = getEl('avelModalActions'); if (!event.convite && !event.texto) { actionsContainer.innerHTML = `

O material de divulgação deste evento estará disponível em breve. Fique atento!

`; } else { let html = ''; if (event.convite) html += ``; if (event.texto) html += ``; actionsContainer.innerHTML = html; if (event.convite) { document.getElementById('mDl').onclick = () => { const url = safeURL(getDirectDownloadUrl(event.convite)); if (url) window.open(url, '_blank', 'noopener,noreferrer'); }; } if (event.texto) { const copyBtn = document.getElementById('mCp'); copyBtn.onclick = () => { navigator.clipboard.writeText(event.texto).then(() => { const originalText = copyBtn.textContent; copyBtn.textContent = "TEXTO COPIADO!"; setTimeout(() => copyBtn.textContent = originalText, 2000); }).catch(() => { copyBtn.textContent = "ERRO AO COPIAR"; setTimeout(() => copyBtn.textContent = "COPIAR MENSAGEM PARA CLIENTE", 2000); }); }; } } getEl('avelModal').classList.add('active'); }; const closeModal = () => getEl('avelModal').classList.remove('active'); const openInfoModal = () => { getEl('avelInfoModal').classList.add('active'); }; const closeInfoModal = () => { getEl('avelInfoModal').classList.remove('active'); }; const openFilters = () => { getEl('avelFiltersOverlay').classList.add('active'); }; const closeFilters = () => { getEl('avelFiltersOverlay').classList.remove('active'); }; const extractFilterOptions = (events) => { const cities = new Set(), months = new Set(), types = new Set(), status = new Set(); const monthNames = ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro']; events.forEach(event => { if (event.cidade && event.cidade !== 'A definir') cities.add(event.cidade); if (event.tipo) types.add(event.tipo); if (event.modalidade) status.add(event.modalidade); if (event.data && event.data !== 'A definir') { const mIdx = parseInt(event.data.split('/')[1]) - 1; if (monthNames[mIdx]) months.add(monthNames[mIdx]); } }); state.availableCities = Array.from(cities).sort(); state.availableMonths = Array.from(months); state.availableTypes = Array.from(types).sort(); state.availableStatus = Array.from(status).sort(); renderFilterOptions(); }; const renderFilterOptions = () => { const citiesContainer = getEl('citiesFilterContainer'); const monthsContainer = getEl('monthsFilterContainer'); const typeContainer = getEl('typeFilterContainer'); const statusContainer = getEl('statusFilterContainer'); citiesContainer.innerHTML = state.availableCities.map(city => ` `).join(''); monthsContainer.innerHTML = state.availableMonths.map(month => ` `).join(''); statusContainer.innerHTML = state.availableStatus.map(st => ` `).join(''); typeContainer.innerHTML = state.availableTypes.map(t => ` `).join(''); }; const applyFilterLogic = (events) => { return events.filter(event => { const cityMatch = state.filters.cities.length === 0 || state.filters.cities.includes(event.cidade); const typeMatch = state.filters.types.length === 0 || state.filters.types.includes(event.tipo); const statusMatch = state.filters.status.length === 0 || state.filters.status.includes(event.modalidade); let monthMatch = true; if (state.filters.months.length > 0) { const monthNames = ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro']; const mIdx = parseInt(event.data.split('/')[1]) - 1; monthMatch = state.filters.months.includes(monthNames[mIdx]); } let dateMatch = true; if (state.filters.dateFrom || state.filters.dateTo) { const eventDate = parseDate(event.data); if (!eventDate) dateMatch = false; else { if (state.filters.dateFrom) dateMatch = eventDate >= new Date(state.filters.dateFrom); if (dateMatch && state.filters.dateTo) dateMatch = eventDate { const debouncedFilter = debounce(() => applyFilters(), 300); getEl('avelSearch').addEventListener('input', debouncedFilter); getEl('listViewBtn').addEventListener('click', () => toggleView('list')); getEl('gridViewBtn').addEventListener('click', () => toggleView('grid')); getEl('filterDateFrom').addEventListener('change', (e) => state.filters.dateFrom = e.target.value); getEl('filterDateTo').addEventListener('change', (e) => state.filters.dateTo = e.target.value); getEl('avelFiltersOverlay').addEventListener('click', (e) => { if(e.target.id === 'avelFiltersOverlay') closeFilters(); }); getEl('avelModal').addEventListener('click', (e) => { if(e.target.id === 'avelModal') closeModal(); }); getEl('avelInfoModal').addEventListener('click', (e) => { if(e.target.id === 'avelInfoModal') closeInfoModal(); }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { closeModal(); closeInfoModal(); closeFilters(); } }); }; const init = async () => { if (typeof SA_CONFIG === 'undefined' || !SA_CONFIG.email || !SA_CONFIG.key || !SA_CONFIG.sheetId) { const container = getEl('avelEventsContainer'); if (container) { container.innerHTML = '

Arquivo de configuracao nao encontrado ou incompleto.

'; } return; } try { if (!checkRateLimit()) return; if (!shouldUseCache()) { const parsedRows = await fetchSheetData(); if (!parsedRows || parsedRows.length event.assunto && event.assunto.trim() !== '') .filter(event => { if (event.data === 'A definir') return true; const eventDate = parseDate(event.data); if (!eventDate) return true; return eventDate >= today; }); state.rawData = sortEvents(formattedEvents); state.cachedData = state.rawData; state.cacheTimestamp = Date.now(); } else { state.rawData = state.cachedData; } extractFilterOptions(state.rawData); setupEventListeners(); let savedView = null; try { savedView = localStorage.getItem('avelViewMode'); } catch(e) { /* storage unavailable */ } const initialView = savedView === 'grid' ? 'grid' : 'list'; state.viewMode = initialView; setupViewToggle(initialView); applyFilters(); } catch (error) { console.error('Erro:', error); const container = getEl('avelEventsContainer'); if (container) { container.innerHTML = '

Nao foi possivel carregar os eventos.

Verifique sua conexao e recarregue a pagina.

'; } } }; window.avelApp = { openModal, closeModal, openInfoModal, closeInfoModal, openFilters, closeFilters, loadMoreEvents, toggleQuickFilter, toggleFilter: (type, value) => { const allowedTypes = ['cities', 'months', 'types', 'status']; if (!allowedTypes.includes(type)) return; const idx = state.filters[type].indexOf(value); idx > -1 ? state.filters[type].splice(idx, 1) : state.filters[type].push(value); renderFilterOptions(); }, clearFilters: () => { state.filters = { cities: [], months: [], types: [], status: [], dateFrom: null, dateTo: null }; state.quickFilters = { open: false, closed: false, material: false }; document.querySelectorAll('.avel-date-input').forEach(i => i.value = ''); const matBtn = getEl('quickFilterMaterial'); if (matBtn) matBtn.classList.remove('active'); renderFilterOptions(); applyFilters(); closeFilters(); }, applyFilters: () => { applyFilters(); closeFilters(); } }; document.addEventListener('DOMContentLoaded', init); })();

Evento Aberto

A Ável assume integralmente os custos do evento, promovendo experiências abertas a convidados alinhados ao público-alvo. São encontros estratégicos voltados à prospecção de novos clientes e ao fortalecimento de relacionamentos, com palestras, painéis e momentos de networking de alto nível.

Evento Fechado​

Modalidade exclusiva e personalizada, desenhada sob medida para cada cliente. As experiências são definidas conforme o perfil dos convidados e contam com investimento compartilhado — 67% custeado pela Ável e 33% pelo advisor — garantindo eventos mais direcionados, eficientes e focados em gerar conexões qualificadas e oportunidades reais.

Evento no Lounge

Realizado na estrutura própria da Ável, em Porto Alegre, o evento oferece um ambiente sofisticado e exclusivo para apresentações, palestras, bate-papos e encontros estratégicos. Um espaço pensado para estreitar laços, compartilhar conhecimento e proporcionar experiências relevantes em um clima intimista e premium.

Lounge para Clientes

Disponibilizamos o espaço do lounge, sem custo de locação, para que clientes e parceiros realizem seus próprios eventos. A Ável oferece suporte com audiovisual e equipe de staff, ficando sob responsabilidade do cliente apenas os custos de alimentação e bebidas — garantindo praticidade, conforto e uma experiência de alto padrão.

Evento Patrocinado

Participação da Ável como patrocinadora em eventos externos de prestígio, como torneios de tênis, golf e feiras especializadas. Essa iniciativa amplia a exposição da marca, fortalece o posicionamento institucional e potencializa a prospecção de novos clientes em ambientes qualificados.

Solicitar evento

Solicitação de Evento - Avel

Solicitação enviada com sucesso!

Agradecemos pelo envio da solicitação. As informações foram recebidas e, em breve, nossa equipe entrará em contato para confirmar os detalhes do evento e alinhar os próximos passos.

Seu espaço no Lounge

Escolha um dos ambientes abaixo e realize a reserva do espaço ideal para sua reunião ou evento.

Card Agro Final

Sala João Fonseca

Card Agro Final

Sala Top 1

Card Agro Final

Sala NBA

Card Agro Final

Auditório