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. 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); // 6. Visits by Doctor (Top 5) $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); // 7. Patient Gender Distribution $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); // 8. Department Revenue Report $stmt = $db->prepare(" SELECT d.name_$lang as name, COUNT(DISTINCT b.visit_id) as visit_count, SUM(b.total_amount) as revenue FROM bills b JOIN visits v ON b.visit_id = v.id JOIN doctors doc ON v.doctor_id = doc.id JOIN departments d ON doc.department_id = d.id WHERE b.status = 'Paid' AND DATE(b.created_at) BETWEEN ? AND ? GROUP BY d.id ORDER BY revenue DESC "); $stmt->execute([$start_date, $end_date]); $dept_revenue = $stmt->fetchAll(PDO::FETCH_ASSOC); // 9. Doctor Revenue Report $stmt = $db->prepare(" SELECT doc.name_$lang as name, d.name_$lang as department_name, COUNT(DISTINCT b.visit_id) as visit_count, SUM(b.total_amount) as revenue FROM bills b JOIN visits v ON b.visit_id = v.id JOIN doctors doc ON v.doctor_id = doc.id LEFT JOIN departments d ON doc.department_id = d.id WHERE b.status = 'Paid' AND DATE(b.created_at) BETWEEN ? AND ? GROUP BY doc.id ORDER BY revenue DESC "); $stmt->execute([$start_date, $end_date]); $doctor_revenue = $stmt->fetchAll(PDO::FETCH_ASSOC); // --- PREPARE DATA FOR JS --- $chart_dept_revenue_labels = array_column($dept_revenue, 'name'); $chart_dept_revenue_data = array_column($dept_revenue, 'revenue'); $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); ?>

-

()
(Paid)
(Paid)