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