diff --git a/application/controllers/mockup/fo/supervisor_v12/Order.php b/application/controllers/mockup/fo/supervisor_v12/Order.php index afb122ba..867167f7 100644 --- a/application/controllers/mockup/fo/supervisor_v12/Order.php +++ b/application/controllers/mockup/fo/supervisor_v12/Order.php @@ -172,6 +172,8 @@ class Order extends MY_Controller } $data_group = $query->result_array(); + $active_group_result_ids = []; + $group_detail_maps = []; $debug_query_get = $this->db_smartone->last_query(); foreach ($data_group as $key => $value) { @@ -184,6 +186,7 @@ class Order extends MY_Controller $log_error = $this->insert_log_error($xsql, $prm_log, $dt_log); } $existing_group = $query->result_array(); + $group_result_id = 0; if (count($existing_group) == 0) { $sql = "INSERT INTO t_orderheader_group_result ( @@ -218,7 +221,9 @@ class Order extends MY_Controller $sql = "UPDATE t_orderheader_group_result SET T_OrderHeaderGroupResultGroup_ResultName = ?, T_OrderHeaderGroupResultT_TestID = ?, - T_OrderHeaderGroupResultDetails = ? + T_OrderHeaderGroupResultDetails = ?, + T_OrderHeaderGroupResultIsActive = 'Y', + T_OrderHeaderGroupResultDeleted = '0000-00-00 00:00:00' WHERE T_OrderHeaderGroupResultT_OrderHeaderID = ? AND T_OrderHeaderGroupResultGroup_ResultID = ? AND IFNULL(T_OrderHeaderGroupResultT_TestID, 0) = ?"; @@ -242,9 +247,139 @@ class Order extends MY_Controller ]; return $return; } + $group_result_id = intval($existing_group[0]['T_OrderHeaderGroupResultID']); } + if ($group_result_id <= 0) { + $group_result_id = intval($this->db_smartone->insert_id()); + } + + if ($group_result_id > 0) { + $active_group_result_ids[] = $group_result_id; + } + + $detail_ids = []; + if (isset($value['T_OrderDetailIDs']) && trim($value['T_OrderDetailIDs']) !== '') { + $raw_detail_ids = explode(',', str_replace(' ', '', $value['T_OrderDetailIDs'])); + foreach ($raw_detail_ids as $detail_id) { + $detail_id = intval($detail_id); + if ($detail_id > 0) { + $detail_ids[$detail_id] = $detail_id; + } + } + } + $group_detail_maps[] = [ + 'group_result_id' => $group_result_id, + 'detail_ids' => array_values($detail_ids) + ]; + } + + if (count($active_group_result_ids) > 0) { + $active_group_result_ids = array_unique($active_group_result_ids); + $in_active_groups = implode(',', $active_group_result_ids); + $sql = "UPDATE t_orderheader_group_result + SET T_OrderHeaderGroupResultIsActive = 'N', + T_OrderHeaderGroupResultDeleted = NOW() + WHERE T_OrderHeaderGroupResultT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultID NOT IN ({$in_active_groups})"; + $query = $this->db_smartone->query($sql, [$order_id]); + } + else { + $sql = "UPDATE t_orderheader_group_result + SET T_OrderHeaderGroupResultIsActive = 'N', + T_OrderHeaderGroupResultDeleted = NOW() + WHERE T_OrderHeaderGroupResultT_OrderHeaderID = ?"; + $query = $this->db_smartone->query($sql, [$order_id]); + } + if (!$query) { + $dt_log = ['data' => $order_id, 'error' => $this->db_smartone->error()]; + $prm_log = ['DEACTIVATE_T_ORDERHEADER_GROUP_RESULT', 'order/insert_group_order']; + $xsql = $this->db_smartone->last_query(); + $this->insert_log_error($xsql, $prm_log, $dt_log); + $return = [ + "status" => false, + "message" => "Terjadi kesalahan saat sinkronisasi data group order", + "data" => [] + ]; + return $return; + } + + $sql = "UPDATE t_orderheader_group_result_details + SET T_OrderHeaderGroupResultDetailsIsActive = 'N', + T_OrderHeaderGroupResultDetailsLastUpdated = NOW() + WHERE T_OrderHeaderGroupResultDetailsT_OrderHeaderID = ?"; + $query = $this->db_smartone->query($sql, [$order_id]); + if (!$query) { + $dt_log = ['data' => $order_id, 'error' => $this->db_smartone->error()]; + $prm_log = ['DEACTIVATE_T_ORDERHEADER_GROUP_RESULT_DETAILS', 'order/insert_group_order']; + $xsql = $this->db_smartone->last_query(); + $this->insert_log_error($xsql, $prm_log, $dt_log); + $return = [ + "status" => false, + "message" => "Terjadi kesalahan saat sinkronisasi detail group order", + "data" => [] + ]; + return $return; + } + + foreach ($group_detail_maps as $group_map) { + $group_result_id = intval($group_map['group_result_id']); + foreach ($group_map['detail_ids'] as $detail_id) { + $sql = "SELECT T_OrderHeaderGroupResultDetailsID + FROM t_orderheader_group_result_details + WHERE T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultDetailsT_OrderDetailID = ? + LIMIT 1"; + $query = $this->db_smartone->query($sql, [$group_result_id, $order_id, $detail_id]); + if (!$query) { + $dt_log = ['data' => $group_map, 'error' => $this->db_smartone->error()]; + $prm_log = ['SELECT_T_ORDERHEADER_GROUP_RESULT_DETAILS', 'order/insert_group_order']; + $xsql = $this->db_smartone->last_query(); + $this->insert_log_error($xsql, $prm_log, $dt_log); + $return = [ + "status" => false, + "message" => "Terjadi kesalahan saat sinkronisasi detail group order", + "data" => [] + ]; + return $return; + } + $existing_detail = $query->result_array(); + if (count($existing_detail) > 0) { + $sql = "UPDATE t_orderheader_group_result_details + SET T_OrderHeaderGroupResultDetailsIsActive = 'Y', + T_OrderHeaderGroupResultDetailsLastUpdated = NOW() + WHERE T_OrderHeaderGroupResultDetailsID = ?"; + $query = $this->db_smartone->query($sql, [$existing_detail[0]['T_OrderHeaderGroupResultDetailsID']]); + } + else { + $sql = "INSERT INTO t_orderheader_group_result_details( + T_OrderHeaderGroupResultDetailsT_OrderHeaderGroupResultID, + T_OrderHeaderGroupResultDetailsT_OrderHeaderID, + T_OrderHeaderGroupResultDetailsT_OrderDetailID, + T_OrderHeaderGroupResultDetailsIsActive, + T_OrderHeaderGroupResultDetailsCreated, + T_OrderHeaderGroupResultDetailsLastUpdated + ) + VALUES(?, ?, ?, 'Y', NOW(), '0000-00-00 00:00:00')"; + $query = $this->db_smartone->query($sql, [$group_result_id, $order_id, $detail_id]); + } + if (!$query) { + $dt_log = ['data' => $group_map, 'error' => $this->db_smartone->error()]; + $prm_log = ['UPSERT_T_ORDERHEADER_GROUP_RESULT_DETAILS', 'order/insert_group_order']; + $xsql = $this->db_smartone->last_query(); + $this->insert_log_error($xsql, $prm_log, $dt_log); + $return = [ + "status" => false, + "message" => "Terjadi kesalahan saat menyimpan detail group order", + "data" => [] + ]; + return $return; + } + } + } + $return['data'] = $data_group; return $return; } diff --git a/application/controllers/mockup/resultentrysoothers-cpone-v9/Resultentry.php b/application/controllers/mockup/resultentrysoothers-cpone-v9/Resultentry.php index d5ee94f5..665251f2 100644 --- a/application/controllers/mockup/resultentrysoothers-cpone-v9/Resultentry.php +++ b/application/controllers/mockup/resultentrysoothers-cpone-v9/Resultentry.php @@ -4342,29 +4342,17 @@ 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 { + $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(); } @@ -4523,8 +4511,8 @@ class Resultentry extends MY_Controller return true; } - function verification_by_group($order_id, $group_id) - { + function verification_by_group($order_id, $group_id) + { $sql = "SELECT COUNT(*) as total_all FROM t_orderdetail JOIN t_orderheader_group_result_details ON @@ -4593,8 +4581,122 @@ class Resultentry extends MY_Controller } //echo $this->db_onedev->last_query(); - return true; - } + return true; + } + + function get_group_result_by_orderdetail($orderdetail_id) + { + $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) { + return $row_dt_group[0]; + } + + $sql = "SELECT T_OrderDetailT_OrderHeaderID + 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']; + + $sql = "SELECT T_OrderHeaderGroupResultID, T_OrderHeaderGroupResultDetails + FROM t_orderheader_group_result + WHERE + T_OrderHeaderGroupResultT_OrderHeaderID = ? AND + T_OrderHeaderGroupResultIsActive = 'Y' + ORDER BY T_OrderHeaderGroupResultID ASC LIMIT 1"; + $query = $this->db_onedev->query($sql, [$orderheader_id]); + if (!$query) { + return false; + } + $rows = $query->result_array(); + if (count($rows) <= 0) { + return []; + } + $group_result_id = $rows[0]['T_OrderHeaderGroupResultID']; + $group_result_details = trim((string)$rows[0]['T_OrderHeaderGroupResultDetails']); + $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 = "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) { + return $row_dt_group[0]; + } + + return []; + } function savefisik() { @@ -5010,29 +5112,17 @@ 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 { + $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(); }