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 No forms are available for your role right now. Ask an administrator to confirm clinical forms are enabled in Settings.{{ $patient->fullName() }}
@@ -11,7 +13,9 @@
@if ($templates->isEmpty())
- 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 @@