Files
BE_IBL/application/controllers/klinik/Patient.php
2026-06-12 13:33:40 +07:00

305 lines
12 KiB
PHP

<?php
class Patient extends MY_Controller
{
var $db;
var $load;
function __construct()
{
parent::__construct();
$this->db = $this->load->database("onedev", true);
$this->load->library('ibl_encryptor');
}
function index()
{
// $cek = $this->db->query("select database() as current_db")->result();
// print_r($cek);
echo "LIST PATIENT ORDER";
}
function search()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$search = "";
if (isset($prm["search"])) {
$search = trim($prm["search"]);
if ($search != "") {
$search = "%" . $prm["search"] . "%";
} else {
$search = "%%";
}
}
$start_date = $prm['start_date'];
$end_date = $prm['end_date'];
$filter_date = " AND (DATE(orderDate) BETWEEN '{$start_date}' AND '{$end_date}')";
$where = " orderIsActive = 'Y' $filter_date";
$bidx_where = '';
if ($search != "") {
$raw_search = trim($prm['search']);
$tokens = $this->ibl_encryptor->query_tokens($raw_search);
if ($tokens) {
$bidx_conds = implode(' AND ', array_map(function($h) {
return "JSON_CONTAINS(M_PatientName_bidx, '\"$h\"')";
}, $tokens));
$bidx_where = " AND (orderNumber LIKE '{$search}' OR ({$bidx_conds}))";
} else {
$bidx_where = " AND orderNumber LIKE '{$search}'";
}
$where .= $bidx_where;
}
$sql_total = "SELECT COUNT(*) as total FROM (
SELECT `order`.*,S_MenuUrl,
DATE_FORMAT(orderDate, '%d-%m-%Y %H:%i') as order_date,
M_PatientName_enc as patient_name_enc,
M_PatientName as patient_name_masked,
M_PatientPrefix, M_PatientSuffix, M_TitleName,
IFNULL(T_OrderHeaderLabNumber,'-') as labnumber
FROM one_klinik.order
JOIN m_patient ON orderM_PatientID = M_PatientID
AND M_PatientIsActive = 'Y'
JOIN s_menu ON S_MenuName = 'Registration' AND S_MenuIsActive = 'Y'
JOIN m_title ON M_PatientM_TitleID = M_TitleID
AND M_TitleIsActive = 'Y'
LEFT JOIN t_orderheader ON orderT_OrderHeaderID = T_OrderHeaderID
WHERE $where
GROUP BY orderID) x";
$qry_total = $this->db->query($sql_total);
$last_query = $this->db->last_query();
//echo $last_query;
// exit;
$tot_count = 0;
if ($qry_total) {
$tot_count = $qry_total->result_array()[0]["total"];
} else {
$this->sys_error_db("count order error", $this->db);
exit;
}
$sql = "SELECT * FROM (
SELECT `order`.*,S_MenuUrl,
DATE_FORMAT(orderDate, '%d-%m-%Y %H:%i') as order_date,
M_PatientName_enc as patient_name_enc,
M_PatientName as patient_name_masked,
M_PatientPrefix, M_PatientSuffix, M_TitleName,
IFNULL(T_OrderHeaderLabNumber,'-') as labnumber
FROM one_klinik.order
JOIN m_patient ON orderM_PatientID = M_PatientID
AND M_PatientIsActive = 'Y'
JOIN s_menu ON S_MenuName = 'Registration' AND S_MenuIsActive = 'Y'
JOIN m_title ON M_PatientM_TitleID = M_TitleID
AND M_TitleIsActive = 'Y'
LEFT JOIN t_orderheader ON orderT_OrderHeaderID = T_OrderHeaderID
WHERE $where
GROUP BY orderID) x
ORDER BY orderID ASC
limit 0, $tot_count";
$qry = $this->db->query($sql);
if ($qry) {
$enc = $this->ibl_encryptor;
$rows = array_map(function($row) use ($enc) {
$name = $enc->decrypt($row['patient_name_enc'] ?? '') ?: $row['patient_name_masked'];
$title = $row['M_TitleName'] ? $row['M_TitleName'] . '. ' : '';
$prefix = $row['M_PatientPrefix'] ? $row['M_PatientPrefix'] . ' ' : '';
$suffix = $row['M_PatientSuffix'] ? ' ' . $row['M_PatientSuffix'] : '';
$row['patient_fullname'] = trim($title . $prefix . $name . $suffix);
unset($row['patient_name_enc'], $row['patient_name_masked']);
return $row;
}, $qry->result_array());
} else {
$this->sys_error_db("Select order error", $this->db);
exit;
}
$result = array(
"total_filter" => $tot_count,
"records" => $rows,
"sql" => $this->db->last_query()
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function searchcompany()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$search = "";
$number_limit = 10;
if (isset($prm['search'])) {
$search = trim($prm["search"]);
if ($search != "") {
$search = '%' . $prm['search'] . '%';
} else {
$search = '%%';
}
}
$sql = "SELECT M_CompanyID,
M_CompanyName, '' as mous
FROM m_company
WHERE M_CompanyIsActive = 'Y'
AND M_CompanyName LIKE ?
LIMIT ?";
$qry = $this->db->query($sql, [$search, $number_limit]);
if ($qry) {
$rows = $qry->result_array();
if($rows){
foreach ($rows as $key => $value) {
$mous = [];
$sql = "SELECT M_MouID, M_MouName
FROM m_mou
WHERE M_MouIsActive = 'Y' AND M_MouIsApproved = 'Y' AND M_MouIsReleased = 'Y'
AND M_MouStartDate <= date(now()) AND M_MouEndDate >= date(now()) AND M_MouM_CompanyID = ?";
$mous = $this->db->query($sql,array($value['M_CompanyID']))->result_array();
$rows[$key]['mous'] = $mous;
}
}
} else {
$this->db->trans_rollback();
$this->sys_error_db("company select error", $this->db);
exit;
}
$result = array(
"total_display" => sizeof($rows),
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function savesetting()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userid = $this->sys_user['M_UserID'];
$mouid = "";
if (isset($prm["mouid"])) {
$mouid = trim($prm["mouid"]);
}
$sql = "UPDATE one_klinik.order SET
orderM_MouID = {$mouid},
orderUserID = {$userid},
orderLastUpdated = NOW()
WHERE
orderID = {$prm['orderid']}";
// echo $sql;
$qry = $this->db->query($sql);
if (!$qry) {
$error = array(
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error, $this->db_oneklinik);
exit;
}
$result = array(
"total" => 1,
"records" => array("xid" => 0)
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function getdefaultmou()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$row_results = [];
$rtn_mou = [];
$sql = "SELECT M_CompanyID,
M_CompanyName, '' as mous, settingM_MouID
FROM m_company
JOIN one_klinik.setting ON settingIsActive = 'Y'
JOIN m_mou ON M_MouID = settingM_MouID AND M_MouM_CompanyID = M_CompanyID AND
M_MouIsActive = 'Y' AND M_MouIsApproved = 'Y' AND M_MouIsReleased = 'Y'
AND M_MouStartDate <= date(now()) AND M_MouEndDate >= date(now())
WHERE M_CompanyIsActive = 'Y'
LIMIT 1";
$qry = $this->db->query($sql);
if ($qry) {
$rows = $qry->result_array();
if($rows){
foreach ($rows as $key => $value) {
$mous = [];
$sql = "SELECT M_MouID, M_MouName
FROM m_mou
WHERE M_MouIsActive = 'Y' AND M_MouIsApproved = 'Y' AND M_MouIsReleased = 'Y'
AND M_MouStartDate <= date(now()) AND M_MouEndDate >= date(now()) AND M_MouM_CompanyID = ?";
$mous = $this->db->query($sql,array($value['M_CompanyID']))->result_array();
$data_result = [];
$data_result['M_CompanyID'] = $value['M_CompanyID'];
$data_result['M_CompanyName'] = $value['M_CompanyName'];
$data_result['mous'] = $mous;
$row_results[] = $data_result;
foreach ($mous as $k => $v) {
if($v['M_MouID'] == $value['settingM_MouID']){
$rtn_mou = $v;
}
}
}
}
} else {
$this->sys_error_db("company select error", $this->db);
exit;
}
$result = array(
"total_display" => sizeof($rows),
"records" => $row_results,
"mou" => $rtn_mou
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
}