Files
2026-04-15 15:24:12 +07:00

436 lines
13 KiB
Plaintext

<?php
class Patient 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);
}
function search_patient(){
//# ambil parameter input
$prm = $this->sys_input;
$data_patient = [];
$sql = "
SELECT DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date,
T_OrderHeaderLabNumber as labnumber,
T_OrderHeaderM_PatientAge as patient_age,
M_PatientName as patient_name,
M_PatientNoReg as noreg,
IF(M_PatientGender = 'male','Laki-laki','Perempuan') as gender,
DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as dob,
M_PatientJob as job,
M_PatientPosisi as posisi,
IF(M_PatientDivisi = '','-',M_PatientDivisi) as divisi,
M_PatientHp as hp,
M_PatientEmail as email,
M_PatientNIP as nip,
CorporateName as corporate_name,
M_PatientPhoto as photo
FROM t_orderheader
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
JOIN corporate ON T_OrderHeaderCorporateID = CorporateID
WHERE
T_OrderHeaderID = {$prm['order_id']} AND T_OrderHeaderLabNumber = '{$prm['noreg']}'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data patient");
exit;
}
$data_patient = $query->row_array();
$data_packet = [];
$sql = "
SELECT T_PacketName as packet_name,
T_PacketID as packet_id,
'' as active,
'' as details
FROM t_orderdetailorder
JOIN t_packet ON T_OrderDetailOrderT_PacketID = T_PacketID
WHERE
T_OrderDetailOrderT_OrderHeaderID = {$prm['order_id']} AND
T_OrderDetailOrderIsPacket = 'Y' AND
T_OrderDetailOrderIsActive = 'Y'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data packet");
exit;
}
$data_packet = $query->result_array();
if($data_packet){
foreach ($data_packet as $key => $value) {
$data_packet[$key]['active'] = false;
$sql = "SELECT T_TestName as test_name
FROM t_packetdetail
JOIN t_test ON T_PacketDetailT_TestID = T_TestID
WHERE T_PacketDetailT_PacketID = {$value['packet_id']} AND T_PacketDetailIsActive = 'Y'";
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data packet detail");
exit;
}
$data_packet_details = $query->result_array();
if(count($data_packet_details) > 0)
$data_packet[$key]['details'] = $data_packet_details;
else
$data_packet[$key]['details'] = [];
}
}
$data_tests = [];
$sql = "
SELECT T_TestName as test_name
FROM t_orderdetailorder
JOIN t_test ON T_OrderDetailOrderT_TestID = T_TestID
WHERE
T_OrderDetailOrderT_OrderHeaderID = {$prm['order_id']} AND
T_OrderDetailOrderIsPacket = 'N' AND
T_OrderDetailOrderIsActive = 'Y'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data tests");
exit;
}
$data_tests = $query->result_array();
$data_sample_lab = [];
$sql = "
SELECT T_SampleTypeName as sampletype_name,
T_OrderSampleBarcode as barcode,
IF(ISNULL(T_OrderSampleSamplingDate),'Belum diambil',DATE_FORMAT(T_OrderSampleSamplingDate,'%d-%m-%Y')) as sampling_date,
IF(ISNULL(T_OrderSampleSamplingTime),'',T_OrderSampleSamplingTime) as sample_time,
IF(ISNULL(T_OrderSampleReceiveDate),'Belum dilakukan',DATE_FORMAT(T_OrderSampleReceiveDate,'%d-%m-%Y')) as receive_date,
IF(ISNULL(T_OrderSampleReceiveTime),'',DATE_FORMAT(T_OrderSampleReceiveTime,'%H:%i')) as receive_time,
T_OrderSampleSampling as is_sampling,
T_OrderSampleReceive as is_received,
IFNULL(M_StaffName,'') as staff_name
FROM t_ordersample
JOIN t_sampletype ON T_OrderSampleT_SampleTypeID = T_SampleTypeID
LEFT JOIN m_user ON T_OrderSampleReceiveUserID = M_UserID
LEFT JOIN m_staff ON M_UserM_StaffID = M_StaffID
WHERE
T_OrderSampleT_OrderHeaderID = {$prm['order_id']} AND
T_OrderSampleIsActive = 'Y'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data sample lab");
exit;
}
$data_sample_lab = $query->result_array();
$data_sample_radiodiagnostic = [];
$sql = "
SELECT T_TestName as sampletype_name,
T_OrderHeaderLabNumber as barcode,
IF(ISNULL(T_SamplingSoProcessDate),'Belum dilakukan',DATE_FORMAT(T_SamplingSoProcessDate,'%d-%m-%Y')) as sampling_date,
IF(ISNULL(T_SamplingSoProcessTime),'',T_SamplingSoProcessTime) as sample_time,
IF(ISNULL(T_SamplingSoDoneDate),'Belum dilakukan',DATE_FORMAT(T_SamplingSoDoneDate,'%d-%m-%Y')) as receive_date,
IF(ISNULL(T_SamplingSoDoneTime),'',DATE_FORMAT(T_SamplingSoDoneTime,'%H:%i')) as receive_time,
IF(ISNULL(T_SamplingSoFlag),'N','Y') as is_sampling,
IF(ISNULL(T_SamplingSoFlag) OR T_SamplingSoFlag <> 'D','N','Y') as is_received,
IFNULL(M_StaffName,'') as staff_name
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID
JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID
JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND
T_SampleStationIsNonLab = 'RADIODIAGNOSTIC'
LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
T_SamplingSoT_TestID = T_TestID
LEFT JOIN m_user ON T_SamplingSoDoneUserID = M_UserID
LEFT JOIN m_staff ON M_UserM_StaffID = M_StaffID
WHERE
T_OrderDetailT_OrderHeaderID = {$prm['order_id']} AND
T_OrderDetailIsActive = 'Y'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data sample radiodiagnostic");
exit;
}
$data_sample_radiodiagnostic = $query->result_array();
$data_sample_electromedic = [];
$sql = "
SELECT T_TestName as sampletype_name,
T_OrderHeaderLabNumber as barcode,
IF(ISNULL(T_SamplingSoProcessDate),'Belum dilakukan',DATE_FORMAT(T_SamplingSoProcessDate,'%d-%m-%Y')) as sampling_date,
IF(ISNULL(T_SamplingSoProcessTime),'',T_SamplingSoProcessTime) as sample_time,
IF(ISNULL(T_SamplingSoDoneDate),'Belum dilakukan',DATE_FORMAT(T_SamplingSoDoneDate,'%d-%m-%Y')) as receive_date,
IF(ISNULL(T_SamplingSoDoneTime),'',DATE_FORMAT(T_SamplingSoDoneTime,'%H:%i')) as receive_time,
IF(ISNULL(T_SamplingSoFlag),'N','Y') as is_sampling,
IF(ISNULL(T_SamplingSoFlag) OR T_SamplingSoFlag <> 'D','N','Y') as is_received,
IFNULL(M_StaffName,'') as staff_name
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID
JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID
JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND
T_SampleStationIsNonLab = 'ELEKTROMEDIS'
LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
T_SamplingSoT_TestID = T_TestID
LEFT JOIN m_user ON T_SamplingSoDoneUserID = M_UserID
LEFT JOIN m_staff ON M_UserM_StaffID = M_StaffID
WHERE
T_OrderDetailT_OrderHeaderID = {$prm['order_id']} AND
T_OrderDetailIsActive = 'Y'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data sample electromedis");
exit;
}
$data_sample_electromedic = $query->result_array();
$data_sample_other = [];
$sql = "
SELECT T_TestName as sampletype_name,
T_OrderHeaderLabNumber as barcode,
IF(ISNULL(T_SamplingSoProcessDate),'Belum dilakukan',DATE_FORMAT(T_SamplingSoProcessDate,'%d-%m-%Y')) as sampling_date,
IF(ISNULL(T_SamplingSoProcessTime),'',T_SamplingSoProcessTime) as sample_time,
IF(ISNULL(T_SamplingSoDoneDate),'Belum dilakukan',DATE_FORMAT(T_SamplingSoDoneDate,'%d-%m-%Y')) as receive_date,
IF(ISNULL(T_SamplingSoDoneTime),'',DATE_FORMAT(T_SamplingSoDoneTime,'%H:%i')) as receive_time,
IF(ISNULL(T_SamplingSoFlag),'N','Y') as is_sampling,
IF(ISNULL(T_SamplingSoFlag) OR T_SamplingSoFlag <> 'D','N','Y') as is_received,
IFNULL(M_StaffName,'') as staff_name
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID
JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID
JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND
T_SampleStationIsNonLab = 'OTHERS'
LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
T_SamplingSoT_TestID = T_TestID
LEFT JOIN m_user ON T_SamplingSoDoneUserID = M_UserID
LEFT JOIN m_staff ON M_UserM_StaffID = M_StaffID
WHERE
T_OrderDetailT_OrderHeaderID = {$prm['order_id']} AND
T_OrderDetailIsActive = 'Y'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data sample other");
exit;
}
$data_sample_other = $query->result_array();
$sql = "
SELECT COUNT(*) as xcount, DATE_FORMAT(T_SurveyCreated,'%d-%m-%Y') as xcreated_date, DATE_FORMAT(T_SurveyCreated,'%H:%i') as xcreated_time
FROM t_survey
JOIN t_orderheader ON T_OrderHeaderID = T_SurveyT_OrderHeaderID AND T_OrderHeaderID = {$prm['order_id']} AND T_OrderHeaderLabNumber = '{$prm['noreg']}'
WHERE
T_SurveyIsActive = 'Y'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data exist");
exit;
}
$data_exist = $query->row();
$data_survey = [];
if($data_exist->xcount > 0){
$status = "SUCCESS";
$data_survey = [
"sampletype_name" => "Isi survey",
"barcode" => $prm['noreg'],
"sampling_date" => $data_exist->xcreated_date,
"sample_time" => $data_exist->xcreated_time,
"receive_date" => $data_exist->xcreated_date,
"receive_time" => $data_exist->xcreated_time,
"is_sampling" => 'Y',
"is_received" => 'Y'
];
}
$result = array(
"data_patient" => $data_patient?$data_patient:[],
"data_packet" => $data_packet? $data_packet:[],
"data_tests" => $data_tests?$data_tests:[],
"data_sample_lab" => $data_sample_lab?$data_sample_lab:[],
"data_sample_radiodiagnostic" => $data_sample_radiodiagnostic?$data_sample_radiodiagnostic:[],
"data_sample_electromedic" => $data_sample_electromedic?$data_sample_electromedic:[],
"data_sample_other" => $data_sample_other?$data_sample_other:[],
"data_survey" => $data_survey
);
$this->sys_ok($result);
exit;
}
function load_survey(){
//# ambil parameter input
$prm = $this->sys_input;
$status = "FORM";
$results = [];
$sql = "
SELECT COUNT(*) as xcount
FROM t_survey
JOIN t_orderheader ON T_OrderHeaderID = T_SurveyT_OrderHeaderID AND T_OrderHeaderID = {$prm['order_id']} AND T_OrderHeaderLabNumber = '{$prm['noreg']}'
WHERE
T_SurveyIsActive = 'Y'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data exist");
exit;
}
$data_exist = $query->row()->xcount;
if($data_exist > 0){
$status = "SUCCESS";
}else{
$sql = "
SELECT COUNT(*) as xcount
FROM t_orderheader
WHERE
T_OrderHeaderID = {$prm['order_id']} AND
T_OrderHeaderLabNumber = '{$prm['noreg']}' AND
T_OrderHeaderIsActive = 'Y'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data patient");
exit;
}
$data_exist_patient = $query->row()->xcount;
if($data_exist_patient == 0){
$status = "PATIENT_NOT_FOUND";
}else{
$sql = "
SELECT M_SurveyID as id,
M_SurveyName as name,
'' as value
FROM m_survey
WHERE
M_SurveyIsActive = 'Y'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data survey");
exit;
}
$results = $query->result_array();
}
}
$result = array(
"records" => $results,
"status" => $status
);
$this->sys_ok($result);
exit;
}
function save_survey(){
//# ambil parameter input
$prm = $this->sys_input;
$status = "FORM";
$results = [];
$sql = "
INSERT INTO t_survey (
T_SurveyT_OrderHeaderID,
T_SurveySaran,
T_SurveyCreated
)
VALUES( ?, ?, NOW())
";
//echo $sql;
$query = $this->db_onedev->query($sql,array(
$prm['order_id'],
$prm['saran']
));
if (!$query) {
$this->sys_error_db("insert header");
exit;
}
$header_id = $this->db_onedev->insert_id();
foreach ($prm['surveys'] as $key => $value) {
$sql = "
INSERT INTO t_surveydetail (
T_SurveryDetailT_SurveyID,
T_SurveryDetailM_SurveyID,
T_SurveryDetailValue,
T_SurveryDetailCreated
)
VALUES(
?,?,?,NOW()
)
";
//echo $sql;
$query = $this->db_onedev->query($sql,array(
$header_id,
$value['id'],
$value['value']
));
if (!$query) {
//echo $this->db_onedev->last_query();
$this->sys_error_db("insert detail ");
exit;
}
}
$status = "SUCCESS";
$result = array(
"status" => $status
);
$this->sys_ok($result);
exit;
}
}