Normalize OPD queue display per doctor day
This commit is contained in:
parent
5a6ca034cd
commit
c534a83ad2
|
|
@ -927,6 +927,37 @@ class Opd extends BaseController
|
|||
$query = $this->db->query($sql);
|
||||
$allRows = $query->getResult();
|
||||
|
||||
// Doctor-day display queue should be contiguous (1..N), even when stored queue_no
|
||||
// has gaps due to legacy/global sequencing from other doctors.
|
||||
$queueRows = array_values(array_filter($allRows, static function ($row): bool {
|
||||
return (int) ($row->queue_no ?? 0) > 0;
|
||||
}));
|
||||
usort($queueRows, static function ($left, $right): int {
|
||||
$leftQueue = (int) ($left->queue_no ?? 0);
|
||||
$rightQueue = (int) ($right->queue_no ?? 0);
|
||||
if ($leftQueue !== $rightQueue) {
|
||||
return $leftQueue <=> $rightQueue;
|
||||
}
|
||||
|
||||
return ((int) ($left->opd_id ?? 0)) <=> ((int) ($right->opd_id ?? 0));
|
||||
});
|
||||
|
||||
$displayQueueByOpdId = [];
|
||||
$displayQueue = 1;
|
||||
foreach ($queueRows as $queueRow) {
|
||||
$queueOpdId = (int) ($queueRow->opd_id ?? 0);
|
||||
if ($queueOpdId <= 0 || array_key_exists($queueOpdId, $displayQueueByOpdId)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$displayQueueByOpdId[$queueOpdId] = $displayQueue;
|
||||
$displayQueue++;
|
||||
}
|
||||
|
||||
foreach ($allRows as $row) {
|
||||
$row->display_queue_no = (int) ($displayQueueByOpdId[(int) ($row->opd_id ?? 0)] ?? 0);
|
||||
}
|
||||
|
||||
$opdList0 = [];
|
||||
$opdList1 = [];
|
||||
$opdList2 = [];
|
||||
|
|
@ -1192,6 +1223,37 @@ class Opd extends BaseController
|
|||
}
|
||||
}
|
||||
|
||||
// Normalize queue display numbers to contiguous doctor-day sequence.
|
||||
$queueRows = array_values(array_filter($normalized, static function (array $row): bool {
|
||||
return (int) ($row['queue_no'] ?? 0) > 0;
|
||||
}));
|
||||
usort($queueRows, static function (array $left, array $right): int {
|
||||
$leftQueue = (int) ($left['queue_no'] ?? 0);
|
||||
$rightQueue = (int) ($right['queue_no'] ?? 0);
|
||||
if ($leftQueue !== $rightQueue) {
|
||||
return $leftQueue <=> $rightQueue;
|
||||
}
|
||||
|
||||
return ((int) ($left['opd_id'] ?? 0)) <=> ((int) ($right['opd_id'] ?? 0));
|
||||
});
|
||||
|
||||
$displayQueueByOpdId = [];
|
||||
$displayQueue = 1;
|
||||
foreach ($queueRows as $row) {
|
||||
$queueOpdId = (int) ($row['opd_id'] ?? 0);
|
||||
if ($queueOpdId <= 0 || array_key_exists($queueOpdId, $displayQueueByOpdId)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$displayQueueByOpdId[$queueOpdId] = $displayQueue;
|
||||
$displayQueue++;
|
||||
}
|
||||
|
||||
foreach ($normalized as &$row) {
|
||||
$row['display_queue_no'] = (int) ($displayQueueByOpdId[(int) ($row['opd_id'] ?? 0)] ?? 0);
|
||||
}
|
||||
unset($row);
|
||||
|
||||
usort($normalized, static function ($left, $right): int {
|
||||
return ((int) ($left['opd_id'] ?? 0)) <=> ((int) ($right['opd_id'] ?? 0));
|
||||
});
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ $mergedGroups = [
|
|||
$hasVitals = (int) ($row->has_vitals ?? 0) === 1;
|
||||
$hasPrescription = (int) ($row->has_prescription ?? 0) === 1;
|
||||
$isConfirmedForQueue= (int) ($row->is_confirmed_for_queue ?? 0) === 1;
|
||||
$queueNo = (int) ($row->queue_no ?? 0);
|
||||
$queueNo = (int) (($row->display_queue_no ?? 0) ?: ($row->queue_no ?? 0));
|
||||
$hasQueueNo = $queueNo > 0;
|
||||
$showFullActions = $hasPrescription || $isConfirmedForQueue;
|
||||
$opdId = (int) ($row->opd_id ?? 0);
|
||||
|
|
@ -567,7 +567,7 @@ $mergedGroups = [
|
|||
$row.attr('data-has-vitals', parseInt(live.has_vitals || 0, 10) === 1 ? '1' : '0');
|
||||
|
||||
applyStatusVisual($row, status);
|
||||
updateQueueCell($row, parseInt(live.queue_no || 0, 10));
|
||||
updateQueueCell($row, parseInt(live.display_queue_no || live.queue_no || 0, 10));
|
||||
updateVitalsButtonState($row, parseInt(live.has_prescription || 0, 10), parseInt(live.has_vitals || 0, 10));
|
||||
|
||||
if (status === 'waiting') {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user