billing: add patient history action and legacy-style OPD history view

This commit is contained in:
DevSoftTech Server 2026-04-22 10:33:29 +05:30
parent 1d2bfdb7a6
commit 7e4903bd68
3 changed files with 114 additions and 4 deletions

View File

@ -740,6 +740,7 @@ class Patient extends BaseController
$opdIds = array_column($opdList, 'opd_id');
$filesByOpd = [];
$rxByOpd = [];
if ($opdIds && $this->db->tableExists('file_upload_data')) {
$fields = $this->db->getFieldNames('file_upload_data') ?? [];
@ -779,15 +780,64 @@ class Patient extends BaseController
}
}
if ($opdIds && $this->db->tableExists('opd_prescription')) {
$rxFields = $this->db->getFieldNames('opd_prescription') ?? [];
$selectParts = [];
if (in_array('id', $rxFields, true)) {
$selectParts[] = 'id';
}
if (in_array('opd_id', $rxFields, true)) {
$selectParts[] = 'opd_id';
}
foreach (['date_opd_visit', 'queue_no', 'bp', 'diastolic', 'pulse', 'temp', 'spo2', 'complaints', 'diagnosis', 'investigation', 'advice'] as $col) {
if (in_array($col, $rxFields, true)) {
$selectParts[] = $col;
}
}
if ($selectParts !== [] && in_array('opd_id', $rxFields, true)) {
$rxRows = $this->db->table('opd_prescription')
->select(implode(',', $selectParts), false)
->whereIn('opd_id', $opdIds)
->orderBy('id', 'DESC')
->get()
->getResultArray();
foreach ($rxRows as $rxRow) {
$opdId = (int) ($rxRow['opd_id'] ?? 0);
if ($opdId <= 0 || isset($rxByOpd[$opdId])) {
continue;
}
$rxByOpd[$opdId] = $rxRow;
}
}
}
$opdGroups = [];
foreach ($opdList as $row) {
$opdId = (int) $row['opd_id'];
$rx = $rxByOpd[$opdId] ?? null;
$rxSessionId = (int) (($rx['id'] ?? 0));
$opdGroups[] = [
'opd_id' => $opdId,
'opd_code' => $row['opd_code'] ?? '',
'doc_name' => $row['doc_name'] ?? '',
'opd_date' => !empty($row['apointment_date']) ? date('d-m-Y', strtotime($row['apointment_date'])) : '',
'queue_no' => !empty($row['queue_no']) ? ('Q:' . $row['queue_no']) : '',
'rx_session_id' => $rxSessionId,
'rx_date' => !empty($rx['date_opd_visit']) ? date('d-m-Y', strtotime((string) $rx['date_opd_visit'])) : '',
'rx_queue_no' => !empty($rx['queue_no']) ? ('Q:' . $rx['queue_no']) : '',
'bp' => (string) ($rx['bp'] ?? ''),
'diastolic' => (string) ($rx['diastolic'] ?? ''),
'pulse' => (string) ($rx['pulse'] ?? ''),
'temp' => (string) ($rx['temp'] ?? ''),
'spo2' => (string) ($rx['spo2'] ?? ''),
'complaints' => (string) ($rx['complaints'] ?? ''),
'diagnosis' => (string) ($rx['diagnosis'] ?? ''),
'investigation' => (string) ($rx['investigation'] ?? ''),
'advice' => (string) ($rx['advice'] ?? ''),
'files' => $filesByOpd[$opdId] ?? [],
];
}

View File

