diff --git a/app/Http/Controllers/Care/AssessmentController.php b/app/Http/Controllers/Care/AssessmentController.php index bcad35d..a901da9 100644 --- a/app/Http/Controllers/Care/AssessmentController.php +++ b/app/Http/Controllers/Care/AssessmentController.php @@ -75,6 +75,42 @@ class AssessmentController extends Controller return $this->index($request, $consultation->patient); } + /** + * Start-form picker under a consultation (parity with prescriptions create). + * GET /consultations/{uuid}/assessments/create + */ + public function createForConsultation(Request $request, Consultation $consultation): View + { + $this->authorizeConsultation($request, $consultation); + $consultation->loadMissing(['patient', 'visit']); + + $return = app(ConsultationReturnContext::class); + $return->remember($consultation); + $request->query->set('consultation_uuid', $consultation->uuid); + if ($consultation->visit?->uuid) { + $request->query->set('visit_uuid', $consultation->visit->uuid); + } + $request->query->set(ConsultationReturnContext::QUERY_KEY, $consultation->uuid); + + return $this->create($request, $consultation->patient); + } + + /** + * Open an assessment while staying on the consultation URL tree. + * GET /consultations/{uuid}/assessments/{assessment} + */ + public function showForConsultation(Request $request, Consultation $consultation, Assessment $assessment): View + { + $this->authorizeConsultation($request, $consultation); + abort_unless((int) $assessment->patient_id === (int) $consultation->patient_id, 404); + + $return = app(ConsultationReturnContext::class); + $return->remember($consultation); + $request->query->set(ConsultationReturnContext::QUERY_KEY, $consultation->uuid); + + return $this->show($request, $assessment); + } + public function create(Request $request, Patient $patient): View { $this->assertEngineEnabled($request); @@ -99,15 +135,19 @@ class AssessmentController extends Controller } })->values(); + $returnConsultation = app(ConsultationReturnContext::class) + ->resolve($request, (int) $patient->id); + $returnConsultation?->loadMissing('visit'); + return view('care.assessments.create', [ 'patient' => $patient, 'templates' => $capturable, 'categories' => config('care.assessment_template_categories'), - 'consultationUuid' => $request->query('consultation_uuid'), - 'visitUuid' => $request->query('visit_uuid'), + 'consultationUuid' => $request->query('consultation_uuid') ?? $returnConsultation?->uuid, + 'visitUuid' => $request->query('visit_uuid') ?? $returnConsultation?->visit?->uuid, + 'returnConsultation' => $returnConsultation, ]); } - public function store(Request $request, Patient $patient): RedirectResponse { $this->assertEngineEnabled($request); @@ -130,6 +170,16 @@ class AssessmentController extends Controller ); $return = app(ConsultationReturnContext::class); + if (! empty($context['consultation'])) { + $return->remember($context['consultation']); + + return redirect() + ->route('care.consultations.assessments.show', [ + 'consultation' => $context['consultation'], + 'assessment' => $assessment, + ]) + ->with('success', 'Assessment started.'); + } return redirect() ->route('care.assessments.show', array_filter([ @@ -168,10 +218,10 @@ class AssessmentController extends Controller $return->remember($consultation); return redirect() - ->route('care.assessments.show', array_filter([ + ->route('care.consultations.assessments.show', [ + 'consultation' => $consultation, 'assessment' => $assessment, - ...$return->query($consultation), - ])) + ]) ->with('success', 'Assessment started.'); } @@ -240,11 +290,7 @@ class AssessmentController extends Controller $return = app(ConsultationReturnContext::class); - return redirect() - ->route('care.assessments.show', array_filter([ - 'assessment' => $assessment, - ...$return->routeQuery($request), - ])) + return $this->redirectToAssessmentShow($request, $assessment, $return) ->with('success', 'Assessment saved.'); } @@ -280,11 +326,7 @@ class AssessmentController extends Controller $return = app(ConsultationReturnContext::class); - return redirect() - ->route('care.assessments.show', array_filter([ - 'assessment' => $assessment, - ...$return->routeQuery($request), - ])) + return $this->redirectToAssessmentShow($request, $assessment, $return) ->with('success', 'Assessment completed.'); } @@ -301,11 +343,41 @@ class AssessmentController extends Controller $this->ownerRef($request), ); + $return = app(ConsultationReturnContext::class); + $consultation = $return->resolve($request, (int) $assessment->patient_id); + + if ($consultation) { + return redirect() + ->route('care.consultations.assessments.index', $consultation) + ->with('success', 'Assessment cancelled.'); + } + return redirect() ->route('care.assessments.index', $assessment->patient) ->with('success', 'Assessment cancelled.'); } + /** + * Prefer consultation-nested show when the doctor is mid-consult. + */ + protected function redirectToAssessmentShow( + Request $request, + Assessment $assessment, + ConsultationReturnContext $return, + ): RedirectResponse { + $consultation = $return->resolve($request, (int) $assessment->patient_id) + ?? $return->resolveLinked($request, $assessment->consultation); + + if ($consultation) { + return redirect()->route('care.consultations.assessments.show', [ + 'consultation' => $consultation, + 'assessment' => $assessment, + ]); + } + + return redirect()->route('care.assessments.show', $assessment); + } + /** * FHIR R4 Bundle (Questionnaire + QuestionnaireResponse) download. */ diff --git a/resources/views/care/assessments/create.blade.php b/resources/views/care/assessments/create.blade.php index fb58420..70086cc 100644 --- a/resources/views/care/assessments/create.blade.php +++ b/resources/views/care/assessments/create.blade.php @@ -1,4 +1,6 @@ + +

