From 4a9406cd285e7b1c0bf0d56d4bd602e31f002ee6 Mon Sep 17 00:00:00 2001 From: "sas.fajri" Date: Fri, 12 Jun 2026 15:49:34 +0700 Subject: [PATCH] FHM09062601IBL - move patient visit info to php --- .../controllers/klinik/Registrationv3.php | 62 ++++++++++++++---- .../klinik/screening/Screening.php | 57 +++++++++++++++-- .../mockup/fo/ibl_registration/Order.php | 64 +++++++++++++++---- .../mockup/fo/ibl_registration/Patient.php | 47 +++++++++++++- 4 files changed, 198 insertions(+), 32 deletions(-) diff --git a/application/controllers/klinik/Registrationv3.php b/application/controllers/klinik/Registrationv3.php index 18836c8a..f89264c8 100644 --- a/application/controllers/klinik/Registrationv3.php +++ b/application/controllers/klinik/Registrationv3.php @@ -979,20 +979,58 @@ class Registrationv3 extends MY_Controller } unset($rows[$k]['M_PatientNameRaw']); - $info_query = $this->db_onedev->query("SELECT fn_fo_patient_visit(?) info", [$v['M_PatientID']]); - if ($info_query) { - $info = $info_query->row(); - $rows[$k]['info'] = ($info && isset($info->info)) ? json_decode($info->info) : null; - } else { - $rows[$k]['info'] = null; + $rows[$k]['info'] = $this->build_patient_visit_info($v['M_PatientID'], $dob_dec); + } + + $this->sys_ok(["total" => 0, "records" => $rows]); + } + + protected function build_patient_visit_info($patient_id, $patient_dob) + { + $visit = 1; + $birthday = 'N'; + + $visit_query = $this->db_onedev->query( + "SELECT COUNT(DISTINCT T_OrderHeaderID) AS n + FROM t_orderheader + JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive = 'Y' + WHERE T_OrderHeaderIsActive = 'Y' + AND T_OrderHeaderM_PatientID = ?", + [$patient_id] + ); + + if ($visit_query) { + $visit_row = $visit_query->row_array(); + $visit += (int) ($visit_row['n'] ?? 0); + } + + $init_visit_query = $this->db_onedev->query( + "SELECT M_PatientInitialVisit + FROM m_patient + WHERE M_PatientID = ?", + [$patient_id] + ); + + if ($init_visit_query) { + $init_visit_row = $init_visit_query->row_array(); + if (!empty($init_visit_row['M_PatientInitialVisit'])) { + $visit += (int) $init_visit_row['M_PatientInitialVisit']; } } - - $this->sys_ok(["total" => 0, "records" => $rows]); - } - - function calculateAge($tanggal_lahir) - { + + $dob_time = empty($patient_dob) ? false : strtotime($patient_dob); + if ($dob_time !== false) { + $birthday = date('m-d', $dob_time) === date('m-d') ? 'Y' : 'N'; + } + + return json_decode(json_encode([ + 'visit' => $visit, + 'birthday' => $birthday, + ])); + } + + function calculateAge($tanggal_lahir) + { // Ambil tanggal sekarang $tanggal_sekarang = new DateTime(); diff --git a/application/controllers/klinik/screening/Screening.php b/application/controllers/klinik/screening/Screening.php index 6395fdb7..bb609df6 100644 --- a/application/controllers/klinik/screening/Screening.php +++ b/application/controllers/klinik/screening/Screening.php @@ -92,8 +92,7 @@ class Screening extends MY_Controller } unset($rows[$k]['M_PatientNameRaw']); - $info = $this->db_onedev->query("SELECT fn_fo_patient_visit(?) info", [$v['M_PatientID']])->row(); - $rows[$k]['info'] = json_decode($info->info); + $rows[$k]['info'] = $this->build_patient_visit_info($v['M_PatientID'], $rows[$k]['M_PatientDOB']); // Screening template berdasarkan poli order $cu_id = $v['orderM_ClinicUnitID'] ?? null; @@ -168,11 +167,55 @@ class Screening extends MY_Controller } } - $this->sys_ok(["total" => count($rows), "records" => $rows]); - } - - - function get_data(){ + $this->sys_ok(["total" => count($rows), "records" => $rows]); + } + + protected function build_patient_visit_info($patient_id, $patient_dob) + { + $visit = 1; + $birthday = 'N'; + + $visit_query = $this->db_onedev->query( + "SELECT COUNT(DISTINCT T_OrderHeaderID) AS n + FROM t_orderheader + JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive = 'Y' + WHERE T_OrderHeaderIsActive = 'Y' + AND T_OrderHeaderM_PatientID = ?", + [$patient_id] + ); + + if ($visit_query) { + $visit_row = $visit_query->row_array(); + $visit += (int) ($visit_row['n'] ?? 0); + } + + $init_visit_query = $this->db_onedev->query( + "SELECT M_PatientInitialVisit + FROM m_patient + WHERE M_PatientID = ?", + [$patient_id] + ); + + if ($init_visit_query) { + $init_visit_row = $init_visit_query->row_array(); + if (!empty($init_visit_row['M_PatientInitialVisit'])) { + $visit += (int) $init_visit_row['M_PatientInitialVisit']; + } + } + + $dob_time = empty($patient_dob) ? false : strtotime($patient_dob); + if ($dob_time !== false) { + $birthday = date('m-d', $dob_time) === date('m-d') ? 'Y' : 'N'; + } + + return json_decode(json_encode([ + 'visit' => $visit, + 'birthday' => $birthday, + ])); + } + + + function get_data(){ if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; diff --git a/application/controllers/mockup/fo/ibl_registration/Order.php b/application/controllers/mockup/fo/ibl_registration/Order.php index 379411b4..583d226b 100644 --- a/application/controllers/mockup/fo/ibl_registration/Order.php +++ b/application/controllers/mockup/fo/ibl_registration/Order.php @@ -55,17 +55,61 @@ class Order extends MY_Controller return $rst; } - function convert_to_normal_text($text) - { + function convert_to_normal_text($text) + { $normal_characters = "a-zA-Z0-9\s`~!@#$%^&*()_+-={}|:;<>?,.\/\"\'\\\[\]"; $normal_text = preg_replace("/[^$normal_characters]/", '', $text); - return $normal_text; - } - - function genqrcode($nomorlab, $id) - { + return $normal_text; + } + + protected function build_patient_visit_info($patient_id, $patient_dob) + { + $visit = 1; + $birthday = 'N'; + + $visit_query = $this->db_onedev->query( + "SELECT COUNT(DISTINCT T_OrderHeaderID) AS n + FROM t_orderheader + JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive = 'Y' + WHERE T_OrderHeaderIsActive = 'Y' + AND T_OrderHeaderM_PatientID = ?", + [$patient_id] + ); + + if ($visit_query) { + $visit_row = $visit_query->row_array(); + $visit += (int) ($visit_row['n'] ?? 0); + } + + $init_visit_query = $this->db_onedev->query( + "SELECT M_PatientInitialVisit + FROM m_patient + WHERE M_PatientID = ?", + [$patient_id] + ); + + if ($init_visit_query) { + $init_visit_row = $init_visit_query->row_array(); + if (!empty($init_visit_row['M_PatientInitialVisit'])) { + $visit += (int) $init_visit_row['M_PatientInitialVisit']; + } + } + + $dob_time = empty($patient_dob) ? false : strtotime($patient_dob); + if ($dob_time !== false) { + $birthday = date('m-d', $dob_time) === date('m-d') ? 'Y' : 'N'; + } + + return json_decode(json_encode([ + 'visit' => $visit, + 'birthday' => $birthday, + ])); + } + + function genqrcode($nomorlab, $id) + { $this->load->library('ciqrcode'); //pemanggilan library QR CODE $home_dir = "/home/one/project/one/"; $target_dir = $home_dir . "one-media/one-qrcontrolcard/"; @@ -4017,8 +4061,7 @@ GROUP BY T_SampleStationID "; $patient = $query->row_array(); $patient['M_PatientName'] = stripslashes($patient['M_PatientName']); $patient['M_PatientAddress'] = stripslashes($patient['full_address']); - $info = $this->db_onedev->query("SELECT fn_fo_patient_visit(?) info", [$patient['M_PatientID']])->row(); - $patient['info'] = json_decode($info->info); + $patient['info'] = $this->build_patient_visit_info($patient['M_PatientID'], $patient['M_PatientDOB']); $rst['patient'] = $patient; } @@ -4770,8 +4813,7 @@ GROUP BY T_SampleStationID "; } } - $info = $this->db_onedev->query("SELECT fn_fo_patient_visit(?) info", [$patient_row['M_PatientID']])->row(); - $patient_row['info'] = $info ? json_decode($info->info) : null; + $patient_row['info'] = $this->build_patient_visit_info($patient_row['M_PatientID'], $patient_row['M_PatientDOB']); // Hapus kolom enc sebelum return foreach (['M_PatientName_enc','M_PatientName_bidx','M_PatientHP_enc','M_PatientHP_bidx', diff --git a/application/controllers/mockup/fo/ibl_registration/Patient.php b/application/controllers/mockup/fo/ibl_registration/Patient.php index b8e882f7..4e0abd74 100644 --- a/application/controllers/mockup/fo/ibl_registration/Patient.php +++ b/application/controllers/mockup/fo/ibl_registration/Patient.php @@ -234,8 +234,7 @@ class Patient extends MY_Controller } unset($rows[$k]['M_PatientNameRaw'], $rows[$k]['M_PatientDOB']); - $info = $this->db_smartone->query("SELECT fn_fo_patient_visit(?) info", [$v['M_PatientID']])->row(); - $rows[$k]['info'] = json_decode($info->info); + $rows[$k]['info'] = $this->build_patient_visit_info($v['M_PatientID'], $dob_dec); $ref_query = $this->db_smartone->query( "SELECT M_ReferenceID, M_ReferenceName @@ -250,6 +249,50 @@ class Patient extends MY_Controller $this->sys_ok(["total" => 0, "records" => $rows]); } + protected function build_patient_visit_info($patient_id, $patient_dob) + { + $visit = 1; + $birthday = 'N'; + + $visit_query = $this->db_smartone->query( + "SELECT COUNT(DISTINCT T_OrderHeaderID) AS n + FROM t_orderheader + JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive = 'Y' + WHERE T_OrderHeaderIsActive = 'Y' + AND T_OrderHeaderM_PatientID = ?", + [$patient_id] + ); + + if ($visit_query) { + $visit_row = $visit_query->row_array(); + $visit += (int) ($visit_row['n'] ?? 0); + } + + $init_visit_query = $this->db_smartone->query( + "SELECT M_PatientInitialVisit + FROM m_patient + WHERE M_PatientID = ?", + [$patient_id] + ); + + if ($init_visit_query) { + $init_visit_row = $init_visit_query->row_array(); + if (!empty($init_visit_row['M_PatientInitialVisit'])) { + $visit += (int) $init_visit_row['M_PatientInitialVisit']; + } + } + + $dob_time = empty($patient_dob) ? false : strtotime($patient_dob); + if ($dob_time !== false) { + $birthday = date('m-d', $dob_time) === date('m-d') ? 'Y' : 'N'; + } + + return json_decode(json_encode([ + 'visit' => $visit, + 'birthday' => $birthday, + ])); + } + function add_new() {