Files
BE_IBL/application/controllers/klinik/screening/Screening.php
2026-06-10 16:16:41 +07:00

447 lines
14 KiB
PHP

<?php
class Screening extends MY_Controller
{
var $db_onedev;
public function index()
{
echo "Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_onedev = $this->load->database("onedev", true);
$this->db_oneklinik = $this->load->database("onedev", true);
$this->load->library('ibl_encryptor');
}
public function search()
{
$prm = $this->sys_input;
$id = $this->db_onedev->escape_str($prm['id']);
$sql = "SELECT orderID,
orderDate,
orderNumber,
orderIsScreening,
orderIsAnamnese,
orderIsCheck,
orderAge as patient_age,
DATE_FORMAT(orderDate,'%d-%m-%Y') as order_date,
'N' divider,
M_PatientID,
M_PatientNoReg,
M_PatientPrefix,
M_PatientSuffix,
concat(M_TitleName,' ',IFNULL(M_PatientPrefix,''),' ',M_PatientName,' ',IFNULL(M_PatientSuffix,'')) M_PatientNameRaw,
M_PatientNote,
M_PatientNIK,
M_PatientJabatan,
M_PatientKedudukan,
M_PatientPJ,
M_PatientLocation,
M_PatientJob,
M_PatientM_SexID,
M_SexName,
M_TitleID, M_TitleName,
M_PatientM_TitleID,
M_PatientM_ReligionID,
IFNULL(M_ReligionName,'-') M_ReligionName,
M_PatientM_IdTypeID,
IF(ISNULL(M_PatientSuspendID),'active','suspend') as status,
M_PatientAddressRegionalCd,
M_PatientName_enc, M_PatientHP_enc, M_PatientDOB_enc,
M_PatientEmail_enc, M_PatientPhone_enc, M_PatientPOB_enc,
M_PatientIDNumber_enc, M_PatientNIK_enc, M_PatientAddressDescription_enc
FROM one_klinik.`order`
JOIN m_patient ON M_PatientID = orderM_PatientID AND M_PatientIsActive = 'Y'
JOIN m_title ON M_PatientM_TitleID = M_TitleID
JOIN m_sex ON M_PatientM_SexID = M_SexID
JOIN m_patientaddress ON M_PatientAddressM_PatientID = M_PatientID AND M_PatientAddressIsActive = 'Y'
LEFT JOIN m_religion ON M_PatientM_ReligionID = M_ReligionID
LEFT JOIN m_patientsuspend ON M_PatientSuspendM_PatientID = M_PatientID AND M_PatientSuspendIsActive = 'Y'
WHERE orderNumber = '{$id}' AND M_PatientSuspendID IS NULL
GROUP BY M_PatientID";
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("order rows", $this->db_onedev);
return;
}
$rows = $query->result_array();
$enc = $this->ibl_encryptor;
foreach ($rows as $k => $v) {
$rows[$k]['M_PatientName'] = $enc->decrypt($v['M_PatientName_enc']) ?? $v['M_PatientNameRaw'];
$rows[$k]['M_PatientHP'] = $enc->decrypt($v['M_PatientHP_enc']) ?? '';
$rows[$k]['M_PatientEmail'] = $enc->decrypt($v['M_PatientEmail_enc']) ?? '';
$rows[$k]['M_PatientPOB'] = $enc->decrypt($v['M_PatientPOB_enc']) ?? '';
$rows[$k]['M_PatientPhone'] = $enc->decrypt($v['M_PatientPhone_enc']) ?? '';
$rows[$k]['M_PatientIDNumber'] = $enc->decrypt($v['M_PatientIDNumber_enc']) ?? '';
$rows[$k]['M_PatientNIK'] = $enc->decrypt($v['M_PatientNIK_enc']) ?? '';
$rows[$k]['M_PatientDOB'] = $enc->decrypt($v['M_PatientDOB_enc']) ?? '';
$rows[$k]['dob_ina'] = $rows[$k]['M_PatientDOB'];
$rows[$k]['M_PatientAddressDescription'] = $enc->decrypt($v['M_PatientAddressDescription_enc']) ?? '';
$rows[$k]['M_PatientAddress'] = $rows[$k]['M_PatientAddressDescription'];
foreach (array_keys($rows[$k]) as $col) {
if (substr($col, -4) === '_enc') unset($rows[$k][$col]);
}
unset($rows[$k]['M_PatientNameRaw']);
$info = $this->db_onedev->query("SELECT fn_fo_patient_visit(?) info", [$v['M_PatientID']])->row();
$rows[$k]['info'] = json_decode($info->info);
}
$this->sys_ok(["total" => count($rows), "records" => $rows]);
}
function get_data(){
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$result = array('data' => '');
$sql = "SELECT orderScreeningKesanUmum as kesan_umum,
orderScreeningValueKesadaran as kesadaran,
orderScreeningValuePernafasan as pernafasan,
orderScreeningValueResikoJatuh as resiko_jatuh,
orderScreeningValueNyeriDada as nyeri_dada,
orderScreeningValueSkalaNyeri as skala_nyeri,
orderScreeningValueBatuk as batuk,
orderScreeningValueKeputusan as keputusan
FROM one_klinik.order_screening
WHERE
orderScreeningOrderID = ? AND orderScreeningIsActive = 'Y'
LIMIT 1";
$query = $this->db_oneklinik->query($sql,array($prm['orderid']));
if(!$query){
$this->sys_error("Gagal get data");
echo $this->db_oneklinik->last_query();
}
$result = $query->row_array();
$this->sys_ok($result);
exit;
}
function getsexreg()
{
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$rows = [];
$rows['default_location'] = [];
$rows['doctors'] = $this->db_onedev->query(
"SELECT M_DoctorID as id, M_DoctorCode as code, M_DoctorName as name,
M_DoctorMcuDefaultKlinik as is_default, M_DoctorMcuPriceKlinik as price
FROM m_doctormcu JOIN m_doctor ON M_DoctorMcuM_DoctorID = M_DoctorID
WHERE M_DoctorMcuIsActive = 'Y'"
)->result_array();
$rows['default_doctor'] = [];
foreach ($rows['doctors'] as $value) {
if ($value['is_default'] == 'Y') { $rows['default_doctor'] = $value; break; }
}
$rows['titles'] = $this->db_onedev->query("SELECT * FROM m_title WHERE M_TitleIsActive = 'Y'")->result_array();
$rows['sexes'] = $this->db_onedev->query("SELECT * FROM m_sex WHERE M_SexIsActive = 'Y'")->result_array();
$rows['religions'] = $this->db_onedev->query("SELECT * FROM m_religion WHERE M_ReligionIsActive = 'Y'")->result_array();
$rows['kartuidentitass'] = $this->db_onedev->query("SELECT * FROM m_idtype WHERE M_IdTypeIsActive = 'Y'")->result_array();
$branch = $this->db_onedev->query("SELECT * FROM m_branch WHERE M_BranchIsDefault = 'Y' AND M_BranchIsActive = 'Y'")->row_array();
if ($branch) {
$rows['default_location']['city_address'] = $this->db_onedev->query("SELECT * FROM m_city WHERE M_CityIsActive = 'Y' AND M_CityID = ?", [$branch['M_BranchM_CityID']])->row_array();
$rows['default_location']['cities'] = $this->db_onedev->query("SELECT * FROM m_city WHERE M_CityIsActive = 'Y' AND M_CityM_ProvinceID = ?", [$rows['default_location']['city_address']['M_CityM_ProvinceID']])->result_array();
$rows['default_location']['province_address'] = $this->db_onedev->query("SELECT * FROM m_province WHERE M_ProvinceIsActive = 'Y' AND M_ProvinceID = ?", [$rows['default_location']['city_address']['M_CityM_ProvinceID']])->row_array();
$rows['default_location']['provinces'] = $this->db_onedev->query("SELECT * FROM m_province WHERE M_ProvinceIsActive = 'Y'")->result_array();
$rows['default_location']['districts'] = $this->db_onedev->query("SELECT * FROM m_district WHERE M_DistrictIsActive = 'Y' AND M_DistrictM_CityID = ?", [$branch['M_BranchM_CityID']])->result_array();
$rows['default_location']['district_address'] = $this->db_onedev->query("SELECT * FROM m_district WHERE M_DistrictIsActive = 'Y' AND M_DistrictID = ?", [$branch['M_BranchM_DistrictID']])->row_array();
$rows['default_location']['kelurahans'] = $this->db_onedev->query("SELECT * FROM m_kelurahan WHERE M_KelurahanIsActive = 'Y' AND M_KelurahanM_DistrictID = ?", [$branch['M_BranchM_DistrictID']])->result_array();
$rows['default_location']['kelurahan_address'] = $this->db_onedev->query("SELECT * FROM m_kelurahan WHERE M_KelurahanIsActive = 'Y' AND M_KelurahanID = ?", [$branch['M_BranchM_KelurahanID']])->row_array();
}
$this->sys_ok(["total" => count($rows), "records" => $rows]);
exit;
}
protected function objToArray($obj)
{
// Not an object or array
if (!is_object($obj) && !is_array($obj)) {
return $obj;
}
// Parse array
foreach ($obj as $key => $value) {
$arr[$key] = $this->objToArray($value);
}
// Return parsed array
return $arr;
}
public function list_patient()
{
$prm = $this->sys_input;
$max_rst = 20;
$tot_count = 0;
$number_limit = 20;
$number_offset = (!isset($prm['current_page'])?1:$prm['current_page'] - 1) * $number_limit ;
$xdate = $prm['date'];
$status = $prm['status'];
$sql = "SELECT 'N' divider,
CONCAT(IF(ISNULL(M_TitleName),'',CONCAT(M_TitleName,'. ')),M_PatientName) as patient_name,
`order`.*,DATE_FORMAT(orderDate,'%d-%m-%Y') as date_order,
'' as kode_status, '' as status
FROM one_klinik.`order`
JOIN m_patient ON orderM_PatientID = M_PatientID
LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID
WHERE
orderIsActive = 'Y' AND DATE(orderDate) = ? AND orderIsScreening = ?
LIMIT $number_limit offset $number_offset";
//echo $sql;
$query = $this->db_oneklinik->query($sql,array($xdate,$status));
//echo $this->db_oneklinik->last_query();
if ($query) {
$rows = $query->result_array();
$result = array("total" => $tot_page, "records" => $rows, "sql"=> $this->db_onedev->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("m_patient rows",$this->db_onedev);
exit;
}
}
function process_now(){
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userID = $this->sys_user['M_UserID'];
//print_r($prm['subgroup']);
$sql = "INSERT INTO one_klinik.order_status (
orderStatusOrderID,
orderStatusCode,
orderStatusValue,
orderStatusUserID
)
VALUES(
?,?,?,?
)";
$query = $this->db_oneklinik->query($sql,array($prm['orderID'],'S','Y',$userID));
if(!$query){
$this->sys_error("Gagal Process");
}
$sql = "UPDATE one_klinik.`order` SET orderIsScreening = 'Y', orderUserID = ?
WHERE
orderID = ?";
$query = $this->db_oneklinik->query($sql,array($userID,$prm['orderID']));
if(!$query){
$this->sys_error("Gagal Update");
}
$result = array('process'=>'OK');
$this->sys_ok($result);
exit;
}
function cancel_now(){
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userID = $this->sys_user['M_UserID'];
//print_r($prm['subgroup']);
$sql = "INSERT INTO one_klinik.order_status (
orderStatusOrderID,
orderStatusCode,
orderStatusValue,
orderStatusUserID
)
VALUES(
?,?,?,?
)";
$query = $this->db_oneklinik->query($sql,array($prm['orderID'],'S','N',$userID));
if(!$query){
$this->sys_error("Gagal Process");
}
$sql = "UPDATE one_klinik.`order` SET orderIsScreening = 'N', orderUserID = ?
WHERE
orderID = ?";
$query = $this->db_oneklinik->query($sql,array($userID,$prm['orderID']));
if(!$query){
$this->sys_error("Gagal Process");
}
$result = array('process'=>'OK');
$this->sys_ok($result);
exit;
}
function end_session(){
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userID = $this->sys_user['M_UserID'];
//print_r($prm['subgroup']);
$sql = "SELECT COUNT(*) as xcount
FROM one_klinik.order_screening
WHERE
orderScreeningOrderID = ? AND orderScreeningIsActive = 'Y'";
$query = $this->db_oneklinik->query($sql,array($prm['orderID']));
if(!$query){
$this->sys_error("count exist");
echo $this->db_oneklinik->last_query();
}
$check_exist = $query->row()->xcount;
if($check_exist == 0){
$sql = "INSERT one_klinik.order_screening (
orderScreeningOrderID,
orderScreeningKesanUmum,
orderScreeningValueKesadaran,
orderScreeningValuePernafasan,
orderScreeningValueResikoJatuh,
orderScreeningValueNyeriDada,
orderScreeningValueSkalaNyeri,
orderScreeningValueBatuk,
orderScreeningValueKeputusan,
orderScreeningCreated,
orderScreeningUserID
)
VALUES(
?,?,?,?,?,?,?,?,?,NOW(),?
)";
$query = $this->db_oneklinik->query($sql,array(
$prm['orderID'],
$prm['kesan_umum'],
$prm['kesadaran'],
$prm['pernafasan'],
$prm['resiko_jatuh'],
$prm['nyeri_dada'],
$prm['skala_nyeri'],
$prm['batuk'],
$prm['keputusan'],
$userID)
);
if(!$query){
$this->sys_error("Gagal insert");
}
}else{
$sql = "UPDATE one_klinik.order_screening SET
orderScreeningKesanUmum = ?,
orderScreeningValueKesadaran = ?,
orderScreeningValuePernafasan = ?,
orderScreeningValueResikoJatuh = ?,
orderScreeningValueNyeriDada = ?,
orderScreeningValueSkalaNyeri = ?,
orderScreeningValueBatuk = ?,
orderScreeningValueKeputusan = ?,
orderScreeningUserID = ?
WHERE
orderScreeningOrderID = ?
";
$query = $this->db_oneklinik->query($sql,[
$prm['kesan_umum'],
$prm['kesadaran'],
$prm['pernafasan'],
$prm['resiko_jatuh'],
$prm['nyeri_dada'],
$prm['skala_nyeri'],
$prm['batuk'],
$prm['keputusan'],
$userID,
$prm['orderID']
]);
if(!$query){
echo $this->db_oneklinik->last_query();
$this->sys_error("Gagal Update");
}
}
$sql = "INSERT INTO one_klinik.order_status (
orderStatusOrderID,
orderStatusCode,
orderStatusValue,
orderStatusUserID
)
VALUES(
?,?,?,?
)";
$query = $this->db_oneklinik->query($sql,array($prm['orderID'],'S','D',$userID));
if(!$query){
$this->sys_error("Gagal End");
}
$sql = "UPDATE one_klinik.`order` SET orderIsScreening = 'D', orderUserID = ?
WHERE
orderID = ?";
$query = $this->db_oneklinik->query($sql,array($userID,$prm['orderID']));
if(!$query){
$this->sys_error("Gagal ENd");
}
$result = array('process'=>'OK');
$this->sys_ok($result);
exit;
}
}