Add consultation-nested assessment create and show routes.
Deploy Ladill Care / deploy (push) Successful in 32s
Deploy Ladill Care / deploy (push) Successful in 32s
Index alone still left /consultations/{uuid}/assessments/create and
/consultations/{uuid}/assessments/{uuid} unmatched (404). Wire those
paths, redirect store into the nested show, and cover the doctor form
open flow with feature tests.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user