diff --git a/app/DAL/Studies/AdminStudyLister.php b/app/DAL/Studies/AdminStudyLister.php new file mode 100644 index 0000000..a8e63ad --- /dev/null +++ b/app/DAL/Studies/AdminStudyLister.php @@ -0,0 +1,14 @@ +id()); + + return self::defaultSortQuery( + Study::active()->where('assigned_physician_id', $user_id) + ); + } +} diff --git a/app/DAL/Studies/TechnicianStudyLister.php b/app/DAL/Studies/TechnicianStudyLister.php new file mode 100644 index 0000000..d69fd10 --- /dev/null +++ b/app/DAL/Studies/TechnicianStudyLister.php @@ -0,0 +1,23 @@ +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 self::defaultSortQuery($query); + } +} diff --git a/app/DAL/Studies/UserStudyListerBase.php b/app/DAL/Studies/UserStudyListerBase.php new file mode 100644 index 0000000..8fd6649 --- /dev/null +++ b/app/DAL/Studies/UserStudyListerBase.php @@ -0,0 +1,47 @@ +where('report_status', '=', ReportStatus::Signed->value); + } + + protected static function defaultSortQuery(Builder $query): Builder + { + return $query + ->orderBy('study_priority', 'desc') + ->orderBy('received_at', 'asc'); + } + + protected static function reportPendingQuery(Builder $query): Builder + { + return $query->where('report_status', '<', ReportStatus::Finalized->value); + } + + abstract protected static function defaultQuery(?int $user_id = null): Builder; + + public function all(?int $user_id = null): LengthAwarePaginator + { + return self::defaultQuery($user_id) + ->paginate(user_per_page($user_id)); + } + + public function pending(?int $user_id = null): LengthAwarePaginator + { + return self::reportPendingQuery(self::defaultQuery($user_id)) + ->paginate(user_per_page($user_id)); + } + + public function completed(?int $user_id = null): LengthAwarePaginator + { + return self::reportCompleteQuery(self::defaultQuery($user_id)) + ->paginate(user_per_page($user_id)); + } +} diff --git a/app/DAL/Studies/UserStudyListerFactory.php b/app/DAL/Studies/UserStudyListerFactory.php new file mode 100644 index 0000000..d223517 --- /dev/null +++ b/app/DAL/Studies/UserStudyListerFactory.php @@ -0,0 +1,24 @@ +user()->user_role; + + return match (UserRole::from($user_role)) { + UserRole::Admin => new AdminStudyLister, + UserRole::Technician => new TechnicianStudyLister, + UserRole::Radiologist => new RadiologistStudyLister, + default => throw new Exception("Unknown user role: $user_role"), + }; + } +}