(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);
Presidente do Sistema Fecomércio/Sesc/Senac assina contrato para elaboração de projetos de construção da Casa do Comércio e escola Senac Sergipe | Cursos Técnicos, Profissionalizantes e Educação para o Trabalho
Ir para o conteúdo
Presidente do Sistema Fecomércio/Sesc/Senac assina contrato para elaboração de projetos de construção da Casa do Comércio e escola
Contando com as presenças de conselheiros do Sistema Fecomércio, diretores do Sesc e Senac e o promotor do Ministério Público do Trabalho (MPT) , Dr. Raymundo Ribeiro, o presidente do Sistema Fecomércio/Sesc/Senac, Marcos Andrade, assinou os contratos para elaboração dos projetos arquitetônicos da sede da entidade e da Escola Fecomércio. Também participaram o proprietário da empresa TC Engenharia, Diego Barbosa, e o engenheiro Ivan Araújo, que farão todo o trabalho arquitetônico e de engenharia para as novas unidades . A expectativa é que, após a conclusão dos projetos, as obras sejam executadas e finalizadas dentro de seis meses.
O presidente do Sistema destacou que a assinatura foi um momento ímpar para toda a Fecomércio e que a obra da escola vai atender em tempo hábil uma demanda solicitada pelo MPT.
“A unidade escolar da Fecomércio vai servir ao Senac . O novo prédio contará com 21 salas de aula, com toda infraestrutura necessária ao ambiente educacional. E tivemos o privilégio de contar hoje aqui com a presença do promotor do Trabalho, Dr. Raymundo, que tem acompanhado o nosso trabalho, nos orientando para que possamos atender os jovens em situação de vulnerabilidade”.
Marcos Andrade ressaltou os investimentos feitos pelo Senac em educação, que está retomando os cursos presenciais com celeridade, após a pandemia.
“Foram feitos grandes investimentos ainda no ano passado. Somente no Programa Senac de Gratuidade foram investidos R$ 26 milhões em 2022. A pretensão para este ano é destinar ao PSG mais de R$ 28 milhões e precisamos de espaço de mais salas de aula para colocar isso em prática. Até 2024 vamos atender completamente a determinação do MPT para retomar 100% as aulas presenciais”.
O diretor Regional do Senac destacou a importância do trabalho em conjunto da Fecomércio, Sesc e Senac, visando sempre a melhoria da qualidade de vida dos cidadãos.
“Com a autorização assinada hoje para viabilizar a construção da Escola da Fecomércio, vamos começar a zerar um déficit que surgiu após a pandemia, para o retorno das aulas presenciais do Senac. Essa é uma cobrança do Ministério Público do Trabalho. Já havíamos feito algumas tratativas com o órgão pedindo prazo até o final de 2025, mas com esse suporte da Fecomércio, do presidente Marcos Andrade, conseguiremos agilizar todo o processo licitatório da elaboração do projeto e execução e finalização da obra até o final deste ano. Serão mais 21 salas de aula que serão construídas, atendendo os padrões da educação profissional que fazemos questão de manter, para dar dignidade aos nossos alunos”.
Presente na reunião, a diretora Regional do Sesc frisou que o resultado do trabalho, feito de mãos dadas, não poderia ser diferente.
“Quero aqui agradecer ao presidente Marcos Andrade, por sempre nos apoiar enquanto diretores regionais do Sesc e Senac, nessa nossa missão que é valorosa. As ações que desenvolvemos são em prol dos cidadãos e nos fazem crescer como pessoas. Ajudamos quem precisa, levando ensino, educação profissional com excelência, com zelo e transparência. Ajudar os jovens a iniciarem suas carreiras profissionais é gratificante e no Sesc temos vários jovens aprendizes, que buscamos preparar da melhor forma possível”, declarou Aparecida Farias.
A atuação proativa do Sistema Fecomércio/Sesc/Senac foi elogiada pelo promotor do MPT Raymundo Ribeiro.
“São entidades abertas, que sempre fazem questão de ter o acompanhamento do Ministério do Trabalho. Sempre encontramos receptividade e portas abertas em todos os assuntos que precisamos debater. Sabemos que a educação profissional não substitui a acadêmica, pois ela prepara o jovem para iniciar a sua vida de trabalho. A qualificação profissional é um meio de vencer na vida, de forma digna, pelo trabalho. Contratando profissionais preparados, ganha o empregador e o trabalhador. A Fecomércio, Sesc e Senac estão de parabéns por esse trabalho, por essa visão”, finalizou.
Unidades
PSG (Gratuito)
Rede de Talentos
Portal do Aluno
Cursos