user()->may(Permission::AssignRadiologist), 403); $this->decodeKeys(); $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(-random_int(1, 36)))->diffForHumans(); } } return view('staff.studies.assign-form', compact('study', 'rads')); } public function remove(AssignPhysicianRequest $request) { abort_unless(auth()->user()->may(Permission::AssignRadiologist), 403); $this->decodeKeys(); $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: {$user->display_name}") ->on($study) ->log(); } return redirect()->route('staff.worklist.index')->with('success', 'Removed assignment'); } public function save(AssignPhysicianRequest $request) { abort_unless(auth()->user()->may(Permission::AssignRadiologist), 403); $this->decodeKeys(); $study = Study::with('assignedPhysicians')->findOrFail($this->key); $rad = User::active()->findOrFail($request->input('rad_id')); $study->assignedPhysicians()->attach($rad->id); $study->update(['assigned_at' => now()]); audit() ->did(Activity::Assign_Physician) ->on($study) ->notes("Assigned: {$rad->display_name}") ->log(); return redirect()->route('staff.worklist.index')->with('success', "Assigned study to {$rad->display_name}"); } }