From 45b452fb0ee90dd5b424ea90905dd96b396b8d8e Mon Sep 17 00:00:00 2001 From: Dr Masroor Ehsan Date: Fri, 3 Jan 2025 21:17:12 +0600 Subject: [PATCH] wip --- app/DAL/Studies/IUserStudyLister.php | 4 +- app/DAL/Studies/WorklistBase.php | 41 ++++++++++++------- app/Models/Enums/ReportStatus.php | 8 ++-- ...2024_12_27_060234_create_studies_table.php | 19 +++++---- 4 files changed, 42 insertions(+), 30 deletions(-) diff --git a/app/DAL/Studies/IUserStudyLister.php b/app/DAL/Studies/IUserStudyLister.php index 436ead5..8035da8 100644 --- a/app/DAL/Studies/IUserStudyLister.php +++ b/app/DAL/Studies/IUserStudyLister.php @@ -14,9 +14,9 @@ public function setStudyStatus(StudyLevelStatus $status): void; public function setReportStatus(ReportStatus $status): void; - public function setPageSize(int $size): void; + public function setPerPage(int $size): void; - public function setSortColumn(string $column, string $dir): void; + public function setSortOrder(string $order): void; public function setSearchTerm(string $search): void; diff --git a/app/DAL/Studies/WorklistBase.php b/app/DAL/Studies/WorklistBase.php index f0d27ed..18928c2 100644 --- a/app/DAL/Studies/WorklistBase.php +++ b/app/DAL/Studies/WorklistBase.php @@ -10,9 +10,9 @@ abstract class WorklistBase implements IUserStudyLister { - private ?int $pageSize = null; + private ?int $perPage = null; - private ?string $sortColumn = null; + private array $sortColumns = []; private ?string $sortDir = null; @@ -43,7 +43,7 @@ private function applyRadiologist(Builder $query): Builder if ($this->radiologist_id != null) { $rad = $this->radiologist_id; $query = $query->where(function ($query) use ($rad) { - $query->orWhere('assigned_physician_id', '=', $rad); + $query->Where('assigned_physician_id', '=', $rad); $query->orWhere('reading_physician_id', '=', $rad); }); } @@ -85,13 +85,17 @@ public function setReportStatus(ReportStatus $status): void protected static function reportCompleteQuery(Builder $query): Builder { - return $query->where('report_status', '=', ReportStatus::Signed->value); + return $query->where('report_status', '=', ReportStatus::Authorized->value); } protected function applySort(Builder $query): Builder { - if ($this->sortColumn) { - return $query->orderBy($this->sortColumn, $this->sortDir ?? 'ASC'); + if (! empty($this->sortColumns)) { + foreach ($this->sortColumns as $column => $dir) { + $query = $query->orderBy($column, $dir); + } + + return $query; } return $query @@ -126,25 +130,32 @@ public function setLocked(bool $locked): void $this->locked = $locked; } - public function setPageSize(int $size): void + public function setPerPage(int $size): void { - $this->pageSize = $size; + $this->perPage = $size; } - public function setSortColumn(string $column, string $dir): void + public function setSortOrder(string $order): void { - $this->sortColumn = $column; - $this->sortDir = $dir; + $this->sortColumns = []; + if (filled($order)) { + $orders = explode(',', $order); + foreach ($orders as $order) { + $column = ltrim($order, '-'); + $dir = ($order[0] == '-') ? 'desc' : 'asc'; + $this->sortColumns[] = [$column => $dir]; + } + } } public function setSearchTerm(string $search): void { - $this->searchTerm = $search; + $this->searchTerm = trim(strtolower($search)); } private function getPageSize(?int $user_id = null): int { - return $this->pageSize ?? $this->getPageSize($user_id); + return $this->perPage ?? $this->getPageSize($user_id); } private function applySearch(Builder $query): Builder @@ -166,7 +177,7 @@ private function applySearch(Builder $query): Builder private function applyArchived(Builder $query): Builder { if ($this->archived != null) { - $query = $query->where('archived', $this->archived); + $query = $query->where('is_archived', $this->archived); } return $query; @@ -175,7 +186,7 @@ private function applyArchived(Builder $query): Builder private function applyLocked(Builder $query): Builder { if ($this->locked != null) { - $query = $query->where('locked', $this->locked); + $query = $query->where('is_locked', $this->locked); } return $query; diff --git a/app/Models/Enums/ReportStatus.php b/app/Models/Enums/ReportStatus.php index e345b0a..ffbfd41 100644 --- a/app/Models/Enums/ReportStatus.php +++ b/app/Models/Enums/ReportStatus.php @@ -5,8 +5,8 @@ enum ReportStatus: int { case Pending = 0; - case Opened = 1; - case Draft = 2; - case Finalized = 3; - case Signed = 4; + case Opened = 10; + case Draft = 20; + case Finalized = 30; + case Authorized = 90; } diff --git a/database/migrations/2024_12_27_060234_create_studies_table.php b/database/migrations/2024_12_27_060234_create_studies_table.php index fa27882..674cf88 100644 --- a/database/migrations/2024_12_27_060234_create_studies_table.php +++ b/database/migrations/2024_12_27_060234_create_studies_table.php @@ -2,9 +2,6 @@ use App\Models\Enums\ReportStatus; use App\Models\Enums\StudyLevelStatus; -use App\Models\Facility; -use App\Models\Institute; -use App\Models\User; use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -17,8 +14,8 @@ public function up(): void $table->id(); $table->string('orthanc_uuid')->unique(); $table->boolean('is_archived')->default(false); - $table->boolean('is_locked')->default(false); $table->unsignedTinyInteger('study_priority')->default(0); + $table->string('patient_id')->nullable(); $table->string('patient_uuid')->nullable()->index(); $table->string('patient_name'); @@ -37,12 +34,11 @@ public function up(): void $table->timestamp('study_date'); $table->timestamp('received_at'); $table->timestamp('assigned_at')->nullable(); + $table->timestamp('locked_at')->nullable(); $table->timestamp('reported_at')->nullable(); $table->timestamp('authorized_at')->nullable(); $table->timestamp('archived_at')->nullable(); - $table->foreignIdFor(Institute::class)->constrained()->cascadeOnDelete(); - $table->foreignIdFor(Facility::class)->nullable()->constrained()->cascadeOnDelete(); $table->unsignedTinyInteger('study_status')->default(StudyLevelStatus::Pending->value); $table->unsignedTinyInteger('report_status')->default(ReportStatus::Pending->value); @@ -50,9 +46,14 @@ public function up(): void $table->unsignedSmallInteger('series_count')->nullable(); $table->unsignedInteger('disk_size')->nullable(); - $table->foreignIdFor(User::class, 'assigned_physician_id')->nullable()->constrained()->nullOnDelete(); - $table->foreignIdFor(User::class, 'reading_physician_id')->nullable()->constrained()->nullOnDelete(); - $table->foreignIdFor(User::class, 'referring_provider_id')->nullable()->constrained()->nullOnDelete(); + $table->unsignedBigInteger('assigned_physician_id')->nullable(); + $table->unsignedBigInteger('locking_physician_id')->nullable(); + $table->unsignedBigInteger('reporting_physician_id')->nullable(); + $table->unsignedBigInteger('authorizing_physician_id')->nullable(); + $table->unsignedBigInteger('referring_doctor_id')->nullable(); + + $table->unsignedBigInteger('institute_id'); + $table->unsignedBigInteger('facility_id')->nullable(); $table->timestamps(); });