Fix Orgcase table 500 and prevent duplicate DataTable init

This commit is contained in:
DevSoftTech Server 2026-07-10 00:34:49 +05:30
parent fb696863d4
commit 60d708c7b8
2 changed files with 85 additions and 25 deletions

View File

@ -823,7 +823,22 @@ class CaseMaster extends BaseController
public function getCaseTable() public function getCaseTable()
{ {
$requestData = $_REQUEST; $requestData = $this->request->getPost();
if (empty($requestData)) {
$requestData = $this->request->getGet();
}
$columnsInput = $requestData['columns'] ?? [];
$orderInput = $requestData['order'][0] ?? [];
$draw = (int) ($requestData['draw'] ?? 0);
$start = max(0, (int) ($requestData['start'] ?? 0));
$length = (int) ($requestData['length'] ?? 10);
if ($length <= 0) {
$length = 10;
}
if ($length > 500) {
$length = 500;
}
$columns = [ $columns = [
0 => 'case_id_code', 0 => 'case_id_code',
@ -842,7 +857,16 @@ class CaseMaster extends BaseController
Date_Format(c.date_registration,'%d-%m-%Y') as date_registration_in ,i.ipd_code "; Date_Format(c.date_registration,'%d-%m-%Y') as date_registration_in ,i.ipd_code ";
$sqlCount = 'Select count(*) as no_rec '; $sqlCount = 'Select count(*) as no_rec ';
$sqlFrom = ' from ((organization_case_master c join patient_master p on c.p_id=p.id ) left join ipd_master i on c.id=i.case_id and p.id=i.p_id) '; $sqlFrom = " from (organization_case_master c join patient_master p on c.p_id=p.id)
left join (
select i1.id, i1.case_id, i1.p_id, i1.ipd_code
from ipd_master i1
inner join (
select case_id, p_id, max(id) as max_id
from ipd_master
group by case_id, p_id
) i2 on i1.id = i2.max_id
) i on c.id=i.case_id and p.id=i.p_id ";
$totalSql = $sqlCount . $sqlFrom; $totalSql = $sqlCount . $sqlFrom;
$totalData = (int) ($this->db->query($totalSql)->getResult()[0]->no_rec ?? 0); $totalData = (int) ($this->db->query($totalSql)->getResult()[0]->no_rec ?? 0);
@ -850,51 +874,82 @@ class CaseMaster extends BaseController
$sqlWhere = ' WHERE c.case_type=0 '; $sqlWhere = ' WHERE c.case_type=0 ';
if (! empty($requestData['columns'][0]['search']['value'])) { $caseCodeSearch = trim((string) ($columnsInput[0]['search']['value'] ?? ''));
$sqlWhere .= " AND case_id_code LIKE '%" . $requestData['columns'][0]['search']['value'] . "' "; if ($caseCodeSearch !== '') {
$safe = $this->db->escapeLikeString($caseCodeSearch);
$sqlWhere .= " AND case_id_code LIKE '%" . $safe . "%' ";
} }
if (! empty($requestData['columns'][1]['search']['value'])) { $patientSearch = trim((string) ($columnsInput[1]['search']['value'] ?? ''));
$term = $requestData['columns'][1]['search']['value']; if ($patientSearch !== '') {
$sqlWhere .= " AND ( p.p_fname LIKE '%" . $term . "%' "; $safeLike = $this->db->escapeLikeString($patientSearch);
$sqlWhere .= " OR p.mphone1 LIKE '" . $term . "' "; $safeExact = $this->db->escape($patientSearch);
$sqlWhere .= " OR i.ipd_code LIKE '%" . $term . "' "; $sqlWhere .= " AND ( p.p_fname LIKE '%" . $safeLike . "%' ";
$sqlWhere .= " OR p_code LIKE '%" . $term . "%' )"; $sqlWhere .= " OR p.mphone1 = " . $safeExact . " ";
$sqlWhere .= " OR i.ipd_code LIKE '%" . $safeLike . "%' ";
$sqlWhere .= " OR p_code LIKE '%" . $safeLike . "%' )";
} }
if (! empty($requestData['columns'][2]['search']['value'])) { $cardNameSearch = trim((string) ($columnsInput[2]['search']['value'] ?? ''));
$sqlWhere .= " AND c.insurance_card_name LIKE '%" . $requestData['columns'][2]['search']['value'] . "%' "; if ($cardNameSearch !== '') {
$safe = $this->db->escapeLikeString($cardNameSearch);
$sqlWhere .= " AND c.insurance_card_name LIKE '%" . $safe . "%' ";
} }
if (! empty($requestData['columns'][3]['search']['value'])) { $insuranceFilter = (int) ($columnsInput[3]['search']['value'] ?? 0);
if ($requestData['columns'][3]['search']['value'] < 0) { if ($insuranceFilter !== 0) {
if ($insuranceFilter < 0) {
$sqlWhere .= ' AND c.insurance_id not in (1,2,53,63) '; $sqlWhere .= ' AND c.insurance_id not in (1,2,53,63) ';
} }
if ($requestData['columns'][3]['search']['value'] > 0) { if ($insuranceFilter > 0) {
$sqlWhere .= " AND c.insurance_id = '" . $requestData['columns'][3]['search']['value'] . "' "; $sqlWhere .= " AND c.insurance_id = " . $insuranceFilter . " ";
} }
} }
if (! empty($requestData['columns'][4]['search']['value'])) { $regNoSearch = trim((string) ($columnsInput[4]['search']['value'] ?? ''));
$sqlWhere .= " AND ( c.insurance_no LIKE '" . $requestData['columns'][4]['search']['value'] . "%' "; if ($regNoSearch !== '') {
$sqlWhere .= " OR c.insurance_no_1 LIKE '" . $requestData['columns'][4]['search']['value'] . "%' ) "; $safe = $this->db->escapeLikeString($regNoSearch);
$sqlWhere .= " AND ( c.insurance_no LIKE '" . $safe . "%' ";
$sqlWhere .= " OR c.insurance_no_1 LIKE '" . $safe . "%' ) ";
} }
if (! empty($requestData['columns'][5]['search']['value'])) { $statusFilter = (int) ($columnsInput[5]['search']['value'] ?? 0);
$sqlWhere .= " AND c.status = '" . $requestData['columns'][5]['search']['value'] . "' "; if ($statusFilter >= 0) {
$sqlWhere .= " AND c.status = " . $statusFilter . " ";
} }
$totalFilterSql = $sqlCount . $sqlFrom . $sqlWhere; $totalFilterSql = $sqlCount . $sqlFrom . $sqlWhere;
$totalFiltered = (int) ($this->db->query($totalFilterSql)->getResult()[0]->no_rec ?? 0); $totalFiltered = (int) ($this->db->query($totalFilterSql)->getResult()[0]->no_rec ?? 0);
$orderSql = ' group by c.id ORDER BY ' . $columns[$requestData['order'][0]['column']] . ' ' . $requestData['order'][0]['dir'] $orderColumnIndex = (int) ($orderInput['column'] ?? 0);
. ' LIMIT ' . $requestData['start'] . ' ,' . $requestData['length']; if (! array_key_exists($orderColumnIndex, $columns)) {
$orderColumnIndex = 0;
}
$orderDir = strtolower((string) ($orderInput['dir'] ?? 'desc'));
if (! in_array($orderDir, ['asc', 'desc'], true)) {
$orderDir = 'desc';
}
$orderSql = ' ORDER BY ' . $columns[$orderColumnIndex] . ' ' . $orderDir
. ' LIMIT ' . $start . ' ,' . $length;
$resultSql = $sqlAll . $sqlFrom . $sqlWhere . $orderSql; $resultSql = $sqlAll . $sqlFrom . $sqlWhere . $orderSql;
$rdata = $this->db->query($resultSql)->getResultArray(); try {
$rdata = $this->db->query($resultSql)->getResultArray();
} catch (\Throwable $e) {
log_message('error', 'Orgcase/getCaseTable failed: {message}', ['message' => $e->getMessage()]);
return $this->response->setStatusCode(500)->setJSON([
'draw' => $draw,
'recordsTotal' => 0,
'recordsFiltered' => 0,
'data' => [],
'error' => 'Unable to load case list',
]);
}
$output = [ $output = [
'draw' => (int) $requestData['draw'], 'draw' => $draw,
'recordsTotal' => $totalData, 'recordsTotal' => $totalData,
'recordsFiltered' => $totalFiltered, 'recordsFiltered' => $totalFiltered,
'data' => [], 'data' => [],

View File

@ -103,6 +103,11 @@
return; return;
} }
if ($table.data('case-list-init') === 1) {
return;
}
$table.data('case-list-init', 1);
if ($.fn.DataTable.isDataTable($table)) { if ($.fn.DataTable.isDataTable($table)) {
$table.DataTable().destroy(); $table.DataTable().destroy();
} }