From ebd22179213d4dba62cbdc9f96fff24b7bf161ce Mon Sep 17 00:00:00 2001 From: "sas.fajri" Date: Fri, 12 Jun 2026 14:26:39 +0700 Subject: [PATCH] FHM09062601IBL - fix ibl load klinik tests --- .../mockup/fo/ibl_registration/Order.php | 139 ++++++++++-------- 1 file changed, 78 insertions(+), 61 deletions(-) diff --git a/application/controllers/mockup/fo/ibl_registration/Order.php b/application/controllers/mockup/fo/ibl_registration/Order.php index 0b4dd9a0..9450a38a 100644 --- a/application/controllers/mockup/fo/ibl_registration/Order.php +++ b/application/controllers/mockup/fo/ibl_registration/Order.php @@ -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 @@ -4660,17 +4667,18 @@ GROUP BY T_SampleStationID "; if (!$klinik_number) { $this->sys_error("klinik_number required"); exit; } // Ambil header order klinik - $row_header = $this->db_onedev->query( - "SELECT o.*, od.orderDoctorDiagnosePrimer - FROM one_klinik.`order` o - LEFT JOIN one_klinik.order_doctor od - ON od.orderDoctorOrderID = o.orderID - AND od.orderDoctorIsActive = 'Y' - AND od.orderDoctorType = 'FORM' - WHERE o.OrderNumber = ? - LIMIT 1", - [$klinik_number] - )->row_array(); + $row_header = $this->db_onedev->query( + "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 = 'TEXT' + WHERE o.OrderNumber = ? + LIMIT 1", + [$klinik_number] + )->row_array(); if (!$row_header) { $this->sys_error("Order tidak ditemukan"); exit; } @@ -4791,55 +4799,64 @@ 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); - exit; - } - $detail_rows = $qry_detail->result_array(); - - $tests = []; - foreach ($detail_rows as $d) { - $nat_test = json_decode($d['spm_nat_test'] ?? '[]') ?: []; - $child_test = json_decode($d['spm_child_test'] ?? '[]') ?: []; - - $requirement = []; - if (($d['px_type'] ?? '') === 'PX') { - $x = $this->db_smartone->query( - "SELECT fn_fo_requirement_get(?) x", [$d['orderDetailOrderT_TestID']] - )->row(); - if ($x && $x->x !== null) $requirement = json_decode($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, - ]; - } - $rst['tests'] = $tests; - $rst['diagnose'] = $row_header['orderDoctorDiagnosePrimer'] ?? ''; + $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; + } + $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); + } + } + + if ($data_ss_price['is_packet'] == 'N') { + $tests = $data_ss_price['T_PriceT_TestID']; + $panels = ''; + } else { + $tests = ''; + $panels = $data_ss_price['T_PriceT_TestID']; + } + + $x = $this->db_smartone->query( + "SELECT fn_fo_find_promise_by_px(?, ?) as x", + [$tests, $panels] + )->row(); + if ($x && $x->x != null) { + $data_ss_price['promise'] = $x->x; + } + + $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['diagnose'] = $row_header['orderDoctorDiagnosePrimer'] ?? ''; $this->sys_ok(['records' => $rst]); exit;