Start assessment

{{ $patient->fullName() }}

@@ -11,7 +13,9 @@ @if ($templates->isEmpty())

No forms are available for your role right now. Ask an administrator to confirm clinical forms are enabled in Settings.

@else -
+ @csrf @if ($consultationUuid) @@ -19,6 +23,9 @@ @if ($visitUuid) @endif + @if (($returnConsultation ?? null)?->uuid) + + @endif
@@ -38,7 +45,9 @@
- Cancel + Cancel
@endif diff --git a/resources/views/care/assessments/index.blade.php b/resources/views/care/assessments/index.blade.php index 3498766..a5effd8 100644 --- a/resources/views/care/assessments/index.blade.php +++ b/resources/views/care/assessments/index.blade.php @@ -10,7 +10,11 @@

@if ($canCapture) - Start assessment + @if ($returnConsultation ?? null) + Start assessment + @else + Start assessment + @endif @endif
@@ -53,7 +57,11 @@ {{ $assessment->assessed_at?->format('d M Y H:i') ?? $assessment->created_at?->format('d M Y H:i') ?? '—' }} - Open + @if ($returnConsultation ?? null) + Open + @else + Open + @endif @empty diff --git a/resources/views/care/assessments/show.blade.php b/resources/views/care/assessments/show.blade.php index 77047cc..666eb94 100644 --- a/resources/views/care/assessments/show.blade.php +++ b/resources/views/care/assessments/show.blade.php @@ -17,7 +17,9 @@ diff --git a/resources/views/care/consultations/show.blade.php b/resources/views/care/consultations/show.blade.php index ba470f5..6f0fe3a 100644 --- a/resources/views/care/consultations/show.blade.php +++ b/resources/views/care/consultations/show.blade.php @@ -57,7 +57,7 @@

@if ($universalAssessment) - + {{ $universalAssessment->isDraft() ? 'Continue form' : 'View form' }} @elseif (($canCaptureUniversal ?? false) && ! $isCompleted) @@ -145,7 +145,7 @@ Form not available yet @elseif ($instrument['assessment']) {{ $assessmentStatuses[$instrument['assessment']->status] ?? $instrument['assessment']->status }} - + {{ $instrument['assessment']->isDraft() ? 'Continue' : 'View' }} @elseif (($canCaptureAssessment ?? false) && ! $isCompleted) @@ -209,7 +209,7 @@