(function($) { 'use strict'; $(document).ready(function() { /* ========================================================================= 0. LÓGICA DO RASCUNHO AUTOMÁTICO (LOCAL STORAGE) ========================================================================= */ function carregarRascunho() { let draft = localStorage.getItem('senacFornecedorDraft'); if (draft) { try { let formData = JSON.parse(draft); for (let key in formData) { let field = $('#senac-form-fornecedor').find(`[name="${key}"]`); if (field.length && formData[key]) { field.val(formData[key]); // Se for segmento "Outros", força a exibição do input extra if (key === 'segmento' && formData[key] === 'Outros') { field.trigger('change'); } } } } catch(e) { console.error('Erro ao ler rascunho.', e); } } } function salvarRascunho() { let formData = {}; // Guarda todos os inputs exceto ficheiros e checkboxes (termos) $('#senac-form-fornecedor').find('input:not([type="file"]):not([type="checkbox"]), select, textarea').each(function() { formData[$(this).attr('name')] = $(this).val(); }); localStorage.setItem('senacFornecedorDraft', JSON.stringify(formData)); } // Se estiver na página de cadastro, carrega o rascunho e escuta mudanças if ($('#senac-form-fornecedor').length) { carregarRascunho(); $('#senac-form-fornecedor').on('input change', 'input:not([type="file"]), select, textarea', function() { salvarRascunho(); }); } /* ========================================================================= 1. LÓGICA DO WIZARD (MULTI-STEP) ========================================================================= */ let currentStep = 1; const totalSteps = 3; function updateWizardUI() { $('.step-content').removeClass('active'); $('#step-' + currentStep).addClass('active'); $('.senac-step-indicator').each(function() { let stepNum = parseInt($(this).data('step')); if (stepNum < currentStep) { $(this).removeClass('active').addClass('completed'); $(this).find('.senac-step-dot').html('✓'); } else if (stepNum === currentStep) { $(this).removeClass('completed').addClass('active'); $(this).find('.senac-step-dot').html(stepNum); } else { $(this).removeClass('active completed'); $(this).find('.senac-step-dot').html(stepNum); } }); if($('.senac-wizard-header').length){ $('html, body').animate({ scrollTop: $('.senac-wizard-header').offset().top - 80 }, 300); } } $('.senac-btn-next').on('click', function() { let currentPanel = $('#step-' + currentStep); let isValid = true; currentPanel.find('input[required], select[required], textarea[required]').each(function() { if (!this.checkValidity()) { isValid = false; this.reportValidity(); return false; } }); if (isValid && currentStep < totalSteps) { currentStep++; updateWizardUI(); } }); $('.senac-btn-prev').on('click', function() { if (currentStep > 1) { currentStep--; updateWizardUI(); } }); function resetWizard() { currentStep = 1; updateWizardUI(); } /* ========================================================================= 2. FORMULÁRIO: MÁSCARAS E VALIDAÇÕES ========================================================================= */ $('#forn_cep').on('input', function() { let val = $(this).val().replace(/\D/g, ''); if (val.length > 5) val = val.substring(0, 5) + '-' + val.substring(5, 8); $(this).val(val); }); $('#forn_cnpj').on('input', function() { let val = $(this).val().replace(/\D/g, ''); if (val.length > 2) val = val.substring(0, 2) + '.' + val.substring(2); if (val.length > 6) val = val.substring(0, 6) + '.' + val.substring(6); if (val.length > 10) val = val.substring(0, 10) + '/' + val.substring(10); if (val.length > 15) val = val.substring(0, 15) + '-' + val.substring(15, 17); $(this).val(val); }); $('#forn_telefone').on('input', function() { let val = $(this).val().replace(/\D/g, ''); if (val.length > 11) val = val.substring(0, 11); let formatted = val; if (val.length === 0) { formatted = ''; } else if (val.length <= 2) { formatted = '(' + val; } else if (val.length <= 6) { formatted = '(' + val.substring(0, 2) + ') ' + val.substring(2); } else if (val.length <= 10) { formatted = '(' + val.substring(0, 2) + ') ' + val.substring(2, 6) + '-' + val.substring(6); } else { formatted = '(' + val.substring(0, 2) + ') ' + val.substring(2, 3) + '.' + val.substring(3, 7) + '-' + val.substring(7); } $(this).val(formatted); }); $('#forn_segmento').on('change', function() { let selecionado = $(this).val(); let containerOutro = $('#forn_segmento_outro_container'); let inputOutro = $('#forn_segmento_outro'); if (selecionado === 'Outros') { containerOutro.slideDown(300); inputOutro.prop('required', true).focus(); } else { containerOutro.slideUp(200); inputOutro.prop('required', false).val(''); } }); $('#forn_cep').on('blur', function() { let cep = $(this).val().replace(/\D/g, ''); if (cep.length === 8) { $('#forn_endereco').val('Buscando endereço...'); $.getJSON(`https://viacep.com.br/ws/${cep}/json/`, function(data) { if (!data.erro) { $('#forn_endereco').val(data.logradouro); $('#forn_bairro').val(data.bairro); $('#forn_cidade').val(data.localidade); $('#forn_uf').val(data.uf); $('#forn_numero').focus(); } else { $('#forn_endereco').val(''); alert('CEP não encontrado. Por favor, digite o endereço manualmente.'); } }).fail(function() { $('#forn_endereco').val(''); }); } }); $('#forn_cnpj').on('blur', function() { let cnpj = $(this).val().replace(/\D/g, ''); if (cnpj.length === 14) { $('#cnpj-loading').fadeIn(150); $.post(senacAjax.ajaxurl, { action: 'senac_buscar_cnpj', cnpj: cnpj, security: senacAjax.nonce }, function(response) { if(response.success) { let data = response.data; $('#forn_razao').val(data.razao_social); $('#forn_fantasia').val(data.nome_fantasia || data.razao_social); if(data.cnae_fiscal_descricao) { $('#forn_cnae').val(data.cnae_fiscal + ' - ' + data.cnae_fiscal_descricao); } if(data.cnaes_secundarios && data.cnaes_secundarios.length > 0) { let secCnaesText = data.cnaes_secundarios.map(c => c.codigo + ' - ' + c.descricao).join('\n'); $('#forn_cnae_secundario').val(secCnaesText); } else { $('#forn_cnae_secundario').val('Nenhuma atividade secundária registrada.'); } if(data.cep) { let cepFormatado = data.cep.toString().padStart(8, '0'); cepFormatado = cepFormatado.substring(0, 5) + '-' + cepFormatado.substring(5); $('#forn_cep').val(cepFormatado); $('#forn_endereco').val(data.logradouro || ''); $('#forn_numero').val(data.numero || ''); $('#forn_complemento').val(data.complemento || ''); $('#forn_bairro').val(data.bairro || ''); $('#forn_cidade').val(data.municipio || ''); $('#forn_uf').val(data.uf || ''); } } else { alert(response.data); $('#forn_razao, #forn_fantasia, #forn_cnae, #forn_cnae_secundario').val(''); } }).fail(function() { alert('Erro de comunicação do servidor ao validar o CNPJ.'); }).always(function() { $('#cnpj-loading').fadeOut(150); }); } }); $('#senac-form-fornecedor').on('submit', function(e) { e.preventDefault(); let btn = $('#btn-submit-forn'); let feedback = $('#forn-feedback'); let originalBtnHtml = btn.html(); btn.prop('disabled', true).html('A Processar...'); feedback.hide().removeClass('success error'); let formElement = document.getElementById('senac-form-fornecedor'); let formData = new FormData(formElement); formData.append('action', 'senac_salvar_fornecedor'); formData.append('security', senacAjax.nonce); $.ajax({ url: senacAjax.ajaxurl, type: 'POST', data: formData, processData: false, contentType: false, success: function(response) { btn.prop('disabled', false).html(originalBtnHtml); if(response.success) { if(response.data.tipo === 'completo') { feedback.css({'background':'#e6fffa', 'color':'#276749', 'border':'1px solid #b2f5ea'}) .html('✅ ' + response.data.mensagem).fadeIn(); } else { feedback.css({'background':'#fffaf0', 'color':'#dd6b20', 'border':'1px solid #fbd38d'}) .html('⚠️ ' + response.data.mensagem).fadeIn(); } $('#senac-form-fornecedor')[0].reset(); $('#forn_segmento_outro_container').hide(); // NOVO: Limpa o rascunho em caso de sucesso localStorage.removeItem('senacFornecedorDraft'); resetWizard(); $('html, body').animate({ scrollTop: feedback.offset().top - 120 }, 500); } else { feedback.css({'background':'#fff5f5', 'color':'#c53030', 'border':'1px solid #feb2b2'}) .html('❌ ' + response.data).fadeIn(); } }, error: function() { btn.prop('disabled', false).html(originalBtnHtml); feedback.css({'background':'#fff5f5', 'color':'#c53030', 'border':'1px solid #feb2b2'}) .html('❌ Ocorreu um erro no servidor. Tente novamente.').fadeIn(); } }); }); /* ========================================================================= 3. LÓGICA DO DASHBOARD AJAX + AÇÕES EM MASSA + MÉTRICAS E DATAS ========================================================================= */ function senacEscapeHTML(str) { if(str === null || str === undefined) return ''; if(typeof str !== 'string') return str.toString(); return str.replace(/[&<>'"]/g, tag => ({ '&': '&', '<': '<', '>': '>', "'": ''', '"': '"' }[tag] || tag)); } if ($('#senac-lista-cards-fornecedores').length) { let todosFornecedores = []; let listaFiltrada = []; let selectedIds = new Set(); let currentPage = 1; let cardsPerPage = window.innerWidth <= 768 ? 5 : 10; window.addEventListener('resize', () => { const novoLimite = window.innerWidth <= 768 ? 5 : 10; if (novoLimite !== cardsPerPage) { cardsPerPage = novoLimite; currentPage = 1; if(todosFornecedores.length > 0) renderizarLista(); } }); function buscarDadosServidor() { $.post(senacAjax.ajaxurl, { action: 'senac_get_lista_fornecedores', security: senacAjax.nonce }, function(response) { if (response.success) { todosFornecedores = response.data; aplicarFiltros(); } else { $('#senac-lista-cards-fornecedores').html('
Nenhum dado encontrado ou acesso negado.
'); } }).fail(function(){ $('#senac-lista-cards-fornecedores').html('
Erro ao conectar com o banco de dados do Senac.
'); }); } buscarDadosServidor(); function formatarDataBR(dataSql) { if(!dataSql) return ''; let dataCurta = dataSql.split(' ')[0]; let partes = dataCurta.split('-'); if(partes.length === 3) return `${partes[2]}/${partes[1]}/${partes[0]}`; return dataSql; } $('#btn-view-list').on('click', function() { $('.senac-toggle-btn').removeClass('active'); $(this).addClass('active'); $('#senac-lista-cards-fornecedores').removeClass('view-grid').addClass('view-list'); $('#btn-select-all').show(); }); $('#btn-view-grid').on('click', function() { $('.senac-toggle-btn').removeClass('active'); $(this).addClass('active'); $('#senac-lista-cards-fornecedores').removeClass('view-list').addClass('view-grid'); $('#btn-select-all').hide(); }); function renderizarPaginacao() { let paginationContainer = $('#senac-forn-paginacao'); paginationContainer.empty(); let total = listaFiltrada.length; let totalPages = Math.ceil(total / cardsPerPage); let startItem = (currentPage - 1) * cardsPerPage + 1; let endItem = Math.min(startItem + cardsPerPage - 1, total); let htmlInfo = total === 0 ? '' : `Exibindo ${startItem} a ${endItem} de ${total} registos`; let htmlBtns = ''; if (totalPages > 1) { for (let i = 1; i <= totalPages; i++) { htmlBtns += ``; } } paginationContainer.html(`${htmlInfo}
${htmlBtns}
`); } $(document).on('click', '.senac-page-btn', function() { currentPage = parseInt($(this).attr('data-page')); renderizarLista(); document.querySelector('.senac-custom-filters').scrollIntoView({ behavior: 'smooth', block: 'start' }); }); function getStatusBadge(status) { if(status === 'Enviado') return 'Enviado'; if(status === 'Falha') return 'Falha'; return 'Pendente'; } function getHomologacaoSelect(id, currentStatus) { const statuses = ['Novo', 'Em Análise', 'Homologado', 'Recusado']; let colorClass = ''; if (currentStatus === 'Homologado') colorClass = 'status-homologado'; else if (currentStatus === 'Recusado') colorClass = 'status-recusado'; else if (currentStatus === 'Em Análise') colorClass = 'status-analise'; else colorClass = 'status-novo'; let html = ``; return html; } function updateBulkBar() { const count = selectedIds.size; const bulkBar = $('#senac-bulk-bar'); if (count > 0) { $('#senac-bulk-count').text(count); bulkBar.addClass('visible'); } else { bulkBar.removeClass('visible'); } $('.forn-card').removeClass('selected-card'); selectedIds.forEach(id => { $(`#forn-card-${id}`).addClass('selected-card'); }); } function atualizarMetricas() { let total = listaFiltrada.length; let novos = listaFiltrada.filter(f => !f.status_homologacao || f.status_homologacao === 'Novo' || f.status_homologacao === 'Pendente').length; let homologados = listaFiltrada.filter(f => f.status_homologacao === 'Homologado').length; let recusados = listaFiltrada.filter(f => f.status_homologacao === 'Recusado').length; $('#metric-total').text(total); $('#metric-novos').text(novos); $('#metric-homologados').text(homologados); $('#metric-recusados').text(recusados); } function renderizarLista() { let container = $('#senac-lista-cards-fornecedores'); let counter = $('#senac-fornecedores-count'); let html = ''; counter.text(`Total de fornecedores filtrados: ${listaFiltrada.length}`); atualizarMetricas(); if (listaFiltrada.length === 0) { container.html('
Nenhum fornecedor com estes filtros.
'); $('#senac-forn-paginacao').empty(); return; } let start = (currentPage - 1) * cardsPerPage; let end = start + cardsPerPage; let itensDaPagina = listaFiltrada.slice(start, end); itensDaPagina.forEach(f => { let exibeSegmento = (f.segmento === 'Outros' && f.segmento_outro) ? f.segmento_outro : f.segmento; let statusEmail = getStatusBadge(f.email_status); let statusHomologacao = getHomologacaoSelect(f.id, f.status_homologacao || 'Novo'); let isChecked = selectedIds.has(parseInt(f.id)) ? 'checked' : ''; let cardClass = isChecked ? 'forn-card selected-card' : 'forn-card'; html += `
Data ${senacEscapeHTML(formatarDataBR(f.data_cadastro))}
CNPJ ${senacEscapeHTML(f.cnpj)}
Razão Social ${senacEscapeHTML(f.razao_social)}
Segmento ${senacEscapeHTML(exibeSegmento)}
Contato ${senacEscapeHTML(f.email)}
${senacEscapeHTML(f.telefone)}
Situação ${statusHomologacao}
`; }); container.html(html); renderizarPaginacao(); updateBulkBar(); } function aplicarFiltros() { let termo = $('#filtro-texto-forn').val().toLowerCase(); let seg = $('#filtro-segmento-forn').val(); let dataIni = $('#filtro-data-ini').val(); let dataFim = $('#filtro-data-fim').val(); listaFiltrada = todosFornecedores.filter(f => { let textMatch = f.razao_social.toLowerCase().includes(termo) || f.cnpj.includes(termo) || f.email.toLowerCase().includes(termo) || (f.nome_fantasia && f.nome_fantasia.toLowerCase().includes(termo)); let segMatch = (seg === '') || (f.segmento === seg); let dateMatch = true; if (dataIni || dataFim) { let dataCadastroFornecedor = f.data_cadastro.substring(0, 10); if (dataIni && dataCadastroFornecedor < dataIni) dateMatch = false; if (dataFim && dataCadastroFornecedor > dataFim) dateMatch = false; } return textMatch && segMatch && dateMatch; }); currentPage = 1; renderizarLista(); } $('#filtro-texto-forn').on('input', aplicarFiltros); $('#filtro-segmento-forn').on('change', aplicarFiltros); $('#filtro-data-ini, #filtro-data-fim').on('change', aplicarFiltros); $(document).on('change', '.forn-checkbox', function() { let id = parseInt($(this).val()); if(this.checked) { selectedIds.add(id); } else { selectedIds.delete(id); } updateBulkBar(); }); $('#btn-select-all').on('click', function() { let checkboxes = $('.forn-checkbox'); let allChecked = checkboxes.length === checkboxes.filter(':checked').length; checkboxes.each(function() { let id = parseInt($(this).val()); if (allChecked) { $(this).prop('checked', false); selectedIds.delete(id); } else { $(this).prop('checked', true); selectedIds.add(id); } }); updateBulkBar(); }); $('#senac-bulk-clear').on('click', function() { selectedIds.clear(); $('.forn-checkbox').prop('checked', false); updateBulkBar(); }); $(document).on('change', '.senac-status-select', function() { let select = $(this); let id = select.data('id'); let novoStatus = select.val(); let oldColorClass = select.attr('class').split(' ').filter(c => c.startsWith('status-')).join(' '); select.prop('disabled', true); $.post(senacAjax.ajaxurl, { action: 'senac_atualizar_status_fornecedor', id: id, status: novoStatus, security: senacAjax.nonce }, function(response) { select.prop('disabled', false); if(response.success) { select.removeClass(oldColorClass); if (novoStatus === 'Homologado') select.addClass('status-homologado'); else if (novoStatus === 'Recusado') select.addClass('status-recusado'); else if (novoStatus === 'Em Análise') select.addClass('status-analise'); else select.addClass('status-novo'); let index = todosFornecedores.findIndex(f => parseInt(f.id) === parseInt(id)); if(index !== -1) { todosFornecedores[index].status_homologacao = novoStatus; aplicarFiltros(); } } else { alert('Erro ao atualizar: ' + response.data); } }).fail(function() { select.prop('disabled', false); alert('Erro de comunicação com o servidor.'); }); }); window.senacAbrirModal = function(id) { let forn = todosFornecedores.find(x => parseInt(x.id) === parseInt(id)); if(!forn) return; let exibeSegmento = (forn.segmento === 'Outros' && forn.segmento_outro) ? "Outros (" + forn.segmento_outro + ")" : forn.segmento; let statusEmail = getStatusBadge(forn.email_status); let statusAtual = forn.status_homologacao || 'Novo'; let linkPortfolio = ''; if(forn.arquivo_portfolio) { linkPortfolio = ` Ver Portfólio PDF`; } else { linkPortfolio = `Sem portfólio anexado`; } let content = `

Razão Social:
${senacEscapeHTML(forn.razao_social)}

Nome Fantasia:
${senacEscapeHTML(forn.nome_fantasia || '-')}

CNPJ:
${senacEscapeHTML(forn.cnpj)}

CNAE Principal:
${senacEscapeHTML(forn.cnae || '-')}

Atividades Secundárias:

${senacEscapeHTML(forn.cnae_secundario || 'Não registrado')}

Segmento:
${senacEscapeHTML(exibeSegmento)}

E-mail:
${senacEscapeHTML(forn.email)}
Tel: ${senacEscapeHTML(forn.telefone)}

Situação Homologação: ${senacEscapeHTML(statusAtual)}

Status Confirmação (Email): ${statusEmail}

Localização

${senacEscapeHTML(forn.endereco)}, ${senacEscapeHTML(forn.numero)} ${senacEscapeHTML(forn.complemento || '')} - ${senacEscapeHTML(forn.bairro)}
${senacEscapeHTML(forn.cidade)}/${senacEscapeHTML(forn.uf)} - CEP: ${senacEscapeHTML(forn.cep)}

Produtos/Serviços Ofertados

${senacEscapeHTML(forn.produtos || 'Não detalhado.')}

${linkPortfolio} `; $('#senacModalContent').html(content); $('#senacModalForn, #senacModalOverlay').fadeIn(200); }; window.senacFecharModal = function() { $('#senacModalForn, #senacModalOverlay').fadeOut(200); }; window.senacImprimirFicha = function() { let conteudo = document.getElementById('senacModalContent').innerHTML; let janelaImpressao = window.open('', '', 'width=800,height=600'); janelaImpressao.document.write('Ficha do Fornecedor'); janelaImpressao.document.write(''); janelaImpressao.document.write(''); janelaImpressao.document.write('
'); janelaImpressao.document.write('

Ficha Cadastral de Fornecedor

'); janelaImpressao.document.write(conteudo); janelaImpressao.document.write(''); janelaImpressao.document.close(); janelaImpressao.focus(); setTimeout(function(){ janelaImpressao.print(); janelaImpressao.close(); }, 500); }; window.senacDeletarFornecedor = function(id) { if(confirm('Atenção: Tem a certeza de que deseja excluir permanentemente este fornecedor?')) { $.post(senacAjax.ajaxurl, { action: 'senac_deletar_fornecedor', id: id, security: senacAjax.nonce }, function(response) { if(response.success) { $('#forn-card-' + id).css('background', '#fed7d7').slideUp(300, function() { selectedIds.delete(parseInt(id)); buscarDadosServidor(); }); } else { alert('Erro ao excluir: ' + response.data); } }); } }; window.senacDeletarLote = function() { if (selectedIds.size === 0) return; if(confirm(`Atenção: Tem a certeza absoluta de que deseja excluir os ${selectedIds.size} fornecedores selecionados? Esta ação não pode ser desfeita.`)) { let btn = $('.btn-bulk-delete'); let originalHtml = btn.html(); btn.prop('disabled', true).html('A Excluir...'); let idsArray = Array.from(selectedIds); $.post(senacAjax.ajaxurl, { action: 'senac_deletar_fornecedores_lote', ids: idsArray, security: senacAjax.nonce }, function(response) { btn.prop('disabled', false).html(originalHtml); if(response.success) { selectedIds.clear(); updateBulkBar(); buscarDadosServidor(); alert('Fornecedores excluídos com sucesso!'); } else { alert('Erro ao excluir: ' + response.data); } }).fail(function() { btn.prop('disabled', false).html(originalHtml); alert('Erro de conexão com o servidor.'); }); } }; function carregarScriptSeguro(url, callback) { if (document.querySelector(`script[src="${url}"]`)) { callback(); return; } let script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; script.onload = callback; script.onerror = function() { alert('Erro de carregamento. Verifique o seu Firewall/AdBlock.'); }; document.head.appendChild(script); } window.senacGerarExcel = function(apenasLote = false) { let dadosAExportar = apenasLote ? todosFornecedores.filter(f => selectedIds.has(parseInt(f.id))) : listaFiltrada; if (dadosAExportar.length === 0) return alert('Nenhum dado para exportar.'); let btn = apenasLote ? $('.btn-bulk-excel') : $('.btn-excel'); let htmlOriginal = btn.html(); btn.prop('disabled', true).html('A Baixar...'); carregarScriptSeguro("https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js", function() { let exportData = dadosAExportar.map(f => ({ "Data": formatarDataBR(f.data_cadastro), "CNPJ": f.cnpj, "Razão Social": f.razao_social, "Situação": f.status_homologacao || 'Novo', "Nome Fantasia": f.nome_fantasia, "CNAE Principal": f.cnae, "CNAEs Secundários": f.cnae_secundario, "Segmento": f.segmento === 'Outros' ? f.segmento_outro : f.segmento, "E-mail": f.email, "Telefone": f.telefone, "Cidade/UF": f.cidade + '/' + f.uf, "Produtos": f.produtos, "Portfólio (URL)": f.arquivo_portfolio || 'Não enviado' })); let ws = XLSX.utils.json_to_sheet(exportData); let wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, "Fornecedores"); let filename = apenasLote ? "fornecedores-selecionados.xlsx" : "fornecedores-senac.xlsx"; XLSX.writeFile(wb, filename); btn.prop('disabled', false).html(htmlOriginal); if(apenasLote) { selectedIds.clear(); updateBulkBar(); $('.forn-checkbox').prop('checked', false); } }); }; window.senacGerarPDF = function(apenasLote = false) { let dadosAExportar = apenasLote ? todosFornecedores.filter(f => selectedIds.has(parseInt(f.id))) : listaFiltrada; if (dadosAExportar.length === 0) return alert('Nenhum dado para exportar.'); let btn = apenasLote ? $('.btn-bulk-pdf') : $('.btn-pdf'); let htmlOriginal = btn.html(); btn.prop('disabled', true).html('A Baixar...'); carregarScriptSeguro("https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js", function() { carregarScriptSeguro("https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.8.1/jspdf.plugin.autotable.min.js", function() { const jsPDF = window.jspdf ? window.jspdf.jsPDF : window.jsPDF; const doc = new jsPDF('l', 'pt', 'a4'); let tableBody = dadosAExportar.map(f => [ formatarDataBR(f.data_cadastro), f.cnpj, f.razao_social, f.segmento === 'Outros' ? f.segmento_outro : f.segmento, f.status_homologacao || 'Novo', f.telefone ]); doc.setFontSize(16); doc.setTextColor(0, 69, 135); doc.text("Relatório de Fornecedores - Senac Sergipe", 40, 40); doc.autoTable({ startY: 60, head: [['Data', 'CNPJ', 'Razão Social', 'Segmento', 'Situação', 'Telefone']], body: tableBody, styles: { fontSize: 8, cellPadding: 4 }, headStyles: { fillColor: [0, 69, 135] }, alternateRowStyles: { fillColor: [248, 250, 252] } }); let filename = apenasLote ? "fornecedores-selecionados.pdf" : "fornecedores-senac.pdf"; doc.save(filename); btn.prop('disabled', false).html(htmlOriginal); if(apenasLote) { selectedIds.clear(); updateBulkBar(); $('.forn-checkbox').prop('checked', false); } }); }); }; window.senacGerarExcelLote = function() { window.senacGerarExcel(true); }; window.senacGerarPDFLote = function() { window.senacGerarPDF(true); }; } }); })(jQuery); Senac Sergipe realiza visita técnica de acompanhamento pedagógico em três municípios sergipanos  Senac Sergipe | Cursos Técnicos, Profissionalizantes e Educação para o Trabalho

Senac Sergipe realiza visita técnica de acompanhamento pedagógico em três municípios sergipanos 

Na semana de 23 a 26 de fevereiro, as coordenadoras de cursos dos eixos de beleza e moda, Felipa Edite Siqueira e Karinne Sá, respectivamente, realizaram visita técnica aos municípios de Tobias Barreto, Itabaianinha e Pedrinhas, com o objetivo de participarem do encerramento das turmas de beleza , além de acompanhamento pedagógico. 

Na ocasião, a ação foi marcada por diálogo e escuta ativa fortalecendo o compromisso com a qualidade da oferta de formação profissional. Durante as visitas, a coordenadora do eixo de beleza, Felipa Edite Siqueira, destacou o envolvimento dos docentes e a aplicação prática do conhecimento adquirido em sala de aula. 

WhatsApp Image 2026 02 26 at 14.47.56 1 WhatsApp Image 2026 02 26 at 14.47.56 2

“Em Itabaianinha, o encerramento das turmas de Beleza foi um momento especialmente significativo, marcado por emoção, gratidão e sentimento de conquista. O diálogo com as alunas do curso de Práticas do Trabalho de Cabeleireiro, realizado em parceria com a Prefeitura Municipal de Itabaianinha e a Secretaria de Indústria e Comércio, evidenciou o impacto transformador da qualificação profissional em suas vidas”, explicou Felipa Edite. 

“Foi uma experiência maravilhosa. Quando trabalhamos com amor é gratificante. Agradeço ao Senac Sergipe e à Prefeitura de Itabaianinha pela oportunidade”, disse a instrutora de beleza Elisângela Santos. 

“Eu queria muito fazer esse curso para adquirir mais conhecimento e praticar cortes de cabelo, pois já trabalho na área. Gostei demais e muito obrigada a todos que compõem o Senac Sergipe”, agradeceu a aluna de Itabaianinha, Beatriz de Oliveira Soares. 

WhatsApp Image 2026 02 26 at 14.47.55 7 WhatsApp Image 2026 02 26 at 14.47.55 8

 

Compartilhar o Post:

Transforme seu futuro agora.

Cursos
Notícias