This commit is contained in:
Dr Masroor Ehsan 2025-01-11 02:12:18 +06:00
parent 5ec37cd58e
commit a9d2b34e6f
3 changed files with 59 additions and 51 deletions

View File

@ -13,31 +13,31 @@ public static function worklist_stats(int $days, int $report_status)
SELECT
users."id",
users.display_name,
COALESCE (studies.assign_counts, 0) AS workload
COALESCE (cte.assign_counts, 0) AS workload
FROM
roles
INNER JOIN model_has_roles ON roles."id" = model_has_roles.role_id
INNER JOIN users ON users."id" = model_has_roles.model_id
LEFT JOIN (
SELECT
assigned_physician_id,
COUNT(*) AS assign_counts
FROM
studies
WHERE
--received_at::DATE >= NOW() - INTERVAL '3 DAY'
assigned_at::DATE >= NOW() - INTERVAL '%d DAY'
AND report_status < %d
AND reported_at IS NULL
GROUP BY
assigned_physician_id
) AS studies ON studies.assigned_physician_id = users."id"
SELECT
sa.user_id,
COUNT(sa.*) AS assign_counts
FROM
study_assignments AS sa
INNER JOIN studies st ON st.ID = sa.study_id
WHERE
--st.received_at :: DATE >= NOW() - INTERVAL '3 DAY'
st.received_at::DATE >= NOW() - INTERVAL '%d DAY'
AND st.report_status < %d
AND st.read_at IS NULL
GROUP BY
sa.user_id) AS cte ON cte.user_id = users."id"
WHERE
roles."name" = 'radiologist'
AND users.is_active = TRUE
GROUP BY
users."id",
studies.assign_counts
cte.assign_counts
ORDER BY
users.display_name
SQL;

View File

@ -19,30 +19,35 @@ public function show()
{
abort_unless(auth()->user()->may(Permission::AssignRadiologist), 403);
$this->decodeKeys();
$study = Study::with('assignedPhysician')->findOrFail($this->key);
$study = Study::with('assignedPhysicians')->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();
$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()
public function remove(AssignPhysicianRequest $request)
{
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]);
$study = Study::with('assignedPhysicians')->findOrFail($this->key);
$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: {$study->assignedPhysician?->display_name}")
->notes("Unassigned: {$user->display_name}")
->on($study)
->log();
}
@ -54,17 +59,11 @@ public function save(AssignPhysicianRequest $request)
{
abort_unless(auth()->user()->may(Permission::AssignRadiologist), 403);
$this->decodeKeys();
$study = Study::findOrFail($this->key);
$study = Study::with('assignedPhysicians')->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()]);
$study->assignedPhysicians()->attach($rad->id);
$study->update(['assigned_at' => now()]);
audit()
->did(Activity::Assign_Physician)
->on($study)

View File

@ -12,32 +12,41 @@
<td>Patient Name</td>
<td class="fw-semibold">{{ $study->patient_name }}</td>
</tr>
</table>
</div>
<div class="mb-4 bg-light">
<h6 class="p-2">Currently Assigned Radiologist(s)</h6>
</div>
<table class="table table-borderless table-sm">
@foreach ($study->assignedPhysicians as $physician)
<tr>
<td>Currently assigned</td>
<td>
@isset($study->assignedPhysician)
<div class="d-inline-flex">
<span class="fw-semibold me-4">{{ $study->assignedPhysician?->display_name }}</span>
<form action="{{ route('staff.assign.remove', $study->hash) }}" class="inline" method="post">
@csrf
@method('DELETE')
<button class="btn btn-danger btn-xs" type="submit">
<i class="fa-light fa-user-slash me-2"></i>
Remove
</button>
</form>
</div>
@endisset
{{ $physician->display_name }}
</td>
<td>
<form action="{{ route('staff.assign.remove', $study->hash) }}" method="POST">
@csrf
@method('DELETE')
<input type="hidden" name="rad_id" value="{{ $physician->id }}">
<button class="btn btn-outline-danger btn-xs" type="submit">
<i class="fa-light fa-user-slash me-1"></i>
Remove
</button>
</form>
</td>
</tr>
</table>
<div class="col-2">
</div>
@endforeach
</table>
<div class="mb-4 bg-light">
<h6 class="p-2">Available Radiologists</h6>
</div>
<table class="table table-sm">
<tr class="fw-light">
<td>Physician</td>
<td>Radiologist</td>
<td>Workload</td>
<td>&nbsp;</td>
</tr>
@ -82,6 +91,6 @@
@endif
</td>
</tr>
@endforeach
</tbody>
@endforeach
</tbody>
</table>