diff --git a/app/DAL/Radiologists.php b/app/DAL/Radiologists.php index 2950d56..c50b065 100644 --- a/app/DAL/Radiologists.php +++ b/app/DAL/Radiologists.php @@ -13,31 +13,31 @@ public static function worklist_stats(int $days, int $report_status) SELECT users."id", users.display_name, - COALESCE (studies.assign_counts, 0) AS workload + COALESCE (cte.assign_counts, 0) AS workload FROM roles INNER JOIN model_has_roles ON roles."id" = model_has_roles.role_id INNER JOIN users ON users."id" = model_has_roles.model_id LEFT JOIN ( - SELECT - assigned_physician_id, - COUNT(*) AS assign_counts - FROM - studies - WHERE - --received_at::DATE >= NOW() - INTERVAL '3 DAY' - assigned_at::DATE >= NOW() - INTERVAL '%d DAY' - AND report_status < %d - AND reported_at IS NULL - GROUP BY - assigned_physician_id - ) AS studies ON studies.assigned_physician_id = users."id" + SELECT + sa.user_id, + COUNT(sa.*) AS assign_counts + FROM + study_assignments AS sa + INNER JOIN studies st ON st.ID = sa.study_id + WHERE + --st.received_at :: DATE >= NOW() - INTERVAL '3 DAY' + st.received_at::DATE >= NOW() - INTERVAL '%d DAY' + AND st.report_status < %d + AND st.read_at IS NULL + GROUP BY + sa.user_id) AS cte ON cte.user_id = users."id" WHERE roles."name" = 'radiologist' AND users.is_active = TRUE GROUP BY users."id", - studies.assign_counts + cte.assign_counts ORDER BY users.display_name SQL; diff --git a/app/Http/Controllers/Staff/AssignmentController.php b/app/Http/Controllers/Staff/AssignmentController.php index 854ec5b..a4a5986 100644 --- a/app/Http/Controllers/Staff/AssignmentController.php +++ b/app/Http/Controllers/Staff/AssignmentController.php @@ -19,30 +19,35 @@ public function show() { abort_unless(auth()->user()->may(Permission::AssignRadiologist), 403); $this->decodeKeys(); - $study = Study::with('assignedPhysician')->findOrFail($this->key); + $study = Study::with('assignedPhysicians')->findOrFail($this->key); $rads = User::active()->role(Role::Radiologist)->get(['id', 'display_name', 'profile_photo_path', 'first_name', 'last_name', 'created_at']); $stats = Radiologists::worklist_stats(3, ReportStatus::Finalized->value); foreach ($stats as $rad) { $found = $rads->where('id', $rad->id)->first(); if ($found) { $found->info['workload'] = $rad->workload; - $found->info['last_seen'] = ($rad->last_seen ?? Carbon::now()->addHours(-10))->diffForHumans(); + $found->info['last_seen'] = ($rad->last_seen ?? Carbon::now()->addHours(-random_int(1, 36)))->diffForHumans(); } } return view('staff.studies.assign-form', compact('study', 'rads')); } - public function remove() + public function remove(AssignPhysicianRequest $request) { abort_unless(auth()->user()->may(Permission::AssignRadiologist), 403); $this->decodeKeys(); - $study = Study::with('assignedPhysician')->findOrFail($this->key); - if ($study->assigned_physician_id !== null) { - $study->update(['assigned_physician_id' => null, 'assigned_at' => null]); + $study = Study::with('assignedPhysicians')->findOrFail($this->key); + $user = User::active()->findOrFail($request->input('rad_id')); + + if ($study->isAssigned($user)) { + $study->assignedPhysicians()->detach($user->id); + if ($study->assignedPhysicians->count() === 0) { + $study->update(['assigned_at' => null]); + } audit() ->did(Activity::Unassign_Physician) - ->notes("Unassigned: {$study->assignedPhysician?->display_name}") + ->notes("Unassigned: {$user->display_name}") ->on($study) ->log(); } @@ -54,17 +59,11 @@ public function save(AssignPhysicianRequest $request) { abort_unless(auth()->user()->may(Permission::AssignRadiologist), 403); $this->decodeKeys(); - $study = Study::findOrFail($this->key); + $study = Study::with('assignedPhysicians')->findOrFail($this->key); $rad = User::active()->findOrFail($request->input('rad_id')); - if ($study->assigned_physician_id !== null) { - audit() - ->did(Activity::Unassign_Physician) - ->notes("Unassigned: {$study->assignedPhysician?->display_name}") - ->on($study) - ->log(); - } - $study->update(['assigned_physician_id' => $rad->id, 'assigned_at' => now()]); + $study->assignedPhysicians()->attach($rad->id); + $study->update(['assigned_at' => now()]); audit() ->did(Activity::Assign_Physician) ->on($study) diff --git a/resources/views/staff/studies/assign-form.blade.php b/resources/views/staff/studies/assign-form.blade.php index ecacd8b..d593731 100644 --- a/resources/views/staff/studies/assign-form.blade.php +++ b/resources/views/staff/studies/assign-form.blade.php @@ -12,32 +12,41 @@
Currently assigned |
- @isset($study->assignedPhysician)
-
- {{ $study->assignedPhysician?->display_name }}
-
-
- @endisset
+ {{ $physician->display_name }}
+ |
+ + |
Physician | +Radiologist | Workload |