| Server IP : 198.54.126.135 / Your IP : 216.73.216.217 Web Server : Apache System : Linux host11.registrar-servers.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : linearpo ( 12988) PHP Version : 8.1.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/linearpo/public_html/app/ |
Upload File : |
<?php
// dashboard.php - Main Dashboard
require_once 'config.php';
checkAuth();
$float = getCurrentFloat($conn, $_SESSION['user_id']);
$stats = getTodayStats($conn, $_SESSION['user_id']);
$page_title = "Dashboard";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $page_title; ?> - M-Pesa Agent System</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css" rel="stylesheet">
<style>
:root {
--mpesa-green: #00a650;
--mpesa-dark: #000000;
}
body {
background-color: #f8f9fa;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
.navbar {
background: linear-gradient(135deg, var(--mpesa-green) 0%, #008f43 100%);
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.sidebar {
min-height: calc(100vh - 56px);
background: white;
box-shadow: 2px 0 10px rgba(0,0,0,0.1);
}
.sidebar .nav-link {
color: #333;
padding: 15px 20px;
border-radius: 0;
transition: all 0.3s;
}
.sidebar .nav-link:hover,
.sidebar .nav-link.active {
background-color: rgba(0, 166, 80, 0.1);
color: var(--mpesa-green);
border-right: 3px solid var(--mpesa-green);
}
.sidebar .nav-link i {
margin-right: 10px;
width: 20px;
}
.stat-card {
background: white;
border-radius: 15px;
padding: 25px;
box-shadow: 0 5px 15px rgba(0,0,0,0.08);
transition: transform 0.3s;
border-left: 5px solid var(--mpesa-green);
}
.stat-card:hover {
transform: translateY(-5px);
}
.stat-card.cash {
border-left-color: #ffc107;
}
.stat-card.digital {
border-left-color: #17a2b8;
}
.stat-card.withdrawal {
border-left-color: #dc3545;
}
.stat-icon {
width: 60px;
height: 60px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
margin-bottom: 15px;
}
.stat-value {
font-size: 2rem;
font-weight: 700;
color: #333;
}
.stat-label {
color: #666;
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 1px;
}
.quick-actions {
background: white;
border-radius: 15px;
padding: 25px;
box-shadow: 0 5px 15px rgba(0,0,0,0.08);
}
.action-btn {
padding: 20px;
border-radius: 12px;
border: 2px dashed #ddd;
background: transparent;
transition: all 0.3s;
text-decoration: none;
color: #333;
display: block;
text-align: center;
}
.action-btn:hover {
border-color: var(--mpesa-green);
background: rgba(0, 166, 80, 0.05);
color: var(--mpesa-green);
}
.action-btn i {
font-size: 2rem;
margin-bottom: 10px;
display: block;
}
.recent-transactions {
background: white;
border-radius: 15px;
padding: 25px;
box-shadow: 0 5px 15px rgba(0,0,0,0.08);
}
.badge-deposit {
background-color: rgba(0, 166, 80, 0.1);
color: var(--mpesa-green);
}
.badge-withdrawal {
background-color: rgba(220, 53, 69, 0.1);
color: #dc3545;
}
</style>
</head>
<body>
<nav class="navbar navbar-dark">
<div class="container-fluid">
<a class="navbar-brand" href="#">
<i class="bi bi-phone-fill me-2"></i>
<strong>M-Pesa Agent</strong> System
</a>
<div class="d-flex align-items-center text-white">
<span class="me-3"><i class="bi bi-person-circle me-1"></i> <?php echo $_SESSION['full_name']; ?></span>
<a href="logout.php" class="btn btn-outline-light btn-sm">
<i class="bi bi-box-arrow-right"></i> Logout
</a>
</div>
</div>
</nav>
<div class="container-fluid">
<div class="row">
<!-- Sidebar -->
<div class="col-md-2 sidebar p-0">
<nav class="nav flex-column">
<a class="nav-link active" href="dashboard.php">
<i class="bi bi-speedometer2"></i> Dashboard
</a>
<a class="nav-link" href="transactions.php">
<i class="bi bi-cash-coin"></i> Transactions
</a>
<a class="nav-link" href="float_management.php">
<i class="bi bi-wallet2"></i> Float Management
</a>
<a class="nav-link" href="reports.php">
<i class="bi bi-graph-up"></i> Reports
</a>
<?php if ($_SESSION['role'] == 'admin'): ?>
<a class="nav-link" href="users.php">
<i class="bi bi-people"></i> User Management
</a>
<?php endif; ?>
<a class="nav-link" href="change_password.php">
<i class="bi bi-key"></i> Change Password
</a>
</nav>
</div>
<!-- Main Content -->
<div class="col-md-10 p-4">
<h2 class="mb-4"><i class="bi bi-speedometer2 me-2"></i>Dashboard Overview</h2>
<!-- Stats Row -->
<div class="row g-4 mb-4">
<div class="col-md-3">
<div class="stat-card cash">
<div class="stat-icon bg-warning bg-opacity-10 text-warning">
<i class="bi bi-cash-stack"></i>
</div>
<div class="stat-value">KES <?php echo number_format($float['cash_balance'], 2); ?></div>
<div class="stat-label">Cash Float Available</div>
</div>
</div>
<div class="col-md-3">
<div class="stat-card digital">
<div class="stat-icon bg-info bg-opacity-10 text-info">
<i class="bi bi-phone"></i>
</div>
<div class="stat-value">KES <?php echo number_format($float['digital_balance'], 2); ?></div>
<div class="stat-label">Digital Float Available</div>
</div>
</div>
<div class="col-md-3">
<div class="stat-card">
<div class="stat-icon bg-success bg-opacity-10 text-success">
<i class="bi bi-arrow-down-circle"></i>
</div>
<div class="stat-value">KES <?php echo number_format($stats['total_deposits'], 2); ?></div>
<div class="stat-label">Today's Deposits (<?php echo $stats['deposit_count']; ?>)</div>
</div>
</div>
<div class="col-md-3">
<div class="stat-card withdrawal">
<div class="stat-icon bg-danger bg-opacity-10 text-danger">
<i class="bi bi-arrow-up-circle"></i>
</div>
<div class="stat-value">KES <?php echo number_format($stats['total_withdrawals'], 2); ?></div>
<div class="stat-label">Today's Withdrawals (<?php echo $stats['withdrawal_count']; ?>)</div>
</div>
</div>
</div>
<div class="row">
<!-- Quick Actions -->
<div class="col-md-4 mb-4">
<div class="quick-actions">
<h5 class="mb-3"><i class="bi bi-lightning-charge me-2"></i>Quick Actions</h5>
<div class="d-grid gap-3">
<a href="transactions.php?type=deposit" class="action-btn">
<i class="bi bi-arrow-down-circle text-success"></i>
<strong>New Deposit</strong>
<small class="d-block text-muted">Record customer cash deposit</small>
</a>
<a href="transactions.php?type=withdrawal" class="action-btn">
<i class="bi bi-arrow-up-circle text-danger"></i>
<strong>New Withdrawal</strong>
<small class="d-block text-muted">Record customer withdrawal</small>
</a>
<a href="float_management.php" class="action-btn">
<i class="bi bi-wallet2 text-primary"></i>
<strong>Manage Float</strong>
<small class="d-block text-muted">Add or convert float</small>
</a>
</div>
</div>
</div>
<!-- Recent Transactions -->
<div class="col-md-8">
<div class="recent-transactions">
<div class="d-flex justify-content-between align-items-center mb-3">
<h5 class="mb-0"><i class="bi bi-clock-history me-2"></i>Recent Transactions</h5>
<a href="reports.php" class="btn btn-sm btn-outline-primary">View All</a>
</div>
<div class="table-responsive">
<table class="table table-hover">
<thead class="table-light">
<tr>
<th>Time</th>
<th>Customer</th>
<th>Type</th>
<th>Amount</th>
<th>Reference</th>
</tr>
</thead>
<tbody>
<?php
$recent = $conn->query("SELECT * FROM transactions
WHERE user_id = {$_SESSION['user_id']}
ORDER BY created_at DESC LIMIT 10");
if ($recent->num_rows > 0) {
while ($row = $recent->fetch_assoc()) {
$badge_class = $row['transaction_type'] == 'deposit' ? 'badge-deposit' : 'badge-withdrawal';
$icon = $row['transaction_type'] == 'deposit' ? 'bi-arrow-down' : 'bi-arrow-up';
echo "<tr>";
echo "<td>" . date('H:i', strtotime($row['created_at'])) . "</td>";
echo "<td>" . htmlspecialchars($row['customer_name']) . "<br><small class='text-muted'>" . $row['customer_phone'] . "</small></td>";
echo "<td><span class='badge {$badge_class}'><i class='bi {$icon} me-1'></i>" . ucfirst($row['transaction_type']) . "</span></td>";
echo "<td><strong>KES " . number_format($row['amount'], 2) . "</strong></td>";
echo "<td><small class='text-muted'>" . ($row['reference_number'] ?: '-') . "</small></td>";
echo "</tr>";
}
} else {
echo "<tr><td colspan='5' class='text-center text-muted py-4'>No transactions yet today</td></tr>";
}
?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>