From a3a8480b6fcf7374fcb63efe4d07c85d10714005 Mon Sep 17 00:00:00 2001 From: Dr Masroor Ehsan Date: Wed, 8 Jan 2025 12:42:38 +0600 Subject: [PATCH] UI enhancements --- app/DataTables/WorklistDataTable.php | 34 +++++++--- .../Staff/StudyViewerController.php | 2 +- app/Models/Study.php | 14 ++++ app/Services/ACL/WorklistColumn.php | 2 + app/Services/ACL/WorklistGuard.php | 2 + .../views/staff/studies/viewer.blade.php | 64 +++++++++++++++++-- 6 files changed, 104 insertions(+), 14 deletions(-) diff --git a/app/DataTables/WorklistDataTable.php b/app/DataTables/WorklistDataTable.php index a4b7098..90ac5f9 100644 --- a/app/DataTables/WorklistDataTable.php +++ b/app/DataTables/WorklistDataTable.php @@ -45,8 +45,8 @@ public function dataTable(QueryBuilder $query): EloquentDataTable $rawColumns = [ 'priority_icon', ]; - foreach ($this->customColumns() as $column => $content) { - $data_table->editColumn($column, $content); + foreach ($this->renderCustomColumns() as $column => $content) { + $data_table->addColumn($column, $content); $rawColumns[] = $column; } $data_table @@ -154,7 +154,11 @@ public function getColumns(): array ->title('Read By'); break; case WorklistColumn::ActionButtons: - $columns[] = Column::computed('action') + case WorklistColumn::ViewerButtons: + case WorklistColumn::ReportingButtons: + $columns[] = Column::computed($col->value) + ->searchable(false) + ->orderable(false) ->exportable(false) ->printable(false) ->width(60) @@ -202,7 +206,7 @@ private function physicianColumn(?User $user, Carbon|CarbonImmutable|null $dt): /** * @return array */ - private function customColumns(): array + private function renderCustomColumns(): array { $columns = []; @@ -239,22 +243,34 @@ private function customColumns(): array break; case WorklistColumn::History: $columns[$col->value] = fn (Study $study) => sprintf(' - + -', blank($study->body_part_examined) ? 'text-muted' : 'text-primary'); +', + $study->hash, + ($study->body_part_examined) ? 'text-muted' : 'text-primary'); break; case WorklistColumn::ActionButtons: - $columns[$col->value] = fn (Study $study) => $this->generateButtons($study); + $columns[$col->value] = fn (Study $study) => $this->generateActionButtons($study); + break; + case WorklistColumn::ViewerButtons: $columns[$col->value] = fn (Study $study) => $this->generateViewerButtons($study); break; + case WorklistColumn::ReportingButtons: + $columns[$col->value] = fn (Study $study) => $this->generateReportingButtons($study); + break; } } return $columns; } - private function renderButton(string $data_id, string $fa_icon, string $data_class, string $text, string $url = '#', bool $blank=false): string + private function generateReportingButtons(Study $study): string + { + return 'x'; + } + + private function renderButton(string $data_id, string $fa_icon, string $data_class, string $text, string $url = '#', bool $blank = false): string { return Blade::render('staff.worklist.partials._column-button', [ @@ -288,7 +304,7 @@ private function generateViewerButtons(Study $study): string return implode("\r", $btns); } - private function generateButtons(Study $study): string + private function generateActionButtons(Study $study): string { $btns = []; foreach (WorklistGuard::worklistButtons() as $button) { diff --git a/app/Http/Controllers/Staff/StudyViewerController.php b/app/Http/Controllers/Staff/StudyViewerController.php index 0532b28..2dcf848 100644 --- a/app/Http/Controllers/Staff/StudyViewerController.php +++ b/app/Http/Controllers/Staff/StudyViewerController.php @@ -25,7 +25,7 @@ private function loadViewer(Closure $callback) $study = Study::findOrFail($this->key); $url = $callback($study); abort_if(blank($url), 404); - $title = Str::limit($study->patient_name, 20) . ' | ' . config('app.name'); + $title = Str::limit($study->getPatientDemographic(), 40); return view('staff.studies.viewer', compact('url', 'title')); } diff --git a/app/Models/Study.php b/app/Models/Study.php index a1e567b..b32da20 100644 --- a/app/Models/Study.php +++ b/app/Models/Study.php @@ -339,6 +339,20 @@ public function getGenderNameAttribute(): string }; } + public function getPatientDemographic(): string + { + $parts = array_purge([ + Str::limit($this->sanitizedPatientName(), 20), + $this->patient_sex, + $this->patient_id, + ]); + if (! empty($parts)) { + return implode(' ^ ', $parts); + } + + return ''; + } + protected function casts(): array { return [ diff --git a/app/Services/ACL/WorklistColumn.php b/app/Services/ACL/WorklistColumn.php index 9d22e08..d6ebd57 100644 --- a/app/Services/ACL/WorklistColumn.php +++ b/app/Services/ACL/WorklistColumn.php @@ -32,4 +32,6 @@ enum WorklistColumn: string case CreatedAt = 'created_at'; case UpdatedAt = 'updated_at'; case ActionButtons = 'action'; + case ViewerButtons = 'viewers'; + case ReportingButtons = 'reporting'; } diff --git a/app/Services/ACL/WorklistGuard.php b/app/Services/ACL/WorklistGuard.php index 6dbbf61..f9f3063 100644 --- a/app/Services/ACL/WorklistGuard.php +++ b/app/Services/ACL/WorklistGuard.php @@ -26,6 +26,8 @@ public static function worklistColumns(?int $user_id = null): Collection WorklistColumn::Series, WorklistColumn::ReceiveDate, WorklistColumn::ActionButtons, + WorklistColumn::ViewerButtons, + WorklistColumn::ReportingButtons, ]); return $columns; diff --git a/resources/views/staff/studies/viewer.blade.php b/resources/views/staff/studies/viewer.blade.php index 8008fa2..b840f21 100644 --- a/resources/views/staff/studies/viewer.blade.php +++ b/resources/views/staff/studies/viewer.blade.php @@ -1,10 +1,66 @@ - {{ $title }} + + {{ $title }} | {{ config('app.name') }} + - +
+
+ +

{{ $title }}

+
+
+ +
+