From 34b9f3fac25bd811542eb01f96d2d293e577ecda Mon Sep 17 00:00:00 2001 From: "sas.fajri" Date: Mon, 25 May 2026 11:06:42 +0700 Subject: [PATCH] Dedup group result details --- .../Resultentry.php | 249 +++++++++++++++-- .../Resultentry.php | 32 +++ .../resultentrysoxray-westone/Resultentry.php | 253 +++++++++++++++--- 3 files changed, 474 insertions(+), 60 deletions(-) diff --git a/application/controllers/mockup/resultentrysoelectromedis-westone/Resultentry.php b/application/controllers/mockup/resultentrysoelectromedis-westone/Resultentry.php index 81ca6c76..f9a36770 100644 --- a/application/controllers/mockup/resultentrysoelectromedis-westone/Resultentry.php +++ b/application/controllers/mockup/resultentrysoelectromedis-westone/Resultentry.php @@ -1202,12 +1202,214 @@ class Resultentry extends MY_Controller $this->sys_error_db("worklist count", $this->db_onedev); exit(); } - //echo $this->db_onedev->last_query(); - - return true; - } - function saveresult() - { + //echo $this->db_onedev->last_query(); + + return true; + } + + function get_group_result_by_orderdetail($orderdetail_id) + { + $first_row = []; + $sql = "SELECT T_OrderHeaderGroupResultGroup_ResultID, + T_OrderHeaderGroupResultDetailsT_OrderHeaderID + FROM t_orderheader_group_result_details + JOIN t_orderheader_group_result ON T_OrderHeaderGroupResultID = + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' + WHERE + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' LIMIT 1"; + $query = $this->db_onedev->query($sql, [$orderdetail_id]); + if (!$query) { + return false; + } + $row_dt_group = $query->result_array(); + if (count($row_dt_group) > 0) { + $first_row = $row_dt_group[0]; + } + + $sql = "SELECT T_OrderDetailT_OrderHeaderID, T_OrderDetailT_TestID + FROM t_orderdetail + WHERE T_OrderDetailID = ? AND T_OrderDetailIsActive = 'Y' LIMIT 1"; + $query = $this->db_onedev->query($sql, [$orderdetail_id]); + if (!$query) { + return false; + } + $rows = $query->result_array(); + if (count($rows) <= 0) { + return []; + } + $orderheader_id = $rows[0]['T_OrderDetailT_OrderHeaderID']; + $test_id = $rows[0]['T_OrderDetailT_TestID']; + + $sql = "SELECT + gr.Group_ResultID, + gr.Group_ResultName, + gr.Group_ResultFlagPerTest + FROM group_resultdetail grd + JOIN group_result gr + ON grd.Group_ResultDetailGroup_ResultID = gr.Group_ResultID + AND gr.Group_ResultIsActive = 'Y' + WHERE + grd.Group_ResultDetailT_TestID = ? AND + grd.Group_ResultDetailIsActive = 'Y' + ORDER BY gr.Group_ResultID ASC + LIMIT 1"; + $query = $this->db_onedev->query($sql, [$test_id]); + if (!$query) { + return false; + } + $rows = $query->result_array(); + if (count($rows) <= 0) { + return []; + } + $target_group_result_id = $rows[0]['Group_ResultID']; + $target_group_result_name = $rows[0]['Group_ResultName']; + $target_group_flag_per_test = isset($rows[0]['Group_ResultFlagPerTest']) ? $rows[0]['Group_ResultFlagPerTest'] : 'Y'; + $target_group_test_id = $target_group_flag_per_test === 'Y' ? intval($test_id) : 0; + + $sql = "SELECT + T_OrderHeaderGroupResultID, + T_OrderHeaderGroupResultDetails + FROM t_orderheader_group_result + WHERE + T_OrderHeaderGroupResultT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultGroup_ResultID = ? AND + T_OrderHeaderGroupResultT_TestID = ? AND + T_OrderHeaderGroupResultIsActive = 'Y' + ORDER BY T_OrderHeaderGroupResultID ASC + LIMIT 1"; + $query = $this->db_onedev->query($sql, [$orderheader_id, $target_group_result_id, $target_group_test_id]); + if (!$query) { + return false; + } + $rows = $query->result_array(); + $group_result_id = 0; + $group_result_details = ''; + if (count($rows) > 0) { + $group_result_id = $rows[0]['T_OrderHeaderGroupResultID']; + $group_result_details = trim((string)$rows[0]['T_OrderHeaderGroupResultDetails']); + } else { + $sql = "INSERT INTO t_orderheader_group_result ( + T_OrderHeaderGroupResultT_OrderHeaderID, + T_OrderHeaderGroupResultGroup_ResultID, + T_OrderHeaderGroupResultGroup_ResultName, + T_OrderHeaderGroupResultT_TestID, + T_OrderHeaderGroupResultDetails, + T_OrderHeaderGroupResultCreated + ) VALUES (?, ?, ?, ?, ?, NOW())"; + $query = $this->db_onedev->query($sql, [ + $orderheader_id, + $target_group_result_id, + $target_group_result_name, + $target_group_test_id, + (string)$orderdetail_id + ]); + if (!$query) { + return false; + } + $group_result_id = intval($this->db_onedev->insert_id()); + $group_result_details = (string)$orderdetail_id; + } + + $details_list = $group_result_details === '' ? [] : explode(',', str_replace(' ', '', $group_result_details)); + if (!in_array((string)$orderdetail_id, $details_list, true)) { + $details_list[] = (string)$orderdetail_id; + $new_details = implode(',', $details_list); + $sql = "UPDATE t_orderheader_group_result + SET T_OrderHeaderGroupResultDetails = ? + WHERE T_OrderHeaderGroupResultID = ?"; + $query = $this->db_onedev->query($sql, [$new_details, $group_result_id]); + if (!$query) { + return false; + } + } + + $sql = "INSERT INTO t_orderheader_group_result_details( + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID, + T_OrderHeaderGroupResultDetailsT_OrderHeaderID, + T_OrderHeaderGroupResultDetailsT_OrderDetailID, + T_OrderHeaderGroupResultDetailsIsActive, + T_OrderHeaderGroupResultDetailsCreated, + T_OrderHeaderGroupResultDetailsLastUpdated + ) + SELECT ?, ?, ?, 'Y', NOW(), '0000-00-00 00:00:00' + FROM dual + WHERE NOT EXISTS( + SELECT 1 + FROM t_orderheader_group_result_details + WHERE + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' + )"; + $query = $this->db_onedev->query($sql, [ + $group_result_id, + $orderheader_id, + $orderdetail_id, + $group_result_id, + $orderheader_id, + $orderdetail_id + ]); + if (!$query) { + return false; + } + + $sql = "UPDATE t_orderheader_group_result_details + SET + T_OrderHeaderGroupResultDetailsIsActive = 'N', + T_OrderHeaderGroupResultDetailsLastUpdated = NOW() + WHERE + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' AND + T_OrderHeaderGroupResultDetailsID <> ( + SELECT keep_id FROM ( + SELECT MIN(T_OrderHeaderGroupResultDetailsID) AS keep_id + FROM t_orderheader_group_result_details + WHERE + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' + ) dedup + )"; + $query = $this->db_onedev->query($sql, [ + $group_result_id, + $orderheader_id, + $orderdetail_id, + $group_result_id, + $orderheader_id, + $orderdetail_id + ]); + if (!$query) { + return false; + } + + $sql = "SELECT T_OrderHeaderGroupResultGroup_ResultID, + T_OrderHeaderGroupResultDetailsT_OrderHeaderID + FROM t_orderheader_group_result_details + JOIN t_orderheader_group_result ON T_OrderHeaderGroupResultID = + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' + WHERE + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' LIMIT 1"; + $query = $this->db_onedev->query($sql, [$orderdetail_id]); + if (!$query) { + return false; + } + $row_dt_group = $query->result_array(); + if (count($row_dt_group) > 0) { + $first_row = $row_dt_group[0]; + } + + return $first_row; + } + function saveresult() + { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; @@ -1638,29 +1840,18 @@ class Resultentry extends MY_Controller exit; } - $sql = "SELECT T_OrderHeaderGroupResultGroup_ResultID, - T_OrderHeaderGroupResultDetailsT_OrderHeaderID - FROM t_orderheader_group_result_details - JOIN t_orderheader_group_result ON T_OrderHeaderGroupResultID = - T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID AND - T_OrderHeaderGroupResultDetailsIsActive = 'Y' - WHERE - T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND - T_OrderHeaderGroupResultDetailsIsActive = 'Y' LIMIT 1"; - $query = $this->db_onedev->query($sql, [$orderdetail_id]); - if (!$query) { - $this->sys_error_db("single verification select group result", $this->db_onedev); - exit(); - } - - $row_dt_group = $query->result_array(); - //echo $this->db_onedev->last_query(); - if (count($row_dt_group) > 0) { - $ohid = $row_dt_group[0]["T_OrderHeaderGroupResultDetailsT_OrderHeaderID"]; - $gid = $row_dt_group[0]["T_OrderHeaderGroupResultGroup_ResultID"]; - $this->verification_by_group($ohid, $gid); - } else { - $this->sys_error_db("group result tidak ditemukan", $this->db_onedev); + $row_dt_group = $this->get_group_result_by_orderdetail($orderdetail_id); + if ($row_dt_group === false) { + $this->sys_error_db("single verification select group result", $this->db_onedev); + exit(); + } + + if (count($row_dt_group) > 0) { + $ohid = $row_dt_group["T_OrderHeaderGroupResultDetailsT_OrderHeaderID"]; + $gid = $row_dt_group["T_OrderHeaderGroupResultGroup_ResultID"]; + $this->verification_by_group($ohid, $gid); + } else { + $this->sys_error_db("group result tidak ditemukan", $this->db_onedev); exit(); } } diff --git a/application/controllers/mockup/resultentrysoothers-cpone-v9/Resultentry.php b/application/controllers/mockup/resultentrysoothers-cpone-v9/Resultentry.php index 927d7720..f2b1dc68 100644 --- a/application/controllers/mockup/resultentrysoothers-cpone-v9/Resultentry.php +++ b/application/controllers/mockup/resultentrysoothers-cpone-v9/Resultentry.php @@ -4781,6 +4781,38 @@ class Resultentry extends MY_Controller return false; } + $sql = "UPDATE t_orderheader_group_result_details + SET + T_OrderHeaderGroupResultDetailsIsActive = 'N', + T_OrderHeaderGroupResultDetailsLastUpdated = NOW() + WHERE + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' AND + T_OrderHeaderGroupResultDetailsID <> ( + SELECT keep_id FROM ( + SELECT MIN(T_OrderHeaderGroupResultDetailsID) AS keep_id + FROM t_orderheader_group_result_details + WHERE + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' + ) dedup + )"; + $query = $this->db_onedev->query($sql, [ + $group_result_id, + $orderheader_id, + $orderdetail_id, + $group_result_id, + $orderheader_id, + $orderdetail_id + ]); + if (!$query) { + return false; + } + $sql = "SELECT T_OrderHeaderGroupResultGroup_ResultID, T_OrderHeaderGroupResultDetailsT_OrderHeaderID FROM t_orderheader_group_result_details diff --git a/application/controllers/mockup/resultentrysoxray-westone/Resultentry.php b/application/controllers/mockup/resultentrysoxray-westone/Resultentry.php index 7da11fc3..0589b95a 100644 --- a/application/controllers/mockup/resultentrysoxray-westone/Resultentry.php +++ b/application/controllers/mockup/resultentrysoxray-westone/Resultentry.php @@ -1059,29 +1059,18 @@ class Resultentry extends MY_Controller exit; } - $sql = "SELECT T_OrderHeaderGroupResultGroup_ResultID, - T_OrderHeaderGroupResultDetailsT_OrderHeaderID - FROM t_orderheader_group_result_details - JOIN t_orderheader_group_result ON T_OrderHeaderGroupResultID = - T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID AND - T_OrderHeaderGroupResultDetailsIsActive = 'Y' - WHERE - T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND - T_OrderHeaderGroupResultDetailsIsActive = 'Y' LIMIT 1"; - $query = $this->db_onedev->query($sql, [$orderdetail_id]); - if (!$query) { - $this->sys_error_db("single verification select group result", $this->db_onedev); - exit(); - } - - $row_dt_group = $query->result_array(); - //echo $this->db_onedev->last_query(); - if (count($row_dt_group) > 0) { - $ohid = $row_dt_group[0]["T_OrderHeaderGroupResultDetailsT_OrderHeaderID"]; - $gid = $row_dt_group[0]["T_OrderHeaderGroupResultGroup_ResultID"]; - $this->verification_by_group($ohid, $gid); - } else { - $this->sys_error_db("group result tidak ditemukan", $this->db_onedev); + $row_dt_group = $this->get_group_result_by_orderdetail($orderdetail_id); + if ($row_dt_group === false) { + $this->sys_error_db("single verification select group result", $this->db_onedev); + exit(); + } + + if (count($row_dt_group) > 0) { + $ohid = $row_dt_group["T_OrderHeaderGroupResultDetailsT_OrderHeaderID"]; + $gid = $row_dt_group["T_OrderHeaderGroupResultGroup_ResultID"]; + $this->verification_by_group($ohid, $gid); + } else { + $this->sys_error_db("group result tidak ditemukan", $this->db_onedev); exit(); } } @@ -1410,14 +1399,216 @@ class Resultentry extends MY_Controller $this->sys_error_db("worklist count", $this->db_onedev); exit(); } - //echo $this->db_onedev->last_query(); - - return true; - } - - - - function deletetrx() + //echo $this->db_onedev->last_query(); + + return true; + } + + function get_group_result_by_orderdetail($orderdetail_id) + { + $first_row = []; + $sql = "SELECT T_OrderHeaderGroupResultGroup_ResultID, + T_OrderHeaderGroupResultDetailsT_OrderHeaderID + FROM t_orderheader_group_result_details + JOIN t_orderheader_group_result ON T_OrderHeaderGroupResultID = + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' + WHERE + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' LIMIT 1"; + $query = $this->db_onedev->query($sql, [$orderdetail_id]); + if (!$query) { + return false; + } + $row_dt_group = $query->result_array(); + if (count($row_dt_group) > 0) { + $first_row = $row_dt_group[0]; + } + + $sql = "SELECT T_OrderDetailT_OrderHeaderID, T_OrderDetailT_TestID + FROM t_orderdetail + WHERE T_OrderDetailID = ? AND T_OrderDetailIsActive = 'Y' LIMIT 1"; + $query = $this->db_onedev->query($sql, [$orderdetail_id]); + if (!$query) { + return false; + } + $rows = $query->result_array(); + if (count($rows) <= 0) { + return []; + } + $orderheader_id = $rows[0]['T_OrderDetailT_OrderHeaderID']; + $test_id = $rows[0]['T_OrderDetailT_TestID']; + + $sql = "SELECT + gr.Group_ResultID, + gr.Group_ResultName, + gr.Group_ResultFlagPerTest + FROM group_resultdetail grd + JOIN group_result gr + ON grd.Group_ResultDetailGroup_ResultID = gr.Group_ResultID + AND gr.Group_ResultIsActive = 'Y' + WHERE + grd.Group_ResultDetailT_TestID = ? AND + grd.Group_ResultDetailIsActive = 'Y' + ORDER BY gr.Group_ResultID ASC + LIMIT 1"; + $query = $this->db_onedev->query($sql, [$test_id]); + if (!$query) { + return false; + } + $rows = $query->result_array(); + if (count($rows) <= 0) { + return []; + } + $target_group_result_id = $rows[0]['Group_ResultID']; + $target_group_result_name = $rows[0]['Group_ResultName']; + $target_group_flag_per_test = isset($rows[0]['Group_ResultFlagPerTest']) ? $rows[0]['Group_ResultFlagPerTest'] : 'Y'; + $target_group_test_id = $target_group_flag_per_test === 'Y' ? intval($test_id) : 0; + + $sql = "SELECT + T_OrderHeaderGroupResultID, + T_OrderHeaderGroupResultDetails + FROM t_orderheader_group_result + WHERE + T_OrderHeaderGroupResultT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultGroup_ResultID = ? AND + T_OrderHeaderGroupResultT_TestID = ? AND + T_OrderHeaderGroupResultIsActive = 'Y' + ORDER BY T_OrderHeaderGroupResultID ASC + LIMIT 1"; + $query = $this->db_onedev->query($sql, [$orderheader_id, $target_group_result_id, $target_group_test_id]); + if (!$query) { + return false; + } + $rows = $query->result_array(); + $group_result_id = 0; + $group_result_details = ''; + if (count($rows) > 0) { + $group_result_id = $rows[0]['T_OrderHeaderGroupResultID']; + $group_result_details = trim((string)$rows[0]['T_OrderHeaderGroupResultDetails']); + } else { + $sql = "INSERT INTO t_orderheader_group_result ( + T_OrderHeaderGroupResultT_OrderHeaderID, + T_OrderHeaderGroupResultGroup_ResultID, + T_OrderHeaderGroupResultGroup_ResultName, + T_OrderHeaderGroupResultT_TestID, + T_OrderHeaderGroupResultDetails, + T_OrderHeaderGroupResultCreated + ) VALUES (?, ?, ?, ?, ?, NOW())"; + $query = $this->db_onedev->query($sql, [ + $orderheader_id, + $target_group_result_id, + $target_group_result_name, + $target_group_test_id, + (string)$orderdetail_id + ]); + if (!$query) { + return false; + } + $group_result_id = intval($this->db_onedev->insert_id()); + $group_result_details = (string)$orderdetail_id; + } + + $details_list = $group_result_details === '' ? [] : explode(',', str_replace(' ', '', $group_result_details)); + if (!in_array((string)$orderdetail_id, $details_list, true)) { + $details_list[] = (string)$orderdetail_id; + $new_details = implode(',', $details_list); + $sql = "UPDATE t_orderheader_group_result + SET T_OrderHeaderGroupResultDetails = ? + WHERE T_OrderHeaderGroupResultID = ?"; + $query = $this->db_onedev->query($sql, [$new_details, $group_result_id]); + if (!$query) { + return false; + } + } + + $sql = "INSERT INTO t_orderheader_group_result_details( + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID, + T_OrderHeaderGroupResultDetailsT_OrderHeaderID, + T_OrderHeaderGroupResultDetailsT_OrderDetailID, + T_OrderHeaderGroupResultDetailsIsActive, + T_OrderHeaderGroupResultDetailsCreated, + T_OrderHeaderGroupResultDetailsLastUpdated + ) + SELECT ?, ?, ?, 'Y', NOW(), '0000-00-00 00:00:00' + FROM dual + WHERE NOT EXISTS( + SELECT 1 + FROM t_orderheader_group_result_details + WHERE + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' + )"; + $query = $this->db_onedev->query($sql, [ + $group_result_id, + $orderheader_id, + $orderdetail_id, + $group_result_id, + $orderheader_id, + $orderdetail_id + ]); + if (!$query) { + return false; + } + + $sql = "UPDATE t_orderheader_group_result_details + SET + T_OrderHeaderGroupResultDetailsIsActive = 'N', + T_OrderHeaderGroupResultDetailsLastUpdated = NOW() + WHERE + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' AND + T_OrderHeaderGroupResultDetailsID <> ( + SELECT keep_id FROM ( + SELECT MIN(T_OrderHeaderGroupResultDetailsID) AS keep_id + FROM t_orderheader_group_result_details + WHERE + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' + ) dedup + )"; + $query = $this->db_onedev->query($sql, [ + $group_result_id, + $orderheader_id, + $orderdetail_id, + $group_result_id, + $orderheader_id, + $orderdetail_id + ]); + if (!$query) { + return false; + } + + $sql = "SELECT T_OrderHeaderGroupResultGroup_ResultID, + T_OrderHeaderGroupResultDetailsT_OrderHeaderID + FROM t_orderheader_group_result_details + JOIN t_orderheader_group_result ON T_OrderHeaderGroupResultID = + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' + WHERE + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? AND + T_OrderHeaderGroupResultDetailsIsActive = 'Y' LIMIT 1"; + $query = $this->db_onedev->query($sql, [$orderdetail_id]); + if (!$query) { + return false; + } + $row_dt_group = $query->result_array(); + if (count($row_dt_group) > 0) { + $first_row = $row_dt_group[0]; + } + + return $first_row; + } + + + + function deletetrx() { if (!$this->isLogin) { $this->sys_error("Invalid Token");