Files
BE_CPONE/application/controllers/mockup/cpone-patient-checkout/Patient.php
2026-04-27 10:31:17 +07:00

584 lines
18 KiB
PHP

<?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 scan_patient_checkout(){
$prm = $this->sys_input;
$sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ?";
$query = $this->db_onedev->query($sql,array([$prm['labnumber']]));
if (!$query) {
$this->sys_error_db("data patient");
exit;
}
$data_patient = $query->row_array();
//print_r($data_patient);
$result = $this->get_patient($prm['labnumber'],$data_patient['T_OrderHeaderID']);
$this->sys_ok($result);
exit;
}
function search_patient(){
$prm = $this->sys_input;
$result = $this->get_patient($prm['noreg'],$prm['order_id']);
$this->sys_ok($result);
exit;
}
function get_patient($labnumber,$orderid){
//# ambil parameter input
$data_patient = [];
$userid = $this->sys_user["M_UserID"];
$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,
0 as checkoutid
FROM t_orderheader
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
JOIN corporate ON T_OrderHeaderCorporateID = CorporateID
WHERE
T_OrderHeaderID = {$orderid} AND T_OrderHeaderLabNumber = '{$labnumber}'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data patient");
exit;
}
$data_patient = $query->row_array();
$checkoutid = 0 ;
if(count($data_patient) > 0){
$sql = "SELECT count(*) as xcount
FROM t_patient_checkout
WHERE T_PatientCheckoutT_OrderHeaderID = {$orderid} AND T_PatientCheckoutIsActive = 'Y'";
//echo $sql;
$xcount = $this->db_onedev->query($sql)->row()->xcount;
if($xcount == 0){
$query = "INSERT INTO t_patient_checkout
(T_PatientCheckoutT_OrderHeaderID,
T_PatientCheckoutStartTime,
T_PatientCheckoutUserID,
T_PatientCheckoutCreated,
T_PatientCheckoutLastUpdated)
VALUES({$orderid},
now(),
{$userid},
now(),
now())";
//echo $query;
$rows = $this->db_onedev->query($query);
$checkoutid = $this->db_onedev->last_query();
}else{
$sql = "SELECT T_PatientCheckoutID as checkoutid
FROM t_patient_checkout
WHERE T_PatientCheckoutT_OrderHeaderID = {$orderid} AND T_PatientCheckoutIsActive = 'Y'";
//echo $sql;
$checkoutid = $this->db_onedev->query($sql)->row()->checkoutid;
}
foreach ($data_patient as $key => $value) {
$data_patient['checkoutid'] = $checkoutid;
}
}
$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 = {$orderid} 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 = {$orderid} 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_SampleTypeID as sampletype_id,
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 = {$orderid} AND
T_OrderSampleIsActive = 'Y'
Order BY T_SampleTypeName ASC
";
//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_TestID as sampletype_id,
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 = {$orderid} 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_TestID as sampletype_id,
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 = {$orderid} 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_TestID as sampletype_id,
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 = {$orderid} 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,
IF(T_SurveyID IS NULL, 'N','Y') as is_sampling,
IF(T_SurveyID IS NULL, 'N','Y') as is_received,
IFNULL(DATE_FORMAT(T_SurveyCreated,'%d-%m-%Y'),'Klik untuk mengisi survey') as xcreated_date, IFNULL(DATE_FORMAT(T_SurveyCreated,'%H:%i'),'') as xcreated_time
FROM t_orderheader
LEFT JOIN t_survey ON T_OrderHeaderID = T_SurveyT_OrderHeaderID AND
T_SurveyIsActive = 'Y'
WHERE
T_OrderHeaderID = {$orderid} AND T_OrderHeaderLabNumber = '{$labnumber}'
";
//echo $sql;
$query = $this->db_onedev->query($sql);
if (!$query) {
$this->sys_error_db("data exist");
exit;
}
$data_exist = $query->row();
$data_survey = [];
$urls = [];
$query = " SELECT * FROM `s_menu` WHERE `S_MenuUrl` LIKE '%test/vuex/cpone-patient-checkout%' AND S_MenuIsActive = 'Y' LIMIT 1";
$urls['url_patient'] = $this->db_onedev->query($query)->row()->S_MenuUrl;
if($data_exist->xcount > 0){
$status = "SUCCESS";
$data_survey = [
"sampletype_name" => "Survey",
"barcode" => $labnumber,
"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" => $data_exist->is_sampling,
"is_received" => $data_exist->is_received
];
}
$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,
"urls" => $urls
);
return $result;
}
function save_note(){
//# ambil parameter input
$prm = $this->sys_input;
$userid = $this->sys_user["M_UserID"];
$status = "FORM";
$results = [];
$sql = "INSERT INTO t_patient_checkout_detail (
T_PatientCheckoutDetailT_PatientCheckoutID,
T_PatientCheckoutDetailType,
T_PatientCheckoutDetailT_TestID,
T_PatientCheckoutDetailT_SampleTypeID,
T_PatientCheckoutDetailNote,
T_PatientCheckoutDetailUserID,
T_PatientCheckoutDetailCreated,
T_PatientCheckoutDetailLastUpdated)
VALUES( ?, ?, ?, ?, ?, ?, NOW(), NOW())
";
//echo $sql;
$query = $this->db_onedev->query($sql,array(
$prm['checkoutid'],
$prm['type'],
$prm['testid'],
$prm['sampletypeid'],
$prm['note'],
$userid
));
if (!$query) {
$this->sys_error_db("insert t_patient_checkout_detail");
exit;
}
$status = "SUCCESS";
$result = array(
"status" => $status
);
$this->sys_ok($result);
exit;
}
function scanbarcode(){
$prm = $this->sys_input;
$sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ?";
$query = $this->db_onedev->query($sql,array([$prm['barcode']]));
if (!$query) {
$this->sys_error_db("data patient");
exit;
}
$data_patient = $query->row_array();
//print_r($data_patient);
$userid = $this->sys_user["M_UserID"];
$status = "FORM";
$results = [];
$sql = "UPDATE t_patient_checkout SET T_PatientCheckoutFinishTime = now() WHERE T_PatientCheckoutT_OrderHeaderID = ? AND T_PatientCheckoutID = ?";
//echo $sql;
$query = $this->db_onedev->query($sql,array(
$data_patient['T_OrderHeaderID'],
$prm['checkoutid']
));
if (!$query) {
$this->sys_error_db(["status" => "ERR", "message" => "update t_patient_checkout | " .
$this->db_onedev->error()["message"], "debug" => $this->db_onedev->last_query()]);
exit;
}
$status = "SUCCESS";
$result = array(
"status" => $status
);
$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;
}
}