One Hat Cyber Team
Your IP :
216.73.216.36
Server IP :
162.240.179.46
Server :
Linux vps-14493116.nutrivittasaude.com.br 5.14.0-611.49.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Apr 21 16:39:08 EDT 2026 x86_64
Server Software :
Apache
PHP Version :
8.2.31
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
home
/
lifeprimeti
/
meta.lifeprimeti.com.br
/
admin
/
Edit File:
faturas.php
<?php require_once __DIR__ . '/../config/database.php'; requireSuperAdmin(); $titulo = 'Faturas'; require_once __DIR__ . '/../includes/header.php'; $filterEmpresa = (int)($_GET['empresa_id'] ?? 0); $filterStatus = $_GET['status'] ?? ''; $where = []; $params = []; if ($filterEmpresa) { $where[] = 'f.empresa_id = ?'; $params[] = $filterEmpresa; } if ($filterStatus) { $where[] = 'f.status = ?'; $params[] = $filterStatus; } $whereClause = $where ? 'WHERE ' . implode(' AND ', $where) : ''; $faturas = $pdo->prepare("SELECT f.*, e.nome as empresa_nome, p.nome as plano_nome FROM faturas f JOIN empresas e ON f.empresa_id = e.id LEFT JOIN planos p ON f.plano_id = p.id $whereClause ORDER BY f.data_vencimento DESC LIMIT 200")->execute($params) ? $pdo->query("SELECT f.*, e.nome as empresa_nome, p.nome as plano_nome FROM faturas f JOIN empresas e ON f.empresa_id = e.id LEFT JOIN planos p ON f.plano_id = p.id $whereClause ORDER BY f.data_vencimento DESC LIMIT 200")->fetchAll() : []; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['acao'])) { $id = (int)($_POST['id'] ?? 0); if ($_POST['acao'] === 'pagar') { $pdo->prepare("UPDATE faturas SET status='paga', data_pagamento=CURDATE() WHERE id=?")->execute([$id]); $_SESSION['success_msg'] = 'Fatura marcada como paga!'; redirect('faturas.php'); } if ($_POST['acao'] === 'cancelar') { $pdo->prepare("UPDATE faturas SET status='cancelada' WHERE id=?")->execute([$id]); $_SESSION['success_msg'] = 'Fatura cancelada!'; redirect('faturas.php'); } if ($_POST['acao'] === 'enviar') { $metodo = $_POST['metodo'] ?? 'email'; $fatura = $pdo->prepare("SELECT f.*, e.nome as empresa_nome, e.email, p.nome as plano_nome FROM faturas f JOIN empresas e ON f.empresa_id=e.id LEFT JOIN planos p ON f.plano_id=p.id WHERE f.id=?")->execute([$id]); $fatura = $pdo->query("SELECT f.*, e.nome as empresa_nome, e.email, p.nome as plano_nome FROM faturas f JOIN empresas e ON f.empresa_id=e.id LEFT JOIN planos p ON f.plano_id=p.id WHERE f.id=$id")->fetch(); if ($fatura) { $ch = curl_init(URL_BASE . 'api/faturas_enviar.php'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query([ 'token' => $_SESSION['csrf_token'] ?? '', 'fatura_id' => $id, 'metodo' => $metodo, ]), CURLOPT_RETURNTRANSFER => true, CURLOPT_COOKIE => session_name() . '=' . session_id(), ]); $resp = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $respData = json_decode($resp, true); if ($httpCode === 200 && !empty($respData['success'])) { $pdo->prepare("UPDATE faturas SET enviado_em=NOW(), enviado_por=? WHERE id=?")->execute([$metodo, $id]); $_SESSION['success_msg'] = 'Fatura enviada com sucesso via ' . $metodo . '!'; } else { $_SESSION['error_msg'] = 'Erro ao enviar fatura: ' . ($respData['error'] ?? 'Erro desconhecido'); } redirect('faturas.php'); } } } $empresas = $pdo->query("SELECT id, nome FROM empresas ORDER BY nome")->fetchAll(); ?> <div class="row"> <div class="col-12"> <div class="card"> <div class="card-header d-flex justify-content-between align-items-center flex-wrap gap-2"> <h3 class="card-title"><i class="bi bi-receipt me-2 text-info"></i>Faturas</h3> <form method="GET" class="d-flex gap-2 align-items-center flex-wrap"> <select name="empresa_id" class="form-select form-select-sm" style="width:auto"> <option value="">Todas empresas</option> <?php foreach ($empresas as $emp): ?> <option value="<?= $emp['id'] ?>" <?= $filterEmpresa === $emp['id'] ? 'selected' : '' ?>><?= sanitize($emp['nome']) ?></option> <?php endforeach; ?> </select> <select name="status" class="form-select form-select-sm" style="width:auto"> <option value="">Todos status</option> <option value="pendente" <?= $filterStatus === 'pendente' ? 'selected' : '' ?>>Pendente</option> <option value="paga" <?= $filterStatus === 'paga' ? 'selected' : '' ?>>Paga</option> <option value="vencida" <?= $filterStatus === 'vencida' ? 'selected' : '' ?>>Vencida</option> <option value="cancelada" <?= $filterStatus === 'cancelada' ? 'selected' : '' ?>>Cancelada</option> </select> <button type="submit" class="btn btn-sm btn-info"><i class="bi bi-funnel"></i></button> <a href="faturas.php" class="btn btn-sm btn-secondary"><i class="bi bi-x-lg"></i></a> </form> </div> <div class="card-body p-0"> <table class="table table-striped mb-0"> <thead><tr><th>ID</th><th>Empresa</th><th>Plano</th><th>Valor</th><th>Vencimento</th><th>Metodo</th><th>Status</th><th>Envio</th><th>Pagamento</th><th>Acoes</th></tr></thead> <tbody> <?php foreach ($faturas as $f): ?> <tr class="<?= $f['status'] === 'vencida' ? 'table-danger' : ($f['status'] === 'paga' ? 'table-success' : '') ?>"> <td><?= $f['id'] ?></td> <td><?= sanitize($f['empresa_nome']) ?></td> <td><?= sanitize($f['plano_nome'] ?? '-') ?></td> <td><?= formatarMoeda($f['valor']) ?></td> <td><?= date('d/m/Y', strtotime($f['data_vencimento'])) ?></td> <td><span class="badge bg-info"><?= ucfirst($f['metodo']) ?></span></td> <td> <?php $statusLabels = [ 'pendente' => 'warning', 'paga' => 'success', 'vencida' => 'danger', 'cancelada' => 'secondary', ]; $label = $statusLabels[$f['status']] ?? 'secondary'; ?> <span class="badge bg-<?= $label ?>"><?= ucfirst($f['status']) ?></span> </td> <td> <?php if ($f['enviado_em']): ?> <?= date('d/m/Y H:i', strtotime($f['enviado_em'])) ?><br> <small class="text-secondary"><?= $f['enviado_por'] ?></small> <?php else: ?> <span class="text-secondary">Nao enviado</span> <?php endif; ?> </td> <td> <?php if ($f['data_pagamento']): ?> <?= date('d/m/Y', strtotime($f['data_pagamento'])) ?> <?php else: ?>-<?php endif; ?> </td> <td style="white-space:nowrap"> <?php if ($f['status'] === 'pendente' || $f['status'] === 'vencida'): ?> <button class="btn btn-sm btn-success" data-bs-toggle="modal" data-bs-target="#modalEnviar<?= $f['id'] ?>"><i class="bi bi-send"></i></button> <form method="POST" style="display:inline" onsubmit="return confirm('Marcar como paga?')"> <input type="hidden" name="acao" value="pagar"> <input type="hidden" name="id" value="<?= $f['id'] ?>"> <button class="btn btn-sm btn-primary"><i class="bi bi-check-lg"></i></button> </form> <form method="POST" style="display:inline" onsubmit="return confirm('Cancelar fatura?')"> <input type="hidden" name="acao" value="cancelar"> <input type="hidden" name="id" value="<?= $f['id'] ?>"> <button class="btn btn-sm btn-danger"><i class="bi bi-x-lg"></i></button> </form> <?php endif; ?> </td> </tr> <?php endforeach; ?> <?php if (empty($faturas)): ?> <tr><td colspan="10" class="text-center text-secondary py-4">Nenhuma fatura encontrada</td></tr> <?php endif; ?> </tbody> </table> </div> </div> </div> </div> <?php foreach ($faturas as $f): ?> <?php if ($f['status'] === 'pendente' || $f['status'] === 'vencida'): ?> <div class="modal fade" id="modalEnviar<?= $f['id'] ?>" tabindex="-1"> <div class="modal-dialog"> <div class="modal-content"> <form method="POST"> <input type="hidden" name="acao" value="enviar"> <input type="hidden" name="id" value="<?= $f['id'] ?>"> <div class="modal-header"><h5 class="modal-title">Enviar Fatura</h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div> <div class="modal-body"> <p><strong><?= sanitize($f['empresa_nome']) ?></strong> — <?= formatarMoeda($f['valor']) ?></p> <div class="mb-3"><label class="form-label">Metodo de envio</label> <select name="metodo" class="form-select"> <option value="email">Email</option> <option value="digigo">WhatsApp (DigiGO)</option> <option value="meta">WhatsApp (Meta)</option> </select> </div> </div> <div class="modal-footer"><button type="submit" class="btn btn-primary"><i class="bi bi-send me-1"></i>Enviar</button></div> </form> </div> </div> </div> <?php endif; ?> <?php endforeach; ?> <?php require_once __DIR__ . '/../includes/footer.php'; ?>
Simpan