File: /home/onlyfibr/public_html/assinar/includes/footer_public.php
<!-- Footer -->
<footer class="footer">
<div class="container">
<div class="row">
<div class="col-md-6">
<p>© <?php echo date('Y'); ?> <?php echo htmlspecialchars(defined('NOME_PROVEDOR') ? NOME_PROVEDOR : 'Provedor'); ?>. Todos os direitos reservados.</p>
</div>
<div class="col-md-6 text-md-end">
<?php if (defined('TELEFONE_SUPORTE')): ?>
<p><i class="fas fa-phone-alt me-1"></i> Suporte: <?php echo htmlspecialchars(TELEFONE_CONTATO); ?></p>
<?php else: ?>
<p><i class="fas fa-phone-alt me-1"></i> Suporte: <a href="tel:+5500000000000">Entre em contato</a></p>
<?php endif; ?>
</div>
</div>
</div>
</footer>
<!-- Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script src="js/custom.js"></script>
<!-- Caso o arquivo custom.js não seja encontrado, este script é um fallback -->
<script>
if (typeof jQuery === 'undefined') {
console.error('jQuery não está carregado. Verifique sua inclusão.');
} else {
$(document).ready(function() {
// ======= GESTÃO DE CAMPOS PF/PJ =======
function togglePessoaFields() {
if ($('#tipoPF').is(':checked')) {
$('#camposPF').addClass('visible').slideDown();
$('#camposPJ').removeClass('visible').slideUp();
$('#label_nome').html('Nome Completo <span class="text-danger">*</span>');
$('#label_cpfcnpj').html('CPF <span class="text-danger">*</span>');
} else if ($('#tipoPJ').is(':checked')) {
$('#camposPJ').addClass('visible').slideDown();
$('#camposPF').removeClass('visible').slideUp();
$('#label_nome').html('Razão Social <span class="text-danger">*</span>');
$('#label_cpfcnpj').html('CNPJ <span class="text-danger">*</span>');
}
}
// Adiciona listeners
$('input[name="tipo_pessoa"]').on('change', togglePessoaFields);
// Inicializa na carga da página
if ($('#tipoPF').is(':checked') || $('#tipoPJ').is(':checked')) {
togglePessoaFields();
}
// ======= CAMPOS DE VENDEDOR =======
// Seletores para os radio buttons e a div/select do vendedor
const radioVendedorSim = $('#vendedor_sim');
const radioVendedorNao = $('#vendedor_nao');
const vendedorDiv = $('#vendedor-select-div');
const vendedorSelect = $('#vendedor_id');
const vendedorLoading = $('#vendedor-loading');
const vendedorError = $('#vendedor-error');
let vendedoresCarregados = false; // Flag para evitar recargas múltiplas
// Função para mostrar/esconder e habilitar/desabilitar a seleção de vendedor
function toggleVendedorFields() {
if (radioVendedorSim.is(':checked')) {
vendedorDiv.addClass('visible').slideDown();
vendedorSelect.prop('required', true); // Torna obrigatório
// Carrega vendedores via Ajax SÓ SE "Sim" estiver marcado E AINDA NÃO carregou
if (!vendedoresCarregados) {
loadVendedores();
} else {
vendedorSelect.prop('disabled', false); // Apenas reabilita se já carregado
}
} else {
vendedorDiv.removeClass('visible').slideUp();
vendedorSelect.prop('required', false); // Não é mais obrigatório
vendedorSelect.prop('disabled', true); // Desabilita para eviar envio acidental
vendedorSelect.removeClass('is-invalid'); // Limpa erro se esconder
vendedorSelect.val(''); // Limpa seleção ao esconder
}
}
// Função para carregar vendedores via AJAX
function loadVendedores() {
vendedorLoading.show();
vendedorError.hide();
vendedorSelect.prop('disabled', true).html('<option value="">Carregando...</option>');
$.ajax({
url: window.location.href,
type: 'GET',
dataType: 'json',
data: {
action: 'get_vendedores' // Ação definida no PHP
},
success: function(response) {
vendedorSelect.empty().append('<option value="">-- Selecione o Vendedor --</option>'); // Limpa e adiciona placeholder
if (response.success && response.vendedores && response.vendedores.length > 0) {
$.each(response.vendedores, function(index, vendedor) {
// Adiciona cada vendedor como uma opção
if (vendedor.id && vendedor.nome) { // Verifica se tem id e nome
var option = $('<option>', {
value: vendedor.id,
text: vendedor.nome
});
// Pré-seleciona se o ID corresponde ao que veio do form_data (em caso de erro)
<?php if (isset($form_data['vendedor_id']) && is_numeric($form_data['vendedor_id'])) : ?>
if (vendedor.id == <?php echo json_encode($form_data['vendedor_id']); ?>) {
option.prop('selected', true);
}
<?php endif; ?>
vendedorSelect.append(option);
}
});
vendedoresCarregados = true; // Marca como carregado
} else {
vendedorSelect.html('<option value="">Erro ao carregar</option>'); // Mensagem de erro no select
vendedorError.text(response.message || 'Não foi possível carregar a lista de vendedores.').show();
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.error("Erro AJAX Vendedores:", textStatus, errorThrown); // Log erro no console
vendedorSelect.html('<option value="">Erro de comunicação</option>');
vendedorError.text('Erro de comunicação ao buscar vendedores. Tente novamente.').show();
},
complete: function() {
vendedorLoading.hide(); // Esconde o loading
// Habilita o select APENAS se "Sim" ainda estiver marcado
if (radioVendedorSim.is(':checked')) {
vendedorSelect.prop('disabled', false);
}
}
});
}
// Adiciona o listener para os radio buttons de vendedor
$('input[name="vendedor_opcao"]').on('change', toggleVendedorFields);
// Chama a função no carregamento da página para definir o estado inicial correto
toggleVendedorFields();
// ======= GESTÃO DE INDICAÇÃO =======
const radioIndicadoSim = $('#indicado_sim');
const radioIndicadoNao = $('#indicado_nao');
const indicacaoDiv = $('#indicacao-detalhes');
const indicadorCpfCnpj = $('#indicador_cpfcnpj');
// Função para mostrar/esconder campos de indicação
function toggleIndicacaoFields() {
if (radioIndicadoSim.is(':checked')) {
indicacaoDiv.addClass('visible').slideDown();
indicadorCpfCnpj.prop('required', true);
} else {
indicacaoDiv.removeClass('visible').slideUp();
indicadorCpfCnpj.prop('required', false);
indicadorCpfCnpj.removeClass('is-invalid');
$('#indicador-feedback').html('');
}
}
// Adiciona listeners para indicação
$('input[name="foi_indicado"]').on('change', toggleIndicacaoFields);
// Inicializa na carga da página
toggleIndicacaoFields();
// Verificar indicador
$('#verificar-indicador').on('click', function() {
const cpfcnpj = indicadorCpfCnpj.val().replace(/\D/g, '');
if (cpfcnpj.length < 11) {
$('#indicador-feedback').html('<span class="text-danger"><i class="fas fa-times-circle"></i> CPF/CNPJ inválido. Digite pelo menos 11 dígitos.</span>');
return;
}
$('#indicador-feedback').html('<span class="text-muted"><i class="fas fa-spinner fa-spin"></i> Verificando...</span>');
$.ajax({
url: window.location.href,
type: 'GET',
dataType: 'json',
data: {
action: 'verificar_indicador',
indicador_cpfcnpj: cpfcnpj
},
success: function(response) {
if (response.success) {
$('#indicador-feedback').html('<span class="text-success"><i class="fas fa-check-circle"></i> ' + response.message + '</span>');
} else {
$('#indicador-feedback').html('<span class="text-danger"><i class="fas fa-times-circle"></i> ' + response.message + '</span>');
}
},
error: function() {
$('#indicador-feedback').html('<span class="text-danger"><i class="fas fa-exclamation-triangle"></i> Erro de comunicação. Tente novamente.</span>');
}
});
});
// ======= FORMATAÇÃO E BUSCA CEP =======
// CEP - formatação e busca automática
$('#cep').on('input', function() {
// Remove caracteres não numéricos
let value = this.value.replace(/\D/g, '');
// Formata como 00000-000
if (value.length > 5) {
this.value = value.substring(0, 5) + '-' + value.substring(5, 8);
} else {
this.value = value;
}
// Busca CEP automaticamente quando tiver 8 dígitos
if (value.length === 8) {
buscarCep(value);
}
});
// Busca endereço via ViaCEP
function buscarCep(cep) {
$('#cep-loading').show();
$('#cep-error').hide();
$.getJSON('https://viacep.com.br/ws/' + cep + '/json/', function(data) {
if (!data.erro) {
$('#logradouro').val(data.logradouro);
$('#bairro').val(data.bairro);
$('#cidade').val(data.localidade);
$('#uf').val(data.uf);
$('#numero').focus();
} else {
$('#cep-error').show();
}
}).fail(function() {
$('#cep-error').show();
}).always(function() {
$('#cep-loading').hide();
});
}
// ======= FORMATAÇÃO AUTOMÁTICA =======
// Formatação de CPF/CNPJ
$('#cpfcnpj').on('input', function() {
let value = this.value.replace(/\D/g, '');
if ($('#tipoPF').is(':checked')) {
// Formato CPF: 000.000.000-00
if (value.length > 9) {
this.value = value.substring(0, 3) + '.' +
value.substring(3, 6) + '.' +
value.substring(6, 9) + '-' +
value.substring(9, 11);
} else if (value.length > 6) {
this.value = value.substring(0, 3) + '.' +
value.substring(3, 6) + '.' +
value.substring(6);
} else if (value.length > 3) {
this.value = value.substring(0, 3) + '.' +
value.substring(3);
} else {
this.value = value;
}
} else if ($('#tipoPJ').is(':checked')) {
// Formato CNPJ: 00.000.000/0000-00
if (value.length > 12) {
this.value = value.substring(0, 2) + '.' +
value.substring(2, 5) + '.' +
value.substring(5, 8) + '/' +
value.substring(8, 12) + '-' +
value.substring(12, 14);
} else if (value.length > 8) {
this.value = value.substring(0, 2) + '.' +
value.substring(2, 5) + '.' +
value.substring(5, 8) + '/' +
value.substring(8);
} else if (value.length > 5) {
this.value = value.substring(0, 2) + '.' +
value.substring(2, 5) + '.' +
value.substring(5);
} else if (value.length > 2) {
this.value = value.substring(0, 2) + '.' +
value.substring(2);
} else {
this.value = value;
}
} else {
this.value = value;
}
});
// Formatação de telefone
$('#celular').on('input', function() {
let value = this.value.replace(/\D/g, '');
if (value.length > 10) {
// Formato: (00) 00000-0000
this.value = '(' + value.substring(0, 2) + ') ' +
value.substring(2, 7) + '-' +
value.substring(7, 11);
} else if (value.length > 6) {
// Formato: (00) 0000-0000
this.value = '(' + value.substring(0, 2) + ') ' +
value.substring(2, 6) + '-' +
value.substring(6, 10);
} else if (value.length > 2) {
// Formato parcial: (00)
this.value = '(' + value.substring(0, 2) + ') ' +
value.substring(2);
} else {
this.value = value;
}
});
// ======= VALIDAÇÃO DO FORMULÁRIO =======
// Remove formatação antes do envio
$('#form-precadastro').on('submit', function() {
// Remove formatação do CPF/CNPJ
const cpfCnpjInput = $('#cpfcnpj');
cpfCnpjInput.val(cpfCnpjInput.val().replace(/\D/g, ''));
// Remove formatação do Celular
const celularInput = $('#celular');
celularInput.val(celularInput.val().replace(/\D/g, ''));
// Remove formatação do CEP
const cepInput = $('#cep');
cepInput.val(cepInput.val().replace(/\D/g, ''));
// Continua com o envio do formulário
return true;
});
// ======= CONTEÚDO DOS MODAIS =======
$('#modalTermos').on('show.bs.modal', function (e) {
$(this).find('.modal-body').html('<div class="p-4"><h4>Termos de Uso</h4><p>Estes são os termos de uso do serviço. Ao contratar nossos serviços, você concorda em cumprir estes termos.</p><p>Os termos completos incluem informações sobre pagamentos, cancelamento, uso adequado do serviço, limitações técnicas e outras condições importantes.</p><p>Para mais informações, entre em contato com nosso suporte.</p></div>');
});
$('#modalPolitica').on('show.bs.modal', function (e) {
$(this).find('.modal-body').html('<div class="p-4"><h4>Política de Privacidade</h4><p>Nossa política de privacidade descreve como coletamos, usamos e protegemos suas informações pessoais.</p><p>Respeitamos sua privacidade e utilizamos seus dados apenas para os fins específicos de prestação de serviço, faturamento e comunicação relacionada ao serviço contratado.</p><p>Seus dados são armazenados de forma segura e não são compartilhados com terceiros sem sua autorização.</p></div>');
});
});
}
</script>
</body>
</html>