From ba705bb98b5584f550307f28c81cc002ec27d34e Mon Sep 17 00:00:00 2001 From: Dr Masroor Ehsan Date: Wed, 29 Jan 2025 21:47:50 +0600 Subject: [PATCH] removed report_status --- app/DAL/Studies/WorklistBase.php | 21 +----------- app/DataTables/WorklistDataTable.php | 6 ++-- app/Domain/Report/ReportStatus.php | 14 -------- app/Domain/Study/WorkflowLevel.php | 32 +++++++++++-------- .../Controllers/Staff/MetadataController.php | 6 ++-- .../Controllers/Staff/ReportController.php | 8 ++--- app/Http/Requests/StoreReportRequest.php | 4 +-- app/Models/Study.php | 11 +++---- app/Models/StudyReport.php | 17 +++++----- app/Services/ACL/RoleService.php | 14 ++++---- app/Services/Report/ReportManager.php | 12 +++---- .../views/staff/reports/create.blade.php | 4 +-- 12 files changed, 59 insertions(+), 90 deletions(-) delete mode 100644 app/Domain/Report/ReportStatus.php diff --git a/app/DAL/Studies/WorklistBase.php b/app/DAL/Studies/WorklistBase.php index 705b05e..d6cefd4 100644 --- a/app/DAL/Studies/WorklistBase.php +++ b/app/DAL/Studies/WorklistBase.php @@ -2,7 +2,6 @@ namespace App\DAL\Studies; -use App\Domain\Report\ReportStatus; use App\Domain\Study\WorkflowLevel; use App\Models\Study; use Carbon\Carbon; @@ -21,8 +20,6 @@ abstract class WorklistBase implements IUserStudyLister private ?WorkflowLevel $workflowLevel = null; - private ?ReportStatus $reportStatus = null; - private ?bool $locked = null; private ?bool $archived = null; @@ -41,7 +38,7 @@ abstract class WorklistBase implements IUserStudyLister protected static function reportCompleteQuery(Builder $query): Builder { - return $query->where('report_status', '=', ReportStatus::Approved->value); + return $query->where('workflow_level', '=', WorkflowLevel::Published->value); } public function setRadiologist(int $radiologist_id): self @@ -58,13 +55,6 @@ public function setWorkflowLevel(WorkflowLevel $status): self return $this; } - public function setReportStatus(ReportStatus $status): self - { - $this->reportStatus = $status; - - return $this; - } - public function query(?int $user_id = null): Builder { $query = $this->buildQuery($user_id); @@ -236,15 +226,6 @@ private function applyWorkflowLevel(Builder $query): Builder return $query; } - private function applyReportStatus(Builder $query): Builder - { - if ($this->reportStatus != null) { - $query = $query->where('report_status', '=', $this->reportStatus->value); - } - - return $query; - } - private function getPageSize(?int $user_id = null): int { return $this->perPage ?? user_per_page($user_id); diff --git a/app/DataTables/WorklistDataTable.php b/app/DataTables/WorklistDataTable.php index 21f6b34..022c925 100644 --- a/app/DataTables/WorklistDataTable.php +++ b/app/DataTables/WorklistDataTable.php @@ -3,7 +3,7 @@ namespace App\DataTables; use App\DAL\Studies\WorklistFactory; -use App\Domain\Report\ReportStatus; +use App\Domain\Study\WorkflowLevel; use App\Models\Study; use App\Services\ACL\WorklistButton; use App\Services\ACL\WorklistColumn; @@ -330,10 +330,10 @@ private function filterStatus(QueryBuilder $query, ?string $status): void switch ($status) { case 'unread': - $query->where('report_status', '<', ReportStatus::Finalized->value); + $query->where('workflow_level', '<', WorkflowLevel::Finalized->value); break; case 'read': - $query->where('report_status', '>=', ReportStatus::Finalized->value); + $query->where('workflow_level', '>=', WorkflowLevel::Finalized->value); break; case 'progress': $query->whereNotNull('locked_at'); diff --git a/app/Domain/Report/ReportStatus.php b/app/Domain/Report/ReportStatus.php deleted file mode 100644 index 493b3b0..0000000 --- a/app/Domain/Report/ReportStatus.php +++ /dev/null @@ -1,14 +0,0 @@ - 'Study Received', self::Unassigned => 'Unassigned', self::Assigned => 'Assigned', + self::Dictated => 'Dictated', + self::Transcribed => 'Transcribed', self::Repetition => 'Repetition', self::ReadInProgress => 'Read In Progress', - self::DraftAvailable => 'Draft Available', - self::Finalized => 'Finalized', + self::DraftAvailable => 'Draft interpretation available', + self::Finalized => 'Repoort finalized', self::UnderReview => 'Under Review', - self::Published => 'Published', - self::Archived => 'Archived', + self::Published => 'Report published', + self::Archived => 'Study archived', self::Cancelled => 'Cancelled', }; } diff --git a/app/Http/Controllers/Staff/MetadataController.php b/app/Http/Controllers/Staff/MetadataController.php index 86b36bd..62d4bf3 100644 --- a/app/Http/Controllers/Staff/MetadataController.php +++ b/app/Http/Controllers/Staff/MetadataController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers\Staff; use App\Domain\ACL\Permission; -use App\Domain\Report\ReportStatus; +use App\Domain\Study\WorkflowLevel; use App\Http\Controllers\HashedStudyControllerBase; use App\Http\Requests\StudyMetadataUpdateRequest; use App\Models\Study; @@ -32,7 +32,7 @@ public function edit() public function save(StudyMetadataUpdateRequest $request) { - abort_unless(auth()->user()->may(Permission::StudyMetadataEdit), 403); + abort_unless(may(Permission::StudyMetadataEdit), 403); $study = $this->getStudy(); if ($study->isReportReady()) { return $this->lockedNotice(); @@ -43,7 +43,7 @@ public function save(StudyMetadataUpdateRequest $request) $payload['patient_sex'] = strtoupper($payload['patient_sex']); if ($request->has('cancel_read')) { // lock the study if report is not needed - $payload['report_status'] = ReportStatus::Cancelled->value; + $payload['workflow_level'] = WorkflowLevel::Cancelled->value; $payload['locked_at'] = now(); unset($payload['cancel_read']); } diff --git a/app/Http/Controllers/Staff/ReportController.php b/app/Http/Controllers/Staff/ReportController.php index 0527bd6..3bedbfd 100644 --- a/app/Http/Controllers/Staff/ReportController.php +++ b/app/Http/Controllers/Staff/ReportController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers\Staff; -use App\Domain\Report\ReportStatus; +use App\Domain\Study\WorkflowLevel; use App\Http\Controllers\HashidControllerBase; use App\Http\Requests\StoreReportRequest; use App\Models\Study; @@ -39,10 +39,10 @@ public function save(StoreReportRequest $request) ReportManager::ensureEditAccess(); $this->decodeKeys(); $manager = ReportManager::make($this->key); - $reportStatus = ReportStatus::from($request->integer('report_status')); - $report = $manager->createReport(request('content'), $reportStatus); + $workflow_level = WorkflowLevel::from($request->integer('report_status')); + $report = $manager->createReport(request('content'), $workflow_level); - if ($reportStatus->value === ReportStatus::Finalized->value) { + if ($workflow_level->value === WorkflowLevel::Finalized->value) { $manager->finalizeReport($report); } diff --git a/app/Http/Requests/StoreReportRequest.php b/app/Http/Requests/StoreReportRequest.php index a9a82bc..c3c2c09 100644 --- a/app/Http/Requests/StoreReportRequest.php +++ b/app/Http/Requests/StoreReportRequest.php @@ -2,7 +2,7 @@ namespace App\Http\Requests; -use App\Domain\Report\ReportStatus; +use App\Domain\Study\WorkflowLevel; use App\Models\Study; use App\Rules\ExistsByHash; use Illuminate\Foundation\Http\FormRequest; @@ -22,7 +22,7 @@ public function rules(): array 'content' => 'required', 'report_status' => [ 'required', - Rule::enum(ReportStatus::class)->only([ReportStatus::Preliminary, ReportStatus::Finalized, ReportStatus::Approved]), + Rule::enum(WorkflowLevel::class)->only([WorkflowLevel::DraftAvailable, WorkflowLevel::Finalized, WorkflowLevel::Published]), ], ]; } diff --git a/app/Models/Study.php b/app/Models/Study.php index 267eec1..7d0d6f6 100644 --- a/app/Models/Study.php +++ b/app/Models/Study.php @@ -457,18 +457,18 @@ public function canObtainLock(User|int|null $user = null): bool return $this->isUnlocked() || $this->isLockedBy($user); } - public function setReportStatus(ReportStatus $status, User|int|null $user = null): void + public function setReportWorkflowLevel(WorkflowLevel $level, User|int|null $user = null): void { $user_id = me($user)->id; - $params = ['report_status' => $status->value]; + $params = ['workflow_level' => $level->value]; - switch ($status) { - case ReportStatus::Finalized: + switch ($level) { + case WorkflowLevel::Finalized: $params['reading_physician_id'] = $user_id; $params['read_at'] = now(); break; - case ReportStatus::Approved: + case WorkflowLevel::Published: if ($this->reading_physician_id === null) { $params['reading_physician_id'] = $user_id; $params['read_at'] = now(); @@ -532,7 +532,6 @@ protected function casts(): array { return [ 'workflow_level' => WorkflowLevel::class, - 'report_status' => ReportStatus::class, 'priority' => Priority::class, 'archived_at' => 'immutable_datetime', 'approved_at' => 'immutable_datetime', diff --git a/app/Models/StudyReport.php b/app/Models/StudyReport.php index 988e9c7..bdf5e42 100644 --- a/app/Models/StudyReport.php +++ b/app/Models/StudyReport.php @@ -3,7 +3,6 @@ namespace App\Models; use App\Domain\Report\ExportFormat; -use App\Domain\Report\ReportStatus; use App\Domain\Study\WorkflowLevel; use App\Services\Report\ReportStorage; use Illuminate\Database\Eloquent\Builder; @@ -44,19 +43,19 @@ public function scopeForStudy(Builder $query, Study|int $study): Builder return $query; } - public function setStatus(ReportStatus $status, User|int|null $user = null): void + public function setWorkflowLevel(WorkflowLevel $level, User|int|null $user = null): void { $user_id = me($user)->id; - $params = ['report_status' => $status->value]; - switch ($status) { - case ReportStatus::Dictated: + $params = ['workflow_level' => $level->value]; + switch ($level) { + case WorkflowLevel::Dictated: $params['dictated_by_id'] = $user_id; break; - case ReportStatus::Preliminary: - case ReportStatus::Finalized: + case WorkflowLevel::DraftAvailable: + case WorkflowLevel::Finalized: $params['read_by_id'] = $user_id; break; - case ReportStatus::Approved: + case WorkflowLevel::Published: $params['approved_by_id'] = $user_id; break; } @@ -138,7 +137,7 @@ public function isFinalized(): bool protected function casts(): array { return [ - 'report_status' => ReportStatus::class, + 'workflow_level' => WorkflowLevel::class, ]; } } diff --git a/app/Services/ACL/RoleService.php b/app/Services/ACL/RoleService.php index be151fe..256ef41 100644 --- a/app/Services/ACL/RoleService.php +++ b/app/Services/ACL/RoleService.php @@ -9,13 +9,6 @@ final class RoleService { private static array $roles = []; - private static function initCache(): void - { - if (empty(self::$roles)) { - self::$roles = SpatieRole::pluck('id', 'name')->toArray(); - } - } - public static function select(): array { // self::initCache(); @@ -25,4 +18,11 @@ public static function select(): array ->mapWithKeys(fn (Role $r) => [$r->value => $r->name]) ->toArray(); } + + private static function initCache(): void + { + if (empty(self::$roles)) { + self::$roles = SpatieRole::pluck('id', 'name')->toArray(); + } + } } diff --git a/app/Services/Report/ReportManager.php b/app/Services/Report/ReportManager.php index 5826a08..82179a6 100644 --- a/app/Services/Report/ReportManager.php +++ b/app/Services/Report/ReportManager.php @@ -3,7 +3,7 @@ namespace App\Services\Report; use App\Domain\ACL\Permission; -use App\Domain\Report\ReportStatus; +use App\Domain\Study\WorkflowLevel; use App\Models\Study; use App\Models\StudyReport; use App\Services\AuditTrail\Activity; @@ -41,13 +41,13 @@ public function getReports(): Collection return $this->study->reports->sortByDesc('created_at'); } - public function createReport(string $content, ReportStatus $status): StudyReport + public function createReport(string $content, WorkflowLevel $level): StudyReport { $report = StudyReport::make([ 'study_id' => $this->study->id, 'organization_id' => $this->study->organization_id, 'department_id' => $this->study->department_id, - 'report_status' => $status->value, + 'workflow_level' => $level->value, 'read_by_id' => me()->id, ]); $report->saveContent($content); @@ -65,14 +65,14 @@ public function createReport(string $content, ReportStatus $status): StudyReport public function finalizeReport(StudyReport $report): void { - $report->setStatus(ReportStatus::Finalized); + $report->setWorkflowLevel(WorkflowLevel::Finalized); audit() ->on($this->study) ->did(Activity::Report_Finalize) ->notes($report->accession_number) ->log(); - $this->study->setReportStatus(ReportStatus::Finalized); + $this->study->setReportWorkflowLevel(WorkflowLevel::Finalized); audit() ->on($this->study) @@ -123,7 +123,7 @@ public function lockStudyIfRequired(): void public function latestReport(): ?StudyReport { return StudyReport::forStudy($this->study) - ->where('report_status', ReportStatus::Preliminary->value) + ->where('workflow_level', WorkflowLevel::DraftAvailable->value) ->select(['id', 'accession_number', 'file_path']) ->latest() ->first(); diff --git a/resources/views/staff/reports/create.blade.php b/resources/views/staff/reports/create.blade.php index 902a11e..91325fe 100644 --- a/resources/views/staff/reports/create.blade.php +++ b/resources/views/staff/reports/create.blade.php @@ -52,7 +52,7 @@ class="ck-editor editor-container editor-container_classic-editor fixed-containe