FHM09062601IBL - fix ibl load klinik tests

This commit is contained in:
sas.fajri
2026-06-12 14:26:39 +07:00
parent 17acf294ba
commit ebd2217921

View File

@@ -1067,7 +1067,14 @@ class Order extends MY_Controller
FROM `t_orderheader`
JOIN `t_orderheaderaddon` ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y'
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
JOIN m_patientaddress ON M_PatientAddressM_PatientID = M_PatientID AND M_PatientAddressIsActive = 'Y' AND M_PatientAddressNote = 'Utama'
LEFT JOIN m_patientaddress ON M_PatientAddressID = (
SELECT pa.M_PatientAddressID
FROM m_patientaddress pa
WHERE pa.M_PatientAddressM_PatientID = M_PatientID
AND pa.M_PatientAddressIsActive = 'Y'
ORDER BY (pa.M_PatientAddressNote = 'Utama') DESC, pa.M_PatientAddressID DESC
LIMIT 1
)
JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID
JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID
JOIN m_doctor pj1 ON T_OrderHeaderPjM_DoctorID = pj1.M_DoctorID
@@ -4661,12 +4668,13 @@ GROUP BY T_SampleStationID ";
// Ambil header order klinik
$row_header = $this->db_onedev->query(
"SELECT o.*, od.orderDoctorDiagnosePrimer
"SELECT o.*, s.*, od.orderDoctorDiagnosePrimer
FROM one_klinik.`order` o
JOIN one_klinik.setting s ON s.settingIsActive = 'Y'
LEFT JOIN one_klinik.order_doctor od
ON od.orderDoctorOrderID = o.orderID
AND od.orderDoctorIsActive = 'Y'
AND od.orderDoctorType = 'FORM'
AND od.orderDoctorType = 'TEXT'
WHERE o.OrderNumber = ?
LIMIT 1",
[$klinik_number]
@@ -4791,54 +4799,63 @@ GROUP BY T_SampleStationID ";
$rst['selected_company'] = $row_company ?: [];
$rst['companies'] = $row_company ? [$row_company] : [];
// Tests dari order_detail_order — format identik registration_v37 selectPx
$qry_detail = $this->db_smartone->query(
"SELECT odo.*,
spm.px_type, spm.T_PriceIsCito AS T_TestIsCito,
spm.nat_test AS spm_nat_test,
spm.child_test AS spm_child_test
FROM one_klinik.order_detail_order odo
LEFT JOIN one_lab.ss_price_mou spm ON spm.Ss_PriceMouID = odo.orderDetailOrderSsPriceMouID
WHERE odo.orderDetailOrderOrderID = ? AND odo.orderDetailOrderIsActive = 'Y'
ORDER BY odo.orderDetailOrderID ASC",
[$row_header['orderID']]
);
if (!$qry_detail) {
$this->sys_error_db("tests query: " . $this->db_smartone->error()['message'], $this->db_smartone);
$rst['tests'] = [];
$sql = "SELECT ss_price_mou.*
FROM one_klinik.order_penunjang
JOIN t_test
ON orderPenunjangT_TestID = t_test.T_TestID
AND t_test.T_TestIsActive = 'Y'
JOIN ss_price_mou
ON Ss_PriceMouM_MouID = ?
AND t_test.T_TestID = ss_price_mou.T_TestID
AND is_packet = 'N'
WHERE orderPenunjangOrderID = ?
AND orderPenunjangIsActive = 'Y'
GROUP BY ss_price_mou.T_TestID";
$qry_tests = $this->db_onedev->query($sql, [
$row_header['settingM_MouID'],
$row_header['orderID']
]);
if (!$qry_tests) {
$this->sys_error_db("tests query: " . $this->db_onedev->error()['message'], $this->db_onedev);
exit;
}
$detail_rows = $qry_detail->result_array();
$get_tests_from_detail = $qry_tests->result_array();
if ($get_tests_from_detail) {
foreach ($get_tests_from_detail as $value) {
$data_ss_price = $value;
$data_ss_price['requirement'] = [];
if ($data_ss_price['px_type'] == "PX") {
$x = $this->db_smartone->query(
"SELECT fn_fo_requirement_get(?) x",
[$data_ss_price['T_TestID']]
)->row();
if ($x && $x->x != null) {
$data_ss_price['requirement'] = json_decode($x->x);
}
}
$tests = [];
foreach ($detail_rows as $d) {
$nat_test = json_decode($d['spm_nat_test'] ?? '[]') ?: [];
$child_test = json_decode($d['spm_child_test'] ?? '[]') ?: [];
if ($data_ss_price['is_packet'] == 'N') {
$tests = $data_ss_price['T_PriceT_TestID'];
$panels = '';
} else {
$tests = '';
$panels = $data_ss_price['T_PriceT_TestID'];
}
$requirement = [];
if (($d['px_type'] ?? '') === 'PX') {
$x = $this->db_smartone->query(
"SELECT fn_fo_requirement_get(?) x", [$d['orderDetailOrderT_TestID']]
"SELECT fn_fo_find_promise_by_px(?, ?) as x",
[$tests, $panels]
)->row();
if ($x && $x->x !== null) $requirement = json_decode($x->x);
}
if ($x && $x->x != null) {
$data_ss_price['promise'] = $x->x;
}
$tests[] = [
'T_TestID' => $d['orderDetailOrderT_TestID'],
'T_TestName' => $d['orderDetailOrderT_TestName'],
'px_type' => $d['px_type'] ?? '',
'T_PriceAmount' => $d['orderDetailOrderT_PriceAmount'],
'T_PriceDisc' => $d['orderDetailOrderT_PriceDisc'],
'T_PriceDiscRp' => $d['orderDetailOrderT_PriceDiscRp'],
'Ss_PriceMouID' => $d['orderDetailOrderSsPriceMouID'],
'is_packet' => $d['orderDetailOrderIsPacket'],
'packet_id' => $d['orderDetailOrderT_PacketID'] ?? '',
'T_TestIsCito' => $d['T_TestIsCito'] ?? 'N',
'nat_test' => $nat_test,
'requirement' => $requirement,
'child_test' => $child_test,
];
$data_ss_price['nat_test'] = json_decode($data_ss_price['nat_test']);
$data_ss_price['child_test'] = json_decode($data_ss_price['child_test']);
$rst['tests'][] = $data_ss_price;
}
}
$rst['tests'] = $tests;
$rst['diagnose'] = $row_header['orderDoctorDiagnosePrimer'] ?? '';
$this->sys_ok(['records' => $rst]);