devsofttech_hms_ci4/app/Views/dashboard/diagnosis.php
DevSoftTech Server bd9b1771a9 feat: add clinical drill-down dashboards
Add interactive OPD, IPD, and diagnosis dashboards with historical date ranges, KPI summaries, doctor and department workload, referral breakdowns, and diagnostic workflow statuses.
2026-08-10 00:21:55 +05:30

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>