/** * IMPORTADOR DE CSV - Ferramenta de Atualização do BD Interno * Permite carregar CSVs externos e atualizar o banco de dados interno */ /** * Abre modal de importação de CSV */ function abrirImportadorCSV() { console.log('📥 Abrindo importador de CSV'); const modalHTML = ` `; // Remover modal existente const existingModal = document.getElementById('modal-importador-csv'); if (existingModal) { existingModal.remove(); } // Adicionar novo modal document.body.insertAdjacentHTML('beforeend', modalHTML); } /** * Fecha o importador de CSV */ function fecharImportadorCSV(event) { if (event && event.target !== event.currentTarget) return; const modal = document.getElementById('modal-importador-csv'); if (modal) { modal.remove(); } } /** * Visualiza o conteúdo do CSV selecionado */ function visualizarCSV() { const arquivo = document.getElementById('arquivo-csv').files[0]; const tipoSelecionado = document.getElementById('tipo-perfil-importar').value; if (!arquivo) { document.getElementById('preview-csv').style.display = 'none'; document.getElementById('btn-importar').disabled = true; return; } if (!tipoSelecionado) { alert('⚠️ Selecione o tipo de perfil primeiro!'); return; } const reader = new FileReader(); reader.onload = function(e) { const csvText = e.target.result; const linhas = csvText.trim().split('\n'); // Mostrar preview const previewDiv = document.getElementById('preview-conteudo'); const statsDiv = document.getElementById('preview-stats'); // Primeiras 5 linhas const preview = linhas.slice(0, 6).map((linha, index) => { const colunas = linha.split(','); const isHeader = index === 0; return `
${isHeader ? 'CABEÇALHO:' : `Linha ${index}:`} ${colunas.join(' | ')}
`; }).join(''); previewDiv.innerHTML = preview; // Estatísticas statsDiv.innerHTML = ` 📊 Estatísticas:
• Total de linhas: ${linhas.length}
• Linhas de dados: ${linhas.length - 1}
• Colunas: ${linhas[0] ? linhas[0].split(',').length : 0}
• Tamanho: ${(csvText.length / 1024).toFixed(2)} KB `; // Mostrar preview document.getElementById('preview-csv').style.display = 'block'; document.getElementById('btn-importar').disabled = false; }; reader.readAsText(arquivo); } /** * Executa a importação do CSV */ function executarImportacao() { const arquivo = document.getElementById('arquivo-csv').files[0]; const tipo = document.getElementById('tipo-perfil-importar').value; if (!arquivo || !tipo) { alert('⚠️ Selecione o tipo de perfil e o arquivo CSV!'); return; } // Mostrar log document.getElementById('log-importacao').style.display = 'block'; const logDiv = document.getElementById('log-conteudo'); function log(msg) { const time = new Date().toLocaleTimeString(); logDiv.innerHTML += `
[${time}] ${msg}
`; logDiv.scrollTop = logDiv.scrollHeight; } log('🚀 Iniciando importação...'); log(`📊 Tipo: ${tipo}`); log(`📁 Arquivo: ${arquivo.name}`); const reader = new FileReader(); reader.onload = function(e) { try { const csvText = e.target.result; const linhas = csvText.trim().split('\n'); log(`📄 Arquivo lido: ${linhas.length} linhas`); if (linhas.length < 2) { throw new Error('Arquivo CSV deve ter pelo menos cabeçalho + 1 linha de dados'); } // Processar dados const cabecalho = linhas[0].split(',').map(h => h.trim().replace(/"/g, '')); log(`📋 Cabeçalho: ${cabecalho.join(', ')}`); const dados = []; for (let i = 1; i < linhas.length; i++) { const linha = linhas[i].trim(); if (!linha) continue; const valores = linha.split(',').map(v => v.trim().replace(/"/g, '')); if (valores.length < cabecalho.length) continue; const item = {}; cabecalho.forEach((col, index) => { let valor = valores[index] || ''; // Converter números if (col.includes('_mm') || col.includes('_kg') || col.includes('_cm') || col.includes('_m2')) { valor = parseFloat(valor) || 0; } item[col] = valor; }); dados.push(item); } log(`✅ Processados: ${dados.length} itens`); if (dados.length === 0) { throw new Error('Nenhum dado válido encontrado no CSV'); } // Atualizar banco de dados interno if (!window.BANCO_DADOS_PERFIS) { window.BANCO_DADOS_PERFIS = {}; } window.BANCO_DADOS_PERFIS[tipo] = dados; // Salvar no localStorage const chaveCache = `acoCalcPro_dados_${tipo}`; localStorage.setItem(chaveCache, JSON.stringify(dados)); log(`💾 Dados salvos no localStorage: ${chaveCache}`); // Atualizar metadata const metadata = { tipo: tipo, arquivo: arquivo.name, dataImportacao: new Date().toISOString(), totalItens: dados.length, colunas: cabecalho }; localStorage.setItem(`acoCalcPro_metadata_${tipo}`, JSON.stringify(metadata)); log(`📊 Metadata salvo`); // Recarregar dados na tabela se estiver visível if (typeof carregarPerfilUniversal === 'function') { const sucesso = carregarPerfilUniversal(tipo); if (sucesso) { log(`🔄 Tabela atualizada automaticamente`); } } log(`🎉 IMPORTAÇÃO CONCLUÍDA COM SUCESSO!`); // Notificar usuário setTimeout(() => { alert(`✅ Importação concluída!\n\n📊 ${dados.length} itens de ${tipo} importados\n💾 Dados salvos no BD interno\n🔄 Tabela atualizada`); }, 1000); } catch (error) { log(`❌ ERRO: ${error.message}`); alert(`❌ Erro na importação: ${error.message}`); } }; reader.readAsText(arquivo); } /** * Exporta dados atuais para CSV */ function exportarDadosCSV(tipo) { if (!window.BANCO_DADOS_PERFIS || !window.BANCO_DADOS_PERFIS[tipo]) { alert(`❌ Nenhum dado encontrado para ${tipo}`); return; } const dados = window.BANCO_DADOS_PERFIS[tipo]; if (dados.length === 0) { alert(`❌ Dados vazios para ${tipo}`); return; } // Gerar CSV const cabecalho = Object.keys(dados[0]); const linhas = [cabecalho.join(',')]; dados.forEach(item => { const linha = cabecalho.map(col => { let valor = item[col]; if (typeof valor === 'string' && valor.includes(',')) { valor = `"${valor}"`; } return valor; }).join(','); linhas.push(linha); }); const csvContent = linhas.join('\n'); // Download const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `${tipo}_${new Date().toISOString().split('T')[0]}.csv`; a.click(); URL.revokeObjectURL(url); console.log(`✅ Dados de ${tipo} exportados para CSV`); } // Exportar funções window.abrirImportadorCSV = abrirImportadorCSV; window.fecharImportadorCSV = fecharImportadorCSV; window.visualizarCSV = visualizarCSV; window.executarImportacao = executarImportacao; window.exportarDadosCSV = exportarDadosCSV; console.log('✅ Importador de CSV carregado');