Sync order group result mapping

This commit is contained in:
sas.fajri
2026-05-20 15:54:40 +07:00
parent 0138338948
commit d1eaef185d
2 changed files with 276 additions and 51 deletions

View File

@@ -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;
}

View File

@@ -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();
}