fix(diagnosis): resolve person name null concat in report list and handle large dicom file uploads
This commit is contained in:
parent
140c4908ee
commit
1f4fcf6546
|
|
@ -111,7 +111,7 @@ class Diagnosis extends BaseController
|
||||||
if (trim($searchText) == '') {
|
if (trim($searchText) == '') {
|
||||||
// Get recent 200 records
|
// Get recent 200 records
|
||||||
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
||||||
CONCAT(p.p_fname, '/', IF(p.gender=1,'M','F'), '/', p.p_rname) as inv_name,
|
COALESCE(NULLIF(CONCAT_WS('/', NULLIF(TRIM(p.p_fname), ''), IF(p.gender=1,'M',IF(p.gender=2,'F',NULL)), NULLIF(TRIM(CONCAT_WS(' ', p.p_relative, p.p_rname)), '')), ''), NULLIF(TRIM(m.inv_name), ''), NULLIF(TRIM(p.p_fname), ''), '-') as inv_name,
|
||||||
p.dob, p.age, p.age_in_month, p.estimate_dob,
|
p.dob, p.age, p.age_in_month, p.estimate_dob,
|
||||||
GROUP_CONCAT(CONCAT_WS(';', i.item_name, i.item_name, i.id,
|
GROUP_CONCAT(CONCAT_WS(';', i.item_name, i.item_name, i.id,
|
||||||
check_item_request(m.id, i.id)) SEPARATOR '#') as data_array,
|
check_item_request(m.id, i.id)) SEPARATOR '#') as data_array,
|
||||||
|
|
@ -130,7 +130,7 @@ class Diagnosis extends BaseController
|
||||||
} else {
|
} else {
|
||||||
// Search with criteria
|
// Search with criteria
|
||||||
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
||||||
CONCAT(p.p_fname, '/', IF(p.gender=1,'M','F'), '/', p.p_rname) as inv_name,
|
COALESCE(NULLIF(CONCAT_WS('/', NULLIF(TRIM(p.p_fname), ''), IF(p.gender=1,'M',IF(p.gender=2,'F',NULL)), NULLIF(TRIM(CONCAT_WS(' ', p.p_relative, p.p_rname)), '')), ''), NULLIF(TRIM(m.inv_name), ''), NULLIF(TRIM(p.p_fname), ''), '-') as inv_name,
|
||||||
p.dob, p.age, p.age_in_month, p.estimate_dob,
|
p.dob, p.age, p.age_in_month, p.estimate_dob,
|
||||||
GROUP_CONCAT(CONCAT_WS(';', i.item_name, i.item_name, i.id,
|
GROUP_CONCAT(CONCAT_WS(';', i.item_name, i.item_name, i.id,
|
||||||
check_item_request(m.id, i.id)) SEPARATOR '#') as data_array,
|
check_item_request(m.id, i.id)) SEPARATOR '#') as data_array,
|
||||||
|
|
@ -180,7 +180,7 @@ class Diagnosis extends BaseController
|
||||||
if (trim($srNo) == '') {
|
if (trim($srNo) == '') {
|
||||||
// Get recent 3 days records with serial number
|
// Get recent 3 days records with serial number
|
||||||
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
||||||
CONCAT(p.p_fname, '/', IF(p.gender=1,'M','F'), '/', p.p_rname) as inv_name,
|
COALESCE(NULLIF(CONCAT_WS('/', NULLIF(TRIM(p.p_fname), ''), IF(p.gender=1,'M',IF(p.gender=2,'F',NULL)), NULLIF(TRIM(CONCAT_WS(' ', p.p_relative, p.p_rname)), '')), ''), NULLIF(TRIM(m.inv_name), ''), NULLIF(TRIM(p.p_fname), ''), '-') as inv_name,
|
||||||
p.dob, p.age, p.age_in_month, p.estimate_dob,
|
p.dob, p.age, p.age_in_month, p.estimate_dob,
|
||||||
GROUP_CONCAT(CONCAT_WS(';', i.item_name, i.item_name, i.id,
|
GROUP_CONCAT(CONCAT_WS(';', i.item_name, i.item_name, i.id,
|
||||||
check_item_request(m.id, i.id)) SEPARATOR '#') as data_array,
|
check_item_request(m.id, i.id)) SEPARATOR '#') as data_array,
|
||||||
|
|
@ -200,7 +200,7 @@ class Diagnosis extends BaseController
|
||||||
} else {
|
} else {
|
||||||
// Search by specific serial number
|
// Search by specific serial number
|
||||||
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
||||||
CONCAT(p.p_fname, '/', IF(p.gender=1,'M','F'), '/', p.p_rname) as inv_name,
|
COALESCE(NULLIF(CONCAT_WS('/', NULLIF(TRIM(p.p_fname), ''), IF(p.gender=1,'M',IF(p.gender=2,'F',NULL)), NULLIF(TRIM(CONCAT_WS(' ', p.p_relative, p.p_rname)), '')), ''), NULLIF(TRIM(m.inv_name), ''), NULLIF(TRIM(p.p_fname), ''), '-') as inv_name,
|
||||||
p.dob, p.age, p.age_in_month, p.estimate_dob,
|
p.dob, p.age, p.age_in_month, p.estimate_dob,
|
||||||
GROUP_CONCAT(CONCAT_WS(';', i.item_name, i.item_name, i.id,
|
GROUP_CONCAT(CONCAT_WS(';', i.item_name, i.item_name, i.id,
|
||||||
check_item_request(m.id, i.id)) SEPARATOR '#') as data_array,
|
check_item_request(m.id, i.id)) SEPARATOR '#') as data_array,
|
||||||
|
|
@ -243,7 +243,7 @@ class Diagnosis extends BaseController
|
||||||
if (trim($labNo) == '') {
|
if (trim($labNo) == '') {
|
||||||
// Get recent 3 days records with lab number
|
// Get recent 3 days records with lab number
|
||||||
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
||||||
CONCAT(p.p_fname, '/', IF(p.gender=1,'M','F'), '/', p.p_rname) as inv_name,
|
COALESCE(NULLIF(CONCAT_WS('/', NULLIF(TRIM(p.p_fname), ''), IF(p.gender=1,'M',IF(p.gender=2,'F',NULL)), NULLIF(TRIM(CONCAT_WS(' ', p.p_relative, p.p_rname)), '')), ''), NULLIF(TRIM(m.inv_name), ''), NULLIF(TRIM(p.p_fname), ''), '-') as inv_name,
|
||||||
p.dob, p.age, p.age_in_month, p.estimate_dob,
|
p.dob, p.age, p.age_in_month, p.estimate_dob,
|
||||||
GROUP_CONCAT(CONCAT_WS(';', i.item_name, i.item_name, i.id,
|
GROUP_CONCAT(CONCAT_WS(';', i.item_name, i.item_name, i.id,
|
||||||
check_item_request(m.id, i.id)) SEPARATOR '#') as data_array,
|
check_item_request(m.id, i.id)) SEPARATOR '#') as data_array,
|
||||||
|
|
@ -263,7 +263,7 @@ class Diagnosis extends BaseController
|
||||||
} else {
|
} else {
|
||||||
// Search by specific lab number
|
// Search by specific lab number
|
||||||
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
||||||
CONCAT(p.p_fname, '/', IF(p.gender=1,'M','F'), '/', p.p_rname) as inv_name,
|
COALESCE(NULLIF(CONCAT_WS('/', NULLIF(TRIM(p.p_fname), ''), IF(p.gender=1,'M',IF(p.gender=2,'F',NULL)), NULLIF(TRIM(CONCAT_WS(' ', p.p_relative, p.p_rname)), '')), ''), NULLIF(TRIM(m.inv_name), ''), NULLIF(TRIM(p.p_fname), ''), '-') as inv_name,
|
||||||
p.dob, p.age, p.age_in_month, p.estimate_dob,
|
p.dob, p.age, p.age_in_month, p.estimate_dob,
|
||||||
GROUP_CONCAT(CONCAT_WS(';', i.item_name, i.item_name, i.id,
|
GROUP_CONCAT(CONCAT_WS(';', i.item_name, i.item_name, i.id,
|
||||||
check_item_request(m.id, i.id)) SEPARATOR '#') as data_array,
|
check_item_request(m.id, i.id)) SEPARATOR '#') as data_array,
|
||||||
|
|
@ -344,6 +344,7 @@ class Diagnosis extends BaseController
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'invoice' => $invoice,
|
'invoice' => $invoice,
|
||||||
|
'invoice_id' => (int) $invoiceId,
|
||||||
'tests' => $tests ?? [],
|
'tests' => $tests ?? [],
|
||||||
'items' => $items ?? [],
|
'items' => $items ?? [],
|
||||||
'lab_invoice' => $labInvoice,
|
'lab_invoice' => $labInvoice,
|
||||||
|
|
@ -395,7 +396,7 @@ class Diagnosis extends BaseController
|
||||||
|
|
||||||
// Get test list with all details - matching old code structure
|
// Get test list with all details - matching old code structure
|
||||||
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
$sql = "SELECT m.id as inv_id, m.invoice_code, m.inv_date,
|
||||||
CONCAT(p.p_fname, '/', IF(p.gender=1,'M','F'), '/', p.p_rname) as inv_name,
|
COALESCE(NULLIF(CONCAT_WS('/', NULLIF(TRIM(p.p_fname), ''), IF(p.gender=1,'M',IF(p.gender=2,'F',NULL)), NULLIF(TRIM(CONCAT_WS(' ', p.p_relative, p.p_rname)), '')), ''), NULLIF(TRIM(m.inv_name), ''), NULLIF(TRIM(p.p_fname), ''), '-') as inv_name,
|
||||||
i.item_name, i.id as test_id, i.item_id,
|
i.item_name, i.id as test_id, i.item_id,
|
||||||
r.lab_repo_id, y.group_desc as item_type_desc, r.status,
|
r.lab_repo_id, y.group_desc as item_type_desc, r.status,
|
||||||
r.id as req_id, r.charge_item_id, r.print_combine
|
r.id as req_id, r.charge_item_id, r.print_combine
|
||||||
|
|
@ -3103,15 +3104,37 @@ class Diagnosis extends BaseController
|
||||||
return $this->response->setJSON(['update' => 0, 'error_text' => 'Invalid request']);
|
return $this->response->setJSON(['update' => 0, 'error_text' => 'Invalid request']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Detect PHP post_max_size overflow (when upload exceeds post_max_size, PHP discards $_POST & $_FILES)
|
||||||
|
if (empty($_POST) && empty($_FILES) && isset($_SERVER['CONTENT_LENGTH']) && (int) $_SERVER['CONTENT_LENGTH'] > 0) {
|
||||||
|
$maxPost = ini_get('post_max_size') ?: 'server limit';
|
||||||
|
return $this->response->setJSON([
|
||||||
|
'update' => 0,
|
||||||
|
'error_text' => "Uploaded file exceeds server post limit ({$maxPost}). Please increase PHP post_max_size or upload a smaller file."
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
if (! $this->db->tableExists('file_upload_data')) {
|
if (! $this->db->tableExists('file_upload_data')) {
|
||||||
return $this->response->setJSON(['update' => 0, 'error_text' => 'file_upload_data table not found']);
|
return $this->response->setJSON(['update' => 0, 'error_text' => 'file_upload_data table not found']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$invoiceId = (int) $this->request->getPost('invoice_id');
|
$invoiceId = (int) ($this->request->getPost('invoice_id') ?: $this->request->getGet('invoice_id') ?: $this->request->getHeaderLine('X-Invoice-Id'));
|
||||||
$labType = (int) $this->request->getPost('lab_type');
|
$labType = (int) ($this->request->getPost('lab_type') ?: $this->request->getGet('lab_type') ?: $this->request->getHeaderLine('X-Lab-Type'));
|
||||||
$reqId = (int) $this->request->getPost('req_id');
|
$reqId = (int) ($this->request->getPost('req_id') ?: $this->request->getGet('req_id') ?: $this->request->getHeaderLine('X-Req-Id'));
|
||||||
$fileDesc = trim((string) $this->request->getPost('file_desc'));
|
$fileDesc = trim((string) ($this->request->getPost('file_desc') ?: $this->request->getGet('file_desc')));
|
||||||
$scanType = trim((string) $this->request->getPost('scan_type'));
|
$scanType = trim((string) ($this->request->getPost('scan_type') ?: $this->request->getGet('scan_type')));
|
||||||
|
|
||||||
|
// If req_id is provided, resolve missing invoice_id or lab_type from lab_request
|
||||||
|
if ($reqId > 0 && ($invoiceId <= 0 || $labType <= 0)) {
|
||||||
|
$lr = $this->db->table('lab_request')->select('charge_id, lab_type, invoice_code')->where('id', $reqId)->get(1)->getRowArray();
|
||||||
|
if (!empty($lr)) {
|
||||||
|
if ($invoiceId <= 0) {
|
||||||
|
$invoiceId = (int) ($lr['charge_id'] ?? 0);
|
||||||
|
}
|
||||||
|
if ($labType <= 0) {
|
||||||
|
$labType = (int) ($lr['lab_type'] ?? 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($invoiceId <= 0 || $labType <= 0) {
|
if ($invoiceId <= 0 || $labType <= 0) {
|
||||||
return $this->response->setJSON(['update' => 0, 'error_text' => 'Missing invoice/lab context']);
|
return $this->response->setJSON(['update' => 0, 'error_text' => 'Missing invoice/lab context']);
|
||||||
|
|
@ -3119,7 +3142,13 @@ class Diagnosis extends BaseController
|
||||||
|
|
||||||
$upload = $this->request->getFile('report_file');
|
$upload = $this->request->getFile('report_file');
|
||||||
if (! $upload || ! $upload->isValid()) {
|
if (! $upload || ! $upload->isValid()) {
|
||||||
return $this->response->setJSON(['update' => 0, 'error_text' => 'No valid file uploaded']);
|
$errCode = $upload ? $upload->getError() : UPLOAD_ERR_NO_FILE;
|
||||||
|
$msg = 'No valid file uploaded';
|
||||||
|
if ($errCode === UPLOAD_ERR_INI_SIZE || $errCode === UPLOAD_ERR_FORM_SIZE) {
|
||||||
|
$maxUpload = ini_get('upload_max_filesize') ?: 'server limit';
|
||||||
|
$msg = "Uploaded file exceeds maximum allowed file size ({$maxUpload}).";
|
||||||
|
}
|
||||||
|
return $this->response->setJSON(['update' => 0, 'error_text' => $msg]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$ext = strtolower((string) $upload->getExtension());
|
$ext = strtolower((string) $upload->getExtension());
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,8 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td><?= esc($row->invoice_code ?? '-') ?></td>
|
<td><?= esc($row->invoice_code ?? '-') ?></td>
|
||||||
<td><?= esc($row->daily_sr_no ?? '-') ?></td>
|
<td><?= esc($row->daily_sr_no ?? '-') ?></td>
|
||||||
<td><?= esc($row->lab_test_no ?? '-') ?></td>
|
<?php $displayName = (!empty($row->inv_name) && trim((string) $row->inv_name) !== '-') ? $row->inv_name : (!empty($row->p_fname) ? $row->p_fname : '-'); ?>
|
||||||
<td><?= esc($row->inv_name ?? '-') ?> | <?= esc($row->age ?? '-') ?></td>
|
<td><?= esc($displayName) ?> | <?= esc($row->age ?? '-') ?></td>
|
||||||
<td><?= esc($row->inv_date ?? '-') ?></td>
|
<td><?= esc($row->inv_date ?? '-') ?></td>
|
||||||
<td>
|
<td>
|
||||||
<?php
|
<?php
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,8 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td><?= esc($row->invoice_code ?? '-') ?></td>
|
<td><?= esc($row->invoice_code ?? '-') ?></td>
|
||||||
<td><?= esc($row->daily_sr_no ?? '-') ?></td>
|
<td><?= esc($row->daily_sr_no ?? '-') ?></td>
|
||||||
<td><?= esc($row->lab_test_no ?? '-') ?></td>
|
<?php $displayName = (!empty($row->inv_name) && trim((string) $row->inv_name) !== '-') ? $row->inv_name : (!empty($row->p_fname) ? $row->p_fname : '-'); ?>
|
||||||
<td><?= esc($row->inv_name ?? '-') ?> | <?= esc($row->age ?? '-') ?></td>
|
<td><?= esc($displayName) ?> | <?= esc($row->age ?? '-') ?></td>
|
||||||
<td><?= esc($row->inv_date ?? '-') ?></td>
|
<td><?= esc($row->inv_date ?? '-') ?></td>
|
||||||
<td>
|
<td>
|
||||||
<?php
|
<?php
|
||||||
|
|
|
||||||
|
|
@ -296,8 +296,8 @@ if ($ageLabel === '') {
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var baseUrl = '<?php echo rtrim(base_url(), '/'); ?>/';
|
var baseUrl = '<?php echo rtrim(base_url(), '/'); ?>/';
|
||||||
var invoiceId = '<?php echo htmlspecialchars($invoice->inv_id ?? $invoice->id ?? '0'); ?>';
|
var invoiceId = '<?php echo htmlspecialchars((string) ($invoice_id ?? $invoice->inv_id ?? $invoice->id ?? '0')); ?>';
|
||||||
var labType = '<?php echo htmlspecialchars($lab_type ?? '5'); ?>';
|
var labType = '<?php echo htmlspecialchars((string) ($lab_type ?? '5')); ?>';
|
||||||
|
|
||||||
console.log('Page loaded - Invoice ID:', invoiceId, 'Lab Type:', labType);
|
console.log('Page loaded - Invoice ID:', invoiceId, 'Lab Type:', labType);
|
||||||
|
|
||||||
|
|
@ -886,7 +886,14 @@ function diagnosisUploadFromEditor(mode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function diagnosisUploadForReq(reqId, testName, mode) {
|
function diagnosisUploadForReq(reqId, testName, mode) {
|
||||||
if (!invoiceId || !labType) {
|
var invId = (typeof invoiceId !== 'undefined' && invoiceId && invoiceId !== '0')
|
||||||
|
? invoiceId
|
||||||
|
: (document.getElementById('invoiceId') ? document.getElementById('invoiceId').value : '');
|
||||||
|
var lType = (typeof labType !== 'undefined' && labType && labType !== '0')
|
||||||
|
? labType
|
||||||
|
: (document.getElementById('labType') ? document.getElementById('labType').value : '');
|
||||||
|
|
||||||
|
if (!invId || !lType) {
|
||||||
alert('Invoice context missing');
|
alert('Invoice context missing');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -905,13 +912,18 @@ function diagnosisUploadForReq(reqId, testName, mode) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (file.size > 150 * 1024 * 1024) {
|
||||||
|
alert('File is too large (' + (file.size / (1024 * 1024)).toFixed(1) + ' MB). Maximum allowed size is 128 MB.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const modalBody = document.getElementById('testDataEntryBody');
|
const modalBody = document.getElementById('testDataEntryBody');
|
||||||
const csrfField = modalBody ? modalBody.querySelector('input[name]') : null;
|
const csrfField = modalBody ? modalBody.querySelector('input[name]') : null;
|
||||||
|
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append('report_file', file);
|
formData.append('report_file', file);
|
||||||
formData.append('invoice_id', String(invoiceId));
|
formData.append('invoice_id', String(invId));
|
||||||
formData.append('lab_type', String(labType));
|
formData.append('lab_type', String(lType));
|
||||||
formData.append('req_id', String(reqId || 0));
|
formData.append('req_id', String(reqId || 0));
|
||||||
formData.append('file_desc', (testName || 'Imaging Report') + ((mode === 'camera') ? ' (Camera)' : ' (Upload)'));
|
formData.append('file_desc', (testName || 'Imaging Report') + ((mode === 'camera') ? ' (Camera)' : ' (Upload)'));
|
||||||
formData.append('scan_type', (mode === 'camera') ? 'camera' : 'upload');
|
formData.append('scan_type', (mode === 'camera') ? 'camera' : 'upload');
|
||||||
|
|
@ -919,11 +931,19 @@ function diagnosisUploadForReq(reqId, testName, mode) {
|
||||||
formData.append(csrfField.name, csrfField.value);
|
formData.append(csrfField.name, csrfField.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
fetch(baseUrl + 'diagnosis/upload-report-file', {
|
const uploadUrl = baseUrl + 'diagnosis/upload-report-file'
|
||||||
|
+ '?invoice_id=' + encodeURIComponent(invId)
|
||||||
|
+ '&lab_type=' + encodeURIComponent(lType)
|
||||||
|
+ '&req_id=' + encodeURIComponent(reqId || 0);
|
||||||
|
|
||||||
|
fetch(uploadUrl, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: formData,
|
body: formData,
|
||||||
headers: {
|
headers: {
|
||||||
'X-Requested-With': 'XMLHttpRequest'
|
'X-Requested-With': 'XMLHttpRequest',
|
||||||
|
'X-Invoice-Id': String(invId),
|
||||||
|
'X-Lab-Type': String(lType),
|
||||||
|
'X-Req-Id': String(reqId || 0)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
|
|
@ -937,7 +957,7 @@ function diagnosisUploadForReq(reqId, testName, mode) {
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.error('Upload error:', error);
|
console.error('Upload error:', error);
|
||||||
alert('Upload request failed');
|
alert('Upload request failed: ' + (error && error.message ? error.message : 'Please check file size and server connection'));
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user