document.addEventListener('DOMContentLoaded', function() { // Configurações const API_BASE_URL = window.location.origin; const WHATSAPP_NUMBER = '5516997311100'; // Elementos do DOM const filterForm = document.getElementById('filter-form'); const cotasTableBody = document.getElementById('cotas-table-body'); const btnSomar = document.getElementById('btn-somar'); const btnCompartilhar = document.getElementById('btn-compartilhar'); const limparFiltrosBtn = document.getElementById('limpar-filtros'); // Estado let cotasSelecionadas = []; // Funções auxiliares function formatCurrency(value) { return parseFloat(value || 0).toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' }); } function formatPercentage(value) { return parseFloat(value || 0).toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + '%'; } function showError(message) { cotasTableBody.innerHTML = ` ${message} `; Swal.fire({ icon: 'error', title: 'Erro', text: message, confirmButtonColor: '#3085d6' }); } // Carregar cotas ao iniciar carregarCotas(); // Event Listeners filterForm.addEventListener('submit', function(e) { e.preventDefault(); carregarCotas(); }); limparFiltrosBtn.addEventListener('click', function() { filterForm.reset(); carregarCotas(); }); // Adiciona os listeners para os botões de somar e compartilhar btnSomar.addEventListener('click', function() { somarCotasSelecionadas(); }); btnCompartilhar.addEventListener('click', function() { compartilharCotas(); }); // Função principal para carregar cotas async function carregarCotas() { try { // Mostrar loading cotasTableBody.innerHTML = `
Carregando...

Buscando cotas...

`; // Preparar dados do formulário const formData = new FormData(filterForm); const filters = {}; // Ajuste: envia os nomes esperados pelo backend for (const [key, value] of formData.entries()) { if (value) { if (key === 'credito') filters['valor_credito'] = value; else if (key === 'entrada') filters['valor_entrada'] = value; else if (key === 'parcela') filters['valor_parcela'] = value; else filters[key] = value; } } // Fazer requisição const response = await fetch(`${API_BASE_URL}/api/cotas`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(filters) }); // Verificar resposta if (!response.ok) { const errorData = await response.json().catch(() => ({})); throw new Error(errorData.error || `Erro na requisição: ${response.status}`); } const data = await response.json(); // Renderizar tabela renderizarTabela(data); } catch (error) { showError(error.message); } } // Função para renderizar a tabela function renderizarTabela(cotas) { cotasTableBody.innerHTML = ''; cotasSelecionadas = []; if (!Array.isArray(cotas)) { throw new Error('Formato de dados inválido'); } if (cotas.length === 0) { cotasTableBody.innerHTML = ` Nenhuma cota encontrada `; return; } cotas.forEach(cota => { const row = document.createElement('tr'); row.dataset.id = cota.id; // Determinar categoria e disponibilidade const categoria = cota.categoria === 'veiculo' ? 'Auto' : 'Imóvel'; const disponivel = cota.reserva !== 'reservado'; const comissao = (parseFloat(cota.valor_credito) * 0.085) + parseFloat(cota.entrada); row.innerHTML = ` ${categoria} ${cota.codigo || 'N/A'} ${formatCurrency(cota.valor_credito)} ${formatCurrency(comissao)} ${cota.parcelas}x ${formatCurrency(cota.valor_parcela)} ${cota.admin || 'N/A'} ${disponivel ? ` Negociar ` : ` Reservado `} `; cotasTableBody.appendChild(row); }); // Adicionar eventos após renderização adicionarEventosTabela(); atualizarBotoes(); } function adicionarEventosTabela() { // Eventos para seleção de cotas document.querySelectorAll('.cota-select').forEach(checkbox => { checkbox.addEventListener('change', function() { const row = this.closest('tr'); const cotaId = row.dataset.id; if (this.checked) { row.classList.add('selected'); if (!cotasSelecionadas.includes(cotaId)) { cotasSelecionadas.push(cotaId); } } else { row.classList.remove('selected'); cotasSelecionadas = cotasSelecionadas.filter(id => id !== cotaId); } atualizarBotoes(); }); }); // Eventos para visualização de detalhes document.querySelectorAll('.ver-cota').forEach(btn => { btn.addEventListener('click', function() { const cotaId = this.dataset.id; mostrarDetalhesCota(cotaId); }); }); } function atualizarBotoes() { btnSomar.disabled = cotasSelecionadas.length === 0; btnCompartilhar.disabled = cotasSelecionadas.length === 0; } async function mostrarDetalhesCota(cotaId) { try { const response = await fetch(`${API_BASE_URL}/api/detalhes_cota/${cotaId}`); if (!response.ok) { const errorData = await response.json().catch(() => ({})); throw new Error(errorData.error || `Erro na requisição: ${response.status}`); } const data = await response.json(); if (data.error) { throw new Error(data.error); } const cota = data.cota; const categoria = cota.categoria === 'veiculo' ? 'Auto' : 'Imóvel'; const reserva = cota.reserva === 'reservado' ? 'Reservado' : 'Disponível'; const modalBody = document.getElementById('detalhes-cota-body'); modalBody.innerHTML = `

Administradora: ${cota.admin || 'Não informado'}

Código: ${cota.codigo}

Nome: ${categoria}

Crédito: ${formatCurrency(cota.valor_credito)}

Entrada: ${formatCurrency(data.comissao)} (${formatPercentage(data.entradaporcem)})

Prazo: ${cota.parcelas}x

Parcelas: ${formatCurrency(cota.valor_parcela)}

Data Próx. Parcela: ${data.data_prox_parcela}

Saldo Devedor: ${formatCurrency(cota.saldo)}

${categoria === 'Imóvel' ? `

Fundo Comum: À consultar

Avaliação do Imóvel: À consultar

` : ''}

Transferência: À consultar

Seguro de Vida: À consultar


Situação: ${reserva}


-- Condições de contratação --

Crédito Real: ${formatCurrency(data.credito_real)}

Valor Final: ${formatCurrency(data.valor_final)}

Valor da Taxa: ${formatCurrency(data.taxa)}

Porcentagem da Taxa: ${formatPercentage(data.taxaporcem)}

Juros ao Mês: ${formatPercentage(data.JMensal)}

Juros ao Ano: ${formatPercentage(data.JAnual)}

`; // Abrir modal const detalhesModal = new bootstrap.Modal(document.getElementById('detalhesModal')); detalhesModal.show(); } catch (error) { showError('Erro ao carregar detalhes da cota'); } } async function somarCotasSelecionadas() { if (cotasSelecionadas.length === 0) return; try { const response = await fetch(`${API_BASE_URL}/api/somar_cotas`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ cotas_ids: cotasSelecionadas }) }); if (!response.ok) { const errorData = await response.json().catch(() => ({})); throw new Error(errorData.error || `Erro na requisição: ${response.status}`); } const data = await response.json(); if (data.error) { throw new Error(data.error); } // Preencher modal de soma const modalBody = document.getElementById('somar-cotas-body'); modalBody.innerHTML = `
Resumo da Soma das Cotas

${data.categoria} - ${data.admin}

Crédito Total: ${formatCurrency(data.total_credito)}
Entrada Total: ${formatCurrency(data.total_comissao)} (${formatPercentage(data.total_entradaporcem)})
Parcelas Totais: ${data.total_parcelas}x
Valor Médio da Parcela: ${formatCurrency(data.media_valor_parcela)}
Saldo Devedor Total: ${formatCurrency(data.total_saldo)}
Dia do Vencimento: ${data.menor_vencimento}

Condições de Contratação

Cartas Selecionadas (${data.detalhes.length})

`; // Abrir modal const somarModal = new bootstrap.Modal(document.getElementById('somarModal')); somarModal.show(); // Eventos para abrir/fechar seções document.querySelectorAll('.open-cartas').forEach(item => { item.addEventListener('click', function() { const detalhes = this.nextElementSibling; const icon = this.querySelector('i'); if (detalhes.style.display === 'none') { detalhes.style.display = 'block'; icon.classList.remove('bi-chevron-down'); icon.classList.add('bi-chevron-up'); } else { detalhes.style.display = 'none'; icon.classList.remove('bi-chevron-up'); icon.classList.add('bi-chevron-down'); } }); }); } catch (error) { showError('Erro ao somar as cotas selecionadas'); } } function compartilharCotas() { if (cotasSelecionadas.length === 0) return; // Montar link do WhatsApp let texto = "Lista de Cartas Contempladas:\n"; // Obter detalhes das cotas selecionadas cotasSelecionadas.forEach(id => { const row = document.querySelector(`tr[data-id="${id}"]`); if (row) { const codigo = row.querySelector('td:nth-child(3)').textContent; const categoria = row.querySelector('td:nth-child(2)').textContent; const credito = row.querySelector('td:nth-child(4)').textContent; texto += `\n${categoria} - Código: ${codigo} - Crédito: ${credito}`; } }); const whatsappUrl = `https://wa.me/${WHATSAPP_NUMBER}?text=${encodeURIComponent(texto)}`; window.open(whatsappUrl, '_blank'); } });