@ -1,9 +1,9 @@
<div class="pagetitle">
<h1>OPD Scans</h1>
<h1>OPD History</h1>
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="javascript:load_form('<?= base_url('billing/patient/person_record') ?>/<?= esc($patient->id) ?>/0');">Profile</a></li>
<li class="breadcrumb-item active">OPD Scans</li>
<li class="breadcrumb-item active">OPD History</li>
</ol>
</nav>
</div>
@ -11,7 +11,7 @@
<section class="section profile">
<div class="card">
<div class="card-header">
<h3 class="card-title mb-0">OPD Scans</h3>
<h3 class="card-title mb-0">OPD History</h3>
</div>
<div class="card-body">
<p class="mb-3">Patient: <strong><?= esc($patient->p_fname ?? '') ?></strong></p>
@ -31,9 +31,62 @@
</div>
</div>
<div class="mt-2">
<?php if ((int) ($group['rx_session_id'] ?? 0) > 0) { ?>
<a class="btn btn-primary btn-sm" target="_blank"
href="<?= base_url('Opd_prescription/opd_prescription_print/' . (int) $group['opd_id'] . '/' . (int) $group['rx_session_id']) ?>">
Prescription Print
</a>
<?php } ?>
<?php if (!empty($group['bp']) || !empty($group['diastolic']) || !empty($group['pulse']) || !empty($group['temp']) || !empty($group['spo2'])) { ?>
<div class="small text-muted mt-2">
<?php if (!empty($group['bp'])) { ?><span class="me-3"><strong>BP:</strong> <?= esc($group['bp']) ?></span><?php } ?>
<?php if (!empty($group['diastolic'])) { ?><span class="me-3"><strong>Diastolic:</strong> <?= esc($group['diastolic']) ?></span><?php } ?>
<?php if (!empty($group['pulse'])) { ?><span class="me-3"><strong>Pulse:</strong> <?= esc($group['pulse']) ?></span><?php } ?>
<?php if (!empty($group['temp'])) { ?><span class="me-3"><strong>Temp:</strong> <?= esc($group['temp']) ?></span><?php } ?>
<?php if (!empty($group['spo2'])) { ?><span class="me-3"><strong>SPO2:</strong> <?= esc($group['spo2']) ?></span><?php } ?>
</div>
<?php } ?>
<?php if (!empty($group['complaints']) || !empty($group['diagnosis']) || !empty($group['investigation']) || !empty($group['advice'])) { ?>
<div class="row g-2 mt-2">
<?php if (!empty($group['complaints'])) { ?>
<div class="col-12 col-lg-6">
<div class="border rounded p-2 bg-light small">
<strong>Complaints:</strong> <?= esc($group['complaints']) ?>
</div>
</div>
<?php } ?>
<?php if (!empty($group['diagnosis'])) { ?>
<div class="col-12 col-lg-6">
<div class="border rounded p-2 bg-light small">
<strong>Diagnosis:</strong> <?= esc($group['diagnosis']) ?>
</div>
</div>
<?php } ?>
<?php if (!empty($group['investigation'])) { ?>
<div class="col-12 col-lg-6">
<div class="border rounded p-2 bg-light small">
<strong>Investigation:</strong> <?= esc($group['investigation']) ?>
</div>
</div>
<?php } ?>
<?php if (!empty($group['advice'])) { ?>
<div class="col-12 col-lg-6">
<div class="border rounded p-2 bg-light small">
<strong>Advice:</strong> <?= esc($group['advice']) ?>
</div>
</div>
<?php } ?>
</div>
<?php } ?>
</div>
<?php if (empty($group['files'])) { ?>
<div class="text-muted mt-2">No files for this OPD.</div>
<div class="text-muted mt-2">No scanned files for this OPD.</div>
<?php } else { ?>
<div class="small fw-semibold mt-3 mb-1">Scanned Files</div>
<div class="row g-2 mt-2">
<?php foreach ($group['files'] as $index => $file) { ?>
<div class="col-6 col-md-3">

View File

@ -14,6 +14,7 @@
<th>Age</th>
<th>Last Visit</th>
<th>Insurance</th>
<th>Patient History</th>
</tr>
</thead>
<tbody>
@ -25,6 +26,11 @@
<td><?= esc(get_age_1($data[$i]->dob ?? null, $data[$i]->age ?? '', $data[$i]->age_in_month ?? '', $data[$i]->estimate_dob ?? '', $data[$i]->Last_Visit ?? null)) ?></td>
<td><?=$data[$i]->Last_Visit ?></td>
<td><?php echo ($data[$i]->insurance_id==0 ? 'Self': 'Insuranced'); ?></td>
<td>
<a href="javascript:load_form('<?= base_url('billing/patient/show_profile_opd') ?>/<?=$data[$i]->id ?>/1');" class="btn btn-info btn-xs">
<span class="fa fa-history"></span> Patient History
</a>
</td>
</tr>
<?php } ?>
</tbody>
@ -36,6 +42,7 @@
<th>Age</th>
<th>Last Visit</th>
<th>Insurance</th>
<th>Patient History</th>
</tr>
</tfoot>
</table>