diff --git a/application/controllers/klinik/Registrationv3.php b/application/controllers/klinik/Registrationv3.php index 6bea771d..d7f81b8e 100644 --- a/application/controllers/klinik/Registrationv3.php +++ b/application/controllers/klinik/Registrationv3.php @@ -13,6 +13,7 @@ class Registrationv3 extends MY_Controller $this->db_onedev = $this->load->database("onedev", true); $this->db_oneklinik = $this->load->database("onedev", true); $this->db_antrione = $this->load->database("antrione", true); + $this->load->library('ibl_encryptor'); // $this->IP_SOCKET_IO = "devone.aplikasi.web.id"; $this->IP_SOCKET_IO = "localhost"; @@ -875,18 +876,47 @@ class Registrationv3 extends MY_Controller if ($prm['snorm'] == '') { if ($prm['search'] != '') { $e = explode('+', $prm['search']); - if (isset($e[0])) { - $e[0] = str_replace("'", "\\'", $e[0]); - $q['name'] = "AND M_PatientName LIKE '%{$e[0]}%'"; + // nama via trigram bidx + if (!empty($e[0]) && mb_strlen(trim($e[0])) >= 3) { + $toks = $this->ibl_encryptor->query_tokens($e[0]); + $conds = []; + foreach ($toks as $tok) { + $tok_esc = $this->db_onedev->escape_str($tok); + $conds[] = "JSON_CONTAINS(M_PatientName_bidx, '\"$tok_esc\"')"; + } + if ($conds) $q['name'] = 'AND (' . implode(' AND ', $conds) . ')'; + } + // HP via trigram bidx + if (!empty($e[1]) && mb_strlen(trim($e[1])) >= 3) { + $toks = $this->ibl_encryptor->query_tokens($e[1]); + $conds = []; + foreach ($toks as $tok) { + $tok_esc = $this->db_onedev->escape_str($tok); + $conds[] = "JSON_CONTAINS(M_PatientHP_bidx, '\"$tok_esc\"')"; + } + if ($conds) $q['hp'] = 'AND (' . implode(' AND ', $conds) . ')'; + } + // DOB via trigram bidx + if (!empty($e[2]) && mb_strlen(trim($e[2])) >= 3) { + $toks = $this->ibl_encryptor->query_tokens($e[2]); + $conds = []; + foreach ($toks as $tok) { + $tok_esc = $this->db_onedev->escape_str($tok); + $conds[] = "JSON_CONTAINS(M_PatientDOB_bidx, '\"$tok_esc\"')"; + } + if ($conds) $q['dob'] = 'AND (' . implode(' AND ', $conds) . ')'; + } + // Alamat dihapus dari search + // NIK via trigram bidx (e[3] — sebelumnya e[4]) + if (!empty($e[3]) && mb_strlen(trim($e[3])) >= 3) { + $toks = $this->ibl_encryptor->query_tokens($e[3]); + $conds = []; + foreach ($toks as $tok) { + $tok_esc = $this->db_onedev->escape_str($tok); + $conds[] = "JSON_CONTAINS(M_PatientNIK_bidx, '\"$tok_esc\"')"; + } + if ($conds) $q['nik'] = 'AND (' . implode(' AND ', $conds) . ')'; } - if (isset($e[1])) - $q['hp'] = "AND ((M_PatientHP LIKE '%{$e[1]}%' and M_PatientHP IS NOT NULL) OR (M_PatientHP IS NULL AND '{$e[1]}' = ''))"; - if (isset($e[2])) - $q['dob'] = "AND ((DATE_FORMAT(M_PatientDOB, '%d-%m-%Y') LIKE '%{$e[2]}%' and M_PatientDOB IS NOT NULL) OR (M_PatientDOB IS NULL AND '{$e[2]}' = ''))"; - if (isset($e[3])) - $q['address'] = "AND M_PatientAddressDescription LIKE '%{$e[3]}%'"; - if (isset($e[4])) - $q['nik'] = "AND M_PatientIDNumber = '{$e[4]}'"; } } else { $q_pid = "AND M_PatientNoReg = '{$prm['snorm']}'"; @@ -900,14 +930,10 @@ class Registrationv3 extends MY_Controller $sql = "SELECT 'N' divider,M_PatientID, M_PatientNoReg, M_PatientPrefix, - M_PatientName, + M_PatientName_enc, M_PatientHP_enc, M_PatientEmail_enc, + M_PatientPOB_enc, M_PatientPhone_enc, M_PatientIDNumber_enc, M_PatientNIK_enc, + M_PatientDOB_enc, M_PatientDOB as dob_raw, M_PatientSuffix, - M_PatientHP, - M_PatientEmail, - M_PatientPOB, - M_PatientPhone, - M_PatientIDNumber, - DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as M_PatientDOB, M_PatientNote, M_PatientNIK, M_PatientJabatan, @@ -953,10 +979,22 @@ class Registrationv3 extends MY_Controller if ($query) { $rows = $query->result_array(); + $enc = $this->ibl_encryptor; foreach ($rows as $k => $v) { - $rows[$k]['M_PatientName'] = stripslashes($rows[$k]['M_PatientName']); - $rows[$k]['M_PatientAddressDescription'] = stripslashes($v['M_PatientAddressDescription']); + $rows[$k]['M_PatientName'] = $enc->decrypt($v['M_PatientName_enc'] ?? '') ?? ''; + $rows[$k]['M_PatientHP'] = $enc->decrypt($v['M_PatientHP_enc'] ?? '') ?? ''; + $rows[$k]['M_PatientEmail'] = $enc->decrypt($v['M_PatientEmail_enc'] ?? '') ?? ''; + $rows[$k]['M_PatientPOB'] = $enc->decrypt($v['M_PatientPOB_enc'] ?? '') ?? ''; + $rows[$k]['M_PatientPhone'] = $enc->decrypt($v['M_PatientPhone_enc'] ?? '') ?? ''; + $rows[$k]['M_PatientIDNumber'] = $enc->decrypt($v['M_PatientIDNumber_enc']?? '') ?? ''; + $rows[$k]['M_PatientNIK'] = $enc->decrypt($v['M_PatientNIK_enc'] ?? '') ?? ''; + $rows[$k]['M_PatientDOB'] = $enc->decrypt($v['M_PatientDOB_enc'] ?? '') ?? date('d-m-Y', strtotime($v['dob_raw'] ?? 'now')); + $rows[$k]['M_PatientAddressDescription'] = $enc->decrypt($v['M_PatientAddressDescription_enc'] ?? '') ?? ''; + foreach (array_keys($rows[$k]) as $col) { + if (substr($col, -4) === '_enc') unset($rows[$k][$col]); + } + unset($rows[$k]['dob_raw']); $patient_name = str_replace("'", "\\'", $prm['M_PatientName']); $sql = "SELECT *, concat('{$rows[$k]['M_PatientAddressDescription']}', '\n\n', m_kelurahanname, ', ', diff --git a/application/controllers/mockup/doctorclinicv2/Samplingcall.php b/application/controllers/mockup/doctorclinicv2/Samplingcall.php index 8e0b5e6c..78082d80 100644 --- a/application/controllers/mockup/doctorclinicv2/Samplingcall.php +++ b/application/controllers/mockup/doctorclinicv2/Samplingcall.php @@ -1,1281 +1,1282 @@ -db_onedev = $this->load->database("onedev", true); - // $this->IP_SOCKET_IO = "devone.aplikasi.web.id"; - $this->IP_SOCKET_IO = "localhost"; - } - - function getsampletypes() - { - - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $orderid = $prm['orderid']; - $stationid = $prm['stationid']; - $statusid = $prm['statusid']; - $rows = array(); - - - $sql = "SELECT SUM(xcount) as cnt - FROM ( - SELECT COUNT(*) as xcount - FROM t_orderdetail - 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} AND - T_SampleStationIsNonLab = 'OTHERS' - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoIsActive = 'Y' - WHERE - T_OrderDetailT_OrderHeaderID = {$orderid} AND T_OrderDetailIsActive = 'Y' AND - ISNULL(T_SamplingSoDoneDate) - - ) x"; - //echo $sql; - $x_exist = $this->db_onedev->query($sql)->row_array(); - if (intval($x_exist['cnt']) != 0) { - $sql = "SELECT * FROM t_sampling_queue_last_status - WHERE - T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND - T_SamplingQueueLastStatusT_SampleStationID = {$stationid} LIMIT 1"; - $last_data = $this->db_onedev->query($sql)->row_array(); - if (intval($last_data['T_SamplingQueueLastStatusT_SamplingQueueStatusID']) == 5) { - $sql = "UPDATE t_sampling_queue_last_status SET T_SamplingQueueLastStatusT_SamplingQueueStatusID = 2 - WHERE - T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND - T_SamplingQueueLastStatusT_SampleStationID = {$stationid}"; - //echo $sql; - $this->db_onedev->query($sql); - } - } else { - $sql = "UPDATE t_sampling_queue_last_status SET T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5 - WHERE - T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND - T_SamplingQueueLastStatusT_SampleStationID = {$stationid}"; - $this->db_onedev->query($sql); - } - - $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, - IF(ISNULL(T_SamplingSoRequirementID),IF(ISNULL(T_SamplingSoID) OR T_SamplingSoFlag <> 'D','X','Y'),T_SamplingSoRequirementStatus) as requirement_status, - '' as requirements - 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 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' - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND T_SamplingSoRequirementT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND - T_SamplingSoRequirementNat_PositionID = 12 AND - T_SamplingSoRequirementIsActive = 'Y' - WHERE - T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' - GROUP BY T_TestID "; - //echo $sql; - $rows['sampletypes'] = $this->db_onedev->query($sql)->result_array(); - if ($rows) { - foreach ($rows['sampletypes'] as $k => $v) { - $zxprm = array(); - $zxprm['status'] = $v['status']; - $zxprm['orderdetailid'] = $v['T_OrderDetailID']; - $zxprm['orderid'] = $v['T_OrderHeaderID']; - $zxprm['samplingso_id'] = $v['T_SamplingSoID']; - $zxprm['sampletypeid'] = $v['test_id']; - $rows['sampletypes'][$k]['requirements'] = $this->getrequirements($zxprm); - } - } - - $sql = "SELECT T_BahanID as id, T_BahanName, - IF(T_TestIsNonLab = '',fn_sampling_receive_status_by_bahan_lab({$orderid},T_SampleTypeID),fn_sampling_receive_status_by_bahan_so({$orderid},T_TestID)) as status_bahan - FROM t_orderdetail - 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_OrderDetailT_OrderHeaderID AND T_BarcodeLabT_SampleTypeID = T_SampleTypeID - JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID - WHERE - T_OrderDetailT_OrderHeaderID = {$orderid} - GROUP BY T_BahanID"; - //echo $sql; - $rows['information_bahan'] = $this->db_onedev->query($sql)->result_array(); - $result = array("total" => count($rows), "records" => $rows, "sql" => $this->db_onedev->last_query()); - $this->sys_ok($result); - exit; - } - - public function search() - { - $prm = $this->sys_input; - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - - $name = $prm["name"]; - $nolab = $prm["nolab"]; - $stationid = $prm["stationid"]; - $statusid = $prm["statusid"]; - $xdate = $prm["xdate"]; - $locationID = $prm['locationid']; - $companyid = isset($prm["companyid"]) ? $prm["companyid"] : 0; - $search = isset($prm["searchx"]) ? $prm["searchx"] : ''; - $filter_companyid = ''; - if ($companyid != 0 || $companyid != '0') { - $filter_companyid = " AND M_CompanyID = {$companyid} "; - } - //$where_status = ''; - $where_status = " AND ( ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X')"; - - // echo $norm; - //$where_status = " AND {$where_status}"; - - //$sql_where = "WHERE T_OrderHeaderIsActive = 'Y' {$where_status}"; - $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND ( DATE(T_OrderHeaderAddonIsComingDate) = '{$xdate}' OR DATE(T_OrderHeaderDate) = '{$xdate}' ) {$where_status}"; - $sql_where_klinik = "WHERE DATE_FORMAT(orderDate,'%Y-%m-%d') = '{$xdate}' AND orderIsActive = 'Y' AND orderIsScreening = 'D' AND orderIsCheck <> 'D'"; - - //$sql_param = array(); - if ($name != "") { - if ($sql_where != "") { - $sql_where .= " and "; - } - $sql_where .= " M_PatientName like '%$name%' "; - $sql_where_klinik .= " M_PatientName like '%$name%' "; - //$sql_param[] = "%$nama%"; - } - - if ($nolab != "") { - if ($sql_where != "") { - $sql_where .= " and "; - } - $sql_where .= "( T_OrderHeaderLabNumber like '%$nolab%' OR M_PatientName like '%$nolab%' OR T_OrderHeaderLabNumberExt like '%$nolab%' )"; - $sql_where_klinik .= "( T_OrderHeaderLabNumber like '%$nolab%' OR M_PatientName like '%$nolab%' OR T_OrderHeaderLabNumberExt like '%$nolab%' )"; - } - - if ($search != '') { - $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderLabNumber = '{$search}'"; - $sql_where_klinik = "WHERE T_OrderHeaderLabNumber = '{$search}'"; - } - - $sql = "SELECT * FROM ( - SELECT T_OrderHeaderID, - T_OrderHeaderDate, - T_OrderHeaderLabNumber, - T_OrderHeaderLabNumberExt, - T_OrderHeaderQueue, - T_OrderHeaderM_PatientID, - T_OrderHeaderM_CompanyID, - T_OrderHeaderM_MouID, - T_OrderHeaderM_PatientAge, - T_OrderHeaderSenderM_DoctorID, - T_OrderHeaderSenderM_DoctorAddressID, - T_OrderHeaderPjM_DoctorID, - T_OrderHeaderM_LangID, - T_OrderHeaderLangIsSI, - T_OrderHeaderIsCito, - T_OrderHeaderNat_CitoID, - T_OrderHeaderDiagnose, - T_OrderHeaderDoctorNote, - T_OrderHeaderVerificationNote, - T_OrderHeaderVerificationNoteM_UserID, - T_OrderHeaderFoNote, - T_OrderHeaderSamplingNote, - T_OrderHeaderResultNote, - T_OrderHeaderFoNoteM_UserID, - T_OrderHeaderSamplingNoteM_UserID, - T_OrderHeaderResultNoteM_UserID, - T_OrderHeaderReceivedSample, - T_OrderHeaderSubTotal, - T_OrderHeaderRounding, - T_OrderHeaderTotal, - T_OrderHeaderCreated, - T_OrderHeaderLastUpdated, - T_OrderHeaderCreatedUserID, - T_OrderHeaderIsActive, - m_patient.*, - M_SexName, - M_TitleName, - CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, - M_CompanyName, - fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status, - DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as patient_dob, - fn_sampling_queue_status_id(T_OrderHeaderID,T_SampleStationID) as statusid, - T_SampleStationID, - T_SampleTypeID, - {$stationid} as stationid, - T_OrderPromiseDateTime, - T_OrderHeaderIsCito as iscito, - fn_fo_get_laststatus(T_OrderHeaderID) as last_status_fo, - DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date, - IFNULL(T_OrderHeaderFoNote,'') as fo_note, - IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, - fn_sampling_reqs(T_OrderHeaderID) as fo_requirements, - '' as htmlforeqs, - IF(fn_fo_ver_have_reqs(T_OrderHeaderID) = 0,'Y','N') as fo_ver_status_req, - fn_fo_reg_have_reqs(T_OrderHeaderID) as fo_reg_status_req, - fn_sampling_reqs_status(T_OrderHeaderID) as fo_requirements_status, - IF(fn_fo_get_verification_status(T_OrderHeaderID) = 0, 'X','Y') as fo_verification_status, - IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, - T_OrderHeaderAddonIsComing as status_coming, - T_OrderLocationID as order_location_id, - IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as antri_time, - IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as skip_time, - 'N' AS is_clinic, - '' as flag_antrian - FROM t_orderheader - JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID - JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_companyid - JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID - JOIN m_title ON M_PatientM_TitleID = M_TitleID - JOIN m_sex ON M_PatientM_SexID = M_SexID - JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND T_OrderLocationT_SampleStationID = {$stationid} AND T_OrderLocationIsActive = 'Y' - LEFT JOIN antrian_samplestation ON AntrianSampleStationT_OrderLocationID =T_OrderLocationID AND AntrianSampleStationIsActive = 'Y' - JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND M_LocationID = {$locationID} - LEFT JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' - 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} AND T_SampleStationIsNonLab = 'OTHERS' - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestID AND T_SamplingSoIsActive = 'Y' - $sql_where - GROUP BY T_OrderHeaderID - HAVING last_status_fo IN (3,5) - - - ) x - ORDER BY T_OrderHeaderIsCito DESC, antri_time ASC - "; - //echo $sql; - $query = $this->db_onedev->query($sql); - if (!$query) { - $this->sys_error_db("search error", $this->db_onedev); - exit; - } - //echo $this->db_onedev->last_query(); - $rows = $query->result_array(); - if ($rows) { - $count_arr = count($rows); - foreach ($rows as $key => $value) { - if ($key + 1 != $count_arr) { - $rows[$key]['skip_time'] = $rows[$key + 1]['antri_time']; - } - if($value['is_clinic'] == 'Y'){ - //print_r($value); - $sql = "SELECT ScreeningParameterDisplay as display - FROM one_klinik.order_screening - JOIN one_klinik.screening_parameter ON ScreeningParameterType = 'keputusan' AND - orderScreeningValueKeputusan = ScreeningParameterCode AND - ScreeningParameterIsActive = 'Y' - WHERE - orderScreeningOrderID = {$value['T_OrderHeaderID']} AND orderScreeningIsActive = 'Y' LIMIT 1"; - $query = $this->db_onedev->query($sql); - if (!$query) { - $this->sys_error_db("get data screening", $this->db_onedev); - exit; - } - //echo $this->db_onedev->last_query(); - $flag_antrian = $query->row()->display; - $rows[$key]['flag_antrian'] = $flag_antrian; - } - } - } - - //$this->_add_address($rows); - $result = array("total" => count($rows), "records" => $rows, "sql" => $this->db_onedev->last_query()); - $this->sys_ok($result); - exit; - } - - - - function getstationstatus() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rows = []; - $query = " SELECT T_SampleStationID as id, T_SampleStationName as name - FROM t_samplestation - WHERE - T_SampleStationIsActive = 'Y' AND T_SampleStationIsNonLab = 'OTHERS' - "; - //echo $query; - $rows['stations'] = $this->db_onedev->query($query)->result_array(); - $rows['statuses'] = array(array('id' => 'NEW', 'name' => 'New'), array('id' => 'DONE', 'name' => 'Done')); - - $result = array( - "total" => count($rows), - "records" => $rows, - ); - $this->sys_ok($result); - exit; - } - - function search_staff() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $rows = []; - $query = " SELECT M_StaffID as id, M_StaffName as name, M_StaffCode as code, M_UserID as userid - FROM m_staff - JOIN m_user ON M_UserM_StaffID = M_StaffID AND M_UserIsActive = 'Y' - WHERE - M_StaffIsActive = 'Y' AND M_StaffCode = '{$prm['search']}' LIMIT 1 - "; - //echo $query; - $rows = $this->db_onedev->query($query)->row_array(); - - $result = array( - "total" => count($rows), - "records" => $rows, - ); - $this->sys_ok($result); - exit; - } - - function search_patient() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $search = $prm["search"]; - $stationid = $prm["stationid"]; - $statusid = $prm["statusid"]; - $patients = $prm["patients"]; - $where_status = ''; - if ($statusid === 'NEW') { - $where_status = "AND (ISNULL(T_SamplingQueueLastStatusID) OR T_SamplingQueueLastStatusT_SamplingQueueStatusID <> 5 )"; - } else { - $where_status = "AND T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5"; - } - - // echo $norm; - //$where_status = " AND {$where_status}"; - - $sql_where = "WHERE T_OrderHeaderLabNumber = '{$search}' AND T_OrderHeaderIsActive = 'Y' {$where_status}"; - $rows = []; - $query = "SELECT t_orderheader.*,m_patient.*, IFNULL(M_PatientPhoto,'') as M_PatientPhotoThumb, - M_SexName, M_TitleName, CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, M_CompanyName, - IF(ISNULL(T_SamplingQueueLastStatusID), 'New',T_SamplingQueueStatusName) as status, DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as patient_dob, - IF(ISNULL(T_SamplingQueueLastStatusID), 0,T_SamplingQueueLastStatusT_SamplingQueueStatusID) as statusid, T_SampleStationID, T_SampleTypeID, - {$stationid} as stationid, - fn_global_check_is_cito(T_OrderHeaderID) as iscito - FROM t_orderheader - JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID - JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID - JOIN m_title ON M_PatientM_TitleID = M_TitleID - JOIN m_sex ON M_PatientM_SexID = M_SexID - JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID - JOIN t_test ON T_OrderDetailT_TestID = T_TestID - JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID - JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID - JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} AND T_SampleStationIsNonLab = 'OTHERS' - JOIN last_status ON Last_StatusT_OrderHeaderID = T_OrderHeaderID AND ( Last_StatusM_StatusID = 3 OR Last_StatusM_StatusID = 5 ) - LEFT JOIN t_sampling_queue_last_status ON - T_SamplingQueueLastStatusT_SampleStationID = T_SampleStationID AND - T_SamplingQueueLastStatusT_OrderHeaderID = T_OrderHeaderID - LEFT JOIN t_sampling_queue_status ON T_SamplingQueueLastStatusT_SamplingQueueStatusID = T_SamplingQueueStatusID - LEFT JOIN t_ordersamplereq ON T_OrderSampleReqT_SampleStationID = T_SampleStationID AND T_OrderSampleReqT_OrderSampleID - $sql_where - GROUP BY T_OrderHeaderID - ORDER BY T_OrderHeaderID DESC - limit 1"; - //echo $query; - $rows = $this->db_onedev->query($query)->row(); - - $result = array( - "total" => count($rows), - "records" => $rows, - ); - $this->sys_ok($result); - exit; - } - - function getrequirements($prm) - { - - $rows = array(); - $query = " - SELECT Nat_RequirementID as id, - Nat_RequirementName as name, 'P' as status, - if(ISNULL(T_SamplingSoRequirementID),'N', if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N') ) as chex, - Nat_RequirementPositionNat_PositionID as positionid - FROM nat_requirement - JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID - JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND Nat_RequirementPositionNat_PositionID = 12 AND - Nat_RequirementPositionIsActive = 'Y' - JOIN t_test ON T_TestNat_TestID = Nat_TestRequirementNat_TestID - JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = {$prm['orderid']} AND T_SamplingSoT_TestID = {$prm['sampletypeid']} AND - T_SamplingSoIsActive = 'Y' - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = {$prm['samplingso_id']} AND - T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND - T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID - WHERE - Nat_TestRequirementIsActive = 'Y' - GROUP BY nat_requirementID - "; - $rows = $this->db_onedev->query($query)->result_array(); - - - return $rows; - } - - function saverequirement() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $query = " INSERT INTO t_samplingso_requirement ( - T_SamplingSoRequirementT_OrderHeaderID, - T_SamplingSoRequirementT_SampleStationID, - T_SamplingSoRequirementT_SampletypeID, - T_SamplingSoRequirementStatus, - T_SamplingSoRequirementRequirements, - T_SamplingSoRequirementNote, - T_SamplingSoRequirementNat_PositionID, - T_SamplingSoRequirementUserID, - T_SamplingSoRequirementCreated - )VALUES( - {$prm['T_OrderHeaderID']}, - {$prm['stationid']}, - {$prm['sample']['T_SampleTypeID']}, - 'N', - - )"; - //echo $query; - $rows = $this->db_onedev->query($query)->result_array(); - - - $result = array( - "total" => count($rows), - "records" => $rows, - ); - $this->sys_ok($result); - exit; - } - - - function searchcompany() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - - $max_rst = 12; - $tot_count = 0; - - $q = [ - 'search' => '%' - ]; - - if ($prm['search'] != '') { - $q['search'] = "%{$prm['search']}%"; - } - - // QUERY TOTAL - $sql = "SELECT count(*) as total - FROM m_company - WHERE - M_CompanyName like ? - AND M_CompanyIsActive = 'Y'"; - $query = $this->db_onedev->query($sql, $q['search']); - //echo $query; - if ($query) { - $tot_count = $query->result_array()[0]["total"]; - } else { - $this->sys_error_db("m_city count", $this->db_onedev); - exit; - } - $rows = array('id' => 0, 'name' => 'Semua'); - $sql = " - SELECT M_CompanyID as id, M_CompanyName as name - FROM m_company - WHERE - M_CompanyName like ? - AND M_CompanyIsActive = 'Y' - ORDER BY M_CompanyName DESC - "; - $query = $this->db_onedev->query($sql, array($q['search'])); - - if ($query) { - $rows = $query->result_array(); - array_push($rows, array('id' => 0, 'name' => 'Semua')); - //echo $this->db_onedev->last_query(); - $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows)); - $this->sys_ok($result); - } else { - $this->sys_error_db("m_company rows", $this->db_onedev); - exit; - } - } - function clinicAction() - { - $prm = $this->sys_input; - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - - $sql = "SELECT - orderID, - orderQueueNumber AS queueNumber, - orderM_LocationID AS locationID, - M_LocationName AS locationName, - M_LocationT_SampleStationID AS stationID - FROM one_klinik.order - JOIN m_location ON orderM_LocationID = M_LocationID - WHERE orderID = {$prm['id']}"; - $qry = $this->db_onedev->query($sql); - if (!$qry) { - $this->sys_error($this->db_onedev); - exit; - } - $location = $qry->row_array(); - if ($location && $prm['is_clinic'] == "Y") { - - $userid = $this->sys_user["M_UserID"]; - $locationID = $location['locationID']; - $locationName = $location['locationName']; - $queueNumber = $location['queueNumber']; - $stationID = $location['stationID']; - $splitedLocationName = explode(" ", $locationName); - $locationName = $splitedLocationName[0]; - $next_status = $prm['statusnextid']; - - $query = "INSERT INTO t_sampling_clinic_queue_last_status ( - T_SamplingQueueLastStatusT_SampleStationID, - T_SamplingQueueLastStatusT_OrderHeaderID, - T_SamplingQueueLastStatusT_SamplingQueueStatusID, - T_SamplingQueueLastStatusUserID) - VALUES( - {$stationID}, - {$prm['id']}, - {$next_status}, - {$userid}) ON DUPLICATE KEY UPDATE T_SamplingQueueLastStatusT_SamplingQueueStatusID = {$next_status}"; - //echo $query; - $rows = $this->db_onedev->query($query); - if (!$rows) { - $this->sys_error_db($this->db_onedev); - exit; - } - $last_query = $this->db_onedev->last_query(); - - if ($prm['act'] == 'skip') { - $skip_time = date('Y-m-d H:i:s', strtotime($prm['skiptime']) + 10); - $sql = "UPDATE antrian_samplestation SET AntrianSampleStationIsActive = 'N' - WHERE - AntrianSampleStationOrderID = ?"; - $query = $this->db_onedev->query($sql, array($prm['id'])); - if (!$query) { - $this->sys_error_db($this->db_onedev); - exit; - } - /* 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, - AntrianSampleStationOrderID - ) - VALUES( - 0,?,?,NOW(),? - )"; - $query = $this->db_onedev->query($sql, array($skip_time, $userid, $prm['id'])); - if (!$query) { - $this->sys_error_db($this->db_onedev); - exit; - } - } - // {"status":"OK","data":{"total":1,"records":{"status":"OK"}}} - // $this->sys_ok(); - if (intval($next_status) == 1) { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/call.sm.{$locationID}.{$queueNumber}.{$locationName}"); //CALL NODE - } else if (intval($next_status) == 2) { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/skip.sm.{$locationID}"); - } else if (intval($next_status) == 3) { - $this->klinikordestatuschange($prm['id'], "Y"); - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/serve.sm.{$locationID}"); - } else if (intval($next_status) == 5) { - $this->klinikordestatuschange($prm['id'], "D"); - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); - } else { - $this->klinikordestatuschange($prm['id'], "D"); - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); - } - - - $result = array( - "total" => 1, - "records" => array('status' => 'OK'), - "last_query" => $last_query - ); - $this->sys_ok($result); - } else { - $this->sys_error("Data No found"); - } - } - - function getmenuurl() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $sql = "SELECT - S_MenuName, - S_MenuUrl - FROM s_menu - WHERE S_MenuName = 'periksa dokter' - AND S_MenuIsActive = 'Y'"; - $query = $this->db_onedev->query($sql, array()); - if (!$query) { - $this->sys_error_db($this->db_onedev); - exit; - } - $data = $query->row_array(); - $this->sys_ok($data); - } - function klinikordestatuschange($id, $status) - { - - $sql = "UPDATE one_klinik.order - SET orderIsCheck = '$status' - WHERE orderID = ?"; - $query = $this->db_onedev->query($sql, array($id)); - if (!$query) { - $message = $this->db_onedev->error(); - $this->sys_error($message); - exit; - } - } - function doaction() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rst_data = array('status' => 'OK'); - $status_call = array('status' => 'OK', 'data' => array()); - $prm = $this->sys_input; - $userid = $this->sys_user["M_UserID"]; - if ($prm['staff']['id'] != 0 || $prm['staff']['id'] != '0') { - $userid = $prm['staff']['userid']; - } - - - $sql = "SELECT T_OrderHeaderQueue 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 = {$prm['stationid']} - WHERE T_OrderHeaderID={$prm['id']}"; - if ($prm['is_clinic'] == "Y") { - $sql = "SELECT - orderID, - orderQueueNumber AS queueNumber, - orderM_LocationID AS locationID, - M_LocationName AS locationName - FROM one_klinik.order - JOIN m_location ON orderM_LocationID = M_LocationID - WHERE orderID = {$prm['id']}"; - } - $location = $this->db_onedev->query($sql)->row_array(); - $locationID = $location['locationID']; - $locationName = $location['locationName']; - $queueNumber = $location['queueNumber']; - $splitedLocationName = explode(" ", $locationName); - $locationName = $splitedLocationName[0]; - - if ($prm['act'] == 'call') { - $sql = "SELECT if(fn_sampling_available_call({$prm['id']},{$prm['stationid']})=0,'Y','N') as status_call"; - $sql = "SELECT T_SamplingQueueLastStatusID, T_SamplingQueueStatusName, T_SampleStationName, T_SampleStationID - FROM t_sampling_queue_last_status - JOIN t_sampling_queue_status ON T_SamplingQueueLastStatusT_SamplingQueueStatusID = T_SamplingQueueStatusID - JOIN t_samplestation ON T_SamplingQueueLastStatusT_SampleStationID = T_SampleStationID - JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_SamplingQueueLastStatusT_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 AND T_BahanT_SampleStationID = T_SampleStationID - WHERE - T_SamplingQueueLastStatusT_OrderHeaderID = {$prm['id']} AND - T_SamplingQueueLastStatusT_SampleStationID <> {$prm['stationid']} AND - T_SamplingQueueLastStatusT_SamplingQueueStatusID IN (1,3) LIMIT 1"; - // union tanpaorderheader - $data_status_call = $this->db_onedev->query($sql)->row_array(); - if ($data_status_call) { - $sql = "SELECT COUNT(*) as notdone - FROM t_ordersample - JOIN t_samplestation ON T_SampleStationID = {$data_status_call['T_SampleStationID']} AND - T_SampleStationIsNonLab = '' - WHERE - T_OrderSampleT_OrderHeaderID = {$prm['id']} AND T_OrderSampleReceive = 'N' - UNION - SELECT COUNT(*) as notdone - FROM t_samplingso - JOIN t_samplestation ON T_SampleStationID = {$data_status_call['T_SampleStationID']} AND - T_SampleStationIsNonLab <> '' - WHERE - T_SamplingSoT_OrderHeaderID = {$prm['id']} AND T_SamplingSoDoneDate IS NULL - "; - //union order yang is cek Y - //echo $sql; - $data_not_done = $this->db_onedev->query($sql)->row_array(); - if (intval($data_not_done['notdone']) > 0) - $status_call = array('status' => 'NOTCALL', 'data' => $data_status_call); - else { - $sql = "UPDATE t_sampling_queue_last_status - SET - T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5, - T_SamplingQueueLastStatusLastUpdated = NOW() - WHERE - T_SamplingQueueLastStatusT_OrderHeaderID = {$prm['id']} AND - T_SamplingQueueLastStatusT_SampleStationID = {$data_status_call['T_SampleStationID']} - "; - $update_to_done = $this->db_onedev->query($sql); - $status_call = array('status' => 'OK', 'data' => array()); - } - } - //echo $sql; - } - - $next_status = $prm['statusnextid']; - if ($prm['act'] == 'process') { - $sql = "SELECT - T_OrderHeaderID, - T_OrderDetailID as id, - T_OrderDetailT_TestCode, - T_OrderDetailT_TestName, - T_TestID as test_id, - 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 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 = {$prm['stationid']} - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoIsActive = 'Y' - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND - T_SamplingSoRequirementT_SampleStationID = T_SampleStationID AND - T_SamplingSoRequirementIsActive = 'Y' - WHERE - T_OrderHeaderID = {$prm['id']} AND T_OrderHeaderIsActive = 'Y' AND - (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) { - $sql = "INSERT INTO t_samplingso ( - T_SamplingSoT_SampleStationID, - T_SamplingSoT_OrderHeaderID, - T_SamplingSoT_TestID, - T_SamplingSoProcessDate, - T_SamplingSoProcessTime, - T_SamplingSoProcessUserID, - T_SamplingSoCreated, - T_SamplingSoUserID - ) - VALUES( - {$prm['stationid']}, - {$prm['id']}, - {$v->test_id}, - CURDATE(), - CURTIME(), - {$userid}, - NOW(), - {$userid} - ) ON DUPLICATE KEY UPDATE - T_SamplingSoProcessDate = CURDATE(), - T_SamplingSoProcessTime = CURTIME(), - T_SamplingSoFlag = 'P', - T_SamplingSoIsActive = 'Y', - T_SamplingSoProcessUserID = {$userid}, - T_SamplingSoUserID = {$userid}"; - //echo $sql; - $this->db_onedev->query($sql); - - $sql = "INSERT INTO sample_so_by_step ( - SampleSoByStepT_OrderHeaderID, - SampleSoByStepT_TestID, - SampleSoByStepCode, - SampleSoByStepDateTime, - SampleSoByStepUserID - ) - VALUES( - {$prm['id']}, - {$v->test_id}, - 'SAMPLING.Sampling.Sampled', - NOW(), - {$userid} - )"; - $this->db_onedev->query($sql); - } - } - //$this->broadcast("specimen-col-process"); - } - - if ($prm['act'] == 'samplingdone') { - $sql = "INSERT INTO t_samplingso ( - T_SamplingSoT_SampleStationID, - T_SamplingSoT_OrderHeaderID, - T_SamplingSoT_TestID, - T_SamplingSoDoneDate, - T_SamplingSoDoneTime, - T_SamplingSoDoneUserID, - T_SamplingSoCreated, - T_SamplingSoUserID - ) - VALUES( - {$prm['stationid']}, - {$prm['id']}, - {$prm['sample']['test_id']}, - CURDATE(), - CURTIME(), - {$userid}, - NOW(), - {$userid} - ) ON DUPLICATE KEY UPDATE - T_SamplingSoDoneDate = CURDATE(), - T_SamplingSoDoneTime = CURTIME(), - T_SamplingSoFlag = 'D', - T_SamplingSoIsActive = 'Y', - T_SamplingSoDoneUserID = {$userid}, - T_SamplingSoUserID = {$userid}"; - $this->db_onedev->query($sql); - //echo $sql; - $xreq = $prm['sample']['requirements']; - $arr_requirements = array(); - foreach ($xreq as $k => $v) { - if ($v['chex'] == 'Y') - array_push($arr_requirements, $v['id']); - } - - $requirements = '[' . join(',', $arr_requirements) . ']'; - - $sql = "UPDATE t_samplingso_requirement SET - T_SamplingSoRequirementIsActive = 'N', - T_SamplingSoRequirementDeleted = NOW(), - T_SamplingSoRequirementDeletedUserID = {$userid} - WHERE - T_SamplingSoRequirementT_OrderHeaderID = {$prm['id']} AND - T_SamplingSoRequirementT_SampleStationID = {$prm['stationid']} AND - T_SamplingSoRequirementT_SamplingSoID = {$prm['sample']['T_SamplingSoID']} AND - T_SamplingSoRequirementIsActive = 'Y'"; - $this->db_onedev->query($sql); - - $sql = "INSERT INTO t_samplingso_requirement( - T_SamplingSoRequirementT_OrderHeaderID, - T_SamplingSoRequirementT_SampleStationID, - T_SamplingSoRequirementT_SamplingSoID, - T_SamplingSoRequirementNat_PositionID, - T_SamplingSoRequirementStatus, - T_SamplingSoRequirementRequirements, - T_SamplingSoRequirementUserID, - T_SamplingSoRequirementCreated - ) - VALUES( - {$prm['id']}, - {$prm['stationid']}, - {$prm['sample']['T_SamplingSoID']}, - {$prm['sample']['requirements'][0]['positionid']}, - '{$prm['sample']['requirement_status']}', - '{$requirements}', - {$userid}, - NOW() - )"; - //echo $sql; - $this->db_onedev->query($sql); - - $this->load->library('Nonlabtemplate'); - $gen_template = $this->nonlabtemplate->generate($prm['sample']['T_SamplingSoID']); - - - $sql = "INSERT INTO sample_so_by_step ( - SampleSoByStepT_OrderHeaderID, - SampleSoByStepT_TestID, - SampleSoByStepCode, - SampleSoByStepRequirementStatus, - SampleSoByStepReuirements, - SampleSoByStepDateTime, - SampleSoByStepUserID - ) - VALUES( - {$prm['id']}, - {$prm['sample']['test_id']}, - 'SAMPLING.Sampling.Received', - '{$prm['sample']['requirement_status']}', - '{$requirements}', - NOW(), - {$userid} - )"; - $this->db_onedev->query($sql); - - $sql = "SELECT COUNT(*) as xcount - FROM ( - SELECT T_SamplingSoID, T_SamplingSoFlag ,T_OrderDetailT_TestID, T_OrderDetailID - FROM t_orderdetail - 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 = {$prm['stationid']} - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoIsActive = 'Y' - WHERE - T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' - GROUP BY T_TestID - HAVING ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X' - ) xx"; - //echo $sql; - $xcount = $this->db_onedev->query($sql)->row()->xcount; - $rst_data = array('status' => 'PARTIAL'); - if ($xcount == 0) { - $next_status = 5; - $rst_data = array('status' => 'OK'); - } - //$this->broadcast("specimen-col-receive"); - } - - if ($prm['act'] !== 'samplingprocess' && $status_call['status'] == 'OK') { - $dt_json = json_encode(array('T_SampleStationID' => $prm['stationid'], 'T_OrderHeaderID' => $prm['id'], '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 = {$prm['stationid']} AND - T_SamplingQueueLastStatusT_OrderHeaderID = {$prm['id']} AND - T_SamplingQueueLastStatusIsActive = 'Y'"; - $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( - {$prm['stationid']}, - {$prm['id']}, - {$next_status}, - {$userid}) ON DUPLICATE KEY UPDATE T_SamplingQueueLastStatusT_SamplingQueueStatusID = {$next_status}"; - //echo $query; - $rows = $this->db_onedev->query($query); - } - - if ($prm['act'] == 'reject') { - $sql = "INSERT INTO t_samplingso ( - T_SamplingSoT_OrderHeaderID, - T_SamplingSoT_SampleTypeID, - T_SamplingSoT_BarcodeLabID, - T_SamplingSoUserID - ) - VALUES( - {$prm['sample']['T_OrderHeaderID']}, - {$prm['sample']['T_SampleTypeID']}, - {$prm['sample']['T_BarcodeLabID']}, - {$userid} - ) ON DUPLICATE KEY UPDATE - T_SamplingSoDoneDate = NULL, - T_SamplingSoDoneTime = NULL, - T_SamplingSoDoneUserID = NULL, - T_SamplingSoProcessDate = NULL, - T_SamplingSoProcessTime = NULL, - T_SamplingSoProcessUserID = NULL, - T_SamplingSoFlag = 'X', - T_SamplingSoIsActive = 'N', - T_SamplingSoUserID = {$userid}"; - $this->db_onedev->query($sql); - - $next_status = 2; - $dt_json = json_encode(array('T_SampleStationID' => $prm['stationid'], 'T_OrderHeaderID' => $prm['sample']['T_OrderHeaderID'], '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 = {$prm['stationid']} AND - T_SamplingQueueLastStatusT_OrderHeaderID = {$prm['sample']['T_OrderHeaderID']} AND - T_SamplingQueueLastStatusIsActive = 'Y'"; - $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( - {$prm['stationid']}, - {$prm['sample']['T_OrderHeaderID']}, - {$next_status}, - {$userid}) ON DUPLICATE KEY UPDATE T_SamplingQueueLastStatusT_SamplingQueueStatusID = {$next_status}"; - //echo $query; - $rows = $this->db_onedev->query($query); - } - - if ($status_call['status'] == 'NOTCALL') { - $rst_data = $status_call; - } - - if ($prm['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)); - } - - if (intval($next_status) == 1) { - if ($status_call['status'] == 'OK') { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/call.sm.{$locationID}.{$queueNumber}.{$locationName}"); //CALL NODE - } - } else if (intval($next_status) == 2) { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/skip.sm.{$locationID}"); - } else if (intval($next_status) == 3) { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/serve.sm.{$locationID}"); - } else if (intval($next_status) == 5) { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); - } else { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); - } - - - $result = array( - "total" => 1, - "records" => $rst_data - ); - $this->sys_ok($result); - - exit; - } - - function getdatanoterequirement() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rst_data = array(); - $prm = $this->sys_input; - - $sql = "SELECT IFNULL(T_OrderHeaderFoNote,'') as fo_note, - fn_getstaffname(T_OrderHeaderFoNoteM_UserID) as fo_note_user, - IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, - fn_getstaffname(T_OrderHeaderVerificationNoteM_UserID) as fo_ver_note_user, - IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, - fn_getstaffname(T_OrderHeaderSamplingNoteM_UserID) as sampling_note_user - FROM t_orderheader - WHERE - T_OrderHeaderID = {$prm['T_OrderHeaderID']}"; - $notes = $this->db_onedev->query($sql)->row_array(); - - $sql = "SELECT 'fo registration' as position,GROUP_CONCAT(DISTINCT Nat_RequirementName separator ',') as requirements - FROM t_orderheader - JOIN t_orderreq ON T_OrderReqT_OrderHeaderID = T_OrderHeaderID - JOIN nat_requirement ON json_contains(T_OrderReqs,Nat_RequirementID) - WHERE T_OrderHeaderID = {$prm['T_OrderHeaderID']} - GROUP BY T_OrderHeaderID"; - //echo $sql; - $query = $this->db_onedev->query($sql)->row_array(); - if ($query) { - array_push($rst_data, $query); - } - - $sql = "SELECT 'fo verifikasi' as position, GROUP_CONCAT(DISTINCT Fo_VerificationsLabelName separator ',') as requirements - FROM fo_verificationsvalue - JOIN fo_verificationslabel ON Fo_VerificationsValueFo_VerificationsLabelID = Fo_VerificationsLabelID - WHERE - Fo_VerificationsValueCheck = 'N' AND - Fo_VerificationsValueT_OrderHeaderID = {$prm['T_OrderHeaderID']} - GROUP BY Fo_VerificationsValueT_OrderHeaderID - "; - //echo $sql; - $query = $this->db_onedev->query($sql)->row_array(); - if ($query) { - array_push($rst_data, $query); - } - - $result = array( - "total" => 1, - "records" => array('notes' => $notes, 'reqs' => $rst_data) - ); - $this->sys_ok($result); - - exit; - } - - function savenotesampling() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rst_data = array(); - $prm = $this->sys_input; - $userid = $this->sys_user["M_UserID"]; - - $sql = "UPDATE t_orderheader SET - T_OrderHeaderSamplingNote = '{$prm['sampling_note']}', - T_OrderHeaderSamplingNoteM_UserID = {$userid} - WHERE - T_OrderHeaderID = {$prm['T_OrderHeaderID']}"; - //echo $sql; - $query = $this->db_onedev->query($sql); - - $result = array( - "total" => 1, - "records" => $rst_data - ); - $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; - } -} +db_onedev = $this->load->database("onedev", true); + $this->load->library('ibl_encryptor'); + // $this->IP_SOCKET_IO = "devone.aplikasi.web.id"; + $this->IP_SOCKET_IO = "localhost"; + } + + function getsampletypes() + { + + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $orderid = $prm['orderid']; + $stationid = $prm['stationid']; + $statusid = $prm['statusid']; + $rows = array(); + + + $sql = "SELECT SUM(xcount) as cnt + FROM ( + SELECT COUNT(*) as xcount + FROM t_orderdetail + 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} AND + T_SampleStationIsNonLab = 'OTHERS' + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoIsActive = 'Y' + WHERE + T_OrderDetailT_OrderHeaderID = {$orderid} AND T_OrderDetailIsActive = 'Y' AND + ISNULL(T_SamplingSoDoneDate) + + ) x"; + //echo $sql; + $x_exist = $this->db_onedev->query($sql)->row_array(); + if (intval($x_exist['cnt']) != 0) { + $sql = "SELECT * FROM t_sampling_queue_last_status + WHERE + T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND + T_SamplingQueueLastStatusT_SampleStationID = {$stationid} LIMIT 1"; + $last_data = $this->db_onedev->query($sql)->row_array(); + if (intval($last_data['T_SamplingQueueLastStatusT_SamplingQueueStatusID']) == 5) { + $sql = "UPDATE t_sampling_queue_last_status SET T_SamplingQueueLastStatusT_SamplingQueueStatusID = 2 + WHERE + T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND + T_SamplingQueueLastStatusT_SampleStationID = {$stationid}"; + //echo $sql; + $this->db_onedev->query($sql); + } + } else { + $sql = "UPDATE t_sampling_queue_last_status SET T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5 + WHERE + T_SamplingQueueLastStatusT_OrderHeaderID = {$orderid} AND + T_SamplingQueueLastStatusT_SampleStationID = {$stationid}"; + $this->db_onedev->query($sql); + } + + $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, + IF(ISNULL(T_SamplingSoRequirementID),IF(ISNULL(T_SamplingSoID) OR T_SamplingSoFlag <> 'D','X','Y'),T_SamplingSoRequirementStatus) as requirement_status, + '' as requirements + 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 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' + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND T_SamplingSoRequirementT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND + T_SamplingSoRequirementNat_PositionID = 12 AND + T_SamplingSoRequirementIsActive = 'Y' + WHERE + T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' + GROUP BY T_TestID "; + //echo $sql; + $rows['sampletypes'] = $this->db_onedev->query($sql)->result_array(); + if ($rows) { + foreach ($rows['sampletypes'] as $k => $v) { + $zxprm = array(); + $zxprm['status'] = $v['status']; + $zxprm['orderdetailid'] = $v['T_OrderDetailID']; + $zxprm['orderid'] = $v['T_OrderHeaderID']; + $zxprm['samplingso_id'] = $v['T_SamplingSoID']; + $zxprm['sampletypeid'] = $v['test_id']; + $rows['sampletypes'][$k]['requirements'] = $this->getrequirements($zxprm); + } + } + + $sql = "SELECT T_BahanID as id, T_BahanName, + IF(T_TestIsNonLab = '',fn_sampling_receive_status_by_bahan_lab({$orderid},T_SampleTypeID),fn_sampling_receive_status_by_bahan_so({$orderid},T_TestID)) as status_bahan + FROM t_orderdetail + 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_OrderDetailT_OrderHeaderID AND T_BarcodeLabT_SampleTypeID = T_SampleTypeID + JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID + WHERE + T_OrderDetailT_OrderHeaderID = {$orderid} + GROUP BY T_BahanID"; + //echo $sql; + $rows['information_bahan'] = $this->db_onedev->query($sql)->result_array(); + $result = array("total" => count($rows), "records" => $rows, "sql" => $this->db_onedev->last_query()); + $this->sys_ok($result); + exit; + } + + public function search() + { + $prm = $this->sys_input; + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $name = $prm["name"]; + $nolab = $prm["nolab"]; + $stationid = $prm["stationid"]; + $statusid = $prm["statusid"]; + $xdate = $prm["xdate"]; + $locationID = $prm['locationid']; + $companyid = isset($prm["companyid"]) ? $prm["companyid"] : 0; + $search = isset($prm["searchx"]) ? $prm["searchx"] : ''; + $filter_companyid = ''; + if ($companyid != 0 || $companyid != '0') { + $filter_companyid = " AND M_CompanyID = {$companyid} "; + } + //$where_status = ''; + $where_status = " AND ( ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X')"; + + // echo $norm; + //$where_status = " AND {$where_status}"; + + //$sql_where = "WHERE T_OrderHeaderIsActive = 'Y' {$where_status}"; + $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND ( DATE(T_OrderHeaderAddonIsComingDate) = '{$xdate}' OR DATE(T_OrderHeaderDate) = '{$xdate}' ) {$where_status}"; + $sql_where_klinik = "WHERE DATE_FORMAT(orderDate,'%Y-%m-%d') = '{$xdate}' AND orderIsActive = 'Y' AND orderIsScreening = 'D' AND orderIsCheck <> 'D'"; + + //$sql_param = array(); + if ($name != "") { + if ($sql_where != "") { + $sql_where .= " and "; + } + $sql_where .= " M_PatientName like '%$name%' "; + $sql_where_klinik .= " M_PatientName like '%$name%' "; + //$sql_param[] = "%$nama%"; + } + + if ($nolab != "") { + if ($sql_where != "") { + $sql_where .= " and "; + } + $sql_where .= "( T_OrderHeaderLabNumber like '%$nolab%' OR T_OrderHeaderLabNumberExt like '%$nolab%' )"; + $sql_where_klinik .= "( T_OrderHeaderLabNumber like '%$nolab%' OR T_OrderHeaderLabNumberExt like '%$nolab%' )"; + } + + if ($search != '') { + $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderLabNumber = '{$search}'"; + $sql_where_klinik = "WHERE T_OrderHeaderLabNumber = '{$search}'"; + } + + $sql = "SELECT * FROM ( + SELECT T_OrderHeaderID, + T_OrderHeaderDate, + T_OrderHeaderLabNumber, + T_OrderHeaderLabNumberExt, + T_OrderHeaderQueue, + T_OrderHeaderM_PatientID, + T_OrderHeaderM_CompanyID, + T_OrderHeaderM_MouID, + T_OrderHeaderM_PatientAge, + T_OrderHeaderSenderM_DoctorID, + T_OrderHeaderSenderM_DoctorAddressID, + T_OrderHeaderPjM_DoctorID, + T_OrderHeaderM_LangID, + T_OrderHeaderLangIsSI, + T_OrderHeaderIsCito, + T_OrderHeaderNat_CitoID, + T_OrderHeaderDiagnose, + T_OrderHeaderDoctorNote, + T_OrderHeaderVerificationNote, + T_OrderHeaderVerificationNoteM_UserID, + T_OrderHeaderFoNote, + T_OrderHeaderSamplingNote, + T_OrderHeaderResultNote, + T_OrderHeaderFoNoteM_UserID, + T_OrderHeaderSamplingNoteM_UserID, + T_OrderHeaderResultNoteM_UserID, + T_OrderHeaderReceivedSample, + T_OrderHeaderSubTotal, + T_OrderHeaderRounding, + T_OrderHeaderTotal, + T_OrderHeaderCreated, + T_OrderHeaderLastUpdated, + T_OrderHeaderCreatedUserID, + T_OrderHeaderIsActive, + m_patient.*, + M_SexName, + M_TitleName, + CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, + M_CompanyName, + fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status, + + fn_sampling_queue_status_id(T_OrderHeaderID,T_SampleStationID) as statusid, + T_SampleStationID, + T_SampleTypeID, + {$stationid} as stationid, + T_OrderPromiseDateTime, + T_OrderHeaderIsCito as iscito, + fn_fo_get_laststatus(T_OrderHeaderID) as last_status_fo, + DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date, + IFNULL(T_OrderHeaderFoNote,'') as fo_note, + IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, + fn_sampling_reqs(T_OrderHeaderID) as fo_requirements, + '' as htmlforeqs, + IF(fn_fo_ver_have_reqs(T_OrderHeaderID) = 0,'Y','N') as fo_ver_status_req, + fn_fo_reg_have_reqs(T_OrderHeaderID) as fo_reg_status_req, + fn_sampling_reqs_status(T_OrderHeaderID) as fo_requirements_status, + IF(fn_fo_get_verification_status(T_OrderHeaderID) = 0, 'X','Y') as fo_verification_status, + IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, + T_OrderHeaderAddonIsComing as status_coming, + T_OrderLocationID as order_location_id, + IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as antri_time, + IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as skip_time, + 'N' AS is_clinic, + '' as flag_antrian + FROM t_orderheader + JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID + JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_companyid + JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID + JOIN m_title ON M_PatientM_TitleID = M_TitleID + JOIN m_sex ON M_PatientM_SexID = M_SexID + JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND T_OrderLocationT_SampleStationID = {$stationid} AND T_OrderLocationIsActive = 'Y' + LEFT JOIN antrian_samplestation ON AntrianSampleStationT_OrderLocationID =T_OrderLocationID AND AntrianSampleStationIsActive = 'Y' + JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND M_LocationID = {$locationID} + LEFT JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' + 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} AND T_SampleStationIsNonLab = 'OTHERS' + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND T_SamplingSoT_TestID = T_TestID AND T_SamplingSoIsActive = 'Y' + $sql_where + GROUP BY T_OrderHeaderID + HAVING last_status_fo IN (3,5) + + + ) x + ORDER BY T_OrderHeaderIsCito DESC, antri_time ASC + "; + //echo $sql; + $query = $this->db_onedev->query($sql); + if (!$query) { + $this->sys_error_db("search error", $this->db_onedev); + exit; + } + //echo $this->db_onedev->last_query(); + $rows = $query->result_array(); + if ($rows) { + $count_arr = count($rows); + foreach ($rows as $key => $value) { + if ($key + 1 != $count_arr) { + $rows[$key]['skip_time'] = $rows[$key + 1]['antri_time']; + } + if($value['is_clinic'] == 'Y'){ + //print_r($value); + $sql = "SELECT ScreeningParameterDisplay as display + FROM one_klinik.order_screening + JOIN one_klinik.screening_parameter ON ScreeningParameterType = 'keputusan' AND + orderScreeningValueKeputusan = ScreeningParameterCode AND + ScreeningParameterIsActive = 'Y' + WHERE + orderScreeningOrderID = {$value['T_OrderHeaderID']} AND orderScreeningIsActive = 'Y' LIMIT 1"; + $query = $this->db_onedev->query($sql); + if (!$query) { + $this->sys_error_db("get data screening", $this->db_onedev); + exit; + } + //echo $this->db_onedev->last_query(); + $flag_antrian = $query->row()->display; + $rows[$key]['flag_antrian'] = $flag_antrian; + } + } + } + + //$this->_add_address($rows); + $result = array("total" => count($rows), "records" => $rows, "sql" => $this->db_onedev->last_query()); + $this->sys_ok($result); + exit; + } + + + + function getstationstatus() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rows = []; + $query = " SELECT T_SampleStationID as id, T_SampleStationName as name + FROM t_samplestation + WHERE + T_SampleStationIsActive = 'Y' AND T_SampleStationIsNonLab = 'OTHERS' + "; + //echo $query; + $rows['stations'] = $this->db_onedev->query($query)->result_array(); + $rows['statuses'] = array(array('id' => 'NEW', 'name' => 'New'), array('id' => 'DONE', 'name' => 'Done')); + + $result = array( + "total" => count($rows), + "records" => $rows, + ); + $this->sys_ok($result); + exit; + } + + function search_staff() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $rows = []; + $query = " SELECT M_StaffID as id, M_StaffName as name, M_StaffCode as code, M_UserID as userid + FROM m_staff + JOIN m_user ON M_UserM_StaffID = M_StaffID AND M_UserIsActive = 'Y' + WHERE + M_StaffIsActive = 'Y' AND M_StaffCode = '{$prm['search']}' LIMIT 1 + "; + //echo $query; + $rows = $this->db_onedev->query($query)->row_array(); + + $result = array( + "total" => count($rows), + "records" => $rows, + ); + $this->sys_ok($result); + exit; + } + + function search_patient() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $search = $prm["search"]; + $stationid = $prm["stationid"]; + $statusid = $prm["statusid"]; + $patients = $prm["patients"]; + $where_status = ''; + if ($statusid === 'NEW') { + $where_status = "AND (ISNULL(T_SamplingQueueLastStatusID) OR T_SamplingQueueLastStatusT_SamplingQueueStatusID <> 5 )"; + } else { + $where_status = "AND T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5"; + } + + // echo $norm; + //$where_status = " AND {$where_status}"; + + $sql_where = "WHERE T_OrderHeaderLabNumber = '{$search}' AND T_OrderHeaderIsActive = 'Y' {$where_status}"; + $rows = []; + $query = "SELECT t_orderheader.*,m_patient.*, IFNULL(M_PatientPhoto,'') as M_PatientPhotoThumb, + M_SexName, M_TitleName, M_PatientName_enc, M_PatientDOB_enc, M_PatientDOB as patient_dob_raw, M_CompanyName, + IF(ISNULL(T_SamplingQueueLastStatusID), 'New',T_SamplingQueueStatusName) as status, + IF(ISNULL(T_SamplingQueueLastStatusID), 0,T_SamplingQueueLastStatusT_SamplingQueueStatusID) as statusid, T_SampleStationID, T_SampleTypeID, + {$stationid} as stationid, + fn_global_check_is_cito(T_OrderHeaderID) as iscito + FROM t_orderheader + JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID + JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID + JOIN m_title ON M_PatientM_TitleID = M_TitleID + JOIN m_sex ON M_PatientM_SexID = M_SexID + JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID + JOIN t_test ON T_OrderDetailT_TestID = T_TestID + JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID + JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID + JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} AND T_SampleStationIsNonLab = 'OTHERS' + JOIN last_status ON Last_StatusT_OrderHeaderID = T_OrderHeaderID AND ( Last_StatusM_StatusID = 3 OR Last_StatusM_StatusID = 5 ) + LEFT JOIN t_sampling_queue_last_status ON + T_SamplingQueueLastStatusT_SampleStationID = T_SampleStationID AND + T_SamplingQueueLastStatusT_OrderHeaderID = T_OrderHeaderID + LEFT JOIN t_sampling_queue_status ON T_SamplingQueueLastStatusT_SamplingQueueStatusID = T_SamplingQueueStatusID + LEFT JOIN t_ordersamplereq ON T_OrderSampleReqT_SampleStationID = T_SampleStationID AND T_OrderSampleReqT_OrderSampleID + $sql_where + GROUP BY T_OrderHeaderID + ORDER BY T_OrderHeaderID DESC + limit 1"; + //echo $query; + $rows = $this->db_onedev->query($query)->row(); + + $result = array( + "total" => count($rows), + "records" => $rows, + ); + $this->sys_ok($result); + exit; + } + + function getrequirements($prm) + { + + $rows = array(); + $query = " + SELECT Nat_RequirementID as id, + Nat_RequirementName as name, 'P' as status, + if(ISNULL(T_SamplingSoRequirementID),'N', if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N') ) as chex, + Nat_RequirementPositionNat_PositionID as positionid + FROM nat_requirement + JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID + JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND Nat_RequirementPositionNat_PositionID = 12 AND + Nat_RequirementPositionIsActive = 'Y' + JOIN t_test ON T_TestNat_TestID = Nat_TestRequirementNat_TestID + JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = {$prm['orderid']} AND T_SamplingSoT_TestID = {$prm['sampletypeid']} AND + T_SamplingSoIsActive = 'Y' + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = {$prm['samplingso_id']} AND + T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND + T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID + WHERE + Nat_TestRequirementIsActive = 'Y' + GROUP BY nat_requirementID + "; + $rows = $this->db_onedev->query($query)->result_array(); + + + return $rows; + } + + function saverequirement() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $query = " INSERT INTO t_samplingso_requirement ( + T_SamplingSoRequirementT_OrderHeaderID, + T_SamplingSoRequirementT_SampleStationID, + T_SamplingSoRequirementT_SampletypeID, + T_SamplingSoRequirementStatus, + T_SamplingSoRequirementRequirements, + T_SamplingSoRequirementNote, + T_SamplingSoRequirementNat_PositionID, + T_SamplingSoRequirementUserID, + T_SamplingSoRequirementCreated + )VALUES( + {$prm['T_OrderHeaderID']}, + {$prm['stationid']}, + {$prm['sample']['T_SampleTypeID']}, + 'N', + + )"; + //echo $query; + $rows = $this->db_onedev->query($query)->result_array(); + + + $result = array( + "total" => count($rows), + "records" => $rows, + ); + $this->sys_ok($result); + exit; + } + + + function searchcompany() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + + $max_rst = 12; + $tot_count = 0; + + $q = [ + 'search' => '%' + ]; + + if ($prm['search'] != '') { + $q['search'] = "%{$prm['search']}%"; + } + + // QUERY TOTAL + $sql = "SELECT count(*) as total + FROM m_company + WHERE + M_CompanyName like ? + AND M_CompanyIsActive = 'Y'"; + $query = $this->db_onedev->query($sql, $q['search']); + //echo $query; + if ($query) { + $tot_count = $query->result_array()[0]["total"]; + } else { + $this->sys_error_db("m_city count", $this->db_onedev); + exit; + } + $rows = array('id' => 0, 'name' => 'Semua'); + $sql = " + SELECT M_CompanyID as id, M_CompanyName as name + FROM m_company + WHERE + M_CompanyName like ? + AND M_CompanyIsActive = 'Y' + ORDER BY M_CompanyName DESC + "; + $query = $this->db_onedev->query($sql, array($q['search'])); + + if ($query) { + $rows = $query->result_array(); + array_push($rows, array('id' => 0, 'name' => 'Semua')); + //echo $this->db_onedev->last_query(); + $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows)); + $this->sys_ok($result); + } else { + $this->sys_error_db("m_company rows", $this->db_onedev); + exit; + } + } + function clinicAction() + { + $prm = $this->sys_input; + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $sql = "SELECT + orderID, + orderQueueNumber AS queueNumber, + orderM_LocationID AS locationID, + M_LocationName AS locationName, + M_LocationT_SampleStationID AS stationID + FROM one_klinik.order + JOIN m_location ON orderM_LocationID = M_LocationID + WHERE orderID = {$prm['id']}"; + $qry = $this->db_onedev->query($sql); + if (!$qry) { + $this->sys_error($this->db_onedev); + exit; + } + $location = $qry->row_array(); + if ($location && $prm['is_clinic'] == "Y") { + + $userid = $this->sys_user["M_UserID"]; + $locationID = $location['locationID']; + $locationName = $location['locationName']; + $queueNumber = $location['queueNumber']; + $stationID = $location['stationID']; + $splitedLocationName = explode(" ", $locationName); + $locationName = $splitedLocationName[0]; + $next_status = $prm['statusnextid']; + + $query = "INSERT INTO t_sampling_clinic_queue_last_status ( + T_SamplingQueueLastStatusT_SampleStationID, + T_SamplingQueueLastStatusT_OrderHeaderID, + T_SamplingQueueLastStatusT_SamplingQueueStatusID, + T_SamplingQueueLastStatusUserID) + VALUES( + {$stationID}, + {$prm['id']}, + {$next_status}, + {$userid}) ON DUPLICATE KEY UPDATE T_SamplingQueueLastStatusT_SamplingQueueStatusID = {$next_status}"; + //echo $query; + $rows = $this->db_onedev->query($query); + if (!$rows) { + $this->sys_error_db($this->db_onedev); + exit; + } + $last_query = $this->db_onedev->last_query(); + + if ($prm['act'] == 'skip') { + $skip_time = date('Y-m-d H:i:s', strtotime($prm['skiptime']) + 10); + $sql = "UPDATE antrian_samplestation SET AntrianSampleStationIsActive = 'N' + WHERE + AntrianSampleStationOrderID = ?"; + $query = $this->db_onedev->query($sql, array($prm['id'])); + if (!$query) { + $this->sys_error_db($this->db_onedev); + exit; + } + /* 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, + AntrianSampleStationOrderID + ) + VALUES( + 0,?,?,NOW(),? + )"; + $query = $this->db_onedev->query($sql, array($skip_time, $userid, $prm['id'])); + if (!$query) { + $this->sys_error_db($this->db_onedev); + exit; + } + } + // {"status":"OK","data":{"total":1,"records":{"status":"OK"}}} + // $this->sys_ok(); + if (intval($next_status) == 1) { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/call.sm.{$locationID}.{$queueNumber}.{$locationName}"); //CALL NODE + } else if (intval($next_status) == 2) { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/skip.sm.{$locationID}"); + } else if (intval($next_status) == 3) { + $this->klinikordestatuschange($prm['id'], "Y"); + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/serve.sm.{$locationID}"); + } else if (intval($next_status) == 5) { + $this->klinikordestatuschange($prm['id'], "D"); + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); + } else { + $this->klinikordestatuschange($prm['id'], "D"); + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); + } + + + $result = array( + "total" => 1, + "records" => array('status' => 'OK'), + "last_query" => $last_query + ); + $this->sys_ok($result); + } else { + $this->sys_error("Data No found"); + } + } + + function getmenuurl() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $sql = "SELECT + S_MenuName, + S_MenuUrl + FROM s_menu + WHERE S_MenuName = 'periksa dokter' + AND S_MenuIsActive = 'Y'"; + $query = $this->db_onedev->query($sql, array()); + if (!$query) { + $this->sys_error_db($this->db_onedev); + exit; + } + $data = $query->row_array(); + $this->sys_ok($data); + } + function klinikordestatuschange($id, $status) + { + + $sql = "UPDATE one_klinik.order + SET orderIsCheck = '$status' + WHERE orderID = ?"; + $query = $this->db_onedev->query($sql, array($id)); + if (!$query) { + $message = $this->db_onedev->error(); + $this->sys_error($message); + exit; + } + } + function doaction() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rst_data = array('status' => 'OK'); + $status_call = array('status' => 'OK', 'data' => array()); + $prm = $this->sys_input; + $userid = $this->sys_user["M_UserID"]; + if ($prm['staff']['id'] != 0 || $prm['staff']['id'] != '0') { + $userid = $prm['staff']['userid']; + } + + + $sql = "SELECT T_OrderHeaderQueue 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 = {$prm['stationid']} + WHERE T_OrderHeaderID={$prm['id']}"; + if ($prm['is_clinic'] == "Y") { + $sql = "SELECT + orderID, + orderQueueNumber AS queueNumber, + orderM_LocationID AS locationID, + M_LocationName AS locationName + FROM one_klinik.order + JOIN m_location ON orderM_LocationID = M_LocationID + WHERE orderID = {$prm['id']}"; + } + $location = $this->db_onedev->query($sql)->row_array(); + $locationID = $location['locationID']; + $locationName = $location['locationName']; + $queueNumber = $location['queueNumber']; + $splitedLocationName = explode(" ", $locationName); + $locationName = $splitedLocationName[0]; + + if ($prm['act'] == 'call') { + $sql = "SELECT if(fn_sampling_available_call({$prm['id']},{$prm['stationid']})=0,'Y','N') as status_call"; + $sql = "SELECT T_SamplingQueueLastStatusID, T_SamplingQueueStatusName, T_SampleStationName, T_SampleStationID + FROM t_sampling_queue_last_status + JOIN t_sampling_queue_status ON T_SamplingQueueLastStatusT_SamplingQueueStatusID = T_SamplingQueueStatusID + JOIN t_samplestation ON T_SamplingQueueLastStatusT_SampleStationID = T_SampleStationID + JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_SamplingQueueLastStatusT_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 AND T_BahanT_SampleStationID = T_SampleStationID + WHERE + T_SamplingQueueLastStatusT_OrderHeaderID = {$prm['id']} AND + T_SamplingQueueLastStatusT_SampleStationID <> {$prm['stationid']} AND + T_SamplingQueueLastStatusT_SamplingQueueStatusID IN (1,3) LIMIT 1"; + // union tanpaorderheader + $data_status_call = $this->db_onedev->query($sql)->row_array(); + if ($data_status_call) { + $sql = "SELECT COUNT(*) as notdone + FROM t_ordersample + JOIN t_samplestation ON T_SampleStationID = {$data_status_call['T_SampleStationID']} AND + T_SampleStationIsNonLab = '' + WHERE + T_OrderSampleT_OrderHeaderID = {$prm['id']} AND T_OrderSampleReceive = 'N' + UNION + SELECT COUNT(*) as notdone + FROM t_samplingso + JOIN t_samplestation ON T_SampleStationID = {$data_status_call['T_SampleStationID']} AND + T_SampleStationIsNonLab <> '' + WHERE + T_SamplingSoT_OrderHeaderID = {$prm['id']} AND T_SamplingSoDoneDate IS NULL + "; + //union order yang is cek Y + //echo $sql; + $data_not_done = $this->db_onedev->query($sql)->row_array(); + if (intval($data_not_done['notdone']) > 0) + $status_call = array('status' => 'NOTCALL', 'data' => $data_status_call); + else { + $sql = "UPDATE t_sampling_queue_last_status + SET + T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5, + T_SamplingQueueLastStatusLastUpdated = NOW() + WHERE + T_SamplingQueueLastStatusT_OrderHeaderID = {$prm['id']} AND + T_SamplingQueueLastStatusT_SampleStationID = {$data_status_call['T_SampleStationID']} + "; + $update_to_done = $this->db_onedev->query($sql); + $status_call = array('status' => 'OK', 'data' => array()); + } + } + //echo $sql; + } + + $next_status = $prm['statusnextid']; + if ($prm['act'] == 'process') { + $sql = "SELECT + T_OrderHeaderID, + T_OrderDetailID as id, + T_OrderDetailT_TestCode, + T_OrderDetailT_TestName, + T_TestID as test_id, + 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 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 = {$prm['stationid']} + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoIsActive = 'Y' + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND + T_SamplingSoRequirementT_SampleStationID = T_SampleStationID AND + T_SamplingSoRequirementIsActive = 'Y' + WHERE + T_OrderHeaderID = {$prm['id']} AND T_OrderHeaderIsActive = 'Y' AND + (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) { + $sql = "INSERT INTO t_samplingso ( + T_SamplingSoT_SampleStationID, + T_SamplingSoT_OrderHeaderID, + T_SamplingSoT_TestID, + T_SamplingSoProcessDate, + T_SamplingSoProcessTime, + T_SamplingSoProcessUserID, + T_SamplingSoCreated, + T_SamplingSoUserID + ) + VALUES( + {$prm['stationid']}, + {$prm['id']}, + {$v->test_id}, + CURDATE(), + CURTIME(), + {$userid}, + NOW(), + {$userid} + ) ON DUPLICATE KEY UPDATE + T_SamplingSoProcessDate = CURDATE(), + T_SamplingSoProcessTime = CURTIME(), + T_SamplingSoFlag = 'P', + T_SamplingSoIsActive = 'Y', + T_SamplingSoProcessUserID = {$userid}, + T_SamplingSoUserID = {$userid}"; + //echo $sql; + $this->db_onedev->query($sql); + + $sql = "INSERT INTO sample_so_by_step ( + SampleSoByStepT_OrderHeaderID, + SampleSoByStepT_TestID, + SampleSoByStepCode, + SampleSoByStepDateTime, + SampleSoByStepUserID + ) + VALUES( + {$prm['id']}, + {$v->test_id}, + 'SAMPLING.Sampling.Sampled', + NOW(), + {$userid} + )"; + $this->db_onedev->query($sql); + } + } + //$this->broadcast("specimen-col-process"); + } + + if ($prm['act'] == 'samplingdone') { + $sql = "INSERT INTO t_samplingso ( + T_SamplingSoT_SampleStationID, + T_SamplingSoT_OrderHeaderID, + T_SamplingSoT_TestID, + T_SamplingSoDoneDate, + T_SamplingSoDoneTime, + T_SamplingSoDoneUserID, + T_SamplingSoCreated, + T_SamplingSoUserID + ) + VALUES( + {$prm['stationid']}, + {$prm['id']}, + {$prm['sample']['test_id']}, + CURDATE(), + CURTIME(), + {$userid}, + NOW(), + {$userid} + ) ON DUPLICATE KEY UPDATE + T_SamplingSoDoneDate = CURDATE(), + T_SamplingSoDoneTime = CURTIME(), + T_SamplingSoFlag = 'D', + T_SamplingSoIsActive = 'Y', + T_SamplingSoDoneUserID = {$userid}, + T_SamplingSoUserID = {$userid}"; + $this->db_onedev->query($sql); + //echo $sql; + $xreq = $prm['sample']['requirements']; + $arr_requirements = array(); + foreach ($xreq as $k => $v) { + if ($v['chex'] == 'Y') + array_push($arr_requirements, $v['id']); + } + + $requirements = '[' . join(',', $arr_requirements) . ']'; + + $sql = "UPDATE t_samplingso_requirement SET + T_SamplingSoRequirementIsActive = 'N', + T_SamplingSoRequirementDeleted = NOW(), + T_SamplingSoRequirementDeletedUserID = {$userid} + WHERE + T_SamplingSoRequirementT_OrderHeaderID = {$prm['id']} AND + T_SamplingSoRequirementT_SampleStationID = {$prm['stationid']} AND + T_SamplingSoRequirementT_SamplingSoID = {$prm['sample']['T_SamplingSoID']} AND + T_SamplingSoRequirementIsActive = 'Y'"; + $this->db_onedev->query($sql); + + $sql = "INSERT INTO t_samplingso_requirement( + T_SamplingSoRequirementT_OrderHeaderID, + T_SamplingSoRequirementT_SampleStationID, + T_SamplingSoRequirementT_SamplingSoID, + T_SamplingSoRequirementNat_PositionID, + T_SamplingSoRequirementStatus, + T_SamplingSoRequirementRequirements, + T_SamplingSoRequirementUserID, + T_SamplingSoRequirementCreated + ) + VALUES( + {$prm['id']}, + {$prm['stationid']}, + {$prm['sample']['T_SamplingSoID']}, + {$prm['sample']['requirements'][0]['positionid']}, + '{$prm['sample']['requirement_status']}', + '{$requirements}', + {$userid}, + NOW() + )"; + //echo $sql; + $this->db_onedev->query($sql); + + $this->load->library('Nonlabtemplate'); + $gen_template = $this->nonlabtemplate->generate($prm['sample']['T_SamplingSoID']); + + + $sql = "INSERT INTO sample_so_by_step ( + SampleSoByStepT_OrderHeaderID, + SampleSoByStepT_TestID, + SampleSoByStepCode, + SampleSoByStepRequirementStatus, + SampleSoByStepReuirements, + SampleSoByStepDateTime, + SampleSoByStepUserID + ) + VALUES( + {$prm['id']}, + {$prm['sample']['test_id']}, + 'SAMPLING.Sampling.Received', + '{$prm['sample']['requirement_status']}', + '{$requirements}', + NOW(), + {$userid} + )"; + $this->db_onedev->query($sql); + + $sql = "SELECT COUNT(*) as xcount + FROM ( + SELECT T_SamplingSoID, T_SamplingSoFlag ,T_OrderDetailT_TestID, T_OrderDetailID + FROM t_orderdetail + 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 = {$prm['stationid']} + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoIsActive = 'Y' + WHERE + T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' + GROUP BY T_TestID + HAVING ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X' + ) xx"; + //echo $sql; + $xcount = $this->db_onedev->query($sql)->row()->xcount; + $rst_data = array('status' => 'PARTIAL'); + if ($xcount == 0) { + $next_status = 5; + $rst_data = array('status' => 'OK'); + } + //$this->broadcast("specimen-col-receive"); + } + + if ($prm['act'] !== 'samplingprocess' && $status_call['status'] == 'OK') { + $dt_json = json_encode(array('T_SampleStationID' => $prm['stationid'], 'T_OrderHeaderID' => $prm['id'], '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 = {$prm['stationid']} AND + T_SamplingQueueLastStatusT_OrderHeaderID = {$prm['id']} AND + T_SamplingQueueLastStatusIsActive = 'Y'"; + $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( + {$prm['stationid']}, + {$prm['id']}, + {$next_status}, + {$userid}) ON DUPLICATE KEY UPDATE T_SamplingQueueLastStatusT_SamplingQueueStatusID = {$next_status}"; + //echo $query; + $rows = $this->db_onedev->query($query); + } + + if ($prm['act'] == 'reject') { + $sql = "INSERT INTO t_samplingso ( + T_SamplingSoT_OrderHeaderID, + T_SamplingSoT_SampleTypeID, + T_SamplingSoT_BarcodeLabID, + T_SamplingSoUserID + ) + VALUES( + {$prm['sample']['T_OrderHeaderID']}, + {$prm['sample']['T_SampleTypeID']}, + {$prm['sample']['T_BarcodeLabID']}, + {$userid} + ) ON DUPLICATE KEY UPDATE + T_SamplingSoDoneDate = NULL, + T_SamplingSoDoneTime = NULL, + T_SamplingSoDoneUserID = NULL, + T_SamplingSoProcessDate = NULL, + T_SamplingSoProcessTime = NULL, + T_SamplingSoProcessUserID = NULL, + T_SamplingSoFlag = 'X', + T_SamplingSoIsActive = 'N', + T_SamplingSoUserID = {$userid}"; + $this->db_onedev->query($sql); + + $next_status = 2; + $dt_json = json_encode(array('T_SampleStationID' => $prm['stationid'], 'T_OrderHeaderID' => $prm['sample']['T_OrderHeaderID'], '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 = {$prm['stationid']} AND + T_SamplingQueueLastStatusT_OrderHeaderID = {$prm['sample']['T_OrderHeaderID']} AND + T_SamplingQueueLastStatusIsActive = 'Y'"; + $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( + {$prm['stationid']}, + {$prm['sample']['T_OrderHeaderID']}, + {$next_status}, + {$userid}) ON DUPLICATE KEY UPDATE T_SamplingQueueLastStatusT_SamplingQueueStatusID = {$next_status}"; + //echo $query; + $rows = $this->db_onedev->query($query); + } + + if ($status_call['status'] == 'NOTCALL') { + $rst_data = $status_call; + } + + if ($prm['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)); + } + + if (intval($next_status) == 1) { + if ($status_call['status'] == 'OK') { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/call.sm.{$locationID}.{$queueNumber}.{$locationName}"); //CALL NODE + } + } else if (intval($next_status) == 2) { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/skip.sm.{$locationID}"); + } else if (intval($next_status) == 3) { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/serve.sm.{$locationID}"); + } else if (intval($next_status) == 5) { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); + } else { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); + } + + + $result = array( + "total" => 1, + "records" => $rst_data + ); + $this->sys_ok($result); + + exit; + } + + function getdatanoterequirement() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rst_data = array(); + $prm = $this->sys_input; + + $sql = "SELECT IFNULL(T_OrderHeaderFoNote,'') as fo_note, + fn_getstaffname(T_OrderHeaderFoNoteM_UserID) as fo_note_user, + IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, + fn_getstaffname(T_OrderHeaderVerificationNoteM_UserID) as fo_ver_note_user, + IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, + fn_getstaffname(T_OrderHeaderSamplingNoteM_UserID) as sampling_note_user + FROM t_orderheader + WHERE + T_OrderHeaderID = {$prm['T_OrderHeaderID']}"; + $notes = $this->db_onedev->query($sql)->row_array(); + + $sql = "SELECT 'fo registration' as position,GROUP_CONCAT(DISTINCT Nat_RequirementName separator ',') as requirements + FROM t_orderheader + JOIN t_orderreq ON T_OrderReqT_OrderHeaderID = T_OrderHeaderID + JOIN nat_requirement ON json_contains(T_OrderReqs,Nat_RequirementID) + WHERE T_OrderHeaderID = {$prm['T_OrderHeaderID']} + GROUP BY T_OrderHeaderID"; + //echo $sql; + $query = $this->db_onedev->query($sql)->row_array(); + if ($query) { + array_push($rst_data, $query); + } + + $sql = "SELECT 'fo verifikasi' as position, GROUP_CONCAT(DISTINCT Fo_VerificationsLabelName separator ',') as requirements + FROM fo_verificationsvalue + JOIN fo_verificationslabel ON Fo_VerificationsValueFo_VerificationsLabelID = Fo_VerificationsLabelID + WHERE + Fo_VerificationsValueCheck = 'N' AND + Fo_VerificationsValueT_OrderHeaderID = {$prm['T_OrderHeaderID']} + GROUP BY Fo_VerificationsValueT_OrderHeaderID + "; + //echo $sql; + $query = $this->db_onedev->query($sql)->row_array(); + if ($query) { + array_push($rst_data, $query); + } + + $result = array( + "total" => 1, + "records" => array('notes' => $notes, 'reqs' => $rst_data) + ); + $this->sys_ok($result); + + exit; + } + + function savenotesampling() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rst_data = array(); + $prm = $this->sys_input; + $userid = $this->sys_user["M_UserID"]; + + $sql = "UPDATE t_orderheader SET + T_OrderHeaderSamplingNote = '{$prm['sampling_note']}', + T_OrderHeaderSamplingNoteM_UserID = {$userid} + WHERE + T_OrderHeaderID = {$prm['T_OrderHeaderID']}"; + //echo $sql; + $query = $this->db_onedev->query($sql); + + $result = array( + "total" => 1, + "records" => $rst_data + ); + $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; + } +} diff --git a/application/controllers/mockup/sampling-lab-mobile-cpone-v10/Patient.php b/application/controllers/mockup/sampling-lab-mobile-cpone-v10/Patient.php index c04cd8d7..86243362 100644 --- a/application/controllers/mockup/sampling-lab-mobile-cpone-v10/Patient.php +++ b/application/controllers/mockup/sampling-lab-mobile-cpone-v10/Patient.php @@ -12,6 +12,7 @@ class Patient extends MY_Controller parent::__construct(); $this->db_onedev = $this->load->database("onedev", true); $this->load->library('Nonlabtemplate'); + $this->load->library('ibl_encryptor'); $this->IP_SOCKET_IO = "127.0.0.1"; } @@ -127,16 +128,16 @@ class Patient extends MY_Controller 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_PatientName_enc as patient_name_enc, M_PatientNoReg as noreg, M_SexName as gender, - DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as dob, + M_PatientDOB_enc as dob_enc, M_PatientDOB as dob_raw, 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_PatientHP_enc as hp_enc, + M_PatientNIP_enc as nip_enc, + M_PatientEmail_enc as email_enc, M_PatientPhoto as photo, T_OrderHeaderID as xid, 0 as testid, @@ -208,6 +209,15 @@ class Patient extends MY_Controller } $data_patient = $query->row_array(); + if ($data_patient) { + $enc = $this->ibl_encryptor; + $data_patient['patient_name'] = $enc->decrypt($data_patient['patient_name_enc'] ?? '') ?? ''; + $data_patient['hp'] = $enc->decrypt($data_patient['hp_enc'] ?? '') ?? ''; + $data_patient['email'] = $enc->decrypt($data_patient['email_enc'] ?? '') ?? ''; + $data_patient['nip'] = $enc->decrypt($data_patient['nip_enc'] ?? '') ?? ''; + $data_patient['dob'] = $enc->decrypt($data_patient['dob_enc'] ?? '') ?? date('d-m-Y', strtotime($data_patient['dob_raw'] ?? 'now')); + unset($data_patient['patient_name_enc'], $data_patient['hp_enc'], $data_patient['email_enc'], $data_patient['nip_enc'], $data_patient['dob_enc'], $data_patient['dob_raw']); + } if (intval($stationid) == 11 || intval($stationid) == 35) { $sql = "SELECT T_SamplingAdditionalFisikBBTBID, diff --git a/application/controllers/mockup/samplingelectromedis-v5/Samplingcall.php b/application/controllers/mockup/samplingelectromedis-v5/Samplingcall.php index cad99db6..9bdf79eb 100644 --- a/application/controllers/mockup/samplingelectromedis-v5/Samplingcall.php +++ b/application/controllers/mockup/samplingelectromedis-v5/Samplingcall.php @@ -1,1128 +1,1129 @@ -db_onedev = $this->load->database("onedev", true); - // $this->IP_SOCKET_IO = "devone.aplikasi.web.id"; - $this->IP_SOCKET_IO = "localhost"; - } - - function getsampletypes() - { - - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $orderid = $prm['orderid']; - $stationid = $prm['stationid']; - $statusid = $prm['statusid']; - $rows = array(); - - $sql = "SELECT SUM(xcount) as cnt - FROM ( - SELECT COUNT(*) as xcount - FROM t_orderdetail - 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} AND - T_SampleStationIsNonLab = 'ELEKTROMEDIS' - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoT_SampleStationID = T_SampleStationID AND - T_SamplingSoIsActive = 'Y' - WHERE - T_OrderDetailT_OrderHeaderID = {$orderid} AND T_OrderDetailIsActive = 'Y' AND - ISNULL(T_SamplingSoDoneDate) - - ) x"; - //echo $sql; - $x_exist = $this->db_onedev->query($sql)->row_array(); - if (intval($x_exist['cnt']) != 0) { - $sql = "UPDATE t_sampling_queue_last_status - SET - T_SamplingQueueLastStatusT_SamplingQueueStatusID = 2 - WHERE - T_SamplingQueueLastStatusT_OrderHeaderID = '{$orderid}' AND - T_SamplingQueueLastStatusT_SampleStationID = {$stationid} AND - T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5"; - //echo $sql; - $this->db_onedev->query($sql); - } - - $sql = "SELECT T_OrderDetailID as id, - T_OrderHeaderID as orderid, - T_TestCode as test_code, - T_TestName as test_name, - T_TestID as test_id, - 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, - IF(ISNULL(T_SamplingSoRequirementID),'X',T_SamplingSoRequirementStatus) as requirement_status, - '' as requirements, - DocumentationGroupName as type, - IF(DocumentationGroupName = 'xray',IF(ISNULL(T_SamplingSoFormExpose),'N','Y'),'Y') as fill_form, - IFNULL(T_SamplingSoFormKv,'') as form_kv, - IFNULL(T_SamplingSoFormMa,'') as form_ma, - IFNULL(T_SamplingSoFormSecond,'') as form_second, - IFNULL(T_SamplingSoFormExpose,'') as form_expose - FROM t_orderheader - JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' - 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} AND - T_SampleStationIsNonLab = 'ELEKTROMEDIS' - JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID - JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoT_SampleStationID = T_SampleStationID AND - T_SamplingSoIsActive = 'Y' - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND - T_SamplingSoRequirementT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoRequirementNat_PositionID = 8 AND - T_SamplingSoRequirementIsActive = 'Y' - LEFT JOIN t_samplingso_form ON T_SamplingSoFormT_SamplingSOID = T_SamplingSOID AND T_SamplingSoFormIsActive = 'Y' - WHERE - T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' - GROUP BY T_OrderDetailID"; - //echo $sql; - $rows['sampletypes'] = $this->db_onedev->query($sql)->result_array(); - if ($rows) { - foreach ($rows['sampletypes'] as $k => $v) { - $zxprm = array(); - $zxprm['status'] = $v['status']; - $zxprm['orderdetailid'] = $v['id']; - $zxprm['orderid'] = $v['orderid']; - $zxprm['sampletypeid'] = $v['test_id']; - $rows['sampletypes'][$k]['requirements'] = $this->getrequirements($zxprm); - } - } - - $sql = "SELECT T_BahanID as id, T_BahanName, - IF(T_TestIsNonLab = '',fn_sampling_receive_status_by_bahan_lab({$orderid},T_SampleTypeID),fn_sampling_receive_status_by_bahan_so({$orderid},T_TestID)) as status_bahan - FROM t_orderdetail - 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_OrderDetailT_OrderHeaderID AND T_BarcodeLabT_SampleTypeID = T_SampleTypeID - JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID - WHERE - T_OrderDetailT_OrderHeaderID = {$orderid} - GROUP BY T_BahanID"; - //echo $sql; - $rows['information_bahan'] = $this->db_onedev->query($sql)->result_array(); - $result = array("total" => count($rows), "records" => $rows, "sql" => $this->db_onedev->last_query()); - $this->sys_ok($result); - exit; - } - - function fillform() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $userid = $this->sys_user["M_UserID"]; - $sql = "INSERT INTO t_samplingso_form( - T_SamplingSoFormT_SamplingSOID, - T_SamplingSoFormKv, - T_SamplingSoFormMa, - T_SamplingSoFormSecond, - T_SamplingSoFormExpose, - T_SamplingSoFormUserID, - T_SamplingSoFormCreated, - T_SamplingSoFormLastUpdated - ) - VALUES( - {$prm['T_SamplingSoID']}, - {$prm['form_kv']}, - {$prm['form_ma']}, - {$prm['form_second']}, - '{$prm['form_expose']}', - {$userid}, - NOW(), - NOW() - )ON DUPLICATE KEY UPDATE - T_SamplingSoFormKv = {$prm['form_kv']}, - T_SamplingSoFormMa = {$prm['form_ma']}, - T_SamplingSoFormSecond = {$prm['form_second']}, - T_SamplingSoFormExpose = {$prm['form_expose']}, - T_SamplingSoFormUserID = {$userid}"; - //echo $sql; - $this->db_onedev->query($sql); - - $result = array("status" => "OK"); - $this->sys_ok($result); - exit; - } - - public function search() - { - $prm = $this->sys_input; - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - - $name = $prm["name"]; - $nolab = $prm["nolab"]; - $stationid = $prm["stationid"]; - $statusid = $prm["statusid"]; - $xdate = $prm["xdate"]; - $companyid = isset($prm["companyid"]) ? $prm["companyid"] : 0; - $search = isset($prm["searchx"]) ? $prm["searchx"] : ''; - $locationID = $prm['locationid']; - $filter_companyid = ''; - if ($companyid != 0 || $companyid != '0') { - $filter_companyid = " AND M_CompanyID = {$companyid} "; - } - - $where_status = " AND ( ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X')"; - $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND ( DATE(T_OrderHeaderAddonIsComingDate) = '{$xdate}' OR DATE(T_OrderHeaderDate) = '{$xdate}' ) {$where_status}"; - - if ($nolab != "") { - if ($sql_where != "") { - $sql_where .= " and "; - } - $sql_where .= "( T_OrderHeaderLabNumber like '%$nolab%' OR M_PatientName like '%$nolab%' OR T_OrderHeaderLabNumberExt like '%$nolab%' )"; - } - - if ($search != '') { - $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderLabNumber = '{$search}'"; - } - - $sql = "SELECT * FROM ( - SELECT DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date, - t_orderheader.*, - DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as dob, - m_patient.*, - M_SexName, - M_TitleName, - CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, - M_CompanyName, - fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status, - DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as patient_dob, - fn_sampling_queue_status_id(T_OrderHeaderID,T_SampleStationID) as statusid, - T_SampleStationID, - T_TestID, - {$stationid} as stationid, - T_OrderPromiseDateTime, - T_OrderHeaderIsCito as iscito, - IFNULL(T_OrderHeaderFoNote,'') as fo_note, - IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, - fn_sampling_reqs(T_OrderHeaderID) as fo_requirements, - '' as htmlforeqs, - IF(fn_fo_ver_have_reqs(T_OrderHeaderID) = 0,'Y','N') as fo_ver_status_req, - fn_fo_reg_have_reqs(T_OrderHeaderID) as fo_reg_status_req, - fn_sampling_reqs_status(T_OrderHeaderID) as fo_requirements_status, - IF(fn_fo_get_verification_status(T_OrderHeaderID) = 0, 'X','Y') as fo_verification_status, - IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, - fn_sampling_queue_status_confirm(T_OrderHeaderID,T_SampleStationID) as status_confirm, - CONCAT(M_DoctorPrefix,M_DoctorPrefix2,' ',M_DoctorName,' ',M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as doctor_sender, - fn_fo_get_laststatus(T_OrderHeaderID) as last_status_fo, - T_OrderHeaderAddonIsComing as status_coming, - T_OrderLocationID as order_location_id, - IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as antri_time, - IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as skip_time - FROM t_orderheader - JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID - JOIN m_doctor ON T_OrderHeaderSenderM_DoctorID = M_DoctorID - JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_companyid - JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID - JOIN m_title ON M_PatientM_TitleID = M_TitleID - JOIN m_sex ON M_PatientM_SexID = M_SexID - JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND T_OrderLocationT_SampleStationID = {$stationid} AND T_OrderLocationIsActive = 'Y' - LEFT JOIN antrian_samplestation ON AntrianSampleStationT_OrderLocationID =T_OrderLocationID AND AntrianSampleStationIsActive = 'Y' - JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND M_LocationID = {$locationID} - LEFT JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' - 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} AND T_SampleStationIsNonLab = 'ELEKTROMEDIS' - JOIN last_status ON Last_StatusT_OrderHeaderID = T_OrderHeaderID - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoT_SampleStationID = T_SampleStationID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoIsActive = 'Y' - - $sql_where - GROUP BY T_OrderHeaderID - HAVING last_status_fo IN (3,5) - ) x - ORDER BY T_OrderHeaderIsCito DESC, antri_time ASC - "; - //echo $sql; - $query = $this->db_onedev->query($sql); - // echo $this->db_onedev->last_query(); - $rows = $query->result_array(); - if ($rows) { - $count_arr = count($rows); - foreach ($rows as $key => $value) { - if ($key + 1 != $count_arr) { - $rows[$key]['skip_time'] = $rows[$key + 1]['antri_time']; - } - } - } - $result = array("total" => count($rst), "records" => $rows, "sql" => $this->db_onedev->last_query()); - $this->sys_ok($result); - exit; - } - - function searchcompany() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - - $max_rst = 12; - $tot_count = 0; - - $q = [ - 'search' => '%' - ]; - - if ($prm['search'] != '') { - $q['search'] = "%{$prm['search']}%"; - } - - // QUERY TOTAL - $sql = "SELECT count(*) as total - FROM m_company - WHERE - M_CompanyName like ? - AND M_CompanyIsActive = 'Y'"; - $query = $this->db_onedev->query($sql, $q['search']); - //echo $query; - if ($query) { - $tot_count = $query->result_array()[0]["total"]; - } else { - $this->sys_error_db("m_city count", $this->db_onedev); - exit; - } - $rows = array('id' => 0, 'name' => 'Semua'); - $sql = " - SELECT M_CompanyID as id, M_CompanyName as name - FROM m_company - WHERE - M_CompanyName like ? - AND M_CompanyIsActive = 'Y' - ORDER BY M_CompanyName DESC - "; - $query = $this->db_onedev->query($sql, array($q['search'])); - - if ($query) { - $rows = $query->result_array(); - array_push($rows, array('id' => 0, 'name' => 'Semua')); - //echo $this->db_onedev->last_query(); - $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows)); - $this->sys_ok($result); - } else { - $this->sys_error_db("m_company rows", $this->db_onedev); - exit; - } - } - - function getstationstatus() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rows = []; - $query = " SELECT T_SampleStationID as id, T_SampleStationName as name - FROM t_samplestation - WHERE - T_SampleStationIsActive = 'Y' AND T_SampleStationIsNonLab = 'ELEKTROMEDIS' - "; - //echo $query; - $rows['stations'] = $this->db_onedev->query($query)->result_array(); - $rows['statuses'] = array(array('id' => 'NEW', 'name' => 'New'), array('id' => 'DONE', 'name' => 'Done')); - - $result = array( - "total" => count($rows), - "records" => $rows, - ); - $this->sys_ok($result); - exit; - } - - function search_staff() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $rows = []; - $query = " SELECT M_StaffID as id, M_StaffName as name, M_StaffCode as code, M_UserID as userid - FROM m_staff - JOIN m_user ON M_UserM_StaffID = M_StaffID AND M_UserIsActive = 'Y' - WHERE - M_StaffIsActive = 'Y' AND M_StaffCode = '{$prm['search']}' LIMIT 1 - "; - //echo $query; - $rows = $this->db_onedev->query($query)->row_array(); - - $result = array( - "total" => count($rows), - "records" => $rows, - ); - $this->sys_ok($result); - exit; - } - - function search_patient() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $search = '%' . $prm["search"] . '%'; - $stationid = $prm["stationid"]; - $statusid = $prm["statusid"]; - $patients = $prm["patients"]; - $where_status = ''; - if ($statusid === 'NEW') { - $where_status = "AND (ISNULL(T_SamplingQueueLastStatusID) OR T_SamplingQueueLastStatusT_SamplingQueueStatusID <> 5 )"; - } else { - $where_status = "AND T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5"; - } - - // echo $norm; - //$where_status = " AND {$where_status}"; - - $sql_where = "WHERE T_OrderHeaderLabNumber LIKE '{$search}' AND T_OrderHeaderIsActive = 'Y' {$where_status}"; - $rows = []; - $query = "SELECT t_orderheader.*,m_patient.*, IFNULL(M_PatientPhoto,'') as M_PatientPhotoThumb, - M_SexName, M_TitleName, CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, M_CompanyName, - IF(ISNULL(T_SamplingQueueLastStatusID), 'New',T_SamplingQueueStatusName) as status, DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as patient_dob, - IF(ISNULL(T_SamplingQueueLastStatusID), 0,T_SamplingQueueLastStatusT_SamplingQueueStatusID) as statusid, T_SampleStationID, T_SampleTypeID, - {$stationid} as stationid, - fn_global_check_is_cito(T_OrderHeaderID) as iscito, - T_SamplingQueueLastStatusConfirm as status_confirm - FROM t_orderheader - JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID - JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID - JOIN m_title ON M_PatientM_TitleID = M_TitleID - JOIN m_sex ON M_PatientM_SexID = M_SexID - JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID - JOIN t_test ON T_OrderDetailT_TestID = T_TestID - JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID - JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID - JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} AND T_SampleStationIsNonLab = 'ELEKTROMEDIS' - JOIN last_status ON Last_StatusT_OrderHeaderID = T_OrderHeaderID AND ( Last_StatusM_StatusID = 3 OR Last_StatusM_StatusID = 5 ) - LEFT JOIN t_sampling_queue_last_status ON - T_SamplingQueueLastStatusT_SampleStationID = T_SampleStationID AND - T_SamplingQueueLastStatusT_OrderHeaderID = T_OrderHeaderID - LEFT JOIN t_sampling_queue_status ON T_SamplingQueueLastStatusT_SamplingQueueStatusID = T_SamplingQueueStatusID - LEFT JOIN t_ordersamplereq ON T_OrderSampleReqT_SampleStationID = T_SampleStationID AND T_OrderSampleReqT_OrderSampleID - $sql_where - GROUP BY T_OrderHeaderID - ORDER BY T_OrderHeaderID DESC - limit 1"; - //echo $query; - $rows = $this->db_onedev->query($query)->row(); - - $result = array( - "total" => count($rows), - "records" => $rows, - ); - $this->sys_ok($result); - exit; - } - - /*function getrequirements($prm){ - - - $query =" SELECT Nat_RequirementID as id, - Nat_RequirementName as name, '{$prm['status']}' as status, - if(ISNULL(T_SamplingSoRequirementID),'N', if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N') ) as chex, - Nat_RequirementPositionNat_PositionID as positionid - FROM nat_requirement - JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID - JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND Nat_RequirementPositionNat_PositionID = 8 AND - Nat_RequirementPositionIsActive = 'Y' - JOIN t_test ON T_TestNat_TestID = Nat_TestRequirementNat_TestID - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND - T_SamplingSoRequirementT_SampletypeID = {$prm['sampletypeid']} AND T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID - WHERE - Nat_TestRequirementIsActive = 'Y' - "; - //echo $query; - $rows = $this->db_onedev->query($query)->result_array(); - - - return $rows; - }*/ - - function getrequirements($prm) - { - - $rows = array(); - $query = " - SELECT Nat_RequirementID as id, - Nat_RequirementName as name, 'P' as status, - if(ISNULL(T_SamplingSoRequirementID),'N', - if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N')) as chex, - Nat_RequirementPositionNat_PositionID as positionid - FROM nat_requirement - JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID - JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND - Nat_RequirementPositionNat_PositionID = 8 AND - Nat_RequirementPositionIsActive = 'Y' - JOIN t_test ON T_TestNat_TestID = Nat_TestRequirementNat_TestID - JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = {$prm['orderid']} AND - T_SamplingSoT_TestID = {$prm['sampletypeid']} AND - T_TestID = T_SamplingSoT_TestID AND - T_SamplingSoIsActive = 'Y' - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND - T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND - T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID - WHERE - Nat_TestRequirementIsActive = 'Y' - GROUP BY nat_requirementID - UNION - SELECT Nat_RequirementID as id, - Nat_RequirementName as name, 'P' as status, - if(ISNULL(T_SamplingSoRequirementID),'N', - if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N')) as chex, - Nat_RequirementPositionNat_PositionID as positionid - FROM nat_requirement - JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID - JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND - Nat_RequirementPositionNat_PositionID = 8 AND - Nat_RequirementPositionIsActive = 'Y' AND - Nat_RequirementIsAllTest = 'Y' - JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = {$prm['orderid']} AND - T_SamplingSoT_TestID = {$prm['sampletypeid']} AND - T_SamplingSoIsActive = 'Y' - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND - T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND - T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID - GROUP BY nat_requirementID - "; - //echo $query; - $rows = $this->db_onedev->query($query)->result_array(); - - - return $rows; - } - - function doconfirm() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rst_data = array(); - $prm = $this->sys_input; - $sql = "UPDATE t_sampling_queue_last_status SET - T_SamplingQueueLastStatusConfirm = 'Y' - WHERE T_SamplingQueueLastStatusT_OrderHeaderID = '{$prm['id']}' AND - T_SamplingQueueLastStatusT_SampleStationID = '{$prm['stationid']}'"; - //echo $sql; - $this->db_onedev->query($sql); - - $result = array( - "total" => 1, - "records" => $rst_data - ); - $this->sys_ok($result); - - exit; - } - - - - - function saverequirement() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $query = " INSERT INTO t_samplingso_requirement ( - T_SamplingSoRequirementT_OrderHeaderID, - T_SamplingSoRequirementT_SampleStationID, - T_SamplingSoRequirementT_SampletypeID, - T_SamplingSoRequirementStatus, - T_SamplingSoRequirementRequirements, - T_SamplingSoRequirementNote, - T_SamplingSoRequirementNat_PositionID, - T_SamplingSoRequirementUserID, - T_SamplingSoRequirementCreated - )VALUES( - {$prm['T_OrderHeaderID']}, - {$prm['stationid']}, - {$prm['sample']['T_SampleTypeID']}, - 'N', - - )"; - //echo $query; - $rows = $this->db_onedev->query($query)->result_array(); - - - $result = array( - "total" => count($rows), - "records" => $rows, - ); - $this->sys_ok($result); - exit; - } - - function doaction() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rst_data = array('status' => 'OK'); - $status_call = array('status' => 'OK', 'data' => array()); - $prm = $this->sys_input; - $userid = $this->sys_user["M_UserID"]; - if ($prm['staff']['id'] != 0 || $prm['staff']['id'] != '0') { - $userid = $prm['staff']['userid']; - } - - $sql = "SELECT T_OrderHeaderQueue 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 = {$prm['stationid']} - WHERE T_OrderHeaderID={$prm['id']}"; - $location = $this->db_onedev->query($sql)->row_array(); - $locationID = $location['locationID']; - $locationName = $location['locationName']; - $queueNumber = $location['queueNumber']; - $splitedLocationName = explode(" ", $locationName); - $locationName = $splitedLocationName[0]; - - if ($prm['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 = {$prm['id']} AND - T_SamplingQueueLastStatusT_SampleStationID <> {$prm['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 = {$prm['id']} 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' - 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_SamplingSoT_SampleStationID = T_SampleStationID AND - T_SamplingSoIsActive = 'Y' - WHERE - T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' AND - 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 = {$prm['id']} AND - T_SamplingQueueLastStatusT_SampleStationID = {$data_status_call['T_SampleStationID']}"; - $this->db_onedev->query($sql); - $status_call = array('status' => 'OK', 'data' => array()); - } - } - } - $next_status = $prm['statusnextid']; - if ($prm['act'] == 'process') { - $sql = "SELECT - T_OrderHeaderID, - T_OrderDetailID as id, - T_OrderDetailT_TestCode, - T_OrderDetailT_TestName, - T_TestID as test_id, - 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 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 = {$prm['stationid']} - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoT_SampleStationID = T_SampleStationID AND - T_SamplingSoIsActive = 'Y' - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND - T_SamplingSoRequirementT_SampleStationID = T_SampleStationID AND - T_SamplingSoRequirementIsActive = 'Y' - WHERE - T_OrderHeaderID = {$prm['id']} AND T_OrderHeaderIsActive = 'Y' AND - (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) { - $sql = "INSERT INTO t_samplingso ( - T_SamplingSoT_SampleStationID, - T_SamplingSoT_OrderHeaderID, - T_SamplingSoT_TestID, - T_SamplingSoProcessDate, - T_SamplingSoProcessTime, - T_SamplingSoProcessUserID, - T_SamplingSoCreated, - T_SamplingSoUserID - ) - VALUES( - {$prm['stationid']}, - {$prm['id']}, - {$v->test_id}, - CURDATE(), - CURTIME(), - {$userid}, - NOW(), - {$userid} - ) ON DUPLICATE KEY UPDATE - T_SamplingSoProcessDate = CURDATE(), - T_SamplingSoProcessTime = CURTIME(), - T_SamplingSoFlag = 'P', - T_SamplingSoIsActive = 'Y', - T_SamplingSoProcessUserID = {$userid}, - T_SamplingSoUserID = {$userid}"; - //echo $sql; - $this->db_onedev->query($sql); - - $sql = "INSERT INTO sample_so_by_step ( - SampleSoByStepT_OrderHeaderID, - SampleSoByStepT_TestID, - SampleSoByStepCode, - SampleSoByStepDateTime, - SampleSoByStepUserID - ) - VALUES( - {$prm['id']}, - {$v->test_id}, - 'SAMPLING.Sampling.Sampled', - NOW(), - {$userid} - )"; - $this->db_onedev->query($sql); - } - } - $this->broadcast("specimen-col-process"); - } - - if ($prm['act'] == 'samplingdone') { - $sql = "INSERT INTO t_samplingso ( - T_SamplingSoT_SampleStationID, - T_SamplingSoT_OrderHeaderID, - T_SamplingSoT_TestID, - T_SamplingSoDoneDate, - T_SamplingSoDoneTime, - T_SamplingSoDoneUserID, - T_SamplingSoCreated, - T_SamplingSoUserID - ) - VALUES( - {$prm['stationid']}, - {$prm['id']}, - {$prm['sample']['test_id']}, - CURDATE(), - CURTIME(), - {$userid}, - NOW(), - {$userid} - ) ON DUPLICATE KEY UPDATE - T_SamplingSoDoneDate = CURDATE(), - T_SamplingSoDoneTime = CURTIME(), - T_SamplingSoFlag = 'D', - T_SamplingSoIsActive = 'Y', - T_SamplingSoDoneUserID = {$userid}, - T_SamplingSoUserID = {$userid}"; - $this->db_onedev->query($sql); - //echo $sql; - $xreq = $prm['sample']['requirements']; - $arr_requirements = array(); - foreach ($xreq as $k => $v) { - if ($v['chex'] == 'Y') - array_push($arr_requirements, $v['id']); - } - $requirements = '[' . join(',', $arr_requirements) . ']'; - - $sql = "UPDATE t_samplingso_requirement SET - T_SamplingSoRequirementIsActive = 'N', - T_SamplingSoRequirementDeleted = NOW(), - T_SamplingSoRequirementDeletedUserID = {$userid} - WHERE - T_SamplingSoRequirementT_OrderHeaderID = {$prm['id']} AND - T_SamplingSoRequirementT_SampleStationID = {$prm['stationid']} AND - T_SamplingSoRequirementT_SamplingSoID = {$prm['sample']['T_SamplingSoID']} AND - T_SamplingSoRequirementIsActive = 'Y'"; - $this->db_onedev->query($sql); - - $sql = "INSERT INTO t_samplingso_requirement( - T_SamplingSoRequirementT_OrderHeaderID, - T_SamplingSoRequirementT_SampleStationID, - T_SamplingSoRequirementT_SamplingSoID, - T_SamplingSoRequirementNat_PositionID, - T_SamplingSoRequirementStatus, - T_SamplingSoRequirementRequirements, - T_SamplingSoRequirementUserID, - T_SamplingSoRequirementCreated - ) - VALUES( - {$prm['id']}, - {$prm['stationid']}, - {$prm['sample']['T_SamplingSoID']}, - {$prm['sample']['Nat_PositionID']}, - '{$prm['sample']['requirement_status']}', - '{$requirements}', - {$userid}, - NOW() - )"; - //echo $sql; - $this->db_onedev->query($sql); - - $sql = "INSERT INTO sample_so_by_step ( - SampleSoByStepT_OrderHeaderID, - SampleSoByStepT_TestID, - SampleSoByStepCode, - SampleSoByStepRequirementStatus, - SampleSoByStepReuirements, - SampleSoByStepDateTime, - SampleSoByStepUserID - ) - VALUES( - {$prm['id']}, - {$prm['sample']['test_id']}, - 'SAMPLING.Sampling.Received', - '{$prm['sample']['requirement_status']}', - '{$requirements}', - NOW(), - {$userid} - )"; - $this->db_onedev->query($sql); - - if ($prm['sample']['type'] === 'xray') { - $sql = "INSERT INTO t_samplingso_form( - T_SamplingSoFormT_SampleStationID, - T_SamplingSoFormT_SamplingSOID, - T_SamplingSoFormKv, - T_SamplingSoFormMa, - T_SamplingSoFormSecond, - T_SamplingSoFormExpose, - T_SamplingSoFormUserID, - T_SamplingSoFormCreated, - T_SamplingSoFormCreatedUserID - ) - VALUES( - {$prm['stationid']}, - {$prm['sample']['T_SamplingSoID']}, - {$prm['sample']['form_kv']}, - {$prm['sample']['form_ma']}, - {$prm['sample']['form_second']}, - {$prm['sample']['form_expose']}, - {$userid}, - NOW(), - {$userid} - )ON DUPLICATE KEY UPDATE - T_SamplingSoFormT_SampleStationID = {$prm['stationid']}, - T_SamplingSoFormKv = {$prm['sample']['form_kv']}, - T_SamplingSoFormMa = {$prm['sample']['form_ma']}, - T_SamplingSoFormSecond = {$prm['sample']['form_second']}, - T_SamplingSoFormExpose = {$prm['sample']['form_expose']}, - T_SamplingSoFormUserID = {$userid}, - T_SamplingSoFormLastUpdated = NOW(), - T_SamplingSoFormLastUpdatedUserID = {$userid}"; - //echo $sql; - $this->db_onedev->query($sql); - } - - $this->load->library('Nonlabtemplate'); - $gen_template = $this->nonlabtemplate->generate($prm['sample']['T_SamplingSoID']); - - $sql = "SELECT COUNT(*) as xcount - FROM ( - SELECT T_SamplingSoID, T_SamplingSoFlag ,T_OrderDetailT_TestID, T_OrderDetailID - FROM t_orderdetail - 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 = {$prm['stationid']} - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoT_SampleStationID = T_SampleStationID AND - T_SamplingSoIsActive = 'Y' - WHERE - T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' - GROUP BY T_TestID - HAVING ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X' - ) xx"; - //echo $sql; - $xcount = $this->db_onedev->query($sql)->row()->xcount; - $rst_data = array('status' => 'PARTIAL'); - if ($xcount == 0) { - $next_status = 5; - $rst_data = array('status' => 'OK'); - } - $this->broadcast("specimen-col-receive"); - } - - if ($prm['act'] !== 'samplingprocess' && $status_call['status'] == 'OK') { - $dt_json = json_encode(array('T_SampleStationID' => $prm['stationid'], 'T_OrderHeaderID' => $prm['id'], '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 = {$prm['stationid']} AND - T_SamplingQueueLastStatusT_OrderHeaderID = {$prm['id']} AND - T_SamplingQueueLastStatusIsActive = 'Y'"; - $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( - {$prm['stationid']}, - {$prm['id']}, - {$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 ($prm['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)); - } - - if (intval($next_status) == 1) { - if ($status_call['status'] == 'OK') { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/call.sm.{$locationID}.{$queueNumber}.{$locationName}"); //CALL NODE - } - } else if (intval($next_status) == 2) { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/skip.sm.{$locationID}"); - } else if (intval($next_status) == 3) { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/serve.sm.{$locationID}"); - } else if (intval($next_status) == 5) { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); - } else { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); - } - - - - $result = array( - "total" => 1, - "records" => $rst_data - ); - $this->sys_ok($result); - - exit; - } - - - function getdatanoterequirement() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rst_data = array(); - $prm = $this->sys_input; - - $sql = "SELECT IFNULL(T_OrderHeaderFoNote,'') as fo_note, - fn_getstaffname(T_OrderHeaderFoNoteM_UserID) as fo_note_user, - IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, - fn_getstaffname(T_OrderHeaderVerificationNoteM_UserID) as fo_ver_note_user, - IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, - fn_getstaffname(T_OrderHeaderSamplingNoteM_UserID) as sampling_note_user - FROM t_orderheader - WHERE - T_OrderHeaderID = {$prm['T_OrderHeaderID']}"; - $notes = $this->db_onedev->query($sql)->row_array(); - - $sql = "SELECT 'fo registration' as position,GROUP_CONCAT(DISTINCT Nat_RequirementName separator ',') as requirements - FROM t_orderheader - JOIN t_orderreq ON T_OrderReqT_OrderHeaderID = T_OrderHeaderID - JOIN nat_requirement ON json_contains(T_OrderReqs,Nat_RequirementID) - WHERE T_OrderHeaderID = {$prm['T_OrderHeaderID']} - GROUP BY T_OrderHeaderID"; - //echo $sql; - $query = $this->db_onedev->query($sql)->row_array(); - if ($query) { - array_push($rst_data, $query); - } - - $sql = "SELECT 'fo verifikasi' as position, GROUP_CONCAT(DISTINCT Fo_VerificationsLabelName separator ',') as requirements - FROM fo_verificationsvalue - JOIN fo_verificationslabel ON Fo_VerificationsValueFo_VerificationsLabelID = Fo_VerificationsLabelID - WHERE - Fo_VerificationsValueCheck = 'N' AND - Fo_VerificationsValueT_OrderHeaderID = {$prm['T_OrderHeaderID']} - GROUP BY Fo_VerificationsValueT_OrderHeaderID - "; - //echo $sql; - $query = $this->db_onedev->query($sql)->row_array(); - if ($query) { - array_push($rst_data, $query); - } - - $result = array( - "total" => 1, - "records" => array('notes' => $notes, 'reqs' => $rst_data) - ); - $this->sys_ok($result); - - exit; - } - - function savenotesampling() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rst_data = array(); - $prm = $this->sys_input; - $userid = $this->sys_user["M_UserID"]; - - $sql = "UPDATE t_orderheader SET - T_OrderHeaderSamplingNote = '{$prm['sampling_note']}', - T_OrderHeaderSamplingNoteM_UserID = {$userid} - WHERE - T_OrderHeaderID = {$prm['T_OrderHeaderID']}"; - //echo $sql; - $query = $this->db_onedev->query($sql); - - $result = array( - "total" => 1, - "records" => $rst_data - ); - $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; - } -} +db_onedev = $this->load->database("onedev", true); + $this->load->library('ibl_encryptor'); + // $this->IP_SOCKET_IO = "devone.aplikasi.web.id"; + $this->IP_SOCKET_IO = "localhost"; + } + + function getsampletypes() + { + + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $orderid = $prm['orderid']; + $stationid = $prm['stationid']; + $statusid = $prm['statusid']; + $rows = array(); + + $sql = "SELECT SUM(xcount) as cnt + FROM ( + SELECT COUNT(*) as xcount + FROM t_orderdetail + 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} AND + T_SampleStationIsNonLab = 'ELEKTROMEDIS' + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoT_SampleStationID = T_SampleStationID AND + T_SamplingSoIsActive = 'Y' + WHERE + T_OrderDetailT_OrderHeaderID = {$orderid} AND T_OrderDetailIsActive = 'Y' AND + ISNULL(T_SamplingSoDoneDate) + + ) x"; + //echo $sql; + $x_exist = $this->db_onedev->query($sql)->row_array(); + if (intval($x_exist['cnt']) != 0) { + $sql = "UPDATE t_sampling_queue_last_status + SET + T_SamplingQueueLastStatusT_SamplingQueueStatusID = 2 + WHERE + T_SamplingQueueLastStatusT_OrderHeaderID = '{$orderid}' AND + T_SamplingQueueLastStatusT_SampleStationID = {$stationid} AND + T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5"; + //echo $sql; + $this->db_onedev->query($sql); + } + + $sql = "SELECT T_OrderDetailID as id, + T_OrderHeaderID as orderid, + T_TestCode as test_code, + T_TestName as test_name, + T_TestID as test_id, + 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, + IF(ISNULL(T_SamplingSoRequirementID),'X',T_SamplingSoRequirementStatus) as requirement_status, + '' as requirements, + DocumentationGroupName as type, + IF(DocumentationGroupName = 'xray',IF(ISNULL(T_SamplingSoFormExpose),'N','Y'),'Y') as fill_form, + IFNULL(T_SamplingSoFormKv,'') as form_kv, + IFNULL(T_SamplingSoFormMa,'') as form_ma, + IFNULL(T_SamplingSoFormSecond,'') as form_second, + IFNULL(T_SamplingSoFormExpose,'') as form_expose + FROM t_orderheader + JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' + 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} AND + T_SampleStationIsNonLab = 'ELEKTROMEDIS' + JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID + JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoT_SampleStationID = T_SampleStationID AND + T_SamplingSoIsActive = 'Y' + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND + T_SamplingSoRequirementT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoRequirementNat_PositionID = 8 AND + T_SamplingSoRequirementIsActive = 'Y' + LEFT JOIN t_samplingso_form ON T_SamplingSoFormT_SamplingSOID = T_SamplingSOID AND T_SamplingSoFormIsActive = 'Y' + WHERE + T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' + GROUP BY T_OrderDetailID"; + //echo $sql; + $rows['sampletypes'] = $this->db_onedev->query($sql)->result_array(); + if ($rows) { + foreach ($rows['sampletypes'] as $k => $v) { + $zxprm = array(); + $zxprm['status'] = $v['status']; + $zxprm['orderdetailid'] = $v['id']; + $zxprm['orderid'] = $v['orderid']; + $zxprm['sampletypeid'] = $v['test_id']; + $rows['sampletypes'][$k]['requirements'] = $this->getrequirements($zxprm); + } + } + + $sql = "SELECT T_BahanID as id, T_BahanName, + IF(T_TestIsNonLab = '',fn_sampling_receive_status_by_bahan_lab({$orderid},T_SampleTypeID),fn_sampling_receive_status_by_bahan_so({$orderid},T_TestID)) as status_bahan + FROM t_orderdetail + 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_OrderDetailT_OrderHeaderID AND T_BarcodeLabT_SampleTypeID = T_SampleTypeID + JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID + WHERE + T_OrderDetailT_OrderHeaderID = {$orderid} + GROUP BY T_BahanID"; + //echo $sql; + $rows['information_bahan'] = $this->db_onedev->query($sql)->result_array(); + $result = array("total" => count($rows), "records" => $rows, "sql" => $this->db_onedev->last_query()); + $this->sys_ok($result); + exit; + } + + function fillform() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $userid = $this->sys_user["M_UserID"]; + $sql = "INSERT INTO t_samplingso_form( + T_SamplingSoFormT_SamplingSOID, + T_SamplingSoFormKv, + T_SamplingSoFormMa, + T_SamplingSoFormSecond, + T_SamplingSoFormExpose, + T_SamplingSoFormUserID, + T_SamplingSoFormCreated, + T_SamplingSoFormLastUpdated + ) + VALUES( + {$prm['T_SamplingSoID']}, + {$prm['form_kv']}, + {$prm['form_ma']}, + {$prm['form_second']}, + '{$prm['form_expose']}', + {$userid}, + NOW(), + NOW() + )ON DUPLICATE KEY UPDATE + T_SamplingSoFormKv = {$prm['form_kv']}, + T_SamplingSoFormMa = {$prm['form_ma']}, + T_SamplingSoFormSecond = {$prm['form_second']}, + T_SamplingSoFormExpose = {$prm['form_expose']}, + T_SamplingSoFormUserID = {$userid}"; + //echo $sql; + $this->db_onedev->query($sql); + + $result = array("status" => "OK"); + $this->sys_ok($result); + exit; + } + + public function search() + { + $prm = $this->sys_input; + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $name = $prm["name"]; + $nolab = $prm["nolab"]; + $stationid = $prm["stationid"]; + $statusid = $prm["statusid"]; + $xdate = $prm["xdate"]; + $companyid = isset($prm["companyid"]) ? $prm["companyid"] : 0; + $search = isset($prm["searchx"]) ? $prm["searchx"] : ''; + $locationID = $prm['locationid']; + $filter_companyid = ''; + if ($companyid != 0 || $companyid != '0') { + $filter_companyid = " AND M_CompanyID = {$companyid} "; + } + + $where_status = " AND ( ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X')"; + $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND ( DATE(T_OrderHeaderAddonIsComingDate) = '{$xdate}' OR DATE(T_OrderHeaderDate) = '{$xdate}' ) {$where_status}"; + + if ($nolab != "") { + if ($sql_where != "") { + $sql_where .= " and "; + } + $sql_where .= "( T_OrderHeaderLabNumber like '%$nolab%' OR T_OrderHeaderLabNumberExt like '%$nolab%' )"; + } + + if ($search != '') { + $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderLabNumber = '{$search}'"; + } + + $sql = "SELECT * FROM ( + SELECT DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date, + t_orderheader.*, + DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as dob, + m_patient.*, + M_SexName, + M_TitleName, + CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, + M_CompanyName, + fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status, + + fn_sampling_queue_status_id(T_OrderHeaderID,T_SampleStationID) as statusid, + T_SampleStationID, + T_TestID, + {$stationid} as stationid, + T_OrderPromiseDateTime, + T_OrderHeaderIsCito as iscito, + IFNULL(T_OrderHeaderFoNote,'') as fo_note, + IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, + fn_sampling_reqs(T_OrderHeaderID) as fo_requirements, + '' as htmlforeqs, + IF(fn_fo_ver_have_reqs(T_OrderHeaderID) = 0,'Y','N') as fo_ver_status_req, + fn_fo_reg_have_reqs(T_OrderHeaderID) as fo_reg_status_req, + fn_sampling_reqs_status(T_OrderHeaderID) as fo_requirements_status, + IF(fn_fo_get_verification_status(T_OrderHeaderID) = 0, 'X','Y') as fo_verification_status, + IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, + fn_sampling_queue_status_confirm(T_OrderHeaderID,T_SampleStationID) as status_confirm, + CONCAT(M_DoctorPrefix,M_DoctorPrefix2,' ',M_DoctorName,' ',M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as doctor_sender, + fn_fo_get_laststatus(T_OrderHeaderID) as last_status_fo, + T_OrderHeaderAddonIsComing as status_coming, + T_OrderLocationID as order_location_id, + IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as antri_time, + IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as skip_time + FROM t_orderheader + JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID + JOIN m_doctor ON T_OrderHeaderSenderM_DoctorID = M_DoctorID + JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_companyid + JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID + JOIN m_title ON M_PatientM_TitleID = M_TitleID + JOIN m_sex ON M_PatientM_SexID = M_SexID + JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND T_OrderLocationT_SampleStationID = {$stationid} AND T_OrderLocationIsActive = 'Y' + LEFT JOIN antrian_samplestation ON AntrianSampleStationT_OrderLocationID =T_OrderLocationID AND AntrianSampleStationIsActive = 'Y' + JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND M_LocationID = {$locationID} + LEFT JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' + 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} AND T_SampleStationIsNonLab = 'ELEKTROMEDIS' + JOIN last_status ON Last_StatusT_OrderHeaderID = T_OrderHeaderID + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoT_SampleStationID = T_SampleStationID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoIsActive = 'Y' + + $sql_where + GROUP BY T_OrderHeaderID + HAVING last_status_fo IN (3,5) + ) x + ORDER BY T_OrderHeaderIsCito DESC, antri_time ASC + "; + //echo $sql; + $query = $this->db_onedev->query($sql); + // echo $this->db_onedev->last_query(); + $rows = $query->result_array(); + if ($rows) { + $count_arr = count($rows); + foreach ($rows as $key => $value) { + if ($key + 1 != $count_arr) { + $rows[$key]['skip_time'] = $rows[$key + 1]['antri_time']; + } + } + } + $result = array("total" => count($rst), "records" => $rows, "sql" => $this->db_onedev->last_query()); + $this->sys_ok($result); + exit; + } + + function searchcompany() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + + $max_rst = 12; + $tot_count = 0; + + $q = [ + 'search' => '%' + ]; + + if ($prm['search'] != '') { + $q['search'] = "%{$prm['search']}%"; + } + + // QUERY TOTAL + $sql = "SELECT count(*) as total + FROM m_company + WHERE + M_CompanyName like ? + AND M_CompanyIsActive = 'Y'"; + $query = $this->db_onedev->query($sql, $q['search']); + //echo $query; + if ($query) { + $tot_count = $query->result_array()[0]["total"]; + } else { + $this->sys_error_db("m_city count", $this->db_onedev); + exit; + } + $rows = array('id' => 0, 'name' => 'Semua'); + $sql = " + SELECT M_CompanyID as id, M_CompanyName as name + FROM m_company + WHERE + M_CompanyName like ? + AND M_CompanyIsActive = 'Y' + ORDER BY M_CompanyName DESC + "; + $query = $this->db_onedev->query($sql, array($q['search'])); + + if ($query) { + $rows = $query->result_array(); + array_push($rows, array('id' => 0, 'name' => 'Semua')); + //echo $this->db_onedev->last_query(); + $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows)); + $this->sys_ok($result); + } else { + $this->sys_error_db("m_company rows", $this->db_onedev); + exit; + } + } + + function getstationstatus() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rows = []; + $query = " SELECT T_SampleStationID as id, T_SampleStationName as name + FROM t_samplestation + WHERE + T_SampleStationIsActive = 'Y' AND T_SampleStationIsNonLab = 'ELEKTROMEDIS' + "; + //echo $query; + $rows['stations'] = $this->db_onedev->query($query)->result_array(); + $rows['statuses'] = array(array('id' => 'NEW', 'name' => 'New'), array('id' => 'DONE', 'name' => 'Done')); + + $result = array( + "total" => count($rows), + "records" => $rows, + ); + $this->sys_ok($result); + exit; + } + + function search_staff() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $rows = []; + $query = " SELECT M_StaffID as id, M_StaffName as name, M_StaffCode as code, M_UserID as userid + FROM m_staff + JOIN m_user ON M_UserM_StaffID = M_StaffID AND M_UserIsActive = 'Y' + WHERE + M_StaffIsActive = 'Y' AND M_StaffCode = '{$prm['search']}' LIMIT 1 + "; + //echo $query; + $rows = $this->db_onedev->query($query)->row_array(); + + $result = array( + "total" => count($rows), + "records" => $rows, + ); + $this->sys_ok($result); + exit; + } + + function search_patient() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $search = '%' . $prm["search"] . '%'; + $stationid = $prm["stationid"]; + $statusid = $prm["statusid"]; + $patients = $prm["patients"]; + $where_status = ''; + if ($statusid === 'NEW') { + $where_status = "AND (ISNULL(T_SamplingQueueLastStatusID) OR T_SamplingQueueLastStatusT_SamplingQueueStatusID <> 5 )"; + } else { + $where_status = "AND T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5"; + } + + // echo $norm; + //$where_status = " AND {$where_status}"; + + $sql_where = "WHERE T_OrderHeaderLabNumber LIKE '{$search}' AND T_OrderHeaderIsActive = 'Y' {$where_status}"; + $rows = []; + $query = "SELECT t_orderheader.*,m_patient.*, IFNULL(M_PatientPhoto,'') as M_PatientPhotoThumb, + M_SexName, M_TitleName, M_PatientName_enc, M_PatientDOB_enc, M_PatientDOB as patient_dob_raw, M_CompanyName, + IF(ISNULL(T_SamplingQueueLastStatusID), 'New',T_SamplingQueueStatusName) as status, + IF(ISNULL(T_SamplingQueueLastStatusID), 0,T_SamplingQueueLastStatusT_SamplingQueueStatusID) as statusid, T_SampleStationID, T_SampleTypeID, + {$stationid} as stationid, + fn_global_check_is_cito(T_OrderHeaderID) as iscito, + T_SamplingQueueLastStatusConfirm as status_confirm + FROM t_orderheader + JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID + JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID + JOIN m_title ON M_PatientM_TitleID = M_TitleID + JOIN m_sex ON M_PatientM_SexID = M_SexID + JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID + JOIN t_test ON T_OrderDetailT_TestID = T_TestID + JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID + JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID + JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} AND T_SampleStationIsNonLab = 'ELEKTROMEDIS' + JOIN last_status ON Last_StatusT_OrderHeaderID = T_OrderHeaderID AND ( Last_StatusM_StatusID = 3 OR Last_StatusM_StatusID = 5 ) + LEFT JOIN t_sampling_queue_last_status ON + T_SamplingQueueLastStatusT_SampleStationID = T_SampleStationID AND + T_SamplingQueueLastStatusT_OrderHeaderID = T_OrderHeaderID + LEFT JOIN t_sampling_queue_status ON T_SamplingQueueLastStatusT_SamplingQueueStatusID = T_SamplingQueueStatusID + LEFT JOIN t_ordersamplereq ON T_OrderSampleReqT_SampleStationID = T_SampleStationID AND T_OrderSampleReqT_OrderSampleID + $sql_where + GROUP BY T_OrderHeaderID + ORDER BY T_OrderHeaderID DESC + limit 1"; + //echo $query; + $rows = $this->db_onedev->query($query)->row(); + + $result = array( + "total" => count($rows), + "records" => $rows, + ); + $this->sys_ok($result); + exit; + } + + /*function getrequirements($prm){ + + + $query =" SELECT Nat_RequirementID as id, + Nat_RequirementName as name, '{$prm['status']}' as status, + if(ISNULL(T_SamplingSoRequirementID),'N', if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N') ) as chex, + Nat_RequirementPositionNat_PositionID as positionid + FROM nat_requirement + JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID + JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND Nat_RequirementPositionNat_PositionID = 8 AND + Nat_RequirementPositionIsActive = 'Y' + JOIN t_test ON T_TestNat_TestID = Nat_TestRequirementNat_TestID + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND + T_SamplingSoRequirementT_SampletypeID = {$prm['sampletypeid']} AND T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID + WHERE + Nat_TestRequirementIsActive = 'Y' + "; + //echo $query; + $rows = $this->db_onedev->query($query)->result_array(); + + + return $rows; + }*/ + + function getrequirements($prm) + { + + $rows = array(); + $query = " + SELECT Nat_RequirementID as id, + Nat_RequirementName as name, 'P' as status, + if(ISNULL(T_SamplingSoRequirementID),'N', + if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N')) as chex, + Nat_RequirementPositionNat_PositionID as positionid + FROM nat_requirement + JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID + JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND + Nat_RequirementPositionNat_PositionID = 8 AND + Nat_RequirementPositionIsActive = 'Y' + JOIN t_test ON T_TestNat_TestID = Nat_TestRequirementNat_TestID + JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = {$prm['orderid']} AND + T_SamplingSoT_TestID = {$prm['sampletypeid']} AND + T_TestID = T_SamplingSoT_TestID AND + T_SamplingSoIsActive = 'Y' + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND + T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND + T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID + WHERE + Nat_TestRequirementIsActive = 'Y' + GROUP BY nat_requirementID + UNION + SELECT Nat_RequirementID as id, + Nat_RequirementName as name, 'P' as status, + if(ISNULL(T_SamplingSoRequirementID),'N', + if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N')) as chex, + Nat_RequirementPositionNat_PositionID as positionid + FROM nat_requirement + JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID + JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND + Nat_RequirementPositionNat_PositionID = 8 AND + Nat_RequirementPositionIsActive = 'Y' AND + Nat_RequirementIsAllTest = 'Y' + JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = {$prm['orderid']} AND + T_SamplingSoT_TestID = {$prm['sampletypeid']} AND + T_SamplingSoIsActive = 'Y' + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND + T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND + T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID + GROUP BY nat_requirementID + "; + //echo $query; + $rows = $this->db_onedev->query($query)->result_array(); + + + return $rows; + } + + function doconfirm() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rst_data = array(); + $prm = $this->sys_input; + $sql = "UPDATE t_sampling_queue_last_status SET + T_SamplingQueueLastStatusConfirm = 'Y' + WHERE T_SamplingQueueLastStatusT_OrderHeaderID = '{$prm['id']}' AND + T_SamplingQueueLastStatusT_SampleStationID = '{$prm['stationid']}'"; + //echo $sql; + $this->db_onedev->query($sql); + + $result = array( + "total" => 1, + "records" => $rst_data + ); + $this->sys_ok($result); + + exit; + } + + + + + function saverequirement() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $query = " INSERT INTO t_samplingso_requirement ( + T_SamplingSoRequirementT_OrderHeaderID, + T_SamplingSoRequirementT_SampleStationID, + T_SamplingSoRequirementT_SampletypeID, + T_SamplingSoRequirementStatus, + T_SamplingSoRequirementRequirements, + T_SamplingSoRequirementNote, + T_SamplingSoRequirementNat_PositionID, + T_SamplingSoRequirementUserID, + T_SamplingSoRequirementCreated + )VALUES( + {$prm['T_OrderHeaderID']}, + {$prm['stationid']}, + {$prm['sample']['T_SampleTypeID']}, + 'N', + + )"; + //echo $query; + $rows = $this->db_onedev->query($query)->result_array(); + + + $result = array( + "total" => count($rows), + "records" => $rows, + ); + $this->sys_ok($result); + exit; + } + + function doaction() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rst_data = array('status' => 'OK'); + $status_call = array('status' => 'OK', 'data' => array()); + $prm = $this->sys_input; + $userid = $this->sys_user["M_UserID"]; + if ($prm['staff']['id'] != 0 || $prm['staff']['id'] != '0') { + $userid = $prm['staff']['userid']; + } + + $sql = "SELECT T_OrderHeaderQueue 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 = {$prm['stationid']} + WHERE T_OrderHeaderID={$prm['id']}"; + $location = $this->db_onedev->query($sql)->row_array(); + $locationID = $location['locationID']; + $locationName = $location['locationName']; + $queueNumber = $location['queueNumber']; + $splitedLocationName = explode(" ", $locationName); + $locationName = $splitedLocationName[0]; + + if ($prm['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 = {$prm['id']} AND + T_SamplingQueueLastStatusT_SampleStationID <> {$prm['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 = {$prm['id']} 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' + 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_SamplingSoT_SampleStationID = T_SampleStationID AND + T_SamplingSoIsActive = 'Y' + WHERE + T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' AND + 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 = {$prm['id']} AND + T_SamplingQueueLastStatusT_SampleStationID = {$data_status_call['T_SampleStationID']}"; + $this->db_onedev->query($sql); + $status_call = array('status' => 'OK', 'data' => array()); + } + } + } + $next_status = $prm['statusnextid']; + if ($prm['act'] == 'process') { + $sql = "SELECT + T_OrderHeaderID, + T_OrderDetailID as id, + T_OrderDetailT_TestCode, + T_OrderDetailT_TestName, + T_TestID as test_id, + 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 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 = {$prm['stationid']} + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoT_SampleStationID = T_SampleStationID AND + T_SamplingSoIsActive = 'Y' + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND + T_SamplingSoRequirementT_SampleStationID = T_SampleStationID AND + T_SamplingSoRequirementIsActive = 'Y' + WHERE + T_OrderHeaderID = {$prm['id']} AND T_OrderHeaderIsActive = 'Y' AND + (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) { + $sql = "INSERT INTO t_samplingso ( + T_SamplingSoT_SampleStationID, + T_SamplingSoT_OrderHeaderID, + T_SamplingSoT_TestID, + T_SamplingSoProcessDate, + T_SamplingSoProcessTime, + T_SamplingSoProcessUserID, + T_SamplingSoCreated, + T_SamplingSoUserID + ) + VALUES( + {$prm['stationid']}, + {$prm['id']}, + {$v->test_id}, + CURDATE(), + CURTIME(), + {$userid}, + NOW(), + {$userid} + ) ON DUPLICATE KEY UPDATE + T_SamplingSoProcessDate = CURDATE(), + T_SamplingSoProcessTime = CURTIME(), + T_SamplingSoFlag = 'P', + T_SamplingSoIsActive = 'Y', + T_SamplingSoProcessUserID = {$userid}, + T_SamplingSoUserID = {$userid}"; + //echo $sql; + $this->db_onedev->query($sql); + + $sql = "INSERT INTO sample_so_by_step ( + SampleSoByStepT_OrderHeaderID, + SampleSoByStepT_TestID, + SampleSoByStepCode, + SampleSoByStepDateTime, + SampleSoByStepUserID + ) + VALUES( + {$prm['id']}, + {$v->test_id}, + 'SAMPLING.Sampling.Sampled', + NOW(), + {$userid} + )"; + $this->db_onedev->query($sql); + } + } + $this->broadcast("specimen-col-process"); + } + + if ($prm['act'] == 'samplingdone') { + $sql = "INSERT INTO t_samplingso ( + T_SamplingSoT_SampleStationID, + T_SamplingSoT_OrderHeaderID, + T_SamplingSoT_TestID, + T_SamplingSoDoneDate, + T_SamplingSoDoneTime, + T_SamplingSoDoneUserID, + T_SamplingSoCreated, + T_SamplingSoUserID + ) + VALUES( + {$prm['stationid']}, + {$prm['id']}, + {$prm['sample']['test_id']}, + CURDATE(), + CURTIME(), + {$userid}, + NOW(), + {$userid} + ) ON DUPLICATE KEY UPDATE + T_SamplingSoDoneDate = CURDATE(), + T_SamplingSoDoneTime = CURTIME(), + T_SamplingSoFlag = 'D', + T_SamplingSoIsActive = 'Y', + T_SamplingSoDoneUserID = {$userid}, + T_SamplingSoUserID = {$userid}"; + $this->db_onedev->query($sql); + //echo $sql; + $xreq = $prm['sample']['requirements']; + $arr_requirements = array(); + foreach ($xreq as $k => $v) { + if ($v['chex'] == 'Y') + array_push($arr_requirements, $v['id']); + } + $requirements = '[' . join(',', $arr_requirements) . ']'; + + $sql = "UPDATE t_samplingso_requirement SET + T_SamplingSoRequirementIsActive = 'N', + T_SamplingSoRequirementDeleted = NOW(), + T_SamplingSoRequirementDeletedUserID = {$userid} + WHERE + T_SamplingSoRequirementT_OrderHeaderID = {$prm['id']} AND + T_SamplingSoRequirementT_SampleStationID = {$prm['stationid']} AND + T_SamplingSoRequirementT_SamplingSoID = {$prm['sample']['T_SamplingSoID']} AND + T_SamplingSoRequirementIsActive = 'Y'"; + $this->db_onedev->query($sql); + + $sql = "INSERT INTO t_samplingso_requirement( + T_SamplingSoRequirementT_OrderHeaderID, + T_SamplingSoRequirementT_SampleStationID, + T_SamplingSoRequirementT_SamplingSoID, + T_SamplingSoRequirementNat_PositionID, + T_SamplingSoRequirementStatus, + T_SamplingSoRequirementRequirements, + T_SamplingSoRequirementUserID, + T_SamplingSoRequirementCreated + ) + VALUES( + {$prm['id']}, + {$prm['stationid']}, + {$prm['sample']['T_SamplingSoID']}, + {$prm['sample']['Nat_PositionID']}, + '{$prm['sample']['requirement_status']}', + '{$requirements}', + {$userid}, + NOW() + )"; + //echo $sql; + $this->db_onedev->query($sql); + + $sql = "INSERT INTO sample_so_by_step ( + SampleSoByStepT_OrderHeaderID, + SampleSoByStepT_TestID, + SampleSoByStepCode, + SampleSoByStepRequirementStatus, + SampleSoByStepReuirements, + SampleSoByStepDateTime, + SampleSoByStepUserID + ) + VALUES( + {$prm['id']}, + {$prm['sample']['test_id']}, + 'SAMPLING.Sampling.Received', + '{$prm['sample']['requirement_status']}', + '{$requirements}', + NOW(), + {$userid} + )"; + $this->db_onedev->query($sql); + + if ($prm['sample']['type'] === 'xray') { + $sql = "INSERT INTO t_samplingso_form( + T_SamplingSoFormT_SampleStationID, + T_SamplingSoFormT_SamplingSOID, + T_SamplingSoFormKv, + T_SamplingSoFormMa, + T_SamplingSoFormSecond, + T_SamplingSoFormExpose, + T_SamplingSoFormUserID, + T_SamplingSoFormCreated, + T_SamplingSoFormCreatedUserID + ) + VALUES( + {$prm['stationid']}, + {$prm['sample']['T_SamplingSoID']}, + {$prm['sample']['form_kv']}, + {$prm['sample']['form_ma']}, + {$prm['sample']['form_second']}, + {$prm['sample']['form_expose']}, + {$userid}, + NOW(), + {$userid} + )ON DUPLICATE KEY UPDATE + T_SamplingSoFormT_SampleStationID = {$prm['stationid']}, + T_SamplingSoFormKv = {$prm['sample']['form_kv']}, + T_SamplingSoFormMa = {$prm['sample']['form_ma']}, + T_SamplingSoFormSecond = {$prm['sample']['form_second']}, + T_SamplingSoFormExpose = {$prm['sample']['form_expose']}, + T_SamplingSoFormUserID = {$userid}, + T_SamplingSoFormLastUpdated = NOW(), + T_SamplingSoFormLastUpdatedUserID = {$userid}"; + //echo $sql; + $this->db_onedev->query($sql); + } + + $this->load->library('Nonlabtemplate'); + $gen_template = $this->nonlabtemplate->generate($prm['sample']['T_SamplingSoID']); + + $sql = "SELECT COUNT(*) as xcount + FROM ( + SELECT T_SamplingSoID, T_SamplingSoFlag ,T_OrderDetailT_TestID, T_OrderDetailID + FROM t_orderdetail + 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 = {$prm['stationid']} + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoT_SampleStationID = T_SampleStationID AND + T_SamplingSoIsActive = 'Y' + WHERE + T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' + GROUP BY T_TestID + HAVING ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X' + ) xx"; + //echo $sql; + $xcount = $this->db_onedev->query($sql)->row()->xcount; + $rst_data = array('status' => 'PARTIAL'); + if ($xcount == 0) { + $next_status = 5; + $rst_data = array('status' => 'OK'); + } + $this->broadcast("specimen-col-receive"); + } + + if ($prm['act'] !== 'samplingprocess' && $status_call['status'] == 'OK') { + $dt_json = json_encode(array('T_SampleStationID' => $prm['stationid'], 'T_OrderHeaderID' => $prm['id'], '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 = {$prm['stationid']} AND + T_SamplingQueueLastStatusT_OrderHeaderID = {$prm['id']} AND + T_SamplingQueueLastStatusIsActive = 'Y'"; + $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( + {$prm['stationid']}, + {$prm['id']}, + {$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 ($prm['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)); + } + + if (intval($next_status) == 1) { + if ($status_call['status'] == 'OK') { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/call.sm.{$locationID}.{$queueNumber}.{$locationName}"); //CALL NODE + } + } else if (intval($next_status) == 2) { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/skip.sm.{$locationID}"); + } else if (intval($next_status) == 3) { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/serve.sm.{$locationID}"); + } else if (intval($next_status) == 5) { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); + } else { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); + } + + + + $result = array( + "total" => 1, + "records" => $rst_data + ); + $this->sys_ok($result); + + exit; + } + + + function getdatanoterequirement() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rst_data = array(); + $prm = $this->sys_input; + + $sql = "SELECT IFNULL(T_OrderHeaderFoNote,'') as fo_note, + fn_getstaffname(T_OrderHeaderFoNoteM_UserID) as fo_note_user, + IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, + fn_getstaffname(T_OrderHeaderVerificationNoteM_UserID) as fo_ver_note_user, + IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, + fn_getstaffname(T_OrderHeaderSamplingNoteM_UserID) as sampling_note_user + FROM t_orderheader + WHERE + T_OrderHeaderID = {$prm['T_OrderHeaderID']}"; + $notes = $this->db_onedev->query($sql)->row_array(); + + $sql = "SELECT 'fo registration' as position,GROUP_CONCAT(DISTINCT Nat_RequirementName separator ',') as requirements + FROM t_orderheader + JOIN t_orderreq ON T_OrderReqT_OrderHeaderID = T_OrderHeaderID + JOIN nat_requirement ON json_contains(T_OrderReqs,Nat_RequirementID) + WHERE T_OrderHeaderID = {$prm['T_OrderHeaderID']} + GROUP BY T_OrderHeaderID"; + //echo $sql; + $query = $this->db_onedev->query($sql)->row_array(); + if ($query) { + array_push($rst_data, $query); + } + + $sql = "SELECT 'fo verifikasi' as position, GROUP_CONCAT(DISTINCT Fo_VerificationsLabelName separator ',') as requirements + FROM fo_verificationsvalue + JOIN fo_verificationslabel ON Fo_VerificationsValueFo_VerificationsLabelID = Fo_VerificationsLabelID + WHERE + Fo_VerificationsValueCheck = 'N' AND + Fo_VerificationsValueT_OrderHeaderID = {$prm['T_OrderHeaderID']} + GROUP BY Fo_VerificationsValueT_OrderHeaderID + "; + //echo $sql; + $query = $this->db_onedev->query($sql)->row_array(); + if ($query) { + array_push($rst_data, $query); + } + + $result = array( + "total" => 1, + "records" => array('notes' => $notes, 'reqs' => $rst_data) + ); + $this->sys_ok($result); + + exit; + } + + function savenotesampling() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rst_data = array(); + $prm = $this->sys_input; + $userid = $this->sys_user["M_UserID"]; + + $sql = "UPDATE t_orderheader SET + T_OrderHeaderSamplingNote = '{$prm['sampling_note']}', + T_OrderHeaderSamplingNoteM_UserID = {$userid} + WHERE + T_OrderHeaderID = {$prm['T_OrderHeaderID']}"; + //echo $sql; + $query = $this->db_onedev->query($sql); + + $result = array( + "total" => 1, + "records" => $rst_data + ); + $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; + } +} diff --git a/application/controllers/mockup/samplinglab-v15/Samplingcall.php b/application/controllers/mockup/samplinglab-v15/Samplingcall.php index b96aa844..4a902de3 100644 --- a/application/controllers/mockup/samplinglab-v15/Samplingcall.php +++ b/application/controllers/mockup/samplinglab-v15/Samplingcall.php @@ -11,6 +11,7 @@ class Samplingcall extends MY_Controller { parent::__construct(); $this->db_onedev = $this->load->database("onedev", true); + $this->load->library('ibl_encryptor'); // $this->IP_SOCKET_IO = "devone.aplikasi.web.id"; $this->IP_SOCKET_IO = "localhost"; } @@ -181,17 +182,17 @@ class Samplingcall extends MY_Controller $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND ( DATE(T_OrderHeaderAddonIsComingDate) = '{$xdate}' OR DATE(T_OrderHeaderDate) = '{$xdate}' ) {$where_status}"; //$sql_param = array(); - if ($name != "") { - if ($sql_where != "") { - $sql_where .= " and "; + if ($name != "" && mb_strlen(trim($name)) >= 3) { + $toks = $this->ibl_encryptor->query_tokens($name); + foreach ($toks as $tok) { + $tok_esc = $this->db_onedev->escape_str($tok); + $sql_where .= " AND JSON_CONTAINS(M_PatientName_bidx, '\"$tok_esc\"')"; } - $sql_where .= " M_PatientName like '%$name%' "; - //$sql_param[] = "%$nama%"; } $filter_search = ''; if ($nolab != "") { - - $filter_search = "WHERE ( T_OrderHeaderLabNumber like '%$nolab%' OR M_PatientName like '%$nolab%' OR T_OrderHeaderLabNumberExt like '%$nolab%' )"; + // Hanya cari by nomor lab — nama pasien sudah dimasking + $filter_search = "WHERE ( T_OrderHeaderLabNumber like '%$nolab%' OR T_OrderHeaderLabNumberExt like '%$nolab%' )"; } if ($search != '') { @@ -207,11 +208,10 @@ class Samplingcall extends MY_Controller IFNULL(M_PatientPhotoThumb,'') as M_PatientPhotoThumb, M_SexName as M_SexName, M_TitleName as M_TitleName, - CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, - M_PatientName as M_PatientName, + M_PatientName_enc, M_PatientDOB_enc, M_TitleName, M_CompanyName, fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status, - DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as patient_dob, + M_PatientDOB as patient_dob_raw, fn_sampling_queue_status_id(T_OrderHeaderID,T_SampleStationID) as statusid, T_SampleStationID, T_SampleTypeID, T_SampleStationID as stationid, fn_fo_get_laststatus(T_OrderHeaderID) as last_status_fo, @@ -257,13 +257,17 @@ class Samplingcall extends MY_Controller $query = $this->db_onedev->query($sql); //echo $this->db_onedev->last_query(); $rows = $query->result_array(); - //$rst = array_merge($rows_cito,$rows_not_cito); - //$this->_add_address($rows); - if($rows){ + if ($rows) { + $enc = $this->ibl_encryptor; $count_arr = count($rows); foreach ($rows as $key => $value) { - if($key+1 != $count_arr){ - $rows[$key]['skip_time'] = $rows[$key+1]['antri_time']; + $name = $enc->decrypt($value['M_PatientName_enc']) ?? ''; + $rows[$key]['M_PatientName'] = $name; + $rows[$key]['patient_fullname'] = trim(($value['M_TitleName'] ? $value['M_TitleName'] . ' ' : '') . $name); + $rows[$key]['patient_dob'] = $enc->decrypt($value['M_PatientDOB_enc']) ?? date('d-m-Y', strtotime($value['patient_dob_raw'])); + unset($rows[$key]['M_PatientName_enc'], $rows[$key]['M_PatientDOB_enc'], $rows[$key]['patient_dob_raw']); + if ($key + 1 != $count_arr) { + $rows[$key]['skip_time'] = $rows[$key + 1]['antri_time']; } } } @@ -400,9 +404,9 @@ class Samplingcall extends MY_Controller $sql_where = "WHERE T_OrderHeaderLabNumber LIKE '{$search}' AND T_OrderHeaderIsActive = 'Y' {$where_status}"; $rows = []; - $query = "SELECT t_orderheader.*,m_patient.*, IFNULL(M_PatientPhoto,'') as M_PatientPhotoThumb, - M_SexName, M_TitleName, CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, M_CompanyName, - IF(ISNULL(T_SamplingQueueLastStatusID), 'New',T_SamplingQueueStatusName) as status, DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as patient_dob, + $query = "SELECT t_orderheader.*, IFNULL(M_PatientPhoto,'') as M_PatientPhotoThumb, + M_SexName, M_TitleName, M_PatientName_enc, M_PatientDOB_enc, M_PatientDOB as patient_dob_raw, M_CompanyName, + IF(ISNULL(T_SamplingQueueLastStatusID), 'New',T_SamplingQueueStatusName) as status, IF(ISNULL(T_SamplingQueueLastStatusID), 0,T_SamplingQueueLastStatusT_SamplingQueueStatusID) as statusid, T_SampleStationID, T_SampleTypeID, {$stationid} as stationid, fn_global_check_is_cito(T_OrderHeaderID) as iscito @@ -431,12 +435,16 @@ class Samplingcall extends MY_Controller ORDER BY T_OrderHeaderID DESC limit 1"; //echo $query; - $rows = $this->db_onedev->query($query)->row(); - - $result = array( - "total" => count($rows), - "records" => $rows, - ); + $row = $this->db_onedev->query($query)->row_array(); + if ($row) { + $enc = $this->ibl_encryptor; + $name = $enc->decrypt($row['M_PatientName_enc']) ?? ''; + $row['M_PatientName'] = $name; + $row['patient_fullname'] = trim(($row['M_TitleName'] ? $row['M_TitleName'] . ' ' : '') . $name); + $row['patient_dob'] = $enc->decrypt($row['M_PatientDOB_enc']) ?? date('d-m-Y', strtotime($row['patient_dob_raw'])); + unset($row['M_PatientName_enc'], $row['M_PatientDOB_enc'], $row['patient_dob_raw']); + } + $result = array("total" => 1, "records" => $row); $this->sys_ok($result); exit; } diff --git a/application/controllers/mockup/samplingradiodiagnostic-v5/Samplingcall.php b/application/controllers/mockup/samplingradiodiagnostic-v5/Samplingcall.php index 9c6a3c82..eccb4af4 100644 --- a/application/controllers/mockup/samplingradiodiagnostic-v5/Samplingcall.php +++ b/application/controllers/mockup/samplingradiodiagnostic-v5/Samplingcall.php @@ -1,1210 +1,1218 @@ -db_onedev = $this->load->database("onedev", true); - // $this->IP_SOCKET_IO = "devone.aplikasi.web.id"; - $this->IP_SOCKET_IO = "localhost"; - } - - function getsampletypes() - { - - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $orderid = $prm['orderid']; - $stationid = $prm['stationid']; - $statusid = $prm['statusid']; - $rows = array(); - - $sql = "SELECT SUM(xcount) as cnt - FROM ( - SELECT COUNT(*) as xcount - FROM t_orderdetail - 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} AND - T_SampleStationIsNonLab = 'RADIODIAGNOSTIC' - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoT_SampleStationID = T_SampleStationID AND - T_SamplingSoIsActive = 'Y' - WHERE - T_OrderDetailT_OrderHeaderID = {$orderid} AND T_OrderDetailIsActive = 'Y' AND - ISNULL(T_SamplingSoDoneDate) - - ) x"; - //echo $sql; - $x_exist = $this->db_onedev->query($sql)->row_array(); - if (intval($x_exist['cnt']) != 0) { - $sql = "UPDATE t_sampling_queue_last_status - SET - T_SamplingQueueLastStatusT_SamplingQueueStatusID = 2 - WHERE - T_SamplingQueueLastStatusT_OrderHeaderID = '{$orderid}' AND - T_SamplingQueueLastStatusT_SampleStationID = {$stationid} AND - T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5"; - //echo $sql; - $this->db_onedev->query($sql); - } - - $sql = "SELECT T_OrderDetailID as id, - T_OrderHeaderID as orderid, - T_TestCode as test_code, - T_TestName as test_name, - T_TestID as test_id, - T_TestNat_TestID as nat_test_id, - 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, - IF(ISNULL(T_SamplingSoRequirementID),IF(ISNULL(T_SamplingSoID) OR T_SamplingSoFlag <> 'D','X','Y'),T_SamplingSoRequirementStatus) as requirement_status, - '' as requirements, - IF(Group_ResultName = 'Rontgen','xray',Group_ResultName) as type, - IF(Group_ResultName = 'Rontgen',IF(ISNULL(T_SamplingSoFormExpose),'N','Y'),'Y') as fill_form, - IFNULL(T_SamplingSoFormKv,IFNULL(M_EksposiKV,'')) as form_kv, - IFNULL(T_SamplingSoFormMa,IFNULL(M_EksposiMa,'')) as form_ma, - IFNULL(T_SamplingSoFormSecond,IFNULL(M_EksposiS,'')) as form_second, - IFNULL(T_SamplingSoFormExpose,IFNULL(M_EksposiExpose,'')) as form_expose, - 8 as Nat_PositionID - FROM t_orderheader - JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' - 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} AND - T_SampleStationIsNonLab = 'RADIODIAGNOSTIC' - JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID AND Group_ResultDetailIsActive = 'Y' - JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID - LEFT JOIN m_eksposi ON T_TestNat_TestID = M_EksposiNat_TestID AND M_EksposiIsActive = 'Y' - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoT_SampleStationID = T_SampleStationID AND - T_SamplingSoIsActive = 'Y' - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND - T_SamplingSoRequirementT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoRequirementNat_PositionID = 8 AND - T_SamplingSoRequirementIsActive = 'Y' - LEFT JOIN t_samplingso_form ON T_SamplingSoFormT_SamplingSOID = T_SamplingSOID AND T_SamplingSoFormIsActive = 'Y' - WHERE - T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' - GROUP BY T_OrderDetailID"; - //echo $sql; - $rows['sampletypes'] = $this->db_onedev->query($sql)->result_array(); - if ($rows) { - foreach ($rows['sampletypes'] as $k => $v) { - $zxprm = array(); - $zxprm['status'] = $v['status']; - $zxprm['orderdetailid'] = $v['id']; - $zxprm['orderid'] = $v['orderid']; - $zxprm['sampletypeid'] = $v['test_id']; - $rows['sampletypes'][$k]['requirements'] = $this->getrequirements($zxprm); - - } - } - - $sql = "SELECT T_BahanID as id, T_BahanName, - IF(T_TestIsNonLab = '',fn_sampling_receive_status_by_bahan_lab({$orderid},T_SampleTypeID),fn_sampling_receive_status_by_bahan_so({$orderid},T_TestID)) as status_bahan - FROM t_orderdetail - 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_OrderDetailT_OrderHeaderID AND T_BarcodeLabT_SampleTypeID = T_SampleTypeID - JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID - WHERE - T_OrderDetailT_OrderHeaderID = {$orderid} - GROUP BY T_BahanID"; - //echo $sql; - $rows['information_bahan'] = $this->db_onedev->query($sql)->result_array(); - $result = array("total" => count($rows), "records" => $rows, "sql" => $this->db_onedev->last_query()); - $this->sys_ok($result); - exit; - } - - function fillform() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $userid = $this->sys_user["M_UserID"]; - $sql = "INSERT INTO t_samplingso_form( - T_SamplingSoFormT_SamplingSOID, - T_SamplingSoFormKv, - T_SamplingSoFormMa, - T_SamplingSoFormSecond, - T_SamplingSoFormExpose, - T_SamplingSoFormUserID, - T_SamplingSoFormCreated, - T_SamplingSoFormLastUpdated - ) - VALUES( - {$prm['T_SamplingSoID']}, - {$prm['form_kv']}, - {$prm['form_ma']}, - {$prm['form_second']}, - '{$prm['form_expose']}', - {$userid}, - NOW(), - NOW() - )ON DUPLICATE KEY UPDATE - T_SamplingSoFormKv = {$prm['form_kv']}, - T_SamplingSoFormMa = {$prm['form_ma']}, - T_SamplingSoFormSecond = {$prm['form_second']}, - T_SamplingSoFormExpose = {$prm['form_expose']}, - T_SamplingSoFormUserID = {$userid}"; - //echo $sql; - $this->db_onedev->query($sql); - - $result = array("status" => "OK"); - $this->sys_ok($result); - exit; - } - - public function search() - { - $prm = $this->sys_input; - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - - $name = $prm["name"]; - $nolab = $prm["nolab"]; - $stationid = $prm["stationid"]; - $statusid = $prm["statusid"]; - $xdate = $prm["xdate"]; - $locationID = $prm['locationid']; - $companyid = isset($prm["companyid"]) ? $prm["companyid"] : 0; - $search = isset($prm["searchx"]) ? $prm["searchx"] : ''; - $filter_companyid = ''; - if ($companyid != 0 || $companyid != '0') { - $filter_companyid = " AND M_CompanyID = {$companyid} "; - } - - $where_status = " AND ( ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X')"; - $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND ( DATE(T_OrderHeaderAddonIsComingDate) = '{$xdate}' OR DATE(T_OrderHeaderDate) = '{$xdate}' ) {$where_status}"; - - if ($nolab != "") { - if ($sql_where != "") { - $sql_where .= " and "; - } - $sql_where .= "( T_OrderHeaderLabNumber like '%$nolab%' OR M_PatientName like '%$nolab%' OR T_OrderHeaderLabNumberExt like '%$nolab%' )"; - } - - if ($search != '') { - $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderLabNumber = '{$search}'"; - } - - $sql = "SELECT * FROM ( - SELECT DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date, - t_orderheader.*, - DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as dob, - m_patient.*, - M_SexName, - M_TitleName, - CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, - M_CompanyName, - fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status, - DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as patient_dob, - fn_sampling_queue_status_id(T_OrderHeaderID,T_SampleStationID) as statusid, - T_SampleStationID, - T_TestID, - {$stationid} as stationid, - T_OrderPromiseDateTime, - T_OrderHeaderIsCito as iscito, - IFNULL(T_OrderHeaderFoNote,'') as fo_note, - IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, - fn_sampling_reqs(T_OrderHeaderID) as fo_requirements, - '' as htmlforeqs, - IF(fn_fo_ver_have_reqs(T_OrderHeaderID) = 0,'Y','N') as fo_ver_status_req, - fn_fo_reg_have_reqs(T_OrderHeaderID) as fo_reg_status_req, - fn_sampling_reqs_status(T_OrderHeaderID) as fo_requirements_status, - IF(fn_fo_get_verification_status(T_OrderHeaderID) = 0, 'X','Y') as fo_verification_status, - IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, - fn_sampling_queue_status_confirm(T_OrderHeaderID,T_SampleStationID) as status_confirm, - CONCAT(M_DoctorPrefix,M_DoctorPrefix2,' ',M_DoctorName,' ',M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as doctor_sender, - fn_fo_get_laststatus(T_OrderHeaderID) as last_status_fo, - T_OrderHeaderAddonIsComing as status_coming, - T_OrderLocationID as order_location_id, - IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as antri_time, - IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as skip_time - FROM t_orderheader - JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID - JOIN m_doctor ON T_OrderHeaderSenderM_DoctorID = M_DoctorID - JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_companyid - JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID - JOIN m_title ON M_PatientM_TitleID = M_TitleID - JOIN m_sex ON M_PatientM_SexID = M_SexID - JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND T_OrderLocationT_SampleStationID = {$stationid} AND T_OrderLocationIsActive = 'Y' - LEFT JOIN antrian_samplestation ON AntrianSampleStationT_OrderLocationID =T_OrderLocationID AND AntrianSampleStationIsActive = 'Y' - JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND M_LocationID = {$locationID} - LEFT JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' - 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} AND T_SampleStationIsNonLab = 'RADIODIAGNOSTIC' - JOIN last_status ON Last_StatusT_OrderHeaderID = T_OrderHeaderID - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoT_SampleStationID = T_SampleStationID AND - T_SamplingSoIsActive = 'Y' - - $sql_where - GROUP BY T_OrderHeaderID - HAVING last_status_fo IN (3,5) - ) x - ORDER BY T_OrderHeaderIsCito DESC, antri_time ASC - "; - //echo $sql; - $query = $this->db_onedev->query($sql); - //echo $this->db_onedev->last_query(); - $rows = $query->result_array(); - if($rows){ - $count_arr = count($rows); - foreach ($rows as $key => $value) { - if($key+1 != $count_arr){ - $rows[$key]['skip_time'] = $rows[$key+1]['antri_time']; - } - } - } - $result = array("total" => count($rst), "records" => $rows, "sql" => $this->db_onedev->last_query()); - $this->sys_ok($result); - exit; - } - - function searchcompany() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - - $max_rst = 12; - $tot_count = 0; - - $q = [ - 'search' => '%' - ]; - - if ($prm['search'] != '') { - $q['search'] = "%{$prm['search']}%"; - } - - // QUERY TOTAL - $sql = "SELECT count(*) as total - FROM m_company - WHERE - M_CompanyName like ? - AND M_CompanyIsActive = 'Y'"; - $query = $this->db_onedev->query($sql, $q['search']); - //echo $query; - if ($query) { - $tot_count = $query->result_array()[0]["total"]; - } else { - $this->sys_error_db("m_city count", $this->db_onedev); - exit; - } - $rows = array('id' => 0, 'name' => 'Semua'); - $sql = " - SELECT M_CompanyID as id, M_CompanyName as name - FROM m_company - WHERE - M_CompanyName like ? - AND M_CompanyIsActive = 'Y' - ORDER BY M_CompanyName DESC - "; - $query = $this->db_onedev->query($sql, array($q['search'])); - - if ($query) { - $rows = $query->result_array(); - array_push($rows, array('id' => 0, 'name' => 'Semua')); - //echo $this->db_onedev->last_query(); - $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows)); - $this->sys_ok($result); - } else { - $this->sys_error_db("m_company rows", $this->db_onedev); - exit; - } - } - - function getstationstatus() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rows = []; - $query = " SELECT T_SampleStationID as id, T_SampleStationName as name - FROM t_samplestation - WHERE - T_SampleStationIsActive = 'Y' AND T_SampleStationIsNonLab = 'RADIODIAGNOSTIC' - "; - //echo $query; - $rows['stations'] = $this->db_onedev->query($query)->result_array(); - $rows['statuses'] = array(array('id' => 'NEW', 'name' => 'New'), array('id' => 'DONE', 'name' => 'Done')); - - $result = array( - "total" => count($rows), - "records" => $rows, - ); - $this->sys_ok($result); - exit; - } - - function search_staff() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $rows = []; - $query = " SELECT M_StaffID as id, M_StaffName as name, M_StaffCode as code, M_UserID as userid - FROM m_staff - JOIN m_user ON M_UserM_StaffID = M_StaffID AND M_UserIsActive = 'Y' - WHERE - M_StaffIsActive = 'Y' AND M_StaffCode = '{$prm['search']}' LIMIT 1 - "; - //echo $query; - $rows = $this->db_onedev->query($query)->row_array(); - - $result = array( - "total" => count($rows), - "records" => $rows, - ); - $this->sys_ok($result); - exit; - } - - function search_patient() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $search = '%' . $prm["search"] . '%'; - $stationid = $prm["stationid"]; - $statusid = $prm["statusid"]; - $patients = $prm["patients"]; - $where_status = ''; - if ($statusid === 'NEW') { - $where_status = "AND (ISNULL(T_SamplingQueueLastStatusID) OR T_SamplingQueueLastStatusT_SamplingQueueStatusID <> 5 )"; - } else { - $where_status = "AND T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5"; - } - - // echo $norm; - //$where_status = " AND {$where_status}"; - - $sql_where = "WHERE T_OrderHeaderLabNumber LIKE '{$search}' AND T_OrderHeaderIsActive = 'Y' {$where_status}"; - $rows = []; - $query = "SELECT t_orderheader.*,m_patient.*, IFNULL(M_PatientPhoto,'') as M_PatientPhotoThumb, - M_SexName, M_TitleName, CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, M_CompanyName, - IF(ISNULL(T_SamplingQueueLastStatusID), 'New',T_SamplingQueueStatusName) as status, DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as patient_dob, - IF(ISNULL(T_SamplingQueueLastStatusID), 0,T_SamplingQueueLastStatusT_SamplingQueueStatusID) as statusid, T_SampleStationID, T_SampleTypeID, - {$stationid} as stationid, - T_OrderHeaderIsCito as iscito, - T_SamplingQueueLastStatusConfirm as status_confirm - FROM t_orderheader - JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID - JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID - JOIN m_title ON M_PatientM_TitleID = M_TitleID - JOIN m_sex ON M_PatientM_SexID = M_SexID - JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID - JOIN t_test ON T_OrderDetailT_TestID = T_TestID - JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID - JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID - JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} AND T_SampleStationIsNonLab = 'RADIODIAGNOSTIC' - JOIN last_status ON Last_StatusT_OrderHeaderID = T_OrderHeaderID AND ( Last_StatusM_StatusID = 3 OR Last_StatusM_StatusID = 5 ) - LEFT JOIN t_sampling_queue_last_status ON - T_SamplingQueueLastStatusT_SampleStationID = T_SampleStationID AND - T_SamplingQueueLastStatusT_OrderHeaderID = T_OrderHeaderID - LEFT JOIN t_sampling_queue_status ON T_SamplingQueueLastStatusT_SamplingQueueStatusID = T_SamplingQueueStatusID - LEFT JOIN t_ordersamplereq ON T_OrderSampleReqT_SampleStationID = T_SampleStationID AND T_OrderSampleReqT_OrderSampleID - $sql_where - GROUP BY T_OrderHeaderID - ORDER BY T_OrderHeaderID DESC - limit 1"; - //echo $query; - $rows = $this->db_onedev->query($query)->row(); - - $result = array( - "total" => count($rows), - "records" => $rows, - ); - $this->sys_ok($result); - exit; - } - - /*function getrequirements($prm){ - - - $query =" SELECT Nat_RequirementID as id, - Nat_RequirementName as name, '{$prm['status']}' as status, - if(ISNULL(T_SamplingSoRequirementID),'N', if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N') ) as chex, - Nat_RequirementPositionNat_PositionID as positionid - FROM nat_requirement - JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID - JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND Nat_RequirementPositionNat_PositionID = 8 AND - Nat_RequirementPositionIsActive = 'Y' - JOIN t_test ON T_TestNat_TestID = Nat_TestRequirementNat_TestID - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND - T_SamplingSoRequirementT_SampletypeID = {$prm['sampletypeid']} AND T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID - WHERE - Nat_TestRequirementIsActive = 'Y' - "; - //echo $query; - $rows = $this->db_onedev->query($query)->result_array(); - - - return $rows; - }*/ - - - function getrequirements($prm) - { - - $rows = array(); - $query = " - SELECT Nat_RequirementID as id, - Nat_RequirementName as name, 'P' as status, - if(ISNULL(T_SamplingSoRequirementID),'N', - if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N')) as chex, - Nat_RequirementPositionNat_PositionID as positionid - FROM nat_requirement - JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID - JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND - Nat_RequirementPositionNat_PositionID = 8 AND - Nat_RequirementPositionIsActive = 'Y' - JOIN t_test ON T_TestNat_TestID = Nat_TestRequirementNat_TestID - JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = {$prm['orderid']} AND - T_SamplingSoT_TestID = {$prm['sampletypeid']} AND - T_TestID = T_SamplingSoT_TestID AND - T_SamplingSoIsActive = 'Y' - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND - T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND - T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID - WHERE - Nat_TestRequirementIsActive = 'Y' - GROUP BY nat_requirementID - UNION - SELECT Nat_RequirementID as id, - Nat_RequirementName as name, 'P' as status, - if(ISNULL(T_SamplingSoRequirementID),'N', - if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N')) as chex, - Nat_RequirementPositionNat_PositionID as positionid - FROM nat_requirement - JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID - JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND - Nat_RequirementPositionNat_PositionID = 8 AND - Nat_RequirementPositionIsActive = 'Y' AND - Nat_RequirementIsAllTest = 'Y' - JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = {$prm['orderid']} AND - T_SamplingSoT_TestID = {$prm['sampletypeid']} AND - T_SamplingSoIsActive = 'Y' - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND - T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND - T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID - GROUP BY nat_requirementID - "; - //echo $query; - $rows = $this->db_onedev->query($query)->result_array(); - - - return $rows; - } - - function doconfirm() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rst_data = array(); - $prm = $this->sys_input; - $sql = "UPDATE t_sampling_queue_last_status SET - T_SamplingQueueLastStatusConfirm = 'Y' - WHERE T_SamplingQueueLastStatusT_OrderHeaderID = '{$prm['id']}' AND - T_SamplingQueueLastStatusT_SampleStationID = '{$prm['stationid']}'"; - //echo $sql; - $this->db_onedev->query($sql); - - $result = array( - "total" => 1, - "records" => $rst_data - ); - $this->sys_ok($result); - - exit; - } - - - - - function saverequirement() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $prm = $this->sys_input; - $query = " INSERT INTO t_samplingso_requirement ( - T_SamplingSoRequirementT_OrderHeaderID, - T_SamplingSoRequirementT_SampleStationID, - T_SamplingSoRequirementT_SampletypeID, - T_SamplingSoRequirementStatus, - T_SamplingSoRequirementRequirements, - T_SamplingSoRequirementNote, - T_SamplingSoRequirementNat_PositionID, - T_SamplingSoRequirementUserID, - T_SamplingSoRequirementCreated - )VALUES( - {$prm['T_OrderHeaderID']}, - {$prm['stationid']}, - {$prm['sample']['T_SampleTypeID']}, - 'N', - - )"; - //echo $query; - $rows = $this->db_onedev->query($query)->result_array(); - - - $result = array( - "total" => count($rows), - "records" => $rows, - ); - $this->sys_ok($result); - exit; - } - - function doaction() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rst_data = array('status' => 'OK'); - $status_call = array('status' => 'OK', 'data' => array()); - $prm = $this->sys_input; - $userid = $this->sys_user["M_UserID"]; - if ($prm['staff']['id'] != 0 || $prm['staff']['id'] != '0') { - $userid = $prm['staff']['userid']; - } - - $sql = "SELECT T_OrderHeaderQueue 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 = {$prm['stationid']} - WHERE T_OrderHeaderID={$prm['id']}"; - $location = $this->db_onedev->query($sql)->row_array(); - $locationID = $location['locationID']; - $locationName = $location['locationName']; - $queueNumber = $location['queueNumber']; - $splitedLocationName = explode(" ", $locationName); - $locationName = $splitedLocationName[0]; - - - if ($prm['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 = {$prm['id']} AND - T_SamplingQueueLastStatusT_SampleStationID <> {$prm['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 = {$prm['id']} 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' - 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_SamplingSoT_SampleStationID = T_SampleStationID AND - T_SamplingSoIsActive = 'Y' - WHERE - T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' AND - 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 = {$prm['id']} AND - T_SamplingQueueLastStatusT_SampleStationID = {$data_status_call['T_SampleStationID']}"; - $this->db_onedev->query($sql); - $status_call = array('status' => 'OK', 'data' => array()); - } - } - } - - $next_status = $prm['statusnextid']; - if ($prm['act'] == 'process') { - $sql = "SELECT - T_OrderHeaderID, - T_OrderDetailID as id, - T_OrderDetailT_TestCode, - T_OrderDetailT_TestName, - T_TestID as test_id, - 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 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 = {$prm['stationid']} - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoT_SampleStationID = T_SampleStationID AND - T_SamplingSoIsActive = 'Y' - LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_OrderHeaderID = T_OrderHeaderID AND - T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND - T_SamplingSoRequirementT_SampleStationID = T_SampleStationID AND - T_SamplingSoRequirementIsActive = 'Y' - WHERE - T_OrderHeaderID = {$prm['id']} AND T_OrderHeaderIsActive = 'Y' AND - (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) { - $sql = "INSERT INTO t_samplingso ( - T_SamplingSoT_SampleStationID, - T_SamplingSoT_OrderHeaderID, - T_SamplingSoT_TestID, - T_SamplingSoProcessDate, - T_SamplingSoProcessTime, - T_SamplingSoProcessUserID, - T_SamplingSoCreated, - T_SamplingSoUserID - ) - VALUES( - {$prm['stationid']}, - {$prm['id']}, - {$v->test_id}, - CURDATE(), - CURTIME(), - {$userid}, - NOW(), - {$userid} - ) ON DUPLICATE KEY UPDATE - T_SamplingSoProcessDate = CURDATE(), - T_SamplingSoProcessTime = CURTIME(), - T_SamplingSoFlag = 'P', - T_SamplingSoIsActive = 'Y', - T_SamplingSoProcessUserID = {$userid}, - T_SamplingSoLastUpdated = NOW(), - T_SamplingSoLastUpdatedUserID = {$userid}"; - //echo $sql; - $this->db_onedev->query($sql); - - $sql = "INSERT INTO sample_so_by_step ( - SampleSoByStepT_OrderHeaderID, - SampleSoByStepT_TestID, - SampleSoByStepCode, - SampleSoByStepDateTime, - SampleSoByStepUserID - ) - VALUES( - {$prm['id']}, - {$v->test_id}, - 'SAMPLING.Sampling.Sampled', - NOW(), - {$userid} - )"; - $this->db_onedev->query($sql); - } - } - $this->broadcast("specimen-col-process"); - } - - if ($prm['act'] == 'samplingdone') { - $sql = "INSERT INTO t_samplingso ( - T_SamplingSoT_SampleStationID, - T_SamplingSoT_OrderHeaderID, - T_SamplingSoT_TestID, - T_SamplingSoDoneDate, - T_SamplingSoDoneTime, - T_SamplingSoDoneUserID, - T_SamplingSoCreated, - T_SamplingSoUserID - ) - VALUES( - {$prm['stationid']}, - {$prm['id']}, - {$prm['sample']['test_id']}, - CURDATE(), - CURTIME(), - {$userid}, - NOW(), - {$userid} - ) ON DUPLICATE KEY UPDATE - T_SamplingSoDoneDate = CURDATE(), - T_SamplingSoDoneTime = CURTIME(), - T_SamplingSoFlag = 'D', - T_SamplingSoIsActive = 'Y', - T_SamplingSoDoneUserID = {$userid}, - T_SamplingSoLastUpdatedUserID = {$userid}, - T_SamplingSoLastUpdated = NOW()"; - $this->db_onedev->query($sql); - //echo $sql; - $xreq = $prm['sample']['requirements']; - $arr_requirements = array(); - foreach ($xreq as $k => $v) { - if ($v['chex'] == 'Y') - array_push($arr_requirements, $v['id']); - } - $requirements = '[' . join(',', $arr_requirements) . ']'; - - $sql = "UPDATE t_samplingso_requirement SET - T_SamplingSoRequirementIsActive = 'N', - T_SamplingSoRequirementDeleted = NOW(), - T_SamplingSoRequirementDeletedUserID = {$userid} - WHERE - T_SamplingSoRequirementT_OrderHeaderID = {$prm['id']} AND - T_SamplingSoRequirementT_SampleStationID = {$prm['stationid']} AND - T_SamplingSoRequirementT_SamplingSoID = {$prm['sample']['T_SamplingSoID']} AND - T_SamplingSoRequirementIsActive = 'Y'"; - $this->db_onedev->query($sql); - - $sql = "INSERT INTO t_samplingso_requirement( - T_SamplingSoRequirementT_OrderHeaderID, - T_SamplingSoRequirementT_SampleStationID, - T_SamplingSoRequirementT_SamplingSoID, - T_SamplingSoRequirementNat_PositionID, - T_SamplingSoRequirementStatus, - T_SamplingSoRequirementRequirements, - T_SamplingSoRequirementUserID, - T_SamplingSoRequirementCreated - ) - VALUES( - {$prm['id']}, - {$prm['stationid']}, - {$prm['sample']['T_SamplingSoID']}, - {$prm['sample']['Nat_PositionID']}, - '{$prm['sample']['requirement_status']}', - '{$requirements}', - {$userid}, - NOW() - )"; - //echo $sql; - $this->db_onedev->query($sql); - $sql = "INSERT INTO sample_so_by_step ( - SampleSoByStepT_OrderHeaderID, - SampleSoByStepT_TestID, - SampleSoByStepCode, - SampleSoByStepRequirementStatus, - SampleSoByStepReuirements, - SampleSoByStepDateTime, - SampleSoByStepUserID - ) - VALUES( - {$prm['id']}, - {$prm['sample']['test_id']}, - 'SAMPLING.Sampling.Received', - '{$prm['sample']['requirement_status']}', - '{$requirements}', - NOW(), - {$userid} - )"; - $this->db_onedev->query($sql); - - if ($prm['sample']['type'] === 'xray') { - $sql = "INSERT INTO t_samplingso_form( - T_SamplingSoFormT_SampleStationID, - T_SamplingSoFormT_SamplingSOID, - T_SamplingSoFormKv, - T_SamplingSoFormMa, - T_SamplingSoFormSecond, - T_SamplingSoFormExpose, - T_SamplingSoFormUserID, - T_SamplingSoFormCreated, - T_SamplingSoFormLastUpdated - ) - VALUES( - {$prm['stationid']}, - {$prm['sample']['T_SamplingSoID']}, - {$prm['sample']['form_kv']}, - {$prm['sample']['form_ma']}, - {$prm['sample']['form_second']}, - {$prm['sample']['form_expose']}, - {$userid}, - NOW(), - NOW() - )ON DUPLICATE KEY UPDATE - T_SamplingSoFormT_SampleStationID = {$prm['stationid']}, - T_SamplingSoFormKv = {$prm['sample']['form_kv']}, - T_SamplingSoFormMa = {$prm['sample']['form_ma']}, - T_SamplingSoFormSecond = {$prm['sample']['form_second']}, - T_SamplingSoFormExpose = {$prm['sample']['form_expose']}, - T_SamplingSoFormUserID = {$userid}"; - //echo $sql; - $this->db_onedev->query($sql); - } - - $this->load->library('Nonlabtemplate'); - $gen_template = $this->nonlabtemplate->generate($prm['sample']['T_SamplingSoID']); - - $sql = "SELECT COUNT(*) as xcount - FROM ( - SELECT T_SamplingSoID, T_SamplingSoFlag ,T_OrderDetailT_TestID, T_OrderDetailID - FROM t_orderdetail - 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 = {$prm['stationid']} - LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND - T_SamplingSoT_TestID = T_TestID AND - T_SamplingSoT_SampleStationID = T_SampleStationID AND - T_SamplingSoIsActive = 'Y' - WHERE - T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' - GROUP BY T_TestID - HAVING ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X' - ) xx"; - //echo $sql; - $xcount = $this->db_onedev->query($sql)->row()->xcount; - $rst_data = array('status' => 'PARTIAL'); - if ($xcount == 0) { - $next_status = 5; - //print_r($kesimpulan); - $rst_data = array('status' => 'OK'); - } - $this->broadcast("specimen-col-receive"); - } - - if ($prm['act'] !== 'samplingprocess' && $status_call['status'] == 'OK') { - $dt_json = json_encode(array('T_SampleStationID' => $prm['stationid'], 'T_OrderHeaderID' => $prm['id'], '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 = {$prm['stationid']} AND - T_SamplingQueueLastStatusT_OrderHeaderID = {$prm['id']} AND - T_SamplingQueueLastStatusIsActive = 'Y'"; - $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( - {$prm['stationid']}, - {$prm['id']}, - {$next_status}, - {$userid}) ON DUPLICATE KEY UPDATE - T_SamplingQueueLastStatusT_SamplingQueueStatusID = {$next_status}, - T_SamplingQueueLastStatusUserID = {$userid} - "; - //echo $query; - $rows = $this->db_onedev->query($query); - } - - if (intval($next_status) == 1) { - if ($status_call['status'] == 'OK') { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/call.sm.{$locationID}.{$queueNumber}.{$locationName}"); //CALL NODE - } - } else if (intval($next_status) == 2) { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/skip.sm.{$locationID}"); - } else if (intval($next_status) == 3) { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/serve.sm.{$locationID}"); - } else if (intval($next_status) == 5) { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); - } else { - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); - } - - if ($status_call['status'] == 'NOTCALL') { - $rst_data = $status_call; - } - - if ($prm['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 - ); - $this->sys_ok($result); - - exit; - } - - - function getdatanoterequirement() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rst_data = array(); - $prm = $this->sys_input; - - $sql = "SELECT IFNULL(T_OrderHeaderFoNote,'') as fo_note, - fn_getstaffname(T_OrderHeaderFoNoteM_UserID) as fo_note_user, - IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, - fn_getstaffname(T_OrderHeaderVerificationNoteM_UserID) as fo_ver_note_user, - IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, - fn_getstaffname(T_OrderHeaderSamplingNoteM_UserID) as sampling_note_user - FROM t_orderheader - WHERE - T_OrderHeaderID = {$prm['T_OrderHeaderID']}"; - $notes = $this->db_onedev->query($sql)->row_array(); - - $sql = "SELECT 'fo registration' as position,GROUP_CONCAT(DISTINCT Nat_RequirementName separator ',') as requirements - FROM t_orderheader - JOIN t_orderreq ON T_OrderReqT_OrderHeaderID = T_OrderHeaderID - JOIN nat_requirement ON json_contains(T_OrderReqs,Nat_RequirementID) - WHERE T_OrderHeaderID = {$prm['T_OrderHeaderID']} - GROUP BY T_OrderHeaderID"; - //echo $sql; - $query = $this->db_onedev->query($sql)->row_array(); - if ($query) { - array_push($rst_data, $query); - } - - $sql = "SELECT 'fo verifikasi' as position, GROUP_CONCAT(DISTINCT Fo_VerificationsLabelName separator ',') as requirements - FROM fo_verificationsvalue - JOIN fo_verificationslabel ON Fo_VerificationsValueFo_VerificationsLabelID = Fo_VerificationsLabelID - WHERE - Fo_VerificationsValueCheck = 'N' AND - Fo_VerificationsValueT_OrderHeaderID = {$prm['T_OrderHeaderID']} - GROUP BY Fo_VerificationsValueT_OrderHeaderID - "; - //echo $sql; - $query = $this->db_onedev->query($sql)->row_array(); - if ($query) { - array_push($rst_data, $query); - } - - $result = array( - "total" => 1, - "records" => array('notes' => $notes, 'reqs' => $rst_data) - ); - $this->sys_ok($result); - - exit; - } - - function savenotesampling() - { - if (!$this->isLogin) { - $this->sys_error("Invalid Token"); - exit; - } - $rst_data = array(); - $prm = $this->sys_input; - $userid = $this->sys_user["M_UserID"]; - - $sql = "UPDATE t_orderheader SET - T_OrderHeaderSamplingNote = '{$prm['sampling_note']}', - T_OrderHeaderSamplingNoteM_UserID = {$userid} - WHERE - T_OrderHeaderID = {$prm['T_OrderHeaderID']}"; - //echo $sql; - $query = $this->db_onedev->query($sql); - - $result = array( - "total" => 1, - "records" => $rst_data - ); - $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 cobacall() - { - $sql = "SELECT T_OrderHeaderQueue 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 = 2 - WHERE T_OrderHeaderID=131560"; - $location = $this->db_onedev->query($sql)->row_array(); - $locationID = $location['locationID']; - $locationName = $location['locationName']; - $queueNumber = $location['queueNumber']; - print_r($location); - print_r($location['locationID']); - $splitedLocationName = explode(" ", $locationName); - $locationName = implode("+", $splitedLocationName); - try { - //code... - file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/call.sm.$locationID.$queueNumber.$locationName"); - } catch (Exception $e) { - print_r($e); - } - } -} -// SELECT DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date, -// t_orderheader.*, -// tDATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as dob, -// m_patient.*, -// tIFNULL(M_PatientPhoto,'') as M_PatientPhotoThumb, -// M_SexName, -// M_TitleName, -// CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, tM_CompanyName, -// fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status, -// DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as patient_dob, -// fn_sampling_queue_status_id(T_OrderHeaderID,T_SampleStationID) as statusid, -// T_SampleStationID, -// T_TestID, -// 2 as stationid, -// T_OrderPromiseDateTime, -// T_OrderHeaderIsCito as iscito, -// IFNULL(T_OrderHeaderFoNote,'') as fo_note, -// IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, -// fn_sampling_reqs(T_OrderHeaderID) as fo_requirements, -// '' as htmlforeqs, -// IF(fn_fo_ver_have_reqs(T_OrderHeaderID) = 0,'Y','N') as fo_ver_status_req, -// fn_fo_reg_have_reqs(T_OrderHeaderID) as fo_reg_status_req, -// fn_sampling_reqs_status(T_OrderHeaderID) as fo_requirements_status, -// IF(fn_fo_get_verification_status(T_OrderHeaderID) = 0, 'X','Y') as fo_verification_status, -// IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, -// fn_sampling_queue_status_confirm(T_OrderHeaderID,T_SampleStationID) as status_confirm, -// CONCAT(M_DoctorPrefix,M_DoctorPrefix2,' ',M_DoctorName,' ',M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as doctor_sender, -// fn_fo_get_laststatus(T_OrderHeaderID) as last_status_fo, -// T_OrderHeaderAddonIsComing as status_coming -// FROM t_orderheader -// JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID -// JOIN m_doctor ON T_OrderHeaderSenderM_DoctorID = M_DoctorID -// JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID -// JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID -// JOIN m_title ON M_PatientM_TitleID = M_TitleID -// JOIN m_sex ON M_PatientM_SexID = M_SexID -// LEFT JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' -// 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 = 2 AND T_SampleStationIsNonLab = 'RADIODIAGNOSTIC' -// JOIN last_status ON Last_StatusT_OrderHeaderID = T_OrderHeaderID -// LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND -// T_SamplingSoT_TestID = T_TestID AND -// T_SamplingSoT_SampleStationID = T_SampleStationID AND -// T_SamplingSoIsActive = 'Y' -// WHERE T_OrderHeaderIsActive = 'Y' AND ( DATE(T_OrderHeaderAddonIsComingDate) = '2023-02-21' OR DATE(T_OrderHeaderDate) = '2023-02-21' ) AND ( ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X') -// tGROUP BY T_OrderHeaderID -// HAVING last_status_fo IN (3,5) +db_onedev = $this->load->database("onedev", true); + $this->load->library('ibl_encryptor'); + // $this->IP_SOCKET_IO = "devone.aplikasi.web.id"; + $this->IP_SOCKET_IO = "localhost"; + } + + function getsampletypes() + { + + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $orderid = $prm['orderid']; + $stationid = $prm['stationid']; + $statusid = $prm['statusid']; + $rows = array(); + + $sql = "SELECT SUM(xcount) as cnt + FROM ( + SELECT COUNT(*) as xcount + FROM t_orderdetail + 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} AND + T_SampleStationIsNonLab = 'RADIODIAGNOSTIC' + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoT_SampleStationID = T_SampleStationID AND + T_SamplingSoIsActive = 'Y' + WHERE + T_OrderDetailT_OrderHeaderID = {$orderid} AND T_OrderDetailIsActive = 'Y' AND + ISNULL(T_SamplingSoDoneDate) + + ) x"; + //echo $sql; + $x_exist = $this->db_onedev->query($sql)->row_array(); + if (intval($x_exist['cnt']) != 0) { + $sql = "UPDATE t_sampling_queue_last_status + SET + T_SamplingQueueLastStatusT_SamplingQueueStatusID = 2 + WHERE + T_SamplingQueueLastStatusT_OrderHeaderID = '{$orderid}' AND + T_SamplingQueueLastStatusT_SampleStationID = {$stationid} AND + T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5"; + //echo $sql; + $this->db_onedev->query($sql); + } + + $sql = "SELECT T_OrderDetailID as id, + T_OrderHeaderID as orderid, + T_TestCode as test_code, + T_TestName as test_name, + T_TestID as test_id, + T_TestNat_TestID as nat_test_id, + 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, + IF(ISNULL(T_SamplingSoRequirementID),IF(ISNULL(T_SamplingSoID) OR T_SamplingSoFlag <> 'D','X','Y'),T_SamplingSoRequirementStatus) as requirement_status, + '' as requirements, + IF(Group_ResultName = 'Rontgen','xray',Group_ResultName) as type, + IF(Group_ResultName = 'Rontgen',IF(ISNULL(T_SamplingSoFormExpose),'N','Y'),'Y') as fill_form, + IFNULL(T_SamplingSoFormKv,IFNULL(M_EksposiKV,'')) as form_kv, + IFNULL(T_SamplingSoFormMa,IFNULL(M_EksposiMa,'')) as form_ma, + IFNULL(T_SamplingSoFormSecond,IFNULL(M_EksposiS,'')) as form_second, + IFNULL(T_SamplingSoFormExpose,IFNULL(M_EksposiExpose,'')) as form_expose, + 8 as Nat_PositionID + FROM t_orderheader + JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y' + 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} AND + T_SampleStationIsNonLab = 'RADIODIAGNOSTIC' + JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID AND Group_ResultDetailIsActive = 'Y' + JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID + LEFT JOIN m_eksposi ON T_TestNat_TestID = M_EksposiNat_TestID AND M_EksposiIsActive = 'Y' + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoT_SampleStationID = T_SampleStationID AND + T_SamplingSoIsActive = 'Y' + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND + T_SamplingSoRequirementT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoRequirementNat_PositionID = 8 AND + T_SamplingSoRequirementIsActive = 'Y' + LEFT JOIN t_samplingso_form ON T_SamplingSoFormT_SamplingSOID = T_SamplingSOID AND T_SamplingSoFormIsActive = 'Y' + WHERE + T_OrderHeaderID = {$orderid} AND T_OrderHeaderIsActive = 'Y' + GROUP BY T_OrderDetailID"; + //echo $sql; + $rows['sampletypes'] = $this->db_onedev->query($sql)->result_array(); + if ($rows) { + foreach ($rows['sampletypes'] as $k => $v) { + $zxprm = array(); + $zxprm['status'] = $v['status']; + $zxprm['orderdetailid'] = $v['id']; + $zxprm['orderid'] = $v['orderid']; + $zxprm['sampletypeid'] = $v['test_id']; + $rows['sampletypes'][$k]['requirements'] = $this->getrequirements($zxprm); + + } + } + + $sql = "SELECT T_BahanID as id, T_BahanName, + IF(T_TestIsNonLab = '',fn_sampling_receive_status_by_bahan_lab({$orderid},T_SampleTypeID),fn_sampling_receive_status_by_bahan_so({$orderid},T_TestID)) as status_bahan + FROM t_orderdetail + 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_OrderDetailT_OrderHeaderID AND T_BarcodeLabT_SampleTypeID = T_SampleTypeID + JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID + WHERE + T_OrderDetailT_OrderHeaderID = {$orderid} + GROUP BY T_BahanID"; + //echo $sql; + $rows['information_bahan'] = $this->db_onedev->query($sql)->result_array(); + $result = array("total" => count($rows), "records" => $rows, "sql" => $this->db_onedev->last_query()); + $this->sys_ok($result); + exit; + } + + function fillform() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $userid = $this->sys_user["M_UserID"]; + $sql = "INSERT INTO t_samplingso_form( + T_SamplingSoFormT_SamplingSOID, + T_SamplingSoFormKv, + T_SamplingSoFormMa, + T_SamplingSoFormSecond, + T_SamplingSoFormExpose, + T_SamplingSoFormUserID, + T_SamplingSoFormCreated, + T_SamplingSoFormLastUpdated + ) + VALUES( + {$prm['T_SamplingSoID']}, + {$prm['form_kv']}, + {$prm['form_ma']}, + {$prm['form_second']}, + '{$prm['form_expose']}', + {$userid}, + NOW(), + NOW() + )ON DUPLICATE KEY UPDATE + T_SamplingSoFormKv = {$prm['form_kv']}, + T_SamplingSoFormMa = {$prm['form_ma']}, + T_SamplingSoFormSecond = {$prm['form_second']}, + T_SamplingSoFormExpose = {$prm['form_expose']}, + T_SamplingSoFormUserID = {$userid}"; + //echo $sql; + $this->db_onedev->query($sql); + + $result = array("status" => "OK"); + $this->sys_ok($result); + exit; + } + + public function search() + { + $prm = $this->sys_input; + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $name = $prm["name"]; + $nolab = $prm["nolab"]; + $stationid = $prm["stationid"]; + $statusid = $prm["statusid"]; + $xdate = $prm["xdate"]; + $locationID = $prm['locationid']; + $companyid = isset($prm["companyid"]) ? $prm["companyid"] : 0; + $search = isset($prm["searchx"]) ? $prm["searchx"] : ''; + $filter_companyid = ''; + if ($companyid != 0 || $companyid != '0') { + $filter_companyid = " AND M_CompanyID = {$companyid} "; + } + + $where_status = " AND ( ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X')"; + $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND ( DATE(T_OrderHeaderAddonIsComingDate) = '{$xdate}' OR DATE(T_OrderHeaderDate) = '{$xdate}' ) {$where_status}"; + + if ($nolab != "") { + if ($sql_where != "") { + $sql_where .= " and "; + } + $sql_where .= "( T_OrderHeaderLabNumber like '%$nolab%' OR T_OrderHeaderLabNumberExt like '%$nolab%' )"; + } + + if ($search != '') { + $sql_where = "WHERE T_OrderHeaderIsActive = 'Y' AND T_OrderHeaderLabNumber = '{$search}'"; + } + + $sql = "SELECT * FROM ( + SELECT DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date, + t_orderheader.*, + DATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as dob, + m_patient.*, + M_SexName, + M_TitleName, + CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, + M_CompanyName, + fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status, + + fn_sampling_queue_status_id(T_OrderHeaderID,T_SampleStationID) as statusid, + T_SampleStationID, + T_TestID, + {$stationid} as stationid, + T_OrderPromiseDateTime, + T_OrderHeaderIsCito as iscito, + IFNULL(T_OrderHeaderFoNote,'') as fo_note, + IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, + fn_sampling_reqs(T_OrderHeaderID) as fo_requirements, + '' as htmlforeqs, + IF(fn_fo_ver_have_reqs(T_OrderHeaderID) = 0,'Y','N') as fo_ver_status_req, + fn_fo_reg_have_reqs(T_OrderHeaderID) as fo_reg_status_req, + fn_sampling_reqs_status(T_OrderHeaderID) as fo_requirements_status, + IF(fn_fo_get_verification_status(T_OrderHeaderID) = 0, 'X','Y') as fo_verification_status, + IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, + fn_sampling_queue_status_confirm(T_OrderHeaderID,T_SampleStationID) as status_confirm, + CONCAT(M_DoctorPrefix,M_DoctorPrefix2,' ',M_DoctorName,' ',M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as doctor_sender, + fn_fo_get_laststatus(T_OrderHeaderID) as last_status_fo, + T_OrderHeaderAddonIsComing as status_coming, + T_OrderLocationID as order_location_id, + IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as antri_time, + IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as skip_time + FROM t_orderheader + JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID + JOIN m_doctor ON T_OrderHeaderSenderM_DoctorID = M_DoctorID + JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID $filter_companyid + JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID + JOIN m_title ON M_PatientM_TitleID = M_TitleID + JOIN m_sex ON M_PatientM_SexID = M_SexID + JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND T_OrderLocationT_SampleStationID = {$stationid} AND T_OrderLocationIsActive = 'Y' + LEFT JOIN antrian_samplestation ON AntrianSampleStationT_OrderLocationID =T_OrderLocationID AND AntrianSampleStationIsActive = 'Y' + JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND M_LocationID = {$locationID} + LEFT JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' + 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} AND T_SampleStationIsNonLab = 'RADIODIAGNOSTIC' + JOIN last_status ON Last_StatusT_OrderHeaderID = T_OrderHeaderID + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoT_SampleStationID = T_SampleStationID AND + T_SamplingSoIsActive = 'Y' + + $sql_where + GROUP BY T_OrderHeaderID + HAVING last_status_fo IN (3,5) + ) x + ORDER BY T_OrderHeaderIsCito DESC, antri_time ASC + "; + //echo $sql; + $query = $this->db_onedev->query($sql); + //echo $this->db_onedev->last_query(); + $rows = $query->result_array(); + if ($rows) { + $enc = $this->ibl_encryptor; + $count_arr = count($rows); + foreach ($rows as $key => $value) { + $name = $enc->decrypt($value['M_PatientName_enc']) ?? ''; + $rows[$key]['M_PatientName'] = $name; + $rows[$key]['patient_fullname'] = trim(($value['M_TitleName'] ? $value['M_TitleName'] . ' ' : '') . $name); + $rows[$key]['patient_dob'] = $enc->decrypt($value['M_PatientDOB_enc']) ?? date('d-m-Y', strtotime($value['patient_dob_raw'] ?? 'now')); + $rows[$key]['dob'] = $rows[$key]['patient_dob']; + unset($rows[$key]['M_PatientName_enc'], $rows[$key]['M_PatientDOB_enc'], $rows[$key]['patient_dob_raw']); + if ($key + 1 != $count_arr) { + $rows[$key]['skip_time'] = $rows[$key + 1]['antri_time']; + } + } + } + $result = array("total" => count($rst), "records" => $rows, "sql" => $this->db_onedev->last_query()); + $this->sys_ok($result); + exit; + } + + function searchcompany() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + + $max_rst = 12; + $tot_count = 0; + + $q = [ + 'search' => '%' + ]; + + if ($prm['search'] != '') { + $q['search'] = "%{$prm['search']}%"; + } + + // QUERY TOTAL + $sql = "SELECT count(*) as total + FROM m_company + WHERE + M_CompanyName like ? + AND M_CompanyIsActive = 'Y'"; + $query = $this->db_onedev->query($sql, $q['search']); + //echo $query; + if ($query) { + $tot_count = $query->result_array()[0]["total"]; + } else { + $this->sys_error_db("m_city count", $this->db_onedev); + exit; + } + $rows = array('id' => 0, 'name' => 'Semua'); + $sql = " + SELECT M_CompanyID as id, M_CompanyName as name + FROM m_company + WHERE + M_CompanyName like ? + AND M_CompanyIsActive = 'Y' + ORDER BY M_CompanyName DESC + "; + $query = $this->db_onedev->query($sql, array($q['search'])); + + if ($query) { + $rows = $query->result_array(); + array_push($rows, array('id' => 0, 'name' => 'Semua')); + //echo $this->db_onedev->last_query(); + $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows)); + $this->sys_ok($result); + } else { + $this->sys_error_db("m_company rows", $this->db_onedev); + exit; + } + } + + function getstationstatus() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rows = []; + $query = " SELECT T_SampleStationID as id, T_SampleStationName as name + FROM t_samplestation + WHERE + T_SampleStationIsActive = 'Y' AND T_SampleStationIsNonLab = 'RADIODIAGNOSTIC' + "; + //echo $query; + $rows['stations'] = $this->db_onedev->query($query)->result_array(); + $rows['statuses'] = array(array('id' => 'NEW', 'name' => 'New'), array('id' => 'DONE', 'name' => 'Done')); + + $result = array( + "total" => count($rows), + "records" => $rows, + ); + $this->sys_ok($result); + exit; + } + + function search_staff() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $rows = []; + $query = " SELECT M_StaffID as id, M_StaffName as name, M_StaffCode as code, M_UserID as userid + FROM m_staff + JOIN m_user ON M_UserM_StaffID = M_StaffID AND M_UserIsActive = 'Y' + WHERE + M_StaffIsActive = 'Y' AND M_StaffCode = '{$prm['search']}' LIMIT 1 + "; + //echo $query; + $rows = $this->db_onedev->query($query)->row_array(); + + $result = array( + "total" => count($rows), + "records" => $rows, + ); + $this->sys_ok($result); + exit; + } + + function search_patient() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $search = '%' . $prm["search"] . '%'; + $stationid = $prm["stationid"]; + $statusid = $prm["statusid"]; + $patients = $prm["patients"]; + $where_status = ''; + if ($statusid === 'NEW') { + $where_status = "AND (ISNULL(T_SamplingQueueLastStatusID) OR T_SamplingQueueLastStatusT_SamplingQueueStatusID <> 5 )"; + } else { + $where_status = "AND T_SamplingQueueLastStatusT_SamplingQueueStatusID = 5"; + } + + // echo $norm; + //$where_status = " AND {$where_status}"; + + $sql_where = "WHERE T_OrderHeaderLabNumber LIKE '{$search}' AND T_OrderHeaderIsActive = 'Y' {$where_status}"; + $rows = []; + $query = "SELECT t_orderheader.*,m_patient.*, IFNULL(M_PatientPhoto,'') as M_PatientPhotoThumb, + M_SexName, M_TitleName, M_PatientName_enc, M_PatientDOB_enc, M_PatientDOB as patient_dob_raw, M_CompanyName, + IF(ISNULL(T_SamplingQueueLastStatusID), 'New',T_SamplingQueueStatusName) as status, + IF(ISNULL(T_SamplingQueueLastStatusID), 0,T_SamplingQueueLastStatusT_SamplingQueueStatusID) as statusid, T_SampleStationID, T_SampleTypeID, + {$stationid} as stationid, + T_OrderHeaderIsCito as iscito, + T_SamplingQueueLastStatusConfirm as status_confirm + FROM t_orderheader + JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID + JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID + JOIN m_title ON M_PatientM_TitleID = M_TitleID + JOIN m_sex ON M_PatientM_SexID = M_SexID + JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID + JOIN t_test ON T_OrderDetailT_TestID = T_TestID + JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID + JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID + JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND T_SampleStationID = {$stationid} AND T_SampleStationIsNonLab = 'RADIODIAGNOSTIC' + JOIN last_status ON Last_StatusT_OrderHeaderID = T_OrderHeaderID AND ( Last_StatusM_StatusID = 3 OR Last_StatusM_StatusID = 5 ) + LEFT JOIN t_sampling_queue_last_status ON + T_SamplingQueueLastStatusT_SampleStationID = T_SampleStationID AND + T_SamplingQueueLastStatusT_OrderHeaderID = T_OrderHeaderID + LEFT JOIN t_sampling_queue_status ON T_SamplingQueueLastStatusT_SamplingQueueStatusID = T_SamplingQueueStatusID + LEFT JOIN t_ordersamplereq ON T_OrderSampleReqT_SampleStationID = T_SampleStationID AND T_OrderSampleReqT_OrderSampleID + $sql_where + GROUP BY T_OrderHeaderID + ORDER BY T_OrderHeaderID DESC + limit 1"; + //echo $query; + $rows = $this->db_onedev->query($query)->row(); + + $result = array( + "total" => count($rows), + "records" => $rows, + ); + $this->sys_ok($result); + exit; + } + + /*function getrequirements($prm){ + + + $query =" SELECT Nat_RequirementID as id, + Nat_RequirementName as name, '{$prm['status']}' as status, + if(ISNULL(T_SamplingSoRequirementID),'N', if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N') ) as chex, + Nat_RequirementPositionNat_PositionID as positionid + FROM nat_requirement + JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID + JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND Nat_RequirementPositionNat_PositionID = 8 AND + Nat_RequirementPositionIsActive = 'Y' + JOIN t_test ON T_TestNat_TestID = Nat_TestRequirementNat_TestID + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND + T_SamplingSoRequirementT_SampletypeID = {$prm['sampletypeid']} AND T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID + WHERE + Nat_TestRequirementIsActive = 'Y' + "; + //echo $query; + $rows = $this->db_onedev->query($query)->result_array(); + + + return $rows; + }*/ + + + function getrequirements($prm) + { + + $rows = array(); + $query = " + SELECT Nat_RequirementID as id, + Nat_RequirementName as name, 'P' as status, + if(ISNULL(T_SamplingSoRequirementID),'N', + if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N')) as chex, + Nat_RequirementPositionNat_PositionID as positionid + FROM nat_requirement + JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID + JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND + Nat_RequirementPositionNat_PositionID = 8 AND + Nat_RequirementPositionIsActive = 'Y' + JOIN t_test ON T_TestNat_TestID = Nat_TestRequirementNat_TestID + JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = {$prm['orderid']} AND + T_SamplingSoT_TestID = {$prm['sampletypeid']} AND + T_TestID = T_SamplingSoT_TestID AND + T_SamplingSoIsActive = 'Y' + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND + T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND + T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID + WHERE + Nat_TestRequirementIsActive = 'Y' + GROUP BY nat_requirementID + UNION + SELECT Nat_RequirementID as id, + Nat_RequirementName as name, 'P' as status, + if(ISNULL(T_SamplingSoRequirementID),'N', + if(json_contains(T_SamplingSoRequirementRequirements,Nat_RequirementID),'Y','N')) as chex, + Nat_RequirementPositionNat_PositionID as positionid + FROM nat_requirement + JOIN nat_testrequirement ON Nat_TestRequirementNat_RequirementID = Nat_RequirementID + JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND + Nat_RequirementPositionNat_PositionID = 8 AND + Nat_RequirementPositionIsActive = 'Y' AND + Nat_RequirementIsAllTest = 'Y' + JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = {$prm['orderid']} AND + T_SamplingSoT_TestID = {$prm['sampletypeid']} AND + T_SamplingSoIsActive = 'Y' + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND + T_SamplingSoRequirementT_OrderHeaderID = {$prm['orderid']} AND + T_SamplingSoRequirementNat_PositionID = Nat_RequirementPositionNat_PositionID + GROUP BY nat_requirementID + "; + //echo $query; + $rows = $this->db_onedev->query($query)->result_array(); + + + return $rows; + } + + function doconfirm() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rst_data = array(); + $prm = $this->sys_input; + $sql = "UPDATE t_sampling_queue_last_status SET + T_SamplingQueueLastStatusConfirm = 'Y' + WHERE T_SamplingQueueLastStatusT_OrderHeaderID = '{$prm['id']}' AND + T_SamplingQueueLastStatusT_SampleStationID = '{$prm['stationid']}'"; + //echo $sql; + $this->db_onedev->query($sql); + + $result = array( + "total" => 1, + "records" => $rst_data + ); + $this->sys_ok($result); + + exit; + } + + + + + function saverequirement() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $query = " INSERT INTO t_samplingso_requirement ( + T_SamplingSoRequirementT_OrderHeaderID, + T_SamplingSoRequirementT_SampleStationID, + T_SamplingSoRequirementT_SampletypeID, + T_SamplingSoRequirementStatus, + T_SamplingSoRequirementRequirements, + T_SamplingSoRequirementNote, + T_SamplingSoRequirementNat_PositionID, + T_SamplingSoRequirementUserID, + T_SamplingSoRequirementCreated + )VALUES( + {$prm['T_OrderHeaderID']}, + {$prm['stationid']}, + {$prm['sample']['T_SampleTypeID']}, + 'N', + + )"; + //echo $query; + $rows = $this->db_onedev->query($query)->result_array(); + + + $result = array( + "total" => count($rows), + "records" => $rows, + ); + $this->sys_ok($result); + exit; + } + + function doaction() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rst_data = array('status' => 'OK'); + $status_call = array('status' => 'OK', 'data' => array()); + $prm = $this->sys_input; + $userid = $this->sys_user["M_UserID"]; + if ($prm['staff']['id'] != 0 || $prm['staff']['id'] != '0') { + $userid = $prm['staff']['userid']; + } + + $sql = "SELECT T_OrderHeaderQueue 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 = {$prm['stationid']} + WHERE T_OrderHeaderID={$prm['id']}"; + $location = $this->db_onedev->query($sql)->row_array(); + $locationID = $location['locationID']; + $locationName = $location['locationName']; + $queueNumber = $location['queueNumber']; + $splitedLocationName = explode(" ", $locationName); + $locationName = $splitedLocationName[0]; + + + if ($prm['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 = {$prm['id']} AND + T_SamplingQueueLastStatusT_SampleStationID <> {$prm['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 = {$prm['id']} 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' + 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_SamplingSoT_SampleStationID = T_SampleStationID AND + T_SamplingSoIsActive = 'Y' + WHERE + T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' AND + 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 = {$prm['id']} AND + T_SamplingQueueLastStatusT_SampleStationID = {$data_status_call['T_SampleStationID']}"; + $this->db_onedev->query($sql); + $status_call = array('status' => 'OK', 'data' => array()); + } + } + } + + $next_status = $prm['statusnextid']; + if ($prm['act'] == 'process') { + $sql = "SELECT + T_OrderHeaderID, + T_OrderDetailID as id, + T_OrderDetailT_TestCode, + T_OrderDetailT_TestName, + T_TestID as test_id, + 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 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 = {$prm['stationid']} + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoT_SampleStationID = T_SampleStationID AND + T_SamplingSoIsActive = 'Y' + LEFT JOIN t_samplingso_requirement ON T_SamplingSoRequirementT_OrderHeaderID = T_OrderHeaderID AND + T_SamplingSoRequirementT_SamplingSoID = T_SamplingSoID AND + T_SamplingSoRequirementT_SampleStationID = T_SampleStationID AND + T_SamplingSoRequirementIsActive = 'Y' + WHERE + T_OrderHeaderID = {$prm['id']} AND T_OrderHeaderIsActive = 'Y' AND + (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) { + $sql = "INSERT INTO t_samplingso ( + T_SamplingSoT_SampleStationID, + T_SamplingSoT_OrderHeaderID, + T_SamplingSoT_TestID, + T_SamplingSoProcessDate, + T_SamplingSoProcessTime, + T_SamplingSoProcessUserID, + T_SamplingSoCreated, + T_SamplingSoUserID + ) + VALUES( + {$prm['stationid']}, + {$prm['id']}, + {$v->test_id}, + CURDATE(), + CURTIME(), + {$userid}, + NOW(), + {$userid} + ) ON DUPLICATE KEY UPDATE + T_SamplingSoProcessDate = CURDATE(), + T_SamplingSoProcessTime = CURTIME(), + T_SamplingSoFlag = 'P', + T_SamplingSoIsActive = 'Y', + T_SamplingSoProcessUserID = {$userid}, + T_SamplingSoLastUpdated = NOW(), + T_SamplingSoLastUpdatedUserID = {$userid}"; + //echo $sql; + $this->db_onedev->query($sql); + + $sql = "INSERT INTO sample_so_by_step ( + SampleSoByStepT_OrderHeaderID, + SampleSoByStepT_TestID, + SampleSoByStepCode, + SampleSoByStepDateTime, + SampleSoByStepUserID + ) + VALUES( + {$prm['id']}, + {$v->test_id}, + 'SAMPLING.Sampling.Sampled', + NOW(), + {$userid} + )"; + $this->db_onedev->query($sql); + } + } + $this->broadcast("specimen-col-process"); + } + + if ($prm['act'] == 'samplingdone') { + $sql = "INSERT INTO t_samplingso ( + T_SamplingSoT_SampleStationID, + T_SamplingSoT_OrderHeaderID, + T_SamplingSoT_TestID, + T_SamplingSoDoneDate, + T_SamplingSoDoneTime, + T_SamplingSoDoneUserID, + T_SamplingSoCreated, + T_SamplingSoUserID + ) + VALUES( + {$prm['stationid']}, + {$prm['id']}, + {$prm['sample']['test_id']}, + CURDATE(), + CURTIME(), + {$userid}, + NOW(), + {$userid} + ) ON DUPLICATE KEY UPDATE + T_SamplingSoDoneDate = CURDATE(), + T_SamplingSoDoneTime = CURTIME(), + T_SamplingSoFlag = 'D', + T_SamplingSoIsActive = 'Y', + T_SamplingSoDoneUserID = {$userid}, + T_SamplingSoLastUpdatedUserID = {$userid}, + T_SamplingSoLastUpdated = NOW()"; + $this->db_onedev->query($sql); + //echo $sql; + $xreq = $prm['sample']['requirements']; + $arr_requirements = array(); + foreach ($xreq as $k => $v) { + if ($v['chex'] == 'Y') + array_push($arr_requirements, $v['id']); + } + $requirements = '[' . join(',', $arr_requirements) . ']'; + + $sql = "UPDATE t_samplingso_requirement SET + T_SamplingSoRequirementIsActive = 'N', + T_SamplingSoRequirementDeleted = NOW(), + T_SamplingSoRequirementDeletedUserID = {$userid} + WHERE + T_SamplingSoRequirementT_OrderHeaderID = {$prm['id']} AND + T_SamplingSoRequirementT_SampleStationID = {$prm['stationid']} AND + T_SamplingSoRequirementT_SamplingSoID = {$prm['sample']['T_SamplingSoID']} AND + T_SamplingSoRequirementIsActive = 'Y'"; + $this->db_onedev->query($sql); + + $sql = "INSERT INTO t_samplingso_requirement( + T_SamplingSoRequirementT_OrderHeaderID, + T_SamplingSoRequirementT_SampleStationID, + T_SamplingSoRequirementT_SamplingSoID, + T_SamplingSoRequirementNat_PositionID, + T_SamplingSoRequirementStatus, + T_SamplingSoRequirementRequirements, + T_SamplingSoRequirementUserID, + T_SamplingSoRequirementCreated + ) + VALUES( + {$prm['id']}, + {$prm['stationid']}, + {$prm['sample']['T_SamplingSoID']}, + {$prm['sample']['Nat_PositionID']}, + '{$prm['sample']['requirement_status']}', + '{$requirements}', + {$userid}, + NOW() + )"; + //echo $sql; + $this->db_onedev->query($sql); + $sql = "INSERT INTO sample_so_by_step ( + SampleSoByStepT_OrderHeaderID, + SampleSoByStepT_TestID, + SampleSoByStepCode, + SampleSoByStepRequirementStatus, + SampleSoByStepReuirements, + SampleSoByStepDateTime, + SampleSoByStepUserID + ) + VALUES( + {$prm['id']}, + {$prm['sample']['test_id']}, + 'SAMPLING.Sampling.Received', + '{$prm['sample']['requirement_status']}', + '{$requirements}', + NOW(), + {$userid} + )"; + $this->db_onedev->query($sql); + + if ($prm['sample']['type'] === 'xray') { + $sql = "INSERT INTO t_samplingso_form( + T_SamplingSoFormT_SampleStationID, + T_SamplingSoFormT_SamplingSOID, + T_SamplingSoFormKv, + T_SamplingSoFormMa, + T_SamplingSoFormSecond, + T_SamplingSoFormExpose, + T_SamplingSoFormUserID, + T_SamplingSoFormCreated, + T_SamplingSoFormLastUpdated + ) + VALUES( + {$prm['stationid']}, + {$prm['sample']['T_SamplingSoID']}, + {$prm['sample']['form_kv']}, + {$prm['sample']['form_ma']}, + {$prm['sample']['form_second']}, + {$prm['sample']['form_expose']}, + {$userid}, + NOW(), + NOW() + )ON DUPLICATE KEY UPDATE + T_SamplingSoFormT_SampleStationID = {$prm['stationid']}, + T_SamplingSoFormKv = {$prm['sample']['form_kv']}, + T_SamplingSoFormMa = {$prm['sample']['form_ma']}, + T_SamplingSoFormSecond = {$prm['sample']['form_second']}, + T_SamplingSoFormExpose = {$prm['sample']['form_expose']}, + T_SamplingSoFormUserID = {$userid}"; + //echo $sql; + $this->db_onedev->query($sql); + } + + $this->load->library('Nonlabtemplate'); + $gen_template = $this->nonlabtemplate->generate($prm['sample']['T_SamplingSoID']); + + $sql = "SELECT COUNT(*) as xcount + FROM ( + SELECT T_SamplingSoID, T_SamplingSoFlag ,T_OrderDetailT_TestID, T_OrderDetailID + FROM t_orderdetail + 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 = {$prm['stationid']} + LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND + T_SamplingSoT_TestID = T_TestID AND + T_SamplingSoT_SampleStationID = T_SampleStationID AND + T_SamplingSoIsActive = 'Y' + WHERE + T_OrderDetailT_OrderHeaderID = {$prm['id']} AND T_OrderDetailIsActive = 'Y' + GROUP BY T_TestID + HAVING ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X' + ) xx"; + //echo $sql; + $xcount = $this->db_onedev->query($sql)->row()->xcount; + $rst_data = array('status' => 'PARTIAL'); + if ($xcount == 0) { + $next_status = 5; + //print_r($kesimpulan); + $rst_data = array('status' => 'OK'); + } + $this->broadcast("specimen-col-receive"); + } + + if ($prm['act'] !== 'samplingprocess' && $status_call['status'] == 'OK') { + $dt_json = json_encode(array('T_SampleStationID' => $prm['stationid'], 'T_OrderHeaderID' => $prm['id'], '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 = {$prm['stationid']} AND + T_SamplingQueueLastStatusT_OrderHeaderID = {$prm['id']} AND + T_SamplingQueueLastStatusIsActive = 'Y'"; + $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( + {$prm['stationid']}, + {$prm['id']}, + {$next_status}, + {$userid}) ON DUPLICATE KEY UPDATE + T_SamplingQueueLastStatusT_SamplingQueueStatusID = {$next_status}, + T_SamplingQueueLastStatusUserID = {$userid} + "; + //echo $query; + $rows = $this->db_onedev->query($query); + } + + if (intval($next_status) == 1) { + if ($status_call['status'] == 'OK') { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/call.sm.{$locationID}.{$queueNumber}.{$locationName}"); //CALL NODE + } + } else if (intval($next_status) == 2) { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/skip.sm.{$locationID}"); + } else if (intval($next_status) == 3) { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/serve.sm.{$locationID}"); + } else if (intval($next_status) == 5) { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); + } else { + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/done.sm.{$locationID}"); + } + + if ($status_call['status'] == 'NOTCALL') { + $rst_data = $status_call; + } + + if ($prm['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 + ); + $this->sys_ok($result); + + exit; + } + + + function getdatanoterequirement() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rst_data = array(); + $prm = $this->sys_input; + + $sql = "SELECT IFNULL(T_OrderHeaderFoNote,'') as fo_note, + fn_getstaffname(T_OrderHeaderFoNoteM_UserID) as fo_note_user, + IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, + fn_getstaffname(T_OrderHeaderVerificationNoteM_UserID) as fo_ver_note_user, + IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, + fn_getstaffname(T_OrderHeaderSamplingNoteM_UserID) as sampling_note_user + FROM t_orderheader + WHERE + T_OrderHeaderID = {$prm['T_OrderHeaderID']}"; + $notes = $this->db_onedev->query($sql)->row_array(); + + $sql = "SELECT 'fo registration' as position,GROUP_CONCAT(DISTINCT Nat_RequirementName separator ',') as requirements + FROM t_orderheader + JOIN t_orderreq ON T_OrderReqT_OrderHeaderID = T_OrderHeaderID + JOIN nat_requirement ON json_contains(T_OrderReqs,Nat_RequirementID) + WHERE T_OrderHeaderID = {$prm['T_OrderHeaderID']} + GROUP BY T_OrderHeaderID"; + //echo $sql; + $query = $this->db_onedev->query($sql)->row_array(); + if ($query) { + array_push($rst_data, $query); + } + + $sql = "SELECT 'fo verifikasi' as position, GROUP_CONCAT(DISTINCT Fo_VerificationsLabelName separator ',') as requirements + FROM fo_verificationsvalue + JOIN fo_verificationslabel ON Fo_VerificationsValueFo_VerificationsLabelID = Fo_VerificationsLabelID + WHERE + Fo_VerificationsValueCheck = 'N' AND + Fo_VerificationsValueT_OrderHeaderID = {$prm['T_OrderHeaderID']} + GROUP BY Fo_VerificationsValueT_OrderHeaderID + "; + //echo $sql; + $query = $this->db_onedev->query($sql)->row_array(); + if ($query) { + array_push($rst_data, $query); + } + + $result = array( + "total" => 1, + "records" => array('notes' => $notes, 'reqs' => $rst_data) + ); + $this->sys_ok($result); + + exit; + } + + function savenotesampling() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rst_data = array(); + $prm = $this->sys_input; + $userid = $this->sys_user["M_UserID"]; + + $sql = "UPDATE t_orderheader SET + T_OrderHeaderSamplingNote = '{$prm['sampling_note']}', + T_OrderHeaderSamplingNoteM_UserID = {$userid} + WHERE + T_OrderHeaderID = {$prm['T_OrderHeaderID']}"; + //echo $sql; + $query = $this->db_onedev->query($sql); + + $result = array( + "total" => 1, + "records" => $rst_data + ); + $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 cobacall() + { + $sql = "SELECT T_OrderHeaderQueue 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 = 2 + WHERE T_OrderHeaderID=131560"; + $location = $this->db_onedev->query($sql)->row_array(); + $locationID = $location['locationID']; + $locationName = $location['locationName']; + $queueNumber = $location['queueNumber']; + print_r($location); + print_r($location['locationID']); + $splitedLocationName = explode(" ", $locationName); + $locationName = implode("+", $splitedLocationName); + try { + //code... + file_get_contents("http://" . $this->IP_SOCKET_IO . ":9099/broadcast/call.sm.$locationID.$queueNumber.$locationName"); + } catch (Exception $e) { + print_r($e); + } + } +} +// SELECT DATE_FORMAT(T_OrderHeaderDate,'%d-%m-%Y %H:%i') as order_date, +// t_orderheader.*, +// tDATE_FORMAT(M_PatientDOB,'%d-%m-%Y') as dob, +// m_patient.*, +// tIFNULL(M_PatientPhoto,'') as M_PatientPhotoThumb, +// M_SexName, +// M_TitleName, +// CONCAT(M_TitleName,' ',M_PatientName) as patient_fullname, tM_CompanyName, +// fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status, +// +// fn_sampling_queue_status_id(T_OrderHeaderID,T_SampleStationID) as statusid, +// T_SampleStationID, +// T_TestID, +// 2 as stationid, +// T_OrderPromiseDateTime, +// T_OrderHeaderIsCito as iscito, +// IFNULL(T_OrderHeaderFoNote,'') as fo_note, +// IFNULL(T_OrderHeaderVerificationNote,'') as fo_ver_note, +// fn_sampling_reqs(T_OrderHeaderID) as fo_requirements, +// '' as htmlforeqs, +// IF(fn_fo_ver_have_reqs(T_OrderHeaderID) = 0,'Y','N') as fo_ver_status_req, +// fn_fo_reg_have_reqs(T_OrderHeaderID) as fo_reg_status_req, +// fn_sampling_reqs_status(T_OrderHeaderID) as fo_requirements_status, +// IF(fn_fo_get_verification_status(T_OrderHeaderID) = 0, 'X','Y') as fo_verification_status, +// IFNULL(T_OrderHeaderSamplingNote,'') as sampling_note, +// fn_sampling_queue_status_confirm(T_OrderHeaderID,T_SampleStationID) as status_confirm, +// CONCAT(M_DoctorPrefix,M_DoctorPrefix2,' ',M_DoctorName,' ',M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as doctor_sender, +// fn_fo_get_laststatus(T_OrderHeaderID) as last_status_fo, +// T_OrderHeaderAddonIsComing as status_coming +// FROM t_orderheader +// JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID +// JOIN m_doctor ON T_OrderHeaderSenderM_DoctorID = M_DoctorID +// JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID +// JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID +// JOIN m_title ON M_PatientM_TitleID = M_TitleID +// JOIN m_sex ON M_PatientM_SexID = M_SexID +// LEFT JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeaderID AND T_OrderPromiseIsActive = 'Y' +// 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 = 2 AND T_SampleStationIsNonLab = 'RADIODIAGNOSTIC' +// JOIN last_status ON Last_StatusT_OrderHeaderID = T_OrderHeaderID +// LEFT JOIN t_samplingso ON T_SamplingSoT_OrderHeaderID = T_OrderHeaderID AND +// T_SamplingSoT_TestID = T_TestID AND +// T_SamplingSoT_SampleStationID = T_SampleStationID AND +// T_SamplingSoIsActive = 'Y' +// WHERE T_OrderHeaderIsActive = 'Y' AND ( DATE(T_OrderHeaderAddonIsComingDate) = '2023-02-21' OR DATE(T_OrderHeaderDate) = '2023-02-21' ) AND ( ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X') +// tGROUP BY T_OrderHeaderID +// HAVING last_status_fo IN (3,5) // ORDER BY T_OrderHeaderIsCito DESC, T_OrderHeaderID ASC \ No newline at end of file