Fix OPD prescription autosave 500 on non-string payload values

This commit is contained in:
DevSoftTech Server 2026-07-10 01:07:27 +05:30
parent 5de65a73f1
commit 6767fce287

View File

@ -354,12 +354,13 @@ class Opd_prescription extends BaseController
public function opd_prescription_save() public function opd_prescription_save()
{ {
if (!$this->request->isAJAX()) { try {
return $this->response->setStatusCode(400)->setJSON([ if (!$this->request->isAJAX()) {
'update' => 0, return $this->response->setStatusCode(400)->setJSON([
'error_text' => 'Invalid request', 'update' => 0,
]); 'error_text' => 'Invalid request',
} ]);
}
if (!$this->db->tableExists('opd_prescription')) { if (!$this->db->tableExists('opd_prescription')) {
return $this->response->setJSON([ return $this->response->setJSON([
@ -628,7 +629,11 @@ class Opd_prescription extends BaseController
$abdmValidationErrors = $this->validateAbdmReadinessForConsult($payload, $patientRow, (array) $opdRow); $abdmValidationErrors = $this->validateAbdmReadinessForConsult($payload, $patientRow, (array) $opdRow);
foreach ($payload as $value) { foreach ($payload as $value) {
if (mb_strlen($value) > 4000) { if (is_array($value) || is_object($value)) {
continue;
}
if (mb_strlen((string) $value) > 4000) {
return $this->response->setJSON([ return $this->response->setJSON([
'update' => 0, 'update' => 0,
'error_text' => 'Each section allows up to 4000 characters.', 'error_text' => 'Each section allows up to 4000 characters.',
@ -722,16 +727,26 @@ class Opd_prescription extends BaseController
log_message('error', 'SNOMED coding queue insert failed: ' . $queueEx->getMessage()); log_message('error', 'SNOMED coding queue insert failed: ' . $queueEx->getMessage());
} }
return $this->response->setJSON([ return $this->response->setJSON([
'update' => 1, 'update' => 1,
'opd_session_id' => $recordId, 'opd_session_id' => $recordId,
'error_text' => 'Prescription saved', 'error_text' => 'Prescription saved',
'fhir_stored' => $fhirStored ? 1 : 0, 'fhir_stored' => $fhirStored ? 1 : 0,
'abdm_warnings' => $abdmValidationErrors, 'abdm_warnings' => $abdmValidationErrors,
'saved_at' => date('d-m-Y H:i:s'), 'saved_at' => date('d-m-Y H:i:s'),
'csrfName' => csrf_token(), 'csrfName' => csrf_token(),
'csrfHash' => csrf_hash(), 'csrfHash' => csrf_hash(),
]); ]);
} catch (\Throwable $e) {
log_message('error', 'opd_prescription_save failed: {message}', ['message' => $e->getMessage()]);
return $this->response->setStatusCode(500)->setJSON([
'update' => 0,
'error_text' => 'Unable to save prescription right now. Please retry.',
'csrfName' => csrf_token(),
'csrfHash' => csrf_hash(),
]);
}
} }
public function clinical_autotype() public function clinical_autotype()