77 lines
2.8 KiB
PHP
77 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Staff;
|
|
|
|
use App\DAL\Radiologists;
|
|
use App\Domain\ACL\Permission;
|
|
use App\Domain\ACL\Role;
|
|
use App\Domain\Report\ReportStatus;
|
|
use App\Http\Controllers\HashidControllerBase;
|
|
use App\Http\Requests\AssignPhysicianRequest;
|
|
use App\Models\Study;
|
|
use App\Models\User;
|
|
use App\Services\AuditTrail\Activity;
|
|
use Carbon\Carbon;
|
|
|
|
class AssignmentController extends HashidControllerBase
|
|
{
|
|
public function show()
|
|
{
|
|
abort_unless(auth()->user()->may(Permission::AssignRadiologist), 403);
|
|
$this->decodeKeys();
|
|
$study = Study::with('assignedPhysician')->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();
|
|
}
|
|
}
|
|
|
|
return view('staff.studies.assign-form', compact('study', 'rads'));
|
|
}
|
|
|
|
public function remove()
|
|
{
|
|
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]);
|
|
audit()
|
|
->did(Activity::Unassign_Physician)
|
|
->notes("Unassigned: {$study->assignedPhysician?->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::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()]);
|
|
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}");
|
|
}
|
|
}
|