72 lines
2.6 KiB
PHP
72 lines
2.6 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\HashedStudyControllerBase;
|
|
use App\Http\Requests\AssignPhysicianRequest;
|
|
use App\Models\User;
|
|
use App\Services\AuditTrail\Activity;
|
|
use Carbon\Carbon;
|
|
|
|
class AssignmentController extends HashedStudyControllerBase
|
|
{
|
|
public function show()
|
|
{
|
|
abort_unless(auth()->user()->may(Permission::AssignRadiologist), 403);
|
|
$study = $this->getStudy('assignedPhysicians');
|
|
$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);
|
|
$study = $this->getStudy('assignedPhysicians');
|
|
$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);
|
|
$study = $this->getStudy('assignedPhysicians');
|
|
$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}");
|
|
}
|
|
}
|