db_onedev = $this->load->database("onedev", true); $this->load->library('Nonlabtemplate'); $this->IP_SOCKET_IO = "127.0.0.1"; } function getstations() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $rows = []; $query = " SELECT T_SampleStationID as id, T_SampleStationName as name, T_SampleStationIsNonLab as isnonlab, T_SampleStationIsAdditionalFisik as isadditional FROM t_samplestation WHERE T_SampleStationIsActive = 'Y' ORDER BY T_SampleStationOrder ASC "; //echo $query; $rows['stations'] = $this->db_onedev->query($query)->result_array(); $rows['statuses'] = array(array('id' => 'NEW', 'name' => 'New'), array('id' => 'DONE', 'name' => 'Done')); $urls = []; $query = " SELECT * FROM `s_menu` WHERE `S_MenuUrl` LIKE '%cpone-resultentry-other-fisik-mobile%' AND S_MenuIsActive = 'Y' LIMIT 1"; $urls['url_fisik'] = $this->db_onedev->query($query)->row()->S_MenuUrl; $query = " SELECT * FROM `s_menu` WHERE `S_MenuUrl` LIKE '%test/vuex/one-resultentry-so-electromedis%' AND S_MenuIsActive = 'Y' LIMIT 1"; $urls['url_electromedis'] = $this->db_onedev->query($query)->row()->S_MenuUrl; $query = " SELECT * FROM `s_menu` WHERE `S_MenuUrl` LIKE '%test/vuex/one-resultentry-so-xray%' AND S_MenuIsActive = 'Y' LIMIT 1"; $urls['url_xray'] = $this->db_onedev->query($query)->row()->S_MenuUrl; $query = " SELECT * FROM `s_menu` WHERE `S_MenuName` = 'Specimen Collection Mobile' AND S_MenuIsActive = 'Y' LIMIT 1"; $urls['url_sampling'] = $this->db_onedev->query($query)->row()->S_MenuUrl; $result = array( "total" => count($rows), "records" => $rows, "urls" => $urls ); $this->sys_ok($result); exit; } function getlocation() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $stationID = $prm['station_id']; $rows = []; $query = "SELECT M_LocationID AS locationID, M_LocationName AS locationName FROM m_location WHERE M_LocationT_SampleStationID= ? AND M_LocationIsActive = 'Y' "; //echo $query; $qry = $this->db_onedev->query($query, [$stationID]); if (!$qry) { $error = array( "message" => $this->db_onedev->error()["message"], ); $this->sys_error($error); exit; } $rows = $qry->result_array(); $result = array( "total" => count($rows), "records" => $rows, ); $this->sys_ok($result); exit; } function scan_patient() { // $this->db->trans_begin(); // $this->db->trans_rollback(); // $this->db->trans_commit(); if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } //# ambil parameter input $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; $stationid = $prm['station_id']; $sql = "SELECT * FROM t_samplestation WHERE T_SampleStationID = {$stationid}"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("data t_samplestation"); exit; } $data_station = $query->row_array(); $stationtype = $data_station['T_SampleStationIsNonLab']; $stationadditional = $data_station['T_SampleStationIsAdditionalFisik']; $data_patient = []; $sql = ""; if ($stationtype == '') { $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_PatientNIP as nip, M_PatientEmail as email, M_PatientPhoto as photo, T_OrderHeaderID as xid, 0 as testid, CorporateName as corporate_name FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID AND T_OrderHeaderLabNumber = '{$prm['labnumber']}' JOIN corporate ON T_OrderHeaderCorporateID = CorporateID JOIN t_ordersample ON T_OrderSampleT_OrderHeaderID = T_OrderHeaderID AND T_OrderSampleT_SampleStationID = {$stationid} AND T_OrderSampleIsActive = 'Y' JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderSampleT_OrderHeaderID AND T_OrderLocationT_SampleStationID = T_OrderSampleT_SampleStationID AND T_OrderLocationIsActive = 'Y' AND T_OrderLocationM_LocationID = {$prm['location_id']} LIMIT 1 "; } else { $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_PatientNIP as nip, M_PatientEmail as email, M_PatientPhoto as photo, T_OrderHeaderID as xid, 0 as testid, CorporateName as corporate_name FROM t_orderheader JOIN corporate ON T_OrderHeaderCorporateID = CorporateID AND T_OrderHeaderLabNumber = '{$prm['labnumber']}' JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' 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_SampleStationID = {$stationid} JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND T_OrderLocationT_SampleStationID = T_SampleStationID AND T_OrderLocationIsActive = 'Y' AND T_OrderLocationM_LocationID = {$prm['location_id']} LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestID AND T_SamplingSoIsActive = 'Y' LIMIT 1 "; } //echo $sql; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("data patient"); exit; } $data_patient = $query->row_array(); $data_audiometri = array( 'master' => array(), 'answers' => array(), 'is_saved' => 'N' ); $data_spirometri = array( 'master' => array(), 'answers' => array(), 'is_saved' => 'N' ); if (!empty($data_patient) && intval($stationid) === 10) { $sqlAudiometriSo = "SELECT IFNULL(T_SamplingSoID,0) as samplingso_id FROM t_samplingso WHERE T_SamplingSoT_OrderHeaderID = ? AND T_SamplingSoT_SampleStationID = ? AND T_SamplingSoIsActive = 'Y' ORDER BY T_SamplingSoID DESC LIMIT 1"; $qAudiometriSo = $this->db_onedev->query($sqlAudiometriSo, array($data_patient['xid'], $stationid)); if ($qAudiometriSo && $qAudiometriSo->num_rows() > 0) { $data_patient['audiometri_samplingso_id'] = intval($qAudiometriSo->row()->samplingso_id); } else { $data_patient['audiometri_samplingso_id'] = 0; } $data_audiometri = $this->getAudiometriQuestionnaire( $data_patient['xid'], $data_patient['audiometri_samplingso_id'] ); } if (!empty($data_patient) && intval($stationid) === 11) { $sqlSpirometriSo = "SELECT IFNULL(T_SamplingSoID,0) as samplingso_id FROM t_samplingso WHERE T_SamplingSoT_OrderHeaderID = ? AND T_SamplingSoT_SampleStationID = ? AND T_SamplingSoIsActive = 'Y' ORDER BY T_SamplingSoID DESC LIMIT 1"; $qSpirometriSo = $this->db_onedev->query($sqlSpirometriSo, array($data_patient['xid'], $stationid)); if ($qSpirometriSo && $qSpirometriSo->num_rows() > 0) { $data_patient['spirometri_samplingso_id'] = intval($qSpirometriSo->row()->samplingso_id); } else { $data_patient['spirometri_samplingso_id'] = 0; } $data_spirometri = $this->getSpirometriQuestionnaire( $data_patient['xid'], $data_patient['spirometri_samplingso_id'] ); } if (intval($stationid) == 17 || intval($stationid) == 11 || intval($stationid) == 35) { $sql = "SELECT T_SamplingAdditionalFisikBBTBID as bbtbid, T_SamplingAdditionalFisikBBTBValueBB as bb, T_SamplingAdditionalFisikBBTBValueTB AS tb FROM t_orderheader JOIN `t_samplingso_additional_fisik_bbtb` ON T_OrderHeaderID = T_SamplingAdditionalFisikBBTBT_OrderHeaderID AND T_SamplingAdditionalFisikBBTBIsActive = 'Y' WHERE T_OrderHeaderLabNumber = '{$prm['labnumber']}'"; $query = $this->db_onedev->query($sql); if (!$query) { $message = $this->db_onedev->error(); $message['qry'] = $this->db_onedev->last_query(); $this->sys_error($message); exit; } $tbbb = $query->result_array(); if (count($tbbb) > 0) { $data_patient['patientTB'] = $tbbb[0]['tb']; $data_patient['patientBB'] = $tbbb[0]['bb']; $data_patient['isTBBB'] = 'Y'; $data_patient['bbtbid'] = $tbbb[0]['bbtbid']; } else { $data_patient['patientTB'] = 0; $data_patient['patientBB'] = 0; $data_patient['isTBBB'] = 'N'; $data_patient['bbtbid'] = 0; } } if (intval($stationid) == 33) { $sql = "SELECT T_SamplingAdditionalFisikVisusID as visus_id, T_SamplingAdditionalFisikVisusTKODV as tkod, T_SamplingAdditionalFisikVisusTKOSV as tkos, T_SamplingAdditionalFisikVisusDKODV as dkod, T_SamplingAdditionalFisikVisusDKOSV as dkos, T_SamplingAdditionalFisikVisusODSph as odSph, T_SamplingAdditionalFisikVisusODCyl as odCyl, T_SamplingAdditionalFisikVisusODX as odX, T_SamplingAdditionalFisikVisusOSSph as osSph, T_SamplingAdditionalFisikVisusOSCyl as osCyl, T_SamplingAdditionalFisikVisusOSX as osX, T_SamplingAdditionalFisikVisusAdd as visusAdd, IFNULL(T_SamplingAdditionalFisikBWID,0) as bw_id, IFNULL(T_SamplingAdditionalFisikBWPWValue,'') as btwrn, IFNULL(T_SamplingAdditionalFisikBWPWVAngka,'') as bw_angka FROM t_orderheader JOIN `t_samplingso_additional_fisik_visus` ON T_OrderHeaderID = T_SamplingAdditionalFisikVisusT_OrderHeaderID AND T_SamplingAdditionalFisikVisusIsActive = 'Y' LEFT JOIN t_samplingso_additional_fisik_bw ON T_OrderHeaderID = T_SamplingAdditionalFisikBWT_OrderHeaderID AND T_SamplingAdditionalFisikBWIsActive = 'Y' WHERE T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y' ORDER BY T_SamplingAdditionalFisikVisusID DESC LIMIT 1"; $query = $this->db_onedev->query($sql, array($prm['labnumber'])); if (!$query) { $message = $this->db_onedev->error(); $message['qry'] = $this->db_onedev->last_query(); $this->sys_error($message); exit; } $visus_bw = $query->result_array(); if (count($visus_bw) > 0) { $data_patient['visus_id'] = $visus_bw[0]['visus_id']; $data_patient['tkod'] = $visus_bw[0]['tkod']; $data_patient['tkos'] = $visus_bw[0]['tkos']; $data_patient['dkod'] = $visus_bw[0]['dkod']; $data_patient['dkos'] = $visus_bw[0]['dkos']; $data_patient['odSph'] = $visus_bw[0]['odSph']; $data_patient['odCyl'] = $visus_bw[0]['odCyl']; $data_patient['odX'] = $visus_bw[0]['odX']; $data_patient['osSph'] = $visus_bw[0]['osSph']; $data_patient['osCyl'] = $visus_bw[0]['osCyl']; $data_patient['osX'] = $visus_bw[0]['osX']; $data_patient['visusAdd'] = $visus_bw[0]['visusAdd']; $data_patient['bw_id'] = $visus_bw[0]['bw_id']; $data_patient['btwrn'] = $visus_bw[0]['btwrn']; $data_patient['bw_angka'] = $visus_bw[0]['bw_angka']; } else { $data_patient['visus_id'] = 0; $data_patient['tkod'] = ''; $data_patient['tkos'] = ''; $data_patient['dkod'] = ''; $data_patient['dkos'] = ''; $data_patient['odSph'] = ''; $data_patient['odCyl'] = ''; $data_patient['odX'] = ''; $data_patient['osSph'] = ''; $data_patient['osCyl'] = ''; $data_patient['osX'] = ''; $data_patient['visusAdd'] = ''; $data_patient['bw_id'] = 0; $data_patient['btwrn'] = ''; $data_patient['bw_angka'] = ''; } } $data_sample_lab = []; if ($stationtype == '') { $sql = "SELECT '' as groupresult_name, 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 FROM t_ordersample JOIN t_orderheader ON T_OrderSampleT_OrderHeaderID = T_OrderHeaderID AND T_OrderSampleIsActive = 'Y' AND T_OrderHeaderLabNumber = '{$prm['labnumber']}' JOIN t_sampletype ON T_OrderSampleT_SampleTypeID = T_SampleTypeID JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND T_OrderLocationT_SampleStationID = T_SampleStationID AND T_OrderLocationIsActive = 'Y' AND T_OrderLocationM_LocationID = {$prm['location_id']} "; } else { $sql = "SELECT Group_ResultName as groupresult_name, 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(T_SamplingSoFlag = 'P','Y','N') as is_sampling, IF(T_SamplingSoFlag = 'D','Y','N') as is_received, T_OrderDetailT_TestID as test_id FROM t_orderdetail JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderHeaderLabNumber = '{$prm['labnumber']}' JOIN t_test ON T_OrderDetailT_TestID = T_TestID JOIN group_resultdetail ON T_OrderDetailT_TestID = Group_ResultDetailT_TestID AND Group_ResultDetailIsActive = 'Y' JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultIsActive = 'Y' 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_SampleStationID = {$stationid} JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND T_OrderLocationT_SampleStationID = T_SampleStationID AND T_OrderLocationIsActive = 'Y' AND T_OrderLocationM_LocationID = {$prm['location_id']} LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID =T_OrderHeaderID AND T_SamplingSoT_TestID = T_OrderDetailT_TestID AND T_SamplingSoIsActive = 'Y' GROUP BY Group_ResultID"; } //echo $sql; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("data sample lab"); exit; } // echo $this->db_onedev->last_query(); $data_sample_lab = $query->result_array(); $data_sample_lab_undone = []; $data_sample_lab_done = []; foreach ($data_sample_lab as $k_sampling => $v_sampling) { //print_r($v_sampling); if ($v_sampling['is_received'] == 'Y') { $data_sample_lab_done[] = $v_sampling; } else { //echo $k_sampling; $data_sample_lab_undone[] = $v_sampling; } } //print_r($data_sample_lab); //echo 'print_r'; //print_r($data_sample_lab_undone); $dt_glucoses = []; $sql = "SELECT IFNULL(OrderGlucoseID,0) as order_glucose_id,IFNULL(OrderGlucoseResult,'') as result, T_OrderDetailID as xid, T_OrderDetailT_TestID as test_id, T_OrderDetailT_TestName as test_name, T_TestNat_TestID as nat_testid FROM t_orderdetail JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderHeaderLabNumber = '{$prm['labnumber']}' JOIN t_test ON T_OrderDetailT_TestID = T_TestID JOIN nat_testglucose ON T_TestNat_TestID = Nat_TestGlucoseNat_TestID AND Nat_TestGlucoseIsActive = 'Y' JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID AND T_BahanT_SampleStationID = {$stationid} LEFT JOIN order_glucose ON OrderGlucoseT_OrderHeaderID = T_OrderHeaderID AND OrderGlucoseIsActive = 'Y' AND OrderGlucoseNat_TestID = T_TestNat_TestID WHERE T_OrderDetailIsActive = 'Y'"; $qu = $this->db_onedev->query($sql); //echo $this->db_onedev->last_query(); $dt_glucoses = $qu->result_array(); //print_r($dt_glucoses); $data_packet = []; $sql = " SELECT T_PacketName as packet_name, T_PacketID as packet_id, '' as active, '' as details FROM t_orderdetailorder JOIN t_orderheader ON T_OrderDetailOrderT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderLabNumber = '{$prm['labnumber']}' JOIN t_packet ON T_OrderDetailOrderT_PacketID = T_PacketID WHERE 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_orderheader ON T_OrderDetailOrderT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderLabNumber = '{$prm['labnumber']}' JOIN t_test ON T_OrderDetailOrderT_TestID = T_TestID WHERE 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(); //echo count($data_sample_lab_done); //echo count($data_sample_lab); //echo count($data_sample_lab_undone); if (count($data_sample_lab_done) < count($data_sample_lab) && count($data_sample_lab_undone) > 0) { $act = "call"; $statusnextid = 1; $orderid = $data_patient['xid']; $sampletypeid = 0; $barcodelabid = 0; $requirements = []; if ($stationadditional == 'N') { if ($stationtype == '') $doaction_call = $this->doaction($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid); else $doaction_call = $this->doaction_nonlab($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid); } else { $doaction_call = $this->doaction_nonlab($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid); } if ($doaction_call['records']['status'] == 'OK') { $act = "process"; //echo $act; $statusnextid = 3; $orderid = $data_patient['xid']; $sampletypeid = 0; $barcodelabid = 0; $requirements = []; if ($stationadditional == 'N') { if ($stationtype == '') $doaction_process = $this->doaction($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid); else $doaction_process = $this->doaction_nonlab($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid); } else { $doaction_process = $this->doaction_nonlab($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid); } } else { $rtn = array("status" => "NOTCAL", "data" => $doaction_call['records']['data']); $this->sys_ok($rtn); exit; } } //get req $sql = "SELECT T_OrderReqs FROM t_orderheader JOIN t_orderreq ON T_OrderHeaderID = T_OrderReqT_OrderHeaderID AND T_OrderReqIsActive = 'Y' WHERE T_OrderHeaderLabNumber = ? LIMIT 1"; $query = $this->db_onedev->query($sql, [$prm['labnumber']]); if (!$query) { $this->sys_error_db("data reqs"); exit; } $arrReq = $query->row_array()['T_OrderReqs']; if ($arrReq != null) { $arrReq = json_decode($arrReq); } $req = []; $sql = "SELECT Nat_RequirementID as reqID, Nat_RequirementName as reqName FROM nat_requirement WHERE Nat_RequirementID IN ?"; $query = $this->db_onedev->query($sql, [$arrReq]); if (!$query) { $this->sys_error_db("data reqs"); exit; } $req = $query->result_array(); $result = array( "status" => "OK", "data_patient" => $data_patient ? $data_patient : [], "data_sample_lab" => $data_sample_lab ? $data_sample_lab : [], "data_sample_lab_done" => $data_sample_lab_done ? $data_sample_lab_done : [], "data_sample_lab_undone" => $data_sample_lab_undone ? $data_sample_lab_undone : [], "data_packet" => $data_packet ? $data_packet : [], "data_requirement" => $req ? $req : [], "data_tests" => $data_tests ? $data_tests : [], "data_glucoses" => $dt_glucoses, "data_audiometri" => $data_audiometri, "data_spirometri" => $data_spirometri, ); $this->sys_ok($result); exit; } function skipaction() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; $act = "skip"; $statusnextid = 2; $stationid = $prm['station']['id']; $stationtype = $prm['station']['isnonlab']; $orderid = $prm['order_id']; $sampletypeid = 0; $barcodelabid = 0; $requirements = []; if ($stationtype == '') { $sql = "SELECT count(*) as xcount FROM (SELECT * FROM t_orderheader JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID JOIN t_barcodelab ON T_BarcodeLabT_OrderHeaderID = T_OrderHeaderID AND T_BarcodeLabT_SampleTypeID = T_SampleTypeID JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} JOIN t_ordersample ON T_OrderSampleT_OrderHeaderID = T_OrderHeaderID AND T_OrderSampleT_SampleTypeID = T_SampleTypeID AND T_OrderSampleT_BarcodeLabID = T_BarcodeLabID AND T_OrderSampleIsActive = 'Y' AND T_OrderSampleReceive = 'N' GROUP BY T_BarcodeLabID ) xx"; } else { $sql = "SELECT count(*) as xcount FROM (SELECT * FROM t_orderheader JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' 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_SampleStationID = {$stationid} LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestID AND T_SamplingSoIsActive = 'Y' WHERE ( ISNULL(T_SamplingSoID) OR T_SamplingSoFlag <> 'D' ) GROUP BY T_OrderDetailT_TestID ) xx"; } //echo $sql; $xcount = $this->db_onedev->query($sql)->row()->xcount; if ($xcount > 0) $doaction_call = $this->doaction($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid); else { $statusnextid = 5; $query = "INSERT INTO t_sampling_queue_last_status ( T_SamplingQueueLastStatusT_SampleStationID, T_SamplingQueueLastStatusT_OrderHeaderID, T_SamplingQueueLastStatusT_SamplingQueueStatusID, T_SamplingQueueLastStatusUserID) VALUES( {$stationid}, {$orderid}, {$statusnextid}, {$userid}) ON DUPLICATE KEY UPDATE T_SamplingQueueLastStatusT_SamplingQueueStatusID = {$statusnextid}, T_SamplingQueueLastStatusUserID = {$userid}"; //echo $query; $rows = $this->db_onedev->query($query); } $result = array( "order_id" => $orderid ); $this->sys_ok($result); exit; } function scanbarcode() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; $act = "samplingdone"; $statusnextid = 3; $stationid = $prm['station']['id']; $stationtype = $prm['station']['isnonlab']; $orderid = $prm['patient']['xid']; $sql = "SELECT * FROM t_ordersample JOIN t_orderheader ON T_OrderSampleT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderLabNumber = '{$prm['barcode']}' WHERE T_OrderSampleT_OrderHeaderID = {$orderid} AND T_OrderSampleT_SampleStationID = {$stationid} AND T_OrderSampleIsActive = 'Y' AND T_OrderSampleReceive = 'N'"; //echo $sql; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_ordersample"); exit; } $ordersamples = $query->result_array(); if ($ordersamples) { foreach ($ordersamples as $key => $ordersample) { $sampletypeid = $ordersample['T_OrderSampleT_SampleTypeID']; $barcodelabid = $ordersample['T_OrderSampleT_BarcodeLabID']; $requirements = []; $doaction_call = $this->doaction($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid); } /*$dt_glucoses = $prm['glucoses']; if($dt_glucoses && count($dt_glucoses) > 0){ foreach ($dt_glucoses as $key => $value) { $sql = "INSERT INTO order_glucose (OrderGlucoseT_OrderHeaderID,OrderGlucoseNat_TestID,OrderGlucoseResult,OrderGlucoseCreated,OrderGlucoseCreatedUserID) VALUES({$orderid},{$value['nat_testid']},'{$value['result']}',NOW(),{$userid})"; $query = $this->db_onedev->query($sql); $sql = "UPDATE t_orderdetail SET T_OrderDetailResult = '{$value['result']}' WHERE T_OrderDetailID = {$value['xid']}"; $query = $this->db_onedev->query($sql); } }*/ $result = array( "status_log" => "Y", "order_id" => $orderid, "isdone" => "Y" ); $this->sys_ok($result); exit; } else { $result = array( "status_log" => "N", "order_id" => $orderid ); $this->sys_ok($result); exit; } } function doaction($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid) { $rst_data = array('status' => 'OK'); $status_call = array('status' => 'OK', 'data' => array()); $sql = "SELECT '' AS queueNumber , M_LocationID AS locationID, M_LocationName AS locationName FROM t_orderheader JOIN t_order_location ON T_OrderHeaderID = T_OrderLocationT_OrderHeaderID JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND T_OrderLocationT_SampleStationID = ? WHERE T_OrderHeaderID=?"; $location = $this->db_onedev->query($sql, array($stationid, $orderid))->row_array(); $locationID = $location['locationID']; $locationName = $location['locationName']; $queueNumber = $location['queueNumber']; $splitedLocationName = explode(" ", $locationName); $locationName = $splitedLocationName[0]; if ($act == 'call') { $sql = "SELECT T_SamplingQueueLastStatusID, T_SamplingQueueStatusName, T_SampleStationName, T_SampleStationID, T_SampleStationIsNonLab FROM t_sampling_queue_last_status JOIN t_sampling_queue_status ON T_SamplingQueueLastStatusT_SamplingQueueStatusID = T_SamplingQueueStatusID JOIN t_samplestation ON T_SampleStationID = T_SamplingQueueLastStatusT_SampleStationID WHERE T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND T_SamplingQueueLastStatusT_SampleStationID <> {$stationid} AND T_SamplingQueueLastStatusT_SamplingQueueStatusID IN (1,3) LIMIT 1"; $data_status_call = $this->db_onedev->query($sql)->row_array(); if ($data_status_call) { $status_call = array('status' => 'NOTCALL', 'data' => $data_status_call); $check_valid = false; if ($data_status_call['T_SampleStationIsNonLab'] == '') { $sql = "SELECT COUNT(*) as xcount FROM t_ordersample WHERE T_OrderSampleReceive <> 'Y' AND T_OrderSampleT_OrderHeaderID = {$orderid} AND T_OrderSampleT_SampleStationID = {$data_status_call['T_SampleStationID']} AND T_OrderSampleIsActive = 'Y' "; $not_sampled = $this->db_onedev->query($sql)->row_array(); } else { $sql = "SELECT SUM(countx) as xcount FROM ( SELECT COUNT(*) as countx FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' AND T_OrderDetailT_OrderHeaderID = {$orderid} AND T_OrderDetailIsActive = 'Y' 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_SampleStationID = {$data_status_call['T_SampleStationID']} LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_SamplingSoT_TestID = T_TestID AND T_SamplingSoIsActive = 'Y' WHERE ISNULL(T_SamplingSoDoneDate) ) x"; $not_sampled = $this->db_onedev->query($sql)->row_array(); } if (intval($not_sampled['xcount']) == 0) { $sql = "UPDATE t_sampling_queue_last_status SET T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5 WHERE T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND T_SamplingQueueLastStatusT_SampleStationID = {$data_status_call['T_SampleStationID']}"; $this->db_onedev->query($sql); $status_call = array('status' => 'OK', 'data' => array()); } } } $next_status = $statusnextid; if ($act == 'process') { $sql = "SELECT T_OrderDetailID, T_OrderHeaderID,T_OrderDetailID as id, T_BarcodeLabID, T_BarcodeLabBarcode, T_OrderDetailT_TestCode, T_OrderDetailT_TestName, T_SampleTypeID, T_SampleTypeName, T_BahanName FROM t_orderheader JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID JOIN t_ordersample ON T_OrderSampleT_OrderHeaderID = T_OrderHeaderID AND T_OrderSampleIsActive = 'Y' AND T_OrderSampleReceive = 'N' JOIN t_barcodelab ON T_OrderSampleT_BarcodeLabID = T_BarcodeLabID AND T_BarcodeLabIsActive = 'Y' JOIN t_sampletype ON T_SampleTypeID = T_OrderSampleT_SampleTypeID JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} LEFT JOIN t_ordersamplereq ON T_OrderSampleReqT_OrderHeaderID = T_OrderHeaderID AND T_OrderSampleReqT_OrderSampleID = T_OrderSampleID AND T_OrderSampleReqNat_PositionID = 2 AND T_OrderSampleReqT_SampleStationID = T_SampleStationID AND T_OrderSampleReqIsActive = 'Y' WHERE (T_OrderSampleReceive = 'N' OR T_OrderSampleSampling = 'X') GROUP BY T_BarcodeLabID"; //echo $sql; $rows_all_sample = $this->db_onedev->query($sql)->result(); if ($rows_all_sample) { foreach ($rows_all_sample as $k => $v) { $sql = "UPDATE t_ordersample SET T_OrderSampleSampling = 'Y', T_OrderSampleSamplingDate = CURDATE(), T_OrderSampleSamplingTime = CURTIME(), T_OrderSampleSamplingUserID = {$userid}, T_OrderSampleIsActive = 'Y', T_OrderSampleUserID = {$userid} WHERE T_OrderSampleT_OrderHeaderID = {$orderid} AND T_OrderSampleT_SampleTypeID = {$v->T_SampleTypeID} AND T_OrderSampleT_BarcodeLabID = {$v->T_BarcodeLabID} "; //echo $sql; $this->db_onedev->query($sql); $sql = "INSERT INTO sample_by_step( SampleByStepM_StatusSampleCode, SampleByStepT_OrderHeaderID, SampleByStepT_BarcodeLabID, SampleByStepRequirementStatus, SampleByStepRequirements, SampleByStepUserID, SampleByStepDateTime ) VALUES( 'SAMPLING.Sampling.Sampled', {$orderid}, {$v->T_BarcodeLabID}, 'Y', '[]', {$userid}, NOW() )"; $this->db_onedev->query($sql); //echo $sql; } //$this->broadcast("specimen-col-process"); } } $isdone = "X"; if ($act == 'samplingdone') { $sql = "UPDATE t_ordersample SET T_OrderSampleReceiveDate = CURDATE(), T_OrderSampleReceiveTime = CURTIME(), T_OrderSampleReceiveUserID = {$userid}, T_OrderSampleReceive = 'Y', T_OrderSampleIsActive = 'Y', T_OrderSampleUserID = {$userid} WHERE T_OrderSampleT_OrderHeaderID = {$orderid} AND T_OrderSampleT_SampleTypeID = {$sampletypeid} AND T_OrderSampleT_BarcodeLabID = {$barcodelabid}"; $this->db_onedev->query($sql); //echo $sql; $sql = "SELECT * FROM t_ordersample WHERE T_OrderSampleT_BarcodeLabID = {$barcodelabid} AND T_OrderSampleIsActive = 'Y' ORDER BY T_OrderSampleID DESC LIMIT 1"; $dt_sampleorder = $this->db_onedev->query($sql)->row(); $sql = "SELECT * FROM t_sampletype WHERE T_SampleTypeID = {$sampletypeid}"; $dt_sampletype = $this->db_onedev->query($sql)->row(); $xreq = $requirements; $arr_requirements = array(); foreach ($xreq as $k => $v) { if ($v['chex'] == 'Y') array_push($arr_requirements, $v['id']); } $requirements = '[' . join(',', $arr_requirements) . ']'; $sql = "INSERT INTO t_ordersamplereq( T_OrderSampleReqT_OrderHeaderID, T_OrderSampleReqT_SampleStationID, T_OrderSampleReqT_OrderSampleID, T_OrderSampleReqNat_PositionID, T_OrderSampleReqStatus, T_OrderSampleReqs, T_OrderSampleReqUserID, T_OrderSampleReqCreated ) VALUES( {$orderid}, {$stationid}, {$prm['sample']['T_OrderSampleID']}, {$prm['sample']['requirements'][0]['positionid']}, '{$prm['sample']['requirement_status']}', '{$requirements}', {$userid}, NOW() )ON DUPLICATE KEY UPDATE T_OrderSampleReqStatus = '{$prm['sample']['requirement_status']}', T_OrderSampleReqs = '{$requirements}', T_OrderSampleReqUserID = {$userid}"; //echo $sql; $this->db_onedev->query($sql); $sql = "INSERT INTO sample_by_step( SampleByStepM_StatusSampleCode, SampleByStepT_OrderHeaderID, SampleByStepT_BarcodeLabID, SampleByStepRequirementStatus, SampleByStepRequirements, SampleByStepUserID, SampleByStepDateTime ) VALUES( 'SAMPLING.Sampling.Received', {$orderid}, {$barcodelabid}, '{$prm['sample']['requirement_status']}', '{$requirements}', {$userid}, NOW() )"; $this->db_onedev->query($sql); //echo $sql; $sql = "SELECT COUNT(*) as xcount FROM t_ordersample JOIN t_orderheader ON T_OrderSampleT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderID = {$orderid} JOIN t_sampletype ON T_OrderSampleT_SampleTypeID = T_SampleTypeID JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} WHERE T_OrderSampleIsActive = 'Y' AND T_OrderSampleReceive = 'N'"; $xcount = $this->db_onedev->query($sql)->row()->xcount; $rst_data = array('status' => 'PARTIAL', 'isdone' => "N"); $isdone = "N"; if ($xcount == 0) { $isdone = "Y"; $next_status = 5; $rst_data = array('status' => 'OK', 'isdone' => "Y"); } //$this->broadcast("specimen-col-receive"); } if ($act !== 'samplingprocess' && $status_call['status'] == 'OK') { $dt_json = json_encode(array('T_SampleStationID' => $stationid, 'T_OrderHeaderID' => $orderid, 'T_SamplingQueueStatusID' => $next_status)); $query = "INSERT INTO one_log.log_sampling_queue (Log_SamplingQueueDate,Log_SamplingQueueJSON,Log_SamplingQueueUserID) VALUES(NOW(),'{$dt_json}',{$userid})"; //echo $query; //$rows = $this->db_onedev->query($query); $sql = "SELECT * FROM t_sampling_queue_last_status WHERE T_SamplingQueueLastStatusT_SampleStationID = {$stationid} AND T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND T_SamplingQueueLastStatusIsActive = 'Y'"; //echo $sql; $data_last = $this->db_onedev->query($sql)->row(); $query = "INSERT INTO t_sampling_queue_last_status ( T_SamplingQueueLastStatusT_SampleStationID, T_SamplingQueueLastStatusT_OrderHeaderID, T_SamplingQueueLastStatusT_SamplingQueueStatusID, T_SamplingQueueLastStatusUserID) VALUES( {$stationid}, {$orderid}, {$next_status}, {$userid}) ON DUPLICATE KEY UPDATE T_SamplingQueueLastStatusT_SamplingQueueStatusID = {$next_status}, T_SamplingQueueLastStatusUserID = {$userid}"; //echo $query; $rows = $this->db_onedev->query($query); } if ($status_call['status'] == 'NOTCALL') { $rst_data = $status_call; } if ($act == 'skip' || $status_call['status'] == 'NOTCALL') { $skip_time = date('Y-m-d H:i:s', strtotime($prm['skiptime']) + 10); $sql = "UPDATE antrian_samplestation SET AntrianSampleStationIsActive = 'N' WHERE AntrianSampleStationT_OrderLocationID = ?"; //$query = $this->db_onedev->query($sql,array($prm['orderlocationid'])); /* start dipaggil 3 kali skpi ururtan jd ke bawah */ /*$sql = "SELECT COUNT(*) as x_count FROM antrian_samplestation WHERE AntrianSampleStationT_OrderLocationID = ? AND AntrianSampleStationIsActive = 'N' AND DATE(AntrianSampleStationTime) = DATE(NOW())"; $query = $this->db_onedev->query($sql,array($prm['orderlocationid'])); $xcount_skip = $query->row()->x_count; $modby3 = $xcount_skip % 2; if($xcount_skip > 0 && $modby3 == 0){ $skip_time = date('Y-m-d H:i:s', strtotime($prm['last_skiptime'])+1); }*/ /* end dipaggil 3 kali skpi ururtan jd ke bawah */ $sql = "INSERT INTO antrian_samplestation( AntrianSampleStationT_OrderLocationID, AntrianSampleStationTime, AntrianSampleStationUserID, AntrianSampleStationCreated ) VALUES( ?,?,?,NOW() )"; //$query = $this->db_onedev->query($sql,array($prm['orderlocationid'],$skip_time,$userid)); } $result = array( "total" => 1, "records" => $rst_data, "nextstatus" => $next_status, "isdone" => $isdone ); $sql = "SELECT T_OrderHeaderM_BranchID as branchID, T_OrderHeaderMgm_McuID as mcuID FROM t_orderheader WHERE T_OrderHeaderID = $orderid"; $qry = $this->db_onedev->query( $sql ); if (!$qry) { $this->sys_error_db("Error get broadcast data", $this->db_onedev); exit; } $dataBroadcast = $qry->row_array(); if ($act == 'call') { file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/sm.call." . $stationid . "." . $dataBroadcast['mcuID'] . "." . $dataBroadcast['branchID']); } else if ($act == 'process') { file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/sm.process." . $stationid . "." . $dataBroadcast['mcuID'] . "." . $dataBroadcast['branchID']); } else if ($act == 'samplingdone') { file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/sm.done." . $stationid . "." . $dataBroadcast['mcuID'] . "." . $dataBroadcast['branchID']); } else if ($act == 'skip') { file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/sm.skip." . $stationid . "." . $dataBroadcast['mcuID'] . "." . $dataBroadcast['branchID']); } return $result; } function scanbarcode_nonlab() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; $act = "samplingdone"; $statusnextid = 3; $stationid = $prm['station']['id']; $locationid = $prm['location_id']; $stationtype = $prm['station']['isnonlab']; $orderid = $prm['patient']['xid']; $sql = "SELECT T_OrderDetailID, T_OrderHeaderID,T_OrderDetailID as id, IFNULL(T_SamplingSoID,0) as T_BarcodeLabID, T_TestName as T_BarcodeLabBarcode, T_OrderDetailT_TestCode, T_OrderDetailT_TestName, T_TestID as test_id, T_SampleTypeName, T_BahanName, IFNULL(T_SamplingSoID,0) as T_SamplingSoID, IF(ISNULL(T_SamplingSoID),'N',T_SamplingSoFlag) as status, IF(ISNULL(T_SamplingSoProcessDate),'00-00-0000',DATE_FORMAT(T_SamplingSoProcessDate,'%d-%m-%Y')) as process_date, IF(ISNULL(T_SamplingSoProcessTime),'00:00',DATE_FORMAT(T_SamplingSoProcessTime,'%H:%i')) as process_time, IF(ISNULL(T_SamplingSoDoneDate) OR T_SamplingSoFlag = 'P','00-00-0000',DATE_FORMAT(T_SamplingSoDoneDate,'%d-%m-%Y')) as done_date, IF(ISNULL(T_SamplingSoDoneTime) OR T_SamplingSoFlag = 'P','00:00',DATE_FORMAT(T_SamplingSoDoneTime,'%H:%i')) as done_time, 'Y' as requirement_status, '' as requirements FROM t_orderheader JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderHeaderLabNumber = '{$prm['barcode']}' AND T_OrderHeaderIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' 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_SampleStationID = {$stationid} JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND T_OrderLocationT_SampleStationID = T_SampleStationID AND T_OrderLocationIsActive = 'Y' AND T_OrderLocationM_LocationID = {$locationid} LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestID AND T_SamplingSoIsActive = 'Y' GROUP BY T_TestID "; //echo $sql; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso"); exit; } $ordersamples = $query->result_array(); //echo $this->db_onedev->last_query(); if ($ordersamples) { foreach ($ordersamples as $key => $ordersample) { //print_r($ordersample); /*if (intval($ordersample['T_SamplingSoID']) > 0) { if (intval($stationid) == 17) { $sql = "SELECT COUNT(*) as count, IFNULL(T_SamplingAdditionalFisikBBTBID,0) as id FROM t_samplingso_additional_fisik_bbtb WHERE T_SamplingAdditionalFisikBBTBT_OrderHeaderID = {$orderid}"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso count"); exit; } $data_exist_bbtb = $query->row_array(); if (intval($data_exist_bbtb['count']) == 0) { $sql = "INSERT INTO t_samplingso_additional_fisik_bbtb ( T_SamplingAdditionalFisikBBTBT_OrderHeaderID, T_SamplingAdditionalFisikBBTBValueBB, T_SamplingAdditionalFisikBBTBValueTB, T_SamplingAdditionalFisikBBTBCreated, T_SamplingAdditionalFisikBBTBCreatedUserID ) VALUES( {$orderid}, {$prm['value_bb']}, {$prm['value_tb']}, NOW(), {$userid} )"; $query = $this->db_onedev->query($sql); if (!$query) { echo $this->db_onedev->last_query(); $this->sys_error_db("t_samplingso_additional_fisik_bbtb insert"); exit; } } else { $sql = "UPDATE t_samplingso_additional_fisik_bbtb SET T_SamplingAdditionalFisikBBTBT_OrderHeaderID = {$orderid}, T_SamplingAdditionalFisikBBTBValueBB = {$prm['value_bb']}, T_SamplingAdditionalFisikBBTBValueTB = {$prm['value_tb']}, T_SamplingAdditionalFisikBBTBLastUpdated = NOW(), T_SamplingAdditionalFisikBBTBLastUpdatedUserID = {$userid} WHERE T_SamplingAdditionalFisikBBTBID = {$data_exist_bbtb['id']} "; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso_additional_fisik_bbtb update"); exit; } } } if (intval($stationid) == 35) { $sql = "SELECT COUNT(*) as count, IFNULL(T_SamplingAdditionalFisikBBTBID,0) as id FROM t_samplingso_additional_fisik_bbtb WHERE T_SamplingAdditionalFisikBBTBT_OrderHeaderID = {$orderid}"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso count"); exit; } $data_exist_bbtb = $query->row_array(); if (intval($data_exist_bbtb['count']) == 0) { $sql = "INSERT INTO t_samplingso_additional_fisik_bbtb ( T_SamplingAdditionalFisikBBTBT_OrderHeaderID, T_SamplingAdditionalFisikBBTBBodyFat, T_SamplingAdditionalFisikBBTBCreated, T_SamplingAdditionalFisikBBTBCreatedUserID ) VALUES( {$orderid}, {$prm['value_bf']}, NOW(), {$userid} )"; $query = $this->db_onedev->query($sql); if (!$query) { echo $this->db_onedev->last_query(); $this->sys_error_db("t_samplingso_additional_fisik_bbtb insert"); exit; } } else { $sql = "UPDATE t_samplingso_additional_fisik_bbtb SET T_SamplingAdditionalFisikBBTBT_OrderHeaderID = {$orderid}, T_SamplingAdditionalFisikBBTBBodyFat = {$prm['value_bf']}, T_SamplingAdditionalFisikBBTBLastUpdated = NOW(), T_SamplingAdditionalFisikBBTBLastUpdatedUserID = {$userid} WHERE T_SamplingAdditionalFisikBBTBID = {$data_exist_bbtb['id']} "; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso_additional_fisik_bbtb update"); exit; } } } if (intval($stationid) == 33) { $withCorection = $prm['withCorection']; $visusAdd = $prm['visusAdd']; $odSph = $prm['odSph']; $odCyl = $prm['odCyl']; $odX = $prm['odX']; $osSph = $prm['osSph']; $osCyl = $prm['osCyl']; $osX = $prm['osX']; $colorBlindNumber = $prm['colorBlindNumber']; $btwrn = $prm['btwrn']; if ($withCorection == 'N') { $odSph = ''; $odCyl = ''; $odX = ''; $osSph = ''; $osCyl = ''; $osX = ''; } if ($btwrn == 'N') { $colorBlindNumber = ''; } $sql = "SELECT COUNT(*) as count, IFNULL(T_SamplingAdditionalFisikVisusID,0) as id FROM t_samplingso_additional_fisik_visus WHERE T_SamplingAdditionalFisikVisusT_OrderHeaderID = {$orderid}"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso count"); exit; } $data_exist_visus = $query->row_array(); if (intval($data_exist_visus['count']) == 0) { $sql = "INSERT INTO t_samplingso_additional_fisik_visus ( T_SamplingAdditionalFisikVisusT_OrderHeaderID, T_SamplingAdditionalFisikVisusTKODV, T_SamplingAdditionalFisikVisusTKOSV, T_SamplingAdditionalFisikVisusDKODV, T_SamplingAdditionalFisikVisusDKOSV, T_SamplingAdditionalFisikVisusODSPH, T_SamplingAdditionalFisikVisusODCYL, T_SamplingAdditionalFisikVisusODX, T_SamplingAdditionalFisikVisusOSSPH, T_SamplingAdditionalFisikVisusOSCYL, T_SamplingAdditionalFisikVisusOSX, T_SamplingAdditionalFisikVisusADD, T_SamplingAdditionalFisikVisusCreated, T_SamplingAdditionalFisikVisusCreatedUserID ) VALUES( {$orderid}, '{$prm['tkod']}', '{$prm['tkos']}', '{$prm['dkod']}', '{$prm['dkos']}', '{$odSph}', '{$odCyl}', '{$odX}', '{$osSph}', '{$osCyl}', '{$osX}', '{$visusAdd}', NOW(), {$userid} )"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso_additional_fisik_visus insert"); exit; } } else { $sql = "UPDATE t_samplingso_additional_fisik_visus SET T_SamplingAdditionalFisikVisusT_OrderHeaderID = {$orderid}, T_SamplingAdditionalFisikVisusTKODV = '{$prm['tkod']}', T_SamplingAdditionalFisikVisusTKOSV = '{$prm['tkos']}', T_SamplingAdditionalFisikVisusDKODV = '{$prm['dkod']}', T_SamplingAdditionalFisikVisusDKOSV = '{$prm['dkos']}', T_SamplingAdditionalFisikVisusODSPH = '{$odSph}', T_SamplingAdditionalFisikVisusODCYL = '{$odCyl}', T_SamplingAdditionalFisikVisusODX = '{$odX}', T_SamplingAdditionalFisikVisusOSSPH = '{$osSph}', T_SamplingAdditionalFisikVisusOSCYL = '{$osCyl}', T_SamplingAdditionalFisikVisusOSX = '{$osX}', T_SamplingAdditionalFisikVisusADD = '{$visusAdd}', T_SamplingAdditionalFisikVisusLastUpdated = NOW(), T_SamplingAdditionalFisikVisusLastUpdatedUserID = {$userid} WHERE T_SamplingAdditionalFisikVisusID = {$data_exist_visus['id']} "; $query = $this->db_onedev->query($sql); if (!$query) { // print_r($this->db_onedev->last_query()); $this->sys_error_db("t_samplingso_additional_fisik_visus update"); exit; } } //Buta warna $sql = "SELECT COUNT(*) as count, IFNULL(T_SamplingAdditionalFisikBWID,0) as id FROM t_samplingso_additional_fisik_bw WHERE T_SamplingAdditionalFisikBWT_OrderHeaderID = {$orderid}"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso count"); exit; } $dataExistBtWrn = $query->row_array(); if (intval($dataExistBtWrn['count']) == 0) { $sql = "INSERT INTO t_samplingso_additional_fisik_bw ( T_SamplingAdditionalFisikBWT_OrderHeaderID, T_SamplingAdditionalFisikBWPWValue, T_SamplingAdditionalFisikBWPWVAngka, T_SamplingAdditionalFisikBWCreated, T_SamplingAdditionalFisikBWCreatedUserID ) VALUES( {$orderid}, '{$btwrn}', '{$colorBlindNumber}', NOW(), {$userid} )"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso_additional_fisik_bw insert"); exit; } } else { $sql = "UPDATE t_samplingso_additional_fisik_bw SET T_SamplingAdditionalFisikBWT_OrderHeaderID = {$orderid}, T_SamplingAdditionalFisikBWPWValue = '{$btwrn}', T_SamplingAdditionalFisikBWPWVAngka = '{$colorBlindNumber}', T_SamplingAdditionalFisikBWLastUpdated = NOW(), T_SamplingAdditionalFisikBWLastUpdatedUserID = {$userid} WHERE T_SamplingAdditionalFisikBWID = {$dataExistBtWrn['id']} "; $query = $this->db_onedev->query($sql); if (!$query) { // print_r($this->db_onedev->last_query()); $this->sys_error_db("t_samplingso_additional_fisik_bw update"); exit; } } } }*/ $sampletypeid = $ordersample['test_id']; $barcodelabid = 0; $requirements = []; $doaction_call = $this->doaction_nonlab($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid); } $result = array( "status_log" => "Y", "order_id" => $orderid, "isdone" => "Y" ); $this->sys_ok($result); exit; } else { $result = array( "status_log" => "N", "order_id" => $orderid ); $this->sys_ok($result); exit; } } function scanbarcode_additional_fisik() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; $act = "samplingdone"; $statusnextid = 3; $stationid = $prm['station']['id']; $stationtype = $prm['station']['isnonlab']; $orderid = $prm['patient']['xid']; $sql = "SELECT T_OrderDetailID, T_OrderHeaderID,T_OrderDetailID as id, IFNULL(T_SamplingSoID,0) as T_BarcodeLabID, T_TestAdditionalFisikName as T_BarcodeLabBarcode, T_TestAdditionalFisikCode as T_OrderDetailT_TestCode, T_TestAdditionalFisikName as T_OrderDetailT_TestName, T_TestAdditionalFisikID as test_id, T_TestAdditionalFisikName as T_SampleTypeName, T_TestAdditionalFisikName as T_BahanName, IFNULL(T_SamplingSoID,0) as T_SamplingSoID, IF(ISNULL(T_SamplingSoID),'N',T_SamplingSoFlag) as status, IF(ISNULL(T_SamplingSoProcessDate),'00-00-0000',DATE_FORMAT(T_SamplingSoProcessDate,'%d-%m-%Y')) as process_date, IF(ISNULL(T_SamplingSoProcessTime),'00:00',DATE_FORMAT(T_SamplingSoProcessTime,'%H:%i')) as process_time, IF(ISNULL(T_SamplingSoDoneDate) OR T_SamplingSoFlag = 'P','00-00-0000',DATE_FORMAT(T_SamplingSoDoneDate,'%d-%m-%Y')) as done_date, IF(ISNULL(T_SamplingSoDoneTime) OR T_SamplingSoFlag = 'P','00:00',DATE_FORMAT(T_SamplingSoDoneTime,'%H:%i')) as done_time, 'Y' as requirement_status, '' as requirements FROM t_orderheader JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderLabNumber = '{$prm['barcode']}' AND T_OrderHeaderIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN nat_testfisik ON T_TestNat_TestID = Nat_TestFisikNat_TestID AND Nat_TestFisikIsActive = 'Y' JOIN t_testadditionalfisik ON Nat_TestFisikT_TestAdditionalFisikID = T_TestAdditionalFisikID AND T_TestAdditionalFisikIsActive = 'Y' JOIN t_samplestation ON T_TestAdditionalFisikT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} LEFT JOIN t_samplingso_additional_fisik ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestAdditionalFisikID AND T_SamplingSoIsActive = 'Y' GROUP BY T_TestAdditionalFisikID "; //echo $sql; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso"); exit; } $ordersamples = $query->result_array(); //echo $this->db_onedev->last_query(); if ($ordersamples) { foreach ($ordersamples as $key => $ordersample) { if (intval($ordersample['T_SamplingSoID']) > 0) { if (intval($stationid) == 17) { $sql = "SELECT COUNT(*) as count, IFNULL(T_SamplingAdditionalFisikBBTBID,0) as id FROM t_samplingso_additional_fisik_bbtb WHERE T_SamplingAdditionalFisikBBTBT_SamplingSoID = {$ordersample['T_SamplingSoID']}"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso count"); exit; } $data_exist_bbtb = $query->row_array(); if (intval($data_exist_bbtb['count']) == 0) { $sql = "INSERT INTO t_samplingso_additional_fisik_bbtb ( T_SamplingAdditionalFisikBBTBT_SamplingSoID, T_SamplingAdditionalFisikBBTBValueBB, T_SamplingAdditionalFisikBBTBValueTB, T_SamplingAdditionalFisikBBTBCreated, T_SamplingAdditionalFisikBBTBCreatedUserID ) VALUES( {$ordersample['T_SamplingSoID']}, {$prm['value_bb']}, {$prm['value_tb']}, NOW(), {$userid} )"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso_additional_fisik_bbtb insert"); exit; } } else { $sql = "UPDATE t_samplingso_additional_fisik_bbtb SET T_SamplingAdditionalFisikBBTBT_SamplingSoID = {$ordersample['T_SamplingSoID']}, T_SamplingAdditionalFisikBBTBValueBB = {$prm['value_bb']}, T_SamplingAdditionalFisikBBTBValueTB = {$prm['value_tb']}, T_SamplingAdditionalFisikBBTBLastUpdated = NOW(), T_SamplingAdditionalFisikBBTBLastUpdatedUserID = {$userid} WHERE T_SamplingAdditionalFisikBBTBID = {$data_exist_bbtb['id']} "; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso_additional_fisik_bbtb update"); exit; } } } if (intval($stationid) == 33) { $sql = "SELECT COUNT(*) as count, IFNULL(T_SamplingAdditionalFisikVBWID,0) as id FROM t_samplingso_additional_fisik_vbw WHERE T_SamplingAdditionalFisikVBWT_SamplingSoID = {$ordersample['T_SamplingSoID']}"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso vbw count"); exit; } $data_exist_vbw = $query->row_array(); if (intval($data_exist_vbw['count']) == 0) { $sql = "INSERT INTO t_samplingso_additional_fisik_vbw ( T_SamplingAdditionalFisikVBWT_SamplingSoID, T_SamplingAdditionalFisikVBWTKODV, T_SamplingAdditionalFisikVBWTKOSV, T_SamplingAdditionalFisikVBWDKODV, T_SamplingAdditionalFisikVBWDKOSV, T_SamplingAdditionalFisikVBWPWValue, T_SamplingAdditionalFisikVBWCreated, T_SamplingAdditionalFisikVBWCreatedUserID ) VALUES( {$ordersample['T_SamplingSoID']}, '{$prm['tkod']}', '{$prm['tkos']}', '{$prm['dkod']}', '{$prm['dkos']}', '{$prm['btwrn']}', NOW(), {$userid} )"; $query = $this->db_onedev->query($sql); if (!$query) { //echo $this->db_onedev->last_query(); $this->sys_error_db("t_samplingso_additional_fisik_vbw insert"); exit; } } else { $sql = "UPDATE t_samplingso_additional_fisik_vbw SET T_SamplingAdditionalFisikVBWT_SamplingSoID = {$ordersample['T_SamplingSoID']}, T_SamplingAdditionalFisikVBWTKODV = '{$prm['tkod']}', T_SamplingAdditionalFisikVBWTKOSV = '{$prm['tkos']}', T_SamplingAdditionalFisikVBWDKODV = '{$prm['dkod']}', T_SamplingAdditionalFisikVBWDKOSV = '{$prm['dkos']}', T_SamplingAdditionalFisikVBWPWValue = '{$prm['btwrn']}', T_SamplingAdditionalFisikVBWLastUpdated = NOW(), T_SamplingAdditionalFisikVBWLastUpdatedUserID = {$userid} WHERE T_SamplingAdditionalFisikVBWID = {$data_exist_vbw['id']} "; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("t_samplingso_additional_fisik_bbtb update"); exit; } } } } //print_r($ordersample); $sampletypeid = $ordersample['test_id']; $barcodelabid = 0; $requirements = []; $doaction_call = $this->doaction_additional_fisik($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid); } $result = array( "status_log" => "Y", "order_id" => $orderid, "isdone" => "Y" ); $this->sys_ok($result); exit; } else { $result = array( "status_log" => "N", "order_id" => $orderid ); $this->sys_ok($result); exit; } } function doaction_nonlab($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid) { $rst_data = array('status' => 'OK'); $status_call = array('status' => 'OK', 'data' => array()); //echo $stationid; //echo $orderid; $sql = "SELECT '' AS queueNumber , M_LocationID AS locationID, M_LocationName AS locationName FROM t_orderheader JOIN t_order_location ON T_OrderHeaderID = T_OrderLocationT_OrderHeaderID JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND T_OrderLocationT_SampleStationID = ? WHERE T_OrderHeaderID=?"; $location = $this->db_onedev->query($sql, array($stationid, $orderid))->row_array(); $locationID = $location['locationID']; $locationName = $location['locationName']; $queueNumber = $location['queueNumber']; $splitedLocationName = explode(" ", $locationName); $locationName = $splitedLocationName[0]; if ($act == 'call') { $sql = "SELECT T_SamplingQueueLastStatusID, T_SamplingQueueStatusName, T_SampleStationName, T_SampleStationID, T_SampleStationIsNonLab FROM t_sampling_queue_last_status JOIN t_sampling_queue_status ON T_SamplingQueueLastStatusT_SamplingQueueStatusID = T_SamplingQueueStatusID JOIN t_samplestation ON T_SampleStationID = T_SamplingQueueLastStatusT_SampleStationID WHERE T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND T_SamplingQueueLastStatusT_SampleStationID <> {$stationid} AND T_SamplingQueueLastStatusT_SamplingQueueStatusID IN (1,3) LIMIT 1"; //echo $sql; $data_status_call = $this->db_onedev->query($sql)->row_array(); if ($data_status_call) { $status_call = array('status' => 'NOTCALL', 'data' => $data_status_call); $check_valid = false; $sql = "SELECT SUM(countx) as xcount FROM ( SELECT COUNT(*) as countx FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' AND T_OrderDetailT_OrderHeaderID = {$orderid} AND T_OrderDetailIsActive = 'Y' 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_SampleStationID = {$data_status_call['T_SampleStationID']} LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_SamplingSoT_TestID = T_TestID AND T_SamplingSoIsActive = 'Y' WHERE ISNULL(T_SamplingSoDoneDate) ) x"; $not_sampled = $this->db_onedev->query($sql)->row_array(); if (intval($not_sampled['xcount']) == 0) { $sql = "UPDATE t_sampling_queue_last_status SET T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5 WHERE T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND T_SamplingQueueLastStatusT_SampleStationID = {$data_status_call['T_SampleStationID']}"; $this->db_onedev->query($sql); $status_call = array('status' => 'OK', 'data' => array()); } } } $next_status = $statusnextid; if ($act == 'process') { $sql = "SELECT T_OrderHeaderID, T_OrderDetailID as id, T_OrderDetailT_TestCode, T_OrderDetailT_TestName, T_TestID as test_id, IFNULL(T_SamplingSoID,0) as samplingso_id, T_BahanName FROM t_orderheader JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' 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_SampleStationID = {$stationid} LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestID AND T_SamplingSoIsActive = 'Y' WHERE (ISNULL(T_SamplingSoFlag) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X') GROUP BY T_TestID"; /*$sql = "SELECT T_OrderDetailID, T_OrderHeaderID,T_OrderDetailID as id, 0 T_BarcodeLabID, '' T_BarcodeLabBarcode, T_OrderDetailT_TestCode, T_OrderDetailT_TestName, T_TestID, T_SampleTypeID, T_SampleTypeName, T_BahanName FROM t_orderheader JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoIsActive = 'Y' AND T_SamplingSoFlag = 'N' JOIN t_sampletype ON T_SampleTypeID = T_SamplingSoT_TestID JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} WHERE T_OrderHeaderID = {$orderid} AND (T_SamplingSoFlag = 'N' OR T_SamplingSoFlag = 'X') AND T_OrderHeaderIsActive = 'Y' GROUP BY T_TestID";*/ //echo $sql; $rows_all_sample = $this->db_onedev->query($sql)->result(); if ($rows_all_sample) { foreach ($rows_all_sample as $k => $v) { /*$sql = "UPDATE t_samplingso SET T_SamplingSoFlag = 'P', T_SamplingSoFlagDate = CURDATE(), T_SamplingSoFlagTime = CURTIME(), T_SamplingSoFlagUserID = {$userid}, T_SamplingSoIsActive = 'Y', T_SamplingSoUserID = {$userid} WHERE T_SamplingSoT_OrderHeaderID = {$orderid} AND T_SamplingSoT_TestID = {$v->T_TestID} "; //echo $sql; $this->db_onedev->query($sql);*/ if ($v->samplingso_id == 0) { $sql = "SELECT T_SamplingSoID FROM t_samplingso WHERE T_SamplingSoT_OrderHeaderID = {$orderid} AND T_SamplingSoT_TestID = {$v->test_id} AND T_SamplingSoIsActive = 'Y'"; $query = $this->db_onedev->query($sql); $check_exist = $query->result_array(); if (count($check_exist) > 0) { $sql = "UPDATE t_samplingso SET T_SamplingSoProcessDate = CURDATE(), T_SamplingSoProcessTime = CURTIME(), T_SamplingSoFlag = 'P', T_SamplingSoIsActive = 'Y', T_SamplingSoProcessUserID = {$userid}, T_SamplingSoLastUpdatedUserID = {$userid}, T_SamplingSoLastUpdated = NOW() WHERE T_SamplingSoID = {$check_exist[0]['T_SamplingSoID']}"; } else { $sql = "INSERT INTO t_samplingso ( T_SamplingSoT_SampleStationID, T_SamplingSoT_OrderHeaderID, T_SamplingSoT_TestID, T_SamplingSoProcessDate, T_SamplingSoProcessTime, T_SamplingSoProcessUserID, T_SamplingSoCreated, T_SamplingSoCreatedUserID ) VALUES( {$stationid}, {$orderid}, {$v->test_id}, CURDATE(), CURTIME(), {$userid}, NOW(), {$userid} ) "; //echo $sql; } } else { $sql = "UPDATE t_samplingso SET T_SamplingSoProcessDate = CURDATE(), T_SamplingSoProcessTime = CURTIME(), T_SamplingSoFlag = 'P', T_SamplingSoIsActive = 'Y', T_SamplingSoProcessUserID = {$userid}, T_SamplingSoLastUpdatedUserID = {$userid}, T_SamplingSoLastUpdated = NOW() WHERE T_SamplingSoID = {$v->samplingso_id}"; //echo $sql; } $this->db_onedev->query($sql); } //$this->broadcast("specimen-col-process"); } } $isdone = "X"; if ($act == 'samplingdone') { // echo "insert samplingdone"; $sql = "UPDATE t_samplingso SET T_SamplingSoDoneDate = CURDATE(), T_SamplingSoDoneTime = CURTIME(), T_SamplingSoDoneUserID = {$userid}, T_SamplingSoFlag = 'D', T_SamplingSoIsActive = 'Y', T_SamplingSoLastUpdatedUserID = {$userid}, T_SamplingSoLastUpdated = NOW() WHERE T_SamplingSoT_OrderHeaderID = {$orderid} AND T_SamplingSoT_TestID = {$sampletypeid}"; $this->db_onedev->query($sql); //echo $sql; $sql = "SELECT T_SamplingSoID FROM t_samplingso WHERE T_SamplingSoT_OrderHeaderID ={$orderid} AND T_SamplingSoT_TestID = {$sampletypeid} AND T_SamplingSoIsActive = 'Y'"; $query = $this->db_onedev->query($sql); if (!$query) { $message = $this->db_onedev->error(); $message['qry'] = $this->db_onedev->last_query(); $message['asl'] = "get sampling so error"; $this->sys_error($message); exit; } $samplingso = $query->result(); //print_r($samplingso); //echo $samplingso[0]->T_SamplingSoID; // print_r($samplingso['T_SamplingSoID']); //print_r($samplingso); //echo $samplingso->T_SamplingSOID; $insert_so = $this->nonlabtemplate->generate($samplingso[0]->T_SamplingSoID); // if (!$insert_so) { // $message = $this->db_onedev->error(); // $message['qry'] = $this->db_onedev->last_query(); // $message['inserts0'] = $insert_so; // $this->sys_error($message); // exit; // } // print_r($insert_so); $sql = "SELECT t_sampletype.* FROM t_test JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID WHERE T_TestID = {$sampletypeid}"; $dt_sampletype = $this->db_onedev->query($sql)->row(); $xreq = $requirements; $arr_requirements = array(); foreach ($xreq as $k => $v) { if ($v['chex'] == 'Y') array_push($arr_requirements, $v['id']); } $requirements = '[' . join(',', $arr_requirements) . ']'; $sql = "SELECT count(*) as xcount FROM (SELECT * FROM t_orderheader JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoIsActive = 'Y' LEFT JOIN t_sampletype ON T_SampleTypeID = T_SamplingSoT_TestID LEFT JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID LEFT JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} WHERE T_SamplingSoFlag <> 'D' GROUP BY T_TestID ) xx"; //echo $sql; $xcount = $this->db_onedev->query($sql)->row()->xcount; $rst_data = array('status' => 'PARTIAL', 'isdone' => "N"); $isdone = "N"; //echo $this->db_onedev->last_query(); if ($xcount == 0) { $isdone = "Y"; $next_status = 5; $rst_data = array('status' => 'OK', 'isdone' => "Y"); } //$this->broadcast("specimen-col-receive"); } if ($act !== 'samplingprocess' && $status_call['status'] == 'OK') { $dt_json = json_encode(array('T_SampleStationID' => $stationid, 'T_OrderHeaderID' => $orderid, 'T_SamplingQueueStatusID' => $next_status)); $query = "INSERT INTO one_log.log_sampling_queue (Log_SamplingQueueDate,Log_SamplingQueueJSON,Log_SamplingQueueUserID) VALUES(NOW(),'{$dt_json}',{$userid})"; //echo $query; //$rows = $this->db_onedev->query($query); $sql = "SELECT * FROM t_sampling_queue_last_status WHERE T_SamplingQueueLastStatusT_SampleStationID = {$stationid} AND T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND T_SamplingQueueLastStatusIsActive = 'Y'"; //echo $sql; $data_last = $this->db_onedev->query($sql)->row(); $query = "INSERT INTO t_sampling_queue_last_status ( T_SamplingQueueLastStatusT_SampleStationID, T_SamplingQueueLastStatusT_OrderHeaderID, T_SamplingQueueLastStatusT_SamplingQueueStatusID, T_SamplingQueueLastStatusUserID) VALUES( {$stationid}, {$orderid}, {$next_status}, {$userid}) ON DUPLICATE KEY UPDATE T_SamplingQueueLastStatusT_SamplingQueueStatusID = {$next_status}, T_SamplingQueueLastStatusUserID = {$userid}"; //echo $query; $rows = $this->db_onedev->query($query); } if ($status_call['status'] == 'NOTCALL') { $rst_data = $status_call; } if ($act == 'skip' || $status_call['status'] == 'NOTCALL') { $skip_time = date('Y-m-d H:i:s', strtotime($prm['skiptime']) + 10); $sql = "UPDATE antrian_samplestation SET AntrianSampleStationIsActive = 'N' WHERE AntrianSampleStationT_OrderLocationID = ?"; //$query = $this->db_onedev->query($sql,array($prm['orderlocationid'])); /* start dipaggil 3 kali skpi ururtan jd ke bawah */ /*$sql = "SELECT COUNT(*) as x_count FROM antrian_samplestation WHERE AntrianSampleStationT_OrderLocationID = ? AND AntrianSampleStationIsActive = 'N' AND DATE(AntrianSampleStationTime) = DATE(NOW())"; $query = $this->db_onedev->query($sql,array($prm['orderlocationid'])); $xcount_skip = $query->row()->x_count; $modby3 = $xcount_skip % 2; if($xcount_skip > 0 && $modby3 == 0){ $skip_time = date('Y-m-d H:i:s', strtotime($prm['last_skiptime'])+1); }*/ /* end dipaggil 3 kali skpi ururtan jd ke bawah */ $sql = "INSERT INTO antrian_samplestation( AntrianSampleStationT_OrderLocationID, AntrianSampleStationTime, AntrianSampleStationUserID, AntrianSampleStationCreated ) VALUES( ?,?,?,NOW() )"; //$query = $this->db_onedev->query($sql,array($prm['orderlocationid'],$skip_time,$userid)); } $result = array( "total" => 1, "records" => $rst_data, "nextstatus" => $next_status, "isdone" => $isdone ); $sql = "SELECT T_OrderHeaderM_BranchID as branchID, T_OrderHeaderMgm_McuID as mcuID FROM t_orderheader WHERE T_OrderHeaderID = $orderid"; $qry = $this->db_onedev->query( $sql ); if (!$qry) { $this->sys_error_db("Error get broadcast data", $this->db_onedev); exit; } $dataBroadcast = $qry->row_array(); if ($act == 'call') { file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/sm.call." . $stationid . "." . $dataBroadcast['mcuID'] . "." . $dataBroadcast['branchID']); } else if ($act == 'process') { file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/sm.process." . $stationid . "." . $dataBroadcast['mcuID'] . "." . $dataBroadcast['branchID']); } else if ($act == 'samplingdone') { file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/sm.done." . $stationid . "." . $dataBroadcast['mcuID'] . "." . $dataBroadcast['branchID']); } else if ($act == 'skip') { file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/sm.skip." . $stationid . "." . $dataBroadcast['mcuID'] . "." . $dataBroadcast['branchID']); } return $result; } function doaction_additional_fisik($act, $userid, $stationid, $orderid, $sampletypeid, $barcodelabid, $requirements, $statusnextid) { $rst_data = array('status' => 'OK'); $status_call = array('status' => 'OK', 'data' => array()); //echo $stationid; //echo $orderid; $sql = "SELECT '' AS queueNumber , M_LocationID AS locationID, M_LocationName AS locationName FROM t_orderheader JOIN t_order_location ON T_OrderHeaderID = T_OrderLocationT_OrderHeaderID JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND T_OrderLocationT_SampleStationID = ? WHERE T_OrderHeaderID=?"; $location = $this->db_onedev->query($sql, array($stationid, $orderid))->row_array(); $locationID = $location['locationID']; $locationName = $location['locationName']; $queueNumber = $location['queueNumber']; $splitedLocationName = explode(" ", $locationName); $locationName = $splitedLocationName[0]; if ($act == 'call') { $sql = "SELECT T_SamplingQueueLastStatusID, T_SamplingQueueStatusName, T_SampleStationName, T_SampleStationID, T_SampleStationIsNonLab FROM t_sampling_queue_last_status JOIN t_sampling_queue_status ON T_SamplingQueueLastStatusT_SamplingQueueStatusID = T_SamplingQueueStatusID JOIN t_samplestation ON T_SampleStationID = T_SamplingQueueLastStatusT_SampleStationID WHERE T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND T_SamplingQueueLastStatusT_SampleStationID <> {$stationid} AND T_SamplingQueueLastStatusT_SamplingQueueStatusID IN (1,3) LIMIT 1"; //echo $sql; $data_status_call = $this->db_onedev->query($sql)->row_array(); if ($data_status_call) { $status_call = array('status' => 'NOTCALL', 'data' => $data_status_call); $check_valid = false; $sql = "SELECT SUM(countx) as xcount FROM ( SELECT COUNT(*) as countx FROM t_orderdetail JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailT_OrderHeaderID = {$orderid} AND T_OrderDetailIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN nat_testfisik ON T_TestNat_TestID = Nat_TestFisikNat_TestID AND Nat_TestFisikIsActive = 'Y' JOIN t_testadditionalfisik ON Nat_TestFisikT_TestAdditionalFisikID = T_TestAdditionalFisikID AND T_TestAdditionalFisikIsActive = 'Y' JOIN t_samplestation ON T_TestAdditionalFisikT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} LEFT JOIN t_samplingso_additional_fisik ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestAdditionalFisikID AND T_SamplingSoIsActive = 'Y' WHERE ISNULL(T_SamplingSoDoneDate) ) x"; $not_sampled = $this->db_onedev->query($sql)->row_array(); if (intval($not_sampled['xcount']) == 0) { $sql = "UPDATE t_sampling_queue_last_status SET T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5 WHERE T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND T_SamplingQueueLastStatusT_SampleStationID = {$data_status_call['T_SampleStationID']}"; $this->db_onedev->query($sql); $status_call = array('status' => 'OK', 'data' => array()); } } } $next_status = $statusnextid; if ($act == 'process') { $sql = "SELECT T_OrderHeaderID, T_OrderDetailID as id, T_OrderDetailT_TestCode, T_TestAdditionalFisikName as T_OrderDetailT_TestName, T_TestAdditionalFisikID as test_id, IFNULL(T_SamplingSoID,0) as samplingso_id, T_TestAdditionalFisikName as T_BahanName FROM t_orderheader JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN nat_testfisik ON T_TestNat_TestID = Nat_TestFisikNat_TestID AND Nat_TestFisikIsActive = 'Y' JOIN t_testadditionalfisik ON Nat_TestFisikT_TestAdditionalFisikID = T_TestAdditionalFisikID AND T_TestAdditionalFisikIsActive = 'Y' JOIN t_samplestation ON T_TestAdditionalFisikT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} LEFT JOIN t_samplingso_additional_fisik ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestAdditionalFisikID AND T_SamplingSoIsActive = 'Y' WHERE (ISNULL(T_SamplingSoFlag) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X') GROUP BY T_TestID"; //echo $sql; $rows_all_sample = $this->db_onedev->query($sql)->result(); if ($rows_all_sample) { foreach ($rows_all_sample as $k => $v) { if ($v->samplingso_id == 0) { $sql = "INSERT INTO t_samplingso_additional_fisik ( T_SamplingSoT_SampleStationID, T_SamplingSoT_OrderHeaderID, T_SamplingSoT_TestID, T_SamplingSoProcessDate, T_SamplingSoProcessTime, T_SamplingSoProcessUserID, T_SamplingSoCreated, T_SamplingSoCreatedUserID ) VALUES( {$stationid}, {$orderid}, {$v->test_id}, CURDATE(), CURTIME(), {$userid}, NOW(), {$userid} ) "; //echo $sql; } else { $sql = "UPDATE t_samplingso_additional_fisik SET T_SamplingSoProcessDate = CURDATE(), T_SamplingSoProcessTime = CURTIME(), T_SamplingSoFlag = 'P', T_SamplingSoIsActive = 'Y', T_SamplingSoProcessUserID = {$userid}, T_SamplingSoLastUpdatedUserID = {$userid}, T_SamplingSoLastUpdated = NOW() WHERE T_SamplingSoID = {$v->samplingso_id}"; //echo $sql; } $this->db_onedev->query($sql); } //$this->broadcast("specimen-col-process"); } } $isdone = "X"; if ($act == 'samplingdone') { //echo "insert samplingdone"; $sql = "UPDATE t_samplingso_additional_fisik SET T_SamplingSoDoneDate = CURDATE(), T_SamplingSoDoneTime = CURTIME(), T_SamplingSoDoneUserID = {$userid}, T_SamplingSoFlag = 'D', T_SamplingSoIsActive = 'Y', T_SamplingSoLastUpdatedUserID = {$userid}, T_SamplingSoLastUpdated = NOW() WHERE T_SamplingSoT_OrderHeaderID = {$orderid} AND T_SamplingSoT_TestID = {$sampletypeid}"; $this->db_onedev->query($sql); //echo $sql; $sql = "SELECT count(*) as xcount FROM (SELECT * FROM t_orderheader JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' JOIN nat_testfisik ON T_TestNat_TestID = Nat_TestFisikNat_TestID AND Nat_TestFisikIsActive = 'Y' JOIN t_testadditionalfisik ON Nat_TestFisikT_TestAdditionalFisikID = T_TestAdditionalFisikID AND T_TestAdditionalFisikIsActive = 'Y' JOIN t_samplestation ON T_TestAdditionalFisikT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} LEFT JOIN t_samplingso_additional_fisik ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestAdditionalFisikID AND T_SamplingSoIsActive = 'Y' WHERE T_SamplingSoFlag <> 'D' GROUP BY T_TestAdditionalFisikID ) xx"; //echo $sql; $xcount = $this->db_onedev->query($sql)->row()->xcount; $rst_data = array('status' => 'PARTIAL', 'isdone' => "N"); $isdone = "N"; //echo $this->db_onedev->last_query(); if ($xcount == 0) { $isdone = "Y"; $next_status = 5; $rst_data = array('status' => 'OK', 'isdone' => "Y"); } //$this->broadcast("specimen-col-receive"); } if ($act !== 'samplingprocess' && $status_call['status'] == 'OK') { $dt_json = json_encode(array('T_SampleStationID' => $stationid, 'T_OrderHeaderID' => $orderid, 'T_SamplingQueueStatusID' => $next_status)); $query = "INSERT INTO one_log.log_sampling_queue (Log_SamplingQueueDate,Log_SamplingQueueJSON,Log_SamplingQueueUserID) VALUES(NOW(),'{$dt_json}',{$userid})"; //echo $query; //$rows = $this->db_onedev->query($query); $sql = "SELECT * FROM t_sampling_queue_last_status WHERE T_SamplingQueueLastStatusT_SampleStationID = {$stationid} AND T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND T_SamplingQueueLastStatusIsActive = 'Y'"; //echo $sql; $data_last = $this->db_onedev->query($sql)->row(); $query = "INSERT INTO t_sampling_queue_last_status ( T_SamplingQueueLastStatusT_SampleStationID, T_SamplingQueueLastStatusT_OrderHeaderID, T_SamplingQueueLastStatusT_SamplingQueueStatusID, T_SamplingQueueLastStatusUserID) VALUES( {$stationid}, {$orderid}, {$next_status}, {$userid}) ON DUPLICATE KEY UPDATE T_SamplingQueueLastStatusT_SamplingQueueStatusID = {$next_status}, T_SamplingQueueLastStatusUserID = {$userid}"; //echo $query; $rows = $this->db_onedev->query($query); } if ($status_call['status'] == 'NOTCALL') { $rst_data = $status_call; } $result = array( "total" => 1, "records" => $rst_data, "nextstatus" => $next_status, "isdone" => $isdone ); $sql = "SELECT T_OrderHeaderM_BranchID as branchID, T_OrderHeaderMgm_McuID as mcuID FROM t_orderheader WHERE T_OrderHeaderID = $orderid"; $qry = $this->db_onedev->query( $sql ); if (!$qry) { $this->sys_error_db("Error get broadcast data", $this->db_onedev); exit; } $dataBroadcast = $qry->row_array(); if ($act == 'call') { file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/sm.call." . $stationid . "." . $dataBroadcast['mcuID'] . "." . $dataBroadcast['branchID']); } else if ($act == 'process') { file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/sm.process." . $stationid . "." . $dataBroadcast['mcuID'] . "." . $dataBroadcast['branchID']); } else if ($act == 'samplingdone') { file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/sm.done." . $stationid . "." . $dataBroadcast['mcuID'] . "." . $dataBroadcast['branchID']); } else if ($act == 'skip') { file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/sm.skip." . $stationid . "." . $dataBroadcast['mcuID'] . "." . $dataBroadcast['branchID']); } return $result; } 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_PatientPhoto as photo FROM t_orderheader JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID AND 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_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 FROM t_ordersample JOIN t_sampletype ON T_OrderSampleT_SampleTypeID = T_SampleTypeID AND 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 FROM t_orderdetail JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailT_OrderHeaderID = {$prm['order_id']} AND T_OrderDetailIsActive = 'Y' 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 "; //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 FROM t_orderdetail JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailT_OrderHeaderID = {$prm['order_id']} AND T_OrderDetailIsActive = 'Y' 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 "; //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 FROM t_orderdetail JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailT_OrderHeaderID = {$prm['order_id']} AND T_OrderDetailIsActive = 'Y' 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 "; //echo $sql; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("data sample other"); exit; } $data_sample_other = $query->result_array(); $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 : [] ); $this->sys_ok($result); exit; } function saveBBTB() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y'"; $query = $this->db_onedev->query($sql, array($prm['labnumber'])); if (!$query) { $this->sys_error_db("data patient"); exit; } $data_patient = $query->row_array(); if (!$data_patient) { $this->sys_error("data patient not found"); exit; } $userid = $this->sys_user["M_UserID"]; $this->db_onedev->trans_start(); $sql = "UPDATE t_samplingso_additional_fisik_bbtb SET T_SamplingAdditionalFisikBBTBIsActive = 'N', T_SamplingAdditionalFisikBBTBDeleted = NOW(), T_SamplingAdditionalFisikBBTBDeletedUserID = ? WHERE T_SamplingAdditionalFisikBBTBT_OrderHeaderID = ? AND T_SamplingAdditionalFisikBBTBIsActive = 'Y'"; $query = $this->db_onedev->query($sql, array($userid, $data_patient['T_OrderHeaderID'])); if (!$query) { //echo $this->db_onedev->last_query(); $this->db_onedev->trans_rollback(); $this->sys_error_db("error update data sampling so additional fisik bbtb"); exit; } $sql = "INSERT INTO t_samplingso_additional_fisik_bbtb ( T_SamplingAdditionalFisikBBTBT_OrderHeaderID, T_SamplingAdditionalFisikBBTBValueTB, T_SamplingAdditionalFisikBBTBValueBB, T_SamplingAdditionalFisikBBTBCreated, T_SamplingAdditionalFisikBBTBCreatedUserID ) VALUES (?, ?, ?, NOW(), ?)"; $query = $this->db_onedev->query($sql, array($data_patient['T_OrderHeaderID'], $prm['value_tb'], $prm['value_bb'], $userid)); if (!$query) { $this->db_onedev->trans_rollback(); $this->sys_error_db("error insert data sampling so additional fisik bbtb"); exit; } $this->db_onedev->trans_complete(); $sql = "SELECT T_SamplingAdditionalFisikBBTBValueBB as patientBB, T_SamplingAdditionalFisikBBTBValueTB as patientTB, T_SamplingAdditionalFisikBBTBID as bbtbid FROM t_samplingso_additional_fisik_bbtb WHERE T_SamplingAdditionalFisikBBTBT_OrderHeaderID = ? AND T_SamplingAdditionalFisikBBTBIsActive = 'Y' ORDER BY T_SamplingAdditionalFisikBBTBID DESC LIMIT 1"; $query = $this->db_onedev->query($sql, array($data_patient['T_OrderHeaderID'])); if (!$query) { $this->sys_error_db("error select data sampling so additional fisik bbtb"); exit; } $data_bbtb = $query->row_array(); $result = array( "records" => $data_bbtb ); $this->sys_ok($result); exit; } function savePhlebotomy() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y'"; $query = $this->db_onedev->query($sql, array($prm['labnumber'])); if (!$query) { $this->sys_error_db("data patient"); exit; } $data_patient = $query->row_array(); if (!$data_patient) { $this->sys_error("data patient not found"); exit; } $userid = $this->sys_user["M_UserID"]; $this->db_onedev->trans_start(); $sql = "UPDATE order_phlebotomy SET OrderPhlebotomyIsActive = 'N', OrderPhlebotomyDeleted = NOW(), OrderPhlebotomyDeletedUserID = ? WHERE OrderPhlebotomyT_OrderHeaderID = ? AND OrderPhlebotomyIsActive = 'Y'"; $query = $this->db_onedev->query($sql, array($userid, $data_patient['T_OrderHeaderID'])); if (!$query) { //echo $this->db_onedev->last_query(); $this->db_onedev->trans_rollback(); $this->sys_error_db("error update data sampling order phlebotomy"); exit; } foreach ($prm['data'] as $key => $v) { $sql = "INSERT INTO order_phlebotomy( OrderPhlebotomyT_OrderHeaderID, OrderPhlebotomyRequirement, OrderPhlebotomyStatus, OrderPhlebotomyNote, OrderPhlebotomyCreated, OrderPhlebotomyCreatedUserID ) VALUES(?, ?, ?, ?, NOW(), ?)"; $query = $this->db_onedev->query($sql, array( $data_patient['T_OrderHeaderID'], $v['requirement'], $v['status'], $v['note'], $userid )); if (!$query) { $this->db_onedev->trans_rollback(); $this->sys_error_db("error insert data sampling order phlebotomy"); exit; } } $this->db_onedev->trans_complete(); $sql = "SELECT OrderPhlebotomyID, OrderPhlebotomyRequirement, OrderPhlebotomyStatus FROM order_phlebotomy WHERE OrderPhlebotomyT_OrderHeaderID = ? AND OrderPhlebotomyIsActive = 'Y'"; $query = $this->db_onedev->query($sql, array($data_patient['T_OrderHeaderID'])); if (!$query) { $this->sys_error_db("error select data sampling order phlebotomy"); exit; } $data_phlebotomy = $query->result_array(); $result = array( "records" => $data_phlebotomy ); $this->sys_ok($result); exit; } function saveVisusBW() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y'"; $query = $this->db_onedev->query($sql, array($prm['labnumber'])); if (!$query) { $this->sys_error_db("data patient"); exit; } $data_patient = $query->row_array(); if (!$data_patient) { $this->sys_error("data patient not found"); exit; } if ($prm['dkod'] == '' && $prm['dkos'] == '' && $prm['odCyl'] == '' && $prm['odSph'] == '' && $prm['odX'] == '' && $prm['osCyl'] == '' && $prm['osSph'] == '' && $prm['osX'] == '' && $prm['tkod'] == '' && $prm['tkos'] == '') { $this->sys_error("visus data is required"); exit; } if (!isset($prm['btwrn']) || $prm['btwrn'] == '') { $this->sys_error("color blind is required"); exit; } $userid = $this->sys_user["M_UserID"]; $this->db_onedev->trans_start(); $sql = "UPDATE t_samplingso_additional_fisik_bw SET T_SamplingAdditionalFisikBWIsActive = 'N', T_SamplingAdditionalFisikBWDeleted = NOW(), T_SamplingAdditionalFisikBWDeletedUserID = ? WHERE T_SamplingAdditionalFisikBWT_OrderHeaderID = ? AND T_SamplingAdditionalFisikBWIsActive = 'Y'"; $query = $this->db_onedev->query($sql, array($userid, $data_patient['T_OrderHeaderID'])); if (!$query) { $this->db_onedev->trans_rollback(); $this->sys_error_db("error update data sampling so additional fisik bw"); exit; } $angka = isset($prm['colorBlindNumber']) ? $prm['colorBlindNumber'] : ''; $sql = "INSERT INTO t_samplingso_additional_fisik_bw ( T_SamplingAdditionalFisikBWT_OrderHeaderID, T_SamplingAdditionalFisikBWPWValue, T_SamplingAdditionalFisikBWPWVAngka, T_SamplingAdditionalFisikBWCreated, T_SamplingAdditionalFisikBWCreatedUserID ) VALUES (?, ?, ?, NOW(), ?)"; $query = $this->db_onedev->query($sql, array($data_patient['T_OrderHeaderID'], $prm['btwrn'], $angka, $userid)); if (!$query) { //echo $this->db_onedev->last_query(); $this->db_onedev->trans_rollback(); $this->sys_error_db("error insert data sampling so additional fisik bw"); exit; } $sql = "UPDATE t_samplingso_additional_fisik_visus SET T_SamplingAdditionalFisikVisusTKODV = ?, T_SamplingAdditionalFisikVisusTKOSV = ?, T_SamplingAdditionalFisikVisusDKODV = ?, T_SamplingAdditionalFisikVisusDKOSV = ?, T_SamplingAdditionalFisikVisusODSph = ?, T_SamplingAdditionalFisikVisusODCyl = ?, T_SamplingAdditionalFisikVisusODX = ?, T_SamplingAdditionalFisikVisusOSSph = ?, T_SamplingAdditionalFisikVisusOSCyl = ?, T_SamplingAdditionalFisikVisusOSX = ?, T_SamplingAdditionalFisikVisusAdd = ?, T_SamplingAdditionalFisikVisusCreated = NOW(), T_SamplingAdditionalFisikVisusCreatedUserID = ? WHERE T_SamplingAdditionalFisikVisusT_OrderHeaderID = ? AND T_SamplingAdditionalFisikVisusIsActive = 'Y'"; $query = $this->db_onedev->query($sql, array( $prm['tkod'], $prm['tkos'], $prm['dkod'], $prm['dkos'], $prm['odSph'], $prm['odCyl'], $prm['odX'], $prm['osSph'], $prm['osCyl'], $prm['osX'], $prm['visusAdd'], $userid, $data_patient['T_OrderHeaderID'] )); if (!$query) { $this->db_onedev->trans_rollback(); $this->sys_error_db("error update data sampling so additional fisik visus"); exit; } $sql = "INSERT INTO t_samplingso_additional_fisik_visus ( T_SamplingAdditionalFisikVisusT_OrderHeaderID, T_SamplingAdditionalFisikVisusTKODV, T_SamplingAdditionalFisikVisusTKOSV, T_SamplingAdditionalFisikVisusDKODV, T_SamplingAdditionalFisikVisusDKOSV, T_SamplingAdditionalFisikVisusODSph, T_SamplingAdditionalFisikVisusODCyl, T_SamplingAdditionalFisikVisusODX, T_SamplingAdditionalFisikVisusOSSph, T_SamplingAdditionalFisikVisusOSCyl, T_SamplingAdditionalFisikVisusOSX, T_SamplingAdditionalFisikVisusAdd, T_SamplingAdditionalFisikVisusCreated, T_SamplingAdditionalFisikVisusCreatedUserID ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), ?)"; $query = $this->db_onedev->query($sql, array( $data_patient['T_OrderHeaderID'], $prm['tkod'], $prm['tkos'], $prm['dkod'], $prm['dkos'], $prm['odSph'], $prm['odCyl'], $prm['odX'], $prm['osSph'], $prm['osCyl'], $prm['osX'], $prm['visusAdd'], $userid )); if (!$query) { $this->db_onedev->trans_rollback(); //echo $this->db_onedev->last_query(); $this->sys_error_db("error insert data sampling so additional fisik visus"); exit; } $this->db_onedev->trans_complete(); $sql = "SELECT T_SamplingAdditionalFisikVisusTKODV as tkod, T_SamplingAdditionalFisikVisusTKOSV as tkos, T_SamplingAdditionalFisikVisusDKODV as dkod, T_SamplingAdditionalFisikVisusDKOSV as dkos, T_SamplingAdditionalFisikVisusODSph as odSph, T_SamplingAdditionalFisikVisusODCyl as odCyl, T_SamplingAdditionalFisikVisusODX as odX, T_SamplingAdditionalFisikVisusOSSph as osSph, T_SamplingAdditionalFisikVisusOSCyl as osCyl, T_SamplingAdditionalFisikVisusOSX as osX, T_SamplingAdditionalFisikVisusAdd as visusAdd, T_SamplingAdditionalFisikVisusID as visus_id FROM t_samplingso_additional_fisik_visus WHERE T_SamplingAdditionalFisikVisusT_OrderHeaderID = ? AND T_SamplingAdditionalFisikVisusIsActive = 'Y' ORDER BY T_SamplingAdditionalFisikVisusID DESC LIMIT 1"; $query = $this->db_onedev->query($sql, array($data_patient['T_OrderHeaderID'])); if (!$query) { $this->sys_error_db("error select data sampling so additional fisik visus"); exit; } $data_visus = $query->row_array(); $sql = "SELECT T_SamplingAdditionalFisikBWPWValue as btwrn, IFNULL(T_SamplingAdditionalFisikBWPWVAngka,'') as bw_angka, T_SamplingAdditionalFisikBWID as bw_id FROM t_samplingso_additional_fisik_bw WHERE T_SamplingAdditionalFisikBWT_OrderHeaderID = ? AND T_SamplingAdditionalFisikBWIsActive = 'Y' ORDER BY T_SamplingAdditionalFisikBWID DESC LIMIT 1"; $query = $this->db_onedev->query($sql, array($data_patient['T_OrderHeaderID'])); if (!$query) { $this->sys_error_db("error select data sampling so additional fisik bw"); exit; } $data_bw = $query->row_array(); $data_visus['bw_id'] = $data_bw['bw_id']; $data_visus['bw_angka'] = $data_bw['bw_angka']; $data_visus['btwrn'] = $data_bw['btwrn']; $result = array( "records" => $data_visus ); $this->sys_ok($result); exit; } function saveGlucoses() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y'"; $query = $this->db_onedev->query($sql, array($prm['labnumber'])); if (!$query) { $this->sys_error_db("data patient"); exit; } $data_patient = $query->row_array(); $orderid = $data_patient['T_OrderHeaderID']; if (!$data_patient) { $this->sys_error("data patient not found"); exit; } $userid = $this->sys_user["M_UserID"]; $this->db_onedev->trans_start(); $dt_glucoses = $prm['glucoses']; $sql = "UPDATE order_glucose SET OrderGlucoseIsActive = 'N', OrderGlucoseDeleted = NOW(), OrderGlucoseDeletedUserID = ? WHERE OrderGlucoseT_OrderHeaderID = ? AND OrderGlucoseIsActive = 'Y'"; $query = $this->db_onedev->query($sql, array($userid, $data_patient['T_OrderHeaderID'])); //echo $this->db_onedev->last_query(); if (!$query) { $this->sys_error_db("error update data order glucose"); exit; } if ($dt_glucoses && count($dt_glucoses) > 0) { foreach ($dt_glucoses as $key => $value) { $sql = "INSERT INTO order_glucose (OrderGlucoseT_OrderHeaderID,OrderGlucoseNat_TestID,OrderGlucoseResult,OrderGlucoseCreated,OrderGlucoseCreatedUserID) VALUES({$orderid},{$value['nat_testid']},'{$value['result']}',NOW(),{$userid})"; $query = $this->db_onedev->query($sql); //echo $this->db_onedev->last_query(); $sql = "UPDATE t_orderdetail SET T_OrderDetailResult = '{$value['result']}' WHERE T_OrderDetailID = {$value['xid']}"; $query = $this->db_onedev->query($sql); //echo $this->db_onedev->last_query(); } } $query = $this->db_onedev->query($sql, array($prm['result'], $userid, $data_patient['T_OrderHeaderID'])); if (!$query) { $this->sys_error_db("error update data order glucose"); exit; } $this->db_onedev->trans_complete(); $rst_glucoses = []; $sql = "SELECT IFNULL(OrderGlucoseID,0) as order_glucose_id,IFNULL(OrderGlucoseResult,'') as result, T_OrderDetailID as xid, T_OrderDetailT_TestID as test_id, T_OrderDetailT_TestName as test_name, '' as result, T_TestNat_TestID as nat_testid FROM t_orderdetail JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y' AND T_OrderHeaderLabNumber = '{$prm['labnumber']}' JOIN t_test ON T_OrderDetailT_TestID = T_TestID JOIN nat_testglucose ON T_TestNat_TestID = Nat_TestGlucoseNat_TestID AND Nat_TestGlucoseIsActive = 'Y' JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID AND T_BahanT_SampleStationID = {$prm['station_id']} LEFT JOIN order_glucose ON OrderGlucoseT_OrderHeaderID = T_OrderHeaderID AND OrderGlucoseIsActive = 'Y' AND OrderGlucoseNat_TestID = T_TestNat_TestID WHERE T_OrderDetailIsActive = 'Y'"; $query = $this->db_onedev->query($sql); if ($query) { $rst_glucoses = $query->result_array(); } $result = array( "records" => $rst_glucoses ); $this->sys_ok($result); exit; } function getAudiometriQuestionnaire($orderHeaderID, $samplingSoID = 0) { $masterSql = "SELECT M_KuesionerAudiometriID as id, M_KuesionerAudiometriNumber as number, M_KuesionerAudiometriGroupNumber as group_number, M_KuesionerAudiometriGroupName as group_name, M_KuesionerAudiometriQuestion as question, M_KuesionerAudiometriType as type, IFNULL(M_KuesionerAudiometriOptionJson,'') as option_json FROM m_kuesioner_audiometri WHERE M_KuesionerAudiometriIsActive = 'Y' ORDER BY CASE WHEN M_KuesionerAudiometriGroupNumber = 'RKES' THEN 1 WHEN M_KuesionerAudiometriGroupNumber = 'RKEB' THEN 2 WHEN M_KuesionerAudiometriGroupNumber = 'RPEK' THEN 3 ELSE 99 END, M_KuesionerAudiometriID ASC"; $qMaster = $this->db_onedev->query($masterSql); if (!$qMaster) { return array( 'master' => array(), 'answers' => array(), 'is_saved' => 'N' ); } $masters = $qMaster->result_array(); $answerSql = "SELECT T_KuesionerAudiometriM_KuesionerAudiometriID as master_id, T_KuesionerAudiometriValueChoice as value_choice, T_KuesionerAudiometriValueOptionOrder as value_option_order, T_KuesionerAudiometriValueOptionLabel as value_option_label FROM t_kuesioner_audiometri WHERE T_KuesionerAudiometriT_OrderHeaderID = ? AND T_KuesionerAudiometriIsActive = 'Y'"; $params = array($orderHeaderID); if (intval($samplingSoID) > 0) { $answerSql .= " AND T_KuesionerAudiometriT_SamplingSoID = ?"; $params[] = $samplingSoID; } $answerSql .= " ORDER BY T_KuesionerAudiometriID ASC"; $qAnswer = $this->db_onedev->query($answerSql, $params); $answers = array(); if ($qAnswer) { $tmpAnswers = $qAnswer->result_array(); foreach ($tmpAnswers as $row) { $answers[$row['master_id']] = $row; } } return array( 'master' => $masters, 'answers' => $answers, 'is_saved' => count($answers) > 0 ? 'Y' : 'N' ); } function saveAudiometri() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; if (!isset($prm['labnumber']) || $prm['labnumber'] == '') { $this->sys_error("labnumber is required"); exit; } if (!isset($prm['answers']) || !is_array($prm['answers']) || count($prm['answers']) == 0) { $this->sys_error("answers is required"); exit; } $sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql, array($prm['labnumber'])); if (!$query) { $this->sys_error_db("data patient"); exit; } $data_patient = $query->row_array(); if (!$data_patient) { $this->sys_error("data patient not found"); exit; } $orderHeaderID = intval($data_patient['T_OrderHeaderID']); $samplingSoID = isset($prm['samplingso_id']) ? intval($prm['samplingso_id']) : 0; $this->db_onedev->trans_begin(); $sql = "UPDATE t_kuesioner_audiometri SET T_KuesionerAudiometriIsActive = 'N', T_KuesionerAudiometriUserID = ?, T_KuesionerAudiometriLastUpdate = NOW() WHERE T_KuesionerAudiometriT_OrderHeaderID = ? AND T_KuesionerAudiometriIsActive = 'Y'"; $params = array($userid, $orderHeaderID); if ($samplingSoID > 0) { $sql .= " AND T_KuesionerAudiometriT_SamplingSoID = ?"; $params[] = $samplingSoID; } $query = $this->db_onedev->query($sql, $params); if (!$query) { $this->db_onedev->trans_rollback(); $this->sys_error_db("update t_kuesioner_audiometri"); exit; } foreach ($prm['answers'] as $ans) { $masterID = isset($ans['master_id']) ? intval($ans['master_id']) : 0; $type = isset($ans['type']) ? trim($ans['type']) : ''; if ($masterID <= 0) { continue; } $valueChoice = null; $valueOptionOrder = null; $valueOptionLabel = null; if ($type === 'choice') { $tmpChoice = isset($ans['value_choice']) ? trim($ans['value_choice']) : null; if ($tmpChoice === 'Y' || $tmpChoice === 'N') { $valueChoice = $tmpChoice; } } elseif ($type === 'option') { $tmpOptionOrder = isset($ans['value_option_order']) ? trim($ans['value_option_order']) : null; $tmpOptionLabel = isset($ans['value_option_label']) ? trim($ans['value_option_label']) : null; $valueOptionOrder = ($tmpOptionOrder !== '') ? $tmpOptionOrder : null; $valueOptionLabel = ($tmpOptionLabel !== '') ? $tmpOptionLabel : null; } $sql = "INSERT INTO t_kuesioner_audiometri ( T_KuesionerAudiometriM_KuesionerAudiometriID, T_KuesionerAudiometriT_OrderHeaderID, T_KuesionerAudiometriT_SamplingSoID, T_KuesionerAudiometriValueChoice, T_KuesionerAudiometriValueOptionOrder, T_KuesionerAudiometriValueOptionLabel, T_KuesionerAudiometriIsActive, T_KuesionerAudiometriUserID, T_KuesionerAudiometriCreated, T_KuesionerAudiometriLastUpdate ) VALUES (?, ?, ?, ?, ?, ?, 'Y', ?, NOW(), NOW())"; $query = $this->db_onedev->query($sql, array( $masterID, $orderHeaderID, $samplingSoID, $valueChoice, $valueOptionOrder, $valueOptionLabel, $userid )); if (!$query) { $this->db_onedev->trans_rollback(); $this->sys_error_db("insert t_kuesioner_audiometri"); exit; } } $this->db_onedev->trans_commit(); $result = $this->getAudiometriQuestionnaire($orderHeaderID, $samplingSoID); $this->sys_ok(array( "records" => $result )); exit; } function getSpirometriQuestionnaire($orderHeaderID, $samplingSoID = 0) { $masterSql = "SELECT M_KuesionerSpirometriID as id, M_KuesionerSpirometriNumber as number, M_KuesionerSpirometriGroupNumber as group_number, M_KuesionerSpirometriGroupName as group_name, M_KuesionerSpirometriQuestion as question, M_KuesionerSpirometriType as type, IFNULL(M_KuesionerSpirometriOptionJson,'') as option_json FROM m_kuesioner_spirometri WHERE M_KuesionerSpirometriIsActive = 'Y' ORDER BY CASE WHEN M_KuesionerSpirometriGroupNumber = 'RKES' THEN 1 WHEN M_KuesionerSpirometriGroupNumber = 'RPEK' THEN 2 ELSE 99 END, M_KuesionerSpirometriID ASC"; $qMaster = $this->db_onedev->query($masterSql); if (!$qMaster) { return array( 'master' => array(), 'answers' => array(), 'is_saved' => 'N' ); } $masters = $qMaster->result_array(); $answerSql = "SELECT T_KuesionerSpirometriM_KuesionerSpirometriID as master_id, T_KuesionerSpirometriValueChoice as value_choice, T_KuesionerSpirometriValueOptionOrder as value_option_order, T_KuesionerSpirometriValueOptionLabel as value_option_label FROM t_kuesioner_spirometri WHERE T_KuesionerSpirometriT_OrderHeaderID = ? AND T_KuesionerSpirometriIsActive = 'Y'"; $params = array($orderHeaderID); if (intval($samplingSoID) > 0) { $answerSql .= " AND T_KuesionerSpirometriT_SamplingSoID = ?"; $params[] = $samplingSoID; } $answerSql .= " ORDER BY T_KuesionerSpirometriID ASC"; $qAnswer = $this->db_onedev->query($answerSql, $params); $answers = array(); if ($qAnswer) { $tmpAnswers = $qAnswer->result_array(); foreach ($tmpAnswers as $row) { $masterID = intval($row['master_id']); if (!isset($answers[$masterID])) { $answers[$masterID] = array( 'master_id' => $masterID, 'value_choice' => null, 'options' => array() ); } if ($row['value_choice'] !== null && $row['value_choice'] !== '') { $answers[$masterID]['value_choice'] = $row['value_choice']; } if ($row['value_option_order'] !== null && $row['value_option_order'] !== '') { $answers[$masterID]['options'][] = array( 'value_option_order' => $row['value_option_order'], 'value_option_label' => $row['value_option_label'] ); } } } return array( 'master' => $masters, 'answers' => $answers, 'is_saved' => count($answers) > 0 ? 'Y' : 'N' ); } function saveSpirometri() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; if (!isset($prm['labnumber']) || $prm['labnumber'] == '') { $this->sys_error("labnumber is required"); exit; } if (!isset($prm['answers']) || !is_array($prm['answers']) || count($prm['answers']) == 0) { $this->sys_error("answers is required"); exit; } $sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql, array($prm['labnumber'])); if (!$query) { $this->sys_error_db("data patient"); exit; } $data_patient = $query->row_array(); if (!$data_patient) { $this->sys_error("data patient not found"); exit; } $orderHeaderID = intval($data_patient['T_OrderHeaderID']); $samplingSoID = isset($prm['samplingso_id']) ? intval($prm['samplingso_id']) : 0; $masterMap = $this->getSpirometriMasterMap(); if (empty($masterMap)) { $this->sys_error("master spirometri tidak tersedia"); exit; } $this->db_onedev->trans_begin(); $sql = "UPDATE t_kuesioner_spirometri SET T_KuesionerSpirometriIsActive = 'N', T_KuesionerSpirometriUserID = ?, T_KuesionerSpirometriLastUpdate = NOW() WHERE T_KuesionerSpirometriT_OrderHeaderID = ? AND T_KuesionerSpirometriIsActive = 'Y'"; $params = array($userid, $orderHeaderID); if ($samplingSoID > 0) { $sql .= " AND T_KuesionerSpirometriT_SamplingSoID = ?"; $params[] = $samplingSoID; } $query = $this->db_onedev->query($sql, $params); if (!$query) { $this->db_onedev->trans_rollback(); $this->sys_error_db("update t_kuesioner_spirometri"); exit; } foreach ($prm['answers'] as $ans) { $masterID = isset($ans['master_id']) ? intval($ans['master_id']) : 0; $type = isset($ans['type']) ? trim($ans['type']) : ''; if ($masterID <= 0) { continue; } if (!isset($masterMap[$masterID])) { $this->db_onedev->trans_rollback(); $this->sys_error("master spirometri tidak ditemukan untuk ID " . $masterID); exit; } $masterType = trim($masterMap[$masterID]['type']); $masterNumber = isset($masterMap[$masterID]['number']) ? trim((string)$masterMap[$masterID]['number']) : ''; $masterGroupNumber = isset($masterMap[$masterID]['group_number']) ? trim((string)$masterMap[$masterID]['group_number']) : ''; $plainMasterNumber = $masterNumber; if (preg_match('/(\d+)$/', $masterNumber, $matches)) { $plainMasterNumber = $matches[1]; } $isNullableOption = ( $type === 'option' && $masterGroupNumber === 'RKES' && in_array($plainMasterNumber, array('1', '2', '3', '4', '5')) ); if ($type !== $masterType) { $this->db_onedev->trans_rollback(); $this->sys_error("type spirometri tidak sesuai untuk master ID " . $masterID); exit; } if ($type === 'choice') { $valueChoice = isset($ans['value_choice']) ? trim($ans['value_choice']) : null; if ($valueChoice !== 'Y' && $valueChoice !== 'T') { $this->db_onedev->trans_rollback(); $this->sys_error("value choice tidak valid untuk master ID " . $masterID); exit; } $sql = "INSERT INTO t_kuesioner_spirometri ( T_KuesionerSpirometriM_KuesionerSpirometriID, T_KuesionerSpirometriT_OrderHeaderID, T_KuesionerSpirometriT_SamplingSoID, T_KuesionerSpirometriValueChoice, T_KuesionerSpirometriValueOptionOrder, T_KuesionerSpirometriValueOptionLabel, T_KuesionerSpirometriIsActive, T_KuesionerSpirometriUserID, T_KuesionerSpirometriCreated, T_KuesionerSpirometriLastUpdate ) VALUES (?, ?, ?, ?, NULL, NULL, 'Y', ?, NOW(), NOW())"; $query = $this->db_onedev->query($sql, array( $masterID, $orderHeaderID, $samplingSoID, $valueChoice, $userid )); if (!$query) { $dbError = $this->db_onedev->error(); $this->db_onedev->trans_rollback(); $this->sys_error(array( "message" => "insert choice t_kuesioner_spirometri", "db_error" => $dbError, "last_query" => $this->db_onedev->last_query(), "payload" => $ans )); exit; } } if ($type === 'option') { $options = isset($ans['options']) && is_array($ans['options']) ? $ans['options'] : array(); if (count($options) === 0) { if ($isNullableOption) { continue; } $this->db_onedev->trans_rollback(); $this->sys_error("option spirometri kosong untuk master ID " . $masterID); exit; } foreach ($options as $opt) { $valueOptionOrder = isset($opt['value_option_order']) ? trim((string)$opt['value_option_order']) : ''; $valueOptionLabel = isset($opt['value_option_label']) ? trim((string)$opt['value_option_label']) : ''; if ($valueOptionOrder === '' || $valueOptionLabel === '') { $this->db_onedev->trans_rollback(); $this->sys_error(array( "message" => "option spirometri tidak lengkap", "master_id" => $masterID, "option" => $opt )); exit; } if (!isset($masterMap[$masterID]['options'][$valueOptionOrder])) { $this->db_onedev->trans_rollback(); $this->sys_error(array( "message" => "value_option_order tidak valid untuk spirometri", "master_id" => $masterID, "value_option_order" => $valueOptionOrder, "allowed_options" => $masterMap[$masterID]['options'] )); exit; } $validLabel = $masterMap[$masterID]['options'][$valueOptionOrder]; if ( $masterGroupNumber === 'RKES' && in_array($plainMasterNumber, array('1', '2', '3', '4', '5')) && $valueOptionOrder === '1' ) { $validLabel = 'Y'; } $sql = "INSERT INTO t_kuesioner_spirometri ( T_KuesionerSpirometriM_KuesionerSpirometriID, T_KuesionerSpirometriT_OrderHeaderID, T_KuesionerSpirometriT_SamplingSoID, T_KuesionerSpirometriValueChoice, T_KuesionerSpirometriValueOptionOrder, T_KuesionerSpirometriValueOptionLabel, T_KuesionerSpirometriIsActive, T_KuesionerSpirometriUserID, T_KuesionerSpirometriCreated, T_KuesionerSpirometriLastUpdate ) VALUES (?, ?, ?, NULL, ?, ?, 'Y', ?, NOW(), NOW())"; $query = $this->db_onedev->query($sql, array( $masterID, $orderHeaderID, $samplingSoID, $valueOptionOrder, $validLabel, $userid )); if (!$query) { $dbError = $this->db_onedev->error(); $this->db_onedev->trans_rollback(); $this->sys_error(array( "message" => "insert option t_kuesioner_spirometri", "db_error" => $dbError, "last_query" => $this->db_onedev->last_query(), "payload" => $ans, "option" => $opt )); exit; } } } } $this->db_onedev->trans_commit(); $result = $this->getSpirometriQuestionnaire($orderHeaderID, $samplingSoID); $this->sys_ok(array( "records" => $result )); exit; } function getSpirometriMasterMap() { $sql = "SELECT M_KuesionerSpirometriID as id, M_KuesionerSpirometriNumber as number, M_KuesionerSpirometriGroupNumber as group_number, M_KuesionerSpirometriType as type, IFNULL(M_KuesionerSpirometriOptionJson,'') as option_json FROM m_kuesioner_spirometri WHERE M_KuesionerSpirometriIsActive = 'Y'"; $query = $this->db_onedev->query($sql); if (!$query) { return array(); } $rows = $query->result_array(); $map = array(); foreach ($rows as $row) { $options = array(); if (!empty($row['option_json'])) { $decoded = json_decode($row['option_json'], true); if (is_array($decoded)) { foreach ($decoded as $idx => $opt) { $order = ''; $label = ''; if (isset($opt['order'])) { $order = (string)$opt['order']; } elseif (isset($opt['code'])) { $order = (string)$opt['code']; } elseif (isset($opt['id'])) { $order = (string)$opt['id']; } elseif (isset($opt['value'])) { $order = (string)$opt['value']; } else { $order = (string)($idx + 1); } if (isset($opt['label'])) { $label = (string)$opt['label']; } elseif (isset($opt['name'])) { $label = (string)$opt['name']; } elseif (isset($opt['text'])) { $label = (string)$opt['text']; } elseif (isset($opt['value'])) { $label = (string)$opt['value']; } if ($order !== '' && $label !== '') { $options[$order] = $label; } } } } $map[(int)$row['id']] = array( 'number' => (string)$row['number'], 'group_number' => (string)$row['group_number'], 'type' => (string)$row['type'], 'options' => $options ); } return $map; } function getSpirometriTemplate() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; if (!isset($prm['labnumber']) || $prm['labnumber'] == '') { $this->sys_error("labnumber is required"); exit; } $sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql, array($prm['labnumber'])); if (!$query) { $this->sys_error_db("data patient"); exit; } $data_patient = $query->row_array(); if (!$data_patient) { $this->sys_error("data patient not found"); exit; } $orderHeaderID = intval($data_patient['T_OrderHeaderID']); $sql = "SELECT * FROM t_spirometri_quesioner WHERE T_SpirometriQuesionerT_OrderHeaderID = ? AND T_SpirometriQuesionerIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql, array($orderHeaderID)); if (!$query) { $this->sys_error_db("data spirometri quesioner"); exit; } $get_spirometri_quesioner = $query->result_array(); $template = []; $trx_id = 0; if (count($get_spirometri_quesioner) == 0) { $sql = "SELECT * FROM m_quesioner_spirometri WHERE M_QuesionerSpirometrIsActive = 'Y' lIMIT 1"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("error select m_quesioner_spirometri"); exit; } $row = $query->row_array(); if (!$row) { $this->sys_error("data not found"); exit; } $template = json_decode($row['M_QuesionerSpirometriJSON'], true); } else{ $template = json_decode($get_spirometri_quesioner[0]['T_SpirometriQuesionerJSON'], true); $trx_id = intval($get_spirometri_quesioner[0]['T_SpirometriQuesionerID']); } $result = array("records" => $template, "trx_id" => $trx_id); $this->sys_ok($result); exit; } /* CREATE TABLE `t_spirometri_quesioner` ( `T_SpirometriQuesionerID` int NOT NULL AUTO_INCREMENT, `T_SpirometriQuesionerT_OrderHeaderID` int NOT NULL DEFAULT '0', `T_SpirometriQuesionerJSON` text NOT NULL, `T_SpirometriQuesionerIsActive` char(1) NOT NULL DEFAULT 'Y', `T_SpirometriQuesionerCreated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `T_SpirometriQuesionerUserID` int NOT NULL DEFAULT '0', PRIMARY KEY (`T_SpirometriQuesionerID`), KEY `T_SpirometriQuesionerT_OrderHeaderID` (`T_SpirometriQuesionerT_OrderHeaderID`), KEY `T_SpirometriQuesionerIsActive` (`T_SpirometriQuesionerIsActive`), KEY `T_SpirometriQuesionerUserID` (`T_SpirometriQuesionerUserID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; */ function getAudiometriTemplate() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; if (!isset($prm['labnumber']) || $prm['labnumber'] == '') { $this->sys_error("labnumber is required"); exit; } $sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql, array($prm['labnumber'])); if (!$query) { $this->sys_error_db("data patient"); exit; } $data_patient = $query->row_array(); if (!$data_patient) { $this->sys_error("data patient not found"); exit; } $orderHeaderID = intval($data_patient['T_OrderHeaderID']); $sql = "SELECT * FROM t_audiometri_quesioner WHERE T_AudiometriQuesionerT_OrderHeaderID = ? AND T_AudiometriQuesionerIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql, array($orderHeaderID)); if (!$query) { $this->sys_error_db("data audiometri quesioner"); exit; } $get_audiometri_quesioner = $query->result_array(); $template = []; $trx_id = 0; if (count($get_audiometri_quesioner) == 0) { $sql = "SELECT * FROM m_quesioner_audiometri WHERE M_QuesionerAudiometriIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("error select m_quesioner_audiometri"); exit; } $row = $query->row_array(); if (!$row) { $this->sys_error("data not found"); exit; } $template = json_decode($row['M_QuesionerAudiometriJSON'], true); } else { $template = json_decode($get_audiometri_quesioner[0]['T_AudiometriQuesionerJSON'], true); $trx_id = intval($get_audiometri_quesioner[0]['T_AudiometriQuesionerID']); } $result = array("records" => $template, "trx_id" => $trx_id); $this->sys_ok($result); exit; } function saveQuestionerAudiometri() { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; if (!isset($prm['template']) || !is_array($prm['template']) || count($prm['template']) == 0) { $this->sys_error("template is required"); exit; } $this->db_onedev->trans_begin(); if(isset($prm['labnumber'])){ $sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql, array($prm['labnumber'])); if (!$query) { $this->sys_error_db("data patient"); exit; } $data_patient = $query->row_array(); if (!$data_patient) { $this->sys_error("data patient not found"); exit; } $orderHeaderID = intval($data_patient['T_OrderHeaderID']); } else { $orderHeaderID = intval($prm['t_orderheaderID']); } $sql = "UPDATE t_audiometri_quesioner SET T_AudiometriQuesionerIsActive = 'N', T_AudiometriQuesionerLastUpdate = NOW() WHERE T_AudiometriQuesionerT_OrderHeaderID = ? AND T_AudiometriQuesionerIsActive = 'Y'"; $query = $this->db_onedev->query($sql, array($orderHeaderID)); if (!$query) { $this->sys_error_db("delete t_audiometri_quesioner"); exit; } $json = json_encode($prm['template']); $sql = "INSERT INTO t_audiometri_quesioner ( T_AudiometriQuesionerT_OrderHeaderID, T_AudiometriQuesionerJSON, T_AudiometriQuesionerCreated, T_AudiometriQuesionerUserID ) VALUES (?, ?, NOW(), ?)"; $query = $this->db_onedev->query($sql, array($orderHeaderID, $json, $userid)); if (!$query) { $this->sys_error_db("insert t_audiometri_quesioner"); exit; } $this->db_onedev->trans_commit(); $sql = "SELECT * FROM t_audiometri_quesioner WHERE T_AudiometriQuesionerT_OrderHeaderID = ? AND T_AudiometriQuesionerIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql, array($orderHeaderID)); if (!$query) { $this->sys_error_db("data audiometri quesioner"); exit; } $data_audiometri_quesioner = $query->row_array(); if (!$data_audiometri_quesioner) { $this->sys_error("data audiometri quesioner not found"); exit; } $data_audiometri_quesioner['T_AudiometriQuesionerJSON'] = json_decode($json, true); $this->sys_ok(array("records" => $data_audiometri_quesioner, "trx_id" => intval($data_audiometri_quesioner['T_AudiometriQuesionerID']), "message" => "data audiometri quesioner berhasil disimpan")); exit; } function saveQuestionerSpirometri(){ if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; if (!isset($prm['template']) || !is_array($prm['template']) || count($prm['template']) == 0) { $this->sys_error("template is required"); exit; } $this->db_onedev->trans_begin(); if(isset($prm['labnumber'])){ $sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql, array($prm['labnumber'])); if (!$query) { $this->sys_error_db("data patient"); exit; } $data_patient = $query->row_array(); if (!$data_patient) { $this->sys_error("data patient not found"); exit; } $orderHeaderID = intval($data_patient['T_OrderHeaderID']); } else { $orderHeaderID = intval($prm['t_orderheaderID']); } $sql = "UPDATE t_spirometri_quesioner SET T_SpirometriQuesionerIsActive = 'N', T_SpirometriQuesionerLastUpdate = NOW() WHERE T_SpirometriQuesionerT_OrderHeaderID = ? AND T_SpirometriQuesionerIsActive = 'Y'"; $query = $this->db_onedev->query($sql, array($orderHeaderID)); if (!$query) { $this->sys_error_db("delete t_spirometri_quesioner"); exit; } $json = json_encode($prm['template']); $sql = "INSERT INTO t_spirometri_quesioner ( T_SpirometriQuesionerT_OrderHeaderID, T_SpirometriQuesionerJSON, T_SpirometriQuesionerCreated, T_SpirometriQuesionerUserID ) VALUES (?, ?, NOW(), ?)"; $query = $this->db_onedev->query($sql, array($orderHeaderID, $json, $userid)); if (!$query) { $this->sys_error_db("insert t_spirometri_quesioner"); exit; } $this->db_onedev->trans_commit(); $sql = "SELECT * FROM t_spirometri_quesioner WHERE T_SpirometriQuesionerT_OrderHeaderID = ? AND T_SpirometriQuesionerIsActive = 'Y' LIMIT 1"; $query = $this->db_onedev->query($sql, array($orderHeaderID)); if (!$query) { $this->sys_error_db("data spirometri quesioner"); exit; } $data_spirometri_quesioner = $query->row_array(); if (!$data_spirometri_quesioner) { $this->sys_error("data spirometri quesioner not found"); exit; } $data_spirometri_quesioner['T_SpirometriQuesionerJSON'] = json_decode($json, true); $this->sys_ok(array("records" => $data_spirometri_quesioner, "message" => "data spirometri quesioner berhasil disimpan")); exit; } }