From 1a2c67d852d13a34fc3f7ec3f5e481f0d92ae992 Mon Sep 17 00:00:00 2001 From: Masroor Ehsan Date: Mon, 6 Jan 2025 20:04:43 +0600 Subject: [PATCH] wip assignment --- .../Controllers/Staff/StudiesController.php | 10 ---- .../Staff/StudyAssignmentController.php | 49 +++++++++++++++++++ app/Http/Requests/AssignPhysicianRequest.php | 20 ++++++++ app/Services/AuditTrail/Activity.php | 3 ++ .../views/staff/studies/assign-form.blade.php | 19 ++++++- .../views/staff/worklist/index.blade.php | 2 +- routes/web.php | 7 +++ 7 files changed, 98 insertions(+), 12 deletions(-) create mode 100644 app/Http/Controllers/Staff/StudyAssignmentController.php create mode 100644 app/Http/Requests/AssignPhysicianRequest.php 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 @@ +
+ Currently assigned: {{ $study->assignedPhysician?->display_name ?? 'None' }} + @isset($study->assignedPhysician) +
+ @csrf + @method('DELETE') + +
+ @endisset +
+ @foreach ($rads as $doc) - + @endforeach
{{ $doc->display_name }}X +
+ @csrf + + +
+
diff --git a/resources/views/staff/worklist/index.blade.php b/resources/views/staff/worklist/index.blade.php index 292af5e..93203e9 100644 --- a/resources/views/staff/worklist/index.blade.php +++ b/resources/views/staff/worklist/index.blade.php @@ -59,7 +59,7 @@ $('body').on('click', '.show-assign', function () { var study_id = $(this).data('id'); - $.get("{{ route('staff.studies.assign-show') }}", {hashid: study_id}, function (data) { + $.get("{{ route('staff.assign.show') }}", {hashid: study_id}, function (data) { $('#assign-details').html(data); $('#assign-modal').modal('show'); }); diff --git a/routes/web.php b/routes/web.php index 1cc41b3..41ad377 100644 --- a/routes/web.php +++ b/routes/web.php @@ -6,6 +6,7 @@ use App\Http\Controllers\SocialLoginController; use App\Http\Controllers\Staff\AttachmentController; use App\Http\Controllers\Staff\StudiesController; +use App\Http\Controllers\Staff\StudyAssignmentController; use App\Http\Controllers\Staff\StudyHistoryController; use App\Http\Controllers\Staff\StudyViewerController; use App\Http\Controllers\Staff\WorklistController; @@ -57,6 +58,12 @@ Route::get('attach', [StudiesController::class, 'attachments'])->name('attach'); }); + Route::group(['prefix' => 'assign', 'as' => 'assign.'], function () { + Route::get('', [StudyAssignmentController::class, 'show'])->name('show'); + Route::post('{hashid}', [StudyAssignmentController::class, 'save'])->name('save'); + Route::delete('{hashid}', [StudyAssignmentController::class, 'remove'])->name('remove'); + }); + Route::group(['prefix' => 'history', 'as' => 'history.'], function () { Route::get('{hashid}', [StudyHistoryController::class, 'view'])->name('view'); Route::get('{hashid}/edit', [StudyHistoryController::class, 'edit'])->name('edit');