436 lines
16 KiB
PHP
436 lines
16 KiB
PHP
<?php
|
|
defined("BASEPATH") or exit("No direct script access allowed");
|
|
class Apilis
|
|
{
|
|
function __construct()
|
|
{
|
|
$CI = &get_instance();
|
|
$this->db_smartone = $CI->load->database("default", true);
|
|
$this->db_onedev = $CI->load->database("default", true);
|
|
}
|
|
|
|
|
|
|
|
function clean_mysqli_connection($dbc)
|
|
{
|
|
while (mysqli_more_results($dbc)) {
|
|
if (mysqli_next_result($dbc)) {
|
|
$result = mysqli_use_result($dbc);
|
|
|
|
if (get_class($result) == 'mysqli_stmt') {
|
|
mysqli_stmt_free_result($result);
|
|
} else {
|
|
unset($result);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function GetOrderDetail($nolab)
|
|
{
|
|
//$param = $this->param();
|
|
//$nolab = $param["orderNumber"];
|
|
$debug=true;
|
|
|
|
$sql = "SELECT COUNT(*) as exist_rujukan
|
|
FROM t_orderheader
|
|
JOIN t_orderheaderaddon ON T_OrderHeaderID = T_OrderHeaderAddonT_OrderHeaderID AND
|
|
T_OrderHeaderAddonIsActive = 'Y' AND T_OrderHeaderAddOnOrderType = 'RUJUKAN'
|
|
JOIN corporate ON T_OrderHeaderCorporateID = CorporateID AND CorporateIsActive = 'Y' AND
|
|
CorporateCorporateTypeID IN (1,3,4,12)
|
|
WHERE T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y'";
|
|
|
|
$qry = $this->db_onedev->query($sql, [$nolab]);
|
|
if (!$qry) {
|
|
|
|
echo json_encode([
|
|
"Status" => ["OK" => false, "Code" => 0, "Messages" => "Get Order Detail Rujukan issue [Order004]"],
|
|
"orderItemList" => [],
|
|
]);
|
|
exit;
|
|
}
|
|
$get_rujukan = $qry->row_array();
|
|
$exits_rujukan = $get_rujukan["exist_rujukan"];
|
|
|
|
if($exits_rujukan == 0) {
|
|
$sql = "SELECT
|
|
M_BranchCodeBridging AS outletId,
|
|
T_OrderHeaderLabNumber as orderNumber,
|
|
REPLACE(T_OrderHeaderDate, '-', '/') AS orderDT,
|
|
T_OrderHeaderLabNumber AS visitNumber,
|
|
M_PatientNoreg AS patientId,
|
|
M_PatientName AS patientName,
|
|
IF(LOWER(M_PatientGender) = 'male', 'L', 'P') AS sexId,
|
|
IF(LOWER(M_PatientGender) = 'male', 'Male', 'Female') AS sexName,
|
|
REPLACE(M_PatientDOB, '-', '/') AS dob,
|
|
IFNULL(M_TitleName,'') as titleName,
|
|
'' AS pob,
|
|
M_PatientAddress AS addressName,
|
|
'' AS cityId,
|
|
M_PatientAddressCity AS cityName,
|
|
M_PatientHp as mobileNumber,
|
|
'' AS phoneNumber,
|
|
'' AS faxNumber,
|
|
M_PatientEmail as email,
|
|
M_PatientIdentifierValue as idNIK,
|
|
'' as idSIM,
|
|
'' as idPassport,
|
|
'CpOne001' AS physicianId,
|
|
'Dokter Laboratorium' AS physicianName,
|
|
'' as isCito,
|
|
'' as diagnoseId,
|
|
'' as diagnoseName,
|
|
M_BranchCode AS guarantorId,
|
|
M_BranchName AS guarantorName,
|
|
'Cp1' AS agreementId,
|
|
'CpOne' AS agreementName,
|
|
'' as serviceUnitId,
|
|
'' as serviceUnitName,
|
|
'' as wardPoliId,
|
|
'' as wardPoliName,
|
|
'' as roomId,
|
|
'' as roomName,
|
|
CorporateID as bedId,
|
|
CorporateName as bedName,
|
|
'' as classId,
|
|
'' as className,
|
|
1 as regUserId,
|
|
'admin' as regUserName,
|
|
|
|
RIGHT(M_BranchCode, 6) AS BranchCode,
|
|
M_BranchName AS BranchName,
|
|
FALSE AS ReceivedFlag,
|
|
NULL AS LabRegNo,
|
|
NULL AS ReceivedDateTime,
|
|
IFNULL(Nat_TestMapCode, 'Un-Map') AS ItemCode,
|
|
T_TestName AS ItemName,
|
|
IF(Nat_TestReferID IS NULL, 'N', 'Y') AS IsRefer
|
|
FROM
|
|
t_orderheader
|
|
JOIN
|
|
m_branch ON T_OrderHeaderLabNumber = ?
|
|
AND T_OrderHeaderM_BranchID = M_BranchID
|
|
AND M_BranchIsActive = 'Y'
|
|
JOIN
|
|
corporate ON T_OrderHeaderCorporateID = CorporateID
|
|
AND CorporateIsActive = 'Y'
|
|
JOIN
|
|
m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
|
JOIN
|
|
t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
|
|
AND T_OrderDetailIsActive = 'Y'
|
|
JOIN
|
|
t_test ON T_OrderDetailT_TestID = T_TestID
|
|
AND T_TestIsPrice = 'Y'
|
|
AND T_TestNat_GroupID = 1
|
|
LEFT JOIN nat_testrefer ON Nat_TestReferNat_TestID = T_TestNat_TestID AND Nat_TestReferIsActive = 'Y' AND Nat_TestReferM_BranchID = M_BranchID
|
|
LEFT JOIN nat_testmap ON T_TestNat_TestID = Nat_TestMapNat_TestID
|
|
AND Nat_TestMapIsActive = 'Y'
|
|
LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID
|
|
WHERE
|
|
T_OrderHeaderIsActive = 'Y' AND ISNULL(Nat_TestReferNat_TestID)
|
|
ORDER BY
|
|
T_OrderHeaderLabNumber, Nat_TestMapCode;";
|
|
|
|
$qry = $this->db_onedev->query($sql, [$nolab]);
|
|
}else{
|
|
$sql = "SELECT
|
|
M_BranchCodeBridging AS outletId,
|
|
T_OrderHeaderLabNumber as orderNumber,
|
|
REPLACE(T_OrderHeaderDate, '-', '/') AS orderDT,
|
|
T_OrderHeaderLabNumber AS visitNumber,
|
|
M_PatientNoreg AS patientId,
|
|
M_PatientName AS patientName,
|
|
IF(LOWER(M_PatientGender) = 'male', 'L', 'P') AS sexId,
|
|
IF(LOWER(M_PatientGender) = 'male', 'Male', 'Female') AS sexName,
|
|
REPLACE(M_PatientDOB, '-', '/') AS dob,
|
|
IFNULL(M_TitleName,'') as titleName,
|
|
'' AS pob,
|
|
M_PatientAddress AS addressName,
|
|
'' AS cityId,
|
|
M_PatientAddressCity AS cityName,
|
|
M_PatientHp as mobileNumber,
|
|
'' AS phoneNumber,
|
|
'' AS faxNumber,
|
|
M_PatientEmail as email,
|
|
M_PatientIdentifierValue as idNIK,
|
|
'' as idSIM,
|
|
'' as idPassport,
|
|
M_DoctorCode AS physicianId,
|
|
M_DoctorName AS physicianName,
|
|
'' as isCito,
|
|
'' as diagnoseId,
|
|
T_OrderHeaderDiagnose as diagnoseName,
|
|
CorporateOldCompanyID AS guarantorId,
|
|
CorporateName AS guarantorName,
|
|
'Cp1' AS agreementId,
|
|
'CpOne' AS agreementName,
|
|
'' as serviceUnitId,
|
|
'' as serviceUnitName,
|
|
'' as wardPoliId,
|
|
'' as wardPoliName,
|
|
'' as roomId,
|
|
'' as roomName,
|
|
CorporateID as bedId,
|
|
CorporateName as bedName,
|
|
'' as classId,
|
|
'' as className,
|
|
1 as regUserId,
|
|
'admin' as regUserName,
|
|
RIGHT(M_BranchCode, 6) AS BranchCode,
|
|
M_BranchName AS BranchName,
|
|
FALSE AS ReceivedFlag,
|
|
NULL AS LabRegNo,
|
|
NULL AS ReceivedDateTime,
|
|
IFNULL(Nat_TestMapCode, 'Un-Map') AS ItemCode,
|
|
T_TestName AS ItemName,
|
|
IF(Nat_TestReferID IS NULL, 'N', 'Y') AS IsRefer
|
|
FROM
|
|
t_orderheader
|
|
JOIN
|
|
m_branch ON T_OrderHeaderLabNumber = ?
|
|
AND T_OrderHeaderM_BranchID = M_BranchID
|
|
AND M_BranchIsActive = 'Y'
|
|
JOIN
|
|
corporate ON T_OrderHeaderCorporateID = CorporateID
|
|
AND CorporateIsActive = 'Y'
|
|
JOIN
|
|
m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
|
JOIN
|
|
t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' AND T_OrderHeaderAddOnOrderType = 'RUJUKAN'
|
|
JOIN
|
|
m_doctor ON T_OrderHeaderAddOnM_DoctorSenderID = M_DoctorID
|
|
AND M_DoctorIsActive = 'Y'
|
|
JOIN
|
|
t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
|
|
AND T_OrderDetailIsActive = 'Y'
|
|
JOIN
|
|
t_test ON T_OrderDetailT_TestID = T_TestID
|
|
AND T_TestIsPrice = 'Y'
|
|
AND T_TestNat_GroupID = 1
|
|
LEFT JOIN nat_testrefer ON Nat_TestReferNat_TestID = T_TestNat_TestID AND Nat_TestReferIsActive = 'Y' AND Nat_TestReferM_BranchID = M_BranchID
|
|
LEFT JOIN nat_testmap ON T_TestNat_TestID = Nat_TestMapNat_TestID
|
|
AND Nat_TestMapIsActive = 'Y'
|
|
LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID
|
|
WHERE
|
|
T_OrderHeaderIsActive = 'Y' AND ISNULL(Nat_TestReferNat_TestID)
|
|
ORDER BY
|
|
T_OrderHeaderLabNumber, Nat_TestMapCode;";
|
|
|
|
$qry = $this->db_onedev->query($sql, [$nolab]);
|
|
}
|
|
|
|
if (!$qry) {
|
|
echo json_encode([
|
|
"Status" => ["OK" => false, "Code" => 0, "Messages" => "Get Order Detail issue [Order004]"],
|
|
"orderItemList" => [],
|
|
"debug" => $this->db_onedev->last_query()
|
|
]);
|
|
exit;
|
|
}
|
|
$rows = $qry->result_array();
|
|
//echo json_encode($rows);
|
|
//echo count($rows);
|
|
if($debug){
|
|
$q_las = $this->db_onedev->last_query();
|
|
$sql = "INSERT INTO debug_log (DebugLogCode, DebugLogRefID, DebugLogMessage)
|
|
VALUES ('QUERYPO',?,?)";
|
|
$qry = $this->db_onedev->query($sql,[$nolab,$q_las]);
|
|
//echo $this->db_onedev->last_query();
|
|
}
|
|
|
|
if(count($rows) > 0){
|
|
|
|
$result = [];
|
|
foreach ($rows as $idx => $r) {
|
|
if ($idx == 0) {
|
|
$result = $r;
|
|
unset($result["ItemCode"]);
|
|
unset($result["ItemName"]);
|
|
$result["orderItemList"] = [];
|
|
$result["ReceivedFlag"] = (bool) false;
|
|
}
|
|
$result["orderItemList"][] = [
|
|
"OrderItemId" => $r["ItemCode"],
|
|
"OrderItemName" => $r["ItemName"]
|
|
];
|
|
}
|
|
if($debug){
|
|
$sql = "INSERT INTO debug_log (DebugLogCode, DebugLogRefID, DebugLogMessage)
|
|
VALUES ('RSTDT',?,?)";
|
|
$qry = $this->db_onedev->query($sql,[$nolab,json_encode($result)]);
|
|
}
|
|
//echo json_encode($result);
|
|
if(count($result) > 0){
|
|
$rst = $this->send_order($result);
|
|
}
|
|
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function send_order($params)
|
|
{
|
|
|
|
$this->insert_api_push("new",$params,'');
|
|
$sql = "SELECT S_SystemsAPiPushUrl as urlx
|
|
FROM conf_systems
|
|
WHERE S_SystemsIsActive = 'Y'
|
|
LIMIT 1";
|
|
$qry = $this->db_onedev->query($sql);
|
|
// URL endpoint yang ingin dikirimkan POST request
|
|
$url = $qry->row()->urlx;
|
|
if($debug){
|
|
$sql = "INSERT INTO debug_log (DebugLogCode, DebugLogRefID, DebugLogMessage)
|
|
VALUES ('QUERYSYS',?,?)";
|
|
$qry = $this->db_onedev->query($sql,[$nolab,json_encode($url)]);
|
|
}
|
|
// Inisialisasi CURL
|
|
$ch = curl_init($url);
|
|
|
|
// Mengatur CURL untuk mengirim POST request dengan JSON
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|
'Content-Type: application/json',
|
|
'Accept: application/json'
|
|
]);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
|
|
|
|
// Eksekusi CURL dan mendapatkan respons dari server
|
|
$response = curl_exec($ch);
|
|
if($debug){
|
|
$sql = "INSERT INTO debug_log (DebugLogCode, DebugLogRefID, DebugLogMessage)
|
|
VALUES ('RSPN',?,?)";
|
|
$qry = $this->db_onedev->query($sql,[$nolab,json_encode($response)]);
|
|
}
|
|
|
|
// Cek apakah ada error saat eksekusi CURL
|
|
/*if (curl_errno($ch)) {
|
|
echo 'Error:' . curl_error($ch);
|
|
$response = curl_error($ch);
|
|
}*/
|
|
|
|
// Tutup CURL
|
|
curl_close($ch);
|
|
|
|
// print_r($response);
|
|
|
|
$this->insert_api_push("new",$params,$response);
|
|
|
|
$rst = json_decode($response);
|
|
$rst_rspn = stripslashes(json_encode($rst));
|
|
|
|
return $rst;
|
|
}
|
|
|
|
function insert_api_push($type,$params,$response){
|
|
//echo $response;
|
|
$rst = json_decode($response);
|
|
//print_r($rst);
|
|
//echo $rst->message;
|
|
$rst_save = stripslashes(json_encode($rst));
|
|
$res = json_encode($response);
|
|
$save_param = $params;
|
|
$nolab_lis = '';
|
|
$message = '';
|
|
if($response && $rst){
|
|
$nolab_lis = $rst->orderNumber?$rst->orderNumber:"Kosong";
|
|
$message = $rst->message;
|
|
}
|
|
|
|
$sql = "INSERT INTO api_push (
|
|
Api_PushDateTime,
|
|
Api_PushT_OrderHeaderLabNumber,
|
|
Api_PushParams,
|
|
Api_PushResponse,
|
|
Api_PushRetry,
|
|
Api_PushLISLabNumber,
|
|
Api_PushStatus,
|
|
Api_PushCreated
|
|
)
|
|
VALUES(NOW(),?,?,?,?,?,?,NOW())
|
|
ON DUPLICATE KEY
|
|
UPDATE Api_PushLastUpdated = NOW(), Api_PushParams = ?, Api_PushResponse = ?, Api_PushRetry = IF('{$type}' = 'retry', Api_PushRetry + 1,Api_PushRetry), Api_PushStatus = ?";
|
|
$qry = $this->db_onedev->query($sql, [$params['orderNumber'], stripslashes(json_encode($save_param)), $rst_save, 1, $nolab_lis, $message,stripslashes(json_encode($save_param)), $rst_save, $message]);
|
|
|
|
if($debug){
|
|
$sql = "INSERT INTO debug_log (DebugLogCode, DebugLogRefID, Debug_LogMessage)
|
|
VALUES ('QRYPUSH',?,?)";
|
|
$qry = $this->db_onedev->query($sql,[$nolab_lis,$this->db_onedev->last_query()]);
|
|
}
|
|
//echo $this->db_onedev->last_query();
|
|
//exit;
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
function generate_kelainan_nonlab($orderID,$userID){
|
|
$sql = "SELECT So_ResultEntryID, T_OrderHeaderID, T_TestNat_TestID, Mcu_SummaryNonlabID, Mcu_SummaryNonlabMcu_KelainanID, Mcu_SummaryNonlabID
|
|
FROM so_resultentry_category_result
|
|
JOIN so_resultentry ON So_ResultEntryCategoryResultSo_ResultEntryID = So_ResultEntryID AND
|
|
So_ResultEntryStatus <> 'NEW' AND So_ResultEntryIsActive = 'Y'
|
|
JOIN t_orderheader ON So_ResultEntryT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderIsActive = 'Y' AND
|
|
T_OrderHeaderID = ?
|
|
JOIN t_orderdetail ON So_ResultEntryT_OrderDetailID = T_OrderDetailID AND T_OrderDetailIsActive = 'Y'
|
|
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
|
|
JOIN mcu_summarynonlab ON Mcu_SummaryNonlabNat_TestID = T_TestNat_TestID AND
|
|
Mcu_SummaryNonlabIsActive = 'Y' AND So_ResultEntryCategoryNonlabConclusionDetailID IN (Mcu_SummaryNonlabConclusionDetailIDs)
|
|
WHERE
|
|
So_ResultEntryCategoryResultIsActive = 'Y'";
|
|
|
|
$qry = $this->db_onedev->query($sql,array($orderID));
|
|
if (!$qry) {
|
|
echo $this->db_onedev->last_query();
|
|
echo json_encode([
|
|
"status" => "ERR",
|
|
"message" => "Error get order | " . $this->db_onedev->error()["message"]
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
$rows = $qry->result_array();
|
|
$sql = "UPDATE t_kelainan_nonlab SET
|
|
T_KelainanNonLabIsActive = 'N'
|
|
WHERE
|
|
T_KelainanNonLabT_OrderHeaderID = ? AND
|
|
T_KelainanNonLabIsActive = 'Y'
|
|
";
|
|
$qry = $this->db_onedev->query($sql,array($orderID));
|
|
|
|
foreach ($rows as $key => $value) {
|
|
|
|
|
|
$sql = "INSERT INTO t_kelainan_nonlab (
|
|
T_KelainanNonLabSo_ResultEntryID,
|
|
T_KelainanNonLabT_OrderHeaderID,
|
|
T_KelainanNonLabNat_TestID,
|
|
T_KelainanNonLabMcu_SummaryNonlabID,
|
|
T_KelainanNonLabCreatedUserID,
|
|
T_KelainanLabNonCreated
|
|
) VALUES(?,?,?,?,?,NOW())";
|
|
$qry = $this->db_onedev->query($sql,[
|
|
$value['So_ResultEntryID'],
|
|
$value['T_OrderHeaderID'],
|
|
$value['T_TestNat_TestID'],
|
|
$value['Mcu_SummaryNonlabID'],
|
|
$userID
|
|
]);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|