diff --git a/app/DAL/Radiologist.php b/app/DAL/Radiologist.php index 2911450..886b163 100644 --- a/app/DAL/Radiologist.php +++ b/app/DAL/Radiologist.php @@ -25,7 +25,8 @@ public static function assignables() FROM studies WHERE - received_at::DATE >= NOW() - INTERVAL '3 DAY' + --received_at::DATE >= NOW() - INTERVAL '3 DAY' + assigned_at::DATE >= NOW() - INTERVAL '3 DAY' AND report_status < 3 AND reported_at IS NULL GROUP BY diff --git a/app/DataTables/WorklistDataTable.php b/app/DataTables/WorklistDataTable.php index fbd9deb..3e382cf 100644 --- a/app/DataTables/WorklistDataTable.php +++ b/app/DataTables/WorklistDataTable.php @@ -4,6 +4,7 @@ use App\DAL\Studies\WorklistFactory; use App\Models\Study; +use Blade; use Carbon\Carbon; use Carbon\CarbonImmutable; use Illuminate\Database\Eloquent\Builder as QueryBuilder; @@ -27,21 +28,34 @@ public function dataTable(QueryBuilder $query): EloquentDataTable { return (new EloquentDataTable($query)) ->addColumn('action', 'worklist.action') - ->editColumn('patient_name', fn (Study $study) => $study->sanitizedPatientName()) - ->editColumn('study_description', fn (Study $study) => $study->sanitizedStudyDescription()) + ->editColumn('patient_name', fn(Study $study) => $study->sanitizedPatientName()) + ->editColumn('study_description', fn(Study $study) => $study->sanitizedStudyDescription()) ->editColumn('reader', function (Study $study) { if ($study->readingPhysician == null) { return ''; } - return '' . $study->readingPhysician->display_name; + return Blade::render('staff.worklist.partials._radiologist-listing', + [ + 'avatar_url' => $study->readingPhysician->avatar(), + 'name' => $study->readingPhysician->display_name, + 'time' => $study->read_at->diffForHumans(), + ] + ); }) ->editColumn('assigned_to', function (Study $study) { + if ($study->assignedPhysician == null) { return ''; } - return '' . $study->assignedPhysician->display_name; + return Blade::render('staff.worklist.partials._radiologist-listing', + [ + 'avatar_url' => $study->assignedPhysician->avatar(), + 'name' => $study->assignedPhysician->display_name, + 'time' => $study->assigned_at->diffForHumans(), + ] + ); }) ->editColumn('images', function (Study $study) { return $study->numInstances() . '' . human_filesize($study->disk_size) . ''; diff --git a/app/Http/Controllers/Staff/StudyAssignmentController.php b/app/Http/Controllers/Staff/StudyAssignmentController.php index 7bf1950..6ec9dbd 100644 --- a/app/Http/Controllers/Staff/StudyAssignmentController.php +++ b/app/Http/Controllers/Staff/StudyAssignmentController.php @@ -2,12 +2,15 @@ namespace App\Http\Controllers\Staff; +use App\DAL\Radiologist; use App\Http\Controllers\HashidControllerBase; use App\Http\Requests\AssignPhysicianRequest; use App\Models\Enums\UserRole; use App\Models\Study; use App\Models\User; use App\Services\AuditTrail\Activity; +use Carbon\Carbon; +use Carbon\CarbonInterface; class StudyAssignmentController extends HashidControllerBase { @@ -15,7 +18,15 @@ public function show() { $this->decodeKeys(); $study = Study::with('assignedPhysician')->findOrFail($this->key); - $rads = User::active()->role(UserRole::Radiologist)->get(['id', 'display_name', 'profile_photo_path', 'first_name', 'last_name']); + $rads = User::active()->role(UserRole::Radiologist)->get(['id', 'display_name', 'profile_photo_path', 'first_name', 'last_name', 'created_at']); + $stats = Radiologist::assignables(); + foreach ($stats as $rad) { + $found = $rads->where('id', $rad->id)->first(); + if ($found) { + $found->info['workload'] = $rad->workload; + $found->info['last_seen'] = 'Seen: '. ($rad->last_seen ?? Carbon::now()->addHours(-10))->diffForHumans(); + } + } return view('staff.studies.assign-form', compact('study', 'rads')); } @@ -25,7 +36,7 @@ public function remove() $this->decodeKeys(); $study = Study::with('assignedPhysician')->findOrFail($this->key); if ($study->assigned_physician_id !== null) { - $study->update(['assigned_physician_id' => null]); + $study->update(['assigned_physician_id' => null, 'assigned_at' => null]); audit() ->did(Activity::Unassign_Physician) ->notes("Unassigned: {$study->assignedPhysician?->display_name}") @@ -41,7 +52,7 @@ public function save(AssignPhysicianRequest $request) $this->decodeKeys(); $study = Study::findOrFail($this->key); $rad = User::active()->findOrFail($request->input('rad_id')); - $study->update(['assigned_physician_id' => $rad->id]); + $study->update(['assigned_physician_id' => $rad->id, 'assigned_at' => now()]); audit() ->did(Activity::Assign_Physician) ->on($study) diff --git a/app/Models/Study.php b/app/Models/Study.php index 7fb1141..8033ddd 100644 --- a/app/Models/Study.php +++ b/app/Models/Study.php @@ -115,6 +115,11 @@ public function assignedPhysician(): BelongsTo return $this->belongsTo(User::class, 'assigned_physician_id'); } + public function isAssigned(int $rad_id): bool + { + return $this->assigned_physician_id === $rad_id; + } + public function getReportStatusLedAttribute(): string { $color = match ($this->report_status) { diff --git a/app/Models/User.php b/app/Models/User.php index ec36548..b78e1f5 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -151,4 +151,6 @@ protected function casts(): array 'password' => 'hashed', ]; } + + public array $info = []; } diff --git a/resources/views/staff/studies/assign-form.blade.php b/resources/views/staff/studies/assign-form.blade.php index 51ae2f3..2853c49 100644 --- a/resources/views/staff/studies/assign-form.blade.php +++ b/resources/views/staff/studies/assign-form.blade.php @@ -1,15 +1,19 @@ -
- Currently assigned: {{ $study->assignedPhysician?->display_name ?? 'None' }} - @isset($study->assignedPhysician) -
- @csrf - @method('DELETE') - -
- @endisset +
+
+ Currently assigned: {{ $study->assignedPhysician?->display_name }} +
+
+ @isset($study->assignedPhysician) +
+ @csrf + @method('DELETE') + +
+ @endisset +
- +
@@ -29,20 +33,28 @@
- {{ $doc->display_name }} - last seen + + {{ $doc->display_name }} + @if($study->isAssigned($doc->id)) + + @endif + + {{ $doc->info['last_seen'] }}
@endforeach diff --git a/resources/views/staff/worklist/partials/_radiologist-listing.blade.php b/resources/views/staff/worklist/partials/_radiologist-listing.blade.php new file mode 100644 index 0000000..2120bf0 --- /dev/null +++ b/resources/views/staff/worklist/partials/_radiologist-listing.blade.php @@ -0,0 +1,15 @@ +
+
+
+ +
+
+
+ + {{ $name }} + + + {{ $time }} + +
+
Physician - 0 / 0 + {{ $doc->info['workload'] }} -
- @csrf - - -
+ @if($study->isAssigned($doc->id)) + @else +
+ @csrf + + +
+ @endif