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 @@
-
Physician | @@ -29,20 +33,28 @@- 0 / 0 + {{ $doc->info['workload'] }} | - + @if($study->isAssigned($doc->id)) + @else + + @endif |
---|