1575 lines
54 KiB
PHP
1575 lines
54 KiB
PHP
<?php
|
|
class Registrationv3 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->db_antrione = $this->load->database("antrione", true);
|
|
$this->load->library('ibl_encryptor');
|
|
// $this->IP_SOCKET_IO = "devone.aplikasi.web.id";
|
|
|
|
$this->IP_SOCKET_IO = "localhost";
|
|
//$one_db = "one_aditya";
|
|
}
|
|
|
|
private function _mask_name($v) {
|
|
if (!$v) return $v;
|
|
$v = trim($v);
|
|
$words = preg_split('/\s+/', $v);
|
|
if (count($words) === 1) {
|
|
$l = mb_strlen($v, 'UTF-8');
|
|
if ($l <= 2) return $v;
|
|
return mb_substr($v, 0, 2, 'UTF-8') . str_repeat('*', $l - 2);
|
|
}
|
|
$first = $words[0];
|
|
$rest = array_slice($words, 1);
|
|
$masked = array_map(function($w) {
|
|
if (!$w) return '';
|
|
$init = mb_substr($w, 0, 1, 'UTF-8');
|
|
return $init . str_repeat('*', max(3, mb_strlen($w, 'UTF-8') - 1));
|
|
}, $rest);
|
|
return $first . ' ' . implode(' ', $masked);
|
|
}
|
|
private function _mask_phone($v) { if (!$v) return $v; $d=preg_replace('/[^0-9]/','',trim($v)); $l=strlen($d); if($l<=4) return '****'; if($l<=8) return substr($d,0,4).str_repeat('*',$l-4); return substr($d,0,4).str_repeat('*',$l-7).substr($d,-3); }
|
|
private function _mask_email($v) { if (!$v||strpos($v,'@')===false) return $v; [$loc,$dom]=explode('@',$v,2); return mb_substr($loc,0,min(2,mb_strlen($loc,'UTF-8')),'UTF-8').'***@'.$dom; }
|
|
private function _mask_short($v) { if (!$v) return $v; $v=trim($v); $l=mb_strlen($v,'UTF-8'); if($l<=2) return '***'; return mb_substr($v,0,2,'UTF-8').'***'; }
|
|
private function _mask_id($v) { if (!$v) return $v; $v=trim($v); $l=strlen($v); if($l<=4) return '****'; return substr($v,0,4).str_repeat('*',max(3,$l-6)).($l>6?substr($v,-2):''); }
|
|
private function _mask_address($v) { if (!$v) return $v; $v=trim($v); $l=mb_strlen($v,'UTF-8'); if($l<=5) return '***'; return mb_substr($v,0,5,'UTF-8').'***'; }
|
|
private function _mask_dob($v) { if (!$v) return $v; $p=explode('-',$v); return (count($p)===3) ? '**-**-'.$p[2] : '****-**-**'; }
|
|
|
|
public function search_x()
|
|
{
|
|
$prm = $this->sys_input;
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$norm = $prm["snorm"];
|
|
$nama = str_replace("'", "\\'", $prm["name"]);
|
|
|
|
// echo $norm;
|
|
|
|
$sql_where = "WHERE M_PatientIsActive = 'Y' ";
|
|
$sql_param = array();
|
|
if ($nama != "") {
|
|
if ($sql_where != "") {
|
|
$sql_where .= " and ";
|
|
}
|
|
$sql_where .= " M_PatientName like ? ";
|
|
$sql_param[] = "%$nama%";
|
|
}
|
|
if ($norm != "") {
|
|
if ($sql_where != "") {
|
|
$sql_where .= " and ";
|
|
}
|
|
$sql_where .= " M_PatientNoReg like ? ";
|
|
$sql_param[] = "%$norm%";
|
|
}
|
|
|
|
$limit = '';
|
|
if ($all == 'N') {
|
|
$limit = ' LIMIT 100';
|
|
}
|
|
$number_limit = 100;
|
|
$number_offset = ($prm['current_page'] - 1) * $number_limit;
|
|
|
|
//echo $this->db_onedev->last_query();
|
|
$tot_count = 0;
|
|
$tot_page = 0;
|
|
|
|
|
|
$sql = "SELECT
|
|
M_PatientID,
|
|
M_PatientNoReg,
|
|
M_PatientPrefix,
|
|
M_PatientName,
|
|
M_PatientSuffix,
|
|
M_PatientHP,
|
|
M_PatientEmail,
|
|
M_PatientPOB,
|
|
M_PatientPhone,
|
|
M_PatientIDNumber,
|
|
DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as M_PatientDOB,
|
|
M_PatientNote,
|
|
M_PatientNIK,
|
|
M_PatientJabatan,
|
|
M_PatientKedudukan,
|
|
M_PatientPJ,
|
|
M_PatientLocation,
|
|
M_PatientJob,
|
|
M_PatientM_SexID,
|
|
M_SexName,
|
|
M_PatientM_TitleID,
|
|
M_TitleName,
|
|
M_PatientM_ReligionID,
|
|
M_ReligionName,
|
|
M_PatientM_IdTypeID,
|
|
M_IdTypeName,
|
|
M_PatientIDNumber,
|
|
IF(ISNULL(M_PatientSuspendID),'active','suspend' ) as status
|
|
FROM m_patient
|
|
LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID
|
|
LEFT JOIN m_sex ON M_PatientM_SexID = M_SexID
|
|
LEFT JOIN m_religion ON M_PatientM_ReligionID = M_ReligionID
|
|
LEFT JOIN m_idtype ON M_PatientM_IdTypeID = M_IdTypeID
|
|
LEFT JOIN m_patientsuspend ON M_PatientSuspendM_PatientID = M_PatientID AND M_PatientSuspendIsActive = 'Y'
|
|
$sql_where
|
|
ORDER BY M_PatientName ASC
|
|
limit 100
|
|
";
|
|
// $sql;
|
|
$query = $this->db_onedev->query($sql, $sql_param);
|
|
$rows = $query->result_array();
|
|
if ($rows) {
|
|
foreach ($rows as $k => $v) {
|
|
$rows[$k]['M_PatientName'] = stripslashes($rows[$k]['M_PatientName']);
|
|
$rows[$k]['M_PatientPOB'] = stripslashes($rows[$k]['M_PatientPOB']);
|
|
//$rows[$k]['verification_px'] = $this->add_verification_test($v['M_PatientID']);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
//$this->_add_address($rows);
|
|
$result = array("total" => 1, "records" => $rows, "sql" => $this->db_onedev->last_query());
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
|
|
|
|
function getsexreg()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$rows = [];
|
|
$rows['default_location'] = array();
|
|
|
|
$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'
|
|
";
|
|
//echo $query;
|
|
$rows['doctors'] = $this->db_onedev->query($query)->result_array();
|
|
|
|
$rows['default_doctor'] = [];
|
|
foreach ($rows['doctors'] as $key => $value) {
|
|
if($value['is_default'] == 'Y')
|
|
$rows['default_doctor'] = $value;
|
|
}
|
|
|
|
|
|
|
|
$query = "SELECT *
|
|
FROM m_title
|
|
WHERE
|
|
M_TitleIsActive = 'Y'
|
|
";
|
|
//echo $query;
|
|
$rows['titles'] = $this->db_onedev->query($query)->result_array();
|
|
|
|
$query = " SELECT *
|
|
FROM m_sex
|
|
WHERE
|
|
M_SexIsActive = 'Y'
|
|
";
|
|
//echo $query;
|
|
$rows['sexes'] = $this->db_onedev->query($query)->result_array();
|
|
$query = " SELECT *
|
|
FROM m_religion
|
|
WHERE
|
|
M_ReligionIsActive = 'Y'
|
|
";
|
|
//echo $query;
|
|
$rows['religions'] = $this->db_onedev->query($query)->result_array();
|
|
|
|
$query = " SELECT *
|
|
FROM m_idtype
|
|
WHERE
|
|
M_IdTypeIsActive = 'Y'
|
|
";
|
|
//echo $query;
|
|
$rows['kartuidentitass'] = $this->db_onedev->query($query)->result_array();
|
|
|
|
$query = "SELECT *
|
|
FROM m_branch
|
|
WHERE
|
|
M_BranchIsDefault = 'Y' AND M_BranchIsActive = 'Y'
|
|
";
|
|
//echo $query;
|
|
$branch_default = $this->db_onedev->query($query)->row_array();
|
|
|
|
if ($branch_default) {
|
|
$query = " SELECT *
|
|
FROM m_city
|
|
WHERE
|
|
M_CityIsActive = 'Y' AND M_CityID = ?
|
|
";
|
|
//echo $query;
|
|
$rows['default_location']['city_address'] = $this->db_onedev->query($query, array($branch_default['M_BranchM_CityID']))->row_array();
|
|
|
|
|
|
$query = " SELECT *
|
|
FROM m_city
|
|
WHERE
|
|
M_CityIsActive = 'Y' AND M_CityM_ProvinceID = ?
|
|
";
|
|
//echo $query;
|
|
$rows['default_location']['cities'] = $this->db_onedev->query($query, array($rows['default_location']['city_address']['M_CityM_ProvinceID']))->result_array();
|
|
|
|
$query = " SELECT *
|
|
FROM m_province
|
|
WHERE
|
|
M_ProvinceIsActive = 'Y' AND M_ProvinceID = ?
|
|
";
|
|
//echo $query;
|
|
$rows['default_location']['province_address'] = $this->db_onedev->query($query, array($rows['default_location']['city_address']['M_CityM_ProvinceID']))->row_array();
|
|
|
|
$query = " SELECT *
|
|
FROM m_province
|
|
WHERE
|
|
M_ProvinceIsActive = 'Y'
|
|
";
|
|
//echo $query;
|
|
$rows['default_location']['provinces'] = $this->db_onedev->query($query)->result_array();
|
|
|
|
$query = " SELECT *
|
|
FROM m_district
|
|
WHERE
|
|
M_DistrictIsActive = 'Y' AND M_DistrictM_CityID = ?
|
|
";
|
|
//echo $query;
|
|
$rows['default_location']['districts'] = $this->db_onedev->query($query, array($branch_default['M_BranchM_CityID']))->result_array();
|
|
|
|
$query = " SELECT *
|
|
FROM m_district
|
|
WHERE
|
|
M_DistrictIsActive = 'Y' AND M_DistrictID = ?
|
|
";
|
|
//echo $query;
|
|
$rows['default_location']['district_address'] = $this->db_onedev->query($query, array($branch_default['M_BranchM_DistrictID']))->row_array();
|
|
|
|
$query = " SELECT *
|
|
FROM m_kelurahan
|
|
WHERE
|
|
M_KelurahanIsActive = 'Y' AND M_KelurahanM_DistrictID = ?
|
|
";
|
|
//echo $query;
|
|
$rows['default_location']['kelurahans'] = $this->db_onedev->query($query, array($branch_default['M_BranchM_DistrictID']))->result_array();
|
|
|
|
$query = " SELECT *
|
|
FROM m_kelurahan
|
|
WHERE
|
|
M_KelurahanIsActive = 'Y' AND M_KelurahanID = ?
|
|
";
|
|
//echo $query;
|
|
$rows['default_location']['kelurahan_address'] = $this->db_onedev->query($query, array($branch_default['M_BranchM_KelurahanID']))->row_array();
|
|
}
|
|
|
|
|
|
|
|
$result = array(
|
|
"total" => count($rows),
|
|
"records" => $rows,
|
|
);
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
function searchcity()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$prm = $this->sys_input;
|
|
|
|
$max_rst = 12;
|
|
$tot_count = 0;
|
|
|
|
$q = [
|
|
'search' => '%'
|
|
];
|
|
|
|
if ($prm['search'] != '') {
|
|
$q['search'] = "%{$prm['search']}%";
|
|
}
|
|
|
|
// QUERY TOTAL
|
|
$sql = "SELECT count(*) as total
|
|
FROM m_city
|
|
WHERE
|
|
M_CityName like ?
|
|
AND M_CityIsActive = 'Y'";
|
|
$query = $this->db_onedev->query($sql, $q['search']);
|
|
//echo $query;
|
|
if ($query) {
|
|
$tot_count = $query->result_array()[0]["total"];
|
|
} else {
|
|
$this->sys_error_db("m_city count", $this->db_onedev);
|
|
exit;
|
|
}
|
|
|
|
$sql = "
|
|
SELECT *
|
|
FROM m_city
|
|
WHERE
|
|
M_CityName like ?
|
|
AND M_CityIsActive = 'Y'
|
|
ORDER BY M_CityName DESC
|
|
";
|
|
$query = $this->db_onedev->query($sql, array($q['search']));
|
|
|
|
if ($query) {
|
|
$rows = $query->result_array();
|
|
//echo $this->db_onedev->last_query();
|
|
$result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows));
|
|
$this->sys_ok($result);
|
|
} else {
|
|
$this->sys_error_db("m_city rows", $this->db_onedev);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
function getprovinces()
|
|
{
|
|
$prm = $this->sys_input;
|
|
$query = " SELECT *
|
|
FROM m_province
|
|
WHERE
|
|
M_ProvinceIsActive = 'Y'
|
|
";
|
|
//echo $query;
|
|
$rows = $this->db_onedev->query($query)->result_array();
|
|
|
|
$result = array(
|
|
"total" => count($rows),
|
|
"records" => $rows,
|
|
);
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
function getcities()
|
|
{
|
|
$prm = $this->sys_input;
|
|
$query = " SELECT *
|
|
FROM m_city
|
|
WHERE
|
|
M_CityIsActive = 'Y' AND M_CityM_ProvinceID = ?
|
|
";
|
|
//echo $query;
|
|
$rows = $this->db_onedev->query($query, array($prm['id']))->result_array();
|
|
|
|
$result = array(
|
|
"total" => count($rows),
|
|
"records" => $rows,
|
|
);
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
|
|
function getdistricts()
|
|
{
|
|
$prm = $this->sys_input;
|
|
$query = " SELECT *
|
|
FROM m_district
|
|
WHERE
|
|
M_DistrictIsActive = 'Y' AND M_DistrictM_CityID = ?
|
|
";
|
|
//echo $query;
|
|
$rows = $this->db_onedev->query($query, array($prm['id']))->result_array();
|
|
|
|
$result = array(
|
|
"total" => count($rows),
|
|
"records" => $rows,
|
|
);
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
function getkelurahans()
|
|
{
|
|
$prm = $this->sys_input;
|
|
$query = " SELECT *
|
|
FROM m_kelurahan
|
|
WHERE
|
|
M_KelurahanIsActive = 'Y' AND M_KelurahanM_DistrictID = ?
|
|
";
|
|
//echo $query;
|
|
$rows = $this->db_onedev->query($query, array($prm['id']))->result_array();
|
|
|
|
$result = array(
|
|
"total" => count($rows),
|
|
"records" => $rows,
|
|
);
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
function save()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$prm = $this->sys_input;
|
|
$userid = $this->sys_user["M_UserID"];
|
|
$sql = "SELECT * FROM m_patient WHERE M_PatientID = {$prm['M_PatientID']}";
|
|
$rows_before = $this->db_onedev->query($sql)->row_array();
|
|
|
|
$pdob = date('Y-m-d', strtotime($prm['M_PatientDOB']));
|
|
$dob_str = date('d-m-Y', strtotime($prm['M_PatientDOB']));
|
|
$patient_name = $prm['M_PatientName'];
|
|
$enc = $this->ibl_encryptor;
|
|
|
|
$this->db_onedev
|
|
->set('M_PatientName', $this->_mask_name($patient_name))
|
|
->set('M_PatientName_enc', $enc->encrypt($patient_name))
|
|
->set('M_PatientName_bidx', $enc->search_bidx($patient_name))
|
|
->set('M_PatientM_TitleID', $prm['M_PatientM_TitleID'])
|
|
->set('M_PatientPrefix', $prm['M_PatientPrefix'])
|
|
->set('M_PatientSuffix', $prm['M_PatientSuffix'])
|
|
->set('M_PatientDOB', $this->_mask_dob($dob_str))
|
|
->set('M_PatientDOB_enc', $enc->encrypt($dob_str))
|
|
->set('M_PatientDOB_bidx', $enc->search_bidx($dob_str))
|
|
->set('M_PatientM_SexID', $prm['M_PatientM_SexID'])
|
|
->set('M_PatientM_ReligionID', $prm['M_PatientM_ReligionID'])
|
|
->set('M_PatientEmail', $this->_mask_email($prm['M_PatientEmail']))
|
|
->set('M_PatientEmail_enc', $enc->encrypt($prm['M_PatientEmail']))
|
|
->set('M_PatientPOB', $this->_mask_short($prm['M_PatientPOB']))
|
|
->set('M_PatientPOB_enc', $enc->encrypt($prm['M_PatientPOB']))
|
|
->set('M_PatientHP', $this->_mask_phone($prm['M_PatientHP']))
|
|
->set('M_PatientHP_enc', $enc->encrypt($prm['M_PatientHP']))
|
|
->set('M_PatientHP_bidx', $enc->search_bidx($prm['M_PatientHP']))
|
|
->set('M_PatientPhone', $this->_mask_phone($prm['M_PatientPhone']))
|
|
->set('M_PatientPhone_enc', $enc->encrypt($prm['M_PatientPhone']))
|
|
->set('M_PatientM_IdTypeID', $prm['M_PatientM_IdTypeID'])
|
|
->set('M_PatientIDNumber', $this->_mask_id($prm['M_PatientIDNumber']))
|
|
->set('M_PatientIDNumber_enc', $enc->encrypt($prm['M_PatientIDNumber']))
|
|
->set('M_PatientNIK_bidx', $enc->search_bidx($prm['M_PatientIDNumber'] ?? ''))
|
|
->set('M_PatientNIK', $prm['M_PatientNIK'])
|
|
->set('M_PatientNote', $prm['M_PatientNote'])
|
|
->set('M_PatientJabatan', $prm['M_PatientJabatan'])
|
|
->set('M_PatientKedudukan', $prm['M_PatientKedudukan'])
|
|
->set('M_PatientPJ', $prm['M_PatientPJ'])
|
|
->set('M_PatientLocation', $prm['M_PatientLocation'])
|
|
->set('M_PatientJob', $prm['M_PatientJob'])
|
|
->set('M_PatientUserID', $userid)
|
|
->where('M_PatientID', $prm['M_PatientID'])
|
|
->update('m_patient');
|
|
|
|
$sql = "SELECT *
|
|
FROM m_patientaddress
|
|
WHERE M_PatientAddressM_PatientID = {$prm['M_PatientID']} AND M_PatientAddressIsActive = 'Y'
|
|
ORDER BY M_PatientAddressID ASC LIMIT 1";
|
|
|
|
$d_address = $this->db_onedev->query($sql)->row_array();
|
|
$address_desc = $prm['M_PatientAddressDescription'];
|
|
|
|
$this->db_onedev
|
|
->set('M_PatientAddressM_KelurahanID', $prm['M_PatientAddressM_KelurahanID'])
|
|
->set('M_PatientAddressDescription', $this->_mask_address($address_desc))
|
|
->set('M_PatientAddressDescription_enc', $enc->encrypt($address_desc))
|
|
->where('M_PatientAddressID', $d_address['M_PatientAddressID'])
|
|
->update('m_patientaddress');
|
|
|
|
$result = array(
|
|
"total" => 1,
|
|
"records" => array('status' => 'OK')
|
|
);
|
|
$ptn = $prm;
|
|
$ptn["M_PatientDOB"] = $pdob;
|
|
$xbefore = json_encode($rows_before);
|
|
$ptn = json_encode($ptn);
|
|
/*$this->db_onedev->query("INSERT INTO one_log.log_patient (
|
|
Log_PatientCode,
|
|
Log_PatientJson,
|
|
Log_PatientJsonBefore,
|
|
Log_PatientUserID
|
|
)
|
|
VALUES(
|
|
'PATIENT.EDIT',
|
|
'{$ptn}',
|
|
'{$xbefore}',
|
|
'{$userid}'
|
|
)");*/
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
|
|
function newpatient()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$prm = $this->sys_input;
|
|
$userid = $this->sys_user["M_UserID"];
|
|
|
|
$pdob = date('Y-m-d', strtotime($prm['M_PatientDOB']));
|
|
$dob_str = date('d-m-Y', strtotime($prm['M_PatientDOB']));
|
|
$patient_name = $prm['M_PatientName'];
|
|
$enc = $this->ibl_encryptor;
|
|
|
|
$ptn = [
|
|
'M_PatientName' => $this->_mask_name($patient_name),
|
|
'M_PatientName_enc' => $enc->encrypt($patient_name),
|
|
'M_PatientName_bidx' => $enc->search_bidx($patient_name),
|
|
'M_PatientM_TitleID' => $prm['M_PatientM_TitleID'],
|
|
'M_PatientPrefix' => $prm['M_PatientPrefix'],
|
|
'M_PatientSuffix' => $prm['M_PatientSuffix'],
|
|
'M_PatientDOB' => $this->_mask_dob($dob_str),
|
|
'M_PatientDOB_enc' => $enc->encrypt($dob_str),
|
|
'M_PatientDOB_bidx' => $enc->search_bidx($dob_str),
|
|
'M_PatientM_SexID' => $prm['M_PatientM_SexID'],
|
|
'M_PatientM_ReligionID' => $prm['M_PatientM_ReligionID'],
|
|
'M_PatientEmail' => $this->_mask_email($prm['M_PatientEmail']),
|
|
'M_PatientEmail_enc' => $enc->encrypt($prm['M_PatientEmail']),
|
|
'M_PatientPOB' => $this->_mask_short($prm['M_PatientPOB']),
|
|
'M_PatientPOB_enc' => $enc->encrypt($prm['M_PatientPOB']),
|
|
'M_PatientHP' => $this->_mask_phone($prm['M_PatientHP']),
|
|
'M_PatientHP_enc' => $enc->encrypt($prm['M_PatientHP']),
|
|
'M_PatientHP_bidx' => $enc->search_bidx($prm['M_PatientHP']),
|
|
'M_PatientPhone' => $this->_mask_phone($prm['M_PatientPhone']),
|
|
'M_PatientPhone_enc' => $enc->encrypt($prm['M_PatientPhone']),
|
|
'M_PatientM_IdTypeID' => $prm['M_PatientM_IdTypeID'],
|
|
'M_PatientIDNumber' => $this->_mask_id($prm['M_PatientIDNumber']),
|
|
'M_PatientIDNumber_enc' => $enc->encrypt($prm['M_PatientIDNumber']),
|
|
'M_PatientNIK_bidx' => $enc->search_bidx($prm['M_PatientIDNumber'] ?? ''),
|
|
'M_PatientNIK' => $prm['M_PatientNIK'],
|
|
'M_PatientNote' => $prm['M_PatientNote'],
|
|
'M_PatientJabatan' => $prm['M_PatientJabatan'],
|
|
'M_PatientKedudukan' => $prm['M_PatientKedudukan'],
|
|
'M_PatientPJ' => $prm['M_PatientPJ'],
|
|
'M_PatientLocation' => $prm['M_PatientLocation'],
|
|
'M_PatientJob' => $prm['M_PatientJob'],
|
|
'M_PatientUserID' => $userid,
|
|
];
|
|
$this->db_onedev->insert('m_patient', $ptn);
|
|
$last_id = $this->db_onedev->insert_id();
|
|
if ($last_id) {
|
|
$sql = "SELECT * FROM m_patient
|
|
LEFT JOIN m_branch ON M_BranchIsDefault = 'Y' AND M_BranchIsActive = 'Y'
|
|
WHERE M_PatientID = {$last_id}
|
|
LIMIT 1";
|
|
//echo $sql;
|
|
$data_patient = $this->db_onedev->query($sql)->row_array();
|
|
if ($data_patient) {
|
|
if (intval($prm['M_PatientM_IdTypeID']) == 4) {
|
|
$new_nik_varchar = "00" . $data_patient['M_BranchCode'] . str_pad($data_patient['M_PatientNoReg'], 12, "0", STR_PAD_LEFT);
|
|
$sql = "UPDATE m_patient SET M_PatientIDNumber = '{$new_nik_varchar}' WHERE M_PatientID = {$last_id}";
|
|
$this->db_onedev->query($sql);
|
|
//echo $sql;
|
|
}
|
|
}
|
|
|
|
$address_description = $prm['M_PatientAddressDescription'];
|
|
// save address
|
|
$add = [
|
|
'M_PatientAddressM_PatientID' => $last_id,
|
|
'M_PatientAddressDescription' => $this->_mask_address($address_description),
|
|
'M_PatientAddressDescription_enc' => $enc->encrypt($address_description),
|
|
'M_PatientAddressUserID' => $userid,
|
|
'M_PatientAddressRegionalCd' => $prm['M_PatientAddressRegionalCd'] ?? null,
|
|
'M_PatientAddressLocation' => $prm['M_PatientAddressLocation'] ?? null,
|
|
'M_PatientAddressCity' => $prm['M_PatientAddressCity'] ?? null,
|
|
'M_PatientAddressVillage' => $prm['M_PatientAddressVillage'] ?? null,
|
|
'M_PatientAddressDistrict' => $prm['M_PatientAddressDistrict'] ?? null,
|
|
'M_PatientAddressState' => $prm['M_PatientAddressState'] ?? null,
|
|
'M_PatientAddressCountry' => $prm['M_PatientAddressCountry'] ?? null,
|
|
'M_PatientAddressCountryCode' => $prm['M_PatientAddressCountryCode'] ?? null,
|
|
'M_PatientAddressNote' => $prm['M_PatientAddressNote'] ?? 'Utama',
|
|
];
|
|
$this->db_onedev->insert('m_patientaddress', $add);
|
|
//echo $this->db_onedev->last_query();
|
|
}
|
|
|
|
$result = array(
|
|
"total" => 1,
|
|
"records" => array('status' => 'OK'),
|
|
"id" => $last_id
|
|
);
|
|
$ptn = $prm;
|
|
$ptn["M_PatientID"] = $last_id;
|
|
$ptn["M_PatientDOB"] = $pdob;
|
|
$ptn = json_encode($ptn);
|
|
//$this->db_onedev->query("CALL one_log.log_me('PATIENT', 'PATIENT.ADD', '{$ptn}', $userid)");
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
function deletepatient()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$userid = $this->sys_user["M_UserID"];
|
|
$prm = $this->sys_input;
|
|
$query = "UPDATE m_patient SET
|
|
M_PatientIsActive = 'N',
|
|
M_PatientUserID = {$userid}
|
|
WHERE
|
|
M_PatientID = '{$prm['M_PatientID']}'
|
|
";
|
|
//echo $query;
|
|
$rows = $this->db_onedev->query($query);
|
|
|
|
$result = array(
|
|
"total" => 1,
|
|
"records" => array('status' => 'OK')
|
|
);
|
|
$ptn = $prm;
|
|
$ptn["M_PatientDOB"] = $pdob;
|
|
$ptn = json_encode($ptn);
|
|
//$this->db_onedev->query("CALL one_log.log_me('PATIENT', 'PATIENT.DELETE', '{$ptn}', $userid)");
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
function getaddress()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$prm = $this->sys_input;
|
|
|
|
$query = "SELECT m_patientaddress.*,
|
|
IFNULL(r.regional_nm, '') AS M_KelurahanName,
|
|
IFNULL(r.full_name, '') AS M_RegionalFullName,
|
|
IFNULL(r.pro_cd, '') AS pro_cd,
|
|
IFNULL(r.kab_cd, '') AS kab_cd,
|
|
IFNULL(r.kec_cd, '') AS kec_cd,
|
|
IFNULL(pro.regional_nm, '') AS M_ProvinceName,
|
|
IFNULL(kab.regional_nm, '') AS M_CityName,
|
|
IFNULL(kec.regional_nm, '') AS M_DistrictName,
|
|
'' AS action
|
|
FROM m_patientaddress
|
|
LEFT JOIN regional r ON M_PatientAddressRegionalCd = r.regional_cd
|
|
LEFT JOIN regional pro ON CONCAT(r.pro_cd, REPEAT('0', 8)) = pro.regional_cd
|
|
LEFT JOIN regional kab ON CONCAT(r.pro_cd, r.kab_cd, REPEAT('0', 6)) = kab.regional_cd
|
|
LEFT JOIN regional kec ON CONCAT(r.pro_cd, r.kab_cd, r.kec_cd, REPEAT('0', 3)) = kec.regional_cd
|
|
WHERE M_PatientAddressIsActive = 'Y' AND M_PatientAddressM_PatientID = ?
|
|
ORDER BY M_PatientAddressID ASC
|
|
LIMIT 1";
|
|
|
|
$address = $this->db_onedev->query($query, [$prm['id']])->row_array();
|
|
$address['M_PatientAddressDescription'] = $this->ibl_encryptor->decrypt($address['M_PatientAddressDescription_enc'] ?? '') ?: stripslashes($address['M_PatientAddressDescription'] ?? '');
|
|
unset($address['M_PatientAddressDescription_enc']);
|
|
$rows['address'] = $address;
|
|
|
|
$pro_cd = $address['pro_cd'] ?? '';
|
|
$kab_cd = $address['kab_cd'] ?? '';
|
|
$kec_cd = $address['kec_cd'] ?? '';
|
|
$regional_cd = $address['M_PatientAddressRegionalCd'] ?? '';
|
|
|
|
$rows['province_address'] = $pro_cd ? $this->db_onedev->query(
|
|
"SELECT regional_cd AS M_ProvinceID, regional_nm AS M_ProvinceName FROM regional WHERE regional_cd = ?",
|
|
[$pro_cd . str_repeat('0', 8)]
|
|
)->row_array() : [];
|
|
|
|
$rows['provinces'] = $this->db_onedev->query(
|
|
"SELECT regional_cd AS M_ProvinceID, regional_nm AS M_ProvinceName FROM regional WHERE RIGHT(regional_cd, 8) = '00000000' ORDER BY regional_nm"
|
|
)->result_array();
|
|
|
|
$rows['city_address'] = ($pro_cd && $kab_cd) ? $this->db_onedev->query(
|
|
"SELECT regional_cd AS M_CityID, regional_nm AS M_CityName FROM regional WHERE regional_cd = ?",
|
|
[$pro_cd . $kab_cd . str_repeat('0', 6)]
|
|
)->row_array() : [];
|
|
|
|
$rows['cities'] = $pro_cd ? $this->db_onedev->query(
|
|
"SELECT regional_cd AS M_CityID, regional_nm AS M_CityName FROM regional WHERE pro_cd = ? AND RIGHT(regional_cd, 8) != '00000000' AND RIGHT(regional_cd, 6) = '000000' ORDER BY regional_nm",
|
|
[$pro_cd]
|
|
)->result_array() : [];
|
|
|
|
$rows['district_address'] = ($pro_cd && $kab_cd && $kec_cd) ? $this->db_onedev->query(
|
|
"SELECT regional_cd AS M_DistrictID, regional_nm AS M_DistrictName FROM regional WHERE regional_cd = ?",
|
|
[$pro_cd . $kab_cd . $kec_cd . str_repeat('0', 3)]
|
|
)->row_array() : [];
|
|
|
|
$rows['districts'] = ($pro_cd && $kab_cd) ? $this->db_onedev->query(
|
|
"SELECT regional_cd AS M_DistrictID, regional_nm AS M_DistrictName FROM regional WHERE pro_cd = ? AND kab_cd = ? AND RIGHT(regional_cd, 6) != '000000' AND RIGHT(regional_cd, 3) = '000' ORDER BY regional_nm",
|
|
[$pro_cd, $kab_cd]
|
|
)->result_array() : [];
|
|
|
|
$rows['kelurahan_address'] = $regional_cd ? $this->db_onedev->query(
|
|
"SELECT regional_cd AS M_KelurahanID, regional_nm AS M_KelurahanName FROM regional WHERE regional_cd = ?",
|
|
[$regional_cd]
|
|
)->row_array() : [];
|
|
|
|
$rows['kelurahans'] = ($pro_cd && $kab_cd && $kec_cd) ? $this->db_onedev->query(
|
|
"SELECT regional_cd AS M_KelurahanID, regional_nm AS M_KelurahanName FROM regional WHERE pro_cd = ? AND kab_cd = ? AND kec_cd = ? AND RIGHT(regional_cd, 3) != '000' ORDER BY regional_nm",
|
|
[$pro_cd, $kab_cd, $kec_cd]
|
|
)->result_array() : [];
|
|
|
|
$this->sys_ok(["total" => count($rows), "records" => $rows]);
|
|
exit;
|
|
}
|
|
function savenewaddress()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$userid = $this->sys_user["M_UserID"];
|
|
$prm = $this->sys_input;
|
|
$count_addrs = $this->db_onedev->query("SELECT COUNT(*) as countx FROM m_patientaddress WHERE M_PatientAddressM_PatientID = '{$prm['M_PatientAddressM_PatientID']}' AND M_PatientAddressIsActive = 'Y'")->row()->countx;
|
|
|
|
//echo $this->db_onedev->last_query();
|
|
if ($count_addrs == 0) {
|
|
$prm['M_PatientAddressNote'] = 'Utama';
|
|
} else {
|
|
$count_addrs_utama = $this->db_onedev->query("SELECT COUNT(*) as countx FROM m_patientaddress WHERE M_PatientAddressM_PatientID = '{$prm['M_PatientAddressM_PatientID']}' AND M_PatientAddressNote = 'Utama' AND M_PatientAddressIsActive = 'Y'")->row()->countx;
|
|
if ($count_addrs_utama > 0 && strtolower($prm['M_PatientAddressNote']) == 'utama') {
|
|
$rx = date('YmdHis');
|
|
$prm['M_PatientAddressNote'] = 'Utama_' . $rx;
|
|
}
|
|
}
|
|
$prm['M_PatientAddressDescription'] = str_replace("'", "\\'", $prm['M_PatientAddressDescription']);
|
|
$query = "INSERT INTO m_patientaddress (
|
|
M_PatientAddressM_PatientID,
|
|
M_PatientAddressNote,
|
|
M_PatientAddressDescription,
|
|
M_PatientAddressM_KelurahanID,
|
|
M_PatientAddressCreated,
|
|
M_PatientAddressUserID
|
|
)
|
|
VALUES(
|
|
'{$prm['M_PatientAddressM_PatientID']}',
|
|
'{$prm['M_PatientAddressNote']}',
|
|
'{$prm['M_PatientAddressDescription']}',
|
|
'{$prm['M_PatientAddressM_KelurahanID']}',
|
|
NOW(),
|
|
'{$userid}'
|
|
)
|
|
";
|
|
//echo $query;
|
|
$rows = $this->db_onedev->query($query);
|
|
|
|
$result = array(
|
|
"total" => 1,
|
|
"records" => array('status' => 'OK')
|
|
);
|
|
$ptn = $prm;
|
|
$ptn["M_UserID"] = $pdob;
|
|
$ptn = json_encode($ptn);
|
|
//$this->db_onedev->query("CALL one_log.log_me('PATIENT', 'PATIENT.ADDR_ADD', '{$ptn}', $userid)");
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
function saveeditaddress()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$userid = $this->sys_user["M_UserID"];
|
|
$prm = $this->sys_input;
|
|
$prm['M_PatientAddressDescription'] = str_replace("'", "\\'", $prm['M_PatientAddressDescription']);
|
|
$sql = "SELECT * FROM m_patientaddress WHERE M_PatientAddressID = {$prm['M_PatientAddressID']}";
|
|
$rows_before = $this->db_onedev->query($sql)->row_array();
|
|
$query = "UPDATE m_patientaddress SET
|
|
M_PatientAddressM_PatientID = '{$prm['M_PatientAddressM_PatientID']}',
|
|
M_PatientAddressNote = '{$prm['M_PatientAddressNote']}',
|
|
M_PatientAddressDescription = '{$prm['M_PatientAddressDescription']}',
|
|
M_PatientAddressM_KelurahanID = '{$prm['M_PatientAddressM_KelurahanID']}',
|
|
M_PatientAddressUserID = {$userid}
|
|
WHERE
|
|
M_PatientAddressID = '{$prm['M_PatientAddressID']}'
|
|
";
|
|
//echo $query;
|
|
$rows = $this->db_onedev->query($query);
|
|
|
|
$result = array(
|
|
"total" => 1,
|
|
"records" => array('status' => 'OK')
|
|
);
|
|
$ptn = $prm;
|
|
$ptn["M_UserID"] = $pdob;
|
|
$xbefore = json_encode($rows_before);
|
|
$ptn = json_encode($ptn);
|
|
/*$this->db_onedev->query("INSERT INTO one_log.log_patient (
|
|
Log_PatientCode,
|
|
Log_PatientJson,
|
|
Log_PatientJsonBefore,
|
|
Log_PatientUserID
|
|
)
|
|
VALUES(
|
|
'PATIENT.ADDR_EDIT',
|
|
'{$ptn}',
|
|
'{$xbefore}',
|
|
'{$userid}'
|
|
)");*/
|
|
//$this->db_onedev->query("CALL one_log.log_me('PATIENT', 'PATIENT.ADDR_EDIT', '{$ptn}', $userid)");
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
function deleteaddress()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$userid = $this->sys_user["M_UserID"];
|
|
$prm = $this->sys_input;
|
|
|
|
$query = "UPDATE m_patientaddress SET
|
|
M_PatientAddressIsActive = 'N',
|
|
M_PatientAddressUserID = {$userid}
|
|
WHERE
|
|
M_PatientAddressID = '{$prm['M_PatientAddressID']}'
|
|
";
|
|
//echo $query;
|
|
$rows = $this->db_onedev->query($query);
|
|
|
|
$result = array(
|
|
"total" => 1,
|
|
"records" => array('status' => 'OK')
|
|
);
|
|
$ptn = $prm;
|
|
$ptn["M_UserID"] = $pdob;
|
|
$ptn = json_encode($ptn);
|
|
//$this->db_onedev->query("CALL one_log.log_me('PATIENT', 'PATIENT.ADDR_DELETE', '{$ptn}', $userid)");
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
public function search()
|
|
{
|
|
$prm = $this->sys_input;
|
|
|
|
$number_limit = 10;
|
|
$number_offset = (!isset($prm['current_page']) ? 1 : $prm['current_page'] - 1) * $number_limit;
|
|
|
|
$where_noreg = '';
|
|
$where_name = '';
|
|
$where_hp = '';
|
|
$where_dob = '';
|
|
$where_nik = '';
|
|
$where_snorm = '';
|
|
|
|
if (!empty($prm['noreg'])) {
|
|
$noreg = $this->db_onedev->escape_like_str($prm['noreg']);
|
|
$where_noreg = "AND M_PatientNoReg LIKE '%{$noreg}%'";
|
|
}
|
|
|
|
if (!empty($prm['snorm'])) {
|
|
$where_snorm = "AND M_PatientNoReg = '{$prm['snorm']}'";
|
|
} elseif (!empty($prm['search'])) {
|
|
$e = explode('+', $prm['search']);
|
|
|
|
if (!empty($e[0]) && mb_strlen(trim($e[0])) >= 3) {
|
|
$toks = $this->ibl_encryptor->query_tokens($e[0]);
|
|
$conds = [];
|
|
foreach ($toks as $tok) {
|
|
$tok_esc = $this->db_onedev->escape_str($tok);
|
|
$conds[] = "JSON_CONTAINS(M_PatientName_bidx, '\"$tok_esc\"')";
|
|
}
|
|
if ($conds) $where_name = 'AND (' . implode(' AND ', $conds) . ')';
|
|
}
|
|
|
|
if (!empty($e[1]) && mb_strlen(trim($e[1])) >= 3) {
|
|
$toks = $this->ibl_encryptor->query_tokens($e[1]);
|
|
$conds = [];
|
|
foreach ($toks as $tok) {
|
|
$tok_esc = $this->db_onedev->escape_str($tok);
|
|
$conds[] = "JSON_CONTAINS(M_PatientHP_bidx, '\"$tok_esc\"')";
|
|
}
|
|
if ($conds) $where_hp = 'AND (' . implode(' AND ', $conds) . ')';
|
|
}
|
|
|
|
if (!empty($e[2]) && mb_strlen(trim($e[2])) >= 3) {
|
|
$toks = $this->ibl_encryptor->query_tokens($e[2]);
|
|
$conds = [];
|
|
foreach ($toks as $tok) {
|
|
$tok_esc = $this->db_onedev->escape_str($tok);
|
|
$conds[] = "JSON_CONTAINS(M_PatientDOB_bidx, '\"$tok_esc\"')";
|
|
}
|
|
if ($conds) $where_dob = 'AND (' . implode(' AND ', $conds) . ')';
|
|
}
|
|
|
|
if (!empty($e[3]) && mb_strlen(trim($e[3])) >= 3) {
|
|
$toks = $this->ibl_encryptor->query_tokens($e[3]);
|
|
$conds = [];
|
|
foreach ($toks as $tok) {
|
|
$tok_esc = $this->db_onedev->escape_str($tok);
|
|
$conds[] = "JSON_CONTAINS(M_PatientNIK_bidx, '\"$tok_esc\"')";
|
|
}
|
|
if ($conds) $where_nik = 'AND (' . implode(' AND ', $conds) . ')';
|
|
}
|
|
}
|
|
|
|
if (empty($prm['snorm']) && empty($prm['search']) && empty($prm['noreg'])) {
|
|
$this->sys_ok(["total" => 0, "records" => []]);
|
|
return;
|
|
}
|
|
|
|
$sql = "SELECT 'N' divider, M_PatientID, M_PatientNoReg, M_PatientPrefix, M_PatientSuffix,
|
|
concat(M_TitleName,' ',IFNULL(M_PatientPrefix,''),' ',M_PatientName,' ',IFNULL(M_PatientSuffix,'')) M_PatientNameRaw,
|
|
M_TitleID, M_TitleName, M_SexID, M_SexName,
|
|
M_PatientDOB,
|
|
M_PatientM_ReligionID, IFNULL(M_ReligionName, '-') M_ReligionName,
|
|
IFNULL(M_PatientNote, '') M_PatientNote, M_PatientPhoto,
|
|
M_PatientM_IdTypeID,
|
|
M_PatientJabatan, M_PatientKedudukan, M_PatientPJ, M_PatientLocation, M_PatientJob,
|
|
IF(ISNULL(M_PatientSuspendID),'active','suspend') as status,
|
|
M_PatientName_enc, M_PatientHP_enc, M_PatientDOB_enc,
|
|
M_PatientEmail_enc, M_PatientPhone_enc, M_PatientPOB_enc,
|
|
M_PatientIDNumber_enc, M_PatientNIK_enc
|
|
FROM m_patient
|
|
JOIN m_title ON M_PatientM_TitleID = M_TitleID
|
|
JOIN m_sex ON M_PatientM_SexID = M_SexID
|
|
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 M_PatientIsActive = 'Y' AND M_PatientSuspendID IS NULL
|
|
{$where_noreg}
|
|
{$where_snorm}
|
|
{$where_name}
|
|
{$where_hp}
|
|
{$where_dob}
|
|
{$where_nik}
|
|
GROUP BY M_PatientID
|
|
LIMIT {$number_limit} OFFSET {$number_offset}";
|
|
|
|
$query = $this->db_onedev->query($sql);
|
|
|
|
if (!$query) {
|
|
$this->sys_error_db("m_patient 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']) ?? '';
|
|
$dob_dec = $enc->decrypt($v['M_PatientDOB_enc']) ?? '';
|
|
$rows[$k]['M_PatientDOB'] = $dob_dec;
|
|
$rows[$k]['dob_ina'] = $dob_dec;
|
|
foreach (array_keys($rows[$k]) as $col) {
|
|
if (substr($col, -4) === '_enc') unset($rows[$k][$col]);
|
|
}
|
|
unset($rows[$k]['M_PatientNameRaw']);
|
|
|
|
$rows[$k]['info'] = $this->build_patient_visit_info($v['M_PatientID'], $dob_dec);
|
|
}
|
|
|
|
$this->sys_ok(["total" => 0, "records" => $rows]);
|
|
}
|
|
|
|
protected function build_patient_visit_info($patient_id, $patient_dob)
|
|
{
|
|
$visit = 1;
|
|
$birthday = 'N';
|
|
|
|
$visit_query = $this->db_onedev->query(
|
|
"SELECT COUNT(DISTINCT T_OrderHeaderID) AS n
|
|
FROM t_orderheader
|
|
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive = 'Y'
|
|
WHERE T_OrderHeaderIsActive = 'Y'
|
|
AND T_OrderHeaderM_PatientID = ?",
|
|
[$patient_id]
|
|
);
|
|
|
|
if ($visit_query) {
|
|
$visit_row = $visit_query->row_array();
|
|
$visit += (int) ($visit_row['n'] ?? 0);
|
|
}
|
|
|
|
$init_visit_query = $this->db_onedev->query(
|
|
"SELECT M_PatientInitialVisit
|
|
FROM m_patient
|
|
WHERE M_PatientID = ?",
|
|
[$patient_id]
|
|
);
|
|
|
|
if ($init_visit_query) {
|
|
$init_visit_row = $init_visit_query->row_array();
|
|
if (!empty($init_visit_row['M_PatientInitialVisit'])) {
|
|
$visit += (int) $init_visit_row['M_PatientInitialVisit'];
|
|
}
|
|
}
|
|
|
|
$dob_time = empty($patient_dob) ? false : strtotime($patient_dob);
|
|
if ($dob_time !== false) {
|
|
$birthday = date('m-d', $dob_time) === date('m-d') ? 'Y' : 'N';
|
|
}
|
|
|
|
return json_decode(json_encode([
|
|
'visit' => $visit,
|
|
'birthday' => $birthday,
|
|
]));
|
|
}
|
|
|
|
function calculateAge($tanggal_lahir)
|
|
{
|
|
// Ambil tanggal sekarang
|
|
$tanggal_sekarang = new DateTime();
|
|
|
|
// Ubah tanggal lahir ke objek DateTime
|
|
$tanggal_lahir = new DateTime($tanggal_lahir);
|
|
|
|
// Hitung selisih antara tanggal sekarang dan tanggal lahir
|
|
$perbedaan = $tanggal_sekarang->diff($tanggal_lahir);
|
|
|
|
// Dapatkan tahun, bulan, dan hari dari selisih
|
|
$umur_tahun = $perbedaan->y;
|
|
$umur_bulan = $perbedaan->m;
|
|
$umur_hari = $perbedaan->d;
|
|
|
|
|
|
return array($umur_tahun, $umur_bulan, $umur_hari);
|
|
}
|
|
|
|
function saveorder()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$userid = $this->sys_user["M_UserID"];
|
|
$prm = $this->sys_input;
|
|
|
|
$exp_dob = explode("-", $prm['patient']['M_PatientDOB']);
|
|
$queueNumber = $prm['queueNumber'];
|
|
$queueID = $prm['queueID'];
|
|
|
|
list($umur_tahun, $umur_bulan, $umur_hari) = $this->calculateAge($exp_dob[2] . '-' . $exp_dob[1] . '-' . $exp_dob[0]);
|
|
|
|
$sql = "SELECT * FROM one_klinik.setting WHERE settingIsActive = 'Y' LIMIT 1";
|
|
$setting_data = $this->db_oneklinik->query($sql)->row_array();
|
|
|
|
$price = intval($prm['price'] ?? 0) != 0 ? intval($prm['price']) : $setting_data['settingPriceDefault'];
|
|
|
|
$clinic_unit_id = isset($prm['clinic_unit_id']) && $prm['clinic_unit_id'] ? intval($prm['clinic_unit_id']) : null;
|
|
$company_id = isset($prm['company_id']) && $prm['company_id'] ? intval($prm['company_id']) : null;
|
|
$mou_id = intval($prm['mou_id'] ?? $prm['m_mouid'] ?? 0) ?: null;
|
|
|
|
$sql = "INSERT INTO one_klinik.`order`
|
|
(`orderDate`,
|
|
`orderM_PatientID`,
|
|
`orderM_DoctorID`,
|
|
`orderAge`,
|
|
`orderKeluhan`,
|
|
`orderSubtotal`,
|
|
`orderTotal`,
|
|
`orderUserID`,
|
|
`orderCreated`,
|
|
orderQueueNumber,
|
|
orderM_LocationID,
|
|
orderM_ClinicUnitID,
|
|
orderM_CompanyID,
|
|
orderM_MouID)
|
|
VALUES (NOW(),?,?,?,?,?,?,$userid,NOW(),?,?,?,?,?)";
|
|
|
|
$save_order = $this->db_oneklinik->query($sql, array(
|
|
$prm['patient']['M_PatientID'],
|
|
$prm['doctor']['id'],
|
|
$umur_tahun . ' Tahun ' . $umur_bulan . ' Bulan ' . $umur_hari . ' Hari',
|
|
$prm['keluhan'],
|
|
$price,
|
|
$price,
|
|
$queueNumber,
|
|
$setting_data['settingM_LocationID'],
|
|
$clinic_unit_id,
|
|
$company_id,
|
|
$mou_id
|
|
));
|
|
//echo $this->db_oneklinik->last_query();
|
|
if ($save_order) {
|
|
$last_id = $this->db_oneklinik->insert_id();
|
|
$sql = "INSERT INTO one_klinik.`order_status`(
|
|
orderStatusCode,
|
|
orderStatusOrderID,
|
|
orderStatusValue,
|
|
orderStatusUserID,
|
|
orderStatusCreated
|
|
)
|
|
VALUES(
|
|
'R',?,'D',?,NOW()
|
|
)";
|
|
$query = $this->db_oneklinik->query($sql, array($last_id, $userID));
|
|
if (!$query) {
|
|
$this->sys_error_db("error insert order status", $this->db_oneklinik);
|
|
exit;
|
|
}
|
|
|
|
$sql = "INSERT INTO one_klinik.`order_status`(
|
|
orderStatusCode,
|
|
orderStatusOrderID,
|
|
orderStatusValue,
|
|
orderStatusUserID,
|
|
orderStatusCreated
|
|
)
|
|
VALUES(
|
|
'SA',?,'D',?,NOW()
|
|
)";
|
|
$query = $this->db_oneklinik->query($sql, array($last_id, $userID));
|
|
if (!$query) {
|
|
$this->sys_error_db("error insert order status", $this->db_oneklinik);
|
|
exit;
|
|
}
|
|
//echo $last_id;
|
|
// Simpan item order ke order_detail_order
|
|
$tests = isset($prm['tests']) && is_array($prm['tests']) ? $prm['tests'] : [];
|
|
foreach ($tests as $t) {
|
|
$is_packet = ($t['is_packet'] ?? 'N') === 'Y' ? 'Y' : 'N';
|
|
$packet_type = $t['type'] ?? 'PX';
|
|
$packet_id = $is_packet === 'Y' ? intval($t['pxid'] ?? 0) : 0;
|
|
$packet_name = $is_packet === 'Y' ? ($t['test_name'] ?? '') : '';
|
|
$test_id = $is_packet === 'Y' ? 0 : intval($t['pxid'] ?? 0);
|
|
$test_name = $is_packet === 'Y' ? '' : ($t['test_name'] ?? '');
|
|
$test_sas = $t['pxsascode'] ?? '';
|
|
$child_json = isset($t['child_test']) ? json_encode($t['child_test']) : null;
|
|
$ss_pm_id = isset($t['ss_price_mou_id']) && $t['ss_price_mou_id'] ? intval($t['ss_price_mou_id']) : null;
|
|
|
|
$this->db_oneklinik->query(
|
|
"INSERT INTO one_klinik.order_detail_order
|
|
(orderDetailOrderOrderID, orderDetailOrderSsPriceMouID,
|
|
orderDetailOrderT_TestID, orderDetailOrderT_TestName, orderDetailOrderT_TestSasCode,
|
|
orderDetailOrderIsPacket, orderDetailOrderPacketType,
|
|
orderDetailOrderT_PacketID, orderDetailOrderT_PacketName,
|
|
orderDetailOrderT_PriceAmount, orderDetailOrderT_PriceDisc,
|
|
orderDetailOrderT_PriceDiscRp, orderDetailOrderT_PriceSubTotal,
|
|
orderDetailOrderT_PriceTotal, orderDetailOrderJsonChildren,
|
|
orderDetailOrderUserID)
|
|
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
|
|
[
|
|
$last_id, $ss_pm_id,
|
|
$test_id, $test_name, $test_sas,
|
|
$is_packet, $packet_type,
|
|
$packet_id, $packet_name,
|
|
floatval($t['bruto'] ?? 0),
|
|
floatval($t['discountpersen'] ?? 0),
|
|
floatval($t['discountrp'] ?? 0),
|
|
floatval($t['total'] ?? 0),
|
|
floatval($t['total'] ?? 0),
|
|
$child_json,
|
|
$userid
|
|
]
|
|
);
|
|
}
|
|
|
|
$sql = "SELECT * FROM one_klinik.`order` WHERE orderID = {$last_id}";
|
|
$data_order = $this->db_oneklinik->query($sql)->row_array();
|
|
if ($queueID != "0" && trim($queueNumber) != "") {
|
|
$this->done_today_by_queue_number($queueNumber, $queueID);
|
|
}
|
|
|
|
$this->sys_ok($data_order);
|
|
} else {
|
|
$this->sys_error_db("error order save", $this->db_oneklinik);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
public function done_today_by_queue_number($get_queue_number, $queueID)
|
|
{
|
|
try {
|
|
// if (!$this->isLogin) {
|
|
// $this->sys_error("Invalid Token");
|
|
// exit;
|
|
// }
|
|
|
|
$prm = $this->sys_input;
|
|
// $get_queue_number = $this->uri->segment('4');
|
|
// $queueID = $this->uri->segment('5');
|
|
|
|
// check IP ADDRESS
|
|
$sql_cek_counter_ip = "select counterIsDedicated, counterID
|
|
from counter
|
|
where counterIsActive = 'Y'
|
|
AND counterIP = ?";
|
|
// echo $sql_cek_counter_ip;
|
|
|
|
$qry_cek_counter_ip = $this->db_antrione->query($sql_cek_counter_ip, [$this->input->ip_address()]);
|
|
|
|
$last_qry = $this->db_antrione->last_query();
|
|
|
|
if (!$qry_cek_counter_ip) {
|
|
$this->db_antrione->trans_rollback();
|
|
$error = $this->db_antrione->error()["message"];
|
|
$this->sys_error_db($error, $this->db_antrione);
|
|
exit;
|
|
}
|
|
|
|
$data_cek_counter_ip = $qry_cek_counter_ip->result_array();
|
|
|
|
if (count($data_cek_counter_ip) > 0) {
|
|
// call sp_done(?,?)
|
|
|
|
$counterID = $data_cek_counter_ip[0]['counterID'];
|
|
$sql_sp_done = "call sp_done(?,?,?)";
|
|
$qry_call_sp = $this->db_antrione->query($sql_sp_done, [$get_queue_number, $counterID, '']);
|
|
|
|
if (!$qry_call_sp) {
|
|
$this->db_antrione->trans_rollback();
|
|
$error = $this->db_antrione->error()["message"];
|
|
$this->sys_error_db($error, $this->db_antrione);
|
|
exit;
|
|
}
|
|
$this->clean_mysqli_connection($this->db_antrione->conn_id);
|
|
|
|
if ($qry_call_sp->result_array()[0]['status'] == "ERR") {
|
|
echo json_encode(array(
|
|
'status' => $qry_call_sp->result_array()[0]['status'],
|
|
'message' => $qry_call_sp->result_array()[0]['message']
|
|
));
|
|
} else {
|
|
$sql_get_sID = "SELECT queueServiceID as serviceID,
|
|
queueCounterID as counterID,
|
|
serviceIsConsultDoctor
|
|
FROM queue
|
|
left join service
|
|
ON queueServiceID = ServiceID
|
|
AND ServiceIsActive = 'Y'
|
|
WHERE queueID = ?";
|
|
$qry_get_sID = $this->db_antrione->query($sql_get_sID, [$queueID]);
|
|
|
|
$last_qry = $this->db_antrione->last_query();
|
|
|
|
if (!$qry_get_sID) {
|
|
$error = $this->db_antrione->error()["message"];
|
|
$this->sys_error_db($error, $this->db_antrione);
|
|
exit;
|
|
}
|
|
|
|
$data = $qry_get_sID->row_array();
|
|
$serviceID = $data['serviceID'];
|
|
$counterID = $data['counterID'];
|
|
$serviceIsConsultDoctor = $data['serviceIsConsultDoctor'];
|
|
|
|
// check jk serviceIsConsultDoctor Y mk antrian konsul dokter
|
|
|
|
if ($serviceIsConsultDoctor == 'Y') {
|
|
file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.kd.$serviceID.$counterID");
|
|
} else {
|
|
file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.fo.$serviceID.$counterID");
|
|
}
|
|
|
|
return array(
|
|
'status' => $qry_call_sp->result_array()[0]['status'],
|
|
'message' => $qry_call_sp->result_array()[0]['message'],
|
|
);
|
|
}
|
|
} else {
|
|
return
|
|
array(
|
|
array(
|
|
'status' => 'ERR',
|
|
'message' => 'Invalid IP address ' . $this->input->ip_address()
|
|
)
|
|
);
|
|
}
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
function searchregion()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$prm = $this->sys_input;
|
|
$search = $prm['search'];
|
|
|
|
$sql = "SELECT
|
|
r.regional_cd,
|
|
r.regional_cd AS id,
|
|
r.regional_nm,
|
|
r.full_name AS text_nm,
|
|
r.pro_cd, IFNULL(pro.regional_nm,'') AS pro_nm,
|
|
r.kab_cd, IFNULL(kab.regional_nm,'') AS kab_nm,
|
|
r.kec_cd, IFNULL(kec.regional_nm,'') AS kec_nm,
|
|
r.kel_cd, IFNULL(kel.regional_nm,'') AS kel_nm,
|
|
r.status_cd, r.old_nm
|
|
FROM regional r
|
|
LEFT JOIN regional pro ON CONCAT(r.pro_cd, REPEAT('0', 8)) = pro.regional_cd
|
|
LEFT JOIN regional kab ON CONCAT(r.pro_cd, r.kab_cd, REPEAT('0', 6)) = kab.regional_cd
|
|
LEFT JOIN regional kec ON CONCAT(r.pro_cd, r.kab_cd, r.kec_cd, REPEAT('0', 3)) = kec.regional_cd
|
|
LEFT JOIN regional kel ON CONCAT(r.pro_cd, r.kab_cd, r.kec_cd, r.kel_cd) = kel.regional_cd
|
|
WHERE
|
|
r.full_name LIKE CONCAT('%','{$search}','%')
|
|
LIMIT 100
|
|
";
|
|
|
|
$qry = $this->db_onedev->query($sql);
|
|
|
|
if (!$qry) {
|
|
$this->sys_error_db("search wilayah select error", $this->db_onedev);
|
|
exit;
|
|
}
|
|
|
|
$rows = $qry->result_array();
|
|
|
|
$result = array(
|
|
"records" => $rows,
|
|
"sql" => $this->db_onedev->last_query()
|
|
);
|
|
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
function search_countries()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$prm = $this->sys_input;
|
|
$search = $prm['search'];
|
|
|
|
if (!$search || $search == '') {
|
|
$search = 'Indonesia';
|
|
}
|
|
|
|
$sql = "SELECT * FROM terminology WHERE attribute_path = 'Address.country' AND display LIKE '%$search%' ORDER BY display ASC LIMIT 20";
|
|
$query = $this->db_onedev->query($sql);
|
|
$rows = $query->result_array();
|
|
$result = array("records" => $rows);
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
|
|
function searchcompany()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$prm = $this->sys_input;
|
|
$search = $this->db_onedev->escape_like_str($prm['search'] ?? '');
|
|
|
|
$sql = "SELECT
|
|
M_CompanyID AS id,
|
|
M_CompanyName AS name,
|
|
M_CompanyNumber AS number
|
|
FROM m_company
|
|
WHERE M_CompanyIsActive = 'Y'
|
|
AND M_CompanyName LIKE '%{$search}%'
|
|
ORDER BY M_CompanyName ASC
|
|
LIMIT 20";
|
|
|
|
$query = $this->db_onedev->query($sql);
|
|
if (!$query) {
|
|
$this->sys_error_db("searchcompany error", $this->db_onedev);
|
|
exit;
|
|
}
|
|
$this->sys_ok(array("records" => $query->result_array()));
|
|
exit;
|
|
}
|
|
|
|
function getmoubycompany()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$prm = $this->sys_input;
|
|
$company_id = intval($prm['company_id'] ?? 0);
|
|
if (!$company_id) {
|
|
$this->sys_error("company_id required");
|
|
exit;
|
|
}
|
|
|
|
$sql = "SELECT
|
|
M_MouID AS id,
|
|
M_MouName AS name,
|
|
M_MouNumber AS number,
|
|
M_MouRefNumber AS ref_number,
|
|
M_MouStartDate AS start_date,
|
|
M_MouEndDate AS end_date
|
|
FROM m_mou
|
|
WHERE M_MouM_CompanyID = ?
|
|
AND M_MouIsActive = 'Y'
|
|
AND M_MouIsReleased = 'Y'
|
|
AND CURDATE() BETWEEN M_MouStartDate AND M_MouEndDate
|
|
ORDER BY M_MouName ASC";
|
|
|
|
$query = $this->db_onedev->query($sql, [$company_id]);
|
|
if (!$query) {
|
|
$this->sys_error_db("getmoubycompany error", $this->db_onedev);
|
|
exit;
|
|
}
|
|
$this->sys_ok(array("records" => $query->result_array()));
|
|
exit;
|
|
}
|
|
|
|
function getpoli()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$sql = "SELECT
|
|
M_ClinicUnitID AS id,
|
|
M_ClinicUnitCode AS code,
|
|
M_ClinicUnitName AS name,
|
|
M_ClinicUnitDescription AS description,
|
|
M_ClinicUnitSatusehatLocationID AS satusehat_location_id
|
|
FROM one_klinik.m_clinic_unit
|
|
WHERE M_ClinicUnitIsActive = 'Y'
|
|
ORDER BY M_ClinicUnitID ASC";
|
|
|
|
$query = $this->db_oneklinik->query($sql);
|
|
if (!$query) {
|
|
$this->sys_error_db("getpoli error", $this->db_oneklinik);
|
|
exit;
|
|
}
|
|
$rows = $query->result_array();
|
|
$this->sys_ok(array("records" => $rows));
|
|
exit;
|
|
}
|
|
|
|
function search_test()
|
|
{
|
|
if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; }
|
|
|
|
$prm = $this->sys_input;
|
|
$mouid = intval($prm['mouid'] ?? 0);
|
|
|
|
if (!$mouid) {
|
|
$this->sys_ok(['total' => 0, 'records' => [], 'total_display' => 0]);
|
|
exit;
|
|
}
|
|
$search = "%{$this->db_onedev->escape_like_str(trim($prm['search'] ?? ''))}%";
|
|
|
|
$sql = "SELECT * FROM (
|
|
SELECT Ss_PriceMouID as ss_price_mou_id,
|
|
Ss_PriceMouM_MouID as mouid,
|
|
0 as xid,
|
|
Nat_TestID as nat_testid,
|
|
nat_test,
|
|
is_packet,
|
|
packet_id,
|
|
px_type as type,
|
|
ss_price_mou.T_TestID as pxid,
|
|
test.T_TestCode as pxcode,
|
|
test.T_TestSasCode as pxsascode,
|
|
test.T_TestName as test_name,
|
|
CONCAT(test.T_TestSasCode,' ',test.T_TestName) as pxname,
|
|
test.T_TestIsResult as isresult,
|
|
JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceAmount')) as bruto,
|
|
JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDisc')) as discountpersen,
|
|
JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDiscRp')) as discountrp,
|
|
if(JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDisc')) <> 0,
|
|
(((JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDisc')) / 100) * JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceAmount'))) + JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDiscRp'))),
|
|
JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDiscRp'))) as discount,
|
|
( JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceAmount')) - ((JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDisc')) / 100) * JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceAmount'))) - JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDiscRp')) ) as total,
|
|
'Y' as status, 'N' as active, 'N' as cito, 'N' as cito_before, '' as promise, '' as charge,
|
|
child_test
|
|
FROM ss_price_mou
|
|
JOIN t_test test ON ss_price_mou.T_TestID = test.T_TestID
|
|
WHERE CONCAT(test.T_TestSasCode,' ',test.T_TestName) LIKE '{$search}'
|
|
AND Ss_PriceMouM_MouID = {$mouid} AND is_packet <> 'Y' AND T_PriceIsCito <> 'Y'
|
|
UNION
|
|
SELECT Ss_PriceMouID as ss_price_mou_id,
|
|
Ss_PriceMouM_MouID as mouid,
|
|
0 as xid,
|
|
Nat_TestID as nat_testid,
|
|
nat_test,
|
|
is_packet,
|
|
packet_id,
|
|
px_type as type,
|
|
test.T_PacketID as pxid,
|
|
test.T_PacketSasCode as pxcode,
|
|
test.T_PacketSasCode as pxsascode,
|
|
test.T_PacketName as test_name,
|
|
CONCAT(test.T_PacketSasCode,' ',test.T_PacketName) as pxname,
|
|
'N' as isresult,
|
|
IF(px_type <> 'PN',JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceAmount')),T_PriceAmount) as bruto,
|
|
IF(px_type <> 'PN',JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDisc')),T_PriceDisc) as discountpersen,
|
|
IF(px_type <> 'PN',JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDiscRp')),T_PriceDiscRp) as discountrp,
|
|
if(IF(px_type <> 'PN',JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDisc')),T_PriceDisc) <> 0,
|
|
(((IF(px_type <> 'PN',JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDisc')),T_PriceDisc) / 100) * IF(px_type <> 'PN',JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceAmount')),T_PriceAmount)) + IF(px_type <> 'PN',JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDiscRp')),T_PriceDiscRp)),
|
|
IF(px_type <> 'PN',JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDiscRp')),T_PriceDiscRp)) as discount,
|
|
IF(px_type <> 'PN',( JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceAmount')) - ((JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDisc')) / 100) * JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceAmount'))) - JSON_UNQUOTE(JSON_EXTRACT(one_json_sum(Ss_PriceMouID),'$.T_PriceDiscRp')) ),T_PriceTotal) as total,
|
|
'Y' as status, 'N' as active, 'N' as cito, 'N' as cito_before, '' as promise, '' as charge,
|
|
child_test
|
|
FROM ss_price_mou
|
|
JOIN t_packet test ON test.T_PacketID = T_TestID
|
|
WHERE CONCAT(test.T_PacketSasCode,' ',test.T_PacketName) LIKE '{$search}'
|
|
AND Ss_PriceMouM_MouID = {$mouid} AND is_packet = 'Y' AND T_PriceIsCito <> 'Y'
|
|
) x LIMIT 50";
|
|
|
|
$query = $this->db_onedev->query($sql);
|
|
if (!$query) { $this->sys_error_db("search_test", $this->db_onedev); exit; }
|
|
|
|
$rows = $query->result_array();
|
|
foreach ($rows as $k => $v) {
|
|
$rows[$k]['status'] = ($v['status'] !== 'N');
|
|
$rows[$k]['cito'] = ($v['cito'] !== 'N');
|
|
$rows[$k]['charge'] = ['value' => 0, 'label' => '0%'];
|
|
|
|
if ($v['type'] === 'PXR') {
|
|
$nat_test_now = [];
|
|
$row_nattest = $this->db_onedev->query(
|
|
"SELECT T_TestNat_TestID FROM t_test
|
|
WHERE T_TestSasCode LIKE ? AND T_TestID <> ? AND T_TestIsActive = 'Y'",
|
|
[$v['pxsascode'] . '%', $v['pxid']]
|
|
)->result_array();
|
|
foreach ($row_nattest as $vnat) {
|
|
$nat_test_now[] = $vnat['T_TestNat_TestID'];
|
|
}
|
|
$rows[$k]['nat_test'] = $nat_test_now;
|
|
|
|
$child_test = json_decode($v['child_test']);
|
|
foreach ($child_test as $kchild => $vchild) {
|
|
$child_test[$kchild]->nat_test = json_decode($vchild->nat_test);
|
|
$row_test = $this->db_onedev->query(
|
|
"SELECT T_TestIsResult, T_TestCode, T_TestSasCode FROM t_test WHERE T_TestID = ? LIMIT 1",
|
|
[$vchild->T_TestID]
|
|
)->row_array();
|
|
if ($row_test) {
|
|
$child_test[$kchild]->isresult = $row_test['T_TestIsResult'];
|
|
$child_test[$kchild]->pxcode = $row_test['T_TestCode'];
|
|
$child_test[$kchild]->pxsascode = $row_test['T_TestSasCode'];
|
|
}
|
|
}
|
|
$rows[$k]['child_test'] = $child_test;
|
|
} else {
|
|
$rows[$k]['nat_test'] = json_decode($v['nat_test']);
|
|
$rows[$k]['child_test'] = json_decode($v['child_test']);
|
|
}
|
|
}
|
|
|
|
$this->sys_ok(['total' => count($rows), 'records' => $rows, 'total_display' => count($rows)]);
|
|
exit;
|
|
}
|
|
}
|