diff --git a/app/DAL/Studies.php b/app/DAL/Studies.php index 09ebad6..5ba6751 100644 --- a/app/DAL/Studies.php +++ b/app/DAL/Studies.php @@ -2,11 +2,12 @@ namespace App\DAL; +use App\Models\Enums\ReportStatus; use App\Models\Study; use Cache; use DB; +use Illuminate\Contracts\Pagination\LengthAwarePaginator; use Illuminate\Database\Query\Builder; -use Illuminate\Support\Collection; final readonly class Studies { @@ -19,7 +20,7 @@ public static function getStudyIdByOrthancUuid(string $orthanc_uuid): ?int ->value('id')); } - private static function assignedQuery(?int $user_id = null): Builder + private static function assignedStudiesQuery(?int $user_id = null): Builder { $user_id = (int) ($user_id ?? auth()->id()); @@ -29,41 +30,59 @@ private static function assignedQuery(?int $user_id = null): Builder ->orderBy('received_at', 'asc'); } - public static function getAllAssignedStudies(?int $user_id = null): Collection + public static function getAllAssignedStudies(?int $user_id = null): LengthAwarePaginator { - $user_id = (int) ($user_id ?? auth()->id()); - $per_page = settings()->get("user.{$user_id}.pagination.per_page", config('app.pagination.per_page')); - - return Study::active() - ->where('assigned_physician_id', $user_id) - ->orderBy('study_priority', 'desc') - ->orderBy('received_at', 'asc') - ->paginate($per_page); + return self::assignedStudiesQuery($user_id) + ->paginate(user_per_page()); } - public static function getPendingAssignedStudies(?int $user_id = null): Collection + public static function getPendingAssignedStudies(?int $user_id = null): LengthAwarePaginator { - $user_id = (int) ($user_id ?? auth()->id()); - $per_page = settings()->get("user.{$user_id}.pagination.per_page", config('app.pagination.per_page')); - - return Study::active() - ->where('assigned_physician_id', $user_id) + return self::assignedStudiesQuery($user_id) ->where('report_status', '<', ReportStatus::Finalized->value) - ->orderBy('study_priority', 'desc') - ->orderBy('received_at', 'asc') - ->paginate($per_page); + ->paginate(user_per_page()); } - public static function getCompletedAssignedStudies(?int $user_id = null): Collection + public static function getCompletedAssignedStudies(?int $user_id = null): LengthAwarePaginator { - $user_id = (int) ($user_id ?? auth()->id()); - $per_page = settings()->get("user.{$user_id}.pagination.per_page", config('app.pagination.per_page')); - - return Study::active() - ->where('assigned_physician_id', $user_id) + return self::assignedStudiesQuery($user_id) ->where('report_status', '=', ReportStatus::Signed->value) + ->paginate(user_per_page()); + } + + private static function institutedStudiesQuery(): Builder + { + $query = Study::active(); + $facility_id = auth()->user()->facility_id; + if ($facility_id) { + $query = $query->where('facility_id', $facility_id); + } else { + $institute_id = auth()->user()->institute_id; + $query = $query->where('institute_id', $institute_id); + } + + return $query ->orderBy('study_priority', 'desc') - ->orderBy('received_at', 'asc') - ->paginate($per_page); + ->orderBy('received_at', 'asc'); + } + + public static function getAllInstituteStudies(?int $user_id = null): LengthAwarePaginator + { + return self::institutedStudiesQuery($user_id) + ->paginate(user_per_page()); + } + + public static function getPendingInstituteStudies(?int $user_id = null): LengthAwarePaginator + { + return self::institutedStudiesQuery($user_id) + ->where('report_status', '<', ReportStatus::Finalized->value) + ->paginate(user_per_page()); + } + + public static function getCompletedInstituteStudies(?int $user_id = null): LengthAwarePaginator + { + return self::institutedStudiesQuery($user_id) + ->where('report_status', '=', ReportStatus::Signed->value) + ->paginate(user_per_page()); } } diff --git a/app/helpers.php b/app/helpers.php index ecf7adc..8a2d971 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -38,3 +38,12 @@ function sync_agent_id(): int fn () => User::where('username', '$$_pacs_sync_$$')->first()->id); } } + +if (! function_exists('user_per_page')) { + function user_per_page(?int $user_id = null): int + { + $user_id = (int) ($user_id ?? auth()->id()); + + return settings()->get("user.{$user_id}.pagination.per_page", config('app.pagination.per_page')); + } +}