From d1af16599963858225352c324fec5e8c0df90a4f Mon Sep 17 00:00:00 2001 From: "sas.fajri" Date: Tue, 30 Jun 2026 10:38:59 +0700 Subject: [PATCH] 3Z4LPN - ganti flag stemcell ke table baru - Tambah validasi nat_groupid = 7 di save() walk_in_registration_stemcell/Order.php sebelum transaksi dimulai - Tambah insert ke t_orderstemcell saat order dari cabang stemcell berhasil disimpan - Ganti referensi M_BranchIsSteemCell di Transactionv4 dan Transactionv5 ke EXISTS/NOT EXISTS pada t_orderstemcell - Tambah SQL DDL tabel t_orderstemcell di sql/t_orderstemcell.sql --- application/controllers/ais/Transactionv4.php | 29 +++++++----- application/controllers/ais/Transactionv5.php | 18 +++---- .../walk_in_registration_stemcell/Order.php | 47 ++++++++++++++++++- sql/t_orderstemcell.sql | 12 +++++ 4 files changed, 84 insertions(+), 22 deletions(-) create mode 100644 sql/t_orderstemcell.sql diff --git a/application/controllers/ais/Transactionv4.php b/application/controllers/ais/Transactionv4.php index ba28a4f..15d65c0 100644 --- a/application/controllers/ais/Transactionv4.php +++ b/application/controllers/ais/Transactionv4.php @@ -490,7 +490,7 @@ class Transactionv4 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'N' + AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%' JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -547,7 +547,7 @@ class Transactionv4 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'N' + AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%' JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -1055,7 +1055,7 @@ class Transactionv4 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'N' + AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%' JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -1111,7 +1111,7 @@ class Transactionv4 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'N' + AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%' JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -1863,7 +1863,7 @@ class Transactionv4 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'N' + AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -1919,7 +1919,7 @@ class Transactionv4 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'N' + AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -2388,7 +2388,7 @@ class Transactionv4 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'N' + AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -2443,7 +2443,7 @@ class Transactionv4 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'N' + AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -2888,7 +2888,7 @@ class Transactionv4 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'N' + AND NOT EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -3801,7 +3801,7 @@ class Transactionv4 extends MY_Controller b.M_BranchCode AS branch_code, b.M_BranchName AS branch_name, b.M_BranchCodeLab AS branch_code_lab, - b.M_BranchIsSteemCell AS is_stemcell, + IF(os.T_OrderStemcellID IS NOT NULL, 'Y', 'N') AS is_stemcell, oh.T_OrderHeaderTotal AS total, at.Ais_TransactionStatus AS Ais_TransactionStatus, c.CorporateID AS corporate_id, @@ -3814,6 +3814,7 @@ class Transactionv4 extends MY_Controller FROM t_orderheader oh JOIN m_patient p ON p.M_PatientID = oh.T_OrderHeaderM_PatientID JOIN m_branch b ON b.M_BranchID = oh.T_OrderHeaderM_BranchID + LEFT JOIN t_orderstemcell os ON os.T_OrderStemcellT_OrderHeaderID = oh.T_OrderHeaderID LEFT JOIN corporate c ON c.CorporateID = oh.T_OrderHeaderCorporateID LEFT JOIN mgm_mcu ON mgm_mcu.Mgm_McuID = oh.T_OrderHeaderMgm_McuID LEFT JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -3866,8 +3867,11 @@ class Transactionv4 extends MY_Controller } if ($is_stemcell !== null && $is_stemcell !== '' && $is_stemcell !== 'A') { - $where_clauses[] = "b.M_BranchIsSteemCell = ?"; - $params[] = $is_stemcell; + if ($is_stemcell === 'Y') { + $where_clauses[] = "os.T_OrderStemcellID IS NOT NULL"; + } else { + $where_clauses[] = "os.T_OrderStemcellID IS NULL"; + } } // Build WHERE @@ -3881,6 +3885,7 @@ class Transactionv4 extends MY_Controller FROM t_orderheader oh JOIN m_patient p ON p.M_PatientID = oh.T_OrderHeaderM_PatientID JOIN m_branch b ON b.M_BranchID = oh.T_OrderHeaderM_BranchID + LEFT JOIN t_orderstemcell os ON os.T_OrderStemcellT_OrderHeaderID = oh.T_OrderHeaderID LEFT JOIN " . $this->db_log->database . ".ais_transaction at ON at.Ais_TransactionOrderHeaderLabNumber = oh.T_OrderHeaderLabNumber LEFT JOIN corporate c ON c.CorporateID = oh.T_OrderHeaderCorporateID diff --git a/application/controllers/ais/Transactionv5.php b/application/controllers/ais/Transactionv5.php index ab667e5..8c0a7d9 100644 --- a/application/controllers/ais/Transactionv5.php +++ b/application/controllers/ais/Transactionv5.php @@ -490,7 +490,7 @@ class Transactionv5 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'Y' + AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%' JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -547,7 +547,7 @@ class Transactionv5 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'Y' + AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%' JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -1055,7 +1055,7 @@ class Transactionv5 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'Y' + AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%' JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -1111,7 +1111,7 @@ class Transactionv5 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'Y' + AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID AND `M_PatientName` NOT LIKE '%coba%' JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -1863,7 +1863,7 @@ class Transactionv5 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'Y' + AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -1919,7 +1919,7 @@ class Transactionv5 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'Y' + AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -2391,7 +2391,7 @@ class Transactionv5 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'Y' + AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -2446,7 +2446,7 @@ class Transactionv5 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'Y' + AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID @@ -2909,7 +2909,7 @@ class Transactionv5 extends MY_Controller '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID - AND M_BranchIsSteemCell = 'Y' + AND EXISTS (SELECT 1 FROM t_orderstemcell WHERE T_OrderStemcellT_OrderHeaderID = T_OrderHeaderID) JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID diff --git a/application/controllers/mockup/fo/walk_in_registration_stemcell/Order.php b/application/controllers/mockup/fo/walk_in_registration_stemcell/Order.php index 8a6ec98..f873371 100644 --- a/application/controllers/mockup/fo/walk_in_registration_stemcell/Order.php +++ b/application/controllers/mockup/fo/walk_in_registration_stemcell/Order.php @@ -250,7 +250,7 @@ class Order extends MY_Controller } $userid = $this->sys_user["M_UserID"]; - $sql = "SELECT M_UserLoginM_BranchID as branch_id, M_BranchCodeLab as branch_code_lab, M_BranchCodeBridging as branch_code_bridging + $sql = "SELECT M_UserLoginM_BranchID as branch_id, M_BranchCodeLab as branch_code_lab, M_BranchCodeBridging as branch_code_bridging, M_BranchIsSteemCell as is_stemcell FROM m_user JOIN m_branch ON M_UserLoginM_BranchID = M_BranchID AND M_BranchIsActive = 'Y' WHERE M_UserID = $userid"; @@ -263,6 +263,7 @@ class Order extends MY_Controller $branch_id = $dt_branch['branch_id']; $branch_code_lab = $dt_branch['branch_code_lab']; $branch_code_bridging = $dt_branch['branch_code_bridging']; + $branch_is_stemcell = isset($dt_branch['is_stemcell']) ? $dt_branch['is_stemcell'] : 'N'; $pre_registerid = isset($prm['preid']) ? $prm['preid'] : 0; $header = $prm['header']; $header['pre_register_id'] = $pre_registerid; @@ -311,6 +312,32 @@ class Order extends MY_Controller } } + if ($branch_is_stemcell == 'Y') { + $test_ids_to_check = array_values(array_unique(array_map('intval', array_column($details, 't_id')))); + $test_ids_to_check = array_filter($test_ids_to_check, function($id) { return $id > 0; }); + + if (!empty($test_ids_to_check)) { + $ids_str = implode(',', $test_ids_to_check); + $sql_check = "SELECT T_TestID, T_TestName, T_TestNat_GroupID FROM t_test WHERE T_TestID IN ($ids_str)"; + $query_check = $this->db_smartone->query($sql_check); + if (!$query_check) { + $this->sys_error_db(["status" => "ERR", "message" => "check nat_group stemcell | " . $this->db_smartone->error()["message"], "debug" => $this->db_smartone->last_query()]); + exit; + } + $rows_check = $query_check->result_array(); + $invalid_tests = []; + foreach ($rows_check as $row_check) { + if ((int)$row_check['T_TestNat_GroupID'] !== 7) { + $invalid_tests[] = $row_check['T_TestName']; + } + } + if (!empty($invalid_tests)) { + $this->sys_error("Cabang dan pemeriksaan tidak sesuai. Cek pemeriksaan, harus group stemcell. Pemeriksaan tidak valid: " . implode(', ', $invalid_tests)); + exit; + } + } + } + $this->db_smartone->trans_begin(); $sql = "SELECT M_DoctorID, M_DoctorName, M_DoctorPjIsDefaultPJ @@ -384,6 +411,24 @@ class Order extends MY_Controller exit; } + if ($branch_is_stemcell == 'Y') { + $sql_stemcell = "INSERT INTO t_orderstemcell ( + T_OrderStemcellT_OrderHeaderID, + T_OrderStemcellCreated, + T_OrderStemcellCreatedUserID + ) VALUES (?, NOW(), ?)"; + $query_stemcell = $this->db_smartone->query($sql_stemcell, [$header_id, $userid]); + if (!$query_stemcell) { + $this->db_smartone->trans_rollback(); + $this->insert_log_error($this->db_smartone->last_query(), ['INSERT_T_ORDERSTEMCELL', 'order/save'], [ + 'header_id' => $header_id, + 'error' => $this->db_smartone->error() + ]); + $this->sys_error_db(["status" => "ERR", "message" => "error insert t_orderstemcell | " . $this->db_smartone->error()["message"], "debug" => $this->db_smartone->last_query()]); + exit; + } + } + $references = []; if (isset($prm['reference'])) { $references = $prm['reference']; diff --git a/sql/t_orderstemcell.sql b/sql/t_orderstemcell.sql new file mode 100644 index 0000000..76d562b --- /dev/null +++ b/sql/t_orderstemcell.sql @@ -0,0 +1,12 @@ +-- Tabel untuk menyimpan flag bahwa order ini adalah order stemcell. +-- Disimpan saat order dibuat agar tidak terpengaruh perubahan flag M_BranchIsSteCell di masa mendatang. +-- Tanggal: 2026-06-30 + +CREATE TABLE IF NOT EXISTS t_orderstemcell ( + T_OrderStemcellID INT NOT NULL AUTO_INCREMENT, + T_OrderStemcellT_OrderHeaderID INT NOT NULL, + T_OrderStemcellCreated DATETIME NOT NULL, + T_OrderStemcellCreatedUserID INT NOT NULL, + PRIMARY KEY (T_OrderStemcellID), + UNIQUE KEY uq_orderstemcell_header (T_OrderStemcellT_OrderHeaderID) +); -- 2.49.1