diff --git a/app/Http/Controllers/Staff/StudiesController.php b/app/Http/Controllers/Staff/StudiesController.php index 2e33388..28c30b5 100644 --- a/app/Http/Controllers/Staff/StudiesController.php +++ b/app/Http/Controllers/Staff/StudiesController.php @@ -4,7 +4,6 @@ use App\Http\Controllers\HashidControllerBase; use App\Models\Enums\Permission; -use App\Models\Enums\UserRole; use App\Models\Study; use App\Services\AuditTrail\Activity; @@ -64,13 +63,4 @@ public function attachments() return view('staff.history.partials._uploaded-studies-list', compact('study', 'allow_delete')); } - - public function assignmentShow() - { - $this->decodeKeys(); - $study = Study::findOrFail($this->key); - $rads = User::active()->role(UserRole::Radiologist)->get(); - - return view('staff.studies.assign-form', compact('study', 'rads')); - } } diff --git a/app/Http/Controllers/Staff/StudyAssignmentController.php b/app/Http/Controllers/Staff/StudyAssignmentController.php new file mode 100644 index 0000000..fa9ae66 --- /dev/null +++ b/app/Http/Controllers/Staff/StudyAssignmentController.php @@ -0,0 +1,49 @@ +decodeKeys(); + $study = Study::with('assignedPhysician')->findOrFail($this->key); + $rads = User::active()->role(UserRole::Radiologist)->get(); + + return view('staff.studies.assign-form', compact('study', 'rads')); + } + + public function remove() + { + $this->decodeKeys(); + $study = Study::with('assignedPhysician')->findOrFail($this->key); + if ($study->assigned_physician_id !== null) { + $study->update(['assigned_physician_id' => null]); + audit() + ->did(Activity::Unassign_Physician) + ->notes("Previous assignment: {$study->assignedPhysician?->display_name}") + ->on($study) + ->log(); + } + + return redirect()->route('staff.worklist.index')->with('success', 'Removed assignment'); + } + + 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]); + audit()->did(Activity::Assign_Physician)->on($study)->log(); + + return redirect()->route('staff.worklist.index')->with('success', "Assigned study to {$rad->display_name}"); + } +} diff --git a/app/Http/Requests/AssignPhysicianRequest.php b/app/Http/Requests/AssignPhysicianRequest.php new file mode 100644 index 0000000..3de2d59 --- /dev/null +++ b/app/Http/Requests/AssignPhysicianRequest.php @@ -0,0 +1,20 @@ + ['required', 'exists:users,id'], + ]; + } + + public function authorize(): bool + { + return true; + } +} diff --git a/app/Services/AuditTrail/Activity.php b/app/Services/AuditTrail/Activity.php index 8ce05ad..9911d95 100644 --- a/app/Services/AuditTrail/Activity.php +++ b/app/Services/AuditTrail/Activity.php @@ -36,4 +36,7 @@ final class Activity public const int User_Failed_Login = 302; public const int User_Logout = 303; + + public const int Assign_Physician = 401; + public const int Unassign_Physician = 402; } diff --git a/resources/views/staff/studies/assign-form.blade.php b/resources/views/staff/studies/assign-form.blade.php index e7781d2..076dc00 100644 --- a/resources/views/staff/studies/assign-form.blade.php +++ b/resources/views/staff/studies/assign-form.blade.php @@ -1,8 +1,25 @@ +
{{ $doc->display_name }} | -X | ++ + |