Autosave: 20260330-021657
This commit is contained in:
parent
9a0a41e1cd
commit
c26368f032
@ -89,6 +89,32 @@ $stmt->execute([$start_date, $end_date]);
|
|||||||
$doctor_revenue = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
$doctor_revenue = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 10. Patient Nationality Distribution (Omani vs Non-Omani)
|
||||||
|
$stmt = $db->prepare("
|
||||||
|
SELECT
|
||||||
|
CASE
|
||||||
|
WHEN nationality = 'Oman' THEN 'omani'
|
||||||
|
WHEN nationality IS NULL OR nationality = '' THEN 'unknown_nationality'
|
||||||
|
ELSE 'non_omani'
|
||||||
|
END as nat_group,
|
||||||
|
COUNT(*) as count
|
||||||
|
FROM patients
|
||||||
|
WHERE DATE(created_at) BETWEEN ? AND ?
|
||||||
|
GROUP BY nat_group
|
||||||
|
");
|
||||||
|
$stmt->execute([$start_date, $end_date]);
|
||||||
|
$patients_by_nationality_raw = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
|
||||||
|
|
||||||
|
// Translate labels
|
||||||
|
$patients_by_nationality = [];
|
||||||
|
foreach ($patients_by_nationality_raw as $key => $val) {
|
||||||
|
$patients_by_nationality[__($key)] = $val;
|
||||||
|
}
|
||||||
|
|
||||||
|
$chart_nationality_labels = array_keys($patients_by_nationality);
|
||||||
|
$chart_nationality_data = array_values($patients_by_nationality);
|
||||||
|
|
||||||
// --- PREPARE DATA FOR JS ---
|
// --- PREPARE DATA FOR JS ---
|
||||||
$chart_dept_revenue_labels = array_column($dept_revenue, 'name');
|
$chart_dept_revenue_labels = array_column($dept_revenue, 'name');
|
||||||
$chart_dept_revenue_data = array_column($dept_revenue, 'revenue');
|
$chart_dept_revenue_data = array_column($dept_revenue, 'revenue');
|
||||||
@ -317,6 +343,23 @@ $chart_gender_data = array_values($patients_by_gender);
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Charts Row 3 -->
|
||||||
|
<div class="row g-4 mb-5 page-break">
|
||||||
|
<div class="col-md-6 offset-md-3">
|
||||||
|
<div class="card border-0 shadow-sm h-100">
|
||||||
|
<div class="card-header bg-white border-bottom-0 pt-4 px-4">
|
||||||
|
<h5 class="fw-bold text-dark mb-0"><?php echo __('patients_by_nationality'); ?></h5>
|
||||||
|
</div>
|
||||||
|
<div class="card-body d-flex justify-content-center align-items-center" style="min-height: 350px;">
|
||||||
|
<div style="position: relative; width: 300px; height: 300px;">
|
||||||
|
<canvas id="nationalityChart"></canvas>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Detailed Tables -->
|
<!-- Detailed Tables -->
|
||||||
<div class="row g-4 mb-4 page-break">
|
<div class="row g-4 mb-4 page-break">
|
||||||
<!-- Department Revenue -->
|
<!-- Department Revenue -->
|
||||||
@ -527,5 +570,27 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 5. Nationality (Pie)
|
||||||
|
const ctxNationality = document.getElementById('nationalityChart').getContext('2d');
|
||||||
|
new Chart(ctxNationality, {
|
||||||
|
type: 'doughnut',
|
||||||
|
data: {
|
||||||
|
labels: <?php echo json_encode($chart_nationality_labels); ?>,
|
||||||
|
datasets: [{
|
||||||
|
data: <?php echo json_encode($chart_nationality_data); ?>,
|
||||||
|
backgroundColor: [colors.teal, colors.warning, colors.secondary],
|
||||||
|
borderWidth: 0
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
responsive: true,
|
||||||
|
maintainAspectRatio: false,
|
||||||
|
plugins: {
|
||||||
|
legend: { position: 'bottom' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
18
lang.php
18
lang.php
@ -1,7 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
$translations = array (
|
$translations = array (
|
||||||
'en' =>
|
'en' =>
|
||||||
array (
|
array
|
||||||
|
|
||||||
|
'nationality' => 'Nationality',
|
||||||
|
'omani' => 'Omani',
|
||||||
|
'non_omani' => 'Non-Omani',
|
||||||
|
'unknown_nationality' => 'Unknown Nationality',
|
||||||
|
'patients_by_nationality' => 'Patients by Nationality',
|
||||||
|
(
|
||||||
'sick_leave_report' => 'Patient Sick Leave',
|
'sick_leave_report' => 'Patient Sick Leave',
|
||||||
'date_issued' => 'Date Issued',
|
'date_issued' => 'Date Issued',
|
||||||
'number_of_days' => 'Number of Days',
|
'number_of_days' => 'Number of Days',
|
||||||
@ -531,7 +538,14 @@ $translations = array (
|
|||||||
'confirm_delete_request' => 'Are you sure you want to delete this request?'
|
'confirm_delete_request' => 'Are you sure you want to delete this request?'
|
||||||
),
|
),
|
||||||
'ar' =>
|
'ar' =>
|
||||||
array (
|
array
|
||||||
|
|
||||||
|
'nationality' => 'الجنسية',
|
||||||
|
'omani' => 'عماني',
|
||||||
|
'non_omani' => 'غير عماني',
|
||||||
|
'unknown_nationality' => 'جنسية غير معروفة',
|
||||||
|
'patients_by_nationality' => 'المرضى حسب الجنسية',
|
||||||
|
(
|
||||||
'sick_leave_report' => 'إجازات المرضى',
|
'sick_leave_report' => 'إجازات المرضى',
|
||||||
'date_issued' => 'تاريخ الإصدار',
|
'date_issued' => 'تاريخ الإصدار',
|
||||||
'number_of_days' => 'عدد الأيام',
|
'number_of_days' => 'عدد الأيام',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user