36806-vm/dashboard.php
Flatlogic Bot 5366b4681b CRM-V1
2025-12-11 07:55:09 +00:00

171 lines
6.1 KiB
PHP

<?php
session_start();
require_once __DIR__ . '/db/config.php';
// Fetch dashboard data
try {
$pdo = db();
// Total leads
$total_leads = $pdo->query('SELECT COUNT(*) FROM leads')->fetchColumn();
// Leads per status
$leads_per_status_stmt = $pdo->query('SELECT Status, COUNT(*) as count FROM leads GROUP BY Status');
$leads_per_status = $leads_per_status_stmt->fetchAll(PDO::FETCH_KEY_PAIR);
// Total activities
$total_activities = $pdo->query('SELECT COUNT(*) FROM activities')->fetchColumn();
// Activities per type
$activities_per_type_stmt = $pdo->query('SELECT ActivityType, COUNT(*) as count FROM activities GROUP BY ActivityType');
$activities_per_type = $activities_per_type_stmt->fetchAll(PDO::FETCH_KEY_PAIR);
} catch (PDOException $e) {
$db_error = "Error fetching dashboard data: " . $e->getMessage();
}
$projectName = $_SERVER['PROJECT_NAME'] ?? 'CRM';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard - <?= htmlspecialchars($projectName) ?></title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
body {
background-color: #ecf0f1;
font-family: 'Lato', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}
.navbar {
background-color: #2c3e50;
}
.navbar-brand {
font-weight: bold;
color: #fff;
}
.card {
border: none;
border-radius: 0.5rem;
box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.1);
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark mb-4">
<div class="container">
<a class="navbar-brand" href="index.php"><i class="fas fa-chart-line me-2"></i><?= htmlspecialchars($projectName) ?></a>
<div class="collapse navbar-collapse">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link" href="index.php">Leads</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="dashboard.php">Dashboard</a>
</li>
</ul>
</div>
</div>
</nav>
<main class="container">
<?php if (isset($db_error)): ?>
<div class="alert alert-danger"><?= htmlspecialchars($db_error) ?></div>
<?php else: ?>
<div class="row g-4">
<div class="col-md-3">
<div class="card text-center text-white bg-primary">
<div class="card-body">
<h5 class="card-title"><i class="fas fa-users me-2"></i>Total Leads</h5>
<p class="card-text fs-1"><?= $total_leads ?></p>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-center text-white bg-info">
<div class="card-body">
<h5 class="card-title"><i class="fas fa-tasks me-2"></i>Total Activities</h5>
<p class="card-text fs-1"><?= $total_activities ?></p>
</div>
</div>
</div>
</div>
<div class="row g-4 mt-4">
<div class="col-md-6">
<div class="card">
<div class="card-header">Leads by Status</div>
<div class="card-body">
<canvas id="leadsByStatusChart"></canvas>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">Activities by Type</div>
<div class="card-body">
<canvas id="activitiesByTypeChart"></canvas>
</div>
</div>
</div>
</div>
<?php endif; ?>
</main>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Leads by Status Chart
const leadsCtx = document.getElementById('leadsByStatusChart').getContext('2d');
new Chart(leadsCtx, {
type: 'doughnut',
data: {
labels: <?= json_encode(array_keys($leads_per_status)) ?>,
datasets: [{
data: <?= json_encode(array_values($leads_per_status)) ?>,
backgroundColor: ['#3498db', '#f39c12', '#2ecc71', '#9b59b6', '#1abc9c', '#e74c3c']
}]
},
options: {
responsive: true,
plugins: {
legend: {
position: 'top',
}
}
}
});
// Activities by Type Chart
const activitiesCtx = document.getElementById('activitiesByTypeChart').getContext('2d');
new Chart(activitiesCtx, {
type: 'bar',
data: {
labels: <?= json_encode(array_keys($activities_per_type)) ?>,
datasets: [{
label: 'Number of Activities',
data: <?= json_encode(array_values($activities_per_type)) ?>,
backgroundColor: '#3498db'
}]
},
options: {
responsive: true,
scales: {
y: {
beginAtZero: true
}
},
plugins: {
legend: {
display: false
}
}
}
});
});
</script>
</body>
</html>