diff --git a/application/controllers/ais/Transactionv5.php b/application/controllers/ais/Transactionv5.php new file mode 100644 index 0000000..2f02eda --- /dev/null +++ b/application/controllers/ais/Transactionv5.php @@ -0,0 +1,3840 @@ +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 WHERE AisConfigBaseType = ? LIMIT 1"; + $qry = $this->db_onedev->query($sql, array('cpone')); + $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 AisConfigBaseType = ?"; + $qry = $this->db_onedev->query($sql, array($token, 'cpone')); + //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 + AND M_BranchIsSteemCell = 'N' + 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 + AND M_BranchIsSteemCell = 'N' + 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', 'query' => $this->db_onedev->last_query()); + 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' + when Nat_GroupID = 7 then '1500' + 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' + 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; + } + } + } + } + + $message = 'Berhasil Post Transaction'; + if (count($errors) > 0) { + $message = 'Gagal Beberapa Transaksi'; + } + echo json_encode(array('status' => 'OK', 'message' => $message, 'errors' => $errors, 'data' => [])); + exit; + } + + 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 + AND M_BranchIsSteemCell = 'N' + 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 + AND M_BranchIsSteemCell = 'N' + 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' + when Nat_GroupID = 7 then '1500' + 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' + 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 + AND M_BranchIsSteemCell = 'N' + 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 + AND M_BranchIsSteemCell = 'N' + 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' + when Nat_GroupID = 7 then '1500' + 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' + 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 + AND M_BranchIsSteemCell = 'N' + 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 + AND M_BranchIsSteemCell = 'N' + 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' + when Nat_GroupID = 7 then '1500' + 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' + 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 + AND M_BranchIsSteemCell = 'N' + 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' + when Nat_GroupID = 7 then '1500' + 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 + WHERE + T_OrderDetailT_OrderHeaderID = ? AND + T_OrderDetailIsActive = 'Y' + UNION + 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' + when Nat_GroupID = 7 then '1500' + 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, + '' 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 + 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; + } +}