| Server IP : 72.60.21.38 / Your IP : 216.73.216.25 Web Server : LiteSpeed System : Linux uk-fast-web1372.main-hosting.eu 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64 User : u390967363 ( 390967363) PHP Version : 8.2.30 Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail MySQL : OFF | cURL : ON | WGET : ON | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /home/u390967363/domains/aibenproperties.com/public_html/app/ |
Upload File : |
<?php
include 'includes/header.php';
require_once 'includes/db.php';
require_once 'includes/functions.php';
$role = strtolower($_SESSION['user_role'] ?? 'guest');
if (!in_array($role, ['auditor','super_admin'])) {
echo "<div class='container p-4'><div class='alert alert-danger'>Access denied.</div></div>";
include 'includes/footer.php';
exit;
}
$now = new DateTimeImmutable();
$monthStart = $now->format('Y-m-01 00:00:00');
$monthEnd = $now->format('Y-m-t 23:59:59');
$ytdStart = $now->format('Y-01-01 00:00:00');
$ytdEnd = $now->format('Y-m-d 23:59:59');
function scalar_a($pdo,$sql,$params=[]){ try{$st=$pdo->prepare($sql);$st->execute($params);return (float)$st->fetchColumn();}catch(Exception $e){return 0;}}
$revMonth = scalar_a($pdo,"SELECT COALESCE(SUM(amount),0) FROM payments WHERE status IN ('verified','approved','paid') AND created_at BETWEEN ? AND ?",[$monthStart,$monthEnd]);
$revYTD = scalar_a($pdo,"SELECT COALESCE(SUM(amount),0) FROM payments WHERE status IN ('verified','approved','paid') AND created_at BETWEEN ? AND ?",[$ytdStart,$ytdEnd]);
$allocApproved = scalar_a($pdo,"SELECT COUNT(*) FROM allocations WHERE status IN ('approved','active')");
$refundsProcessed = scalar_a($pdo,"SELECT COUNT(*) FROM refunds WHERE status IN ('approved','rejected','paid')");
$totalRefundAmount = scalar_a($pdo,"SELECT COALESCE(SUM(amount),0) FROM refunds WHERE status IN ('approved','paid')");
$totalPaidAmount = scalar_a($pdo,"SELECT COALESCE(SUM(amount),0) FROM payments WHERE status IN ('verified','approved','paid')");
$refundRate = $totalPaidAmount > 0 ? round(($totalRefundAmount / $totalPaidAmount) * 100, 2) : 0;
$outstanding = 0;
try{ $outstanding = scalar_a($pdo,"SELECT COALESCE(SUM(amount_due - COALESCE(amount_paid,0)),0) FROM installments"); }catch(Exception $e){}
$turnaround = 0;
try{
$q = $pdo->query("SELECT AVG(DATEDIFF(COALESCE(exec_decided_at, NOW()), created_at)) FROM allocations WHERE status IN ('approved','active')");
$turnaround = round((float)$q->fetchColumn(),1);
}catch(Exception $e){}
$settingsChanges = 0;
try{
if (function_exists('tableHasColumn') && tableHasColumn('settings_history','id')) {
$settingsChanges = (int)scalar_a($pdo,"SELECT COUNT(*) FROM settings_history WHERE created_at BETWEEN ? AND ?",[$monthStart,$monthEnd]);
}
}catch(Exception $e){}
$bankChanges = 0;
try{
if (function_exists('tableHasColumn') && tableHasColumn('bank_accounts','updated_at')) {
$bankChanges = (int)scalar_a($pdo,"SELECT COUNT(*) FROM bank_accounts WHERE updated_at BETWEEN ? AND ?",[$monthStart,$monthEnd]);
}
}catch(Exception $e){}
$indicators = [];
$refundSpike = $refundRate > 10;
$indicators[] = ['label'=>'Refund rate','level'=>$refundSpike?'danger':'success'];
$largePayments = [];
try{
$st = $pdo->prepare("SELECT id, amount FROM payments WHERE amount >= ? AND status IN ('verified','approved','paid') ORDER BY amount DESC LIMIT 5");
$st->execute([(float)(getSetting('aud_large_payment_threshold', 5000000) ?: 5000000)]);
$largePayments = $st->fetchAll(PDO::FETCH_ASSOC);
}catch(Exception $e){}
if (!empty($largePayments)) { $indicators[] = ['label'=>'Unusual large payments','level'=>'warning']; } else { $indicators[] = ['label'=>'Unusual large payments','level'=>'success']; }
if ($settingsChanges > 5) { $indicators[] = ['label'=>'Frequent fee edits','level'=>'warning']; } else { $indicators[] = ['label'=>'Frequent fee edits','level'=>'success']; }
try{
$rej = (int)scalar_a($pdo,"SELECT COUNT(*) FROM refunds WHERE status = 'rejected' AND created_at BETWEEN ? AND ?",[$monthStart,$monthEnd]);
if ($rej >= 5) { $indicators[] = ['label'=>'Multiple refund rejections','level'=>'warning']; } else { $indicators[] = ['label'=>'Multiple refund rejections','level'=>'success']; }
}catch(Exception $e){ $indicators[] = ['label'=>'Multiple refund rejections','level'=>'secondary']; }
try{
$overdueAllocs = (int)scalar_a($pdo,"SELECT COUNT(*) FROM allocations WHERE status IN ('pending','awaiting_approval') AND DATEDIFF(NOW(), created_at) > 14");
if ($overdueAllocs > 0) { $indicators[] = ['label'=>'Overdue allocations','level'=>'danger']; } else { $indicators[] = ['label'=>'Overdue allocations','level'=>'success']; }
}catch(Exception $e){ $indicators[] = ['label'=>'Overdue allocations','level'=>'secondary']; }
$indicators[] = ['label'=>'Unapproved payment edits','level'=>'success'];
?>
<div class="container-fluid py-4">
<div class="d-flex align-items-center justify-content-between mb-3">
<h2 class="mb-0">Audit Dashboard</h2>
<div class="text-muted">As of <?= htmlspecialchars(date('M d, Y')) ?></div>
</div>
<div class="row g-3">
<div class="col-6 col-md-3"><div class="card shadow-sm"><div class="card-body"><div class="text-muted small">Revenue (This Month)</div><div class="h4 mb-0">₦<?= number_format($revMonth,2) ?></div></div></div></div>
<div class="col-6 col-md-3"><div class="card shadow-sm"><div class="card-body"><div class="text-muted small">Revenue (YTD)</div><div class="h4 mb-0">₦<?= number_format($revYTD,2) ?></div></div></div></div>
<div class="col-6 col-md-3"><div class="card shadow-sm"><div class="card-body"><div class="text-muted small">Allocations Approved</div><div class="h4 mb-0"><?= number_format($allocApproved) ?></div></div></div></div>
<div class="col-6 col-md-3"><div class="card shadow-sm"><div class="card-body"><div class="text-muted small">Refunds Processed</div><div class="h4 mb-0"><?= number_format($refundsProcessed) ?></div></div></div></div>
<div class="col-6 col-md-3"><div class="card shadow-sm"><div class="card-body"><div class="text-muted small">Refund Rate</div><div class="h4 mb-0"><?= number_format($refundRate,2) ?>%</div></div></div></div>
<div class="col-6 col-md-3"><div class="card shadow-sm"><div class="card-body"><div class="text-muted small">Outstanding Installments</div><div class="h4 mb-0">₦<?= number_format($outstanding,2) ?></div></div></div></div>
<div class="col-6 col-md-3"><div class="card shadow-sm"><div class="card-body"><div class="text-muted small">Allocation Turnaround (days avg)</div><div class="h4 mb-0"><?= number_format($turnaround,1) ?></div></div></div></div>
<div class="col-6 col-md-3"><div class="card shadow-sm"><div class="card-body"><div class="text-muted small">Setting Changes (This Month)</div><div class="h4 mb-0"><?= number_format($settingsChanges) ?></div></div></div></div>
<div class="col-6 col-md-3"><div class="card shadow-sm"><div class="card-body"><div class="text-muted small">Bank Account Changes</div><div class="h4 mb-0"><?= number_format($bankChanges) ?></div></div></div></div>
</div>
<div class="row g-3 mt-1">
<div class="col-md-6">
<div class="card shadow-sm">
<div class="card-header">Compliance Health</div>
<div class="card-body">
<?php foreach ($indicators as $ind): ?>
<div class="d-flex align-items-center mb-2">
<span class="badge bg-<?= $ind['level']==='danger'?'danger':($ind['level']==='warning'?'warning text-dark':($ind['level']==='success'?'success':'secondary')) ?> me-2"> </span>
<span><?= htmlspecialchars($ind['label']) ?></span>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
</div>
<script>
(function(){
let t; const logoutAfter=15*60*1000; const reset=()=>{clearTimeout(t);t=setTimeout(()=>location.href='logout.php?reason=idle',logoutAfter);};
['click','mousemove','keydown','scroll','touchstart'].forEach(ev=>window.addEventListener(ev,reset,{passive:true}));
reset();
})();
</script>
<?php include 'includes/footer.php'; ?>