diff --git a/app/Domain/Study/WorkflowLevel.php b/app/Domain/Study/WorkflowLevel.php index 4974cd6..51d56ef 100644 --- a/app/Domain/Study/WorkflowLevel.php +++ b/app/Domain/Study/WorkflowLevel.php @@ -18,7 +18,7 @@ enum WorkflowLevel: int case Archived = 200; case Cancelled = 240; - public function description(): string + public function describe(): string { return match ($this) { self::Received => 'Study Received', diff --git a/app/Http/Controllers/Staff/AssignmentController.php b/app/Http/Controllers/Staff/AssignmentController.php index 478aef8..8160055 100644 --- a/app/Http/Controllers/Staff/AssignmentController.php +++ b/app/Http/Controllers/Staff/AssignmentController.php @@ -44,7 +44,10 @@ public function remove(AssignPhysicianRequest $request) $study->assignedPhysicians()->detach($rad->id); if ($study->assignedPhysicians()->count() === 0) { - $study->update(['assigned_at' => null]); + $study->update([ + 'workflow_level' => WorkflowLevel::Unassigned->value, + 'assigned_at' => null, + ]); } audit() @@ -64,7 +67,10 @@ public function save(AssignPhysicianRequest $request) $rad = User::active()->findOrFail($request->input('rad_id')); $study->assignedPhysicians()->attach($rad->id); - $study->update(['assigned_at' => now()]); + $study->update([ + 'workflow_level' => WorkflowLevel::Assigned->value, + 'assigned_at' => now(), + ]); audit() ->did(Activity::Assign_Physician) ->on($study) diff --git a/app/Http/Controllers/Staff/DicomViewerController.php b/app/Http/Controllers/Staff/DicomViewerController.php index c459659..78c838c 100644 --- a/app/Http/Controllers/Staff/DicomViewerController.php +++ b/app/Http/Controllers/Staff/DicomViewerController.php @@ -2,13 +2,13 @@ namespace App\Http\Controllers\Staff; -use App\Http\Controllers\HashidControllerBase; +use App\Http\Controllers\HashedStudyControllerBase; use App\Models\Study; use App\Services\AuditTrail\Activity; use Closure; use Illuminate\Support\Str; -class DicomViewerController extends HashidControllerBase +class DicomViewerController extends HashedStudyControllerBase { public function stone() { @@ -22,8 +22,7 @@ public function ohif() private function loadViewer(Closure $callback) { - $this->decodeKeys(); - $study = Study::findOrFail($this->key); + $study = $this->getStudy(); $url = $callback($study); abort_if(blank($url), 404); $title = Str::limit($study->getPatientDemographic(), 40); diff --git a/app/Models/Study.php b/app/Models/Study.php index 16fa6bc..7aabc33 100644 --- a/app/Models/Study.php +++ b/app/Models/Study.php @@ -3,7 +3,6 @@ namespace App\Models; use App\Domain\ACL\Permission; -use App\Domain\Report\ReportStatus; use App\Domain\Study\Priority; use App\Domain\Study\WorkflowLevel; use App\Models\Traits\HasDepartment; @@ -178,23 +177,24 @@ public function isArchived(): bool public function getWorkflowLevelLedAttribute(): string { $icon = match ($this->workflow_level) { - WorkflowLevel::Received, WorkflowLevel::Unassigned => 'folder-arrow-down', - WorkflowLevel::Assigned => 'identification', - WorkflowLevel::Dictated => 'speaker-wave', - WorkflowLevel::Transcribed => 'chat-bubble-left-ellipsis', - WorkflowLevel::Repetition => 'receipt-refund', - WorkflowLevel::ReadInProgress => 'wrench-screwdriver', - WorkflowLevel::DraftAvailable => 'inbox-arrow-down', - WorkflowLevel::Finalized => 'clipboard-document-check', - WorkflowLevel::UnderReview => 'eye', - WorkflowLevel::Published => 'shield-check', - WorkflowLevel::Archived => 'archive-box', - WorkflowLevel::Cancelled => 'archive-box-x-mark', - + WorkflowLevel::Received, WorkflowLevel::Unassigned => 'download-2-line', + WorkflowLevel::Assigned => 'pass-valid-line', + WorkflowLevel::Dictated => 'speak-line', + WorkflowLevel::Transcribed => 'message-2-line', + WorkflowLevel::Repetition => 'repeat-line', + WorkflowLevel::ReadInProgress => 'line-chart-line', + WorkflowLevel::DraftAvailable => 'draft-line', + WorkflowLevel::Finalized => 'git-repository-private-line', + WorkflowLevel::UnderReview => 'eye-line', + WorkflowLevel::Published => 'graduation-cap-line', + WorkflowLevel::Archived => 'archive-line', + WorkflowLevel::Cancelled => 'close-circle-line', default => 'cog-6-tooth', }; - return sprintf('', $color, $icon); + $descr = $this->workflow_level->describe(); + + return sprintf('', $descr, $descr, $icon); } public function getArchiveLink(): ?string @@ -369,14 +369,14 @@ public function isUnlocked(): bool return $this->locked_at === null; } - public function lockStudy(User|int|null $user = null, ?WorkflowLevel $status = null): void + public function lockStudy(User|int|null $user = null, ?WorkflowLevel $level = null): void { $params = [ 'locking_physician_id' => me($user)->id, 'locked_at' => now(), ]; - if ($status) { - $params['workflow_level'] = $status->value; + if ($level !== null) { + $params['workflow_level'] = $level->value; } $this->update($params); diff --git a/app/Services/Report/ReportManager.php b/app/Services/Report/ReportManager.php index 82179a6..dacb743 100644 --- a/app/Services/Report/ReportManager.php +++ b/app/Services/Report/ReportManager.php @@ -112,7 +112,7 @@ public function check(): ?View public function lockStudyIfRequired(): void { if ($this->study->isUnlocked()) { - $this->study->lockStudy(); + $this->study->lockStudy(level: WorkflowLevel::ReadInProgress); audit() ->on($this->study) ->did(Activity::Study_Lock)