base_url = "/one-api/etl/mgmmcu"; $this->db->query("use one_etl"); } function non_active_exist($orderHeaderID, $mgmMcuID, $type) { $sql = "UPDATE mgm_header SET Mgm_HeaderIsActive = 'N', Mgm_HeaderLastUpdated = NOW() WHERE Mgm_HeaderType = ? AND Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderT_OrderHeaderID = ?"; $qry = $this->db->query($sql, [$type, $mgmMcuID, $orderHeaderID]); //echo $this->db->last_query(); $sql = "UPDATE mgm_detail JOIN mgm_header ON Mgm_DetailMgm_HeaderID = Mgm_HeaderID AND Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderT_OrderHeaderID = ? AND Mgm_HeaderIsActive = 'N' SET Mgm_DetailIsActive = 'N', Mgm_DetailLastUpdated = NOW() WHERE Mgm_DetailIsActive = 'Y'"; $qry = $this->db->query($sql, [$mgmMcuID, $orderHeaderID]); //echo $this->db->last_query(); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => "Error is active N | " . $this->db->error()["message"] ]); exit; } return true; } function lab_kelainan($orderHeaderID, $mgmMcuID) { $this->non_active_exist($orderHeaderID, $mgmMcuID, 'L'); $sql = "select T_OrderHeaderID,T_OrderHeaderLabNumber, T_OrderHeaderLabNumberExt, T_TestName, T_OrderDetailResult, T_OrderDetailNat_MethodeID, T_OrderDetailNat_MethodeID, T_OrderDetailNat_MethodeName, T_OrderDetailMinValue, T_OrderDetailMaxValue, T_OrderDetailMinValueInclusive, T_OrderDetailMaxValueInclusive, Mcu_SummaryLabValue, Mcu_SummaryLabNat_MethodeID, Mcu_SummaryLabWithMethode, Mcu_SummaryLabType, Mcu_SummaryLabIsNormalValue, Mcu_KelainanID, Mcu_KelainanName, Mcu_KelainanClasification, Nat_TestCode, mcu_kelainangroup.*, T_OrderHeaderM_PatientAge, IFNULL(M_PatientKedudukan,'') M_PatientKedudukan, M_SexCode from one.t_orderdetail join one.t_orderheader on T_OrderHeaderID = ? and T_OrderHeaderID = T_OrderDetailT_OrderHeaderID and T_OrderDetailIsActive = 'Y' join one.m_patient on T_OrderHeaderM_PatientID = M_PatientID join one.m_sex on M_PatientM_SexID = M_SexID join one.t_test on T_OrderDetailT_TestID = T_TestID join one.nat_test ON T_TestNat_TestID = Nat_TestID join mcu_summarylab on T_TestNat_TestID = Mcu_SummaryLabNat_TestID AND Mcu_SummaryLabIsActive = 'Y' join mcu_kelainan on Mcu_SummaryLabMcu_KelainanID = Mcu_KelainanID join mcu_kelainangroup on Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID"; $qry = $this->db->query($sql, [$orderHeaderID]); //echo $this->db->last_query(); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => "Error get order | " . $this->db->error()["message"] ]); exit; } $rows = $qry->result_array(); $results = []; foreach ($rows as $r) { //loop dan cari kelainan //Nat_TestID, WithMethode, terhadap NormalValue atau AdHoc Value //rule penentuan // print_r($r); $sql = "SELECT COUNT(*) as cnt, Mgm_HeaderID FROM mgm_header WHERE Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderT_OrderHeaderID = ? AND Mgm_HeaderNat_TestCode = ? AND Mgm_HeaderType = 'L' AND Mgm_HeaderIsActive = 'Y'"; $query = $this->db->query($sql, array($mgmMcuID, $orderHeaderID, $r['Nat_TestCode'])); //echo $this->db->last_query(); $row_header_exist = $query->row_array(); $header_id = 0; if ($row_header_exist['cnt'] == 0) { $data_header = array( 'Mgm_HeaderMgm_McuID' => $mgmMcuID, 'Mgm_HeaderT_OrderHeaderID' => $orderHeaderID, 'Mgm_HeaderNat_TestCode' => $r['Nat_TestCode'], 'Mgm_HeaderType' => 'L', 'Mgm_HeaderCreated' => date("Y-m-d H:i:s", time()), 'Mgm_HeaderT_OrderHeaderM_PatientAge' => $r['T_OrderHeaderM_PatientAge'], 'Mgm_HeaderM_PatientLocation' => $r['M_PatientKedudukan'], 'Mgm_HeaderM_SexCode' => $r['M_SexCode'] ); $this->db->insert('mgm_header', $data_header); //echo $this->db->last_query(); $header_id = $this->db->insert_id(); } $result_value = $r['T_OrderDetailResult']; $value_comparison = 0; //echo $r['Mcu_SummaryLabIsNormalValue']; $kelainan = []; $notavailable = []; if (trim($result_value) == 'NA') { $notavailable = $r; } elseif ($r['Mcu_SummaryLabIsNormalValue'] == 'Y') { if ($r['Mcu_SummaryLabType'] == '<' || $r['Mcu_SummaryLabType'] == '<=') { $value_comparison = $r['T_OrderDetailMinValue']; } if ($r['Mcu_SummaryLabType'] == '>' || $r['Mcu_SummaryLabType'] == '>=') { $value_comparison = $r['T_OrderDetailMaxValue']; } //echo "Y"; if ($r['Mcu_SummaryLabWithMethode'] == 'N' && $this->dynamic_comparison($result_value, $r['Mcu_SummaryLabType'], $value_comparison)) { //echo $r['T_TestName']." : ".$r['Mcu_KelainanName'].", "; $kelainan = $r; $results[] = array('test' => $r['T_TestName'], 'nat_test' => $r['Nat_TestCode'], 'kelainan' => $r['Mcu_KelainanName']); } } else { $value_comparison = $r['Mcu_SummaryLabValue']; if ($r['Mcu_SummaryLabType'] == '!=' || $r['Mcu_SummaryLabType'] == '==') { if ($this->dynamic_comparison($result_value, $r['Mcu_SummaryLabType'], $value_comparison)) { //echo $r['T_TestName']." : ".$r['Mcu_KelainanName'].", "; $kelainan = $r; $results[] = array('test' => $r['T_TestName'], 'nat_test' => $r['Nat_TestCode'], 'kelainan' => $r['Mcu_KelainanName']); } } else { if (is_numeric($result_value) && $this->dynamic_comparison($result_value, $r['Mcu_SummaryLabType'], $value_comparison)) { //echo $r['T_TestName']." : ".$r['Mcu_KelainanName'].", "; $kelainan = $r; $results[] = array('test' => $r['T_TestName'], 'nat_test' => $r['Nat_TestCode'], 'kelainan' => $r['Mcu_KelainanName']); } } } $kelainan_id = 0; $group_kelainan_id = 0; if (count($notavailable) > 0) { $kelainan_id = -1; } elseif (count($kelainan) > 0) { $kelainan_id = $r['Mcu_KelainanID']; $group_kelainan_id = $r['Mcu_KelainanGroupID']; } if ($kelainan_id > 0) { $sql = "UPDATE mgm_header SET Mgm_HeaderIsNormal = 'N', Mgm_HeaderLastUpdated = NOW() WHERE Mgm_HeaderID = ?"; $query = $this->db->query($sql, array($header_id)); $sql = "SELECT COUNT(*) as cnt, Mgm_DetailID FROM mgm_detail WHERE Mgm_DetailMgm_HeaderID = ? AND Mgm_DetailMcu_KelainanID = ? AND Mgm_DetailIsActive = 'Y'"; $query = $this->db->query($sql, array($header_id, $kelainan_id)); //echo $this->db->last_query(); $row_exist = $query->row_array(); if ($row_exist['cnt'] == 0) { $data = array( 'Mgm_DetailMgm_HeaderID' => $header_id, 'Mgm_DetailMcu_KelainanID' => $kelainan_id, 'Mgm_DetailMcu_KelainanGroupID' => $group_kelainan_id, 'Mgm_DetailCreated' => date("Y-m-d H:i:s", time()) ); $this->db->insert('mgm_detail', $data); //echo $this->db->last_query(); } else { $data = array( 'Mgm_DetailMgm_HeaderID' => $header_id, 'Mgm_DetailMcu_KelainanID' => $kelainan_id, 'Mgm_DetailMcu_KelainanGroupID' => $group_kelainan_id, 'Mgm_DetailIsActive' => 'Y', 'Mgm_DetailLastUpdated' => date("Y-m-d H:i:s", time()) ); $this->db->where('Mgm_DetailID', $row_exist['Mgm_DetailID']); $this->db->update('mgm_detail', $data); } } else { if ($kelainan_id == -1) { $sql = "UPDATE mgm_header SET Mgm_HeaderIsNormal = 'X', Mgm_HeaderLastUpdated = NOW() WHERE Mgm_HeaderID = ?"; $query = $this->db->query($sql, array($header_id)); } } } $sql = "UPDATE mcu_order SET Mcu_OrderStatusLab = 'Y', Mcu_OrderLastUpdated = NOW(), Mcu_OrderStatusLabDateTime = NOW() WHERE Mcu_OrderMgm_McuID = ? AND Mcu_OrderT_OrderHeaderID = ?"; $qry = $this->db->query($sql, [$mgmMcuID, $orderHeaderID]); $this->statusDone($mgmMcuID, $orderHeaderID); //echo json_encode($results); //return $results; } function nonlab_kelainan($orderHeaderID, $mgmMcuID) { $this->non_active_exist($orderHeaderID, $mgmMcuID, 'NL'); $sql = "SELECT Nat_TestID, Nat_TestCode, T_TestName, So_ResultEntryCategoryResultValue, IFNULL(Mcu_SummaryNonlabMcu_KelainanID,0) as Mcu_SummaryNonlabMcu_KelainanID, IFNULL(Mcu_KelainanGroupID,0) as Mcu_KelainanGroupID, T_OrderHeaderM_PatientAge, IFNULL(M_PatientKedudukan,'') M_PatientKedudukan, M_SexCode FROM one.so_resultentry_category_result JOIN one.so_resultentry ON So_ResultEntryCategoryResultSo_ResultEntryID = So_ResultEntryID AND So_ResultEntryT_OrderHeaderID = ? JOIN one.t_orderheader ON T_OrderHeaderID = So_ResultEntryT_OrderHeaderID JOIN one.t_orderdetail ON T_OrderDetailID = SO_ResultENtryT_OrderDetailID AND T_OrderDetailIsActive = 'Y' join one.m_patient on T_OrderHeaderM_PatientID = M_PatientID join one.m_sex on M_PatientM_SexID = M_SexID JOIN one.t_test ON T_TestID = T_OrderDetailT_TestID JOIN one.nat_test ON T_TestNat_TestID = Nat_TestID JOIN mcu_summarynonlab ON Mcu_SummaryNonlabNat_TestID = Nat_TestID AND FIND_IN_SET(So_ResultEntryCategoryResultValue,Mcu_SummaryNonlabValue) <> 0 LEFT JOIN mcu_kelainan ON Mcu_SummaryNonlabMcu_KelainanID = Mcu_KelainanID LEFT JOIN mcu_kelainangroup ON Mcu_KelainanMcu_KelainanGroupID = Mcu_KelainanGroupID WHERE So_ResultEntryCategoryResultIsActive = 'Y' GROUP BY So_ResultEntryCategoryResultID"; $query = $this->db->query($sql, array($orderHeaderID)); // echo $this->db->last_query(); $datas = $query->result_array(); $header_id = 0; foreach ($datas as $key => $value) { $sql = "SELECT COUNT(*) as cnt, Mgm_HeaderID FROM mgm_header WHERE Mgm_HeaderT_OrderHeaderID = ? AND Mgm_HeaderMgm_McuID = ? AND Mgm_HeaderNat_TestCode = ? AND Mgm_HeaderIsActive = 'Y'"; $query = $this->db->query($sql, array($orderHeaderID, $mgmMcuID, $value['Nat_TestCode'])); $exist_data = $query->row_array(); //print_r($exist_data); if ($exist_data['cnt'] == 0) { $data_header = array( 'Mgm_HeaderMgm_McuID' => $mgmMcuID, 'Mgm_HeaderT_OrderHeaderID' => $orderHeaderID, 'Mgm_HeaderNat_TestCode' => $value['Nat_TestCode'], 'Mgm_HeaderType' => 'NL', 'Mgm_HeaderCreated' => date("Y-m-d H:i:s", time()), 'Mgm_HeaderT_OrderHeaderM_PatientAge' => $value['T_OrderHeaderM_PatientAge'], 'Mgm_HeaderM_PatientLocation' => $value['M_PatientKedudukan'], 'Mgm_HeaderM_SexCode' => $value['M_SexCode'] ); $this->db->insert('mgm_header', $data_header); // echo $this->db->last_query(); $header_id = $this->db->insert_id(); } else { $header_id = $exist_data['Mgm_HeaderID']; } $kelainan_id = $value['Mcu_SummaryNonlabMcu_KelainanID']; //echo $kelainan_id; if ($kelainan_id > 0) { $sql = "SELECT COUNT(*) as cnt, Mgm_DetailID FROM mgm_detail WHERE Mgm_DetailMgm_HeaderID = ? AND Mgm_DetailMcu_KelainanID = ? AND Mgm_DetailIsActive = 'Y'"; $query = $this->db->query($sql, array($header_id, $kelainan_id)); //echo $this->db->last_query(); $row_exist = $query->row_array(); //print_r($row_exist); if ($row_exist['cnt'] == 0) { $data = array( 'Mgm_DetailMgm_HeaderID' => $header_id, 'Mgm_DetailMcu_KelainanID' => $kelainan_id, 'Mgm_DetailMcu_KelainanGroupID' => $value['Mcu_KelainanGroupID'], 'Mgm_DetailCreated' => date("Y-m-d H:i:s", time()) ); $this->db->insert('mgm_detail', $data); //echo $this->db->last_query(); } else { $data = array( 'Mgm_DetailMgm_HeaderID' => $header_id, 'Mgm_DetailMcu_KelainanID' => $kelainan_id, 'Mgm_DetailMcu_KelainanGroupID' => $value['Mcu_KelainanGroupID'], 'Mgm_DetailIsActive' => 'Y', 'Mgm_DetailLastUpdated' => date("Y-m-d H:i:s", time()) ); $this->db->where('Mgm_DetailID', $row_exist['Mgm_DetailID']); $this->db->update('mgm_detail', $data); } } $sql = "UPDATE mgm_header SET Mgm_HeaderIsNormal = 'N', Mgm_HeaderLastUpdated = NOW() WHERE Mgm_HeaderID = ?"; $query = $this->db->query($sql, array($header_id)); } $sql = "UPDATE mcu_order SET Mcu_OrderStatusNonLab = 'Y', Mcu_OrderLastUpdated = NOW(), Mcu_OrderStatusNonLabDateTime = NOW() WHERE Mcu_OrderMgm_McuID = ? AND Mcu_OrderT_OrderHeaderID = ?"; $qry = $this->db->query($sql, [$mgmMcuID, $orderHeaderID]); $this->statusDone($mgmMcuID, $orderHeaderID); //echo json_encode($results); // echo json_encode(["status" => "OK", "message" => ""]); } function dynamic_comparison($varleft, $op, $varright) { switch ($op) { case "=": return $varleft == $varright; case "!=": return $varleft != $varright; case ">=": return $varleft >= $varright; case "<=": return $varleft <= $varright; case ">": return $varleft > $varright; case "<": return $varleft < $varright; default: return true; } } function generate_kelainan_lab($Mgm_McuID, $orderHeaderID) { // Mcu_OrderStatusFisik $sql = "SELECT * FROM one_etl.mcu_order WHERE Mcu_OrderMgm_McuID = ? AND Mcu_OrderT_OrderHeaderID = ?"; $qry = $this->db->query( $sql, [$Mgm_McuID, $orderHeaderID] ); if (!$qry) { // echo "Error :" . $this->db->error()["message"]; // echo $this->db->last_query(); $this->sys_error_db("Error cek mcu order riwayat"); exit; } $cek = $qry->result_array(); if (count($cek) > 0) { if ($cek[0]['Mcu_OrderStatusLab'] == 'Y') { $this->statusDone($Mgm_McuID, $orderHeaderID); $this->sys_ok('Already generated'); exit; } } $this->lab_kelainan($orderHeaderID, $Mgm_McuID); echo json_encode(["status" => "OK", "message" => "Success"]); } function generate_kelainan_nonlab($Mgm_McuID, $orderHeaderID) { // Mcu_OrderStatusFisik $sql = "SELECT * FROM one_etl.mcu_order WHERE Mcu_OrderMgm_McuID = ? AND Mcu_OrderT_OrderHeaderID = ?"; $qry = $this->db->query( $sql, [$Mgm_McuID, $orderHeaderID] ); if (!$qry) { // echo "Error :" . $this->db->error()["message"]; // echo $this->db->last_query(); $this->sys_error_db("Error cek mcu order riwayat"); exit; } $cek = $qry->result_array(); if (count($cek) > 0) { if ($cek[0]['Mcu_OrderStatusNonLab'] == 'Y') { $this->statusDone($Mgm_McuID, $orderHeaderID); $this->sys_ok('Already generated'); exit; } } $this->nonlab_kelainan($orderHeaderID, $Mgm_McuID); echo json_encode(["status" => "OK", "message" => "Success"]); } function populate_order($mgmMouID) { // $sql = "select Mgm_McuStartDate,Mgm_McuEndDate // from mgm_mcu // where Mgm_McuID = ?"; $sql = " select Mgm_McuID Mcu_OrderMgm_McuID, T_OrderHeaderID Mcu_OrderT_OrderHeaderID from mgm_mcu join mgm_mou on Mgm_McuID = ? and Mgm_McuID = Mgm_MouMgm_McuID and Mgm_McuIsActive = 'Y' and Mgm_MouIsActive = 'Y' join one.t_orderheader on T_OrderHeaderM_MouID = Mgm_MouM_MouID and T_OrderHeaderDate >= Mgm_McuStartDate and T_OrderHeaderDate <= Mgm_McuEndDate and T_OrderHeaderIsActive = 'Y' and T_OrderHeaderID not in ( select Mcu_OrderT_OrderHeaderID from mcu_order where Mcu_OrderMgm_McuID = ? )"; $qry = $this->db->query($sql, [$mgmMouID, $mgmMouID]); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => "Error get mgm_mcu $mgmMouID | " . $this->db->error()["message"] ]); exit; } $rows = $qry->result_array(); if (count($rows) == 0) { echo json_encode([ "status" => "OK", "message" => "No Pending Order", ]); exit; } // $this->db->trans_begin(); $qry = $this->db->insert_batch("mcu_order", $rows); if (!$qry) { echo json_encode([ "status" => "ERR", "message" => "Error batch insert | " . $this->db->error()["message"] ]); // $this->db->trans_rollback(); exit; } // $this->db->trans_commit(); echo json_encode(["status" => "OK", "message" => count($rows) . " inserted. "]); } // helper function // post // get // insert_or_update function post($service, $data) { $xbase_url = $this->base_url; $url = $xbase_url . "$service"; $ch = curl_init($url); $payload = json_encode($data); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); $data_rst = json_decode($result); return $data_rst; } function get($service, $debug = "") { $xbase_url = $this->base_url; $url = $xbase_url . "$service"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); if ($debug != "") { echo "url : $url \n"; print_r($result); } $data_rst = json_decode($result); return $data_rst; } function statusDone($Mgm_McuID, $orderHeaderID) { $sql = "SELECT Mcu_OrderStatusLab, Mcu_OrderStatusNonLab, Mcu_OrderStatusFisik, Mcu_OrderStatusRiwayat, Mcu_OrderStatusFitness FROM one_etl.mcu_order WHERE Mcu_OrderT_OrderHeaderID = ? AND Mcu_OrderMgm_McuID = ?"; $qry = $this->db->query($sql, array( $orderHeaderID, $Mgm_McuID )); if (!$qry) { $this->sys_error_db("Update status done", $this->db); exit; } $cek = $qry->result_array(); if (count($cek) > 0) { $data = $cek[0]; if ( $data['Mcu_OrderStatusLab'] == 'Y' && $data['Mcu_OrderStatusNonLab'] == 'Y' && $data['Mcu_OrderStatusFisik'] == 'Y' && $data['Mcu_OrderStatusRiwayat'] == 'Y' && $data['Mcu_OrderStatusFitness'] == 'Y' ) { $sql = "UPDATE one_etl.mcu_order SET Mcu_OrderStatus = 'Y', Mcu_OrderLastUpdated = NOW() WHERE Mcu_OrderT_OrderHeaderID = ? AND Mcu_OrderMgm_McuID = ?"; $qry = $this->db->query($sql, array( $orderHeaderID, $Mgm_McuID )); if (!$qry) { $this->sys_error_db("Update status done", $this->db); exit; } } } } }