prepare("SELECT COUNT(*) FROM patients WHERE DATE(created_at) BETWEEN ? AND ?"); $stmt->execute([$start_date, $end_date]); $new_patients = $stmt->fetchColumn(); // 2. Total Visits $stmt = $db->prepare("SELECT COUNT(*) FROM visits WHERE DATE(visit_date) BETWEEN ? AND ?"); $stmt->execute([$start_date, $end_date]); $total_visits = $stmt->fetchColumn(); // 3. Total Revenue $stmt = $db->prepare("SELECT SUM(total_amount) FROM bills WHERE DATE(created_at) BETWEEN ? AND ?"); $stmt->execute([$start_date, $end_date]); $total_revenue = $stmt->fetchColumn() ?: 0; // 4. Pending Bills (Outstanding amount for bills created in this period) $stmt = $db->prepare("SELECT SUM(patient_payable) FROM bills WHERE status != 'Paid' AND DATE(created_at) BETWEEN ? AND ?"); $stmt->execute([$start_date, $end_date]); $pending_bills = $stmt->fetchColumn() ?: 0; // 5. Visits by Status $stmt = $db->prepare("SELECT status, COUNT(*) as count FROM visits WHERE DATE(visit_date) BETWEEN ? AND ? GROUP BY status"); $stmt->execute([$start_date, $end_date]); $visits_by_status = $stmt->fetchAll(PDO::FETCH_KEY_PAIR); // 6. Revenue Trend (Daily) $stmt = $db->prepare("SELECT DATE(created_at) as date, SUM(total_amount) as total FROM bills WHERE DATE(created_at) BETWEEN ? AND ? GROUP BY DATE(created_at) ORDER BY date ASC"); $stmt->execute([$start_date, $end_date]); $revenue_trend = $stmt->fetchAll(PDO::FETCH_ASSOC); // 7. Visits by Doctor $stmt = $db->prepare(" SELECT d.name_$lang as doctor_name, COUNT(v.id) as count FROM visits v JOIN doctors d ON v.doctor_id = d.id WHERE DATE(v.visit_date) BETWEEN ? AND ? GROUP BY v.doctor_id ORDER BY count DESC LIMIT 5 "); $stmt->execute([$start_date, $end_date]); $visits_by_doctor = $stmt->fetchAll(PDO::FETCH_ASSOC); // 8. Patient Gender Distribution (All time or filtered? Let's do filtered by creation date to match "New Patients") $stmt = $db->prepare("SELECT gender, COUNT(*) as count FROM patients WHERE DATE(created_at) BETWEEN ? AND ? GROUP BY gender"); $stmt->execute([$start_date, $end_date]); $patients_by_gender = $stmt->fetchAll(PDO::FETCH_KEY_PAIR); // --- PREPARE DATA FOR JS --- $chart_status_labels = array_keys($visits_by_status); $chart_status_data = array_values($visits_by_status); $chart_revenue_labels = array_column($revenue_trend, 'date'); $chart_revenue_data = array_column($revenue_trend, 'total'); $chart_doctor_labels = array_column($visits_by_doctor, 'doctor_name'); $chart_doctor_data = array_column($visits_by_doctor, 'count'); $chart_gender_labels = array_keys($patients_by_gender); $chart_gender_data = array_values($patients_by_gender); ?>