One Hat Cyber Team
Your IP :
216.73.216.64
Server IP :
162.240.179.46
Server :
Linux vps-14493116.nutrivittasaude.com.br 5.14.0-687.17.1.el9_8.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Jun 22 07:21:26 EDT 2026 x86_64
Server Software :
Apache
PHP Version :
8.2.31
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
home
/
lifeprimeti
/
meta.lifeprimeti.com.br
/
public
/
Edit File:
profissionais.php
<?php require_once __DIR__ . '/../config/database.php'; requirePermissao('profissionais'); $titulo = 'Profissionais'; require_once __DIR__ . '/../includes/header.php'; $empresaId = getEmpresaId(); if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['acao'])) { $acao = $_POST['acao']; if ($acao === 'cadastrar') { $nome = trim($_POST['nome']); $email = trim($_POST['email']); $telefone = trim($_POST['telefone']); $cargo_id = !empty($_POST['cargo_id']) ? (int)$_POST['cargo_id'] : null; $mostrar = isset($_POST['mostrar']) ? 1 : 0; $data_nascimento = !empty($_POST['data_nascimento']) ? $_POST['data_nascimento'] : null; $cpf = limparCPFCNPJ($_POST['cpf'] ?? ''); $chave_pix_tipo = $_POST['chave_pix_tipo'] ?? null; $chave_pix = trim($_POST['chave_pix'] ?? ''); $cep = limparCPFCNPJ($_POST['cep'] ?? ''); $endereco = trim($_POST['endereco'] ?? ''); $numero = trim($_POST['numero'] ?? ''); $complemento = trim($_POST['complemento'] ?? ''); $bairro = trim($_POST['bairro'] ?? ''); $cidade = trim($_POST['cidade'] ?? ''); $estado = strtoupper(trim($_POST['estado'] ?? '')); $especialidade = trim($_POST['especialidade'] ?? ''); $descricao = trim($_POST['descricao'] ?? ''); $cor_calendario = $_POST['cor_calendario'] ?? '#667eea'; $comissao_tipo = $_POST['comissao_tipo'] ?? 'percentual'; $comissao_valor = (float)($_POST['comissao_valor'] ?? 0); $senha = password_hash('123456', PASSWORD_DEFAULT); $foto = uploadFoto($_FILES['foto'] ?? null); try { $pdo->beginTransaction(); $pdo->prepare("INSERT INTO usuarios (empresa_id, nome, email, telefone, senha, tipo, foto) VALUES (?,?,?,?,?,'profissional',?)") ->execute([$empresaId, $nome, $email, $telefone, $senha, $foto]); $usuarioId = $pdo->lastInsertId(); $pdo->prepare("INSERT INTO profissionais (empresa_id, usuario_id, especialidade, descricao, cor_calendario, comissao_tipo, comissao_valor, cargo_id, mostrar, data_nascimento, cpf, chave_pix_tipo, chave_pix, cep, endereco, numero, complemento, bairro, cidade, estado) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)") ->execute([$empresaId, $usuarioId, $especialidade, $descricao, $cor_calendario, $comissao_tipo, $comissao_valor, $cargo_id, $mostrar, $data_nascimento, $cpf, $chave_pix_tipo, $chave_pix, $cep, $endereco, $numero, $complemento, $bairro, $cidade, $estado]); $pdo->commit(); $_SESSION['success_msg'] = 'Profissional cadastrado! Senha: 123456'; } catch (Exception $e) { $pdo->rollBack(); $_SESSION['error_msg'] = 'Erro: ' . $e->getMessage(); } redirect('profissionais.php'); } if ($acao === 'editar') { $id = (int)$_POST['id']; $nome = trim($_POST['nome']); $email = trim($_POST['email']); $telefone = trim($_POST['telefone']); $cargo_id = !empty($_POST['cargo_id']) ? (int)$_POST['cargo_id'] : null; $mostrar = isset($_POST['mostrar']) ? 1 : 0; $data_nascimento = !empty($_POST['data_nascimento']) ? $_POST['data_nascimento'] : null; $cpf = limparCPFCNPJ($_POST['cpf'] ?? ''); $chave_pix_tipo = $_POST['chave_pix_tipo'] ?? null; $chave_pix = trim($_POST['chave_pix'] ?? ''); $cep = limparCPFCNPJ($_POST['cep'] ?? ''); $endereco = trim($_POST['endereco'] ?? ''); $numero = trim($_POST['numero'] ?? ''); $complemento = trim($_POST['complemento'] ?? ''); $bairro = trim($_POST['bairro'] ?? ''); $cidade = trim($_POST['cidade'] ?? ''); $estado = strtoupper(trim($_POST['estado'] ?? '')); $especialidade = trim($_POST['especialidade'] ?? ''); $descricao = trim($_POST['descricao'] ?? ''); $cor_calendario = $_POST['cor_calendario'] ?? '#667eea'; $comissao_tipo = $_POST['comissao_tipo'] ?? 'percentual'; $comissao_valor = (float)($_POST['comissao_valor'] ?? 0); $ativo = isset($_POST['ativo']) ? 1 : 0; try { $pdo->beginTransaction(); $prof = $pdo->prepare("SELECT usuario_id FROM profissionais WHERE id=? AND empresa_id=?"); $prof->execute([$id, $empresaId]); $pData = $prof->fetch(); if ($pData) { $pdo->prepare("UPDATE usuarios SET nome=?, email=?, telefone=?, ativo=? WHERE id=? AND empresa_id=?")->execute([$nome, $email, $telefone, $ativo, $pData['usuario_id'], $empresaId]); if (!empty($_FILES['foto']['name']) && $_FILES['foto']['error'] === UPLOAD_ERR_OK) { $foto = uploadFoto($_FILES['foto']); if ($foto) $pdo->prepare("UPDATE usuarios SET foto=? WHERE id=? AND empresa_id=?")->execute([$foto, $pData['usuario_id'], $empresaId]); } } $pdo->prepare("UPDATE profissionais SET especialidade=?, descricao=?, cor_calendario=?, comissao_tipo=?, comissao_valor=?, cargo_id=?, mostrar=?, data_nascimento=?, cpf=?, chave_pix_tipo=?, chave_pix=?, cep=?, endereco=?, numero=?, complemento=?, bairro=?, cidade=?, estado=? WHERE id=?") ->execute([$especialidade, $descricao, $cor_calendario, $comissao_tipo, $comissao_valor, $cargo_id, $mostrar, $data_nascimento, $cpf, $chave_pix_tipo, $chave_pix, $cep, $endereco, $numero, $complemento, $bairro, $cidade, $estado, $id]); $pdo->commit(); $_SESSION['success_msg'] = 'Profissional atualizado!'; } catch (Exception $e) { $pdo->rollBack(); $_SESSION['error_msg'] = 'Erro: ' . $e->getMessage(); } redirect('profissionais.php'); } if ($acao === 'excluir') { $id = (int)$_POST['id']; $prof = $pdo->prepare("SELECT usuario_id FROM profissionais WHERE id=? AND empresa_id=?"); $prof->execute([$id, $empresaId]); $pData = $prof->fetch(); $pdo->prepare("DELETE FROM profissionais WHERE id=?")->execute([$id]); if ($pData) $pdo->prepare("DELETE FROM usuarios WHERE id=? AND empresa_id=?")->execute([$pData['usuario_id'], $empresaId]); $_SESSION['success_msg'] = 'Profissional excluido!'; redirect('profissionais.php'); } if ($acao === 'add_horario') { $profissional_id = (int)$_POST['profissional_id']; $dia_semana = (int)$_POST['dia_semana']; $hora_inicio = $_POST['hora_inicio']; $hora_fim = $_POST['hora_fim']; try { $pdo->prepare("INSERT INTO horarios_profissionais (profissional_id, dia_semana, hora_inicio, hora_fim) VALUES (?,?,?,?)")->execute([$profissional_id, $dia_semana, $hora_inicio, $hora_fim]); $_SESSION['success_msg'] = 'Horario adicionado!'; } catch (PDOException $e) { $_SESSION['error_msg'] = 'Erro: ' . $e->getMessage(); } redirect('profissionais.php'); } if ($acao === 'add_servicos_prof') { $profissional_id = (int)$_POST['profissional_id']; $servicos_ids = $_POST['servico_id'] ?? []; $precos = $_POST['preco'] ?? []; $duracoes = $_POST['duracao'] ?? []; $comissaoTipos = $_POST['comissao_tipo'] ?? []; $comissaoValores = $_POST['comissao_valor'] ?? []; $count = 0; try { $stmt = $pdo->prepare("INSERT INTO servicos_profissionais (profissional_id, servico_id, preco, duracao, comissao_tipo, comissao_valor) VALUES (?,?,?,?,?,?)"); foreach ($servicos_ids as $i => $sid) { $sid = (int)$sid; if (!$sid) continue; $preco = !empty($precos[$i]) ? (float)$precos[$i] : null; $duracao = !empty($duracoes[$i]) ? (int)$duracoes[$i] : null; $ctipo = $comissaoTipos[$i] ?? null; $cvalor = !empty($comissaoValores[$i]) ? (float)$comissaoValores[$i] : null; $stmt->execute([$profissional_id, $sid, $preco, $duracao, $ctipo, $cvalor]); $count++; } $_SESSION['success_msg'] = "$count servico(s) vinculado(s)!"; } catch (PDOException $e) { $_SESSION['error_msg'] = 'Erro: ' . $e->getMessage(); } redirect('profissionais.php'); } if ($acao === 'add_horarios') { $profissional_id = (int)$_POST['profissional_id']; $dias = $_POST['dia_semana'] ?? []; $inicios = $_POST['hora_inicio'] ?? []; $fins = $_POST['hora_fim'] ?? []; $intInicios = $_POST['intervalo_inicio'] ?? []; $intFins = $_POST['intervalo_fim'] ?? []; $existentes = $pdo->prepare("SELECT dia_semana, hora_inicio, hora_fim FROM horarios_profissionais WHERE profissional_id=?"); $existentes->execute([$profissional_id]); $existentesDias = []; foreach ($existentes as $e) { $existentesDias[$e['dia_semana']][] = $e; } $count = 0; $erros = []; try { $stmt = $pdo->prepare("INSERT INTO horarios_profissionais (profissional_id, dia_semana, hora_inicio, hora_fim, intervalo_inicio, intervalo_fim) VALUES (?,?,?,?,?,?)"); foreach ($dias as $i => $dia) { if (!isset($inicios[$i]) || !isset($fins[$i])) continue; $dia = (int)$dia; $hInicio = $inicios[$i]; $hFim = $fins[$i]; $intInicio = trim($intInicios[$i] ?? '') ?: null; $intFim = trim($intFins[$i] ?? '') ?: null; if ($hInicio >= $hFim) { $erros[] = "Linha ".($i+1).": inicio maior que fim"; continue; } if ($intInicio && $intFim && $intInicio >= $intFim) { $erros[] = "Linha ".($i+1).": intervalo invalido"; continue; } if (isset($existentesDias[$dia])) { foreach ($existentesDias[$dia] as $ex) { if ($hInicio < $ex['hora_fim'] && $hFim > $ex['hora_inicio']) { $erros[] = getDiaSemana($dia).": horario ".$hInicio."-".$hFim." conflita com existente ".$ex['hora_inicio']."-".$ex['hora_fim']; continue 2; } } } $stmt->execute([$profissional_id, $dia, $hInicio, $hFim, $intInicio, $intFim]); $existentesDias[$dia][] = ['hora_inicio'=>$hInicio, 'hora_fim'=>$hFim]; $count++; } $msg = "$count horario(s) adicionado(s)!"; if ($erros) $msg .= ' Erros: ' . implode('; ', $erros); $_SESSION['success_msg'] = $msg; } catch (PDOException $e) { $_SESSION['error_msg'] = 'Erro: ' . $e->getMessage(); } redirect('profissionais.php'); } if ($acao === 'del_horario') { $pdo->prepare("DELETE FROM horarios_profissionais WHERE id=?")->execute([(int)$_POST['id']]); $_SESSION['success_msg'] = 'Horario removido!'; redirect('profissionais.php'); } if ($acao === 'editar_horario') { $id = (int)$_POST['id']; $dia_semana = (int)$_POST['dia_semana']; $hora_inicio = $_POST['hora_inicio']; $hora_fim = $_POST['hora_fim']; $intInicio = trim($_POST['intervalo_inicio'] ?? '') ?: null; $intFim = trim($_POST['intervalo_fim'] ?? '') ?: null; try { $pdo->prepare("UPDATE horarios_profissionais SET dia_semana=?, hora_inicio=?, hora_fim=?, intervalo_inicio=?, intervalo_fim=? WHERE id=?") ->execute([$dia_semana, $hora_inicio, $hora_fim, $intInicio, $intFim, $id]); $_SESSION['success_msg'] = 'Horario atualizado!'; } catch (PDOException $e) { $_SESSION['error_msg'] = 'Erro: ' . $e->getMessage(); } redirect('profissionais.php'); } if ($acao === 'toggle_ativo') { $id = (int)$_POST['id']; $prof = $pdo->prepare("SELECT usuario_id, u.ativo FROM profissionais p JOIN usuarios u ON p.usuario_id = u.id WHERE p.id=? AND p.empresa_id=?"); $prof->execute([$id, $empresaId]); $pData = $prof->fetch(); if ($pData) { $novoAtivo = $pData['ativo'] ? 0 : 1; $pdo->prepare("UPDATE usuarios SET ativo=? WHERE id=? AND empresa_id=?")->execute([$novoAtivo, $pData['usuario_id'], $empresaId]); $_SESSION['success_msg'] = $novoAtivo ? 'Profissional ativado!' : 'Profissional desativado!'; } redirect('profissionais.php'); } if ($acao === 'upload_anexo') { $profissional_id = (int)$_POST['profissional_id']; if (!empty($_FILES['arquivo']['name']) && $_FILES['arquivo']['error'] === UPLOAD_ERR_OK) { $ext = strtolower(pathinfo($_FILES['arquivo']['name'], PATHINFO_EXTENSION)); $nomeArquivo = uniqid('anexo_') . '.' . $ext; $pasta = __DIR__ . '/../assets/uploads/anexos_profissionais/'; if (!is_dir($pasta)) mkdir($pasta, 0755, true); if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $pasta . $nomeArquivo)) { $pdo->prepare("INSERT INTO anexos (empresa_id, modelo, modelo_id, nome_original, arquivo) VALUES (?, 'profissional', ?, ?, ?)") ->execute([$empresaId, $profissional_id, $_FILES['arquivo']['name'], 'assets/uploads/anexos_profissionais/' . $nomeArquivo]); $_SESSION['success_msg'] = 'Arquivo anexado!'; } else { $_SESSION['error_msg'] = 'Erro ao enviar arquivo.'; } } else { $_SESSION['error_msg'] = 'Selecione um arquivo.'; } redirect('profissionais.php'); } if ($acao === 'excluir_anexo') { $anexoId = (int)$_POST['anexo_id']; $anexo = $pdo->prepare("SELECT arquivo FROM anexos WHERE id=? AND empresa_id=? AND modelo='profissional'"); $anexo->execute([$anexoId, $empresaId]); $aData = $anexo->fetch(); if ($aData) { $caminho = __DIR__ . '/../' . $aData['arquivo']; if (file_exists($caminho)) unlink($caminho); } $pdo->prepare("DELETE FROM anexos WHERE id=? AND empresa_id=?")->execute([$anexoId, $empresaId]); $_SESSION['success_msg'] = 'Anexo excluido!'; redirect('profissionais.php'); } } $profissionais = $pdo->prepare("SELECT p.*, u.nome, u.email, u.telefone, u.foto, u.ativo as usuario_ativo, c.nome as cargo_nome FROM profissionais p JOIN usuarios u ON p.usuario_id = u.id LEFT JOIN cargos c ON p.cargo_id = c.id WHERE p.empresa_id = ? ORDER BY u.nome"); $profissionais->execute([$empresaId]); $profissionaisLista = $profissionais->fetchAll(); $servicos = $pdo->prepare("SELECT id, nome, preco, duracao, comissao_tipo, comissao_valor FROM servicos WHERE empresa_id=? AND ativo=1"); $servicos->execute([$empresaId]); $servicosLista = $servicos->fetchAll(); $cargosLista = $pdo->prepare("SELECT * FROM cargos WHERE empresa_id=? AND ativo=1 ORDER BY nome"); $cargosLista->execute([$empresaId]); $cargosLista = $cargosLista->fetchAll(); $chavePixTipos = ['telefone'=>'Telefone','cpf'=>'CPF','aleatoria'=>'Aleatoria','cnpj'=>'CNPJ','email'=>'Email']; $diasOptions = ''; for($d=0;$d<=6;$d++) { $diasOptions .= '<option value="'.$d.'">'.getDiaSemanaAbrev($d).'</option>'; } ?> <style> .img-profissional { width:100%; max-width:200px; height:auto; object-fit:cover; border-radius:8px; } .thumb-profissional { width:40px; height:40px; border-radius:50%; object-fit:cover; } </style> <script> var DIAS_OPTIONS = '<?= $diasOptions ?>'; var SERV_OPTIONS = '<?php $o=''; foreach($servicosLista as $s){$o.='<option value="'.$s['id'].'">'.addslashes($s['nome']).'</option>';} echo $o; ?>'; function addHorarioRow(id) { var c = document.getElementById('horariosContainer' + id); if (!c) return; var div = document.createElement('div'); div.className = 'row g-2 align-items-end horario-row mb-2'; div.innerHTML = '<div class="col-3"><select name="dia_semana[]" class="form-select form-select-sm">' + DIAS_OPTIONS + '</select></div><div class="col-2"><input type="time" name="hora_inicio[]" class="form-control form-control-sm" value="08:00"></div><div class="col-2"><input type="time" name="intervalo_inicio[]" class="form-control form-control-sm" placeholder="Intervalo" value=""></div><div class="col-2"><input type="time" name="intervalo_fim[]" class="form-control form-control-sm" placeholder="Retorno" value=""></div><div class="col-2"><input type="time" name="hora_fim[]" class="form-control form-control-sm" value="18:00"></div><div class="col-1"><button type="button" class="btn btn-outline-danger btn-sm w-100" onclick="this.closest(\'.horario-row\').remove()"><i class="bi bi-x"></i></button></div>'; c.appendChild(div); } function addServicoProRow(id) { var c = document.getElementById('servicosContainer' + id); if (!c) return; var div = document.createElement('div'); div.className = 'row g-2 align-items-end servico-pro-row mb-2'; div.innerHTML = '<div class="col-3"><select name="servico_id[]" class="form-select form-select-sm">' + SERV_OPTIONS + '</select></div><div class="col-2"><input type="number" name="preco[]" class="form-control form-control-sm" placeholder="Preco" step="0.01"></div><div class="col-2"><input type="number" name="duracao[]" class="form-control form-control-sm" placeholder="Min"></div><div class="col-2"><select name="comissao_tipo[]" class="form-select form-select-sm"><option value="">Padrao</option><option value="percentual">%</option><option value="fixo">R$</option></select></div><div class="col-2"><input type="number" name="comissao_valor[]" class="form-control form-control-sm" placeholder="Valor" step="0.01"></div><div class="col-1"><button type="button" class="btn btn-outline-danger btn-sm w-100" onclick="this.closest(\'.servico-pro-row\').remove()"><i class="bi bi-x"></i></button></div>'; c.appendChild(div); } </script> <div class="card animate-fadeIn"> <div class="card-header d-flex align-items-center justify-content-between"> <h3 class="card-title"><i class="bi bi-person-badge me-2 text-info"></i>Profissionais</h3> <button class="btn btn-primary btn-sm" onclick="abrirModal('modalCadastrar')"><i class="bi bi-plus"></i> Novo</button> </div> <div class="card-body p-0"> <div class="table-responsive"> <table class="table"> <thead><tr><th>Foto</th><th>Nome</th><th>Email</th><th>Cargo</th><th>Comissao</th><th>Status</th><th>Acoes</th></tr></thead> <tbody> <?php foreach ($profissionaisLista as $p): ?> <tr> <td><?php if ($p['foto']): ?><img src="<?= URL_BASE . $p['foto'] ?>" class="thumb-profissional"><?php else: ?><div class="rounded-circle bg-gradient d-flex align-items-center justify-content-center" style="background:<?= $p['cor_calendario'] ?>;width:40px;height:40px"><i class="bi bi-scissors text-white"></i></div><?php endif; ?></td> <td class="fw-semibold"><?= sanitize($p['nome']) ?></td> <td><?= sanitize($p['email']) ?></td> <td><span class="badge bg-secondary bg-opacity-10 text-secondary"><?= sanitize($p['cargo_nome'] ?? '-') ?></span></td> <td><span class="badge bg-info bg-opacity-10 text-info border border-info border-opacity-25"><?= $p['comissao_tipo'] === 'percentual' ? $p['comissao_valor'] . '%' : formatarMoeda($p['comissao_valor']) ?></span></td> <td><?= $p['usuario_ativo'] ? '<span class="badge bg-success bg-opacity-10 text-success">Ativo</span>' : '<span class="badge bg-danger bg-opacity-10 text-danger">Inativo</span>' ?></td> <td class="text-nowrap"> <button class="btn btn-sm btn-info" onclick="abrirModal('modalMostrar<?= $p['id'] ?>')" title="Mostrar"><i class="bi bi-eye"></i></button> <form method="POST" style="display:inline"> <input type="hidden" name="acao" value="toggle_ativo"> <input type="hidden" name="id" value="<?= $p['id'] ?>"> <button class="btn btn-sm <?= $p['usuario_ativo'] ? 'btn-secondary' : 'btn-success' ?>" title="<?= $p['usuario_ativo'] ? 'Desativar' : 'Ativar' ?>"><i class="bi <?= $p['usuario_ativo'] ? 'bi-toggle-on' : 'bi-toggle-off' ?>"></i></button> </form> <button class="btn btn-sm btn-primary" onclick="abrirModal('modalHorarios<?= $p['id'] ?>')" title="Horarios"><i class="bi bi-clock"></i></button> <button class="btn btn-sm btn-primary" onclick="abrirModal('modalServicos<?= $p['id'] ?>')" title="Servicos"><i class="bi bi-scissors"></i></button> <button class="btn btn-sm btn-warning" onclick="abrirModal('modalEditar<?= $p['id'] ?>')"><i class="bi bi-pencil"></i></button> <button class="btn btn-sm btn-secondary" onclick="abrirModal('modalAnexos<?= $p['id'] ?>')" title="Anexos"><i class="bi bi-paperclip"></i></button> <form method="POST" style="display:inline" onsubmit="return confirm('Excluir profissional?')"><input type="hidden" name="acao" value="excluir"><input type="hidden" name="id" value="<?= $p['id'] ?>"><button class="btn btn-danger btn-sm"><i class="bi bi-trash"></i></button></form> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> </div> </div> <div class="modal fade" id="modalCadastrar" tabindex="-1"><div class="modal-dialog modal-lg modal-dialog-centered"> <form method="POST" class="modal-content" enctype="multipart/form-data"><div class="modal-header"><h5 class="modal-title"><i class="bi bi-plus-circle me-2 text-info"></i>Novo Profissional</h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div> <div class="modal-body"> <input type="hidden" name="acao" value="cadastrar"> <div class="row g-3"> <div class="col-md-4"><label class="form-label">Foto</label><input type="file" name="foto" class="form-control" accept="image/*"></div> <div class="col-md-8"><label class="form-label">Nome Completo</label><input type="text" name="nome" class="form-control" required></div> <div class="col-md-6"><label class="form-label">Email</label><input type="email" name="email" class="form-control" required></div> <div class="col-md-6"><label class="form-label">Celular</label><input type="text" name="telefone" class="form-control mask-telefone"></div> <div class="col-md-4"><label class="form-label">Cargo</label> <select name="cargo_id" class="form-select"><option value="">Selecione...</option> <?php foreach ($cargosLista as $c): ?><option value="<?= $c['id'] ?>"><?= sanitize($c['nome']) ?></option><?php endforeach; ?> </select> </div> <div class="col-md-4"><label class="form-label">Mostrar Registros</label> <div class="form-check pt-2"><input type="checkbox" name="mostrar" class="form-check-input" id="mostrarCad" checked><label class="form-check-label" for="mostrarCad">Sim</label></div> </div> <div class="col-md-4"><label class="form-label">Data Nascimento</label><input type="date" name="data_nascimento" class="form-control"></div> <div class="col-md-3"><label class="form-label">CPF</label><input type="text" name="cpf" class="form-control mask-cpf"></div> <div class="col-md-5"><label class="form-label">Tipo Chave Pix</label> <select name="chave_pix_tipo" class="form-select"><option value="">Nenhum</option> <?php foreach ($chavePixTipos as $k => $v): ?><option value="<?= $k ?>"><?= $v ?></option><?php endforeach; ?> </select> </div> <div class="col-md-4"><label class="form-label">Chave Pix</label><input type="text" name="chave_pix" class="form-control"></div> </div> <hr class="my-3"> <div class="row g-3"> <div class="col-md-4"><label class="form-label">CEP</label> <div class="input-group"><input type="text" name="cep" class="form-control mask-cep" id="cepCad"><button type="button" class="btn btn-outline-info" onclick="buscarCep('cepCad')"><i class="bi bi-search"></i></button></div> </div> <div class="col-md-6"><label class="form-label">Endereco</label><input type="text" name="endereco" class="form-control" id="enderecoCad"></div> <div class="col-md-2"><label class="form-label">Numero</label><input type="text" name="numero" class="form-control"></div> <div class="col-md-3"><label class="form-label">Complemento</label><input type="text" name="complemento" class="form-control"></div> <div class="col-md-3"><label class="form-label">Bairro</label><input type="text" name="bairro" class="form-control" id="bairroCad"></div> <div class="col-md-4"><label class="form-label">Cidade</label><input type="text" name="cidade" class="form-control" id="cidadeCad"></div> <div class="col-md-2"><label class="form-label">Estado</label><input type="text" name="estado" class="form-control" id="estadoCad" maxlength="2"></div> </div> <hr class="my-3"> <div class="row g-3"> <div class="col-md-12"><label class="form-label">Descricao</label><textarea name="descricao" class="form-control" rows="2"></textarea></div> <div class="col-4"><label class="form-label">Cor</label><input type="color" name="cor_calendario" class="form-control form-control-color" value="#667eea"></div> <div class="col-4"><label class="form-label">Comissao Tipo</label><select name="comissao_tipo" class="form-select"><option value="percentual">Percentual (%)</option><option value="fixo">Fixo (R$)</option></select></div> <div class="col-4"><label class="form-label">Valor</label><input type="number" name="comissao_valor" class="form-control" step="0.01" min="0" value="0"></div> </div> </div> <div class="modal-footer"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button><button type="submit" class="btn btn-primary">Salvar</button></div> </form> </div></div> <?php foreach ($profissionaisLista as $p): $horarios = $pdo->prepare("SELECT * FROM horarios_profissionais WHERE profissional_id=? ORDER BY dia_semana, hora_inicio"); $horarios->execute([$p['id']]); $horariosLista = $horarios->fetchAll(); $servProf = $pdo->prepare("SELECT sp.*, s.nome, s.preco, s.duracao FROM servicos_profissionais sp JOIN servicos s ON sp.servico_id = s.id WHERE sp.profissional_id = ?"); $servProf->execute([$p['id']]); $servicosProf = $servProf->fetchAll(); $anexos = $pdo->prepare("SELECT * FROM anexos WHERE modelo='profissional' AND modelo_id=? AND empresa_id=? ORDER BY created_at DESC"); $anexos->execute([$p['id'], $empresaId]); $anexosLista = $anexos->fetchAll(); ?> <div class="modal fade" id="modalMostrar<?= $p['id'] ?>" tabindex="-1"><div class="modal-dialog modal-lg modal-dialog-centered"> <div class="modal-content"><div class="modal-header"><h5 class="modal-title"><i class="bi bi-person-badge me-2 text-info"></i><?= sanitize($p['nome']) ?></h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div> <div class="modal-body"> <div class="row g-3"> <div class="col-md-4 text-center"> <?php if ($p['foto']): ?><img src="<?= URL_BASE . $p['foto'] ?>" class="img-profissional"><?php else: ?><div class="rounded-circle bg-gradient d-inline-flex align-items-center justify-content-center" style="background:<?= $p['cor_calendario'] ?>;width:120px;height:120px"><i class="bi bi-scissors text-white fs-1"></i></div><?php endif; ?> </div> <div class="col-md-8"> <table class="table table-sm"> <tr><td class="text-secondary">Nome</td><td class="fw-semibold"><?= sanitize($p['nome']) ?></td></tr> <tr><td class="text-secondary">Email</td><td><?= sanitize($p['email']) ?></td></tr> <tr><td class="text-secondary">Celular</td><td><?= sanitize($p['telefone']) ?></td></tr> <tr><td class="text-secondary">Cargo</td><td><?= sanitize($p['cargo_nome'] ?? '-') ?></td></tr> <tr><td class="text-secondary">Data Nascimento</td><td><?= $p['data_nascimento'] ? formatarData($p['data_nascimento']) : '-' ?></td></tr> <tr><td class="text-secondary">CPF</td><td><?= $p['cpf'] ? substr($p['cpf'],0,3).'.'.substr($p['cpf'],3,3).'.'.substr($p['cpf'],6,3).'-'.substr($p['cpf'],9) : '-' ?></td></tr> <tr><td class="text-secondary">Chave Pix</td><td><?= $p['chave_pix_tipo'] && $p['chave_pix'] ? strtoupper($p['chave_pix_tipo']) . ': ' . sanitize($p['chave_pix']) : '-' ?></td></tr> <tr><td class="text-secondary">Endereco</td><td><?= $p['endereco'] ? sanitize($p['endereco']) . ', ' . sanitize($p['numero']) . ($p['complemento'] ? ' - ' . sanitize($p['complemento']) : '') . ' - ' . sanitize($p['bairro']) . ', ' . sanitize($p['cidade']) . '/' . sanitize($p['estado']) : '-' ?></td></tr> <tr><td class="text-secondary">CEP</td><td><?= $p['cep'] ? substr($p['cep'],0,5).'-'.substr($p['cep'],5) : '-' ?></td></tr> <tr><td class="text-secondary">Especialidade</td><td><?= sanitize($p['especialidade'] ?: '-') ?></td></tr> <tr><td class="text-secondary">Comissao</td><td><?= $p['comissao_tipo'] === 'percentual' ? $p['comissao_valor'] . '%' : formatarMoeda($p['comissao_valor']) ?></td></tr> <tr><td class="text-secondary">Mostrar Registros</td><td><?= $p['mostrar'] ? '<span class="badge bg-success bg-opacity-10 text-success">Sim</span>' : '<span class="badge bg-danger bg-opacity-10 text-danger">Nao</span>' ?></td></tr> <tr><td class="text-secondary">Status</td><td><?= $p['usuario_ativo'] ? '<span class="badge bg-success bg-opacity-10 text-success">Ativo</span>' : '<span class="badge bg-danger bg-opacity-10 text-danger">Inativo</span>' ?></td></tr> </table> </div> </div> </div> <div class="modal-footer"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fechar</button></div> </div> </div></div> <div class="modal fade" id="modalHorarios<?= $p['id'] ?>" tabindex="-1"><div class="modal-dialog modal-lg modal-dialog-centered"> <div class="modal-content"><div class="modal-header"><h5 class="modal-title"><i class="bi bi-clock me-2 text-info"></i>Horarios — <?= sanitize($p['nome']) ?></h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div> <div class="modal-body"> <div class="table-responsive mb-3"> <table class="table table-sm"><thead><tr><th>Dia</th><th>Inicio</th><th>Intervalo</th><th>Fim</th><th></th></tr></thead> <tbody><?php foreach ($horariosLista as $h): ?><tr><td><?= getDiaSemana($h['dia_semana']) ?></td><td><?= formatarHora($h['hora_inicio']) ?></td><td><?= ($h['intervalo_inicio'] && $h['intervalo_fim']) ? formatarHora($h['intervalo_inicio']).' - '.formatarHora($h['intervalo_fim']) : '-' ?></td><td><?= formatarHora($h['hora_fim']) ?></td><td class="text-nowrap"><button class="btn btn-warning btn-sm" onclick="abrirModal('modalEditHorario<?= $h['id'] ?>')"><i class="bi bi-pencil"></i></button><form method="POST" style="display:inline"><input type="hidden" name="acao" value="del_horario"><input type="hidden" name="id" value="<?= $h['id'] ?>"><button class="btn btn-danger btn-sm"><i class="bi bi-x"></i></button></form></td></tr><?php endforeach; ?><?php if (empty($horariosLista)): ?><tr><td colspan="5" class="text-center text-secondary">Nenhum horario</td></tr><?php endif; ?></tbody> </table> </div> <hr> <h6 class="fw-semibold mb-2"><i class="bi bi-plus-circle me-1"></i>Adicionar Horarios</h6> <form method="POST" id="formHorarios<?= $p['id'] ?>"> <input type="hidden" name="acao" value="add_horarios"> <input type="hidden" name="profissional_id" value="<?= $p['id'] ?>"> <div id="horariosContainer<?= $p['id'] ?>"> <div class="row g-2 align-items-end horario-row mb-2"> <div class="col-3"><select name="dia_semana[]" class="form-select form-select-sm"><?php for($d=0;$d<=6;$d++): ?><option value="<?= $d ?>"><?= getDiaSemanaAbrev($d) ?></option><?php endfor; ?></select></div> <div class="col-2"><input type="time" name="hora_inicio[]" class="form-control form-control-sm" value="08:00"></div> <div class="col-2"><input type="time" name="intervalo_inicio[]" class="form-control form-control-sm" placeholder="Intervalo" value=""></div> <div class="col-2"><input type="time" name="intervalo_fim[]" class="form-control form-control-sm" placeholder="Retorno" value=""></div> <div class="col-2"><input type="time" name="hora_fim[]" class="form-control form-control-sm" value="18:00"></div> <div class="col-1"><button type="button" class="btn btn-outline-danger btn-sm w-100" onclick="this.closest('.horario-row').remove()"><i class="bi bi-x"></i></button></div> </div> </div> <div class="d-flex gap-2 mt-2"> <button type="button" class="btn btn-outline-success btn-sm" onclick="addHorarioRow(<?= $p['id'] ?>)"><i class="bi bi-plus-lg"></i> Adicionar Linha</button> <button type="submit" class="btn btn-primary btn-sm"><i class="bi bi-save"></i> Salvar Todos</button> </div> </form> </div> </div> </div></div> <?php foreach ($horariosLista as $h): ?> <div class="modal fade" id="modalEditHorario<?= $h['id'] ?>" tabindex="-1"><div class="modal-dialog modal-sm modal-dialog-centered"> <form method="POST" class="modal-content"><div class="modal-header"><h6 class="modal-title"><i class="bi bi-pencil me-1 text-warning"></i>Editar Horario</h6><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div> <div class="modal-body"> <input type="hidden" name="acao" value="editar_horario"> <input type="hidden" name="id" value="<?= $h['id'] ?>"> <div class="mb-2"><label class="form-label small">Dia</label><select name="dia_semana" class="form-select form-select-sm"><?php for($d=0;$d<=6;$d++): ?><option value="<?= $d ?>" <?= $d==$h['dia_semana']?'selected':'' ?>><?= getDiaSemanaAbrev($d) ?></option><?php endfor; ?></select></div> <div class="mb-2"><label class="form-label small">Inicio</label><input type="time" name="hora_inicio" class="form-control form-control-sm" value="<?= formatarHora($h['hora_inicio']) ?>"></div> <div class="row g-2 mb-2"><div class="col-6"><label class="form-label small">Intervalo</label><input type="time" name="intervalo_inicio" class="form-control form-control-sm" value="<?= $h['intervalo_inicio'] ? formatarHora($h['intervalo_inicio']) : '' ?>"></div><div class="col-6"><label class="form-label small">Retorno</label><input type="time" name="intervalo_fim" class="form-control form-control-sm" value="<?= $h['intervalo_fim'] ? formatarHora($h['intervalo_fim']) : '' ?>"></div></div> <div class="mb-2"><label class="form-label small">Fim</label><input type="time" name="hora_fim" class="form-control form-control-sm" value="<?= formatarHora($h['hora_fim']) ?>"></div> </div> <div class="modal-footer px-3 pb-2 pt-0"><button type="submit" class="btn btn-primary btn-sm w-100"><i class="bi bi-save me-1"></i>Atualizar</button></div> </form> </div></div> <?php endforeach; ?> <div class="modal fade" id="modalServicos<?= $p['id'] ?>" tabindex="-1"><div class="modal-dialog modal-lg modal-dialog-centered"> <div class="modal-content"><div class="modal-header"><h5 class="modal-title"><i class="bi bi-scissors me-2 text-primary"></i>Servicos — <?= sanitize($p['nome']) ?></h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div> <div class="modal-body"> <div class="table-responsive mb-3"> <table class="table table-sm"><thead><tr><th>Servico</th><th>Preco</th><th>Duracao</th><th>Comissao</th><th></th></tr></thead> <tbody><?php foreach ($servicosProf as $sp): ?><tr><td><?= sanitize($sp['nome']) ?></td><td><?= formatarMoeda($sp['preco']) ?></td><td><?= $sp['duracao'] ?>min</td><td><span class="badge bg-info bg-opacity-10 text-info"><?= $sp['comissao_tipo']==='percentual' ? $sp['comissao_valor'].'%' : formatarMoeda($sp['comissao_valor']) ?></span></td><td><form method="POST" action="servicos_profissionais.php"><input type="hidden" name="acao" value="excluir"><input type="hidden" name="id" value="<?= $sp['id'] ?>"><button class="btn btn-danger btn-sm"><i class="bi bi-x"></i></button></form></td></tr><?php endforeach; ?><?php if (empty($servicosProf)): ?><tr><td colspan="5" class="text-center text-secondary">Nenhum servico vinculado</td></tr><?php endif; ?></tbody> </table> </div> <hr> <h6 class="fw-semibold mb-2"><i class="bi bi-plus-circle me-1"></i>Vincular Servicos</h6> <form method="POST" id="formServicos<?= $p['id'] ?>"> <input type="hidden" name="acao" value="add_servicos_prof"> <input type="hidden" name="profissional_id" value="<?= $p['id'] ?>"> <div id="servicosContainer<?= $p['id'] ?>"> <div class="row g-2 align-items-end servico-pro-row mb-2"> <div class="col-3"><select name="servico_id[]" class="form-select form-select-sm"><?php foreach ($servicosLista as $s): ?><option value="<?= $s['id'] ?>"><?= sanitize($s['nome']) ?></option><?php endforeach; ?></select></div> <div class="col-2"><input type="number" name="preco[]" class="form-control form-control-sm" placeholder="Preco" step="0.01"></div> <div class="col-2"><input type="number" name="duracao[]" class="form-control form-control-sm" placeholder="Min"></div> <div class="col-2"><select name="comissao_tipo[]" class="form-select form-select-sm"><option value="">Padrao</option><option value="percentual">%</option><option value="fixo">R$</option></select></div> <div class="col-2"><input type="number" name="comissao_valor[]" class="form-control form-control-sm" placeholder="Valor" step="0.01"></div> <div class="col-1"><button type="button" class="btn btn-outline-danger btn-sm w-100" onclick="this.closest('.servico-pro-row').remove()"><i class="bi bi-x"></i></button></div> </div> </div> <div class="d-flex gap-2 mt-2"> <button type="button" class="btn btn-outline-success btn-sm" onclick="addServicoProRow(<?= $p['id'] ?>)"><i class="bi bi-plus-lg"></i> Adicionar Linha</button> <button type="submit" class="btn btn-primary btn-sm"><i class="bi bi-save"></i> Salvar Todos</button> </div> </form> </div> </div> </div></div> <div class="modal fade" id="modalAnexos<?= $p['id'] ?>" tabindex="-1"><div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"> <div class="modal-content"><div class="modal-header"><h5 class="modal-title"><i class="bi bi-paperclip me-2 text-secondary"></i>Anexos — <?= sanitize($p['nome']) ?></h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div> <div class="modal-body"> <form method="POST" enctype="multipart/form-data" class="mb-3"> <input type="hidden" name="acao" value="upload_anexo"> <input type="hidden" name="profissional_id" value="<?= $p['id'] ?>"> <div class="input-group"><input type="file" name="arquivo" class="form-control" required><button class="btn btn-primary" type="submit"><i class="bi bi-upload me-1"></i>Enviar</button></div> </form> <?php if (empty($anexosLista)): ?><p class="text-center text-secondary my-3">Nenhum anexo</p><?php endif; ?> <div class="list-group"><?php foreach ($anexosLista as $a): ?><div class="list-group-item d-flex justify-content-between align-items-center py-2"> <a href="<?= URL_BASE . $a['arquivo'] ?>" target="_blank" class="text-decoration-none small"><i class="bi bi-file-earmark me-2"></i><?= sanitize($a['nome_original']) ?></a> <form method="POST" style="display:inline"><input type="hidden" name="acao" value="excluir_anexo"><input type="hidden" name="anexo_id" value="<?= $a['id'] ?>"><button class="btn btn-sm btn-danger" onclick="return confirm('Excluir anexo?')"><i class="bi bi-trash"></i></button></form> </div><?php endforeach; ?></div> </div> </div> </div></div> <div class="modal fade" id="modalEditar<?= $p['id'] ?>" tabindex="-1"><div class="modal-dialog modal-lg modal-dialog-centered"> <form method="POST" class="modal-content" enctype="multipart/form-data"><div class="modal-header"><h5 class="modal-title"><i class="bi bi-pencil-square me-2 text-warning"></i>Editar <?= sanitize($p['nome']) ?></h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div> <div class="modal-body"> <input type="hidden" name="acao" value="editar"><input type="hidden" name="id" value="<?= $p['id'] ?>"> <div class="row g-3"> <div class="col-md-4"><label class="form-label">Foto</label><input type="file" name="foto" class="form-control" accept="image/*"><?php if ($p['foto']): ?><small class="text-secondary">Atual: <a href="<?= URL_BASE . $p['foto'] ?>" target="_blank">ver foto</a></small><?php endif; ?></div> <div class="col-md-8"><label class="form-label">Nome Completo</label><input type="text" name="nome" class="form-control" value="<?= sanitize($p['nome']) ?>" required></div> <div class="col-md-6"><label class="form-label">Email</label><input type="email" name="email" class="form-control" value="<?= sanitize($p['email']) ?>"></div> <div class="col-md-6"><label class="form-label">Celular</label><input type="text" name="telefone" class="form-control mask-telefone" value="<?= sanitize($p['telefone']) ?>"></div> <div class="col-md-4"><label class="form-label">Cargo</label> <select name="cargo_id" class="form-select"><option value="">Selecione...</option> <?php foreach ($cargosLista as $c): ?><option value="<?= $c['id'] ?>" <?= $p['cargo_id'] == $c['id'] ? 'selected' : '' ?>><?= sanitize($c['nome']) ?></option><?php endforeach; ?> </select> </div> <div class="col-md-4"><label class="form-label">Mostrar Registros</label> <div class="form-check pt-2"><input type="checkbox" name="mostrar" class="form-check-input" id="mostrar<?= $p['id'] ?>" <?= $p['mostrar'] ? 'checked' : '' ?>><label class="form-check-label" for="mostrar<?= $p['id'] ?>">Sim</label></div> </div> <div class="col-md-4"><label class="form-label">Data Nascimento</label><input type="date" name="data_nascimento" class="form-control" value="<?= $p['data_nascimento'] ?>"></div> <div class="col-md-3"><label class="form-label">CPF</label><input type="text" name="cpf" class="form-control mask-cpf" value="<?= sanitize($p['cpf']) ?>"></div> <div class="col-md-5"><label class="form-label">Tipo Chave Pix</label> <select name="chave_pix_tipo" class="form-select"><option value="">Nenhum</option> <?php foreach ($chavePixTipos as $k => $v): ?><option value="<?= $k ?>" <?= $p['chave_pix_tipo'] === $k ? 'selected' : '' ?>><?= $v ?></option><?php endforeach; ?> </select> </div> <div class="col-md-4"><label class="form-label">Chave Pix</label><input type="text" name="chave_pix" class="form-control" value="<?= sanitize($p['chave_pix']) ?>"></div> </div> <hr class="my-3"> <div class="row g-3"> <div class="col-md-4"><label class="form-label">CEP</label> <div class="input-group"><input type="text" name="cep" class="form-control mask-cep" id="cepEdit<?= $p['id'] ?>" value="<?= sanitize($p['cep']) ?>"><button type="button" class="btn btn-outline-info" onclick="buscarCep('cepEdit<?= $p['id'] ?>', 'enderecoEdit<?= $p['id'] ?>', 'bairroEdit<?= $p['id'] ?>', 'cidadeEdit<?= $p['id'] ?>', 'estadoEdit<?= $p['id'] ?>')"><i class="bi bi-search"></i></button></div> </div> <div class="col-md-6"><label class="form-label">Endereco</label><input type="text" name="endereco" class="form-control" id="enderecoEdit<?= $p['id'] ?>" value="<?= sanitize($p['endereco']) ?>"></div> <div class="col-md-2"><label class="form-label">Numero</label><input type="text" name="numero" class="form-control" value="<?= sanitize($p['numero']) ?>"></div> <div class="col-md-3"><label class="form-label">Complemento</label><input type="text" name="complemento" class="form-control" value="<?= sanitize($p['complemento']) ?>"></div> <div class="col-md-3"><label class="form-label">Bairro</label><input type="text" name="bairro" class="form-control" id="bairroEdit<?= $p['id'] ?>" value="<?= sanitize($p['bairro']) ?>"></div> <div class="col-md-4"><label class="form-label">Cidade</label><input type="text" name="cidade" class="form-control" id="cidadeEdit<?= $p['id'] ?>" value="<?= sanitize($p['cidade']) ?>"></div> <div class="col-md-2"><label class="form-label">Estado</label><input type="text" name="estado" class="form-control" id="estadoEdit<?= $p['id'] ?>" maxlength="2" value="<?= sanitize($p['estado']) ?>"></div> </div> <hr class="my-3"> <div class="row g-3"> <div class="col-md-12"><label class="form-label">Descricao</label><textarea name="descricao" class="form-control" rows="2"><?= sanitize($p['descricao']) ?></textarea></div> <div class="col-4"><label class="form-label">Cor</label><input type="color" name="cor_calendario" class="form-control form-control-color" value="<?= $p['cor_calendario'] ?? '#667eea' ?>"></div> <div class="col-4"><label class="form-label">Comissao</label><select name="comissao_tipo" class="form-select"><option value="percentual" <?= $p['comissao_tipo']==='percentual'?'selected':'' ?>>%</option><option value="fixo" <?= $p['comissao_tipo']==='fixo'?'selected':'' ?>>R$</option></select></div> <div class="col-4"><label class="form-label">Valor</label><input type="number" name="comissao_valor" class="form-control" step="0.01" min="0" value="<?= $p['comissao_valor'] ?? 0 ?>"></div> </div> <div class="form-check mt-3"><input type="checkbox" name="ativo" class="form-check-input" id="ativo<?= $p['id'] ?>" <?= $p['usuario_ativo'] ? 'checked' : '' ?>><label class="form-check-label" for="ativo<?= $p['id'] ?>">Ativo</label></div> </div> <div class="modal-footer"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button><button type="submit" class="btn btn-primary">Atualizar</button></div> </form> </div></div> <?php endforeach; ?> <?php $extraJs = <<<'JS' <script> function buscarCep(cepId, enderecoId, bairroId, cidadeId, estadoId) { var cep = document.getElementById(cepId); if (!cep) return; var v = cep.value.replace(/\D/g, ''); if (v.length !== 8) { alert('CEP invalido'); return; } fetch('https://viacep.com.br/ws/' + v + '/json/') .then(function(r) { return r.json(); }) .then(function(d) { if (d.erro) { alert('CEP nao encontrado'); return; } if (enderecoId) { var el = document.getElementById(enderecoId); if (el) el.value = d.logradouro || ''; } if (bairroId) { var el = document.getElementById(bairroId); if (el) el.value = d.bairro || ''; } if (cidadeId) { var el = document.getElementById(cidadeId); if (el) el.value = d.localidade || ''; } if (estadoId) { var el = document.getElementById(estadoId); if (el) el.value = d.uf || ''; } }) .catch(function() { alert('Erro ao consultar CEP'); }); } </script> JS; require_once __DIR__ . '/../includes/footer.php'; ?>
Simpan