Files
BE_IBL/application/controllers/mcu_api/Mcu_data.php
2026-04-15 15:23:57 +07:00

418 lines
14 KiB
PHP

<?php
class Mcu_data extends MY_Controller
{
function __construct()
{
parent::__construct();
}
function generateToken()
{
$param = $this->sys_input;
$xtype = $param['type'];
//$user['ip'] = $_SERVER['REMOTE_ADDR'];
//$user['agent'] = $_SERVER['HTTP_USER_AGENT'];
if ($xtype) {
$code = $this->generate_string($permitted_chars, 10);
$token = str_shuffle(MD5(microtime()));
try {
$sql = "update token_mcu_api SET TokenMcuApiIsActive = 'N' WHERE TokenMcuApiType = ?";
$this->db->query($sql, array($xtype));
$sql = "insert into token_mcu_api(TokenMcuApiType,TokenMcuApiToken,TokenMcuApiCreated)
values(?,?,NOW())";
$this->db->query($sql, array($xtype, $token));
echo json_encode(
array("status" => "OK", "data" => $token, "message" => "")
);
} catch (exception $e) {
echo json_encode(
array("status" => "ERR", "id" => 0, "message" => $e . message())
);
}
} else {
echo json_encode(
array("status" => "ERR", "data" => '', "message" => "Belum ada parameter type")
);
}
}
function check()
{
$param = $this->sys_input;
$no_reg = $param['no_reg'];
$patient = [];
$test = [];
$status_ready = "N";
$sql = " SELECT *
FROM t_orderheader
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
WHERE
T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderLabNumberExt = '{$no_reg}' LIMIT 1 ";
$get_nolab = $this->db->query($sql)->row_array();
if ($get_nolab) {
$patient['noreg'] = $get_nolab['T_OrderHeaderLabNumber'];
$patient['noreg_ext'] = $get_nolab['T_OrderHeaderLabNumberExt'];
$patient['name'] = $get_nolab['M_PatientName'];
$sql = " SELECT T_OrderDetailT_TestSasCode as test_code,
T_OrderDetailT_TestName as test_name,
IF(ISNULL(So_ResultEntryID),'N','Y') as status_ready
FROM t_orderheader
JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND
T_OrderDetailT_TestID IN (2562,2566,2563,2584,2564,3327,2565,2567,2568,2598,3340,3342) AND
T_OrderDetailIsActive = 'Y'
JOIN so_resultentry ON So_ResultEntryT_OrderHeaderID = So_ResultEntryT_OrderHeaderID AND
So_ResultEntryT_OrderDetailID = T_OrderDetailID AND So_ResultEntryIsActive = 'Y'
WHERE
T_OrderHeaderLabNumber = '{$patient['noreg']}' AND T_OrderHeaderIsActive = 'Y'
LIMIT 1";
$check_ready = $this->db->query($sql)->result_array();
if ($check_ready) {
$status_ready = "Y";
}
$sql = " SELECT T_OrderDetailT_TestSasCode as test_code,
T_OrderDetailT_TestName as test_name
FROM t_orderheader
JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND
T_OrderDetailT_TestID IN (2562,2566,2563,2584,2564,3327,2565,2567,2568,2598,3340,3342) AND
T_OrderDetailIsActive = 'Y'
WHERE
T_OrderHeaderLabNumber = '{$patient['noreg']}' AND T_OrderHeaderIsActive = 'Y'
GROUP BY T_OrderDetailID";
$get_test = $this->db->query($sql)->result_array();
if ($get_test) {
$test = $get_test;
}
echo json_encode(
array("status" => "OK", "ready" => $status_ready, "patient" => $patient, "test" => $test, "message" => "")
);
} else {
echo json_encode(
array("status" => "OK", "ready" => $status_ready, "patient" => $patient, "test" => $test, "message" => "Belum melakukan registrasi")
);
}
}
function generate_string($input, $strength = 4)
{
$input_length = strlen($input);
$random_string = '';
for ($i = 0; $i < $strength; $i++) {
$random_character = $input[mt_rand(0, $input_length - 1)];
$random_string .= $random_character;
}
return $random_string;
}
// fungsi is_validate untuk check VAL1 dan VAL2 di so_resultentry
function is_validate($So_ResultEntryID_prm)
{
try {
// Cek token valid
// if (!$this->isLogin) {
// $this->sys_error("Invalid Token");
// exit;
// }
$prm = $this->sys_input;
$userid = $this->sys_user["M_UserID"];
$So_ResultEntryID_x = 0;
// if (empty($So_ResultEntryID_prm) || $So_ResultEntryID_prm != 0) {
// $So_ResultEntryID_x = $So_ResultEntryID_prm;
// }
if (empty($So_ResultEntryID_prm)) {
$this->sys_error("So_ResultEntryID is empty");
exit;
} else {
$So_ResultEntryID_x = $So_ResultEntryID_prm;
}
$sql_find = "SELECT *
FROM so_resultentry
WHERE So_ResultEntryID = $So_ResultEntryID_x
AND (
So_ResultEntryStatus = 'VAL1'
OR So_ResultEntryStatus = 'VAL2'
)";
$qry_find = $this->db->query($sql_find);
if (!$qry_find) {
$this->sys_error_db("error: so_resultentry count", $this->db);
exit;
}
$row_find = $qry_find->result_array();
if (count($row_find) > 0) {
$So_ResultEntryStatus = $row_find[0]['So_ResultEntryStatus'];
$message = "So_ResultEntryID : {$So_ResultEntryID_x}, Already Validated with So_ResultEntryStatus value : [{$So_ResultEntryStatus}]";
echo json_encode(["status" => "ERR", "code" => "E01", "message" => $message]);
exit;
} else {
// $this->sys_ok('OK');
/* echo json_encode([
'status' => 'OK',
'message' => 'OK'
]);
exit;
*/
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function save()
{
$prm = $this->sys_input;
$userid = -1;
$rst = array();
$sql = "SELECT * FROM token_mcu_api WHERE TokenMcuApiType = 'FISIK' AND TokenMcuApiToken = '{$prm['token']}' AND TokenMcuApiIsActive = 'Y'";
//echo $sql;
$check_token = $this->db->query($sql)->row_array();
if ($check_token) {
$sql = " SELECT *
FROM t_orderheader
JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND
T_OrderDetailT_TestID IN (2562,2566,2563,2584,2564,3327,2565,2567,2568,2598,3340,3342) AND
T_OrderDetailIsActive = 'Y'
JOIN so_resultentry ON So_ResultEntryT_OrderHeaderID = So_ResultEntryT_OrderHeaderID AND
So_ResultEntryT_OrderDetailID = T_OrderDetailID AND So_ResultEntryIsActive = 'Y'
WHERE
T_OrderHeaderLabNumberExt = '{$prm['trx_numbering']}' LIMIT 1 ";
$data_row = $this->db->query($sql)->row_array();
//Add if no so result entry
if (count($data_row) == 0) {
echo json_encode(["status" => "ERR", "code" => "E02", "message" => "So_ResultEntryID not exists."]);
exit;
}
if (!in_array($prm["template"], ["UMUM", "UMUM_K3", "UMUM_KONSUL"])) {
echo json_encode(["status" => "ERR", "code" => "E03", "message" => "template {$prm["template"]} unknown"]);
exit;
}
if ($prm['template'] == 'UMUM' || $prm['template'] == 'UMUM_K3' || $prm['template'] == 'UMUM_KONSUL') {
// CHECK So_ResultEntryStatus
$So_ResultEntryID = $data_row['So_ResultEntryID'];
$this->is_validate($So_ResultEntryID);
$riwayats = str_replace('\'', '\\\'', json_encode($prm["riwayats"], JSON_UNESCAPED_UNICODE | JSON_HEX_APOS | JSON_HEX_QUOT));
if (json_last_error() != JSON_ERROR_NONE) {
echo json_encode(["status" => "ERR", "code" => "E04", "message" => "Json encode error riwayat", "info" => json_last_error_msg()]);
exit;
}
$riwayats = addslashes(str_replace('\"', '\\\"', $riwayats));
// harus ada parameter $prm["riwayats_last_updated"]
// get_last_update(So_ResultEntryID, Typ, table) => last_updated
//
// hanya akan di update jika riwayat_last_updted > di table
//
$sql = "INSERT INTO so_resultentry_fisik_umum (
So_ResultEntryFisikUmumSo_ResultEntryID,
So_ResultEntryFisikUmumM_LangID,
So_ResultEntryFisikUmumType,
So_ResultEntryFisikUmumDetails,
So_ResultEntryFisikUmumUserID,
So_ResultEntryFisikUmumCreated
)
VALUES(
{$data_row['So_ResultEntryID']},
{$prm['language_id']},
'riwayat',
'{$riwayats}',
{$userid},
NOW()
)
ON DUPLICATE KEY UPDATE
So_ResultEntryFisikUmumDetails = '{$riwayats}',
So_ResultEntryFisikUmumUserID = {$userid} ";
$rst = $this->db->query($sql);
if (!$rst) {
echo json_encode([
"status" => "ERR", "message" => "Error query " . $this->db->error()["message"],
"sql" => $this->db->last_query()
]);
exit;
}
// echo $sql;
$fisiks = str_replace('\'', '\\\'', json_encode($prm["fisiks"], JSON_UNESCAPED_UNICODE | JSON_HEX_APOS | JSON_HEX_QUOT));
$fisiks = addslashes(str_replace('\"', '\\\"', $fisiks));
if (json_last_error() != JSON_ERROR_NONE) {
echo json_encode(["status" => "ERR", "code" => "E04", "message" => "Json encode error fisik", "info" => json_last_error_msg()]);
exit;
}
$sql = "INSERT INTO so_resultentry_fisik_umum (
So_ResultEntryFisikUmumSo_ResultEntryID,
So_ResultEntryFisikUmumM_LangID,
So_ResultEntryFisikUmumType,
So_ResultEntryFisikUmumDetails,
So_ResultEntryFisikUmumUserID,
So_ResultEntryFisikUmumCreated
)
VALUES(
{$data_row['So_ResultEntryID']},
{$prm['language_id']},
'fisik',
'{$fisiks}',
{$userid},
NOW()
)
ON DUPLICATE KEY UPDATE
So_ResultEntryFisikUmumDetails = '{$fisiks}',
So_ResultEntryFisikUmumUserID = {$userid} ";
$rst = $this->db->query($sql);
if (!$rst) {
echo json_encode([
"status" => "ERR", "message" => "Error query " . $this->db->error()["message"]
]);
exit;
}
//echo $sql;
$umum_saran = $prm['umum_saran'];
$sql = "INSERT INTO so_resultentry_fisik_umum (
So_ResultEntryFisikUmumSo_ResultEntryID,
So_ResultEntryFisikUmumM_LangID,
So_ResultEntryFisikUmumType,
So_ResultEntryFisikUmumDetails,
So_ResultEntryFisikUmumUserID,
So_ResultEntryFisikUmumCreated
)
VALUES(
{$data_row['So_ResultEntryID']},
{$prm['language_id']},
'saran',
'{$umum_saran}',
{$userid},
NOW()
)
ON DUPLICATE KEY UPDATE
So_ResultEntryFisikUmumDetails = '{$umum_saran}',
So_ResultEntryFisikUmumUserID = {$userid} ";
//echo $sql;
$rst = $this->db->query($sql);
if (!$rst) {
echo json_encode([
"status" => "ERR", "message" => "Error query " . $this->db->error()["message"]
]);
}
}
if ($prm['template'] == 'UMUM_K3') {
// CHECK So_ResultEntryStatus
$So_ResultEntryID = $data_row['So_ResultEntryID'];
$this->is_validate($So_ResultEntryID);
$k3s = str_replace('\'', '\\\'', json_encode($prm["k3s"], JSON_UNESCAPED_UNICODE | JSON_HEX_APOS | JSON_HEX_QUOT));
$k3s = addslashes(str_replace('\"', '\\\"', $k3s));
if (json_last_error() != JSON_ERROR_NONE) {
echo json_encode(["status" => "ERR", "code" => "E04", "message" => "Json encode error k3s", "info" => json_last_error_msg()]);
exit;
}
$sql = "INSERT INTO so_resultentry_fisik_umum (
So_ResultEntryFisikUmumSo_ResultEntryID,
So_ResultEntryFisikUmumM_LangID,
So_ResultEntryFisikUmumType,
So_ResultEntryFisikUmumDetails,
So_ResultEntryFisikUmumUserID,
So_ResultEntryFisikUmumCreated
)
VALUES(
{$data_row['So_ResultEntryID']},
{$prm['language_id']},
'k3',
'{$k3s}',
{$userid},
NOW()
)
ON DUPLICATE KEY UPDATE
So_ResultEntryFisikUmumDetails = '{$k3s}',
So_ResultEntryFisikUmumUserID = {$userid} ";
$rst = $this->db->query($sql);
if (!$rst) {
echo json_encode([
"status" => "ERR", "message" => "Error query " . $this->db->error()["message"]
]);
exit;
}
//echo $query;
}
if ($prm['template'] == 'UMUM_KONSUL') {
// CHECK So_ResultEntryStatus
$So_ResultEntryID = $data_row['So_ResultEntryID'];
$this->is_validate($So_ResultEntryID);
$konsul = $prm['konsul'];
foreach ($konsul as $k => $v) {
$sql = "INSERT INTO so_resultentry_fisik_umum (
So_ResultEntryFisikUmumSo_ResultEntryID,
So_ResultEntryFisikUmumM_LangID,
So_ResultEntryFisikUmumType,
So_ResultEntryFisikUmumDetails,
So_ResultEntryFisikUmumUserID,
So_ResultEntryFisikUmumCreated
)
VALUES(
{$data_row['So_ResultEntryID']},
{$prm['language_id']},
'{$v['type']}',
'{$v['result']}',
{$userid},
NOW()
)
ON DUPLICATE KEY UPDATE
So_ResultEntryFisikUmumDetails = '{$v['result']}',
So_ResultEntryFisikUmumUserID = {$userid} ";
//echo $sql;
$rst = $this->db->query($sql);
if (!$rst) {
echo json_encode([
"status" => "ERR", "message" => "Error query " . $this->db->error()["message"],
"sql" => $this->db->last_query()
]);
}
}
}
echo json_encode(
array("status" => "OK", "data" => "", "message" => "")
);
} else {
echo json_encode(
array("status" => "ERR", "data" => "", "message" => "Maaf token invalid")
);
}
}
function raw()
{
$param = $this->sys_input;
try {
$instrumentID = $param["instrumentID"];
$data = $param["data"];
$sql = "insert into itf_raw(itf_RawNat_InstrumentID,itf_RawData)
values(?,?)";
$this->db_one->query($sql, array($instrumentID, base64_decode($data)));
echo json_encode(
array("status" => "OK", "id" => $this->db_one->insert_id(), "message" => "")
);
} catch (exception $e) {
echo json_encode(
array("status" => "ERR", "id" => 0, "message" => $e . message())
);
}
}
}