Add interactive OPD, IPD, and diagnosis dashboards with historical date ranges, KPI summaries, doctor and department workload, referral breakdowns, and diagnostic workflow statuses.
15 lines
4.6 KiB
PHP
15 lines
4.6 KiB
PHP
<?php
|
|
$totalTests = (int) ($totals['total'] ?? 0);
|
|
$samplesReceived = (int) ($totals['samples_received'] ?? 0);
|
|
$pendingCollection = (int) ($totals['pending_collection'] ?? 0);
|
|
$pendingReports = (int) ($totals['pending_reports'] ?? 0);
|
|
$completedReports = (int) ($totals['completed_reports'] ?? 0);
|
|
?>
|
|
<div class="pagetitle d-flex align-items-center justify-content-between flex-wrap gap-2"><div><h1>Diagnosis Dashboard</h1><div class="text-muted small">Pathology and imaging workload from order to verified report</div></div><button class="btn btn-light" type="button" onclick="load_form('<?= base_url('dashboard') ?>','Dashboard');"><i class="bi bi-arrow-left"></i> Main Dashboard</button></div>
|
|
<section class="section dashboard dashboard-detail">
|
|
<div class="card dashboard-filter-card"><div class="card-body py-3"><div class="row g-2 align-items-end"><div class="col-sm-4 col-lg-3"><label class="form-label" for="diagnosis_from_date">From date</label><input class="form-control" id="diagnosis_from_date" type="date" value="<?= esc($fromDate) ?>"></div><div class="col-sm-4 col-lg-3"><label class="form-label" for="diagnosis_to_date">To date</label><input class="form-control" id="diagnosis_to_date" type="date" value="<?= esc($toDate) ?>"></div><div class="col-sm-4 col-lg-2"><button class="btn btn-primary w-100" id="diagnosis_apply_range" type="button"><i class="bi bi-funnel"></i> Apply</button></div><div class="col-lg-4"><div class="btn-group w-100"><button class="btn btn-outline-secondary diagnosis-range" data-days="0" type="button">Today</button><button class="btn btn-outline-secondary diagnosis-range" data-days="6" type="button">7 days</button><button class="btn btn-outline-secondary diagnosis-range" data-days="29" type="button">30 days</button></div></div></div></div></div>
|
|
<div class="row g-3 mb-3"><?php foreach ([['Tests ordered', $totalTests, 'bi-clipboard2-pulse', 'primary'], ['Samples / scans received', $samplesReceived, 'bi-inbox', 'info'], ['Pending collection', $pendingCollection, 'bi-hourglass', 'warning'], ['Pending reports', $pendingReports, 'bi-file-earmark-medical', 'danger'], ['Completed reports', $completedReports, 'bi-patch-check', 'success']] as [$label, $value, $icon, $tone]) : ?><div class="col-6 col-xl"><div class="card h-100 dashboard-kpi"><div class="card-body"><div class="dashboard-kpi-icon text-bg-<?= $tone ?>"><i class="bi <?= $icon ?>"></i></div><div><div class="dashboard-kpi-value"><?= $value ?></div><div class="text-muted small"><?= esc($label) ?></div></div></div></div></div><?php endforeach ?></div>
|
|
<div class="card"><div class="card-body"><h5 class="card-title">Department status</h5><div class="table-responsive"><table class="table align-middle dashboard-status-table"><thead><tr><th>Department</th><th class="text-end">Ordered</th><th class="text-end">Received</th><th class="text-end">Pending collection</th><th class="text-end">Pending report</th><th class="text-end">Completed</th><th>Completion</th></tr></thead><tbody><?php foreach ($modalityRows as $row) : ?><?php $completion = (int) $row['total'] > 0 ? round(((int) $row['completed_reports'] / (int) $row['total']) * 100) : 0; ?><tr><td><strong><?= esc($row['label']) ?></strong></td><td class="text-end"><?= (int) $row['total'] ?></td><td class="text-end"><?= (int) $row['samples_received'] ?></td><td class="text-end"><?= (int) $row['pending_collection'] ?></td><td class="text-end"><?= (int) $row['pending_reports'] ?></td><td class="text-end text-success fw-semibold"><?= (int) $row['completed_reports'] ?></td><td style="min-width:140px"><div class="progress"><div class="progress-bar bg-success" style="width:<?= $completion ?>%"></div></div><span class="small text-muted"><?= $completion ?>%</span></td></tr><?php endforeach ?></tbody></table></div><div class="text-muted small mt-2">Completed means the report is verified (status 2). Draft or unverified reports remain pending.</div></div></div>
|
|
</section>
|
|
<?= view('dashboard/partials/detail_assets') ?>
|
|
<script>(function(){function loadRange(from,to){load_form('<?= base_url('dashboard/diagnosis') ?>?from_date='+encodeURIComponent(from)+'&to_date='+encodeURIComponent(to),'Diagnosis Dashboard');}$('#diagnosis_apply_range').off('click.diagnosisDash').on('click.diagnosisDash',function(){loadRange($('#diagnosis_from_date').val(),$('#diagnosis_to_date').val());});$('.diagnosis-range').off('click.diagnosisDash').on('click.diagnosisDash',function(){var end=new Date(),start=new Date();start.setDate(end.getDate()-Number($(this).data('days')||0));function ymd(d){return d.getFullYear()+'-'+String(d.getMonth()+1).padStart(2,'0')+'-'+String(d.getDate()).padStart(2,'0');}loadRange(ymd(start),ymd(end));});})();</script>
|