(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 ? '' : ``;
let htmlBtns = '';
if (totalPages > 1) {
for (let i = 1; i <= totalPages; i++) {
htmlBtns += `${i} `;
}
}
paginationContainer.html(`${htmlInfo}`);
}
$(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 = ``;
statuses.forEach(s => {
let selected = (s === currentStatus) ? 'selected' : '';
html += `${s} `;
});
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}
E-mail
${statusEmail}
Ver Info
`;
});
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
Ir para o conteúdo
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.
“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.
Unidades
PSG (Gratuito)
Rede de Talentos
Portal do Aluno
Cursos