Files
2026-04-27 10:26:26 +07:00

1944 lines
86 KiB
PHP

<?php
class Transaction extends MY_Controller
{
var $db_onedev;
public function index()
{
echo "Transaction API";
}
public function __construct()
{
parent::__construct();
$this->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;
}
/**
* 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);
$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;
}
public function get_request($url, $headers = array())
{
// Retrieve configuration
$config = $this->get_config();
$token = $config['AisConfigAuthToken'] ?? 'default-token';
$header_token = $config['AisConfigHeaderToken'];
// Default headers based on the curl command
$default_headers = array(
'Header-Token: ' . $header_token,
'Authorization: Bearer ' . $token
);
// Merge custom headers with default headers
$final_headers = array_merge($default_headers, $headers);
// Initialize cURL
$ch = curl_init();
// Set cURL options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $final_headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// Execute cURL request
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
// Close cURL
curl_close($ch);
// Prepare result
$result = array(
'success' => false,
'http_code' => $http_code,
'response' => null,
'error' => null
);
if ($error) {
$result['error'] = $error;
} else {
$decoded = json_decode($response, true);
$result['response'] = $decoded;
// Check if response is successful based on http code
if ($http_code === 200) {
$result['success'] = true;
}
}
return $result;
}
function get_config()
{
$sql = "SELECT * FROM ais_config LIMIT 1";
$qry = $this->db_onedev->query($sql);
$dt_config = $qry->row_array();
return $dt_config;
}
/**
* POST request to auth API
* @param string $username Username for authentication
* @param string $password Password for authentication
* @return array Response from API
*/
public function post_auth()
{
$dt_config = $this->get_config();
$baseUrl = $dt_config['AisConfigBaseUrl'];
$url = $baseUrl.'/api/auth/auth.php';
$headers = array(
'Header-Token: '.$dt_config['AisConfigHeaderToken']
);
$username = $dt_config['AisConfigUsername'];
$password = $dt_config['AisConfigPassword'];
$data = array(
'username' => $username,
'password' => $password
);
$result = $this->post_request($url, $data, $headers);
$sql = "INSERT INTO ais_login_log(
AisLoginLogUsername,
AisLoginLogPassword,
AisLoginLogHeaderToken,
AisLoginLogResult,
AisLoginLogCreated
)
VALUES(
?,
?,
?,
?,
NOW()
)";
$qry = $this->db_log->query($sql, array($username,$password,$dt_config['AisConfigHeaderToken'],json_encode($result)));
if(!$qry){
$this->error_log(array('fn_name'=>'post_auth','message'=>'ais_login_log insert','query'=>$sql,'json'=>json_encode($result)),999);
exit;
}
//print_r($result);
//exit;
// Check if success
if(!$result['success']){
$this->error_log(array('fn_name'=>'post_auth','message'=>'failed auth','query'=>'','json'=>json_encode($result)),999);
$errors = array('status' => 'error','message' => 'Gagal Login');
return $errors;
}else{
// Update token
$token = $result['data']['token'];;
$sql = "UPDATE ais_config SET AisConfigAuthToken = ? WHERE AisConfigID = 1";
$qry = $this->db_onedev->query($sql, array($token));
//echo $this->db_onedev->last_query();
//exit;
if(!$qry){
$this->error_log(array('fn_name'=>'post_auth','message'=>'ais_config update','query'=>$sql,'json'=>''),999);
$errors = array('status' => 'error','message' => 'Gagal Update Token');
return $errors;
}
return $result;
}
}
function post_transaction_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,
Mgm_McuM_BranchID as mgm_mcu_m_branch_id,
M_PatientNoReg as MEDRECID,
T_OrderHeaderDate as Tanggal,
T_OrderHeaderDate as PulangTanggal,
IF(Mgm_McuM_BranchID = 100,'',CorporateCode) as PerusahaanID,
IF(Mgm_McuM_BranchID = 100,'',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(Mgm_McuM_BranchID = 100,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,
'4569' 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
T_OrderHeaderLabNumber = ?
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'
";
$qry = $this->db_onedev->query($sql, array($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){
$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'
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(Mgm_McuM_BranchID = 100,T_OrderDetailTotal,0) as DitanggungPasien,
IF(Mgm_McuM_BranchID = 100,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 mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID
JOIN m_doctor doctorlab ON T_OrderHeaderPjM_DoctorID = M_DoctorID
LEFT JOIN f_payment ON T_OrderHeaderID = F_PaymentT_OrderHeaderID AND F_PaymentIsActive = 'Y'
WHERE
T_OrderDetailT_OrderHeaderID = ? AND
T_OrderDetailIsActive = 'Y'
UNION
SELECT T_OrderDetailID as TrxLayananID,
Nat_GroupID as ProfitCostCenterCode,
'' as TrxDepartemenID,
T_OrderDetailCreated as TanggalBuat,
T_OrderDetailT_TestSasCode as LayananID,
T_OrderDetailT_TestName as LayananName,
doctorlab.M_DoctorCode as DokterID,
0 as ShareRS,
0 as ShareDokter,
0 as ShareExternal,
0 as ShareLain2,
'' as PihakExternal,
'' as PihakLain2,
'Percentage' as ShareTipe,
T_OrderDetailPrice as Harga,
1 as Jumlah,
1 as Rate,
'N' as FOC,
T_OrderDetailDiscTotal as Diskon,
'Absolute' as TipeDiskon,
'' as DepartemenID,
IF(Mgm_McuM_BranchID = 100,T_OrderDetailTotal,0) as DitanggungPasien,
IF(Mgm_McuM_BranchID = 100,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 mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID
JOIN m_doctor doctorlab ON T_OrderHeaderPjM_DoctorID = M_DoctorID
LEFT JOIN f_payment ON T_OrderHeaderID = F_PaymentT_OrderHeaderID AND F_PaymentIsActive = 'Y'
WHERE `T_OrderDetailOrderT_OrderHeaderID` = ? AND `T_OrderDetailOrderIsPacket` = 'N' AND
T_OrderDetailOrderIsActive = 'Y'
) AS t_orderdetailorder";
$qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'],$row['T_OrderHeaderID']));
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$total_layanan_debug = 0;
$layanan = $qry->result_array();
$raw_data[$key]['TrxLayanan'] = [];
if(count($layanan) > 0){
foreach($layanan as $key_layanan => $row_layanan){
$total_layanan_debug += $row_layanan['Harga'];
$layanan[$key_layanan]['TrxLayananDetail'] = [];
$sql = "SELECT M_DoctorCode, M_DoctorID
FROM `so_resultentry`
JOIN t_orderdetail ON ? = So_ResultEntryT_OrderDetailID AND T_OrderDetailIsActive = 'Y'
JOIN m_doctor ON M_DoctorID = So_ResultEntryM_DoctorID AND M_DoctorIsActive = 'Y'
WHERE `So_ResultEntryT_OrderHeaderID` = ? AND
`So_ResultEntryIsActive` = 'Y' AND `So_ResultEntryM_DoctorID` > '0'
LIMIT 1
";
$qry = $this->db_onedev->query($sql, array($row_layanan['TrxLayananID'],$row['T_OrderHeaderID']));
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 'so_resultentry select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$get_resultentry = $qry->result_array();
if (count($get_resultentry) > 0) {
$row_layanan['DokterID'] = $get_resultentry[0]['M_DoctorCode'];
}
$raw_data[$key]['TrxLayanan'][] = $row_layanan;
}
}
$regpasnominal = [];
$jumlah_layanan_lab = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 1
WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y'
";
$qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID']));
//echo $this->db_onedev->last_query();
//exit;
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail lab select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$get_layanan_lab = $qry->row_array();
$jumlah_layanan_lab = $get_layanan_lab['total_layanan_lab'];
$jumlah_layanan_radiologi = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 3
WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y'
";
$qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID']));
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail radiologi select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$get_layanan_radiologi = $qry->row_array();
$jumlah_layanan_radiologi = $get_layanan_radiologi['total_layanan_radiologi'];
$jumlah_layanan_lain = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID IN (2,4)
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, Mgm_McuM_BranchID as BranchID
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID
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'];
$total_ditanggung_pasien = $mgm_mcu_m_branch_id == 100 ? $total_layanan : 0;
$total_ditanggung_penjamin = $mgm_mcu_m_branch_id == 100 ? 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,
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 (isset($result['success']) && !$result['success']) {
$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,
Mgm_McuM_BranchID as mgm_mcu_m_branch_id,
M_PatientNoReg as MEDRECID,
T_OrderHeaderDate as Tanggal,
T_OrderHeaderDate as PulangTanggal,
IF(Mgm_McuM_BranchID = 100,'',CorporateCode) as PerusahaanID,
IF(Mgm_McuM_BranchID = 100,'',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(Mgm_McuM_BranchID = 100,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,
'4569' 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
T_OrderHeaderLabNumber = ?
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'
";
$qry = $this->db_onedev->query($sql, array($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){
$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'
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(Mgm_McuM_BranchID = 100,T_OrderDetailTotal,0) as DitanggungPasien,
IF(Mgm_McuM_BranchID = 100,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 mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID
JOIN m_doctor doctorlab ON T_OrderHeaderPjM_DoctorID = M_DoctorID
LEFT JOIN f_payment ON T_OrderHeaderID = F_PaymentT_OrderHeaderID AND F_PaymentIsActive = 'Y'
WHERE
T_OrderDetailT_OrderHeaderID = ? AND
T_OrderDetailIsActive = 'Y'
UNION
SELECT T_OrderDetailID as TrxLayananID,
Nat_GroupID as ProfitCostCenterCode,
'' as TrxDepartemenID,
T_OrderDetailCreated as TanggalBuat,
T_OrderDetailT_TestSasCode as LayananID,
T_OrderDetailT_TestName as LayananName,
doctorlab.M_DoctorCode as DokterID,
0 as ShareRS,
0 as ShareDokter,
0 as ShareExternal,
0 as ShareLain2,
'' as PihakExternal,
'' as PihakLain2,
'Percentage' as ShareTipe,
T_OrderDetailPrice as Harga,
1 as Jumlah,
1 as Rate,
'N' as FOC,
T_OrderDetailDiscTotal as Diskon,
'Absolute' as TipeDiskon,
'' as DepartemenID,
IF(Mgm_McuM_BranchID = 100,T_OrderDetailTotal,0) as DitanggungPasien,
IF(Mgm_McuM_BranchID = 100,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 mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID
JOIN m_doctor doctorlab ON T_OrderHeaderPjM_DoctorID = M_DoctorID
LEFT JOIN f_payment ON T_OrderHeaderID = F_PaymentT_OrderHeaderID AND F_PaymentIsActive = 'Y'
WHERE `T_OrderDetailOrderT_OrderHeaderID` = ? AND `T_OrderDetailOrderIsPacket` = 'N' AND
T_OrderDetailOrderIsActive = 'Y'
) AS t_orderdetailorder";
$qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'],$row['T_OrderHeaderID']));
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$total_layanan_debug = 0;
$layanan = $qry->result_array();
$raw_data[$key]['TrxLayanan'] = [];
if(count($layanan) > 0){
foreach($layanan as $key_layanan => $row_layanan){
$total_layanan_debug += $row_layanan['Harga'];
$layanan[$key_layanan]['TrxLayananDetail'] = [];
$sql = "SELECT M_DoctorCode, M_DoctorID
FROM `so_resultentry`
JOIN t_orderdetail ON ? = So_ResultEntryT_OrderDetailID AND T_OrderDetailIsActive = 'Y'
JOIN m_doctor ON M_DoctorID = So_ResultEntryM_DoctorID AND M_DoctorIsActive = 'Y'
WHERE `So_ResultEntryT_OrderHeaderID` = ? AND
`So_ResultEntryIsActive` = 'Y' AND `So_ResultEntryM_DoctorID` > '0'
LIMIT 1
";
$qry = $this->db_onedev->query($sql, array($row_layanan['TrxLayananID'],$row['T_OrderHeaderID']));
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 'so_resultentry select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$get_resultentry = $qry->result_array();
if (count($get_resultentry) > 0) {
$row_layanan['DokterID'] = $get_resultentry[0]['M_DoctorCode'];
}
$raw_data[$key]['TrxLayanan'][] = $row_layanan;
}
}
$regpasnominal = [];
$jumlah_layanan_lab = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 1
WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y'
";
$qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID']));
//echo $this->db_onedev->last_query();
//exit;
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail lab select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$get_layanan_lab = $qry->row_array();
$jumlah_layanan_lab = $get_layanan_lab['total_layanan_lab'];
$jumlah_layanan_radiologi = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 3
WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y'
";
$qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID']));
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail radiologi select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$get_layanan_radiologi = $qry->row_array();
$jumlah_layanan_radiologi = $get_layanan_radiologi['total_layanan_radiologi'];
$jumlah_layanan_lain = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID IN (2,4)
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, Mgm_McuM_BranchID as BranchID
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID
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'];
$total_ditanggung_pasien = $mgm_mcu_m_branch_id == 100 ? $total_layanan : 0;
$total_ditanggung_penjamin = $mgm_mcu_m_branch_id == 100 ? 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,
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['status'] == '400') {
$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,
IF(Mgm_McuM_BranchID = 100,'',CorporateCode) as PerusahaanID,
IF(Mgm_McuM_BranchID = 100,'',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(Mgm_McuM_BranchID = 100,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,
'4569' as SiteCenterCode,
M_UserEmail as VerifiedBy,
T_OrderHeaderCreated as VerifiedDate,
'' as TrxLayanan,
'' as TrxItem,
'' as TrxItemReturn,
'' as RegpasNominal,
'' as Trxtt,
'' as TrxBayar,
'' as TrxLain,
'' as PaketDispenser
FROM t_orderheader
JOIN m_branch branch_order ON branch_order.M_BranchID = T_OrderHeaderM_BranchID
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
JOIN corporate ON CorporateID = T_OrderHeaderCorporateID
JOIN corporate_type ON CorporateCorporateTypeID = CorporateTypeID
JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID -- AND Mgm_McuID = 1566
JOIN t_priceheader ON Mgm_McuT_PriceHeaderID = T_PriceHeaderID
JOIN m_user ON T_OrderHeaderCreatedUserID = M_UserID
LEFT JOIN cpone_log.ais_transaction ON Ais_TransactionOrderHeaderLabNumber = T_OrderHeaderLabNumber AND
Ais_TransactionStatus = 'success'
WHERE T_OrderHeaderIsActive = 'Y' AND
T_OrderHeaderLabNumber = ? AND
Ais_TransactionID IS NULL
GROUP BY T_OrderHeaderID
LIMIT 100";
$qry = $this->db_onedev->query($sql, array($labnum));
//echo $this->db_onedev->last_query();
//exit;
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderheader select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$raw_data = $qry->result_array();
$data = array();
foreach ($raw_data as $key => $row) {
$row['TrxLayanan'] = [];
$row['TrxItem'] = [];
$row['TrxItemReturn'] = [];
$row['RegpasNominal'] = [];
$row['Trxtt'] = null;
$row['TrxBayar'] = [];
$row['TrxLain'] = null;
$row['PaketDispenser'] = null;
$layanan = [];
$sql = "SELECT * FROM (
SELECT T_OrderDetailID as TrxLayananID,
case
when Nat_GroupID = 1 then '1100'
when Nat_GroupID = 2 then '1200'
when Nat_GroupID = 3 then '1200'
when Nat_GroupID = 4 then '1303'
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(Mgm_McuM_BranchID = 100,T_OrderDetailTotal,0) as DitanggungPasien,
IF(Mgm_McuM_BranchID = 100,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 mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID
JOIN m_doctor doctorlab ON T_OrderHeaderPjM_DoctorID = M_DoctorID
LEFT JOIN f_payment ON T_OrderHeaderID = F_PaymentT_OrderHeaderID AND F_PaymentIsActive = 'Y'
WHERE
T_OrderDetailT_OrderHeaderID = ? AND
T_OrderDetailIsActive = 'Y'
UNION
SELECT T_OrderDetailID as TrxLayananID,
Nat_GroupID as ProfitCostCenterCode,
'' as TrxDepartemenID,
T_OrderDetailCreated as TanggalBuat,
T_OrderDetailT_TestSasCode as LayananID,
T_OrderDetailT_TestName as LayananName,
doctorlab.M_DoctorCode as DokterID,
0 as ShareRS,
0 as ShareDokter,
0 as ShareExternal,
0 as ShareLain2,
'' as PihakExternal,
'' as PihakLain2,
'Percentage' as ShareTipe,
T_OrderDetailPrice as Harga,
1 as Jumlah,
1 as Rate,
'N' as FOC,
T_OrderDetailDiscTotal as Diskon,
'Absolute' as TipeDiskon,
'' as DepartemenID,
IF(Mgm_McuM_BranchID = 100,T_OrderDetailTotal,0) as DitanggungPasien,
IF(Mgm_McuM_BranchID = 100,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 mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID
JOIN m_doctor doctorlab ON T_OrderHeaderPjM_DoctorID = M_DoctorID
LEFT JOIN f_payment ON T_OrderHeaderID = F_PaymentT_OrderHeaderID AND F_PaymentIsActive = 'Y'
WHERE `T_OrderDetailOrderT_OrderHeaderID` = ? AND `T_OrderDetailOrderIsPacket` = 'N' AND
T_OrderDetailOrderIsActive = 'Y'
) AS t_orderdetailorder";
$qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID'],$row['T_OrderHeaderID']));
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$total_layanan_debug = 0;
$layanan = $qry->result_array();
$raw_data[$key]['TrxLayanan'] = [];
if(count($layanan) > 0){
foreach($layanan as $key_layanan => $row_layanan){
$total_layanan_debug += $row_layanan['Harga'];
$layanan[$key_layanan]['TrxLayananDetail'] = [];
$sql = "SELECT M_DoctorCode, M_DoctorID
FROM `so_resultentry`
JOIN t_orderdetail ON ? = So_ResultEntryT_OrderDetailID AND T_OrderDetailIsActive = 'Y'
JOIN m_doctor ON M_DoctorID = So_ResultEntryM_DoctorID AND M_DoctorIsActive = 'Y'
WHERE `So_ResultEntryT_OrderHeaderID` = ? AND
`So_ResultEntryIsActive` = 'Y' AND `So_ResultEntryM_DoctorID` > '0'
LIMIT 1
";
$qry = $this->db_onedev->query($sql, array($row_layanan['TrxLayananID'],$row['T_OrderHeaderID']));
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 'so_resultentry select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$get_resultentry = $qry->result_array();
if (count($get_resultentry) > 0) {
$row_layanan['DokterID'] = $get_resultentry[0]['M_DoctorCode'];
}
$raw_data[$key]['TrxLayanan'][] = $row_layanan;
}
}
$regpasnominal = [];
$jumlah_layanan_lab = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lab
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 1
WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y'
";
$qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID']));
//echo $this->db_onedev->last_query();
//exit;
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail lab select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$get_layanan_lab = $qry->row_array();
$jumlah_layanan_lab = $get_layanan_lab['total_layanan_lab'];
$jumlah_layanan_radiologi = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_radiologi
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID = 3
WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y'
";
$qry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID']));
if (!$qry) {
$this->error_log(array('fn_name' => 'post_transaction', 'message' => 't_orderdetail radiologi select', 'query' => $this->db_onedev->last_query(), 'json' => ''), 999);
exit;
}
$get_layanan_radiologi = $qry->row_array();
$jumlah_layanan_radiologi = $get_layanan_radiologi['total_layanan_radiologi'];
$jumlah_layanan_lain = 0;
$sql = "SELECT IFNULL(SUM(T_OrderDetailTotal),0) as total_layanan_lain
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y'
JOIN nat_group ON Nat_GroupID = Nat_TestNat_GroupID AND Nat_GroupIsActive = 'Y' AND
Nat_GroupID IN (2,4)
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, Mgm_McuM_BranchID as BranchID
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID
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'];
$total_ditanggung_pasien = $mgm_mcu_m_branch_id == 100 ? $total_layanan : 0;
$total_ditanggung_penjamin = $mgm_mcu_m_branch_id == 100 ? 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,
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['status'] == '400') {
$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 monitoring_transaction()
{
$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,
oh.T_OrderHeaderTotal AS total,
at.Ais_TransactionStatus AS Ais_TransactionStatus,
c.CorporateID AS corporate_id,
IF(MAX(at.Ais_TransactionID) IS NULL, 'N', 'Y') AS ais_status
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 ".$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);
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
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;
}
}