db_onedev = $this->load->database("onedev", true); $this->db_log = $this->load->database("log", true); $this->load->helper(array('form', 'url')); } public function error_log($data,$userid=999) { $sql = "INSERT INTO ais_error_log ( AisErrorLogFnName, AisErrorLogMessage, AisErrorLogQuery, AisErrorLogJson, AisErrorLogUserID, AisErrorLogCreated ) VALUES( ?, ?, ?, ?, ?, NOW() )"; $qry = $this->db_log->query($sql, array($data['fn_name'],$data['message'],$data['query'],$data['json'],$userid)); //echo $this->db_log->last_query(); return true; } /** * Build equivalent cURL command string (untuk debug - copy-paste ke terminal) * @param string $url API endpoint URL * @param array $data Request payload * @param array $headers Custom headers (optional) * @param string $method POST atau PUT * @return string Perintah curl yang siap dijalankan */ public function build_curl_command($url, $data = array(), $headers = array(), $method = 'POST') { $default_headers = array('Content-Type: application/json'); $final_headers = array_merge($default_headers, $headers); $body = json_encode($data); $parts = array('curl', '-X', $method, escapeshellarg($url)); foreach ($final_headers as $h) { $parts[] = '-H'; $parts[] = escapeshellarg($h); } $parts[] = '-d'; $parts[] = escapeshellarg($body); return implode(' ', $parts); } /** * Generic POST request function * @param string $url API endpoint URL * @param array $data Request payload * @param array $headers Custom headers (optional) * @return array Response from API */ public function post_request($url, $data = array(), $headers = array()) { // Default headers $default_headers = array( 'Content-Type: application/json' ); // Merge custom headers with default headers $final_headers = array_merge($default_headers, $headers); // Initialize cURL $ch = curl_init(); // Set cURL options curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, $final_headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Execute cURL request $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); // Close cURL curl_close($ch); // Prepare result $result = array( 'success' => false, 'http_code' => $http_code, 'response' => null, 'error' => null ); if ($error) { $result['error'] = $error; } else { $result = json_decode($response, true); //echo json_encode($result); $result['success'] = true; } return $result; } /** * Generic PUT request function * @param string $url API endpoint URL * @param array $data Request payload * @param array $headers Custom headers (optional) * @return array Response from API */ public function put_request($url, $data = array(), $headers = array()) { // Default headers $default_headers = array( 'Content-Type: application/json' ); // Merge custom headers with default headers $final_headers = array_merge($default_headers, $headers); // Initialize cURL $ch = curl_init(); // Set cURL options curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, $final_headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Execute cURL request $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); // Close cURL curl_close($ch); // Prepare result $result = array( 'success' => false, 'http_code' => $http_code, 'response' => null, 'error' => null ); if ($error) { $result['error'] = $error; } else { $result = json_decode($response, true); $result['success'] = true; } return $result; } /** * Generic DELETE request function * @param string $url API endpoint URL * @param array $data Request payload (optional, some APIs support body in DELETE) * @param array $headers Custom headers (optional) * @return array Response from API */ public function delete_request($url, $data = array(), $headers = array()) { // Default headers $default_headers = array( 'Content-Type: application/json' ); // Merge custom headers with default headers $final_headers = array_merge($default_headers, $headers); // Initialize cURL $ch = curl_init(); // Set cURL options curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); // Add body if data is provided (some APIs support body in DELETE requests) if (!empty($data)) { curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); } curl_setopt($ch, CURLOPT_HTTPHEADER, $final_headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Execute cURL request $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); // Close cURL curl_close($ch); // Prepare result $result = array( 'success' => false, 'http_code' => $http_code, 'response' => null, 'error' => null ); if ($error) { $result['error'] = $error; } else { $result = json_decode($response, true); $result['success'] = true; } return $result; } public function get_request($url, $headers = array()) { // Retrieve configuration $config = $this->get_config(); $token = $config['AisConfigAuthToken'] ?? 'default-token'; $header_token = $config['AisConfigHeaderToken']; // Default headers based on the curl command $default_headers = array( 'Header-Token: ' . $header_token, 'Authorization: Bearer ' . $token ); // Merge custom headers with default headers $final_headers = array_merge($default_headers, $headers); // Initialize cURL $ch = curl_init(); // Set cURL options curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $final_headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Execute cURL request $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); // Close cURL curl_close($ch); // Prepare result $result = array( 'success' => false, 'http_code' => $http_code, 'response' => null, 'error' => null ); if ($error) { $result['error'] = $error; } else { $decoded = json_decode($response, true); $result['response'] = $decoded; // Check if response is successful based on http code if ($http_code === 200) { $result['success'] = true; } } return $result; } function get_config() { $sql = "SELECT * FROM ais_config LIMIT 1"; $qry = $this->db_onedev->query($sql); $dt_config = $qry->row_array(); return $dt_config; } /** * POST request to auth API * @param string $username Username for authentication * @param string $password Password for authentication * @return array Response from API */ public function post_auth() { $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $url = $baseUrl.'/api/auth/auth.php'; $headers = array( 'Header-Token: '.$dt_config['AisConfigHeaderToken'] ); $username = $dt_config['AisConfigUsername']; $password = $dt_config['AisConfigPassword']; $data = array( 'username' => $username, 'password' => $password ); $result = $this->post_request($url, $data, $headers); $sql = "INSERT INTO ais_login_log( AisLoginLogUsername, AisLoginLogPassword, AisLoginLogHeaderToken, AisLoginLogResult, AisLoginLogCreated ) VALUES( ?, ?, ?, ?, NOW() )"; $qry = $this->db_log->query($sql, array($username,$password,$dt_config['AisConfigHeaderToken'],json_encode($result))); if(!$qry){ $this->error_log(array('fn_name'=>'post_auth','message'=>'ais_login_log insert','query'=>$sql,'json'=>json_encode($result)),999); exit; } //print_r($result); //exit; // Check if success if(!$result['success']){ $this->error_log(array('fn_name'=>'post_auth','message'=>'failed auth','query'=>'','json'=>json_encode($result)),999); $errors = array('status' => 'error','message' => 'Gagal Login'); return $errors; }else{ // Update token $token = $result['data']['token'];; $sql = "UPDATE ais_config SET AisConfigAuthToken = ? WHERE AisConfigID = 1"; $qry = $this->db_onedev->query($sql, array($token)); //echo $this->db_onedev->last_query(); //exit; if(!$qry){ $this->error_log(array('fn_name'=>'post_auth','message'=>'ais_config update','query'=>$sql,'json'=>''),999); $errors = array('status' => 'error','message' => 'Gagal Update Token'); return $errors; } return $result; } } function post_transaction_daily_by_date($min_date=null,$max_date=null) { //echo "post_transaction_daily_by_date"; // Auth Login $login = $this->post_auth(); //echo json_encode($login); //exit; if (!$login['success']) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login)), 555); $errors = array('status' => 'error', 'message' => 'Gagal Login'); echo json_encode($errors); exit; } // Get config $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $url = $baseUrl . '/api/transaction_full/transaksi.php'; $headers = array( 'Header-Token: ' . $dt_config['AisConfigHeaderToken'], 'Authorization: Bearer ' . $dt_config['AisConfigAuthToken'] ); // Validate date range - maksimal 7 hari if ($min_date && $max_date) { $min_date_obj = new DateTime($min_date); $max_date_obj = new DateTime($max_date); $date_diff = $min_date_obj->diff($max_date_obj); $days_diff = $date_diff->days; if ($days_diff > 5) { $errors = array('status' => 'error', 'message' => 'Selisih antara min_date dan max_date maksimal 7 hari'); echo json_encode($errors); exit; } } // Get data $sql = "SELECT T_OrderHeaderID, T_OrderHeaderTotal as Total, T_OrderHeaderLabNumber as RegID, '' as mgm_mcu_m_branch_id, M_PatientNoReg as MEDRECID, T_OrderHeaderDate as Tanggal, T_OrderHeaderDate as PulangTanggal, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as PerusahaanID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as AsuransiID, T_PriceHeaderCode as GroupTarifID, M_PatientName as Nama, M_PatientIdentifierValue as NIK, DATE_FORMAT(M_PatientDOB, '%Y-%m-%d %H:%i:%s') as TglLahir, IF(M_PatientGender = 'male','L','P') as JnsKelamin, '' as NomorPolis, '' as NomerJaminan, '2' as JenisRegID, CorporateCode, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,1) as JenisPasienID, 'LAB-WESTERINDO-01' as DepartemenID, 'Y' as Pulang, 'Y' as BolehPulang, '' as Catatan, 'Y' as Verified, 'LABKLINIK' as KelasID, M_UserEmail as LoginBuat, T_OrderHeaderCreated as TanggalBuat, branch_order.M_BranchAis_branch_code as BranchCode, CorporateTypeais_pillar_code as PillarCode, '0000' as SiteCenterCode, M_UserEmail as VerifiedBy, T_OrderHeaderCreated as VerifiedDate, '' as TrxLayanan, '' as TrxItem, '' as TrxItemReturn, '' as RegpasNominal, '' as Trxtt, '' as TrxBayar, '' as TrxLain, '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID 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 JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID JOIN t_priceheader ON Mgm_McuT_PriceHeaderID = T_PriceHeaderID JOIN m_user ON T_OrderHeaderCreatedUserID = M_UserID LEFT JOIN cpone_log.ais_transaction ON Ais_TransactionOrderHeaderLabNumber = T_OrderHeaderLabNumber AND Ais_TransactionStatus = 'success' WHERE T_OrderHeaderIsActive = 'Y' AND ( DATE(T_OrderHeaderDate) >= ? AND DATE(T_OrderHeaderDate) <= ? ) UNION SELECT T_OrderHeaderID, T_OrderHeaderTotal as Total, T_OrderHeaderLabNumber as RegID, '' as mgm_mcu_m_branch_id, M_PatientNoReg as MEDRECID, T_OrderHeaderDate as Tanggal, T_OrderHeaderDate as PulangTanggal, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as PerusahaanID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as AsuransiID, T_PriceHeaderCode as GroupTarifID, M_PatientName as Nama, M_PatientIdentifierValue as NIK, DATE_FORMAT(M_PatientDOB, '%Y-%m-%d %H:%i:%s') as TglLahir, IF(M_PatientGender = 'male','L','P') as JnsKelamin, '' as NomorPolis, '' as NomerJaminan, '2' as JenisRegID, CorporateCode, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,1) as JenisPasienID, 'LAB-WESTERINDO-01' as DepartemenID, 'Y' as Pulang, 'Y' as BolehPulang, '' as Catatan, 'Y' as Verified, 'LABKLINIK' as KelasID, IFNULL(M_UserEmail,'Administrator') as LoginBuat, T_OrderHeaderCreated as TanggalBuat, branch_order.M_BranchAis_branch_code as BranchCode, CorporateTypeais_pillar_code as PillarCode, '0000' as SiteCenterCode, IFNULL(M_UserEmail,'Administrator') as VerifiedBy, T_OrderHeaderCreated as VerifiedDate, '' as TrxLayanan, '' as TrxItem, '' as TrxItemReturn, '' as RegpasNominal, '' as Trxtt, '' as TrxBayar, '' as TrxLain, '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID 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 JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' JOIN t_priceheader ON T_OrderHeaderAddOnT_PriceHeaderID = T_PriceHeaderID LEFT JOIN m_user ON T_OrderHeaderCreatedUserID = M_UserID LEFT JOIN cpone_log.ais_transaction ON Ais_TransactionOrderHeaderLabNumber = T_OrderHeaderLabNumber AND Ais_TransactionStatus = 'success' WHERE T_OrderHeaderIsActive = 'Y' AND ( DATE(T_OrderHeaderDate) >= ? AND DATE(T_OrderHeaderDate) <= ? ) GROUP BY T_OrderHeaderID ORDER BY T_OrderHeaderID ASC "; $qry = $this->db_onedev->query($sql, array($min_date,$max_date,$min_date,$max_date)); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 't_orderheader select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $raw_data = $qry->result_array(); if(count($raw_data) == 0){ $errors = array('status' => 'error', 'message' => 'Data tidak ditemukan'); echo json_encode($errors); exit; } $data = array(); // echo json_encode($raw_data); //exit; foreach ($raw_data as $key => $row) { $row['TrxLayanan'] = []; $row['TrxItem'] = []; $row['TrxItemReturn'] = []; $row['RegpasNominal'] = []; $row['Trxtt'] = null; $row['TrxBayar'] = []; $row['TrxLain'] = null; $row['PaketDispenser'] = null; //$name = "Fanny Yolandina Fo'eh"; // Escape apostrophe untuk mencegah error pada SQL atau JSON if (isset($row['Nama']) && !empty($row['Nama'])) { $row['Nama'] = addslashes($row['Nama']); } $raw_data[$key]['Nama'] = $row['Nama']; $layanan = []; $sql = "SELECT * FROM ( SELECT T_OrderDetailID as TrxLayananID, case when Nat_GroupID = 1 then '1100' when Nat_GroupID = 2 then '1200' when Nat_GroupID = 3 then '1200' when Nat_GroupID = 4 then '1303' when Nat_GroupID = 5 then '1321' when Nat_GroupID = 6 then '1600' end as ProfitCostCenterCode, '' as TrxDepartemenID, T_OrderDetailCreated as TanggalBuat, T_OrderDetailT_TestSasCode as LayananID, T_OrderDetailT_TestName as LayananName, doctorlab.M_DoctorCode as DokterID, 0 as ShareRS, 0 as ShareDokter, 0 as ShareExternal, 0 as ShareLain2, '' as PihakExternal, '' as PihakLain2, 'Percentage' as ShareTipe, T_OrderDetailPrice as Harga, 1 as Jumlah, 1 as Rate, 'N' as FOC, T_OrderDetailDiscTotal as Diskon, 'Absolute' as TipeDiskon, '' as DepartemenID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',T_OrderDetailTotal,0) as DitanggungPasien, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,T_OrderDetailTotal) as DitanggungPenjamin, 0 as MarkUpCito, 'N' as Cito, IFNULL(T_PacketSasCode,'') as PaketID, 'LABKLINIK' as KelasID, '' as TrxLayananDetail, 'Y' as Tagihkan FROM t_orderdetail JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' JOIN t_orderdetailorder ON T_OrderDetailT_OrderDetailOrderID = T_OrderDetailOrderID AND T_OrderDetailOrderIsActive = 'Y' JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailOrderT_OrderHeaderID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN m_doctor doctorlab ON T_OrderHeaderPjM_DoctorID = M_DoctorID LEFT JOIN t_packet ON T_OrderDetailOrderT_PacketID = T_PacketID AND T_PacketIsActive = 'Y' LEFT JOIN t_packetdetail ON T_PacketDetailT_PacketID = T_PacketID AND T_PacketDetailT_TestID = T_OrderDetailT_TestID AND T_PacketIsActive = 'Y' AND T_PacketDetailIsActive = 'Y' LEFT JOIN f_payment ON T_OrderHeaderID = F_PaymentT_OrderHeaderID AND F_PaymentIsActive = 'Y' WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' ) AS t_orderdetailorder"; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 't_orderdetail select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $total_layanan_debug = 0; $layanan = $qry->result_array(); $raw_data[$key]['TrxLayanan'] = []; if(count($layanan) > 0){ foreach($layanan as $key_layanan => $row_layanan){ $total_layanan_debug += $row_layanan['Harga']; $layanan[$key_layanan]['TrxLayananDetail'] = []; $sql = "SELECT M_DoctorCode, M_DoctorID FROM `so_resultentry` JOIN t_orderdetail ON ? = So_ResultEntryT_OrderDetailID AND T_OrderDetailIsActive = 'Y' JOIN m_doctor ON M_DoctorID = So_ResultEntryM_DoctorID AND M_DoctorIsActive = 'Y' WHERE `So_ResultEntryT_OrderHeaderID` = ? AND `So_ResultEntryIsActive` = 'Y' AND `So_ResultEntryM_DoctorID` > '0' LIMIT 1 "; $qry = $this->db_onedev->query($sql, array($row_layanan['TrxLayananID'],$row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'so_resultentry select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } $get_resultentry = $qry->result_array(); if (count($get_resultentry) > 0) { $row_layanan['DokterID'] = $get_resultentry[0]['M_DoctorCode']; } $raw_data[$key]['TrxLayanan'][] = $row_layanan; } } $regpasnominal = []; $jumlah_layanan_lab = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID = 1 WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); //echo $this->db_onedev->last_query(); //exit; if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 't_orderdetail lab select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } $get_layanan_lab = $qry->row_array(); $jumlah_layanan_lab = $get_layanan_lab['total_layanan_lab']; $jumlah_layanan_radiologi = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID = 3 WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 't_orderdetail radiologi select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } $get_layanan_radiologi = $qry->row_array(); $jumlah_layanan_radiologi = $get_layanan_radiologi['total_layanan_radiologi']; $jumlah_layanan_lain = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID NOT IN (1,3) WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 't_orderdetail lain select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } $get_layanan_lain = $qry->row_array(); $jumlah_layanan_lain = $get_layanan_lain['total_layanan_lain']; $total_layanan = 0; $sql = "SELECT SUM(T_OrderDetailTotal) as total_layanan FROM t_orderdetail JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 't_orderdetail total layanan select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } $total_layanan = $qry->row_array(); $total_layanan = $total_layanan['total_layanan']; $total_bayar = 0; $sql = "SELECT F_PaymentTotal as total FROM f_payment WHERE F_PaymentT_OrderHeaderID = ? AND F_PaymentIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'f_payment select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } $get_total_bayar = $qry->result_array(); if (count($get_total_bayar) > 0) { foreach($get_total_bayar as $key_total_bayar => $row_total_bayar){ $total_bayar += $row_total_bayar['total']; } } $mgm_mcu_m_branch_id = $row['mgm_mcu_m_branch_id']; $corporate_code = $row['CorporateCode']; $total_ditanggung_pasien = $corporate_code == 'C25040059' || $corporate_code == 'C25060181' ? $total_layanan : 0; $total_ditanggung_penjamin = $corporate_code == 'C25040059' || $corporate_code == 'C25060181' ? 0 : $total_layanan; $regpasnominal = array( "BiayaParamedik" => "0.00", "ParamedikDitanggungPasien" => "0.00", "ParamedikDitanggungPenjamin" => "0.00", "BiayaAdministrasi" => "0", "AdmDitanggungPasien" => "0.00", "AdmDitanggungPenjamin" => "0.00", "BiayaMaterai" => "0.00", "BiayaMateraiDitanggungPasien" => "0.00", "BiayaMateraiDitanggungPenjamin" => "0.00", "JumlahLayanan" => $jumlah_layanan_lain, "JumlahLayananRadiologi" => $jumlah_layanan_radiologi, "JumlahLayananLaboratorium" => $jumlah_layanan_lab, "JumlahItem" => 0, "JumlahItemRetur" => 0, "JumlahTT" => "0.00", "JumlahBiayaLain" => "0.00", "JumlahBayar" => $total_bayar, "TipeDiskonGlobal" => "Absolute", "DiskonGlobal" => "0.00", "TotalDitanggungPasien" => $total_ditanggung_pasien, "TotalDitanggungPenjamin" => $total_ditanggung_penjamin ); $raw_data[$key]['RegpasNominal'] = array( $regpasnominal ); //echo $total_bayar; $raw_data[$key]['TrxBayar'] = null; if($total_bayar > 0){ $sql = "SELECT M_PatientNoReg as MEDRECID, F_PaymentDetailID as BayarID, IFNULL(F_PaymentDetailAmount,0) as Jumlah, F_PaymentDetailCreated as Tanggal, 'Pelunasan' as JenisBayarID, CONCAT(F_PaymentNumber,'.',F_PaymentDetailID) as KwitansiID, IF(F_PaymentDetailM_PaymentTypeID = 21,CONCAT(F_PaymentDetailM_PaymentTypeID,'0',F_PaymentDetailM_BankAccountID),CONCAT(F_PaymentDetailM_PaymentTypeID,F_PaymentDetailM_BankAccountID)) as TipeBayarID, 'N' as Dibatalkan FROM f_paymentdetail JOIN f_payment ON F_PaymentDetailF_PaymentID = F_PaymentID AND F_PaymentIsActive = 'Y' JOIN t_orderheader ON F_PaymentT_OrderHeaderID = T_OrderHeaderID JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID AND M_PatientIsActive = 'Y' WHERE F_PaymentT_OrderHeaderID = ? AND F_PaymentDetailIsActive = 'Y' GROUP BY F_PaymentDetailID"; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'f_payment select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } //echo $this->db_onedev->last_query(); //exit; $bayar = $qry->result_array(); $raw_data[$key]['TrxBayar'] = $bayar; } $raw_data[$key]['Trxtt'] = null; $raw_data[$key]['TrxLain'] = null; $raw_data[$key]['PaketDispenser'] = null; $errors = []; //exit; $get_transaction = $this->get_transaction_by_labnumber($row['RegID']); // echo json_encode($get_transaction); if($get_transaction && count($get_transaction) > 0){ $result = $this->put_request($url, $raw_data[$key], $headers); }else{ // Debug: cURL untuk post_request ini (copy-paste ke terminal) $curl_cmd = $this->build_curl_command($url, $raw_data[$key], $headers, 'POST'); // echo $curl_cmd . "\n"; $result = $this->post_request($url, $raw_data[$key], $headers); //echo json_encode($result); } if ($result['error'] != null) { $sql = "INSERT INTO ais_transaction( Ais_TransactionOrderHeaderLabNumber, Ais_TransactionJson, Ais_TransactionStatus, Ais_TransactionResponse, Ais_TransactionUrl, Ais_TransactionUserID, Ais_TransactionCreated ) VALUES( ?, ?, ?, ?, ?, ?, NOW() )"; $qry = $this->db_log->query($sql, array( $row['RegID'], json_encode($raw_data[$key]), 'error', json_encode($result), $url, 555 )); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'ais_transaction insert : '.$row['RegID'], 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999); exit; } $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'transaction insert : '.$row['RegID'], 'query' => $this->db_onedev->last_query(), 'json' => json_encode($result)), 999); $errors[] = array('RegID' => $row['RegID'], 'error' => $result['error'] ?? ($result['message'] ?? 'Unknown error from external API')); }else{ //echo 'insert ais_transaction'; $sql = "INSERT INTO ais_transaction( Ais_TransactionOrderHeaderLabNumber, Ais_TransactionJson, Ais_TransactionStatus, Ais_TransactionResponse, Ais_TransactionUrl, Ais_TransactionUserID, Ais_TransactionCreated ) VALUES( ?, ?, ?, ?, ?, ?, NOW() )"; $qry = $this->db_log->query($sql, array( $row['RegID'], json_encode($raw_data[$key]), 'success', json_encode($result), $url, 555 )); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'ais_transaction insert : '.$row['RegID'], 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999); continue; } $check_exist_medrec = $this->get_medrec_by_noreg($row['MEDRECID']); if($check_exist_medrec['status'] == 'error'){ $this->error_log(array('fn_name' => 'post_transaction_daily/get_medrec_by_noreg', 'message' => 'get medrec failed for no reg: '.$row['MEDRECID'], 'query' => $this->db_onedev->last_query(), 'json' => json_encode($check_exist_medrec)), 999); continue; } if($check_exist_medrec['data'] == null){ $post_medrec = $this->post_medrec_by_noreg($row['MEDRECID']); if($post_medrec['status'] == 'error'){ $this->error_log(array('fn_name' => 'post_transaction_daily/post_medrec_by_noreg', 'message' => 'post medrec failed for no reg: '.$row['MEDRECID'], 'query' => $this->db_onedev->last_query(), 'json' => json_encode($post_medrec)), 999); continue; } }else{ $re_post_medrec = $this->re_post_medrec_by_noreg($row['MEDRECID']); if($re_post_medrec['status'] == 'error'){ $this->error_log(array('fn_name' => 'post_transaction_daily/re_post_medrec_by_noreg', 'message' => 're post medrec failed for no reg: '.$row['MEDRECID'], 'query' => $this->db_onedev->last_query(), 'json' => json_encode($re_post_medrec)), 999); continue; } } } } echo 'Selesai'; } function post_transaction_daily() { $prm = $this->sys_input; $trx_date = isset($prm['xdate']) ? $prm['xdate'] : date('Y-m-d', strtotime('-1 day')); //$trx_date = '2026-01-12'; // Auth Login $login = $this->post_auth(); if (!$login['success']) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login)), 555); $errors = array('status' => 'error', 'message' => 'Gagal Login'); echo json_encode($errors); exit; } // Get config $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $url = $baseUrl . 'api/transaction_full/transaksi.php'; $headers = array( 'Header-Token: ' . $dt_config['AisConfigHeaderToken'], 'Authorization: Bearer ' . $dt_config['AisConfigAuthToken'] ); // Get data $sql = "SELECT T_OrderHeaderID, T_OrderHeaderTotal as Total, T_OrderHeaderLabNumber as RegID, '' as mgm_mcu_m_branch_id, M_PatientNoReg as MEDRECID, T_OrderHeaderDate as Tanggal, T_OrderHeaderDate as PulangTanggal, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as PerusahaanID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as AsuransiID, T_PriceHeaderCode as GroupTarifID, M_PatientName as Nama, M_PatientIdentifierValue as NIK, DATE_FORMAT(M_PatientDOB, '%Y-%m-%d %H:%i:%s') as TglLahir, IF(M_PatientGender = 'male','L','P') as JnsKelamin, '' as NomorPolis, '' as NomerJaminan, '2' as JenisRegID, CorporateCode, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,1) as JenisPasienID, 'LAB-WESTERINDO-01' as DepartemenID, 'Y' as Pulang, 'Y' as BolehPulang, '' as Catatan, 'Y' as Verified, 'LABKLINIK' as KelasID, M_UserEmail as LoginBuat, T_OrderHeaderCreated as TanggalBuat, branch_order.M_BranchAis_branch_code as BranchCode, CorporateTypeais_pillar_code as PillarCode, '0000' as SiteCenterCode, M_UserEmail as VerifiedBy, T_OrderHeaderCreated as VerifiedDate, '' as TrxLayanan, '' as TrxItem, '' as TrxItemReturn, '' as RegpasNominal, '' as Trxtt, '' as TrxBayar, '' as TrxLain, '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID 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 JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID JOIN t_priceheader ON Mgm_McuT_PriceHeaderID = T_PriceHeaderID JOIN m_user ON T_OrderHeaderCreatedUserID = M_UserID LEFT JOIN cpone_log.ais_transaction ON Ais_TransactionOrderHeaderLabNumber = T_OrderHeaderLabNumber AND Ais_TransactionStatus = 'success' WHERE T_OrderHeaderIsActive = 'Y' AND DATE(T_OrderHeaderDate) = ? AND Ais_TransactionID IS NULL UNION SELECT T_OrderHeaderID, T_OrderHeaderTotal as Total, T_OrderHeaderLabNumber as RegID, '' as mgm_mcu_m_branch_id, M_PatientNoReg as MEDRECID, T_OrderHeaderDate as Tanggal, T_OrderHeaderDate as PulangTanggal, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as PerusahaanID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as AsuransiID, T_PriceHeaderCode as GroupTarifID, M_PatientName as Nama, M_PatientIdentifierValue as NIK, DATE_FORMAT(M_PatientDOB, '%Y-%m-%d %H:%i:%s') as TglLahir, IF(M_PatientGender = 'male','L','P') as JnsKelamin, '' as NomorPolis, '' as NomerJaminan, '2' as JenisRegID, CorporateCode, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,1) as JenisPasienID, 'LAB-WESTERINDO-01' as DepartemenID, 'Y' as Pulang, 'Y' as BolehPulang, '' as Catatan, 'Y' as Verified, 'LABKLINIK' as KelasID, IFNULL(M_UserEmail,'Administrator') as LoginBuat, T_OrderHeaderCreated as TanggalBuat, branch_order.M_BranchAis_branch_code as BranchCode, CorporateTypeais_pillar_code as PillarCode, '0000' as SiteCenterCode, IFNULL(M_UserEmail,'Administrator') as VerifiedBy, T_OrderHeaderCreated as VerifiedDate, '' as TrxLayanan, '' as TrxItem, '' as TrxItemReturn, '' as RegpasNominal, '' as Trxtt, '' as TrxBayar, '' as TrxLain, '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID 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 JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' JOIN t_priceheader ON T_OrderHeaderAddOnT_PriceHeaderID = T_PriceHeaderID LEFT JOIN m_user ON T_OrderHeaderCreatedUserID = M_UserID LEFT JOIN cpone_log.ais_transaction ON Ais_TransactionOrderHeaderLabNumber = T_OrderHeaderLabNumber AND Ais_TransactionStatus = 'success' WHERE T_OrderHeaderIsActive = 'Y' AND DATE(T_OrderHeaderDate) = ? AND Ais_TransactionID IS NULL GROUP BY T_OrderHeaderID ORDER BY T_OrderHeaderID DESC LIMIT 50 "; $qry = $this->db_onedev->query($sql, array($trx_date,$trx_date)); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 't_orderheader select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $raw_data = $qry->result_array(); if(count($raw_data) == 0){ $errors = array('status' => 'error', 'message' => 'Data tidak ditemukan'); echo json_encode($errors); exit; } $data = array(); // echo json_encode($raw_data); //exit; foreach ($raw_data as $key => $row) { $row['TrxLayanan'] = []; $row['TrxItem'] = []; $row['TrxItemReturn'] = []; $row['RegpasNominal'] = []; $row['Trxtt'] = null; $row['TrxBayar'] = []; $row['TrxLain'] = null; $row['PaketDispenser'] = null; //$name = "Fanny Yolandina Fo'eh"; // Escape apostrophe untuk mencegah error pada SQL atau JSON if (isset($row['Nama']) && !empty($row['Nama'])) { $row['Nama'] = addslashes($row['Nama']); } $raw_data[$key]['Nama'] = $row['Nama']; $layanan = []; $sql = "SELECT * FROM ( SELECT T_OrderDetailID as TrxLayananID, case when Nat_GroupID = 1 then '1100' when Nat_GroupID = 2 then '1200' when Nat_GroupID = 3 then '1200' when Nat_GroupID = 4 then '1303' when Nat_GroupID = 5 then '1321' when Nat_GroupID = 6 then '1600' end as ProfitCostCenterCode, '' as TrxDepartemenID, T_OrderDetailCreated as TanggalBuat, T_OrderDetailT_TestSasCode as LayananID, T_OrderDetailT_TestName as LayananName, doctorlab.M_DoctorCode as DokterID, 0 as ShareRS, 0 as ShareDokter, 0 as ShareExternal, 0 as ShareLain2, '' as PihakExternal, '' as PihakLain2, 'Percentage' as ShareTipe, T_OrderDetailPrice as Harga, 1 as Jumlah, 1 as Rate, 'N' as FOC, T_OrderDetailDiscTotal as Diskon, 'Absolute' as TipeDiskon, '' as DepartemenID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',T_OrderDetailTotal,0) as DitanggungPasien, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,T_OrderDetailTotal) as DitanggungPenjamin, 0 as MarkUpCito, 'N' as Cito, IFNULL(T_PacketSasCode,'') as PaketID, 'LABKLINIK' as KelasID, '' as TrxLayananDetail, 'Y' as Tagihkan FROM t_orderdetail JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' JOIN t_orderdetailorder ON T_OrderDetailT_OrderDetailOrderID = T_OrderDetailOrderID AND T_OrderDetailOrderIsActive = 'Y' JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailOrderT_OrderHeaderID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN m_doctor doctorlab ON T_OrderHeaderPjM_DoctorID = M_DoctorID LEFT JOIN t_packet ON T_OrderDetailOrderT_PacketID = T_PacketID AND T_PacketIsActive = 'Y' LEFT JOIN t_packetdetail ON T_PacketDetailT_PacketID = T_PacketID AND T_PacketDetailT_TestID = T_OrderDetailT_TestID AND T_PacketIsActive = 'Y' AND T_PacketDetailIsActive = 'Y' LEFT JOIN f_payment ON T_OrderHeaderID = F_PaymentT_OrderHeaderID AND F_PaymentIsActive = 'Y' WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' ) AS t_orderdetailorder"; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 't_orderdetail select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $total_layanan_debug = 0; $layanan = $qry->result_array(); $raw_data[$key]['TrxLayanan'] = []; if(count($layanan) > 0){ foreach($layanan as $key_layanan => $row_layanan){ $total_layanan_debug += $row_layanan['Harga']; $layanan[$key_layanan]['TrxLayananDetail'] = []; $sql = "SELECT M_DoctorCode, M_DoctorID FROM `so_resultentry` JOIN t_orderdetail ON ? = So_ResultEntryT_OrderDetailID AND T_OrderDetailIsActive = 'Y' JOIN m_doctor ON M_DoctorID = So_ResultEntryM_DoctorID AND M_DoctorIsActive = 'Y' WHERE `So_ResultEntryT_OrderHeaderID` = ? AND `So_ResultEntryIsActive` = 'Y' AND `So_ResultEntryM_DoctorID` > '0' LIMIT 1 "; $qry = $this->db_onedev->query($sql, array($row_layanan['TrxLayananID'],$row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'so_resultentry select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } $get_resultentry = $qry->result_array(); if (count($get_resultentry) > 0) { $row_layanan['DokterID'] = $get_resultentry[0]['M_DoctorCode']; } $raw_data[$key]['TrxLayanan'][] = $row_layanan; } } $regpasnominal = []; $jumlah_layanan_lab = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID = 1 WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); //echo $this->db_onedev->last_query(); //exit; if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 't_orderdetail lab select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } $get_layanan_lab = $qry->row_array(); $jumlah_layanan_lab = $get_layanan_lab['total_layanan_lab']; $jumlah_layanan_radiologi = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID = 3 WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 't_orderdetail radiologi select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } $get_layanan_radiologi = $qry->row_array(); $jumlah_layanan_radiologi = $get_layanan_radiologi['total_layanan_radiologi']; $jumlah_layanan_lain = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID NOT IN (1,3) WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 't_orderdetail lain select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } $get_layanan_lain = $qry->row_array(); $jumlah_layanan_lain = $get_layanan_lain['total_layanan_lain']; $total_layanan = 0; $sql = "SELECT SUM(T_OrderDetailTotal) as total_layanan FROM t_orderdetail JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 't_orderdetail total layanan select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } $total_layanan = $qry->row_array(); $total_layanan = $total_layanan['total_layanan']; $total_bayar = 0; $sql = "SELECT F_PaymentTotal as total FROM f_payment WHERE F_PaymentT_OrderHeaderID = ? AND F_PaymentIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'f_payment select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } $get_total_bayar = $qry->result_array(); if (count($get_total_bayar) > 0) { foreach($get_total_bayar as $key_total_bayar => $row_total_bayar){ $total_bayar += $row_total_bayar['total']; } } $mgm_mcu_m_branch_id = $row['mgm_mcu_m_branch_id']; $corporate_code = $row['CorporateCode']; $total_ditanggung_pasien = $corporate_code == 'C25040059' || $corporate_code == 'C25060181' ? $total_layanan : 0; $total_ditanggung_penjamin = $corporate_code == 'C25040059' || $corporate_code == 'C25060181' ? 0 : $total_layanan; $regpasnominal = array( "BiayaParamedik" => "0.00", "ParamedikDitanggungPasien" => "0.00", "ParamedikDitanggungPenjamin" => "0.00", "BiayaAdministrasi" => "0", "AdmDitanggungPasien" => "0.00", "AdmDitanggungPenjamin" => "0.00", "BiayaMaterai" => "0.00", "BiayaMateraiDitanggungPasien" => "0.00", "BiayaMateraiDitanggungPenjamin" => "0.00", "JumlahLayanan" => $jumlah_layanan_lain, "JumlahLayananRadiologi" => $jumlah_layanan_radiologi, "JumlahLayananLaboratorium" => $jumlah_layanan_lab, "JumlahItem" => 0, "JumlahItemRetur" => 0, "JumlahTT" => "0.00", "JumlahBiayaLain" => "0.00", "JumlahBayar" => $total_bayar, "TipeDiskonGlobal" => "Absolute", "DiskonGlobal" => "0.00", "TotalDitanggungPasien" => $total_ditanggung_pasien, "TotalDitanggungPenjamin" => $total_ditanggung_penjamin ); $raw_data[$key]['RegpasNominal'] = array( $regpasnominal ); //echo $total_bayar; $raw_data[$key]['TrxBayar'] = null; if($total_bayar > 0){ $sql = "SELECT M_PatientNoReg as MEDRECID, F_PaymentDetailID as BayarID, IFNULL(F_PaymentDetailAmount,0) as Jumlah, F_PaymentDetailCreated as Tanggal, 'Pelunasan' as JenisBayarID, CONCAT(F_PaymentNumber,'.',F_PaymentDetailID) as KwitansiID, IF(F_PaymentDetailM_PaymentTypeID = 21,CONCAT(F_PaymentDetailM_PaymentTypeID,'0',F_PaymentDetailM_BankAccountID),CONCAT(F_PaymentDetailM_PaymentTypeID,F_PaymentDetailM_BankAccountID)) as TipeBayarID, 'N' as Dibatalkan FROM f_paymentdetail JOIN f_payment ON F_PaymentDetailF_PaymentID = F_PaymentID AND F_PaymentIsActive = 'Y' JOIN t_orderheader ON F_PaymentT_OrderHeaderID = T_OrderHeaderID JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID AND M_PatientIsActive = 'Y' WHERE F_PaymentT_OrderHeaderID = ? AND F_PaymentDetailIsActive = 'Y' GROUP BY F_PaymentDetailID"; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'f_payment select : '.$row['T_OrderHeaderID'], 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); continue; } //echo $this->db_onedev->last_query(); //exit; $bayar = $qry->result_array(); $raw_data[$key]['TrxBayar'] = $bayar; } $raw_data[$key]['Trxtt'] = null; $raw_data[$key]['TrxLain'] = null; $raw_data[$key]['PaketDispenser'] = null; $errors = []; //exit; $get_transaction = $this->get_transaction_by_labnumber($row['RegID']); if($get_transaction && count($get_transaction) > 0){ $result = $this->put_request($url, $raw_data[$key], $headers); }else{ $result = $this->post_request($url, $raw_data[$key], $headers); } if ($result['error'] != null) { $sql = "INSERT INTO ais_transaction( Ais_TransactionOrderHeaderLabNumber, Ais_TransactionJson, Ais_TransactionStatus, Ais_TransactionResponse, Ais_TransactionUrl, Ais_TransactionUserID, Ais_TransactionCreated ) VALUES( ?, ?, ?, ?, ?, ?, NOW() )"; $qry = $this->db_log->query($sql, array( $row['RegID'], json_encode($raw_data[$key]), 'error', json_encode($result), $url, 555 )); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'ais_transaction insert : '.$row['RegID'], 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999); exit; } $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'transaction insert : '.$row['RegID'], 'query' => $this->db_onedev->last_query(), 'json' => json_encode($result)), 999); $errors[] = array('RegID' => $row['RegID'], 'error' => $result['error'] ?? ($result['message'] ?? 'Unknown error from external API')); }else{ //echo 'insert ais_transaction'; $sql = "INSERT INTO ais_transaction( Ais_TransactionOrderHeaderLabNumber, Ais_TransactionJson, Ais_TransactionStatus, Ais_TransactionResponse, Ais_TransactionUrl, Ais_TransactionUserID, Ais_TransactionCreated ) VALUES( ?, ?, ?, ?, ?, ?, NOW() )"; $qry = $this->db_log->query($sql, array( $row['RegID'], json_encode($raw_data[$key]), 'success', json_encode($result), $url, 555 )); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction_daily', 'message' => 'ais_transaction insert : '.$row['RegID'], 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999); continue; } $check_exist_medrec = $this->get_medrec_by_noreg($row['MEDRECID']); if($check_exist_medrec['status'] == 'error'){ $this->error_log(array('fn_name' => 'post_transaction_daily/get_medrec_by_noreg', 'message' => 'get medrec failed for no reg: '.$row['MEDRECID'], 'query' => $this->db_onedev->last_query(), 'json' => json_encode($check_exist_medrec)), 999); continue; } if($check_exist_medrec['data'] == null){ $post_medrec = $this->post_medrec_by_noreg($row['MEDRECID']); if($post_medrec['status'] == 'error'){ $this->error_log(array('fn_name' => 'post_transaction_daily/post_medrec_by_noreg', 'message' => 'post medrec failed for no reg: '.$row['MEDRECID'], 'query' => $this->db_onedev->last_query(), 'json' => json_encode($post_medrec)), 999); continue; } }else{ $re_post_medrec = $this->re_post_medrec_by_noreg($row['MEDRECID']); if($re_post_medrec['status'] == 'error'){ $this->error_log(array('fn_name' => 'post_transaction_daily/re_post_medrec_by_noreg', 'message' => 're post medrec failed for no reg: '.$row['MEDRECID'], 'query' => $this->db_onedev->last_query(), 'json' => json_encode($re_post_medrec)), 999); continue; } } } } echo 'Selesai'; } function get_medrec_by_noreg($noreg) { $userid = 999; // Get id from query parameter $login = $this->post_auth(); if (!$login['success']) { $this->error_log(array('fn_name' => 'get_medrec_auth', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login)), $userid); $errors = array('status' => 'error', 'message' => 'Gagal Login'); return $errors; } $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $url = $baseUrl . 'api/medrec?id='.$noreg; $result = $this->get_request($url); if (!$result['success']) { $this->error_log(array('fn_name' => 'get_medrec', 'message' => 'failed get medrec', 'query' => '', 'json' => json_encode($result)), $userid); $errors = array('status' => 'error', 'message' => 'Gagal Get Layanan'); return $errors; } $data = $result['response']['data'] ?? null; // $data = json_encode($data); $success = array('status' => 'success', 'message' => 'Berhasil Get Medrec', 'data' => $data); return $success; } // Post Medrec private function post_medrec_by_noreg($noreg) { $userid = 999; // Auth Login $login = $this->post_auth(); if (!$login['success']) { $this->error_log([ 'fn_name' => 'post_medrec_auth', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login) ], $userid); $errors = array('status' => 'error', 'message' => 'Gagal Login'); return $errors; } // Get config $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $url = $baseUrl . '/api/medrec'; $headers = [ 'Header-Token: ' . $dt_config['AisConfigHeaderToken'], 'Authorization: Bearer ' . $dt_config['AisConfigAuthToken'] ]; // Ambil data layanan dari tabel t_test yang belum dikirim $sql = "SELECT * FROM m_patient n LEFT JOIN cpone_log.ais_medrec a ON n.M_PatientNoReg = a.Ais_MedrecPatientNoReg WHERE n.M_PatientIsActive = 'Y' AND a.Ais_MedrecPatientNoReg IS NULL AND n.M_PatientNoReg = ? LIMIT 1"; $qry = $this->db_onedev->query($sql, [$noreg]); if (!$qry) { $this->error_log([ 'fn_name' => 'post_medrec', 'message' => 'medrec select failed', 'query' => $this->db_onedev->last_query(), 'json' => '' ], $userid); $errors = array('status' => 'error', 'message' => 'medrec select failed'); return $errors; } $raw_data = $qry->result_array(); if(empty($raw_data)){ $errors = array('status' => 'error', 'message' => 'Tidak ada data medrec yang belum dikirim untuk no reg: ' . $noreg); return $errors; } $result_data = []; $errors = []; foreach ($raw_data as $row) { if ($row['M_PatientGender'] == 'MALE') 'L'; if ($row['M_PatientGender'] == 'FEMALE') 'P'; $data = [ "Nama" => $row['M_PatientName'], "MEDRECID" => $row['M_PatientNoReg'], "KodeRS" => "", "PerusahaanID" => $row['M_PatientRegisteredByCorporateID'], "NIK" => $row['M_PatientNIP'], "Kelamin" => $row['M_PatientGender'], "TanggalLahir" => $row['M_PatientDOB'], "TempatLahir" => $row['M_PatientLocation'], "Alamat" => $row['M_PatientAddress'], "Couple" => 'N', "CoupleID" => 0, "LoginBuat" => 'system' ]; $result = $this->post_request($url, $data, $headers); if ($result['error'] == null) { $sql = "INSERT INTO ais_medrec ( Ais_MedrecPatientNoReg, Ais_MedrecStatus, Ais_MedrecJson, Ais_MedrecResponse, Ais_MedrecUserID, Ais_MedrecCreated ) VALUES (?, ?, ?, ?, ?, NOW())"; $this->db_log->query($sql, [ $row['M_PatientNoReg'], $result['errror'] == null?'success':'error', json_encode($data), json_encode($result), $userid ]); $success = [ 'status' => 'success', 'message' => 'Berhasil Post Medrec', ]; return $success; }else{ $success = [ 'status' => 'error', 'message' => 'Gagal Post Medrec: '.implode(', ', $result['error']), 'errors' => $result['error'] ]; return $success; } } } private function re_post_medrec_by_noreg($noreg) { $userid = 999; // Auth Login $login = $this->post_auth(); if (!$login['success']) { $this->error_log([ 'fn_name' => 're_post_medrec_auth', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login) ], $userid); $errors = array('status' => 'error', 'message' => 'Gagal Login'); return $errors; } // Get config $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $url = $baseUrl . '/api/medrec'; $headers = [ 'Header-Token: ' . $dt_config['AisConfigHeaderToken'], 'Authorization: Bearer ' . $dt_config['AisConfigAuthToken'] ]; // Ambil data layanan dari tabel t_test yang belum dikirim $sql = "SELECT * FROM m_patient n LEFT JOIN cpone_log.ais_medrec a ON n.M_PatientNoReg = a.Ais_MedrecPatientNoReg WHERE n.M_PatientIsActive = 'Y' AND n.M_PatientNoReg = ? LIMIT 1"; $qry = $this->db_onedev->query($sql, [$noreg]); if (!$qry) { $this->error_log([ 'fn_name' => 'post_medrec', 'message' => 'medrec select failed', 'query' => $this->db_onedev->last_query(), 'json' => '' ], $userid); $errors = array('status' => 'error', 'message' => 'medrec select failed'); return $errors; } $raw_data = $qry->result_array(); if(empty($raw_data)){ $errors = array('status' => 'error', 'message' => 'Tidak ada data medrec yang belum dikirim untuk no reg: ' . $noreg); return $errors; } $result_data = []; $errors = []; foreach ($raw_data as $row) { if ($row['M_PatientGender'] == 'MALE') 'L'; if ($row['M_PatientGender'] == 'FEMALE') 'P'; $data = [ "Nama" => $row['M_PatientName'], "MEDRECID" => $row['M_PatientNoReg'], "KodeRS" => "", "PerusahaanID" => $row['M_PatientRegisteredByCorporateID'], "NIK" => $row['M_PatientNIP'], "Kelamin" => $row['M_PatientGender'], "TanggalLahir" => $row['M_PatientDOB'], "TempatLahir" => $row['M_PatientLocation'], "Alamat" => $row['M_PatientAddress'], "Couple" => 'N', "CoupleID" => 0, "LoginBuat" => 'system' ]; $result = $this->put_request($url, $data, $headers); if ($result['error'] == null) { $sql = "INSERT INTO ais_medrec ( Ais_MedrecPatientNoReg, Ais_MedrecStatus, Ais_MedrecJson, Ais_MedrecResponse, Ais_MedrecUserID, Ais_MedrecCreated ) VALUES (?, ?, ?, ?, ?, NOW())"; $this->db_log->query($sql, [ $row['M_PatientNoReg'], $result['errror'] == null?'success':'error', json_encode($data), json_encode($result), $userid ]); $success = [ 'status' => 'success', 'message' => 'Berhasil Re-Post Medrec', ]; return $success; }else{ $success = [ 'status' => 'error', 'message' => 'Gagal Re-Post Medrec: '.implode(', ', $result['error']), 'errors' => $result['error'] ]; return $success; } } } function post_transaction_by_labnumber() { $prm = $this->sys_input; $labnum = $prm['labnumber']; // Auth Login $login = $this->post_auth(); if (!$login['success']) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login)), 555); $errors = array('status' => 'error', 'message' => 'Gagal Login'); echo json_encode($errors); exit; } // Get config $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $url = $baseUrl . '/api/transaction_full/transaksi.php'; $headers = array( 'Header-Token: ' . $dt_config['AisConfigHeaderToken'], 'Authorization: Bearer ' . $dt_config['AisConfigAuthToken'] ); // Get data $sql = "SELECT T_OrderHeaderID, T_OrderHeaderTotal as Total, T_OrderHeaderLabNumber as RegID, '' as mgm_mcu_m_branch_id, M_PatientNoReg as MEDRECID, T_OrderHeaderDate as Tanggal, T_OrderHeaderDate as PulangTanggal, CorporateCode, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as PerusahaanID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as AsuransiID, T_PriceHeaderCode as GroupTarifID, M_PatientName as Nama, M_PatientIdentifierValue as NIK, DATE_FORMAT(M_PatientDOB, '%Y-%m-%d %H:%i:%s') as TglLahir, IF(M_PatientGender = 'male','L','P') as JnsKelamin, '' as NomorPolis, '' as NomerJaminan, '2' as JenisRegID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,1) as JenisPasienID, 'LAB-WESTERINDO-01' as DepartemenID, 'Y' as Pulang, 'Y' as BolehPulang, '' as Catatan, 'Y' as Verified, 'LABKLINIK' as KelasID, M_UserEmail as LoginBuat, T_OrderHeaderCreated as TanggalBuat, branch_order.M_BranchAis_branch_code as BranchCode, CorporateTypeais_pillar_code as PillarCode, '0000' as SiteCenterCode, M_UserEmail as VerifiedBy, T_OrderHeaderCreated as VerifiedDate, '' as TrxLayanan, '' as TrxItem, '' as TrxItemReturn, '' as RegpasNominal, '' as Trxtt, '' as TrxBayar, '' as TrxLain, '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID JOIN t_priceheader ON Mgm_McuT_PriceHeaderID = T_PriceHeaderID JOIN m_user ON T_OrderHeaderCreatedUserID = M_UserID WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderLabNumber = ? AND ( T_OrderHeaderMgm_McuID != 0 AND T_OrderHeaderMgm_McuID IS NOT NULL) UNION SELECT T_OrderHeaderID, T_OrderHeaderTotal as Total, T_OrderHeaderLabNumber as RegID, '' as mgm_mcu_m_branch_id, M_PatientNoReg as MEDRECID, T_OrderHeaderDate as Tanggal, T_OrderHeaderDate as PulangTanggal, CorporateCode, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as PerusahaanID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as AsuransiID, T_PriceHeaderCode as GroupTarifID, M_PatientName as Nama, M_PatientIdentifierValue as NIK, DATE_FORMAT(M_PatientDOB, '%Y-%m-%d %H:%i:%s') as TglLahir, IF(M_PatientGender = 'male','L','P') as JnsKelamin, '' as NomorPolis, '' as NomerJaminan, '2' as JenisRegID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,1) as JenisPasienID, 'LAB-WESTERINDO-01' as DepartemenID, 'Y' as Pulang, 'Y' as BolehPulang, '' as Catatan, 'Y' as Verified, 'LABKLINIK' as KelasID, IFNULL(M_UserEmail,'Administrator') as LoginBuat, T_OrderHeaderCreated as TanggalBuat, branch_order.M_BranchAis_branch_code as BranchCode, CorporateTypeais_pillar_code as PillarCode, '0000' as SiteCenterCode, IFNULL(M_UserEmail,'Administrator') as VerifiedBy, T_OrderHeaderCreated as VerifiedDate, '' as TrxLayanan, '' as TrxItem, '' as TrxItemReturn, '' as RegpasNominal, '' as Trxtt, '' as TrxBayar, '' as TrxLain, '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' JOIN t_priceheader ON T_OrderHeaderAddOnT_PriceHeaderID = T_PriceHeaderID LEFT JOIN m_user ON T_OrderHeaderCreatedUserID = M_UserID WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderLabNumber = ? AND ( T_OrderHeaderMgm_McuID = 0 OR T_OrderHeaderMgm_McuID IS NULL) LIMIT 1; "; $qry = $this->db_onedev->query($sql, array($labnum,$labnum)); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderheader select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $raw_data = $qry->result_array(); if(count($raw_data) == 0){ $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderheader select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); $errors = array('status' => 'error', 'message' => 'Data tidak ditemukan'); echo json_encode($errors); exit; } $data = array(); //echo json_encode($raw_data); //exit; foreach ($raw_data as $key => $row) { $row['TrxLayanan'] = []; $row['TrxItem'] = []; $row['TrxItemReturn'] = []; $row['RegpasNominal'] = []; $row['Trxtt'] = null; $row['TrxBayar'] = []; $row['TrxLain'] = null; $row['PaketDispenser'] = null; $layanan = []; $sql = "SELECT * FROM ( SELECT T_OrderDetailID as TrxLayananID, case when Nat_GroupID = 1 then '1100' when Nat_GroupID = 2 then '1200' when Nat_GroupID = 3 then '1200' when Nat_GroupID = 4 then '1303' when Nat_GroupID = 5 then '1321' when Nat_GroupID = 6 then '1600' end as ProfitCostCenterCode, '' as TrxDepartemenID, T_OrderDetailCreated as TanggalBuat, T_OrderDetailT_TestSasCode as LayananID, T_OrderDetailT_TestName as LayananName, doctorlab.M_DoctorCode as DokterID, 0 as ShareRS, 0 as ShareDokter, 0 as ShareExternal, 0 as ShareLain2, '' as PihakExternal, '' as PihakLain2, 'Percentage' as ShareTipe, T_OrderDetailPrice as Harga, 1 as Jumlah, 1 as Rate, 'N' as FOC, T_OrderDetailDiscTotal as Diskon, 'Absolute' as TipeDiskon, '' as DepartemenID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',T_OrderDetailTotal,0) as DitanggungPasien, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,T_OrderDetailTotal) as DitanggungPenjamin, 0 as MarkUpCito, 'N' as Cito, IFNULL(T_PacketSasCode,'') as PaketID, 'LABKLINIK' as KelasID, '' as TrxLayananDetail, 'Y' as Tagihkan FROM t_orderdetail JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' JOIN t_orderdetailorder ON T_OrderDetailT_OrderDetailOrderID = T_OrderDetailOrderID AND T_OrderDetailOrderIsActive = 'Y' JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailOrderT_OrderHeaderID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN m_doctor doctorlab ON T_OrderHeaderPjM_DoctorID = M_DoctorID LEFT JOIN t_packet ON T_OrderDetailOrderT_PacketID = T_PacketID AND T_PacketIsActive = 'Y' LEFT JOIN t_packetdetail ON T_PacketDetailT_PacketID = T_PacketID AND T_PacketDetailT_TestID = T_OrderDetailT_TestID AND T_PacketIsActive = 'Y' AND T_PacketDetailIsActive = 'Y' LEFT JOIN f_payment ON T_OrderHeaderID = F_PaymentT_OrderHeaderID AND F_PaymentIsActive = 'Y' WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' ) AS t_orderdetailorder"; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $total_layanan_debug = 0; $layanan = $qry->result_array(); $raw_data[$key]['TrxLayanan'] = []; if(count($layanan) > 0){ foreach($layanan as $key_layanan => $row_layanan){ $total_layanan_debug += $row_layanan['Harga']; $layanan[$key_layanan]['TrxLayananDetail'] = []; $sql = "SELECT M_DoctorCode, M_DoctorID FROM `so_resultentry` JOIN t_orderdetail ON ? = So_ResultEntryT_OrderDetailID AND T_OrderDetailIsActive = 'Y' JOIN m_doctor ON M_DoctorID = So_ResultEntryM_DoctorID AND M_DoctorIsActive = 'Y' WHERE `So_ResultEntryT_OrderHeaderID` = ? AND `So_ResultEntryIsActive` = 'Y' AND `So_ResultEntryM_DoctorID` > '0' LIMIT 1 "; $qry = $this->db_onedev->query($sql, array($row_layanan['TrxLayananID'],$row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'so_resultentry select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_resultentry = $qry->result_array(); if (count($get_resultentry) > 0) { $row_layanan['DokterID'] = $get_resultentry[0]['M_DoctorCode']; } $raw_data[$key]['TrxLayanan'][] = $row_layanan; } } $regpasnominal = []; $jumlah_layanan_lab = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID = 1 WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); //echo $this->db_onedev->last_query(); //exit; if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail lab select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_layanan_lab = $qry->row_array(); $jumlah_layanan_lab = $get_layanan_lab['total_layanan_lab']; $jumlah_layanan_radiologi = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID = 3 WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail radiologi select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_layanan_radiologi = $qry->row_array(); $jumlah_layanan_radiologi = $get_layanan_radiologi['total_layanan_radiologi']; $jumlah_layanan_lain = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID NOT IN (1,3) WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail lain select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_layanan_lain = $qry->row_array(); $jumlah_layanan_lain = $get_layanan_lain['total_layanan_lain']; $total_layanan = 0; $sql = "SELECT SUM(T_OrderDetailTotal) as total_layanan FROM t_orderdetail JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail total layanan select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $total_layanan = $qry->row_array(); $total_layanan = $total_layanan['total_layanan']; $total_bayar = 0; $sql = "SELECT F_PaymentTotal as total FROM f_payment WHERE F_PaymentT_OrderHeaderID = ? AND F_PaymentIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'f_payment select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_total_bayar = $qry->result_array(); if (count($get_total_bayar) > 0) { foreach($get_total_bayar as $key_total_bayar => $row_total_bayar){ $total_bayar += $row_total_bayar['total']; } } $mgm_mcu_m_branch_id = $row['mgm_mcu_m_branch_id']; $corporate_code = $row['CorporateCode']; $total_ditanggung_pasien = $corporate_code == 'C25040059' || $corporate_code == 'C25060181' ? $total_layanan : 0; $total_ditanggung_penjamin = $corporate_code == 'C25040059' || $corporate_code == 'C25060181' ? 0 : $total_layanan; $regpasnominal = array( "BiayaParamedik" => "0.00", "ParamedikDitanggungPasien" => "0.00", "ParamedikDitanggungPenjamin" => "0.00", "BiayaAdministrasi" => "0", "AdmDitanggungPasien" => "0.00", "AdmDitanggungPenjamin" => "0.00", "BiayaMaterai" => "0.00", "BiayaMateraiDitanggungPasien" => "0.00", "BiayaMateraiDitanggungPenjamin" => "0.00", "JumlahLayanan" => $jumlah_layanan_lain, "JumlahLayananRadiologi" => $jumlah_layanan_radiologi, "JumlahLayananLaboratorium" => $jumlah_layanan_lab, "JumlahItem" => 0, "JumlahItemRetur" => 0, "JumlahTT" => "0.00", "JumlahBiayaLain" => "0.00", "JumlahBayar" => $total_bayar, "TipeDiskonGlobal" => "Absolute", "DiskonGlobal" => "0.00", "TotalDitanggungPasien" => $total_ditanggung_pasien, "TotalDitanggungPenjamin" => $total_ditanggung_penjamin ); $raw_data[$key]['RegpasNominal'] = array( $regpasnominal ); //echo $total_bayar; $raw_data[$key]['TrxBayar'] = null; if($total_bayar > 0){ $sql = "SELECT M_PatientNoReg as MEDRECID, F_PaymentDetailID as BayarID, IFNULL(F_PaymentDetailAmount,0) as Jumlah, F_PaymentDetailCreated as Tanggal, 'Pelunasan' as JenisBayarID, CONCAT(F_PaymentNumber,'.',F_PaymentDetailID) as KwitansiID, IF(F_PaymentDetailM_PaymentTypeID = 21,CONCAT(F_PaymentDetailM_PaymentTypeID,'0',F_PaymentDetailM_BankAccountID),CONCAT(F_PaymentDetailM_PaymentTypeID,F_PaymentDetailM_BankAccountID)) as TipeBayarID, 'N' as Dibatalkan FROM f_paymentdetail JOIN f_payment ON F_PaymentDetailF_PaymentID = F_PaymentID AND F_PaymentIsActive = 'Y' JOIN t_orderheader ON F_PaymentT_OrderHeaderID = T_OrderHeaderID JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID AND M_PatientIsActive = 'Y' WHERE F_PaymentT_OrderHeaderID = ? AND F_PaymentDetailIsActive = 'Y' GROUP BY F_PaymentDetailID"; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'f_payment select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } //echo $this->db_onedev->last_query(); //exit; $bayar = $qry->result_array(); $raw_data[$key]['TrxBayar'] = $bayar; } $raw_data[$key]['Trxtt'] = null; $raw_data[$key]['TrxLain'] = null; $raw_data[$key]['PaketDispenser'] = null; $errors = []; //exit; $result = $this->post_request($url, $raw_data[$key], $headers); if ($result['error'] != null) { $sql = "INSERT INTO ais_transaction( Ais_TransactionOrderHeaderLabNumber, Ais_TransactionJson, Ais_TransactionStatus, Ais_TransactionResponse, Ais_TransactionUrl, Ais_TransactionUserID, Ais_TransactionCreated ) VALUES( ?, ?, ?, ?, ?, ?, NOW() )"; $qry = $this->db_log->query($sql, array( $row['RegID'], json_encode($raw_data[$key]), 'error', json_encode($result), $url, 555 )); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'ais_transaction insert', 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999); exit; } $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'transaction insert', 'query' => $this->db_onedev->last_query(), 'json' => json_encode($result)), 999); $errors[] = array('RegID' => $row['RegID'], 'error' => $result['error'] ?? ($result['message'] ?? 'Unknown error from external API')); }else{ //echo 'insert ais_transaction'; $sql = "INSERT INTO ais_transaction( Ais_TransactionOrderHeaderLabNumber, Ais_TransactionJson, Ais_TransactionStatus, Ais_TransactionResponse, Ais_TransactionUrl, Ais_TransactionUserID, Ais_TransactionCreated ) VALUES( ?, ?, ?, ?, ?, ?, NOW() )"; $qry = $this->db_log->query($sql, array( $row['RegID'], json_encode($raw_data[$key]), 'success', json_encode($result), $url, 555 )); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'ais_transaction insert', 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999); exit; } } } if(count($errors) > 0){ $success = array('status' => 'error', 'message' => 'Gagal Post Transaction', 'errors' => $errors); echo json_encode($success); exit; }else{ $success = array('status' => 'success', 'message' => 'Berhasil Post Transaction'); echo json_encode($success); exit; } } function re_post_transaction_by_labnumber() { $prm = $this->sys_input; $labnum = $prm['labnumber']; // Auth Login $login = $this->post_auth(); if (!$login['success']) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login)), 555); $errors = array('status' => 'error', 'message' => 'Gagal Login'); echo json_encode($errors); exit; } // Get config $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $url = $baseUrl . '/api/transaction_full/transaksi.php'; $headers = array( 'Header-Token: ' . $dt_config['AisConfigHeaderToken'], 'Authorization: Bearer ' . $dt_config['AisConfigAuthToken'] ); // Get data $sql = "SELECT T_OrderHeaderID, T_OrderHeaderTotal as Total, T_OrderHeaderLabNumber as RegID, '' as mgm_mcu_m_branch_id, M_PatientNoReg as MEDRECID, T_OrderHeaderDate as Tanggal, T_OrderHeaderDate as PulangTanggal, CorporateCode, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as PerusahaanID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as AsuransiID, T_PriceHeaderCode as GroupTarifID, M_PatientName as Nama, M_PatientIdentifierValue as NIK, DATE_FORMAT(M_PatientDOB, '%Y-%m-%d %H:%i:%s') as TglLahir, IF(M_PatientGender = 'male','L','P') as JnsKelamin, '' as NomorPolis, '' as NomerJaminan, '2' as JenisRegID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,1) as JenisPasienID, 'LAB-WESTERINDO-01' as DepartemenID, 'Y' as Pulang, 'Y' as BolehPulang, '' as Catatan, 'Y' as Verified, 'LABKLINIK' as KelasID, IFNULL(M_UserEmail,'Administrator') as LoginBuat, T_OrderHeaderCreated as TanggalBuat, branch_order.M_BranchAis_branch_code as BranchCode, CorporateTypeais_pillar_code as PillarCode, '0000' as SiteCenterCode, IFNULL(M_UserEmail,'Administrator') as VerifiedBy, T_OrderHeaderCreated as VerifiedDate, '' as TrxLayanan, '' as TrxItem, '' as TrxItemReturn, '' as RegpasNominal, '' as Trxtt, '' as TrxBayar, '' as TrxLain, '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID JOIN t_priceheader ON Mgm_McuT_PriceHeaderID = T_PriceHeaderID LEFT JOIN m_user ON T_OrderHeaderCreatedUserID = M_UserID WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderLabNumber = ? AND ( T_OrderHeaderMgm_McuID != 0 AND T_OrderHeaderMgm_McuID IS NOT NULL)-- TAMBAHAN: Exclude cases where Mgm_McuID = 0 UNION SELECT T_OrderHeaderID, T_OrderHeaderTotal as Total, T_OrderHeaderLabNumber as RegID, '' as mgm_mcu_m_branch_id, M_PatientNoReg as MEDRECID, T_OrderHeaderDate as Tanggal, T_OrderHeaderDate as PulangTanggal, CorporateCode, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as PerusahaanID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as AsuransiID, T_PriceHeaderCode as GroupTarifID, M_PatientName as Nama, M_PatientIdentifierValue as NIK, DATE_FORMAT(M_PatientDOB, '%Y-%m-%d %H:%i:%s') as TglLahir, IF(M_PatientGender = 'male','L','P') as JnsKelamin, '' as NomorPolis, '' as NomerJaminan, '2' as JenisRegID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,1) as JenisPasienID, 'LAB-WESTERINDO-01' as DepartemenID, 'Y' as Pulang, 'Y' as BolehPulang, '' as Catatan, 'Y' as Verified, 'LABKLINIK' as KelasID, IFNULL(M_UserEmail,'Administrator') as LoginBuat, T_OrderHeaderCreated as TanggalBuat, branch_order.M_BranchAis_branch_code as BranchCode, CorporateTypeais_pillar_code as PillarCode, '0000' as SiteCenterCode, IFNULL(M_UserEmail,'Administrator') as VerifiedBy, T_OrderHeaderCreated as VerifiedDate, '' as TrxLayanan, '' as TrxItem, '' as TrxItemReturn, '' as RegpasNominal, '' as Trxtt, '' as TrxBayar, '' as TrxLain, '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' JOIN t_priceheader ON T_OrderHeaderAddOnT_PriceHeaderID = T_PriceHeaderID LEFT JOIN m_user ON T_OrderHeaderCreatedUserID = M_UserID WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderLabNumber = ? AND ( T_OrderHeaderMgm_McuID = 0 OR T_OrderHeaderMgm_McuID IS NULL) LIMIT 1 "; $qry = $this->db_onedev->query($sql, array($labnum,$labnum)); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderheader select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $raw_data = $qry->result_array(); if(count($raw_data) == 0){ $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderheader select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); $errors = array('status' => 'error', 'message' => 'Data tidak ditemukan'); echo json_encode($errors); exit; } $data = array(); foreach ($raw_data as $key => $row) { $row['TrxLayanan'] = []; $row['TrxItem'] = []; $row['TrxItemReturn'] = []; $row['RegpasNominal'] = []; $row['Trxtt'] = null; $row['TrxBayar'] = []; $row['TrxLain'] = null; $row['PaketDispenser'] = null; $layanan = []; $sql = "SELECT * FROM ( SELECT T_OrderDetailID as TrxLayananID, case when Nat_GroupID = 1 then '1100' when Nat_GroupID = 2 then '1200' when Nat_GroupID = 3 then '1200' when Nat_GroupID = 4 then '1303' when Nat_GroupID = 5 then '1321' when Nat_GroupID = 6 then '1600' end as ProfitCostCenterCode, '' as TrxDepartemenID, T_OrderDetailCreated as TanggalBuat, T_OrderDetailT_TestSasCode as LayananID, T_OrderDetailT_TestName as LayananName, doctorlab.M_DoctorCode as DokterID, 0 as ShareRS, 0 as ShareDokter, 0 as ShareExternal, 0 as ShareLain2, '' as PihakExternal, '' as PihakLain2, 'Percentage' as ShareTipe, T_OrderDetailPrice as Harga, 1 as Jumlah, 1 as Rate, 'N' as FOC, T_OrderDetailDiscTotal as Diskon, 'Absolute' as TipeDiskon, '' as DepartemenID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',T_OrderDetailTotal,0) as DitanggungPasien, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,T_OrderDetailTotal) as DitanggungPenjamin, 0 as MarkUpCito, 'N' as Cito, IFNULL(T_PacketSasCode,'') as PaketID, 'LABKLINIK' as KelasID, '' as TrxLayananDetail, 'Y' as Tagihkan FROM t_orderdetail JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' JOIN t_orderdetailorder ON T_OrderDetailT_OrderDetailOrderID = T_OrderDetailOrderID AND T_OrderDetailOrderIsActive = 'Y' JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailOrderT_OrderHeaderID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN m_doctor doctorlab ON T_OrderHeaderPjM_DoctorID = M_DoctorID LEFT JOIN t_packet ON T_OrderDetailOrderT_PacketID = T_PacketID AND T_PacketIsActive = 'Y' LEFT JOIN t_packetdetail ON T_PacketDetailT_PacketID = T_PacketID AND T_PacketDetailT_TestID = T_OrderDetailT_TestID AND T_PacketIsActive = 'Y' AND T_PacketDetailIsActive = 'Y' LEFT JOIN f_payment ON T_OrderHeaderID = F_PaymentT_OrderHeaderID AND F_PaymentIsActive = 'Y' WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' ) AS t_orderdetailorder"; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $total_layanan_debug = 0; $layanan = $qry->result_array(); $raw_data[$key]['TrxLayanan'] = []; if(count($layanan) > 0){ foreach($layanan as $key_layanan => $row_layanan){ $total_layanan_debug += $row_layanan['Harga']; $layanan[$key_layanan]['TrxLayananDetail'] = []; $sql = "SELECT M_DoctorCode, M_DoctorID FROM `so_resultentry` JOIN t_orderdetail ON ? = So_ResultEntryT_OrderDetailID AND T_OrderDetailIsActive = 'Y' JOIN m_doctor ON M_DoctorID = So_ResultEntryM_DoctorID AND M_DoctorIsActive = 'Y' WHERE `So_ResultEntryT_OrderHeaderID` = ? AND `So_ResultEntryIsActive` = 'Y' AND `So_ResultEntryM_DoctorID` > '0' LIMIT 1 "; $qry = $this->db_onedev->query($sql, array($row_layanan['TrxLayananID'],$row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'so_resultentry select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_resultentry = $qry->result_array(); if (count($get_resultentry) > 0) { $row_layanan['DokterID'] = $get_resultentry[0]['M_DoctorCode']; } $raw_data[$key]['TrxLayanan'][] = $row_layanan; } } $regpasnominal = []; $jumlah_layanan_lab = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID = 1 WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); //echo $this->db_onedev->last_query(); //exit; if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail lab select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_layanan_lab = $qry->row_array(); $jumlah_layanan_lab = $get_layanan_lab['total_layanan_lab']; $jumlah_layanan_radiologi = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID = 3 WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail radiologi select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_layanan_radiologi = $qry->row_array(); $jumlah_layanan_radiologi = $get_layanan_radiologi['total_layanan_radiologi']; $jumlah_layanan_lain = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID NOT IN (1,3) WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail lain select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_layanan_lain = $qry->row_array(); $jumlah_layanan_lain = $get_layanan_lain['total_layanan_lain']; $total_layanan = 0; $sql = "SELECT SUM(T_OrderDetailTotal) as total_layanan FROM t_orderdetail JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail total layanan select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $total_layanan = $qry->row_array(); $total_layanan = $total_layanan['total_layanan']; $total_bayar = 0; $sql = "SELECT F_PaymentTotal as total FROM f_payment WHERE F_PaymentT_OrderHeaderID = ? AND F_PaymentIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'f_payment select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_total_bayar = $qry->result_array(); if (count($get_total_bayar) > 0) { foreach($get_total_bayar as $key_total_bayar => $row_total_bayar){ $total_bayar += $row_total_bayar['total']; } } $mgm_mcu_m_branch_id = $row['mgm_mcu_m_branch_id']; $corporate_code = $row['CorporateCode']; $total_ditanggung_pasien = $corporate_code == 'C25040059' || $corporate_code == 'C25060181' ? $total_layanan : 0; $total_ditanggung_penjamin = $corporate_code == 'C25040059' || $corporate_code == 'C25060181' ? 0 : $total_layanan; $regpasnominal = array( "BiayaParamedik" => "0.00", "ParamedikDitanggungPasien" => "0.00", "ParamedikDitanggungPenjamin" => "0.00", "BiayaAdministrasi" => "0", "AdmDitanggungPasien" => "0.00", "AdmDitanggungPenjamin" => "0.00", "BiayaMaterai" => "0.00", "BiayaMateraiDitanggungPasien" => "0.00", "BiayaMateraiDitanggungPenjamin" => "0.00", "JumlahLayanan" => $jumlah_layanan_lain, "JumlahLayananRadiologi" => $jumlah_layanan_radiologi, "JumlahLayananLaboratorium" => $jumlah_layanan_lab, "JumlahItem" => 0, "JumlahItemRetur" => 0, "JumlahTT" => "0.00", "JumlahBiayaLain" => "0.00", "JumlahBayar" => $total_bayar, "TipeDiskonGlobal" => "Absolute", "DiskonGlobal" => "0.00", "TotalDitanggungPasien" => $total_ditanggung_pasien, "TotalDitanggungPenjamin" => $total_ditanggung_penjamin ); $raw_data[$key]['RegpasNominal'] = array( $regpasnominal ); //echo $total_bayar; $raw_data[$key]['TrxBayar'] = null; if($total_bayar > 0){ $sql = "SELECT M_PatientNoReg as MEDRECID, F_PaymentDetailID as BayarID, IFNULL(F_PaymentDetailAmount,0) as Jumlah, F_PaymentDetailCreated as Tanggal, 'Pelunasan' as JenisBayarID, CONCAT(F_PaymentNumber,'.',F_PaymentDetailID) as KwitansiID, IF(F_PaymentDetailM_PaymentTypeID = 21,CONCAT(F_PaymentDetailM_PaymentTypeID,'0',F_PaymentDetailM_BankAccountID),CONCAT(F_PaymentDetailM_PaymentTypeID,F_PaymentDetailM_BankAccountID)) as TipeBayarID, 'N' as Dibatalkan FROM f_paymentdetail JOIN f_payment ON F_PaymentDetailF_PaymentID = F_PaymentID AND F_PaymentIsActive = 'Y' JOIN t_orderheader ON F_PaymentT_OrderHeaderID = T_OrderHeaderID JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID AND M_PatientIsActive = 'Y' WHERE F_PaymentT_OrderHeaderID = ? AND F_PaymentDetailIsActive = 'Y' GROUP BY F_PaymentDetailID"; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'f_payment select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } //echo $this->db_onedev->last_query(); //exit; $bayar = $qry->result_array(); $raw_data[$key]['TrxBayar'] = $bayar; } $raw_data[$key]['Trxtt'] = null; $raw_data[$key]['TrxLain'] = null; $raw_data[$key]['PaketDispenser'] = null; $errors = []; //echo json_encode($raw_data[$key]); //exit; $result = $this->put_request($url, $raw_data[$key], $headers); if ($result['error'] != null) { $sql = "INSERT INTO ais_transaction( Ais_TransactionOrderHeaderLabNumber, Ais_TransactionJson, Ais_TransactionStatus, Ais_TransactionResponse, Ais_TransactionUrl, Ais_TransactionUserID, Ais_TransactionCreated ) VALUES( ?, ?, ?, ?, ?, ?, NOW() )"; $qry = $this->db_log->query($sql, array( $row['RegID'], json_encode($raw_data[$key]), 'error', json_encode($result), $url, 555 )); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'ais_transaction insert', 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999); exit; } $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'transaction insert', 'query' => $this->db_onedev->last_query(), 'json' => json_encode($result)), 999); $errors[] = array('RegID' => $row['RegID'], 'error' => $result['message']); }else{ //echo 'insert ais_transaction'; $sql = "INSERT INTO ais_transaction( Ais_TransactionOrderHeaderLabNumber, Ais_TransactionJson, Ais_TransactionStatus, Ais_TransactionResponse, Ais_TransactionUrl, Ais_TransactionUserID, Ais_TransactionCreated ) VALUES( ?, ?, ?, ?, ?, ?, NOW() )"; $qry = $this->db_log->query($sql, array( $row['RegID'], json_encode($raw_data[$key]), 'success', json_encode($result), $url, 555 )); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'ais_transaction insert', 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999); exit; } } } if(count($errors) > 0){ $success = array('status' => 'error', 'message' => 'Gagal Post Transaction', 'errors' => $errors); echo json_encode($success); exit; }else{ $success = array('status' => 'success', 'message' => 'Berhasil Post Transaction'); echo json_encode($success); exit; } } function post_transaction($labnum='',$xdate=null) { // Auth Login $login = $this->post_auth(); if (!$login['success']) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login)), 555); $errors = array('status' => 'error', 'message' => 'Gagal Login'); echo json_encode($errors); exit; } // Get config $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $url = $baseUrl . '/api/transaction_full/transaksi.php'; $headers = array( 'Header-Token: ' . $dt_config['AisConfigHeaderToken'], 'Authorization: Bearer ' . $dt_config['AisConfigAuthToken'] ); if($labnum == ''){ $xdate = $xdate == null ? date('Y-m-d') : $xdate; } // Get data $sql = "SELECT T_OrderHeaderID, T_OrderHeaderTotal as Total, T_OrderHeaderLabNumber as RegID, Mgm_McuM_BranchID as mgm_mcu_m_branch_id, M_PatientNoReg as MEDRECID, T_OrderHeaderDate as Tanggal, T_OrderHeaderDate as PulangTanggal, CorporateCode, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as PerusahaanID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181','',CorporateCode) as AsuransiID, T_PriceHeaderCode as GroupTarifID, M_PatientName as Nama, M_PatientIdentifierValue as NIK, DATE_FORMAT(M_PatientDOB, '%Y-%m-%d %H:%i:%s') as TglLahir, IF(M_PatientGender = 'male','L','P') as JnsKelamin, '' as NomorPolis, '' as NomerJaminan, '2' as JenisRegID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,1) as JenisPasienID, 'LAB-WESTERINDO-01' as DepartemenID, 'Y' as Pulang, 'Y' as BolehPulang, '' as Catatan, 'Y' as Verified, 'LABKLINIK' as KelasID, M_UserEmail as LoginBuat, T_OrderHeaderCreated as TanggalBuat, branch_order.M_BranchAis_branch_code as BranchCode, CorporateTypeais_pillar_code as PillarCode, '0000' as SiteCenterCode, M_UserEmail as VerifiedBy, T_OrderHeaderCreated as VerifiedDate, '' as TrxLayanan, '' as TrxItem, '' as TrxItemReturn, '' as RegpasNominal, '' as Trxtt, '' as TrxBayar, '' as TrxLain, '' as PaketDispenser FROM t_orderheader JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID -- AND Mgm_McuID = 1566 JOIN t_priceheader ON Mgm_McuT_PriceHeaderID = T_PriceHeaderID JOIN m_user ON T_OrderHeaderCreatedUserID = M_UserID LEFT JOIN cpone_log.ais_transaction ON Ais_TransactionOrderHeaderLabNumber = T_OrderHeaderLabNumber AND Ais_TransactionStatus = 'success' WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderLabNumber = ? AND Ais_TransactionID IS NULL GROUP BY T_OrderHeaderID LIMIT 100"; $qry = $this->db_onedev->query($sql, array($labnum)); //echo $this->db_onedev->last_query(); //exit; if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderheader select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $raw_data = $qry->result_array(); $data = array(); foreach ($raw_data as $key => $row) { $row['TrxLayanan'] = []; $row['TrxItem'] = []; $row['TrxItemReturn'] = []; $row['RegpasNominal'] = []; $row['Trxtt'] = null; $row['TrxBayar'] = []; $row['TrxLain'] = null; $row['PaketDispenser'] = null; $layanan = []; $sql = "SELECT * FROM ( SELECT T_OrderDetailID as TrxLayananID, case when Nat_GroupID = 1 then '1100' when Nat_GroupID = 2 then '1200' when Nat_GroupID = 3 then '1200' when Nat_GroupID = 4 then '1303' when Nat_GroupID = 5 then '1321' when Nat_GroupID = 6 then '1600' end as ProfitCostCenterCode, '' as TrxDepartemenID, T_OrderDetailCreated as TanggalBuat, T_OrderDetailT_TestSasCode as LayananID, T_OrderDetailT_TestName as LayananName, doctorlab.M_DoctorCode as DokterID, 0 as ShareRS, 0 as ShareDokter, 0 as ShareExternal, 0 as ShareLain2, '' as PihakExternal, '' as PihakLain2, 'Percentage' as ShareTipe, T_OrderDetailPrice as Harga, 1 as Jumlah, 1 as Rate, 'N' as FOC, T_OrderDetailDiscTotal as Diskon, 'Absolute' as TipeDiskon, '' as DepartemenID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',T_OrderDetailTotal,0) as DitanggungPasien, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,T_OrderDetailTotal) as DitanggungPenjamin, 0 as MarkUpCito, 'N' as Cito, T_PacketSasCode as PaketID, 'LABKLINIK' as KelasID, '' as TrxLayananDetail, 'Y' as Tagihkan FROM t_orderdetail JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' JOIN t_orderdetailorder ON T_OrderDetailT_OrderDetailOrderID = T_OrderDetailOrderID AND T_OrderDetailOrderIsPacket = 'Y' AND T_OrderDetailOrderIsActive = 'Y' JOIN t_packet ON T_OrderDetailOrderT_PacketID = T_PacketID JOIN t_packetdetail ON T_PacketDetailT_PacketID = T_PacketID AND T_PacketDetailT_TestID = T_OrderDetailT_TestID AND T_PacketDetailIsActive = 'Y' JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailOrderT_OrderHeaderID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID JOIN m_doctor doctorlab ON T_OrderHeaderPjM_DoctorID = M_DoctorID LEFT JOIN f_payment ON T_OrderHeaderID = F_PaymentT_OrderHeaderID AND F_PaymentIsActive = 'Y' WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' UNION SELECT T_OrderDetailID as TrxLayananID, Nat_GroupID as ProfitCostCenterCode, '' as TrxDepartemenID, T_OrderDetailCreated as TanggalBuat, T_OrderDetailT_TestSasCode as LayananID, T_OrderDetailT_TestName as LayananName, doctorlab.M_DoctorCode as DokterID, 0 as ShareRS, 0 as ShareDokter, 0 as ShareExternal, 0 as ShareLain2, '' as PihakExternal, '' as PihakLain2, 'Percentage' as ShareTipe, T_OrderDetailPrice as Harga, 1 as Jumlah, 1 as Rate, 'N' as FOC, T_OrderDetailDiscTotal as Diskon, 'Absolute' as TipeDiskon, '' as DepartemenID, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',T_OrderDetailTotal,0) as DitanggungPasien, IF(CorporateCode = 'C25040059' OR CorporateCode = 'C25060181',0,T_OrderDetailTotal) as DitanggungPenjamin, 0 as MarkUpCito, 'N' as Cito, '' as PaketID, 'LABKLINIK' as KelasID, NULL as TrxLayananDetail, 'Y' as Tagihkan FROM `t_orderdetailorder` JOIN t_orderdetail ON T_OrderdetailT_OrderHeaderID = T_OrderDetailOrderT_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderDetailT_OrderDetailOrderID = T_OrderDetailOrderID JOIN t_test ON T_TestID = T_OrderDetailT_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' JOIN t_orderheader ON T_OrderHeaderID = T_OrderDetailOrderT_OrderHeaderID JOIN corporate ON CorporateID = T_OrderHeaderCorporateID JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID JOIN m_doctor doctorlab ON T_OrderHeaderPjM_DoctorID = M_DoctorID LEFT JOIN f_payment ON T_OrderHeaderID = F_PaymentT_OrderHeaderID AND F_PaymentIsActive = 'Y' WHERE `T_OrderDetailOrderT_OrderHeaderID` = ? AND `T_OrderDetailOrderIsPacket` = 'N' AND T_OrderDetailOrderIsActive = 'Y' ) AS t_orderdetailorder"; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'],$row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $total_layanan_debug = 0; $layanan = $qry->result_array(); $raw_data[$key]['TrxLayanan'] = []; if(count($layanan) > 0){ foreach($layanan as $key_layanan => $row_layanan){ $total_layanan_debug += $row_layanan['Harga']; $layanan[$key_layanan]['TrxLayananDetail'] = []; $sql = "SELECT M_DoctorCode, M_DoctorID FROM `so_resultentry` JOIN t_orderdetail ON ? = So_ResultEntryT_OrderDetailID AND T_OrderDetailIsActive = 'Y' JOIN m_doctor ON M_DoctorID = So_ResultEntryM_DoctorID AND M_DoctorIsActive = 'Y' WHERE `So_ResultEntryT_OrderHeaderID` = ? AND `So_ResultEntryIsActive` = 'Y' AND `So_ResultEntryM_DoctorID` > '0' LIMIT 1 "; $qry = $this->db_onedev->query($sql, array($row_layanan['TrxLayananID'],$row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'so_resultentry select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_resultentry = $qry->result_array(); if (count($get_resultentry) > 0) { $row_layanan['DokterID'] = $get_resultentry[0]['M_DoctorCode']; } $raw_data[$key]['TrxLayanan'][] = $row_layanan; } } $regpasnominal = []; $jumlah_layanan_lab = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID = 1 WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); //echo $this->db_onedev->last_query(); //exit; if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail lab select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_layanan_lab = $qry->row_array(); $jumlah_layanan_lab = $get_layanan_lab['total_layanan_lab']; $jumlah_layanan_radiologi = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID = 3 WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail radiologi select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_layanan_radiologi = $qry->row_array(); $jumlah_layanan_radiologi = $get_layanan_radiologi['total_layanan_radiologi']; $jumlah_layanan_lain = 0; $sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y' JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND Nat_GroupID NOT IN (1,3) WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail lain select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_layanan_lain = $qry->row_array(); $jumlah_layanan_lain = $get_layanan_lain['total_layanan_lain']; $total_layanan = 0; $sql = "SELECT SUM(T_OrderDetailTotal) as total_layanan FROM t_orderdetail JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail total layanan select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $total_layanan = $qry->row_array(); $total_layanan = $total_layanan['total_layanan']; $total_bayar = 0; $sql = "SELECT F_PaymentTotal as total FROM f_payment WHERE F_PaymentT_OrderHeaderID = ? AND F_PaymentIsActive = 'Y' "; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'f_payment select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } $get_total_bayar = $qry->result_array(); if (count($get_total_bayar) > 0) { foreach($get_total_bayar as $key_total_bayar => $row_total_bayar){ $total_bayar += $row_total_bayar['total']; } } $mgm_mcu_m_branch_id = $row['mgm_mcu_m_branch_id']; $corporate_code = $row['CorporateCode']; $total_ditanggung_pasien = $corporate_code == 'C25040059' || $corporate_code == 'C25060181' ? $total_layanan : 0; $total_ditanggung_penjamin = $corporate_code == 'C25040059' || $corporate_code == 'C25060181' ? 0 : $total_layanan; $regpasnominal = array( "BiayaParamedik" => "0.00", "ParamedikDitanggungPasien" => "0.00", "ParamedikDitanggungPenjamin" => "0.00", "BiayaAdministrasi" => "0", "AdmDitanggungPasien" => "0.00", "AdmDitanggungPenjamin" => "0.00", "BiayaMaterai" => "0.00", "BiayaMateraiDitanggungPasien" => "0.00", "BiayaMateraiDitanggungPenjamin" => "0.00", "JumlahLayanan" => $jumlah_layanan_lain, "JumlahLayananRadiologi" => $jumlah_layanan_radiologi, "JumlahLayananLaboratorium" => $jumlah_layanan_lab, "JumlahItem" => 0, "JumlahItemRetur" => 0, "JumlahTT" => "0.00", "JumlahBiayaLain" => "0.00", "JumlahBayar" => $total_bayar, "TipeDiskonGlobal" => "Absolute", "DiskonGlobal" => "0.00", "TotalDitanggungPasien" => $total_ditanggung_pasien, "TotalDitanggungPenjamin" => $total_ditanggung_penjamin ); $raw_data[$key]['RegpasNominal'] = array( $regpasnominal ); //echo $total_bayar; $raw_data[$key]['TrxBayar'] = null; if($total_bayar > 0){ $sql = "SELECT M_PatientNoReg as MEDRECID, F_PaymentDetailID as BayarID, IFNULL(F_PaymentDetailAmount,0) as Jumlah, F_PaymentDetailCreated as Tanggal, 'Pelunasan' as JenisBayarID, CONCAT(F_PaymentNumber,'.',F_PaymentDetailID) as KwitansiID, IF(F_PaymentDetailM_PaymentTypeID = 21,CONCAT(F_PaymentDetailM_PaymentTypeID,'0',F_PaymentDetailM_BankAccountID),CONCAT(F_PaymentDetailM_PaymentTypeID,F_PaymentDetailM_BankAccountID)) as TipeBayarID, 'N' as Dibatalkan FROM f_paymentdetail JOIN f_payment ON F_PaymentDetailF_PaymentID = F_PaymentID AND F_PaymentIsActive = 'Y' JOIN t_orderheader ON F_PaymentT_OrderHeaderID = T_OrderHeaderID JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID AND M_PatientIsActive = 'Y' WHERE F_PaymentT_OrderHeaderID = ? AND F_PaymentDetailIsActive = 'Y' GROUP BY F_PaymentDetailID"; $qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'])); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'f_payment select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); exit; } //echo $this->db_onedev->last_query(); //exit; $bayar = $qry->result_array(); $raw_data[$key]['TrxBayar'] = $bayar; } $raw_data[$key]['Trxtt'] = null; $raw_data[$key]['TrxLain'] = null; $raw_data[$key]['PaketDispenser'] = null; $errors = []; //echo json_encode($raw_data[$key]); //exit; $result = $this->post_request($url, $raw_data[$key], $headers); if ($result['error'] != null) { $sql = "INSERT INTO ais_transaction( Ais_TransactionOrderHeaderLabNumber, Ais_TransactionJson, Ais_TransactionStatus, Ais_TransactionResponse, Ais_TransactionUrl, Ais_TransactionUserID, Ais_TransactionCreated ) VALUES( ?, ?, ?, ?, ?, ?, NOW() )"; $qry = $this->db_log->query($sql, array( $row['RegID'], json_encode($raw_data[$key]), 'error', json_encode($result), $url, 555 )); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'ais_transaction insert', 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999); exit; } $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'transaction insert', 'query' => $this->db_onedev->last_query(), 'json' => json_encode($result)), 999); $errors[] = array('RegID' => $row['RegID'], 'error' => $result['message']); }else{ //echo 'insert ais_transaction'; $sql = "INSERT INTO ais_transaction( Ais_TransactionOrderHeaderLabNumber, Ais_TransactionJson, Ais_TransactionStatus, Ais_TransactionResponse, Ais_TransactionUrl, Ais_TransactionUserID, Ais_TransactionCreated ) VALUES( ?, ?, ?, ?, ?, ?, NOW() )"; $qry = $this->db_log->query($sql, array( $row['RegID'], json_encode($raw_data[$key]), 'success', json_encode($result), $url, 555 )); if (!$qry) { $this->error_log(array('fn_name' => 'post_transaction', 'message' => 'ais_transaction insert', 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999); exit; } } } if(count($errors) > 0){ $success = array('status' => 'error', 'message' => 'Gagal Post Transaction', 'errors' => $errors); echo json_encode($success); exit; }else{ $success = array('status' => 'success', 'message' => 'Berhasil Post Transaction'); echo json_encode($success); exit; } } function get_transaction() { // Get id from query parameter $id = $this->input->get('id'); if (empty($id)) { $errors = array('status' => 'error', 'message' => 'ID parameter is required'); echo json_encode($errors); exit; } $login = $this->post_auth(); if (!$login['success']) { $this->error_log(array('fn_name' => 'get_transaction_auth', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login)), 999); $errors = array('status' => 'error', 'message' => 'Gagal Login'); echo json_encode($errors); exit; } $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $url = $baseUrl . '/api/transaksi?id=' . $id; $result = $this->get_request($url); if (!$result['success']) { $this->error_log(array('fn_name' => 'get_transaction', 'message' => 'failed get transaction', 'query' => '', 'json' => json_encode($result)), 999); $errors = array('status' => 'error', 'message' => 'Gagal Get Transaction'); echo json_encode($errors); exit; } $data = $result['response']['data'] ?? null; // $data = json_encode($data); $success = array('status' => 'success', 'message' => 'Berhasil Get Transaction', 'data' => $data); echo json_encode($success); exit; } function check_exist_transaction(){ $prm = $this->sys_input; $labnumber = $prm['labnumber'] ?? null; if(empty($labnumber)){ $errors = array('status' => 'error', 'message' => 'Labnumber parameter is required'); echo json_encode($errors); exit; } $transaction = $this->get_transaction_by_labnumber($labnumber); if($transaction){ $success = array('status' => 'success', 'message' => 'Transaksi sudah ada', 'data' => $transaction); echo json_encode($success); exit; }else{ $success = array('status' => 'error', 'message' => 'Transaksi tidak ditemukan', 'data' => null); echo json_encode($success); exit; } } function get_transaction_by_labnumber_debug($labnumber) { // Get id from query parameter if (empty($labnumber)) { $errors = array('status' => 'error', 'message' => 'Labnumber parameter is required'); echo json_encode($errors); exit; } $login = $this->post_auth(); if (!$login['success']) { $this->error_log(array('fn_name' => 'get_transaction_auth', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login)), 999); $errors = array('status' => 'error', 'message' => 'Gagal Login'); echo json_encode($errors); exit; } $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $url = $baseUrl . '/api/transaksi?id=' . $labnumber; $result = $this->get_request($url); $data = $result['response']['data'] ?? null; if($data && count($data) > 0){ echo json_encode($data); exit; }else{ return null; } } function get_transaction_by_labnumber($labnumber) { // Get id from query parameter if (empty($labnumber)) { $errors = array('status' => 'error', 'message' => 'Labnumber parameter is required'); echo json_encode($errors); exit; } $login = $this->post_auth(); if (!$login['success']) { $this->error_log(array('fn_name' => 'get_transaction_auth', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login)), 999); $errors = array('status' => 'error', 'message' => 'Gagal Login'); echo json_encode($errors); exit; } $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $url = $baseUrl . '/api/transaksi?id=' . $labnumber; $result = $this->get_request($url); $data = $result['response']['data'] ?? null; //echo json_encode($result); if($data && count($data) > 0){ return $data; }else{ return null; } } function delete_transaction_by_date(){ $failed_delete = array(); $already_deleted = array(); $transaksi_tidak_ditemukan = array(); $prm = $this->sys_input; $min_date = $prm['min_date'] ?? null; $max_date = $prm['max_date'] ?? null; if(empty($min_date) || empty($max_date)){ $errors = array('status' => 'error', 'message' => 'Min date and max date parameter is required'); echo json_encode($errors); exit; } if ($min_date && $max_date) { $min_date_obj = new DateTime($min_date); $max_date_obj = new DateTime($max_date); $date_diff = $min_date_obj->diff($max_date_obj); $days_diff = $date_diff->days; if ($days_diff > 5) { $errors = array('status' => 'error', 'message' => 'Selisih antara min_date dan max_date maksimal 7 hari'); echo json_encode($errors); exit; } } $params = array($min_date, $max_date); $sql = "SELECT T_OrderHeaderLabNumber as RegID FROM t_orderheader WHERE ( DATE(T_OrderHeaderDate) >= ? AND DATE(T_OrderHeaderDate) <= ? ) AND T_OrderHeaderIsActive = 'N' "; $qry = $this->db_onedev->query($sql, $params); //echo $this->db_onedev->last_query(); //exit; if(!$qry){ $this->error_log(array('fn_name' => 'delete_transaction_by_date', 'message' => 'Gagal select t_orderheader delete by date', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); $errors = array('status' => 'error', 'message' => 'Gagal select t_orderheader delete by date', 'query' => $this->db_onedev->last_query(), 'json' => ''); echo json_encode($errors); exit; } $raw_data = $qry->result_array(); if(count($raw_data) == 0){ $success = array('status' => 'success', 'message' => 'Tidak ada data yang perlu dihapus'); echo json_encode($success); exit; } foreach($raw_data as $row){ $get_transaction = $this->get_transaction_by_labnumber($row['RegID']); //echo json_encode($get_transaction); //exit; if($get_transaction && count($get_transaction) > 0){ $result = $this->delete_transaction_by_labnumber_private($row['RegID']); if(!$result){ $failed_delete[] = $row['RegID']; } }else{ $transaksi_tidak_ditemukan[] = $row['RegID']; } } $msg = ""; if(count($failed_delete) > 0){ $msg .= "Gagal Delete Transaction Some Data: " . implode(', ', $failed_delete); } if(count($transaksi_tidak_ditemukan) > 0){ $msg .= "Beberapa transaksi tidak ditemukan: " . implode(', ', $transaksi_tidak_ditemukan); } if(count($failed_delete) == 0 && count($transaksi_tidak_ditemukan) == 0){ $msg .= "Berhasil Delete Transaction"; } $arr_res = array( 'status' => 'selesai', 'message' => $msg, 'data' => $raw_data, 'failed_delete' => $failed_delete, 'transaksi_tidak_ditemukan' => $transaksi_tidak_ditemukan ); echo json_encode($arr_res); exit; } function delete_transaction_by_labnumber_range(){ $sql = "SELECT T_OrderHeaderLabNumber as RegID FROM t_orderheader JOIN delete_cpone_order_walk_in_inject ON delete_cpone_order_walk_in_inject.reg_id = t_orderheader.T_OrderHeaderLabNumber WHERE t_orderheader.T_OrderHeaderIsActive = 'N' LIMIT 100 "; $qry = $this->db_onedev->query($sql, $params); //echo $this->db_onedev->last_query(); //exit; if(!$qry){ $this->error_log(array('fn_name' => 'delete_transaction_by_labnumber_range', 'message' => 'Gagal select t_orderheader delete by labnumber range', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); $errors = array('status' => 'error', 'message' => 'Gagal select t_orderheader delete by labnumber range', 'query' => $this->db_onedev->last_query(), 'json' => ''); echo json_encode($errors); exit; } $raw_data = $qry->result_array(); if(count($raw_data) == 0){ $success = array('status' => 'success', 'message' => 'Tidak ada data yang perlu dihapus'); echo json_encode($success); exit; } foreach($raw_data as $row){ $get_transaction = $this->get_transaction_by_labnumber($row['RegID']); //echo json_encode($get_transaction); //exit; if($get_transaction && count($get_transaction) > 0){ $result = $this->delete_transaction_by_labnumber_private($row['RegID']); if(!$result){ $failed_delete[] = $row['RegID']; } }else{ $transaksi_tidak_ditemukan[] = $row['RegID']; } } $msg = ""; if(count($failed_delete) > 0){ $msg .= "Gagal Delete Transaction Some Data: " . implode(', ', $failed_delete); } if(count($transaksi_tidak_ditemukan) > 0){ $msg .= "Beberapa transaksi tidak ditemukan: " . implode(', ', $transaksi_tidak_ditemukan); } if(count($failed_delete) == 0 && count($transaksi_tidak_ditemukan) == 0){ $msg .= "Berhasil Delete Transaction"; } $arr_res = array( 'status' => 'selesai', 'message' => $msg, 'data' => $raw_data, 'failed_delete' => $failed_delete, 'transaksi_tidak_ditemukan' => $transaksi_tidak_ditemukan ); echo json_encode($arr_res); exit; } function delete_transaction_by_labnumber_private($labnumber) { $userid = 999777; //echo $labnumber; // Get id from query parameter if (empty($labnumber)) { $errors = array('status' => 'error', 'message' => 'Labnumber parameter is required'); echo json_encode($errors); exit; } // Get config first before using it $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $headers = array( 'Header-Token: ' . $dt_config['AisConfigHeaderToken'], 'Authorization: Bearer ' . $dt_config['AisConfigAuthToken'] ); $login = $this->post_auth(); if (!$login['success']) { $this->error_log(array('fn_name' => 'get_transaction_auth', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login)), 999); $errors = array('status' => 'error', 'message' => 'Gagal Login'); return false; } $url = $baseUrl . '/api/transaction_full/transaksi.php'; $result = $this->delete_request($url, ['RegID' => $labnumber], $headers); //echo json_encode($result); //response {"success":true} $sql = "INSERT INTO ais_transaction( Ais_TransactionOrderHeaderLabNumber, Ais_TransactionJson, Ais_TransactionStatus, Ais_TransactionResponse, Ais_TransactionUrl, Ais_TransactionUserID, Ais_TransactionCreated ) VALUES (?, ?, ?, ?, ?, ?, NOW())"; $qry = $this->db_log->query($sql, array( $labnumber, json_encode(['RegID' => $labnumber]), $result['success'] ? 'success' : 'error', json_encode($result), $url, $userid )); //echo $this->db_log->last_query(); //exit; if(!$qry){ echo $this->db_log->last_query(); exit; $errors = array('status' => 'error', 'message' => 'Gagal Insert Ais Transaction Log','query' => $this->db_log->last_query(), 'json' => json_encode($result)); $this->error_log(array('fn_name' => 'delete_transaction_by_labnumber', 'message' => 'ais_transaction insert', 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999); $this->sys_error($errors); exit; } if($result['success']){ return true; }else{ //$this->error_log(array('fn_name' => 'delete_transaction_by_labnumber', 'message' => 'Gagal Delete Transaction', 'query' => '', 'json' => json_encode($result)), 999); return false; } } function delete_transaction_by_labnumber() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user['M_UserID'] ?? 555; $labnumber = $prm['labnumber'] ?? null; // Get id from query parameter if (empty($labnumber)) { $errors = array('status' => 'error', 'message' => 'Labnumber parameter is required'); echo json_encode($errors); exit; } // Get config first before using it $dt_config = $this->get_config(); $baseUrl = $dt_config['AisConfigBaseUrl']; $headers = array( 'Header-Token: ' . $dt_config['AisConfigHeaderToken'], 'Authorization: Bearer ' . $dt_config['AisConfigAuthToken'] ); $login = $this->post_auth(); if (!$login['success']) { $this->error_log(array('fn_name' => 'get_transaction_auth', 'message' => 'failed auth', 'query' => '', 'json' => json_encode($login)), 999); $errors = array('status' => 'error', 'message' => 'Gagal Login'); echo json_encode($errors); exit; } $url = $baseUrl . '/api/transaction_full/transaksi.php'; $result = $this->delete_request($url, ['RegID' => $labnumber], $headers); //response {"success":true} $sql = "INSERT INTO ais_transaction( Ais_TransactionOrderHeaderLabNumber, Ais_TransactionJson, Ais_TransactionStatus, Ais_TransactionResponse, Ais_TransactionUrl, Ais_TransactionUserID, Ais_TransactionCreated ) VALUES (?, ?, ?, ?, ?, ?, NOW())"; $qry = $this->db_log->query($sql, array( $labnumber, json_encode(['RegID' => $labnumber]), $result['success'] ? 'success' : 'error', json_encode($result), $url, $userid )); if(!$qry){ $errors = array('status' => 'error', 'message' => 'Gagal Insert Ais Transaction Log','query' => $this->db_log->last_query(), 'json' => json_encode($result)); $this->error_log(array('fn_name' => 'delete_transaction_by_labnumber', 'message' => 'ais_transaction insert', 'query' => $this->db_log->last_query(), 'json' => json_encode($result)), 999); $this->sys_error($errors); exit; } if($result['success']){ $success = array('status' => 'success', 'message' => 'Berhasil Delete Transaction'); $this->sys_ok($success); exit; }else{ $errors = array('status' => 'error', 'message' => 'Gagal Delete Transaction'); $this->sys_error($errors); exit; } } function monitoring_transaction() { if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $sql_base = "SELECT oh.T_OrderHeaderID, oh.T_OrderHeaderM_PatientID AS patient_id, p.M_PatientName AS patient_name, oh.T_OrderHeaderLabNumber AS lab_number, b.M_BranchCode AS branch_code, b.M_BranchName AS branch_name, b.M_BranchCodeLab AS branch_code_lab, oh.T_OrderHeaderTotal AS total, at.Ais_TransactionStatus AS Ais_TransactionStatus, c.CorporateID AS corporate_id, c.CorporateName AS corporate_name, ais_pillar_name, IFNULL(mgm_mcu.Mgm_McuLabel, '') AS mgm_mcu_name, p.M_PatientNoReg AS noreg, IF(MAX(at.Ais_TransactionID) IS NULL, 'N', 'Y') AS ais_status, oh.T_OrderHeaderTotal AS total_amount 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 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 LEFT JOIN ais_pillar ON CorporateTypeais_pillar_code = ais_pillar_code LEFT JOIN ".$this->db_log->database.".ais_transaction at ON at.Ais_TransactionOrderHeaderLabNumber = oh.T_OrderHeaderLabNumber "; // Ambil parameter $start_date = $this->input->get('start_date'); $end_date = $this->input->get('end_date'); $ais_status = $this->input->get('ais_status'); $corporate_id = $this->input->get('corporate_id'); $lab_number = $this->input->get('lab_number'); $patient_name = $this->input->get('patient_name'); // Pagination $page = $this->input->get('page') ? intval($this->input->get('page')) : 1; $limit = 10; $offset = ($page - 1) * $limit; $params = []; $where_clauses = []; if ($start_date && $end_date) { $where_clauses[] = "( DATE(oh.T_OrderHeaderDate) BETWEEN ? AND ? )"; $params[] = $start_date; $params[] = $end_date; } if ($ais_status === 'Y') { $where_clauses[] = "at.Ais_TransactionID IS NOT NULL"; } elseif ($ais_status === 'N') { $where_clauses[] = "at.Ais_TransactionID IS NULL"; } if ($corporate_id) { $where_clauses[] = "oh.T_OrderHeaderCorporateID = ?"; $params[] = $corporate_id; } if ($lab_number) { $where_clauses[] = "oh.T_OrderHeaderLabNumber LIKE ?"; $params[] = "%$lab_number%"; } if ($patient_name) { $where_clauses[] = "p.M_PatientName LIKE ?"; $params[] = "%$patient_name%"; } // Build WHERE $where_sql = ""; if (!empty($where_clauses)) { $where_sql = " WHERE " . implode(" AND ", $where_clauses); } // Count total records for pagination $count_sql = "SELECT COUNT(DISTINCT oh.T_OrderHeaderID) as total FROM t_orderheader oh JOIN m_patient p ON p.M_PatientID = oh.T_OrderHeaderM_PatientID 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 $where_sql"; $qry_count = $this->db_onedev->query($count_sql, $params); $total = $qry_count->row()->total ?? 0; $sql = $sql_base . $where_sql . " GROUP BY oh.T_OrderHeaderID LIMIT $limit OFFSET $offset"; $qry = $this->db_onedev->query($sql, $params); //echo $this->db_onedev->last_query(); if (!$qry) { echo json_encode(['status' => 'error', 'message' => 'Gagal mengambil data monitoring.']); exit; } $data = $qry->result_array(); echo json_encode([ 'status' => 'success', 'message' => 'Berhasil mengambil data monitoring.', 'data' => $data, 'total' => $total, 'page' => $page, 'limit' => $limit, 'total_page' => ceil($total / $limit) ]); exit; } function get_corporate() { $sql = "SELECT CorporateID, CorporateName, CorporateCode FROM corporate"; $qry = $this->db_onedev->query($sql); if (!$qry) { $this->error_log(array('fn_name' => 'get_corporate', 'message' => 'select corporate data failed', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999); $this->output ->set_status_header(500) ->set_content_type('application/json') ->set_output(json_encode(['status' => 'error', 'message' => 'Failed to retrieve corporate data.'])); return; } $data = $qry->result_array(); echo json_encode(['status' => 'success', 'message' => 'Successfully retrieved corporate data.', 'data' => $data]); exit; } function get_json_response() { // Get lab_number from the query parameter $lab_number = $this->input->get('lab_number'); if (empty($lab_number)) { $this->output ->set_status_header(400) ->set_content_type('application/json') ->set_output(json_encode(['status' => 'error', 'message' => 'lab_number parameter is required'])); return; } $sql = "SELECT Ais_TransactionOrderHeaderLabNumber AS lab_number, Ais_TransactionCreated AS transaction_created, Ais_TransactionJson AS transaction_json, Ais_TransactionResponse AS transaction_response, 'N' as show_log FROM ais_transaction WHERE Ais_TransactionOrderHeaderLabNumber = ?"; $qry = $this->db_log->query($sql, array($lab_number)); $results = $qry->row_array(); $results = $qry->result_array(); if ($results) { // Loop through each result to decode JSON foreach ($results as &$result) { $result['transaction_json'] = json_decode($result['transaction_json']); $result['transaction_response'] = json_decode($result['transaction_response']); } unset($result); // Unset reference to avoid side effects echo json_encode(['status' => 'success', 'data' => $results]); } else { echo json_encode(['status' => 'error', 'message' => 'Data not found for the given lab number.']); } exit; } }