wip assignment

This commit is contained in:
Masroor Ehsan 2025-01-06 20:04:43 +06:00
parent 3161b143bb
commit 1a2c67d852
7 changed files with 98 additions and 12 deletions

View File

@ -4,7 +4,6 @@
use App\Http\Controllers\HashidControllerBase; use App\Http\Controllers\HashidControllerBase;
use App\Models\Enums\Permission; use App\Models\Enums\Permission;
use App\Models\Enums\UserRole;
use App\Models\Study; use App\Models\Study;
use App\Services\AuditTrail\Activity; use App\Services\AuditTrail\Activity;
@ -64,13 +63,4 @@ public function attachments()
return view('staff.history.partials._uploaded-studies-list', compact('study', 'allow_delete')); 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'));
}
} }

View File

@ -0,0 +1,49 @@
<?php
namespace App\Http\Controllers\Staff;
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;
class StudyAssignmentController extends HashidControllerBase
{
public function show()
{
$this->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}");
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class AssignPhysicianRequest extends FormRequest
{
public function rules(): array
{
return [
'rad_id' => ['required', 'exists:users,id'],
];
}
public function authorize(): bool
{
return true;
}
}

View File

@ -36,4 +36,7 @@ final class Activity
public const int User_Failed_Login = 302; public const int User_Failed_Login = 302;
public const int User_Logout = 303; public const int User_Logout = 303;
public const int Assign_Physician = 401;
public const int Unassign_Physician = 402;
} }

View File

@ -1,8 +1,25 @@
<div>
Currently assigned: {{ $study->assignedPhysician?->display_name ?? 'None' }}
@isset($study->assignedPhysician)
<form action="{{ route('staff.assign.remove', $study->hash) }}" class="inline" method="post">
@csrf
@method('DELETE')
<button class="btn btn-danger btn-xs" type="submit">Remove</button>
</form>
@endisset
</div>
<table class="table table-sm"> <table class="table table-sm">
@foreach ($rads as $doc) @foreach ($rads as $doc)
<tr> <tr>
<td>{{ $doc->display_name }}</td> <td>{{ $doc->display_name }}</td>
<td>X</td> <td>
<form action="{{ route('staff.assign.save', $study->hash) }}" class="inline" method="post">
@csrf
<input type="hidden" name="rad_id" value="{{ $doc->id }}">
<button class="btn btn-primary btn-xs" type="submit">Assign</button>
</form>
</td>
</tr> </tr>
@endforeach @endforeach
</table> </table>

View File

@ -59,7 +59,7 @@
$('body').on('click', '.show-assign', function () { $('body').on('click', '.show-assign', function () {
var study_id = $(this).data('id'); 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-details').html(data);
$('#assign-modal').modal('show'); $('#assign-modal').modal('show');
}); });

View File

@ -6,6 +6,7 @@
use App\Http\Controllers\SocialLoginController; use App\Http\Controllers\SocialLoginController;
use App\Http\Controllers\Staff\AttachmentController; use App\Http\Controllers\Staff\AttachmentController;
use App\Http\Controllers\Staff\StudiesController; use App\Http\Controllers\Staff\StudiesController;
use App\Http\Controllers\Staff\StudyAssignmentController;
use App\Http\Controllers\Staff\StudyHistoryController; use App\Http\Controllers\Staff\StudyHistoryController;
use App\Http\Controllers\Staff\StudyViewerController; use App\Http\Controllers\Staff\StudyViewerController;
use App\Http\Controllers\Staff\WorklistController; use App\Http\Controllers\Staff\WorklistController;
@ -57,6 +58,12 @@
Route::get('attach', [StudiesController::class, 'attachments'])->name('attach'); 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::group(['prefix' => 'history', 'as' => 'history.'], function () {
Route::get('{hashid}', [StudyHistoryController::class, 'view'])->name('view'); Route::get('{hashid}', [StudyHistoryController::class, 'view'])->name('view');
Route::get('{hashid}/edit', [StudyHistoryController::class, 'edit'])->name('edit'); Route::get('{hashid}/edit', [StudyHistoryController::class, 'edit'])->name('edit');