radfusion/app/DAL/Radiologists.php
2025-01-07 00:03:49 +06:00

53 lines
1.2 KiB
PHP

<?php
namespace App\DAL;
use App\Services\UserService;
use Illuminate\Support\Facades\DB;
final readonly class Radiologists
{
public static function worklist_stats(int $days, int $report_status)
{
$sql = <<<'SQL'
SELECT
users."id",
users.display_name,
COALESCE (studies.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"
WHERE
roles."name" = 'radiologist'
AND users.is_active = TRUE
GROUP BY
users."id",
studies.assign_counts
ORDER BY
users.display_name
SQL;
$rows = DB::select(sprintf($sql, $days, $report_status));
foreach ($rows as $row) {
$row->last_seen = UserService::getLastSeen((int) $row->id);
}
return $rows;
}
}