diff --git a/app/Http/Controllers/Staff/ReportController.php b/app/Http/Controllers/Staff/ReportController.php new file mode 100644 index 0000000..878f023 --- /dev/null +++ b/app/Http/Controllers/Staff/ReportController.php @@ -0,0 +1,23 @@ +may([Permission::ReportEdit, Permission::ReportDictate, Permission::ReportDownload]), 403); + $this->decodeKeys(); + $study = Study::with('reports')->findOrFail($this->key); + if (me()->isRadiologist()) { + abort_unless($study->isAssignedTo(), 403); + } + $reports = $study->reports->sortByDesc('created_at'); + + return view('staff.reports.popup', compact('study', 'reports')); + } +} diff --git a/app/Models/Study.php b/app/Models/Study.php index 430961b..508bd4b 100644 --- a/app/Models/Study.php +++ b/app/Models/Study.php @@ -9,6 +9,7 @@ use App\Models\Traits\HashableId; use App\Services\Pacs\PacsUrlGen; use Carbon\Carbon; +use Illuminate\Database\Eloquent\Concerns\HasTimestamps; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasOne; @@ -20,6 +21,7 @@ class Study extends BaseModel implements HasMedia { use HashableId; + use HasTimestamps; use InteractsWithMedia; public const string MEDIA_COLLECTION = 'attachments'; @@ -312,6 +314,7 @@ public function unlockStudy(): void { $this->update( [ + 'locking_physician_id' => null, 'locked_at' => null, ] ); diff --git a/app/Models/User.php b/app/Models/User.php index e655f8b..9d5ccdf 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -90,6 +90,14 @@ public function isAdmin(): bool ); } + public function isRadiologist(): bool + { + return cache()->remember('user.is_rad:' . $this->id, + 5 * 60, + fn () => $this->hasRole(Role::Radiologist) + ); + } + public function isTech(): bool { return cache()->remember('user.is_tech:' . $this->id, diff --git a/resources/views/staff/reports/popup.blade.php b/resources/views/staff/reports/popup.blade.php new file mode 100644 index 0000000..e69de29