This commit is contained in:
Dr Masroor Ehsan 2025-01-19 12:54:20 +06:00
parent eea5f09387
commit fa259e31fd
3 changed files with 43 additions and 8 deletions

View File

@ -164,7 +164,7 @@ protected function getStudiesQuery(): Builder
$q = Study::query(); $q = Study::query();
} }
return $q->with(['readingPhysician', 'dicomServer', 'assignedPhysicians', 'reports']); return $q->with(['readingPhysician', 'dicomServer', 'assignedPhysicians', 'reports', 'lockingPhysician']);
} }
protected function applySort(Builder $query): Builder protected function applySort(Builder $query): Builder

View File

@ -23,7 +23,7 @@
class WorklistDataTable extends DataTable class WorklistDataTable extends DataTable
{ {
const DATE_FORMAT_SHORT = 'd.m.Y H:i'; const DATE_FORMAT_SHORT = 'd.m.Y H:i';
const DATE_FORMAT_LONG = 'd/m/Y h:i A'; const DATE_FORMAT_LONG = 'h:i A, d-M-Y (D)';
private static function renderDateColumn(Carbon|CarbonImmutable|null $dt): ?string private static function renderDateColumn(Carbon|CarbonImmutable|null $dt): ?string
{ {
@ -281,7 +281,7 @@ private function physicianColumn(Study $study): ?string
[ [
'src' => asset('imgs/assigned.png'), 'src' => asset('imgs/assigned.png'),
'class' => 'msg-icon', 'class' => 'msg-icon',
'tip' => 'Assigned on ' . $study->assigned_at->format(self::DATE_FORMAT_LONG), 'tip' => 'Assigned at ' . $study->assigned_at->format(self::DATE_FORMAT_LONG),
]); ]);
} }
@ -290,7 +290,7 @@ private function physicianColumn(Study $study): ?string
[ [
'src' => asset('imgs/lock.png'), 'src' => asset('imgs/lock.png'),
'class' => 'ms-1 msg-icon', 'class' => 'ms-1 msg-icon',
'tip' => 'Locked on ' . $study->locked_at->format(self::DATE_FORMAT_LONG), 'tip' => sprintf("Locked by %s\n at %s", $study->lockingPhysician?->display_name ?? '', $study->locked_at->format(self::DATE_FORMAT_LONG)),
]); ]);
} }
@ -318,6 +318,15 @@ private function renderCustomColumns(): array
foreach (WorklistGuard::worklistColumns() as $col) { foreach (WorklistGuard::worklistColumns() as $col) {
switch ($col) { switch ($col) {
case WorklistColumn::PatientId:
$columns[$col->value] = static function (Study $study) {
if (me()->isRadiologist() || ! $study->canEditMetadata()) {
return $study->patient_id;
}
return '<a target="_blank" href="' . route('staff.meta.edit', $study->hash) . '">' . $study->patient_id . '</a>';
};
break;
case WorklistColumn::PatientName: case WorklistColumn::PatientName:
$columns[$col->value] = static function (Study $study) { $columns[$col->value] = static function (Study $study) {
if (me()->isRadiologist() || ! $study->canEditMetadata()) { if (me()->isRadiologist() || ! $study->canEditMetadata()) {
@ -385,12 +394,33 @@ private function renderCustomColumns(): array
private function generateReportingButtons(Study $study): string private function generateReportingButtons(Study $study): string
{ {
if (me()->isRadiologist() && $study->canEditReport() && ! $study->hasReports()) { $hasReports = $study->hasReports();
// fresh untouched study, can edit report: take the rad directly to the edit page $img = $hasReports ? 'report.png' : 'inbox.png';
return '<a href="' . route('staff.report.create', $study->hash) . '" target="_blank" class="btn btn-sm btn-outline-light"><i class="fa-light fa-edit"></i></a>';
if (me()->isRadiologist()) {
if ($study->isLocked() && ! $study->isLockedBy()) {
// study was locked by someone else
return Blade::render('_partials._img-tooltip',
[
'src' => asset('imgs/lock.png'),
'class' => 'msg-icon',
'tip' => 'Study has been locked',
]
);
} }
return $this->renderButton($study->hash, 'fa-eye', 'show-reports btn-outline', 'R'); if ($study->canEditReport() && ! $hasReports) {
// fresh untouched study, go directly to the edit page
return $this->renderImageLink(
$study->hash, $img, '', 'Report', route('staff.report.create', $study->hash), true
);
}
}
// fallback: show popup with report history
return $this->renderImageLink(
$study->hash, $img, 'show-reports', 'Report'
);
} }
private function renderButton(string $data_id, string $fa_icon, string $data_class, string $text, string $url = '#', bool $blank = false): string private function renderButton(string $data_id, string $fa_icon, string $data_class, string $text, string $url = '#', bool $blank = false): string

View File

@ -133,6 +133,11 @@ public function readingPhysician(): BelongsTo
return $this->belongsTo(User::class, 'reading_physician_id'); return $this->belongsTo(User::class, 'reading_physician_id');
} }
public function lockingPhysician(): BelongsTo
{
return $this->belongsTo(User::class, 'locking_physician_id');
}
public function assignedPhysicians(): BelongsToMany public function assignedPhysicians(): BelongsToMany
{ {
return $this->belongsToMany(User::class, 'study_assignments'); return $this->belongsToMany(User::class, 'study_assignments');