From d7b8035f277ab9ca279d6701c4134125614aefaa Mon Sep 17 00:00:00 2001 From: sindhu Date: Tue, 20 Feb 2024 13:12:08 +0700 Subject: [PATCH] step 5 : download devkedungdoro upload lampiran --- .../resultentry-v105/Company.php | 42 + api/devkedungdoro/resultentry-v105/Helper.php | 47 + .../resultentry-v105/History-bkp.php | 182 + .../resultentry-v105/History.php | 350 ++ .../resultentry-v105/Re_normal.php | 49 + .../resultentry-v105/Re_normal_method-pe.php | 75 + .../resultentry-v105/Re_normal_method.php | 75 + .../resultentry-v105/Re_patient.php | 359 ++ .../resultentry-v105/Re_px-pe.php | 710 ++++ api/devkedungdoro/resultentry-v105/Re_px.php | 2991 +++++++++++++++++ 10 files changed, 4880 insertions(+) create mode 100644 api/devkedungdoro/resultentry-v105/Company.php create mode 100644 api/devkedungdoro/resultentry-v105/Helper.php create mode 100644 api/devkedungdoro/resultentry-v105/History-bkp.php create mode 100644 api/devkedungdoro/resultentry-v105/History.php create mode 100644 api/devkedungdoro/resultentry-v105/Re_normal.php create mode 100644 api/devkedungdoro/resultentry-v105/Re_normal_method-pe.php create mode 100644 api/devkedungdoro/resultentry-v105/Re_normal_method.php create mode 100644 api/devkedungdoro/resultentry-v105/Re_patient.php create mode 100644 api/devkedungdoro/resultentry-v105/Re_px-pe.php create mode 100644 api/devkedungdoro/resultentry-v105/Re_px.php diff --git a/api/devkedungdoro/resultentry-v105/Company.php b/api/devkedungdoro/resultentry-v105/Company.php new file mode 100644 index 0000000..8eaf950 --- /dev/null +++ b/api/devkedungdoro/resultentry-v105/Company.php @@ -0,0 +1,42 @@ +db_smartone = $this->load->database("onedev", true); + } + + public function search() + { + $prm = $this->sys_input; + + $qry = "%" . $prm["qry"] . '%'; + + $sql = "Select M_CompanyID, M_CompanyName + from m_company + where M_CompanyName like ? + and M_CompanyIsActive = 'Y' + limit 0,30"; + $query = $this->db_smartone->query($sql, array($qry) ); + if ($query) { + $rows = $query->result_array(); + $rows[] = array("M_CompanyID" => 0, "M_CompanyName" => "Semua"); + $result = array("data" => $rows ); + $this->sys_ok($result); + } + else { + $this->sys_error_db("", $this->db_smartone); + exit; + } + } +} diff --git a/api/devkedungdoro/resultentry-v105/Helper.php b/api/devkedungdoro/resultentry-v105/Helper.php new file mode 100644 index 0000000..2397050 --- /dev/null +++ b/api/devkedungdoro/resultentry-v105/Helper.php @@ -0,0 +1,47 @@ +db_smartone = $this->load->database("onedev", true); + } + + public function calc_age() + { + $prm = $this->sys_input; + $orderID = $prm["orderID"]; + + $sql = "call sp_recount_age(?)"; + $query = $this->db_smartone->query($sql,array($orderID)); + + if ($query) { + $sql = "select T_OrderHeaderM_PatientAge, M_PatientDOB + from t_orderheader + join m_patient on T_OrderHeaderM_PatientID = M_PatientID + and T_OrderHeaderID = ?"; + $qry = $this->db_smartone->query($sql,array($orderID)); + if ($qry) { + $rows = $qry->result_array(); + $rst = $rows; + if (count($rows) > 0 ) $rst = $rows[0]; + $this->sys_ok($rst); + } else { + $this->sys_error_db("", $this->db_smartone); + } + } + else { + $this->sys_error_db("", $this->db_smartone); + exit; + } + } +} diff --git a/api/devkedungdoro/resultentry-v105/History-bkp.php b/api/devkedungdoro/resultentry-v105/History-bkp.php new file mode 100644 index 0000000..cca7d66 --- /dev/null +++ b/api/devkedungdoro/resultentry-v105/History-bkp.php @@ -0,0 +1,182 @@ +db_smartone = $this->load->database("onedev", true); + } + + public function search_v2() + { + $prm = $this->sys_input; + $orderID = $prm["order_id"]; + $sql = "select T_OrderHeaderM_PatientID from t_orderheader where T_OrderHeaderID=?"; + $query = $this->db_smartone->query($sql, array($orderID) ); + if (!$query) { + $this->sys_error_db("Err : Patient", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + if (count($rows) == 0 ) { + $this->sys_error_db("No Patient", $this->db_smartone); + exit; + } + $patientID = $rows[0]["T_OrderHeaderM_PatientID"]; + + $maxOrder = 5; + $sql = "select min(T_OrderHeaderID) minID + from t_orderheader + where T_OrderHeaderM_PatientID = ? + and T_OrderHeaderID < ? + and T_OrderHeaderIsActive = 'Y' + order by T_OrderHeaderID desc + limit 0, $maxOrder"; + $query = $this->db_smartone->query($sql, array($patientID, $orderID) ); + if (!$query) { + $this->sys_error_db("Err : Patient", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + if (count($rows) == 0 ) { + $this->sys_error_db("No Patient", $this->db_smartone); + exit; + } + $minOrderID = $rows[0]["minID"]; + + $sql = "select date(T_OrderHeaderDate) T_OrderHeaderDate, T_OrderHeaderLabNumber,T_OrderHeaderID, + T_TestID, + T_TestShortName , T_OrderDetailResult, T_TestIsResult, T_OrderDetailResultFlag, + (length(T_TestSasCode) - 6 ) / 2 Level, T_TestSasCode, Nat_UnitName + from t_orderheader + join t_orderdetail on T_OrderHeaderM_PatientID = ? + and T_OrderHeaderIsActive = 'Y' and T_OrderDetailIsActive = 'Y' + and T_OrderHeaderID = T_OrderDetailT_OrderHeaderID + and T_OrderHeaderID < ? + and T_OrderHeaderID >= ? + join t_test on T_OrderDetailT_TestID = T_TestID + join nat_unit on T_OrderDetailNat_UnitID = Nat_UnitID + join group_resultdetail on T_TestID = Group_ResultDetailT_TestID + and Group_ResultDetailGroup_ResultID = 1 + order by T_TestSasCode"; + + $query = $this->db_smartone->query($sql, array($patientID, $orderID, $minOrderID ) ); + if (!$query) { + $this->sys_error_db("Err : History ", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + $arr_result = array(); + $prev_date = ""; + $cur_idx = 0; + $prev_id = 0; + $arr_px = array(); + + $arr_date = array(); + $index_px = 0; + $arr_test = array(); + + foreach($rows as $r) { + $is_result = $r["T_TestIsResult"]; + if ($is_result == "N" ) continue; + $order_id = $r["T_OrderHeaderID"]; + + $date = $r["T_OrderHeaderDate"]; + $px_name = $r["T_TestShortName"] ; + $result = $r["T_OrderDetailResult"] . $r["T_OrderDetailResultFlag"]; + + if(! isset($arr_px[$px_name]) ) { + $arr_result[] = array( + "px_name" => $px_name, + "code" => $r["T_TestSasCode"], + "unit" => $r["Nat_UnitName"], + "result" => array() + ); + $arr_px[$px_name] = array("code" => $r["T_TestSasCode"], "name" => $px_name); + $arr_test[] = array("code" => $r["T_TestSasCode"], "name" => $px_name); + $index_px = count($arr_result) - 1; + } + if (! in_array($date, $arr_date) ) $arr_date[] = $date; + $arr_result[$index_px]["result"][$date] = $result; + $prev_id = $order_id; + } + foreach($arr_result as $idx => $v ) { + foreach($arr_date as $date) { + if (! isset($v["result"][$date] ) ) { + $arr_result[$idx]["result"][$date] = ""; + } + } + } + sort($arr_date); + + $result = array("pxs" => $arr_test, "result" => $arr_result, "dates" => $arr_date); + $this->sys_ok($result); + } + + public function search() + { + $prm = $this->sys_input; + $orderID = $prm["order_id"]; + $sql = "select T_OrderHeaderM_PatientID from t_orderheader where T_OrderHeaderID=?"; + $query = $this->db_smartone->query($sql, array($orderID) ); + if (!$query) { + $this->sys_error_db("Err : Patient", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + if (count($rows) == 0 ) { + $this->sys_error_db("No Patient", $this->db_smartone); + exit; + } + $patientID = $rows[0]["T_OrderHeaderM_PatientID"]; + $sql = "select T_OrderHeaderDate, T_OrderHeaderLabNumber,T_OrderHeaderID, + T_TestShortName , T_OrderDetailResult, T_TestIsResult, T_OrderDetailResultFlag, + (length(T_TestSasCode) - 6 ) / 2 Level + from t_orderheader + join t_orderdetail on T_OrderHeaderM_PatientID = ? + and T_OrderHeaderIsActive = 'Y' and T_OrderDetailIsActive = 'Y' + and T_OrderHeaderID = T_OrderDetailT_OrderHeaderID + and T_OrderHeaderID < ? + join t_test on T_OrderDetailT_TestID = T_TestID + join group_resultdetail on T_TestID = Group_ResultDetailT_TestID + and Group_ResultDetailGroup_ResultID = 1 + order by T_OrderHeaderID, T_TestSasCode"; + + $query = $this->db_smartone->query($sql, array($patientID, $orderID) ); + if (!$query) { + $this->sys_error_db("Err : History ", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + $result = array(); + $prev_date = ""; + $cur_idx = 0; + $max_hist = 4; + foreach($rows as $r) { + $date = $r["T_OrderHeaderDate"]; + if ($prev_date != $date ) { + if ($cur_idx == $max_hist ) break; + $result[]["date"] = $date; + $cur_idx = count($result) - 1; + $result[$cur_idx]["data"] = array(); + $result[$cur_idx]["id"] = $r["T_OrderHeaderID"]; + } + $result[$cur_idx]["data"][] = array( + "px_name" => $r["T_TestShortName"], + "is_result" => $r["T_TestIsResult"], + "result" => $r["T_OrderDetailResult"], + "flag" => $r["T_OrderDetailResultFlag"], + "level" => $r["Level"] + ); + $prev_date = $date ; + } + $this->sys_ok($result); + } +} diff --git a/api/devkedungdoro/resultentry-v105/History.php b/api/devkedungdoro/resultentry-v105/History.php new file mode 100644 index 0000000..8878eb5 --- /dev/null +++ b/api/devkedungdoro/resultentry-v105/History.php @@ -0,0 +1,350 @@ +db_smartone = $this->load->database("onedev", true); + } + + public function search_v2() + { + $prm = $this->sys_input; + $orderID = $prm["order_id"]; + $sql = "select T_OrderHeaderM_PatientID from t_orderheader where T_OrderHeaderID=?"; + $query = $this->db_smartone->query($sql, array($orderID)); + if (!$query) { + $this->sys_error_db("Err : Patient", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + if (count($rows) == 0) { + $this->sys_error_db("No Patient", $this->db_smartone); + exit; + } + $patientID = $rows[0]["T_OrderHeaderM_PatientID"]; + + // patient note + $patient_note = ""; + $sql_patient_note = "select M_PatientNote + from m_patient + where M_PatientID = ? + AND M_PatientIsActive = 'Y'"; + + $query_patient_note = $this->db_smartone->query($sql_patient_note, [$patientID]); + if (!$query_patient_note) { + $this->sys_error_db("Err : Patient Note", $this->db_smartone); + exit; + } + $rows_patient_note = $query_patient_note->result_array(); + $patient_note = $rows_patient_note[0]['M_PatientNote']; + + $maxOrder = 10; + + $sql_min_id = "select min(T_OrderHeaderID) as minID + from ( + select (T_OrderHeaderID) + from t_orderheader + where T_OrderHeaderM_PatientID = ? + and T_OrderHeaderID < ? + and T_OrderHeaderIsActive = 'Y' + AND T_OrderHeaderDate < NOW() + group by DATE(T_OrderHeaderDate) + order by T_OrderHeaderDate desc + limit 0, $maxOrder + ) as minX"; + + $query = $this->db_smartone->query($sql_min_id, array($patientID, $orderID)); + if (!$query) { + $this->sys_error_db("Err : Patient", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + $rowsXX = $query->result_array(); + if (count($rows) == 0) { + $this->sys_error_db("No Patient", $this->db_smartone); + exit; + } + + $minOrderID = $rows[0]["minID"]; + + $sql = "select date(T_OrderHeaderDate) T_OrderHeaderDate, T_OrderHeaderLabNumber,T_OrderHeaderID, + T_TestID, + T_TestShortName , T_OrderDetailResult, T_TestIsResult, T_OrderDetailResultFlag, + (length(T_TestSasCode) - 6 ) / 2 Level, T_TestSasCode, Nat_UnitName, + IFNULL(T_OrderDetailInternalNote,'') as T_OrderDetailInternalNote + from t_orderheader + join t_orderdetail on T_OrderHeaderM_PatientID = ? + and T_OrderHeaderIsActive = 'Y' and T_OrderDetailIsActive = 'Y' + and T_OrderHeaderID = T_OrderDetailT_OrderHeaderID + and T_OrderHeaderID < ? + and T_OrderHeaderID >= ? + join t_test on T_OrderDetailT_TestID = T_TestID + join nat_unit on T_OrderDetailNat_UnitID = Nat_UnitID + join group_resultdetail on T_TestID = Group_ResultDetailT_TestID + and Group_ResultDetailGroup_ResultID = 1 + order by T_TestSasCode"; + + $query = $this->db_smartone->query($sql, array($patientID, $orderID, $minOrderID)); + if (!$query) { + $this->sys_error_db("Err : History ", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + $arr_result = array(); + $prev_date = ""; + $cur_idx = 0; + $prev_id = 0; + $arr_px = array(); + $arr_code = array(); + + $arr_date = array(); + $index_px = 0; + $arr_test = array(); + + foreach ($rows as $r) { + $is_result = $r["T_TestIsResult"]; + if ($is_result == "N") { + continue; + } + $order_id = $r["T_OrderHeaderID"]; + + $date = $r["T_OrderHeaderDate"]; + $px_name = $r["T_TestShortName"]; + $result = $r["T_OrderDetailResult"]; + $result_T_OrderDetailInternalNote = $r['T_OrderDetailInternalNote']; + + if (is_numeric($result)) { + $dec = strlen(substr(strrchr($result, "."), 1)); + $result = number_format($result, $dec, ".", ","); + } + $result .= " " . $r["T_OrderDetailResultFlag"]; + + $px_code = $r["T_TestSasCode"]; + if (!isset($arr_code[$px_code])) { + $arr_result[] = array( + "px_name" => $px_name, + "code" => $r["T_TestSasCode"], + "unit" => $r["Nat_UnitName"], + "result" => array(), + // T_OrderDetailInternalNote + "notes" => [] + ); + $arr_code[$px_code] = true; + $arr_px[$px_name] = array("code" => $r["T_TestSasCode"], "name" => $px_name); + $arr_test[] = array("code" => $r["T_TestSasCode"], "name" => $px_name); + $index_px = count($arr_result) - 1; + } + if (!in_array($date, $arr_date)) $arr_date[] = $date; + $arr_result[$index_px]["result"][$date] = $result; + $arr_result[$index_px]["notes"][$date] = $result_T_OrderDetailInternalNote; + $prev_id = $order_id; + $px_code = ""; + } + foreach ($arr_result as $idx => $v) { + foreach ($arr_date as $date) { + if (!isset($v["result"][$date])) { + $arr_result[$idx]["result"][$date] = ""; + } + } + } + + // // T_OrderDetailInternalNote + foreach ($arr_result as $idx => $v) { + foreach ($arr_date as $date) { + if (!isset($v["notes"][$date])) { + $arr_result[$idx]["notes"][$date] = ""; + } + } + } + sort($arr_date); + + $result = array( + // "lastData" => $lastData, + // "x" => $lastData['minID'], + // "rowsXX"=> $rowsXX, + // "countrowsXX" => count($rowsXX), + "sql_min_id" => $sql_min_id, + "sql_last"=> $this->db_smartone->last_query(), + "patient_note" => $patient_note, + "pxs" => $arr_test, + "result" => $arr_result, + "dates" => $arr_date + ); + + $this->sys_ok($result); + } + + public function old_search_v2() + { + $prm = $this->sys_input; + $orderID = $prm["order_id"]; + $sql = "select T_OrderHeaderM_PatientID from t_orderheader where T_OrderHeaderID=?"; + $query = $this->db_smartone->query($sql, array($orderID)); + if (!$query) { + $this->sys_error_db("Err : Patient", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + if (count($rows) == 0) { + $this->sys_error_db("No Patient", $this->db_smartone); + exit; + } + $patientID = $rows[0]["T_OrderHeaderM_PatientID"]; + + $maxOrder = 5; + $sql = "select min(T_OrderHeaderID) minID + from t_orderheader + where T_OrderHeaderM_PatientID = ? + and T_OrderHeaderID < ? + and T_OrderHeaderIsActive = 'Y' + order by T_OrderHeaderID desc + limit 0, $maxOrder"; + $query = $this->db_smartone->query($sql, array($patientID, $orderID)); + if (!$query) { + $this->sys_error_db("Err : Patient", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + if (count($rows) == 0) { + $this->sys_error_db("No Patient", $this->db_smartone); + exit; + } + $minOrderID = $rows[0]["minID"]; + + $sql = "select date(T_OrderHeaderDate) T_OrderHeaderDate, T_OrderHeaderLabNumber,T_OrderHeaderID, + T_TestID, + T_TestShortName , T_OrderDetailResult, T_TestIsResult, T_OrderDetailResultFlag, + (length(T_TestSasCode) - 6 ) / 2 Level, T_TestSasCode, Nat_UnitName + from t_orderheader + join t_orderdetail on T_OrderHeaderM_PatientID = ? + and T_OrderHeaderIsActive = 'Y' and T_OrderDetailIsActive = 'Y' + and T_OrderHeaderID = T_OrderDetailT_OrderHeaderID + and T_OrderHeaderID < ? + and T_OrderHeaderID >= ? + join t_test on T_OrderDetailT_TestID = T_TestID + join nat_unit on T_OrderDetailNat_UnitID = Nat_UnitID + join group_resultdetail on T_TestID = Group_ResultDetailT_TestID + and Group_ResultDetailGroup_ResultID = 1 + order by T_TestSasCode"; + + $query = $this->db_smartone->query($sql, array($patientID, $orderID, $minOrderID)); + if (!$query) { + $this->sys_error_db("Err : History ", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + $arr_result = array(); + $prev_date = ""; + $cur_idx = 0; + $prev_id = 0; + $arr_px = array(); + + $arr_date = array(); + $index_px = 0; + $arr_test = array(); + + foreach ($rows as $r) { + $is_result = $r["T_TestIsResult"]; + if ($is_result == "N") continue; + $order_id = $r["T_OrderHeaderID"]; + + $date = $r["T_OrderHeaderDate"]; + $px_name = $r["T_TestShortName"]; + $result = $r["T_OrderDetailResult"] . $r["T_OrderDetailResultFlag"]; + + if (!isset($arr_px[$px_name])) { + $arr_result[] = array( + "px_name" => $px_name, + "code" => $r["T_TestSasCode"], + "unit" => $r["Nat_UnitName"], + "result" => array() + ); + $arr_px[$px_name] = array("code" => $r["T_TestSasCode"], "name" => $px_name); + $arr_test[] = array("code" => $r["T_TestSasCode"], "name" => $px_name); + $index_px = count($arr_result) - 1; + } + if (!in_array($date, $arr_date)) $arr_date[] = $date; + $arr_result[$index_px]["result"][$date] = $result; + $prev_id = $order_id; + } + foreach ($arr_result as $idx => $v) { + foreach ($arr_date as $date) { + if (!isset($v["result"][$date])) { + $arr_result[$idx]["result"][$date] = ""; + } + } + } + sort($arr_date); + + $result = array("pxs" => $arr_test, "result" => $arr_result, "dates" => $arr_date); + $this->sys_ok($result); + } + + public function search() + { + $prm = $this->sys_input; + $orderID = $prm["order_id"]; + $sql = "select T_OrderHeaderM_PatientID from t_orderheader where T_OrderHeaderID=?"; + $query = $this->db_smartone->query($sql, array($orderID)); + if (!$query) { + $this->sys_error_db("Err : Patient", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + if (count($rows) == 0) { + $this->sys_error_db("No Patient", $this->db_smartone); + exit; + } + $patientID = $rows[0]["T_OrderHeaderM_PatientID"]; + $sql = "select T_OrderHeaderDate, T_OrderHeaderLabNumber,T_OrderHeaderID, + T_TestShortName , T_OrderDetailResult, T_TestIsResult, T_OrderDetailResultFlag, + (length(T_TestSasCode) - 6 ) / 2 Level + from t_orderheader + join t_orderdetail on T_OrderHeaderM_PatientID = ? + and T_OrderHeaderIsActive = 'Y' and T_OrderDetailIsActive = 'Y' + and T_OrderHeaderID = T_OrderDetailT_OrderHeaderID + and T_OrderHeaderID < ? + join t_test on T_OrderDetailT_TestID = T_TestID + join group_resultdetail on T_TestID = Group_ResultDetailT_TestID + and Group_ResultDetailGroup_ResultID = 1 + order by T_OrderHeaderID, T_TestSasCode"; + + $query = $this->db_smartone->query($sql, array($patientID, $orderID)); + if (!$query) { + $this->sys_error_db("Err : History ", $this->db_smartone); + exit; + } + $rows = $query->result_array(); + $result = array(); + $prev_date = ""; + $cur_idx = 0; + $max_hist = 4; + foreach ($rows as $r) { + $date = $r["T_OrderHeaderDate"]; + if ($prev_date != $date) { + if ($cur_idx == $max_hist) break; + $result[]["date"] = $date; + $cur_idx = count($result) - 1; + $result[$cur_idx]["data"] = array(); + $result[$cur_idx]["id"] = $r["T_OrderHeaderID"]; + } + $result[$cur_idx]["data"][] = array( + "px_name" => $r["T_TestShortName"], + "is_result" => $r["T_TestIsResult"], + "result" => $r["T_OrderDetailResult"], + "flag" => $r["T_OrderDetailResultFlag"], + "level" => $r["Level"] + ); + $prev_date = $date; + } + $this->sys_ok($result); + } +} diff --git a/api/devkedungdoro/resultentry-v105/Re_normal.php b/api/devkedungdoro/resultentry-v105/Re_normal.php new file mode 100644 index 0000000..8655ae5 --- /dev/null +++ b/api/devkedungdoro/resultentry-v105/Re_normal.php @@ -0,0 +1,49 @@ +db_smartone = $this->load->database("onedev", true); + } + + public function update() + { + $prm = $this->sys_input; + $od_id = $prm["order_detail_id"]; + $sql = "call sp_re_update_normal(?)"; + $this->db_smartone->query($sql, array($od_id)); + $this->clean_mysqli_connection($this->db_smartone->conn_id); + + $sql_norm = "select T_OrderDetailMinValue, T_OrderDetailMaxValue, + T_OrderDetailMinValueInclusive, T_OrderDetailMaxValueInclusive, + Nat_TestFlagLow, Nat_TestFlagHigh, + T_OrderDetailNat_NormalValueID, + T_OrderDetailNat_MethodeID, T_OrderDetailNormalValueNote, + Nat_MethodeName + from t_orderdetail + join t_test on T_OrderDetailT_TestID = T_TestID + join nat_methode on T_OrderDetailNat_MethodeID = Nat_MethodeID + join nat_test on T_TestNat_TestID = Nat_TestID and T_TestIsActive = 'Y' + where T_OrderDetailID = ? "; + $qry = $this->db_smartone->query($sql_norm,array($od_id)); + if ( $qry) { + $rows = $qry->result_array(); + if(count($rows) > 0 ) { + $result = array("status"=>"OK","records" => $rows[0]); + $this->sys_ok($result); + exit; + } + } + + $this->sys_error_db("Change Methode", $this->db_smartone); + } +} diff --git a/api/devkedungdoro/resultentry-v105/Re_normal_method-pe.php b/api/devkedungdoro/resultentry-v105/Re_normal_method-pe.php new file mode 100644 index 0000000..dad6892 --- /dev/null +++ b/api/devkedungdoro/resultentry-v105/Re_normal_method-pe.php @@ -0,0 +1,75 @@ +db_smartone = $this->load->database("onedev", true); + } + + public function search_method() + { + $prm = $this->sys_input; + + $sql = "SELECT Nat_MethodeID, Nat_MethodeName + FROM nat_normalvalue + JOIN nat_methode ON Nat_NormalValueNat_MethodeID = Nat_MethodeID + WHERE Nat_NormalValueIsActive = 'Y' and Nat_MethodeIsActive = 'Y' + AND Nat_NormalValueNat_TestID = ? + GROUP BY Nat_MethodeID + ORDER BY Nat_MethodeName"; + + $query = $this->db_smartone->query($sql, [$prm['nattest_id']]); + if ($query) + { + $rows = $query->result_array(); + $this->sys_ok(["records" => $rows]); + + return; + } + + $this->sys_error_db("Change Methode", $this->db_smartone); + } + + public function save_method() + { + $prm = $this->sys_input; + + $sql = "CALL sp_process_result_method_change(?, ?, ?)"; + $query = $this->db_smartone->query($sql, [$prm['detail_id'], $prm['method_id'], $this->sys_user['M_UserID']]); + + if ($query) + { + $rows = $query->result_array(); + $xdata = json_decode($rows[0]["data"],true); + $this->clean_mysqli_connection($this->db_smartone->conn_id); + $sql = "select T_OrderDetailNormalValueNote, T_OrderDetailNormalValueDescription, + T_OrderDetailNat_MethodeID, T_OrderDetailNat_MethodeName + from t_orderdetail where T_OrderDetailID = ? "; + $qry2 = $this->db_smartone->query($sql,array($prm["detail_id"])); + if ($qry2) { + $rows = $qry2->result_array(); + if (count($rows) > 0 ) { + $xdata["normal_note"] = $rows[0]["T_OrderDetailNormalValueNote"]; + $xdata["normal_desc"] = $rows[0]["T_OrderDetailNormalValueDescription"]; + $xdata["method_id"] = $rows[0]["T_OrderDetailNat_MethodeID"]; + $xdata["method_name"] = $rows[0]["T_OrderDetailNat_MethodeName"]; + } + } + $this->sys_ok(['data'=>$xdata, 'query'=>$this->db_smartone->last_query()]); + + return; + } + + $this->sys_error_db("Change Methode", $this->db_smartone); + } +} +?> diff --git a/api/devkedungdoro/resultentry-v105/Re_normal_method.php b/api/devkedungdoro/resultentry-v105/Re_normal_method.php new file mode 100644 index 0000000..dad6892 --- /dev/null +++ b/api/devkedungdoro/resultentry-v105/Re_normal_method.php @@ -0,0 +1,75 @@ +db_smartone = $this->load->database("onedev", true); + } + + public function search_method() + { + $prm = $this->sys_input; + + $sql = "SELECT Nat_MethodeID, Nat_MethodeName + FROM nat_normalvalue + JOIN nat_methode ON Nat_NormalValueNat_MethodeID = Nat_MethodeID + WHERE Nat_NormalValueIsActive = 'Y' and Nat_MethodeIsActive = 'Y' + AND Nat_NormalValueNat_TestID = ? + GROUP BY Nat_MethodeID + ORDER BY Nat_MethodeName"; + + $query = $this->db_smartone->query($sql, [$prm['nattest_id']]); + if ($query) + { + $rows = $query->result_array(); + $this->sys_ok(["records" => $rows]); + + return; + } + + $this->sys_error_db("Change Methode", $this->db_smartone); + } + + public function save_method() + { + $prm = $this->sys_input; + + $sql = "CALL sp_process_result_method_change(?, ?, ?)"; + $query = $this->db_smartone->query($sql, [$prm['detail_id'], $prm['method_id'], $this->sys_user['M_UserID']]); + + if ($query) + { + $rows = $query->result_array(); + $xdata = json_decode($rows[0]["data"],true); + $this->clean_mysqli_connection($this->db_smartone->conn_id); + $sql = "select T_OrderDetailNormalValueNote, T_OrderDetailNormalValueDescription, + T_OrderDetailNat_MethodeID, T_OrderDetailNat_MethodeName + from t_orderdetail where T_OrderDetailID = ? "; + $qry2 = $this->db_smartone->query($sql,array($prm["detail_id"])); + if ($qry2) { + $rows = $qry2->result_array(); + if (count($rows) > 0 ) { + $xdata["normal_note"] = $rows[0]["T_OrderDetailNormalValueNote"]; + $xdata["normal_desc"] = $rows[0]["T_OrderDetailNormalValueDescription"]; + $xdata["method_id"] = $rows[0]["T_OrderDetailNat_MethodeID"]; + $xdata["method_name"] = $rows[0]["T_OrderDetailNat_MethodeName"]; + } + } + $this->sys_ok(['data'=>$xdata, 'query'=>$this->db_smartone->last_query()]); + + return; + } + + $this->sys_error_db("Change Methode", $this->db_smartone); + } +} +?> diff --git a/api/devkedungdoro/resultentry-v105/Re_patient.php b/api/devkedungdoro/resultentry-v105/Re_patient.php new file mode 100644 index 0000000..a948007 --- /dev/null +++ b/api/devkedungdoro/resultentry-v105/Re_patient.php @@ -0,0 +1,359 @@ +db_smartone = $this->load->database("onedev", true); + } + + public function search() + { + $prm = $this->sys_input; + $max_rst = 10; + + //$sdate = $prm["start_date"] . '%'; + $sdate = $prm["start_date"]; + $search = '%' . $prm["search"] . '%'; + $page = $prm['page']; + $group_id = 0; + if (isset($prm['group_id'])) $group_id = $prm['group_id']; + + $company_id = 0; + $q_company = ""; + if (isset($prm['company_id'])) { + $company_id = $prm['company_id']; + if ($company_id > 0) { + $q_company = " and T_OrderHeaderM_CompanyID = $company_id "; + } + } + $q_search = " and + ( M_PatientName LIKE ? + or T_OrderHeaderLabNumber like ? + or T_OrderHeaderAddOnLabNumberOrigin like ? + or T_OrderHeaderLabNumberExt like ? + )"; + if ($prm["search"] == "") $q_search = ""; + if ($page == null) + $page = 1; + + $offset = ($page - 1) * $max_rst; + + $max_rst = 9999; + $offset = 0; + + $q_group = ""; + if ($group_id != 0) { + $sql = "select T_WorklistDetailNat_TestID Nat_TestID + from t_worklistdetailv2 + where T_WorklistDetailT_WorklistID = $group_id + "; + $qry = $this->db_smartone->query($sql); + $rows = $qry->result_array(); + $nat_test_ids = "0"; + foreach ($rows as $r) { + $nat_test_ids .= ", " . $r["Nat_TestID"]; + } + $q_group = " and T_TestNat_TestID in ( $nat_test_ids ) "; + } + + //janji hasil hari ini T_OrderHeaderID + $sql = "select T_OrderPromiseT_OrderHeaderID + from t_orderpromise + where T_OrderPromiseIsActive = 'Y' and date(T_OrderPromiseDateTime) = ?"; + $qry = $this->db_smartone->query($sql, array($sdate)); + $promise_ids = "0"; + if ($qry) { + $xrows = $qry->result_array(); + if (count($xrows) > 0) { + $xids = array(); + foreach ($xrows as $r) $xids[] = $r["T_OrderPromiseT_OrderHeaderID"]; + $promise_ids = join(",", $xids); + } + } + $sql = "select T_OrderHeaderID + from t_orderheader + where T_OrderHeaderIsActive = 'Y' and date(T_OrderHeaderDate) = ?"; + $qry = $this->db_smartone->query($sql, array($sdate)); + $order_ids = $promise_ids; + if ($qry) { + $xrows = $qry->result_array(); + if (count($xrows) > 0) { + $xids = array(); + foreach ($xrows as $r) $xids[] = $r["T_OrderHeaderID"]; + $order_ids .= "," . join(",", $xids); + } + } + + // t_order_attachment + $sql_attachment = "select T_OrderAttachmentName, T_OrderAttachmentType, T_OrderAttachmentUrl + from t_order_attachment + join t_orderheader + ON T_OrderAttachmentT_OrderHeaderID = T_OrderHeaderID + AND T_OrderAttachmentIsActive = 'Y' + AND T_OrderHeaderIsActive = 'Y' + AND T_OrderAttachmentT_OrderHeaderID in ( $order_ids )"; + + $qry_attachment = $this->db_smartone->query($sql_attachment); + if (!$qry_attachment) { + $this->db_smartone->trans_rollback(); + $this->sys_error_db("select t_order_attachment ", $this->db_smartone); + exit; + } + + $extension_lab = "-"; + $extension_non_lab = "-"; + $lab_name = "-"; + $non_lab_name = "-"; + $lab_type = "-"; + $non_lab_type = "-"; + $lab_url = "-"; + $non_lab_url = "-"; + + $row_attachment = $qry_attachment->result_array(); + if (count($row_attachment) > 0) { + foreach ($row_attachment as $key => $value) { + if ($value['T_OrderAttachmentType'] == "NonLab") { + $non_lab_type = $value['T_OrderAttachmentType']; + $non_lab_url = $value['T_OrderAttachmentUrl']; + $non_lab_name = $value['T_OrderAttachmentName']; + $extension = pathinfo(strtolower($non_lab_name), PATHINFO_EXTENSION); + if ($extension === "pdf") { + $extension_non_lab = "pdf"; + } else { + if ($extension === "png" || $extension === "jpg" || $extension === "jpeg") { + $extension_non_lab = "image"; + } + } + } else { + if ($value['T_OrderAttachmentType'] == "Lab") { + $lab_type = $value['T_OrderAttachmentType']; + $lab_url = $value['T_OrderAttachmentUrl']; + $lab_name = $value['T_OrderAttachmentName']; + $extension = pathinfo(strtolower($lab_name), PATHINFO_EXTENSION); + if ($extension === "pdf") { + $extension_lab = "pdf"; + } else { + if ($extension === "png" || $extension === "jpg" || $extension === "jpeg") { + $extension_lab = "image"; + } + } + } + } + } + } else { + $extension_lab = "-"; + $extension_non_lab = "-"; + $lab_name = "-"; + $non_lab_name = "-"; + $lab_type = "-"; + $non_lab_type = "-"; + $lab_url = "-"; + $non_lab_url = "-"; + } + + $sql = "SELECT *, + CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT('\"', T_OrderPromiseDateTime, '\"') SEPARATOR ','), ']') order_promise + FROM ( + select + BrnListBarcode, + T_OrderHeaderAddOnBNR, + T_OrderHeaderID, T_OrderHeaderLabNumber, T_OrderHeaderDate, + if(T_OrderHeaderAddOnLabNumberOrigin is null, T_OrderHeaderLabNumberExt, T_OrderHeaderAddOnLabNumberOrigin) + T_OrderHeaderLabNumberExt, T_OrderHeaderDiagnose, + M_PatientID, M_PatientNoReg, fn_global_patient_name(M_PatientID) M_PatientName, + M_PatientDOB, T_OrderHeaderM_PatientAge, M_PatientHP, M_SexName, M_PatientNote, + da.M_DoctorID doctor_pj_id, fn_global_doctor_name(da.M_DoctorID) doctor_pj_name, + db.M_DoctorID doctor_sender_id, fn_global_doctor_name(db.M_DoctorID) doctor_sender_name, + M_MouID, M_MouName, M_CompanyID, M_CompanyName, + T_OrderHeaderFoNote, T_OrderHeaderSamplingNote, T_OrderHeaderResultNote, + la.Nat_LangID M_LangID, la.Nat_LangCode M_LangCode, la.Nat_LangName M_LangName, T_OrderHeaderLangIsSI, + lb.Nat_LangID SecondM_LangID, lb.Nat_LangCode SecondM_LangCode, lb.Nat_LangName SecondM_LangName, + T_OrderHeaderAddOnSecondLangIsSI, + T_OrderHeaderIsCito, fn_global_delivery_items(T_OrderHeaderID) as delivery, + T_OrderPromiseDateTime, fn_process_history(T_OrderHeaderID) is_history, + T_OrderHeaderAddOnVerificationDone, + T_OrderHeaderAddOnValidationDone, T_OrderHeaderAddOnRequestChangeDOB, + IFNULL(userfo.M_UserUsername,'') as username_fo, + IFNULL(usersample.M_UserUsername,'') as username_sample + from t_orderheader + JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID + AND T_OrderHeaderAddOnVerificationDone <> 'Y' + AND T_OrderHeaderIsActive = 'Y' + AND T_OrderHeaderID in ( $order_ids ) + {$q_company} + AND T_OrderHeaderAddOnFOVerification = 'Y' + JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeadeRID and T_OrderPromiseIsActive = 'Y' + JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive = 'Y' + JOIN t_test ON T_OrderDetailT_TestID = T_TestID {$q_group} + JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID AND Group_ResultDetailIsActive = 'Y' + JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' + JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID {$q_search} + LEFT JOIN m_doctor da ON T_OrderHeaderPJM_DoctorID = da.M_DoctorID + JOIN m_doctor db ON T_OrderHeaderSenderM_DoctorID = db.M_DoctorID + JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID + JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID + JOIN m_sex ON M_PatientM_SexID = M_SexID + + JOIN nat_lang la ON T_OrderHeaderM_LangID = la.Nat_LangID + LEFT JOIN brn_list ON T_OrderHeaderAddOnBNR = BrnListBarcode + LEFT JOIN nat_lang lb ON T_OrderHeaderAddOnSecondM_LangID = lb.Nat_LangID + LEFT JOIN m_user userfo ON T_OrderHeaderFoNoteM_UserID = userfo.M_UserID + LEFT JOIN m_user usersample ON T_OrderHeaderSamplingNoteM_UserID = usersample.M_UserID + order by FIELD(T_OrderHeaderIsCito, 'Y', 'N') ASC, T_OrderHeaderLabNumber + ) x + GROUP BY T_OrderHeaderID + order by FIELD(T_OrderHeaderIsCito, 'Y', 'N') ASC, T_OrderHeaderLabNumber + "; + if ($q_search == "") { + $query = $this->db_smartone->query($sql); + } else { + $query = $this->db_smartone->query($sql, [$search, $search, $search, $search]); + } + // echo $this->db_smartone->last_query(); + if ($query) { + $rows = $query->result_array(); + $tmp_ohnumber = []; + $arr_brn_have_lab = []; + + foreach ($rows as $k => $v) { + if ($v['T_OrderHeaderAddOnBNR'] != "") { + $arr_brn_have_lab[] = "'" . $v['T_OrderHeaderAddOnBNR'] . "'"; + } + $lang = [["id" => 0, "code" => "ID", "is_si" => "N"]]; + if ($v['M_LangCode'] != "ID") + $lang[] = ["id" => $v['M_LangID'], "code" => $v['M_LangCode'], "is_si" => $v['T_OrderHeaderLangIsSI']]; + + $rows[$k]['data'] = json_decode($v['data']); + $rows[$k]['lang'] = $lang; + $rows[$k]['delivery'] = JSON_DECODE($v['delivery']); + $rows[$k]['order_promise'] = JSON_DECODE($v['order_promise']); + + foreach ($rows[$k]['order_promise'] as $l => $w) + $rows[$k]['order_promise'][$l] = date('d-m-Y H:i', strtotime($w)); + } + + $arr_itf = []; + + if (count($arr_brn_have_lab) > 0) { + $str_no_reg = implode(",", $arr_brn_have_lab); + + $sql_itf = "select Itf_ResultNoreg, + group_concat(Itf_ResultKode) as result + from itf_result + WHERE Itf_ResultNoReg IN ($str_no_reg) + GROUP BY Itf_ResultNoReg + "; + + $query_itf = $this->db_onedev->query($sql_itf); + if (!$query_itf) { + $this->sys_error_db( + "Error Get Result " + ); + exit; + } + + $rows_itf = $query_itf->result_array(); + // print_r($rows_itf); + // exit; + + foreach ($rows_itf as $key => $value) { + $arr_itf[$value['Itf_ResultNoreg']] = $value['result']; + } + } + + foreach ($rows as $key => $value) { + $brn = $value['T_OrderHeaderAddOnBNR']; + + if (isset($arr_itf[$brn])) { + $rows[$key]['Itf'] = $arr_itf[$brn]; + } else { + $rows[$key]['Itf'] = ""; + } + } + + $tot_count = count($rows); + $result = array( + "total" => $tot_count, + "total_page" => ceil($tot_count / $max_rst), + "cur_page" => $page, + "records" => $rows, + "total_display" => sizeof($rows), + "q" => $this->db_smartone->last_query(), + "attachment" => [ + "extension_lab" => $extension_lab, + "extension_non_lab" => $extension_non_lab, + "lab_name" => $lab_name, + "non_lab_name" => $non_lab_name, + "lab_type" => $lab_type, + "non_lab_type" => $non_lab_type, + "lab_url" => $lab_url, + "non_lab_url" => $non_lab_url, + ] + ); + $this->sys_ok($result); + } else { + $this->sys_error_db("worklist rows", $this->db_smartone); + exit; + } + } + + public function history() + { + $prm = $this->sys_input; + + // QUERY TOTAL + $sql = "CALL sp_process_result_history(?)"; + $query = $this->db_smartone->query($sql, [$prm['order_id']]); + + if ($query) { + $row = $query->row(); + $history = json_decode($row->rst); + + $this->sys_ok($history); + } else { + $this->sys_error_db("RESULT HISTORY", $this->db_smartone); + exit; + } + } + + public function save_note() + { + $prm = $this->sys_input; + + $sql = "UPDATE t_orderheader SET T_OrderHeaderResultNote = ?, T_OrderHeaderResultNoteM_UserID = ? + WHERE T_OrderHeaderID = ?"; + $query = $this->db_smartone->query($sql, [$prm['note'], $this->sys_user['M_UserID'], $prm['order_id']]); + if ($query) { + $this->sys_ok($prm['order_id']); + exit; + } + + $this->sys_error_db("RESULT NOTE", $this->db_smartone); + } + + public function info_req() + { + $prm = $this->sys_input; + + $sql = "CALL sp_process_result_reqs(?)"; + $query = $this->db_smartone->query($sql, [$prm['order_id']]); + if ($query) { + $row = $query->row(); + $s_data = $row->data; + $s_data = str_replace("\n", " ", $s_data); + $this->sys_ok(json_decode($s_data)); + exit; + } + + $this->sys_error_db("RESULT REQ", $this->db_smartone); + } +} diff --git a/api/devkedungdoro/resultentry-v105/Re_px-pe.php b/api/devkedungdoro/resultentry-v105/Re_px-pe.php new file mode 100644 index 0000000..07efe11 --- /dev/null +++ b/api/devkedungdoro/resultentry-v105/Re_px-pe.php @@ -0,0 +1,710 @@ +db_smartone = $this->load->database("onedev", true); + } + + public function search() + { + $prm = $this->sys_input; + $max_rst = 99; + + $id = $prm["order_id"]; + $lang = $this->lang_default_code; + $lang_id = isset($prm['lang_id']) ? $prm['lang_id'] : '0'; + + if ($lang_id != 0) + { + $l = $this->db_smartone->where("Nat_LangID", $lang_id)->get("nat_lang")->row(); + $lang = $l->Nat_LangCode; + } + + $tot_count = 0; + $lq = ""; + $group_id = 0; + if (isset($prm['group_id'])) + $group_id = $prm['group_id']; + + if ($group_id != 0) + { + $sql = "select distinct T_WorklistDetailNat_TestID Nat_TestID + from t_worklistdetailv2 + where T_WorklistDetailT_WorklistID = {$group_id}"; + $qry = $this->db_smartone->query($sql); + $rows = $qry->result_array(); + $nat_test_ids = "0"; + foreach($rows as $r) { + $nat_test_ids .= ", " . $r["Nat_TestID"]; + } + $q_group = " ( $nat_test_ids ) "; + + $sql = " + SELECT a1.*, cOUNT(a2.T_OrderDetailID) level + FROM ( + SELECT IFNULL(y.T_OrderDetailT_TestID, x.T_OrderDetailT_TestID) t_testid, + IFNULL(y.T_OrderDetailT_TestName, y.T_OrderDetailT_TestName) t_testname, + y.T_OrderDetailResult result, y.T_OrderDetailResult result_old, y.T_OrderDetailNote note, y.T_OrderDetailNote note_old, + y.T_OrderDetailID id, + y.T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative, + y.T_OrderDetailResultFlag result_flag, + y.T_OrderDetailNat_NormalValueID normal_id, + y.T_OrderDetailNormalValueNote normal_note, y.T_OrderDetailNat_UnitName unit_name, + y.T_OrderdetailNat_MethodeID methode_id, y.T_OrderdetailNat_MethodeName methode_name, + a.T_TestNat_TestID nattest_id, a.T_TestID tx_id, count(T_ResultInstrumentID) as result_instrument_n, + y.T_OrderDetailVerification, T_OrderSampleReceive sample_receive, + T_OrderSampleProcessing sample_processing, T_OrderSampleWorklistReceive sample_worklist_receive, + IF(T_OrderDetailAddOnPreAnalytic = 'Y', T_OrderDetailAddOnPreAnalytic, PreAnalyticIsOk) pre_analytic, + T_OrderDetailAddOnPreAnalytic, + T_OrderHeaderID order_id, y.T_OrderDetailT_TestSasCode test_sas_code, + tx.T_TestSasCode, + T_OrderDetailAddOnResample `resample`, T_OrderDetailAddOnResampleStatus resample_status, + T_OrderDetailAddOnRef ref, y.T_OrderDetailVerification verification, y.T_OrderDetailValidation validation, + T_OrderPromiseDateTime, fn_process_group_result(x.T_OrderDetailT_TestID) ResultGroupName + FROM t_orderdetail x + left join t_orderpromise on x.T_OrderDetailT_OrderPromiseID = T_OrderPromiseID + JOIN t_test tx ON x.T_OrderDetailT_TestID = T_TestID + JOIN t_test tcheck on tcheck.T_TestNat_TestID in {$q_group} + and ( tx.T_TestID = tcheck.T_TestID or tx.T_TestSasCode like concat(tcheck.T_TestSasCode,'%')) + JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = tx.T_TestNat_SubGroupID + JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID + AND DocumentationGroupName = 'lab' + LEFT JOIN t_orderdetail y ON x.T_OrderDetailT_TestSasCode LIKE CONCAT(y.T_OrderDetailT_TestSasCode, '%') + AND x.T_OrderDetailT_OrderHeaderID = y.T_OrderDetailT_OrderHeaderID + AND y.T_OrderDetailIsActive = 'Y' + LEFT JOIN t_orderdetailaddon ON x.T_OrderDetailID = T_OrderDetailAddOnT_OrderDetailID + JOIN t_orderheader ON y.T_OrderDetailT_OrderHeaderID = T_OrderHeaderID + LEFT JOIN t_test a ON y.T_OrderDetailT_TestID = a.T_TestID + AND a.T_TestIsNonLab = '' + LEFT JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive, T_OrderSampleProcessing, T_OrderSampleWorklistReceive + FROM t_ordersample WHERE T_OrderSampleT_OrderHeaderID = ? + AND T_OrderSampleIsactive = 'Y' + GROUP BY T_OrderSampleT_SampleTypeID) os ON a.T_TestT_SampleTypeID = os.T_OrderSampleT_SampleTypeID + + LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = x.T_OrderDetailID + LEFT JOIN pre_analytic ON PreAnalyticNat_TestID = a.T_TestNat_TestID AND PreAnalyticDate = date(now()) and PreAnalyticIsActive = 'Y' + WHERE x.T_OrderDetailT_OrderHeaderID = ? + AND x.T_OrderDetailIsActive = 'Y' + GROUP BY y.T_OrderDetailT_TestID + ORDER BY y.T_OrderDetailT_TestSasCode ASC + ) a1 + + LEFT JOIN t_orderdetail a2 ON a2.T_OrderDetailT_OrderHeaderID = a1.order_id + AND a2.T_OrderDetailIsActive = 'Y' + AND a1.test_sas_code LIKE CONCAT(a2.T_OrderDetailT_testSasCode, '%') + GROUP BY a1.t_testid + order by a1.T_TestSasCode +"; + $query = $this->db_smartone->query($sql, [$id, $id]); + $lq = $this->db_smartone->last_query(); + } + else + { + $sql = " + SELECT a1.*, cOUNT(a2.T_OrderDetailID) level + FROM ( + SELECT IFNULL(y.T_OrderDetailT_TestID, x.T_OrderDetailT_TestID) t_testid, + IFNULL(y.T_OrderDetailT_TestName, y.T_OrderDetailT_TestName) t_testname, + y.T_OrderDetailResult result, y.T_OrderDetailResult result_old, y.T_OrderDetailNote note, y.T_OrderDetailNote note_old, + y.T_OrderDetailID id, + y.T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative, + y.T_OrderDetailResultFlag result_flag, + y.T_OrderDetailNat_NormalValueID normal_id, + y.T_OrderDetailNormalValueNote normal_note, y.T_OrderDetailNat_UnitName unit_name, + y.T_OrderdetailNat_MethodeID methode_id, y.T_OrderdetailNat_MethodeName methode_name, + a.T_TestNat_TestID nattest_id, a.T_TestID tx_id, count(T_ResultInstrumentID) as result_instrument_n, + y.T_OrderDetailVerification, T_OrderSampleReceive sample_receive, + T_OrderSampleProcessing sample_processing, T_OrderSampleWorklistReceive sample_worklist_receive, + IF(T_OrderDetailAddOnPreAnalytic = 'Y', T_OrderDetailAddOnPreAnalytic, PreAnalyticIsOk) pre_analytic, + T_OrderDetailAddOnPreAnalytic, + T_OrderHeaderID order_id, y.T_OrderDetailT_TestSasCode test_sas_code, + tx.T_TestSasCode, + T_OrderDetailAddOnResample `resample`, T_OrderDetailAddOnResampleStatus resample_status, + T_OrderDetailAddOnRef ref, y.T_OrderDetailVerification verification, y.T_OrderDetailValidation validation, + T_OrderPromiseDateTime , fn_process_group_result(x.T_OrderDetailT_TestID) ResultGroupName + FROM t_orderdetail x + left join t_orderpromise on x.T_OrderDetailT_OrderPromiseID = T_OrderPromiseID + JOIN t_test tx ON x.T_OrderDetailT_TestID = T_TestID + JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = tx.T_TestNat_SubGroupID + JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID + AND DocumentationGroupName = 'lab' + LEFT JOIN t_orderdetail y ON x.T_OrderDetailT_TestSasCode LIKE CONCAT(y.T_OrderDetailT_TestSasCode, '%') + AND x.T_OrderDetailT_OrderHeaderID = y.T_OrderDetailT_OrderHeaderID + AND y.T_OrderDetailIsActive = 'Y' + + LEFT JOIN t_orderdetailaddon ON x.T_OrderDetailID = T_OrderDetailAddOnT_OrderDetailID + + JOIN t_orderheader ON y.T_OrderDetailT_OrderHeaderID = T_OrderHeaderID + LEFT JOIN t_test a ON y.T_OrderDetailT_TestID = a.T_TestID + AND a.T_TestIsNonLab = '' + LEFT JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive, T_OrderSampleProcessing, T_OrderSampleWorklistReceive + FROM t_ordersample WHERE T_OrderSampleT_OrderHeaderID = ? + AND T_OrderSampleIsactive = 'Y' + GROUP BY T_OrderSampleT_SampleTypeID) os ON a.T_TestT_SampleTypeID = os.T_OrderSampleT_SampleTypeID + + LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = x.T_OrderDetailID + LEFT JOIN pre_analytic ON PreAnalyticNat_TestID = a.T_TestNat_TestID AND PreAnalyticDate = date(now()) and PreAnalyticIsActive = 'Y' + WHERE x.T_OrderDetailT_OrderHeaderID = ? + AND x.T_OrderDetailIsActive = 'Y' + GROUP BY y.T_OrderDetailT_TestID + ORDER BY y.T_OrderDetailT_TestSasCode ASC + ) a1 + + LEFT JOIN t_orderdetail a2 ON a2.T_OrderDetailT_OrderHeaderID = a1.order_id + AND a2.T_OrderDetailIsActive = 'Y' + AND a1.test_sas_code LIKE CONCAT(a2.T_OrderDetailT_testSasCode, '%') + GROUP BY a1.t_testid + order by a1.T_TestSasCode +"; + $query = $this->db_smartone->query($sql, [$id, $id]); + $lq = $this->db_smartone->last_query(); + } + // file_put_contents("/xtmp/re-query.sql",$lq); + + if ($query) { + $rst = []; + $rows = $query->result_array(); + + foreach($rows as $k => $v) + { + + if ($v['is_result'] == "Y" && $v['is_quantitative'] == "N") + { + $v['template'] = []; + $x = $this->db_smartone->query("CALL sp_master_resulttemplate_get('{$v['t_testid']}')"); + $this->clean_mysqli_connection($this->db_smartone->conn_id); + if ($x) + $v['template'] = $x->result_array(); + } + + // IF Rujukan, by pas Pre Analytik + if ($v['ref'] == 'Y') + $v['pre_analytic'] = 'Y'; + + $rst[] = $v; + } + + $result = array("total" => $tot_count, "records" => $rst, "total_display" => sizeof($rows), "q" => $lq); + $this->sys_ok($result); + } + else { + $this->sys_error_db("RE Px rows", $this->db_smartone); + exit; + } + } + + public function save() + { + $prm = $this->sys_input; + $data = json_decode($prm["data"]); + $lang = $this->lang_default_code; + $lang_id = isset($prm['lang_id']) ? $prm['lang_id'] : '0'; + + if ($lang_id != 0) + { + $l = $this->db_smartone->where("Nat_LangID", $lang_id)->get("nat_lang")->row(); + $lang = $l->Nat_LangCode; + } + + $sql_norm = "select T_OrderDetailMinValue, T_OrderDetailMaxValue, + T_OrderDetailMinValueInclusive, T_OrderDetailMaxValueInclusive, + Nat_TestFlagLow, Nat_TestFlagHigh + from t_orderdetail + join t_test on T_OrderDetailT_TestID = T_TestID + join nat_test on T_TestNat_TestID = Nat_TestID and T_TestIsActive = 'Y' + where T_OrderDetailID = ? "; + + $ids = []; + foreach ($data as $k => $v) + { + if ( $v->resultInstrumentID > 0 ) { + $sql_i = "select T_ResultInstrumentNat_NormalValueID normalValueID + from t_resultinstrument + where T_ResultInstrumentID = ?"; + $qry_i = $this->db_smartone->query($sql_i, array($v->resultInstrumentID)); + if ($qry_i) { + $rows_i = $qry_i->result_array(); + + if (count($rows_i) > 0 ) { + $sql_iu = "update t_orderdetail, nat_normalvalue + set T_OrderDetailMinValue = Nat_NormalValueMinValue, + T_OrderDetailMinValueInclusive = Nat_NormalValueMinValueInclusive, + T_OrderDetailMaxValue = Nat_NormalValueMaxValue , + T_OrderDetailMaxValueInclusive = Nat_NormalValueMaxValueInclusive, + T_OrderDetailNormalValueNote = Nat_NormalValueNote, + T_OrderDetailNormalValueDescription = Nat_NormalValueDescription, + T_OrderDetailNat_NormalValueID = Nat_NormalValueID + where T_OrderDetailID = ? and Nat_NormalValueID = ? + "; + $this->db_smartone->query($sql_iu, array($v->id, $rows_i[0]["normalValueID"])); + //file_put_contents("/xtmp/update-nilai-normal", $this->db_smartone->last_query() . "\n", FILE_APPEND); + } + } + } + $y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$v->order_id}', '{$v->test_id}') c") + ->row(); + $req_status = $y->c; + $qry_norm = $this->db_smartone->query($sql_norm,$v->id); + $result_flag = ""; + if ($qry_norm) { + $rows_norm = $qry_norm->result_array(); + if (count($rows_norm) > 0 ) { + $r = $rows_norm[0]; + if (is_numeric($v->result)) { + + if ( $r["T_OrderDetailMinValueInclusive"] == "Y" && $v->result < $r["T_OrderDetailMinValue"] ) { + $result_flag = $r["Nat_TestFlagLow"]; + } + if ( $r["T_OrderDetailMinValueInclusive"] == "N" && $v->result <= $r["T_OrderDetailMinValue"] ) { + $result_flag = $r["Nat_TestFlagLow"]; + } + if ( $r["T_OrderDetailMaxValueInclusive"] == "Y" && $v->result > $r["T_OrderDetailMaxValue"] ) { + $result_flag = $r["Nat_TestFlagHigh"]; + } + if ( $r["T_OrderDetailMaxValueInclusive"] == "N" && $v->result >= $r["T_OrderDetailMaxValue"] ) { + $result_flag = $r["Nat_TestFlagHigh"]; + } + } + } + } + if ($lang == $this->lang_default_code) + { + $this->db_smartone->set('T_OrderDetailResult', $v->result) + ->set('T_OrderDetailResultFlag', $result_flag) + ->set('T_OrderDetailNote', $v->note) + ->set('T_OrderDetailReqStatus', $req_status) + ->where('T_OrderDetailID', $v->id) + ->update('t_orderdetail'); + } + else + { + $this->db_smartone->set('T_OrderDetailLangResult', $v->result) + ->set('T_OrderDetailLangNote', $v->note) + ->where('T_OrderDetailLangID', $v->id) + ->update('t_orderdetaillang'); + } + + $ids[] = $v->id; + } + + // LOG Process + $order = $this->db_smartone->select('T_OrderDetailT_OrderHeaderID id, T_OrderHeaderLabNumber lab_number', false) + ->join('t_orderheader', 'T_OrderHeaderID = T_OrderDetailT_OrderHeaderID') + ->where('T_OrderDetailID', $data[0]->id) + ->get('t_orderdetail') + ->row(); + + $dblog = $this->load->database("onelog", true); + $dblog->set('Log_ProcessCode', 'PROCESS.Result.Entry') + ->set('Log_ProcessOrderID', $order->id) + ->set('Log_ProcessOrderNumber', $order->lab_number) + ->set('Log_ProcessJson', json_encode($data)) + ->set('Log_ProcessUserID', $this->sys_user['M_UserID']) + ->insert('log_process'); + // END OF Log Process + //auto calculation + $this->load->library("Resultcalc"); + $rows = $this->resultcalc->auto($order->id); + + try { + foreach($ids as $id ) { + $this->db_smartone->query("call sp_set_normal_value_flag($id)"); + $this->clean_mysqli_connection($this->db_smartone->conn_id); + } + } catch(Exception $e) { + } + + $this->sys_ok($ids); + } + + public function save_template() + { + $prm = $this->sys_input; + + $n = $this->db_smartone->select("COUNT(T_ResultTemplateID) n") + ->where("T_ResultTemplateT_TestID", $prm['test_id']) + ->where("T_ResultTemplateIsActive", "Y") + ->where("T_ResultTemplateValue", $prm['value']) + ->get('t_resulttemplate') + ->row(); + if ($n->n > 0) + { + $this->sys_error_db("Insert Result Template", $this->db_smartone); + return; + } + + $r = $this->db_smartone->set("T_ResultTemplateT_TestID", $prm['test_id']) + ->set("T_ResultTemplateValue", $prm['value']) + ->insert('t_resulttemplate'); + if ($r) + { + $template = []; + $x = $this->db_smartone->query("CALL sp_master_resulttemplate_get('{$prm['test_id']}')"); + $this->clean_mysqli_connection($this->db_smartone->conn_id); + if ($x) + $template = $x->result_array(); + + $this->sys_ok($template); + } + } + + public function export() + { + $prm = $this->sys_input; + + $sql = "CALL sp_process_result_lang(?, ?, ?, ?)"; + $query = $this->db_smartone->query($sql, [$prm['order_id'], $prm['lang_id'], $prm['is_si'], $this->sys_user['M_UserID']]); + if ($query) + { + $r = $query->row(); + if ($r->status == "OK") + { + $this->sys_ok($r->data); + return; + } + + $this->sys_error_db("Message : " . $r->message, $this->db_smartone); + } + else + { + $this->sys_error_db("Lang Result", $this->db_smartone); + return; + } + } + + public function search_group() + { + $prm = $this->sys_input; + $max_rst = 100; + + // QUERY TOTAL + $sql = "select count(*) total + from t_worklist + where T_WorklistIsActive = 'Y' + order by T_WorklistName ASC"; + $query = $this->db_smartone->query($sql); + + if ($query) { + $tot_count = $query->result_array()[0]["total"]; + } + else { + $this->sys_error_db("worklist count", $this->db_smartone); + exit; + } + + $sql = "select T_WorklistID group_id, T_WorklistName group_name + from t_worklist + where T_WorklistIsActive = 'Y' + order by T_WorklistName ASC + limit 0, {$max_rst}"; + $query = $this->db_smartone->query($sql); + + if ($query) { + $rows = $query->result_array(); + foreach ($rows as $k => $v) + $rows[$k]['data'] = json_decode($v['data']); + $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query()); + $this->sys_ok($result); + } + else { + $this->sys_error_db("worklist rows", $this->db_smartone); + exit; + } + } + + public function search_rerun() + { + $prm = $this->sys_input; + $id = $prm["detail_id"]; + + $sql = "CALL sp_process_result_rerun(?)"; + $query = $this->db_smartone->query($sql, [$id]); + + if ($query) + { + $rows = $query->result_array(); + $this->sys_ok(["records"=>$rows]); + } + else { + $this->sys_error_db("Rerun rows", $this->db_smartone); + exit; + } + } + + function getdoctorsfna() + { + $prm = $this->sys_input; + // $id = $prm["id"]; + + $sql = " SELECT M_DoctorID as id, CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as name + FROM m_doctorso + JOIN m_doctor ON M_DoctorSOM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + M_DoctorSONat_SubGroupID = 9 AND + M_DoctorSOIsActive = 'Y' + ORDER BY M_DoctorName ASC"; + //echo $sql; + $query = $this->db_smartone->query($sql); + + if ($query) + { + $rows = $query->result_array(); + $this->sys_ok(["records"=>$rows]); + } + else { + $this->sys_error_db("Rerun rows", $this->db_smartone); + exit; + } + } + + function getfnaresult() + { + $prm = $this->sys_input; + $id = $prm["id"]; + + $sql = " SELECT Other_FNADetailsID as xid, + Other_FNAT_OrderDetailID as orderdetail_id, + Other_FNADetailsCode as code, + Other_FNADetailsLabel as label, + Other_FNADetailsResult as result, + IFNULL(Other_FNAM_DoctorID,0) as doctor_id, + IF(ISNULL(Other_FNAM_DoctorID) OR Other_FNAM_DoctorID = 0 ,'0', CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3)) as doctor_name + FROM other_fna + JOIN other_fnadetails ON Other_FNADetailsOther_FNAID = Other_FNAID AND Other_FNADetailsIsActive = 'Y' + LEFT JOIN m_doctor ON Other_FNAM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + Other_FNAT_OrderDetailID = {$id} AND Other_FNAIsActive = 'Y' + GROUP BY Other_FNADetailsID + ORDER BY Other_FNADetailsCode ASC"; + $query = $this->db_smartone->query($sql); + + if ($query) + { + $rows = $query->result_array(); + $sql = " + SELECT '0' as id, 'Belum memilih dokter' as name + UNION + SELECT M_DoctorID as id, CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as name + FROM m_doctorso + JOIN m_doctor ON M_DoctorSOM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + M_DoctorSONat_SubGroupID = 9 AND + M_DoctorSOIsActive = 'Y' + ORDER BY name ASC"; + //echo $sql; + $doctors = $this->db_smartone->query($sql)->result_array(); + $rst = array('doctors'=>$doctors,'results'=>$rows); + $this->sys_ok(["records"=>$rst]); + } + else { + $this->sys_error_db("Rerun rows", $this->db_smartone); + exit; + } + } + + function getpapsmearresult() + { + $prm = $this->sys_input; + $id = $prm["id"]; + + $sql = " SELECT Other_PapSmearDetailsID as xid, + Other_PapSmearID as header_id, + Other_PapSmearT_OrderDetailID as orderdetail_id, + Other_PapSmearDetailsCode as code, + Other_PapSmearDetailsLabel as label, + Other_PapSmearDetailsResult as result, + IFNULL(Other_PapSmearM_DoctorID,0) as doctor_id, + IF(ISNULL(Other_PapSmearM_DoctorID) OR Other_PapSmearM_DoctorID = 0 ,'0', CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3)) as doctor_name + FROM other_papsmear + JOIN other_papsmeardetails ON Other_PapSmearDetailsOther_PapSmearID = Other_PapSmearID AND Other_PapSmearDetailsIsActive = 'Y' + LEFT JOIN m_doctor ON Other_PapSmearM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + Other_PapSmearT_OrderDetailID = {$id} AND Other_PapSmearIsActive = 'Y' + GROUP BY Other_PapSmearDetailsID + ORDER BY Other_PapSmearDetailsCode ASC"; + //echo $sql; + $rows = $this->db_smartone->query($sql)->result_array(); + if(!$rows){ + $rows = array( + array( + 'xid' => '0', + 'header_id' => '0', + 'orderdetail_id' => $id, + 'code' => 'A', + 'label' => 'Makroskopik', + 'result' => '', + 'doctor_id' => '0', + 'doctor_name' => '' + ), + array( + 'xid' => '0', + 'header_id' => '0', + 'orderdetail_id' => $id, + 'code' => 'B', + 'label' => 'Mikroskopik', + 'result' => '', + 'doctor_id' => '0', + 'doctor_name' => '' + ), + array( + 'xid' => '0', + 'header_id' => '0', + 'orderdetail_id' => $id, + 'code' => 'C', + 'label' => 'Kesimpulan', + 'result' => '', + 'doctor_id' => '0', + 'doctor_name' => '' + ) + ); + } + + $header_id = $rows[0]['header_id']; + $sql = "SELECT Other_PapSmearMaturasiID as xid, + Other_PapSmearMaturasiValue as value + FROM other_papsmearmaturasi + WHERE + Other_PapSmearMaturasiOther_PapSmearID = {$header_id} AND + Other_PapSmearMaturasiIsActive = 'Y' + "; + $maturasi = $this->db_smartone->query($sql)->result_array(); + if(!$maturasi){ + $maturasi = array('xid'=>'0','value'=>'//'); + } + + $sql = "SELECT IFNULL(Other_PapSmearBahanID,0) as xid, + M_PapSmearBahanID as bahan_id, + M_PapSmearBahanName as name + FROM m_papsmearbahan + LEFT JOIN other_papsmearbahan ON Other_PapSmearBahanM_PapSmearBahanID = M_PapSmearBahanID AND + Other_PapSmearBahanOther_PapSmearID = {$header_id} AND + Other_PapSmearBahanIsActive = 'Y' + WHERE + M_PapSmearBahanIsActive = 'Y' + "; + //echo $sql; + $bahans = $this->db_smartone->query($sql)->result_array(); + + $sql = "SELECT IFNULL(Other_PapsmearCategoryID,0) as xid, + M_PapSmearCategoryID as category_id, + M_PapSmearCategoryName as name + FROM m_papsmearcategory + LEFT JOIN other_papsmearcategory ON Other_PapsmearCategoryM_PapSmearCategoryID = M_PapSmearCategoryID AND + Other_PapsmearCategoryOther_PapSmearID = {$header_id} AND + Other_PapsmearCategoryIsActive = 'Y' + WHERE + M_PapSmearCategoryIsActive = 'Y' + "; + //echo $sql; + $categories = $this->db_smartone->query($sql)->result_array(); + + $sql = "SELECT IFNULL(Other_PapSmearCheckID,0) as xid, + M_PapSmearCheckID as check_id, + M_PapSmearCheckLabel as name, + Other_PapSmearCheckNote as note + FROM m_papsmearcheck + LEFT JOIN other_papsmearcheck ON Other_PapSmearCheckM_PapSmearCheckID = M_PapSmearCheckID AND + Other_PapSmearCheckOther_PapSmearID = {$header_id} AND + Other_PapSmearCheckIsActive = 'Y' + WHERE + M_PapSmearCheckIsActive = 'Y' + "; + $checks = $this->db_smartone->query($sql)->result_array(); + + $sql = " + SELECT '0' as id, 'Belum memilih dokter' as name + UNION + SELECT M_DoctorID as id, CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as name + FROM m_doctorso + JOIN m_doctor ON M_DoctorSOM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + M_DoctorSONat_SubGroupID = 9 AND + M_DoctorSOIsActive = 'Y' + ORDER BY name ASC"; + //echo $sql; + $doctors = $this->db_smartone->query($sql)->result_array(); + $rst = array('doctors'=>$doctors,'checks'=>$checks,'bahans'=>$bahans,'categories'=>$categories,'results'=>$rows); + $this->sys_ok(["records"=>$rst]); + + } + + function saveresult_fna() + { + $inp = $this->sys_input; + $prm = $inp['results']; + $doctor_id = $inp['doctor']; + $userid = $this->sys_user['M_UserID']; + $header_id = 0; + if($prm[0]['xid'] == '0'){ + $sql = "INSERT INTO other_fna( + Other_FNAM_DoctorID, + Other_FNAT_OrderDetailID, + Other_FNAUserID, + Other_FNACreated + ) + VALUES( + {$doctor_id}, + {$prm[0]['orderdetail_id']}, + {$userid}, + NOW() + + )"; + //echo $sql; + $this->db_smartone->query($sql); + $header_id = $this->db_smartone->insert_id(); + } + foreach($prm as $k => $v){ + if($v['xid'] == '0'){ + $results = str_replace("'", "\\'", $v['result']); + $sql = "INSERT INTO other_fnadetails( + Other_FNADetailsOther_FNAID , + Other_FNADetailsCode, + Other_FNADetailsLabel, + Other_FNADetailsResult, + Other_FNADetailsCreated, + Other_FNADetailsUserID + ) + VALUES( + {$header_id}, + '{$v['code']}', + '{$v['label']}', + '{$results}', + NOW(), + {$userid} + )"; + $query = $this->db_smartone->query($sql); + } + else{ + $results = str_replace("'", "\\'", $v['result']); + $sql = "UPDATE other_fnadetails SET + Other_FNADetailsResult = '{$results}', + Other_FNADetailsUserID = {$userid} + WHERE + Other_FNADetailsID = {$v['xid']}"; + $query = $this->db_smartone->query($sql); + } + } + + $result = array("total" => 1, "records" => array(), "sql"=> ''); + $this->sys_ok($result); + exit; + } + +} + diff --git a/api/devkedungdoro/resultentry-v105/Re_px.php b/api/devkedungdoro/resultentry-v105/Re_px.php new file mode 100644 index 0000000..eb455f2 --- /dev/null +++ b/api/devkedungdoro/resultentry-v105/Re_px.php @@ -0,0 +1,2991 @@ +db_smartone = $this->load->database("onedev", true); + $this->load->helper(array('form', 'url')); + } + function getMethodeID($natTestID) + { + $sql = "select M_MethodePriorityNat_MethodeID MethodeID, Nat_MethodeName + from + m_methode_priority + join nat_methode on Nat_MethodeID = M_MethodePriorityNat_MethodeID + and Nat_MethodeIsActive = 'Y' + join m_instrumentmethode on M_InstrumentMethodeNat_MethodeID = Nat_MethodeID and M_InstrumentMethodeIsActive = 'Y' + join nat_instrument on M_InstrumentMethodeNat_InstrumentID = Nat_InstrumentID + and Nat_InstrumentIsActive ='Y' + where M_MethodePriorityIsActive = 'Y' + and M_MethodePriorityNat_TestID = $natTestID + and M_MethodePriorityM_DayOfWeekID = dayofweek(now()) + order by M_MethodePriorityNumber desc + limit 0,1 "; + $qry = $this->db->query($sql); + if ($qry) { + $rows = $qry->result_array(); + if (count($rows) > 0) return array($rows[0]["MethodeID"], $rows[0]["Nat_MethodeName"]); + } + //2nd + $sql = "select + M_InstrumentMethodeNat_MethodeID MethodeID, Nat_MethodeName + from m_instrumentmethode + join nat_methode on M_InstrumentMethodeNat_MethodeID = Nat_MethodeID + and Nat_MethodeIsActive = 'Y' + join nat_instrument on M_InstrumentMethodeNat_InstrumentID = Nat_InstrumentID + and Nat_InstrumentIsActive ='Y' + where M_InstrumentMethodeNat_TestID = $natTestID + and M_InstrumentMethodeIsActive = 'Y' + order by M_InstrumentMethodePriority desc + limit 0,1"; + $qry = $this->db->query($sql); + if ($qry) { + $rows = $qry->result_array(); + if (count($rows) > 0) return array($rows[0]["MethodeID"], $rows[0]["Nat_MethodeName"]); + } + // + $sql = "select Nat_NormalValueNat_MethodeID MethodeID, Nat_MethodeName + from + nat_normalvalue + join nat_methode on Nat_NormalValueNat_MethodeID = Nat_MethodeID + and Nat_MethodeIsActive = 'Y' + where Nat_NormalValueNat_TestID = $natTestID + and Nat_NormalValueIsActive = 'Y' + order by Nat_NormalValueID + limit 0,1"; + $qry = $this->db->query($sql); + if ($qry) { + $rows = $qry->result_array(); + if (count($rows) > 0) return array($rows[0]["MethodeID"], $rows[0]["Nat_MethodeName"]); + } + return array(0, ""); + } + function get_normal_value($methodeID, $natTestID, $sexID, $ageInDay) + { + $sql = "select fn_sampling_get_normal($methodeID, $natTestID, $sexID, $ageInDay) as normalValueID"; + $qry = $this->db->query($sql); + if ($qry) { + $rows = $qry->result_array(); + if (count($rows) > 0) return $rows[0]["normalValueID"]; + } + return 0; + } + function fn_fix_normal($order_id) + { + $sql = "select + T_OrderDetailID, M_PatientM_SexID, fn_global_age_count_day(M_PatientDOB, date(T_OrderHeaderDate)) Dob , + T_TestNat_TestID + from t_orderheader + join m_patient on T_OrderHeaderID = $order_id and T_OrderHeaderM_PatientID = M_PatientID + join t_orderdetail on T_OrderDetailT_OrderHeaderID = T_OrderHeaderID + and T_OrderDetailIsACtive = 'Y' + and ( T_OrderDetailNat_NormalValueID is null or T_OrderDetailNat_NormalValueID = 0 ) + join t_test on T_OrderDetailT_TestID = T_TestID and T_TestIsResult = 'Y' "; + $qry = $this->db->query($sql); + if (!$qry) { + return; + } + $rows = $qry->result_array(); + if (count($rows) == 0) return; + $sql_u = "update t_orderdetail + join nat_normalvalue on T_OrderDetailID = ? and Nat_NormalValueID = ? + set + T_OrderDetailNat_NormalValueID = Nat_NormalValueID, + T_OrderDetailNormalValueNote = Nat_NormalValueNote, + T_OrderDetailNormalValueDescription = Nat_NormalValueDescription, + T_OrderDetailMinValue = Nat_NormalValueMinValue, + T_OrderDetailMaxValue = Nat_NormalValueMaxValue, + T_OrderDetailMinValueInclusive = Nat_NormalValueMinValueInclusive, + T_OrderDetailMaxValueInclusive = Nat_NormalValueMaxValueInclusive, + T_OrderDetailNat_MethodeID = ?, + T_OrderdetailNat_MethodeName =?"; + + foreach ($rows as $r) { + $T_OrderDetailID = $r["T_OrderDetailID"]; + $sexID = $r["M_PatientM_SexID"]; + $ageInDay = $r["Dob"]; + $natTestID = $r["T_TestNat_TestID"]; + list($methodeID, $methodeName) = $this->getMethodeID($natTestID); + if ($methodeID == 0) continue; + $normalValueID = $this->get_normal_value($methodeID, $natTestID, $sexID, $ageInDay); + if ($normalValueID == 0) return; + $this->db->query($sql_u, array($T_OrderDetailID, $normalValueID, $methodeID, $methodeName)); + } + } + function update_order_sample($targetID, $sourceID) + { + $sql = "update t_ordersample target + join t_ordersample source on + target.T_OrderSampleID = ? + and target.T_OrderSampleWorklistReceive = 'N' + and source.T_OrderSampleID = ? + set + target.T_OrderSampleSampling = if(target.T_OrderSampleSampling='Y',target.T_OrderSampleSampling, source.T_OrderSampleSampling), + target.T_OrderSampleSamplingDate = if(target.T_OrderSampleSampling='Y',target.T_OrderSampleSamplingDate, source.T_OrderSampleSamplingDate), + target.T_OrderSampleSamplingTime = if(target.T_OrderSampleSampling='Y',target.T_OrderSampleSamplingTime, source.T_OrderSampleSamplingTime), + target.T_OrderSampleSamplingUserID = if(target.T_OrderSampleSampling='Y',target.T_OrderSampleSamplingUserID, source.T_OrderSampleSamplingUserID), + + target.T_OrderSampleReceive = if(target.T_OrderSampleReceive='Y',target.T_OrderSampleReceive, source.T_OrderSampleReceive), + target.T_OrderSampleReceiveDate = if(target.T_OrderSampleReceive='Y',target.T_OrderSampleReceiveDate, source.T_OrderSampleReceiveDate), + target.T_OrderSampleReceiveTime = if(target.T_OrderSampleReceive='Y',target.T_OrderSampleReceiveTime, source.T_OrderSampleReceiveTime), + target.T_OrderSampleReceiveUserID = if(target.T_OrderSampleReceive='Y',target.T_OrderSampleReceiveUserID, source.T_OrderSampleReceiveUserID), + + target.T_OrderSampleVerification = if(target.T_OrderSampleVerification='Y',target.T_OrderSampleVerification, source.T_OrderSampleVerification), + target.T_OrderSampleVerificationDate =if(target.T_OrderSampleVerification='Y',target.T_OrderSampleVerificationDate, source.T_OrderSampleVerificationDate), + target.T_OrderSampleVerificationTime =if(source.T_OrderSampleVerification='Y',target.T_OrderSampleVerificationTime, source.T_OrderSampleVerificationTime), + target.T_OrderSampleVerificationUserID =if(source.T_OrderSampleVerification='Y',target.T_OrderSampleVerificationUserID, source.T_OrderSampleVerificationUserID), + + target.T_OrderSampleProcessing = if(target.T_OrderSampleProcessing='Y',target.T_OrderSampleProcessing, source.T_OrderSampleProcessing), + target.T_OrderSampleProcessingDate= if(target.T_OrderSampleProcessing='Y',target.T_OrderSampleProcessingDate, source.T_OrderSampleProcessingDate), + target.T_OrderSampleProcessingTime= if(target.T_OrderSampleProcessing='Y',target.T_OrderSampleProcessingTime, source.T_OrderSampleProcessingTime), + target.T_OrderSampleProcessingUserID= if(target.T_OrderSampleProcessing='Y',target.T_OrderSampleProcessingUserID, source.T_OrderSampleProcessingUserID), + + target.T_OrderSampleReceiveHandling =if(target.T_OrderSampleReceiveHandling='Y',target.T_OrderSampleReceiveHandling, source.T_OrderSampleReceiveHandling ), + target.T_OrderSampleReceiveHandlingDate =if(target.T_OrderSampleReceiveHandling='Y',target.T_OrderSampleReceiveHandlingDate, source.T_OrderSampleReceiveHandlingDate), + target.T_OrderSampleReceiveHandlingTime =if(target.T_OrderSampleReceiveHandling='Y',target.T_OrderSampleReceiveHandlingTime, source.T_OrderSampleReceiveHandlingTime), + target.T_OrderSampleReceiveHandlingUserID =if(target.T_OrderSampleReceiveHandling='Y',target.T_OrderSampleReceiveHandlingUserID, source.T_OrderSampleReceiveHandlingUserID), + + target.T_OrderSampleHandling = if(target.T_OrderSampleHandling='Y',target.T_OrderSampleHandling, source.T_OrderSampleHandling), + target.T_OrderSampleHandlingDate = if(target.T_OrderSampleHandling='Y',target.T_OrderSampleHandlingDate, source.T_OrderSampleHandlingDate), + target.T_OrderSampleHandlingTime = if(target.T_OrderSampleHandling='Y',target.T_OrderSampleHandlingTime, source.T_OrderSampleHandlingTime), + target.T_OrderSampleHandlingUserID = if(target.T_OrderSampleHandling='Y',target.T_OrderSampleHandlingUserID, source.T_OrderSampleHandlingUserID), + + target.T_OrderSampleWorklistReceive = source.T_OrderSampleWorklistReceive, + target.T_OrderSampleWorklistReceiveDatetime = source.T_OrderSampleWorklistReceiveDateTime, + target.T_OrderSampleWorklistReceiveUserID = source.T_OrderSampleWorklistReceiveUserID + "; + $qry = $this->db->query($sql, array($targetID, $sourceID)); + if (!$qry) { + echo json_encode(array("status" => "ERR", "message" => print_r($this->db->error(), true))); + exit; + } + } + function fix_sample_serum($headerID) + { + //cari t_ordersample yg belum worklist receive dengan code 017% + $sql = "select T_OrderSampleID + from t_ordersample + join t_sampletype on + T_OrderSampleT_OrderHeaderID = ? + and T_OrderSampleWorklistReceive = 'N' + and T_OrderSampleIsActive = 'Y' + and T_OrderSampleT_SampleTypeID = T_SampletypeID + and T_SampleTypeCode like '017%' + "; + $qry = $this->db->query($sql, array($headerID)); + if (!$qry) { + echo json_encode(array("status" => "ERR", "message" => print_r($this->db->error(), true))); + exit; + } + $rows = $qry->result_array(); + if (count($rows) == 0) return; + //cari T_OrderSample yang sudah di receive yg terakhir + $sql = "select T_OrderSampleID + from t_ordersample + join t_sampletype on + T_OrderSampleT_OrderHeaderID = ? + and T_OrderSampleWorklistReceive = 'Y' + and T_OrderSampleIsActive = 'Y' + and T_OrderSampleT_SampleTypeID = T_SampletypeID + and T_SampleTypeCode like '017%' + order by T_OrderSampleWorklistReceiveDatetime desc + limit 0,1 + "; + $qry = $this->db->query($sql, array($headerID)); + if (!$qry) { + echo json_encode(array("status" => "ERR", "message" => print_r($this->db->error(), true))); + exit; + } + $rcv_rows = $qry->result_array(); + if (count($rcv_rows) == 0) return; + + //print_r($rows); + //print_r($rcv_rows); + $rcv_T_OrderSampleID = $rcv_rows[0]["T_OrderSampleID"]; + //ada yg belum di receive + foreach ($rows as $r) { + $T_OrderSampleID = $r["T_OrderSampleID"]; + $this->update_order_sample($T_OrderSampleID, $rcv_T_OrderSampleID); + } + } + public function search() + { + $prm = $this->sys_input; + $max_rst = 99; + + $id = $prm["order_id"]; + if ($id > 0) { + $this->fix_sample_serum($id); + $this->fn_fix_normal($id); + } + $lang = $this->lang_default_code; + $lang_id = isset($prm['lang_id']) ? $prm['lang_id'] : '0'; + + if ($lang_id != 0) { + $l = $this->db_smartone->where("Nat_LangID", $lang_id)->get("nat_lang")->row(); + $lang = $l->Nat_LangCode; + } + + // t_order_attachment + $sql_attachment = "select T_OrderAttachmentName, T_OrderAttachmentType, T_OrderAttachmentUrl + from t_order_attachment + join t_orderheader + ON T_OrderAttachmentT_OrderHeaderID = T_OrderHeaderID + AND T_OrderAttachmentIsActive = 'Y' + AND T_OrderHeaderIsActive = 'Y' + AND T_OrderAttachmentT_OrderHeaderID in ( $id )"; + + $qry_attachment = $this->db_smartone->query($sql_attachment); + if (!$qry_attachment) { + $this->db_smartone->trans_rollback(); + $this->sys_error_db("select t_order_attachment ", $this->db_smartone); + exit; + } + + + $extension_lab = "-"; + $extension_non_lab = "-"; + $lab_name = "-"; + $non_lab_name = "-"; + $lab_type = "-"; + $non_lab_type = "-"; + $lab_url = "-"; + $non_lab_url = "-"; + + $row_attachment = $qry_attachment->result_array(); + if (count($row_attachment) > 0) { + foreach ($row_attachment as $key => $value) { + if ($value['T_OrderAttachmentType'] == "NonLab") { + $non_lab_type = $value['T_OrderAttachmentType']; + $non_lab_url = $value['T_OrderAttachmentUrl']; + $non_lab_name = $value['T_OrderAttachmentName']; + $extension = pathinfo(strtolower($non_lab_name), PATHINFO_EXTENSION); + if ($extension === "pdf") { + $extension_non_lab = "pdf"; + } else { + if ($extension === "png" || $extension === "jpg" || $extension === "jpeg") { + $extension_non_lab = "image"; + } + } + } else { + if ($value['T_OrderAttachmentType'] == "Lab") { + $lab_type = $value['T_OrderAttachmentType']; + $lab_url = $value['T_OrderAttachmentUrl']; + $lab_name = $value['T_OrderAttachmentName']; + $extension = pathinfo(strtolower($lab_name), PATHINFO_EXTENSION); + if ($extension === "pdf") { + $extension_lab = "pdf"; + } else { + if ($extension === "png" || $extension === "jpg" || $extension === "jpeg") { + $extension_lab = "image"; + } + } + } + } + } + } else { + $extension_lab = "-"; + $extension_non_lab = "-"; + $lab_name = "-"; + $non_lab_name = "-"; + $lab_type = "-"; + $non_lab_type = "-"; + $lab_url = "-"; + $non_lab_url = "-"; + } + + //tambahan fajri + $sql = " UPDATE t_orderdetail + JOIN t_test ON T_OrderDetailT_TestID = T_TestID + SET T_OrderDetailT_TestIsResult = T_TestIsResult + WHERE + T_OrderDetailT_OrderHeaderID = {$id} AND + T_OrderDetailT_TestIsResult = '' AND + T_OrderDetailIsActive = 'Y'"; + $this->db_smartone->query($sql); + + $tot_count = 0; + $lq = ""; + $group_id = 0; + if (isset($prm['group_id'])) + $group_id = $prm['group_id']; + + if ($group_id != 0) { + $sql = "select distinct T_WorklistDetailNat_TestID Nat_TestID + from t_worklistdetailv2 + where T_WorklistDetailT_WorklistID = {$group_id}"; + $qry = $this->db_smartone->query($sql); + $rows = $qry->result_array(); + $nat_test_ids = "0"; + foreach ($rows as $r) { + $nat_test_ids .= ", " . $r["Nat_TestID"]; + } + $q_group = " ( $nat_test_ids ) "; + + $sql = " + SELECT a1.*, cOUNT(a2.T_OrderDetailID) level + FROM ( + SELECT + IF(y.T_OrderDetailInternalNote IS NULL,'',y.T_OrderDetailInternalNote) as T_OrderDetailInternalNote, + IF(y.T_OrderDetailInternalNote IS NULL,'',y.T_OrderDetailInternalNote) as T_OrderDetailInternalNote_old, + BrnListBarcode, + T_OrderHeaderAddOnBNR, + IFNULL(y.T_OrderDetailT_TestID, x.T_OrderDetailT_TestID) t_testid, + IFNULL(y.T_OrderDetailT_TestName, y.T_OrderDetailT_TestName) t_testname, + y.T_OrderDetailResult result, y.T_OrderDetailResult result_old, + IF(ResultNoteRowValue IS NOT NULL AND y.T_OrderDetailNote IS NULL ,ResultNoteRowValue,y.T_OrderDetailNote) note, + IF(ResultNoteRowValue IS NOT NULL AND y.T_OrderDetailNote IS NULL,ResultNoteRowValue,y.T_OrderDetailNote) note_old, + y.T_OrderDetailID id, + y.T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative, + y.T_OrderDetailResultFlag result_flag, + y.T_OrderDetailNat_NormalValueID normal_id, + y.T_OrderDetailNormalValueNote normal_note, y.T_OrderDetailNat_UnitName unit_name, + y.T_OrderdetailNat_MethodeID methode_id, y.T_OrderdetailNat_MethodeName methode_name, + a.T_TestNat_TestID nattest_id, a.T_TestID tx_id, count(T_ResultInstrumentID) as result_instrument_n, + y.T_OrderDetailVerification, T_OrderSampleReceive sample_receive, + T_OrderSampleProcessing sample_processing, T_OrderSampleWorklistReceive sample_worklist_receive, + IF(T_OrderDetailAddOnPreAnalytic = 'Y', T_OrderDetailAddOnPreAnalytic, PreAnalyticIsOk) pre_analytic, + T_OrderDetailAddOnPreAnalytic, + T_OrderHeaderID order_id, y.T_OrderDetailT_TestSasCode test_sas_code, + tx.T_TestSasCode, + T_OrderDetailAddOnResample `resample`, T_OrderDetailAddOnResampleStatus resample_status, + T_OrderDetailAddOnRef ref, y.T_OrderDetailVerification verification, y.T_OrderDetailValidation validation, + T_OrderPromiseDateTime, Group_ResultName as ResultGroupName + FROM t_orderdetail x + left join t_orderpromise on x.T_OrderDetailT_OrderPromiseID = T_OrderPromiseID + JOIN t_test tx ON x.T_OrderDetailT_TestID = T_TestID + LEFT JOIN result_note_row ON ResultNoteRowNat_TestID = tx.T_TestNat_TestID AND ResultNoteRowIsActive = 'Y' + JOIN t_test tcheck on tcheck.T_TestNat_TestID in {$q_group} + and ( tx.T_TestID = tcheck.T_TestID or tx.T_TestSasCode like concat(tcheck.T_TestSasCode,'%')) + LEFT JOIN group_resultdetail ON Group_ResultDetailT_TestID = x.T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' + LEFT JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' + LEFT JOIN t_orderdetail y ON x.T_OrderDetailT_TestSasCode LIKE CONCAT(y.T_OrderDetailT_TestSasCode, '%') + AND x.T_OrderDetailT_OrderHeaderID = y.T_OrderDetailT_OrderHeaderID + AND y.T_OrderDetailIsActive = 'Y' + LEFT JOIN t_orderdetailaddon ON x.T_OrderDetailID = T_OrderDetailAddOnT_OrderDetailID + JOIN t_orderheader ON y.T_OrderDetailT_OrderHeaderID = T_OrderHeaderID + JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID + left JOIN brn_list ON T_OrderHeaderAddOnBNR = BrnListBarcode + LEFT JOIN t_test a ON y.T_OrderDetailT_TestID = a.T_TestID + AND a.T_TestIsNonLab = '' + LEFT JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive, T_OrderSampleProcessing, T_OrderSampleWorklistReceive + FROM t_ordersample WHERE T_OrderSampleT_OrderHeaderID = {$id} + AND T_OrderSampleIsactive = 'Y' + GROUP BY T_OrderSampleT_SampleTypeID) os ON a.T_TestT_SampleTypeID = os.T_OrderSampleT_SampleTypeID + or os.T_OrderSampleT_SampleTypeID = fn_sampletype_from_local(a.T_TestNat_TestID) + + LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = x.T_OrderDetailID + LEFT JOIN pre_analytic ON PreAnalyticNat_TestID = a.T_TestNat_TestID AND PreAnalyticDate = date(now()) and PreAnalyticIsActive = 'Y' + WHERE x.T_OrderDetailT_OrderHeaderID = {$id} + AND x.T_OrderDetailIsActive = 'Y' + GROUP BY y.T_OrderDetailT_TestID + ORDER BY y.T_OrderDetailT_TestSasCode ASC + ) a1 + + LEFT JOIN t_orderdetail a2 ON a2.T_OrderDetailT_OrderHeaderID = a1.order_id + AND a2.T_OrderDetailIsActive = 'Y' + AND a1.test_sas_code LIKE CONCAT(a2.T_OrderDetailT_testSasCode, '%') + GROUP BY a1.t_testid + order by a1.test_sas_code +"; + $query = $this->db_smartone->query($sql); + $lq = $this->db_smartone->last_query(); + } else { + $sql = " + SELECT a1.*, cOUNT(a2.T_OrderDetailID) level + FROM ( + SELECT + IF(y.T_OrderDetailInternalNote IS NULL,'',y.T_OrderDetailInternalNote) as T_OrderDetailInternalNote, + IF(y.T_OrderDetailInternalNote IS NULL,'',y.T_OrderDetailInternalNote) as T_OrderDetailInternalNote_old, + BrnListBarcode, + T_OrderHeaderAddOnBNR, + IFNULL(y.T_OrderDetailT_TestID, x.T_OrderDetailT_TestID) t_testid, + IFNULL(y.T_OrderDetailT_TestName, y.T_OrderDetailT_TestName) t_testname, + y.T_OrderDetailResult result, y.T_OrderDetailResult result_old, + IF(ResultNoteRowValue IS NOT NULL,ResultNoteRowValue,y.T_OrderDetailNote) note, + IF(ResultNoteRowValue IS NOT NULL,ResultNoteRowValue,y.T_OrderDetailNote) note_old, + y.T_OrderDetailID id, + y.T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative, + y.T_OrderDetailResultFlag result_flag, + y.T_OrderDetailNat_NormalValueID normal_id, + y.T_OrderDetailNormalValueNote normal_note, y.T_OrderDetailNat_UnitName unit_name, + y.T_OrderdetailNat_MethodeID methode_id, y.T_OrderdetailNat_MethodeName methode_name, + a.T_TestNat_TestID nattest_id, a.T_TestID tx_id, count(T_ResultInstrumentID) as result_instrument_n, + y.T_OrderDetailVerification, T_OrderSampleReceive sample_receive, + T_OrderSampleProcessing sample_processing, T_OrderSampleWorklistReceive sample_worklist_receive, + IF(T_OrderDetailAddOnPreAnalytic = 'Y', T_OrderDetailAddOnPreAnalytic, PreAnalyticIsOk) pre_analytic, + T_OrderDetailAddOnPreAnalytic, + T_OrderHeaderID order_id, y.T_OrderDetailT_TestSasCode test_sas_code, + tx.T_TestSasCode, + T_OrderDetailAddOnResample `resample`, T_OrderDetailAddOnResampleStatus resample_status, + T_OrderDetailAddOnRef ref, y.T_OrderDetailVerification verification, y.T_OrderDetailValidation validation, + T_OrderPromiseDateTime , Group_ResultName as ResultGroupName + FROM t_orderdetail x + left join t_orderpromise on x.T_OrderDetailT_OrderPromiseID = T_OrderPromiseID + JOIN t_test tx ON x.T_OrderDetailT_TestID = T_TestID + LEFT JOIN result_note_row ON ResultNoteRowNat_TestID = tx.T_TestNat_TestID AND ResultNoteRowIsActive = 'Y' + LEFT JOIN group_resultdetail ON Group_ResultDetailT_TestID = x.T_OrderDetailT_TestID AND Group_ResultDetailIsActive = 'Y' + LEFT JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND Group_ResultFlagNonLab = 'N' + LEFT JOIN t_orderdetail y ON x.T_OrderDetailT_TestSasCode LIKE CONCAT(y.T_OrderDetailT_TestSasCode, '%') + AND x.T_OrderDetailT_OrderHeaderID = y.T_OrderDetailT_OrderHeaderID + AND y.T_OrderDetailIsActive = 'Y' + + LEFT JOIN t_orderdetailaddon ON x.T_OrderDetailID = T_OrderDetailAddOnT_OrderDetailID + JOIN t_orderheader ON y.T_OrderDetailT_OrderHeaderID = T_OrderHeaderID + JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID + left JOIN brn_list ON T_OrderHeaderAddOnBNR = BrnListBarcode + LEFT JOIN t_test a ON y.T_OrderDetailT_TestID = a.T_TestID + AND a.T_TestIsNonLab = '' + LEFT JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive, T_OrderSampleProcessing, T_OrderSampleWorklistReceive + FROM t_ordersample WHERE T_OrderSampleT_OrderHeaderID = {$id} + AND T_OrderSampleIsactive = 'Y' + GROUP BY T_OrderSampleT_SampleTypeID) os ON a.T_TestT_SampleTypeID = os.T_OrderSampleT_SampleTypeID + or os.T_OrderSampleT_SampleTypeID = fn_sampletype_from_local(a.T_TestNat_TestID) + + LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = x.T_OrderDetailID + LEFT JOIN pre_analytic ON PreAnalyticNat_TestID = a.T_TestNat_TestID AND PreAnalyticDate = date(now()) and PreAnalyticIsActive = 'Y' + WHERE x.T_OrderDetailT_OrderHeaderID = {$id} + AND x.T_OrderDetailIsActive = 'Y' + GROUP BY y.T_OrderDetailT_TestID + ORDER BY y.T_OrderDetailT_TestSasCode ASC + ) a1 + + LEFT JOIN t_orderdetail a2 ON a2.T_OrderDetailT_OrderHeaderID = a1.order_id + AND a2.T_OrderDetailIsActive = 'Y' + AND a1.test_sas_code LIKE CONCAT(a2.T_OrderDetailT_testSasCode, '%') + GROUP BY a1.t_testid + order by a1.test_sas_code +"; + //echo $sql; + $query = $this->db_smartone->query($sql); + $lq = $this->db_smartone->last_query(); + } + // file_put_contents("/xtmp/re-query.sql",$lq); + + if ($query) { + $rst = []; + $rows = $query->result_array(); + + foreach ($rows as $k => $v) { + + if ($v['is_result'] == "Y" && $v['is_quantitative'] == "N") { + $v['template'] = []; + $x = $this->db_smartone->query("CALL sp_master_resulttemplate_get('{$v['t_testid']}')"); + $this->clean_mysqli_connection($this->db_smartone->conn_id); + if ($x) + $v['template'] = $x->result_array(); + } + + // IF Rujukan, by pas Pre Analytik + if ($v['ref'] == 'Y') + $v['pre_analytic'] = 'Y'; + if ($v["id"] == "885455") { + //sipe workaround + //$v["sample_receive"] = "Y"; + $v["sample_worklist_receive"] = "Y"; + } + $rst[] = $v; + } + + $result = array( + "total" => $tot_count, + "records" => $rst, + "total_display" => sizeof($rows), + "q" => $lq, + "attachment" => [ + "extension_lab" => $extension_lab, + "extension_non_lab" => $extension_non_lab, + "lab_name" => $lab_name, + "non_lab_name" => $non_lab_name, + "lab_type" => $lab_type, + "non_lab_type" => $non_lab_type, + "lab_url" => $lab_url, + "non_lab_url" => $non_lab_url, + ] + ); + $this->sys_ok($result); + } else { + $this->sys_error_db("RE Px rows", $this->db_smartone); + exit; + } + } + + public function save() + { + $prm = $this->sys_input; + $data = json_decode($prm["data"]); + $lang = $this->lang_default_code; + $lang_id = isset($prm['lang_id']) ? $prm['lang_id'] : '0'; + + if ($lang_id != 0) { + $l = $this->db_smartone->where("Nat_LangID", $lang_id)->get("nat_lang")->row(); + $lang = $l->Nat_LangCode; + } + + $sql_norm = "select T_OrderDetailMinValue, T_OrderDetailMaxValue, + T_OrderDetailMinValueInclusive, T_OrderDetailMaxValueInclusive, + Nat_TestFlagLow, Nat_TestFlagHigh + from t_orderdetail + join t_test on T_OrderDetailT_TestID = T_TestID + join nat_test on T_TestNat_TestID = Nat_TestID and T_TestIsActive = 'Y' + where T_OrderDetailID = ? "; + + $ids = []; + foreach ($data as $k => $v) { + if ($v->resultInstrumentID > 0) { + $sql_i = "select T_ResultInstrumentNat_NormalValueID normalValueID + from t_resultinstrument + where T_ResultInstrumentID = ?"; + $qry_i = $this->db_smartone->query($sql_i, array($v->resultInstrumentID)); + if ($qry_i) { + $rows_i = $qry_i->result_array(); + + if (count($rows_i) > 0) { + $sql_iu = "update t_orderdetail, nat_normalvalue , nat_methode + set T_OrderDetailMinValue = Nat_NormalValueMinValue, + T_OrderDetailMinValueInclusive = Nat_NormalValueMinValueInclusive, + T_OrderDetailMaxValue = Nat_NormalValueMaxValue , + T_OrderDetailMaxValueInclusive = Nat_NormalValueMaxValueInclusive, + T_OrderDetailNormalValueNote = Nat_NormalValueNote, + T_OrderDetailNormalValueDescription = Nat_NormalValueDescription, + T_OrderDetailNat_NormalValueID = Nat_NormalValueID, + T_OrderDetailNat_MethodeID = Nat_NormalValueNat_MethodeID, + T_OrderDetailNat_MethodeName = Nat_MethodeName + where T_OrderDetailID = ? and Nat_NormalValueID = ? + and Nat_NormalValueNat_MethodeID = Nat_MethodeID + "; + $this->db_smartone->query($sql_iu, array($v->id, $rows_i[0]["normalValueID"])); + //file_put_contents("/xtmp/update-nilai-normal", $this->db_smartone->last_query() . "\n", FILE_APPEND); + } + } + } + $y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$v->order_id}', '{$v->test_id}') c") + ->row(); + $req_status = $y->c; + $qry_norm = $this->db_smartone->query($sql_norm, $v->id); + $result_flag = ""; + if ($qry_norm) { + $rows_norm = $qry_norm->result_array(); + if (count($rows_norm) > 0) { + $r = $rows_norm[0]; + if (is_numeric($v->result)) { + + if ($r["T_OrderDetailMinValueInclusive"] == "Y" && $v->result < $r["T_OrderDetailMinValue"]) { + $result_flag = $r["Nat_TestFlagLow"]; + } + if ($r["T_OrderDetailMinValueInclusive"] == "N" && $v->result <= $r["T_OrderDetailMinValue"]) { + $result_flag = $r["Nat_TestFlagLow"]; + } + if ($r["T_OrderDetailMaxValueInclusive"] == "Y" && $v->result > $r["T_OrderDetailMaxValue"]) { + $result_flag = $r["Nat_TestFlagHigh"]; + } + if ($r["T_OrderDetailMaxValueInclusive"] == "N" && $v->result >= $r["T_OrderDetailMaxValue"]) { + $result_flag = $r["Nat_TestFlagHigh"]; + } + } + } + } + if ($lang == $this->lang_default_code) { + $this->db_smartone->set('T_OrderDetailResult', $v->result) + ->set('T_OrderDetailResultFlag', $result_flag) + ->set('T_OrderDetailNote', $v->note) + ->set('T_OrderDetailInternalNote', $v->T_OrderDetailInternalNote) + ->set('T_OrderDetailReqStatus', $req_status) + ->where('T_OrderDetailID', $v->id) + ->update('t_orderdetail'); + } else { + $this->db_smartone->set('T_OrderDetailLangResult', $v->result) + ->set('T_OrderDetailLangNote', $v->note) + ->set('T_OrderDetailInternalNote', $v->T_OrderDetailInternalNote) + ->where('T_OrderDetailLangID', $v->id) + ->update('t_orderdetaillang'); + } + + $ids[] = $v->id; + } + + // LOG Process + $order = $this->db_smartone->select('T_OrderDetailT_OrderHeaderID id, T_OrderHeaderLabNumber lab_number', false) + ->join('t_orderheader', 'T_OrderHeaderID = T_OrderDetailT_OrderHeaderID') + ->where('T_OrderDetailID', $data[0]->id) + ->get('t_orderdetail') + ->row(); + + $dblog = $this->load->database("onelog", true); + $qry = $dblog->set('Log_ProcessCode', 'PROCESS.Result.Entry') + ->set('Log_ProcessOrderID', $order->id) + ->set('Log_ProcessOrderNumber', $order->lab_number) + ->set('Log_ProcessJson', json_encode($data)) + ->set('Log_ProcessUserID', $this->sys_user['M_UserID']) + ->insert('log_process'); + // END OF Log Process + //auto calculation + $this->load->library("Resultcalc"); + $rows = $this->resultcalc->auto($order->id); + + try { + foreach ($ids as $id) { + $this->db_smartone->query("call sp_set_normal_value_flag($id)"); + $this->clean_mysqli_connection($this->db_smartone->conn_id); + } + } catch (Exception $e) { + } + + $this->sys_ok($ids); + } + + public function save_template() + { + $prm = $this->sys_input; + + $n = $this->db_smartone->select("COUNT(T_ResultTemplateID) n") + ->where("T_ResultTemplateT_TestID", $prm['test_id']) + ->where("T_ResultTemplateIsActive", "Y") + ->where("T_ResultTemplateValue", $prm['value']) + ->get('t_resulttemplate') + ->row(); + if ($n->n > 0) { + $this->sys_error_db("Insert Result Template", $this->db_smartone); + return; + } + + $r = $this->db_smartone->set("T_ResultTemplateT_TestID", $prm['test_id']) + ->set("T_ResultTemplateValue", $prm['value']) + ->insert('t_resulttemplate'); + if ($r) { + $template = []; + $x = $this->db_smartone->query("CALL sp_master_resulttemplate_get('{$prm['test_id']}')"); + $this->clean_mysqli_connection($this->db_smartone->conn_id); + if ($x) + $template = $x->result_array(); + + $this->sys_ok($template); + } + } + + public function export() + { + $prm = $this->sys_input; + + $sql = "CALL sp_process_result_lang(?, ?, ?, ?)"; + $query = $this->db_smartone->query($sql, [$prm['order_id'], $prm['lang_id'], $prm['is_si'], $this->sys_user['M_UserID']]); + if ($query) { + $r = $query->row(); + if ($r->status == "OK") { + $this->sys_ok($r->data); + return; + } + + $this->sys_error_db("Message : " . $r->message, $this->db_smartone); + } else { + $this->sys_error_db("Lang Result", $this->db_smartone); + return; + } + } + + public function search_group() + { + $prm = $this->sys_input; + $max_rst = 100; + + // QUERY TOTAL + $sql = "select count(*) total + from t_worklist + where T_WorklistIsActive = 'Y' + order by T_WorklistName ASC"; + $query = $this->db_smartone->query($sql); + + if ($query) { + $tot_count = $query->result_array()[0]["total"]; + } else { + $this->sys_error_db("worklist count", $this->db_smartone); + exit; + } + + $sql = "select T_WorklistID group_id, T_WorklistName group_name + from t_worklist + where T_WorklistIsActive = 'Y' + order by T_WorklistName ASC + limit 0, {$max_rst}"; + $query = $this->db_smartone->query($sql); + + if ($query) { + $rows = $query->result_array(); + foreach ($rows as $k => $v) + $rows[$k]['data'] = json_decode($v['data']); + $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query()); + $this->sys_ok($result); + } else { + $this->sys_error_db("worklist rows", $this->db_smartone); + exit; + } + } + + public function search_rerun() + { + $prm = $this->sys_input; + $id = $prm["detail_id"]; + + $sql = "CALL sp_process_result_rerun(?)"; + $query = $this->db_smartone->query($sql, [$id]); + + if ($query) { + $rows = $query->result_array(); + $this->sys_ok(["records" => $rows]); + } else { + $this->sys_error_db("Rerun rows", $this->db_smartone); + exit; + } + } + + + + function getdoctorsfna() + { + $prm = $this->sys_input; + // $id = $prm["id"]; + + $sql = " SELECT M_DoctorID as id, CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as name + FROM m_doctorso + JOIN m_doctor ON M_DoctorSOM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + M_DoctorSONat_SubGroupID = 9 AND + M_DoctorSOIsActive = 'Y' + ORDER BY M_DoctorName ASC"; + //echo $sql; + $query = $this->db_smartone->query($sql); + + if ($query) { + $rows = $query->result_array(); + $this->sys_ok(["records" => $rows]); + } else { + $this->sys_error_db("Rerun rows", $this->db_smartone); + exit; + } + } + + function getfnaresult() + { + $prm = $this->sys_input; + $id = $prm["id"]; + + $sql = " SELECT Other_FNADetailsID as xid, + Other_FNAT_OrderDetailID as orderdetail_id, + Other_FNADetailsCode as code, + Other_FNADetailsLabel as label, + Other_FNADetailsResult as result, + IFNULL(Other_FNAM_DoctorID,0) as doctor_id, + IF(ISNULL(Other_FNAM_DoctorID) OR Other_FNAM_DoctorID = 0 ,'0', CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3)) as doctor_name + FROM other_fna + JOIN other_fnadetails ON Other_FNADetailsOther_FNAID = Other_FNAID AND Other_FNADetailsIsActive = 'Y' + LEFT JOIN m_doctor ON Other_FNAM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + Other_FNAT_OrderDetailID = {$id} AND Other_FNAIsActive = 'Y' + GROUP BY Other_FNADetailsID + ORDER BY Other_FNADetailsCode ASC"; + $query = $this->db_smartone->query($sql); + + if ($query) { + $rows = $query->result_array(); + $sql = " + SELECT '0' as id, 'Belum memilih dokter' as name + UNION + SELECT M_DoctorID as id, CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as name + FROM m_doctorso + JOIN m_doctor ON M_DoctorSOM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + M_DoctorSONat_SubGroupID = 9 AND + M_DoctorSOIsActive = 'Y' + ORDER BY name ASC"; + //echo $sql; + $doctors = $this->db_smartone->query($sql)->result_array(); + $images = array(); + $sql = "SELECT So_ImageUploadID as xid, + CONCAT('/one-media/one-image-nonlab/',So_ImageUploadNewName) as image_url + FROM t_orderdetail + JOIN so_imageupload ON So_ImageUploadT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND + So_ImageUploadIsActive = 'Y' + WHERE + T_OrderDetailID = {$id} AND + T_OrderDetailIsActive = 'Y' + GROUP BY So_ImageUploadID"; + $images = $this->db_smartone->query($sql)->result_array(); + + $rst = array('doctors' => $doctors, 'results' => $rows, 'images' => $images); + $this->sys_ok(["records" => $rst]); + } else { + $this->sys_error_db("Rerun rows", $this->db_smartone); + exit; + } + } + + + function uploadimage() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $userid = $this->sys_user["M_UserID"]; + $data = []; + //print_r($_SERVER); + + $prm = $this->sys_input; + $orderid = $this->input->post('orderid'); + $labnumber = $this->input->post('labnumber'); + $sql = "UPDATE so_imageupload SET + So_ImageUploadIsActive = 'N', + So_ImageUploadUserID = {$userid} + WHERE + So_ImageUploadT_OrderHeaderID = {$orderid}"; + //echo $sql; + $this->db_onedev->query($sql); + //$config['upload_path'] = 'assets/'; + + $path = '/home/one/project/one/one-media/one-image-nonlab/'; + //echo $path; + $config['upload_path'] = $path; + $config['allowed_types'] = 'jpg|jpeg|png|gif'; + + $config['max_size'] = '10000'; + $count = count($_FILES['files']['name']); + //echo $count; + $this->load->library('upload', $config); + + $error = []; + for ($i = 0; $i < $count; $i++) { + + + if (!empty($_FILES['files']['name'][$i])) { + + + + $_FILES['file']['name'] = $_FILES['files']['name'][$i]; + + $_FILES['file']['type'] = $_FILES['files']['type'][$i]; + + $_FILES['file']['tmp_name'] = $_FILES['files']['tmp_name'][$i]; + + $_FILES['file']['error'] = $_FILES['files']['error'][$i]; + + $_FILES['file']['size'] = $_FILES['files']['size'][$i]; + + + + $namex = $orderid . '-' . $labnumber . '-' . $this->generateRandomString(5); + //echo $namex; + + $config['file_name'] = $namex; + $this->upload->initialize($config); + //echo $config['file_name'] ; + + + + + + if ($this->upload->do_upload('file')) { + + $uploadData = $this->upload->data(); + + $filename = $uploadData['file_name']; + //echo $filename; + + + $sql = "INSERT INTO so_imageupload ( + So_ImageUploadT_OrderHeaderID, + So_ImageUploadT_OrderHeaderLabNumber, + So_ImageUploadT_SampleTypeID, + So_ImageUploadOldName, + So_ImageUploadNewName, + So_ImageUploadCreated, + So_ImageUploadUserID + ) + VALUES( + {$orderid}, + '{$labnumber}', + '150', + '{$_FILES['files']['name'][$i]}', + '{$filename}', + NOW(), + {$userid} + + )"; + //echo $sql; + $this->db_onedev->query($sql); + $xlast_id = $this->db_onedev->insert_id(); + $data['totalFiles'][] = array('xid' => $xlast_id, 'image_url' => '/one-media/one-image-nonlab/' . $filename); + } else { + $error = array('error' => $this->upload->display_errors()); + } + } + } + + $result = array("total" => count($data['totalFiles']), "records" => $data['totalFiles'], 'errors' => $error); + $this->sys_ok($result); + } + + + function generateRandomString($length = 10) + { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $charactersLength = strlen($characters); + $randomString = ''; + for ($i = 0; $i < $length; $i++) { + $randomString .= $characters[rand(0, $charactersLength - 1)]; + } + return $randomString; + } + + function getcytologiresult() + { + $prm = $this->sys_input; + $id = $prm["id"]; + + $sql = " SELECT Other_CytologiDetailsID as xid, + Other_CytologiT_OrderDetailID as orderdetail_id, + Other_CytologiDetailsCode as code, + Other_CytologiDetailsLabel as label, + Other_CytologiDetailsResult as result, + IFNULL(Other_CytologiM_DoctorID,0) as doctor_id, + IF(ISNULL(Other_CytologiM_DoctorID) OR Other_CytologiM_DoctorID = 0 ,'0', CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3)) as doctor_name + FROM other_cytologi + JOIN other_cytologidetails ON Other_CytologiDetailsOther_CytologiID = Other_CytologiID AND Other_CytologiDetailsIsActive = 'Y' + LEFT JOIN m_doctor ON Other_CytologiM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + Other_CytologiT_OrderDetailID = {$id} AND Other_CytologiIsActive = 'Y' + GROUP BY Other_CytologiDetailsID + ORDER BY Other_CytologiDetailsCode ASC"; + //echo $sql; + $query = $this->db_smartone->query($sql); + + if ($query) { + $rows = $query->result_array(); + $sql = " + SELECT '0' as id, 'Belum memilih dokter' as name + UNION + SELECT M_DoctorID as id, CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as name + FROM m_doctorso + JOIN m_doctor ON M_DoctorSOM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + M_DoctorSONat_SubGroupID = 9 AND + M_DoctorSOIsActive = 'Y' + ORDER BY name ASC"; + //echo $sql; + $doctors = $this->db_smartone->query($sql)->result_array(); + $rst = array('doctors' => $doctors, 'results' => $rows); + $this->sys_ok(["records" => $rst]); + } else { + $this->sys_error_db("Rerun rows", $this->db_smartone); + exit; + } + } + + function getmikroresult() + { + $prm = $this->sys_input; + $id = $prm["id"]; + + $sql = " SELECT + Other_MikroID as xid, + Other_MikroHasilBiakan as hasil_biakan, + Other_MikroSampleTypeName as sample_name, + Other_MikroFlagKonvensional as iskonvensional, + Other_MikroT_OrderDetailID as orderdetail_id, + Other_MikroResult as result_value, + '' as result_other, + IFNULL(T_BacteriaID,0) as T_BacteriaID, + IFNULL(T_BacteriaName,'') as T_BacteriaName, + IFNULL(T_BacteriaFlagKonvensional,'') as is_manual, + '' as details, + IFNULL(Other_MikroM_DoctorID,0) as doctor_id, + IF(ISNULL(Other_MikroM_DoctorID) OR Other_MikroM_DoctorID = 0 ,'0', CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3)) as doctor_name + FROM other_mikro + LEFT JOIN t_bacteria ON Other_MikroT_BacteriaID = T_BacteriaID + LEFT JOIN m_doctor ON Other_MikroM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + Other_MikroT_OrderDetailID = {$id} AND Other_MikroIsActive = 'Y' + GROUP BY Other_MikroID"; + //echo $sql; + $query = $this->db_smartone->query($sql); + + if ($query) + { + $row = $query->row_array(); + if($row){ + if($row['result_value'] != 'Positif' && $row['result_value'] != 'Negatif'){ + $row['result_other'] = $row['result_value']; + $row['result_value'] = 'other'; + } + $sql = "SELECT '' as xno, + Other_MikroDetailsID as xid, + Other_MikroDetailsValue as value, + IF(Other_MikroDetailsNote = 'R','Y','N') as chx_r, + IF(Other_MikroDetailsNote = 'I','Y','N') as chx_i, + IF(Other_MikroDetailsNote = 'S','Y','N') as chx_s, + Other_MikroDetailsNote as note, + T_AntibioticIsParent as is_parent, + t_antibiotic.* + FROM other_mikrodetails + JOIN t_antibiotic ON Other_MikroDetailsT_AntibioticID = T_AntibioticID AND T_AntibioticIsParent = 'Y' + WHERE + Other_MikroDetailsOther_MikroID = {$row['xid']} AND Other_MikroDetailsIsActive = 'Y' + GROUP BY Other_MikroDetailsID + ORDER BY T_AntibioticName ASC"; + //echo $sql; + $details = $this->db_smartone->query($sql)->result_array(); + $antibitics = array(); + if($details){ + foreach($details as $k => $v){ + //$rows[$k]['xno'] = $k + 1; + array_push($antibitics,$v); + $sql = "SELECT '' as xno, + Other_MikroDetailsID as xid, + Other_MikroDetailsValue as value, + IF(Other_MikroDetailsNote = 'R','Y','N') as chx_r, + IF(Other_MikroDetailsNote = 'I','Y','N') as chx_i, + IF(Other_MikroDetailsNote = 'S','Y','N') as chx_s, + Other_MikroDetailsNote as note, + T_AntibioticIsParent as is_parent, + t_antibiotic.* + FROM other_mikrodetails + JOIN t_antibiotic ON Other_MikroDetailsT_AntibioticID = T_AntibioticID AND T_AntibioticIsParent = 'N' AND T_AntibioticParentID = {$v['T_AntibioticID']} + WHERE + Other_MikroDetailsOther_MikroID = {$row['xid']} AND Other_MikroDetailsIsActive = 'Y' + GROUP BY Other_MikroDetailsID + ORDER BY T_AntibioticName ASC"; + //echo $sql; + $rows_details = $this->db_smartone->query($sql)->result_array(); + if($rows_details){ + foreach($rows_details as $key => $value){ + array_push($antibitics,$value); + } + } + + foreach($antibitics as $i => $j){ + $antibitics[$i]['xno'] = $i + 1; + } + } + } + $row['details'] = $antibitics; + } + else{ + $row = array('xid'=>'0','hasil_biakan' => '','result_value'=>'Negatif','sample_name' => '','orderdetail_id'=>$id, 'T_BacteriaID'=>'0','T_BacteriaName'=>'0','details'=>array(),'doctor_id'=>'0','doctor_name'=>'0'); + } + } + else{ + $row = array('xid'=>'0','hasil_biakan' => '','result_value'=>'Negatif','sample_name' => '','orderdetail_id'=>$id, 'T_BacteriaID'=>'0','T_BacteriaName'=>'0','details'=>array(),'doctor_id'=>'0','doctor_name'=>'0'); + } + //print_r($row); + + + + $sql = " + SELECT '0' as id, 'Belum memilih dokter' as name + UNION + SELECT M_DoctorID as id, CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as name + FROM m_doctorso + JOIN m_doctor ON M_DoctorSOM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + M_DoctorSONat_SubGroupID = 7 AND + M_DoctorSOIsActive = 'Y' + ORDER BY name ASC"; + //echo $sql; + $doctors = $this->db_smartone->query($sql)->result_array(); + $sql = " + SELECT '0' as id, 'Belum memilih bakteria' as name, 'Y' as is_manual + UNION + SELECT T_BacteriaID as id, T_BacteriaName as name, T_BacteriaFlagKonvensional as is_manual + FROM t_bacteria + WHERE + T_BacteriaIsActive = 'Y' AND T_BacteriaFlagKonvensional = '{$row['iskonvensional']}' + ORDER BY is_manual DESC, name ASC"; + //echo $sql; + $bacteries = $this->db_smartone->query($sql)->result_array(); + $rst = array('doctors'=>$doctors,'bacteries'=>$bacteries,'results'=>$row); + $this->sys_ok(["records"=>$rst]); + } + + function getantibiotics() + { + $prm = $this->sys_input; + $id = $prm["id"]; + $sql = " SELECT '' as xno, + 0 as xid, + '' as hasil_biakan, + '' as sample_name, + 0 as value, + 'Y' as chx_r, + 'N' as chx_i, + 'N' as chx_s, + 'R' as note, + t_antibiotic.* + FROM t_antibiotic + WHERE + T_AntibioticT_BacteriaID = {$prm['id']} AND T_AntibioticIsActive= 'Y' + ORDER BY T_AntibioticName ASC"; + //echo $sql; + $rows = $this->db_smartone->query($sql)->result_array(); + if (rows) { + foreach ($rows as $k => $v) { + $rows[$k]['xno'] = $k + 1; + } + } + + $this->sys_ok(["records" => $rows]); + } + + function getbackteries(){ + $prm = $this->sys_input; + $iskonvensional = $prm["iskonvensional"]?'Y':'N'; + $sql = " + SELECT '0' as id, 'Belum memilih bakteria' as name, 'Y' as is_manual + UNION + SELECT T_BacteriaID as id, T_BacteriaName as name, T_BacteriaFlagKonvensional as is_manual + FROM t_bacteria + WHERE + T_BacteriaIsActive = 'Y' AND T_BacteriaFlagKonvensional = '{$iskonvensional}' + ORDER BY is_manual DESC, name ASC"; + //echo $sql; + $bacteries = $this->db_smartone->query($sql)->result_array(); + $this->sys_ok(["records"=>$bacteries]); + } + + function getlcprepresult() + { + $prm = $this->sys_input; + $id = $prm["id"]; + $sql = " SELECT Other_LcprepDetailsID as xid, + Other_LcprepID as header_id, + Other_LcprepT_orderDetailID as orderdetail_id, + Other_LcprepDetailsCode as code, + Other_LcprepDetailsLabel as label, + Other_LcprepDetailsResult as result, + IFNULL(Other_LcprepM_DoctorID,0) as doctor_id, + IF(ISNULL(Other_LcprepM_DoctorID) OR Other_LcprepM_DoctorID = 0 ,'0', CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3)) as doctor_name + FROM other_lcprep + JOIN other_lcprepdetails ON Other_LcprepDetailsOther_LcprepID = Other_LcprepID AND Other_LcprepDetailsIsActive = 'Y' + LEFT JOIN m_doctor ON Other_LcprepM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + Other_LcprepT_orderDetailID = {$id} AND Other_LcprepIsActive = 'Y' + GROUP BY Other_LcprepDetailsOther_LcprepID, Other_LcprepDetailsCode + ORDER BY Other_LcprepDetailsCode ASC"; + //echo $sql; + $rows = $this->db_smartone->query($sql)->result_array(); + if (!$rows) { + $rows = array( + array( + 'xid' => '0', + 'header_id' => '0', + 'orderdetail_id' => $id, + 'code' => 'A', + 'label' => 'DESKRIPSI', + 'result' => '', + 'doctor_id' => '0', + 'doctor_name' => '' + ), + array( + 'xid' => '0', + 'header_id' => '0', + 'orderdetail_id' => $id, + 'code' => 'B', + 'label' => 'KESIMPULAN', + 'result' => '', + 'doctor_id' => '0', + 'doctor_name' => '' + ) + ); + } + + $header_id = $rows[0]['header_id']; + $sql = "SELECT IFNULL(Other_LcprepAdekuasiID,0) as xid, + Lcprep_AdekuasiID as id, + Lcprep_AdekuasiLabel as name, + IF(ISNULL(Other_LcprepAdekuasiID),'N',Other_LcprepAdekuasiChex) as chex + FROM lcprep_adekuasi + LEFT JOIN other_lcprepadekuasi ON Other_LcprepAdekuasiLcprep_AdekuasiID = Lcprep_AdekuasiID AND + Other_LcprepAdekuasiOther_LcprepID = {$header_id} AND + Other_LcprepAdekuasiIsActive = 'Y' + WHERE + Lcprep_AdekuasiIsActive = 'Y' + GROUP BY Lcprep_AdekuasiID + ORDER BY Lcprep_AdekuasiOrder ASC + "; + //echo $sql; + $adeakuasi = $this->db_smartone->query($sql)->result_array(); + foreach ($adeakuasi as $kc => $vc) { + $adeakuasi[$kc]['chex'] = $vc['chex'] == 'N' ? false : true; + } + + $sql = "SELECT IFNULL(Other_LcprepKategoriUmumID,0) as xid, + Lcprep_KategoriUmumID as id, + Lcprep_KategoriUmumLabel as name, + IF(ISNULL(Other_LcprepKategoriUmumID),'N',Other_LcprepKategoriUmumChex) as chex + FROM lcprep_kategoriumum + LEFT JOIN other_lcprepkategoriumum ON Other_LcprepKategoriUmumLcprep_KategoriUmumID = Lcprep_KategoriUmumID AND + Other_LcprepKategoriUmumOther_LcprepID = {$header_id} AND + Other_LcprepKategoriUmumIsActive = 'Y' + WHERE + Lcprep_KategoriUmumIsActive = 'Y' + GROUP BY Lcprep_KategoriUmumID + "; + //echo $sql; + $kategoriumum = $this->db_smartone->query($sql)->result_array(); + foreach ($kategoriumum as $kc => $vc) { + $kategoriumum[$kc]['chex'] = $vc['chex'] == 'N' ? false : true; + } + + $sql = " + SELECT Lcprep_InterpretasiGroupID as group_id, + Lcprep_InterpretasiGroupName as group_name, + '' as subgroups + FROM lcprep_interpretasigroup + WHERE + Lcprep_InterpretasiGroupIsActive = 'Y' + "; + //echo $sql; + $interpretasi = $this->db_smartone->query($sql)->result_array(); + foreach ($interpretasi as $k => $v) { + $subgroups = array(); + $sql = "SELECT Lcprep_InterpretasiSubgroupID as subgroup_id, + Lcprep_InterpretasiSubgroupName as subgroup_name, + '' as childs + FROM lcprep_interpretasisubgroup + WHERE + Lcprep_InterpretasiSubgroupLcprep_InterpretasiGroupID = {$v['group_id']} AND Lcprep_InterpretasiSubgroupIsActive = 'Y'"; + //echo $sql; + $subgroups = $this->db_smartone->query($sql)->result_array(); + if (count($subgroups) > 0) { + foreach ($subgroups as $ki => $vi) { + $childs = array(); + $sql = "SELECT IFNULL(Other_LcprepInterpretasiID,0) as xid, + IFNULL(Other_LcprepInterpretasiChex,'N') as chex, + IFNULL(Other_LcprepInterpretasiValue,'') as value, + Lcprep_InterpretasiID as id, + Lcprep_InterpretasiLcprep_InterpretasiSubgroupID as subgroup_id, + Lcprep_InterpretasiCode as code, + Lcprep_InterpretasiName as name, + Lcprep_InterpretasiParentID as parent_id, + Lcprep_InterpretasiIsParent as is_parent, + Lcprep_InterpretasiHasResult as has_result, + Lcprep_InterpretasiTypeResult as type_result + FROM lcprep_interpretasi + LEFT JOIN other_lcprepinterpretasi ON Other_LcprepInterpretasiOther_LcprepID = {$header_id} AND + Other_LcprepInterpretasiLcprep_InterpretasiID = Lcprep_InterpretasiID AND + Other_LcprepInterpretasiIsActive = 'Y' + WHERE + Lcprep_InterpretasiLcprep_InterpretasiSubgroupID = {$vi['subgroup_id']} AND Lcprep_InterpretasiIsActive = 'Y' + GROUP BY Lcprep_InterpretasiID"; + $childs = $this->db_smartone->query($sql)->result_array(); + if ($childs) { + foreach ($childs as $kc => $vc) { + $childs[$kc]['chex'] = $vc['chex'] == 'N' ? false : true; + } + } + $subgroups[$ki]['childs'] = $childs; + } + } + + $interpretasi[$k]['subgroups'] = $subgroups; + } + + $sql = " + SELECT '0' as id, 'Belum memilih dokter' as name + UNION + SELECT M_DoctorID as id, CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as name + FROM m_doctorso + JOIN m_doctor ON M_DoctorSOM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + M_DoctorSONat_SubGroupID = 9 AND + M_DoctorSOIsActive = 'Y' + ORDER BY name ASC"; + //echo $sql; + $doctors = $this->db_smartone->query($sql)->result_array(); + $rst = array('doctors' => $doctors, 'results' => $rows, 'adekuasi' => $adeakuasi, 'kategoriumum' => $kategoriumum, 'interpretasi' => $interpretasi); + $this->sys_ok(["records" => $rst]); + } + + function getpapsmearresult() + { + $prm = $this->sys_input; + $id = $prm["id"]; + + $sql = " SELECT Other_PapSmearDetailsID as xid, + Other_PapSmearID as header_id, + Other_PapSmearT_OrderDetailID as orderdetail_id, + Other_PapSmearDetailsCode as code, + Other_PapSmearDetailsLabel as label, + Other_PapSmearDetailsResult as result, + IFNULL(Other_PapSmearM_DoctorID,0) as doctor_id, + IF(ISNULL(Other_PapSmearM_DoctorID) OR Other_PapSmearM_DoctorID = 0 ,'0', CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3)) as doctor_name + FROM other_papsmear + JOIN other_papsmeardetails ON Other_PapSmearDetailsOther_PapSmearID = Other_PapSmearID AND Other_PapSmearDetailsIsActive = 'Y' + LEFT JOIN m_doctor ON Other_PapSmearM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + Other_PapSmearT_OrderDetailID = {$id} AND Other_PapSmearIsActive = 'Y' + GROUP BY Other_PapSmearDetailsID + ORDER BY Other_PapSmearDetailsCode ASC"; + //echo $sql; + $rows = $this->db_smartone->query($sql)->result_array(); + if (!$rows) { + $rows = array( + array( + 'xid' => '0', + 'header_id' => '0', + 'orderdetail_id' => $id, + 'code' => 'A', + 'label' => 'Makroskopik', + 'result' => '', + 'doctor_id' => '0', + 'doctor_name' => '' + ), + array( + 'xid' => '0', + 'header_id' => '0', + 'orderdetail_id' => $id, + 'code' => 'B', + 'label' => 'Mikroskopik', + 'result' => '', + 'doctor_id' => '0', + 'doctor_name' => '' + ), + array( + 'xid' => '0', + 'header_id' => '0', + 'orderdetail_id' => $id, + 'code' => 'C', + 'label' => 'Kesimpulan', + 'result' => '', + 'doctor_id' => '0', + 'doctor_name' => '' + ) + ); + } + + $header_id = $rows[0]['header_id']; + $sql = "SELECT Other_PapSmearMaturasiID as xid, + Other_PapSmearMaturasiValue as value + FROM other_papsmearmaturasi + WHERE + Other_PapSmearMaturasiOther_PapSmearID = {$header_id} AND + Other_PapSmearMaturasiIsActive = 'Y' + "; + //echo $sql; + $dt_maturasi = $this->db_smartone->query($sql)->row_array(); + if (!$dt_maturasi) { + $maturasi = array('xid' => '0', 'value' => array('', '', '')); + } else { + $value = explode('/', $dt_maturasi['value']); + $maturasi = array('xid' => $dt_maturasi['xid'], 'value' => $value); + } + + $sql = "SELECT IFNULL(Other_PapSmearBahanID,0) as xid, + M_PapSmearBahanID as bahan_id, + M_PapSmearBahanName as name, + IF(ISNULL(Other_PapSmearBahanID),'N','Y') as selected + FROM m_papsmearbahan + LEFT JOIN other_papsmearbahan ON Other_PapSmearBahanM_PapSmearBahanID = M_PapSmearBahanID AND + Other_PapSmearBahanOther_PapSmearID = {$header_id} AND + Other_PapSmearBahanIsActive = 'Y' + WHERE + M_PapSmearBahanIsActive = 'Y' + ORDER BY M_PapSmearBahanID ASC + "; + //echo $sql; + $bahans = $this->db_smartone->query($sql)->result_array(); + + $sql = "SELECT IFNULL(Other_PapsmearCategoryID,0) as xid, + M_PapSmearCategoryID as category_id, + M_PapSmearCategoryName as name, + IF(ISNULL(Other_PapsmearCategoryID),'N','Y') as selected + FROM m_papsmearcategory + LEFT JOIN other_papsmearcategory ON Other_PapsmearCategoryM_PapSmearCategoryID = M_PapSmearCategoryID AND + Other_PapsmearCategoryOther_PapSmearID = {$header_id} AND + Other_PapsmearCategoryIsActive = 'Y' + WHERE + M_PapSmearCategoryIsActive = 'Y' + ORDER BY M_PapSmearCategoryID ASC + "; + //echo $sql; + $categories = $this->db_smartone->query($sql)->result_array(); + + $sql = "SELECT IFNULL(Other_PapSmearCheckID,0) as xid, + M_PapSmearCheckID as check_id, + M_PapSmearCheckLabel as name, + IF(ISNULL(Other_PapSmearCheckID),'N','Y') as selected, + Other_PapSmearCheckNote as note + FROM m_papsmearcheck + LEFT JOIN other_papsmearcheck ON Other_PapSmearCheckM_PapSmearCheckID = M_PapSmearCheckID AND + Other_PapSmearCheckOther_PapSmearID = {$header_id} AND + Other_PapSmearCheckIsActive = 'Y' + WHERE + M_PapSmearCheckIsActive = 'Y' + ORDER BY M_PapSmearCheckCode ASC + "; + $checks = $this->db_smartone->query($sql)->result_array(); + + $sql = " + SELECT '0' as id, 'Belum memilih dokter' as name + UNION + SELECT M_DoctorID as id, CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as name + FROM m_doctorso + JOIN m_doctor ON M_DoctorSOM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + M_DoctorSONat_SubGroupID = 9 AND + M_DoctorSOIsActive = 'Y' + ORDER BY name ASC"; + //echo $sql; + $doctors = $this->db_smartone->query($sql)->result_array(); + $rst = array('doctors' => $doctors, 'checks' => $checks, 'bahans' => $bahans, 'categories' => $categories, 'maturasi' => $maturasi, 'results' => $rows); + $this->sys_ok(["records" => $rst]); + } + + function saveresult_lcprep() + { + $prm = $this->sys_input; + $detail_id = $prm['detail_id']; + $doctor_id = $prm['doctor']; + $adekuasi = $prm['adekuasi']; + $kategoriumum = $prm['kategoriumum']; + $interpretasi = $prm['interpretasi']; + $results = $prm['results']; + + $userid = $this->sys_user['M_UserID']; + + $header_id = 0; + $sql = "SELECT * FROM other_lcprep WHERE Other_LcprepT_orderDetailID = {$detail_id} AND Other_LcprepIsActive = 'Y'"; + $dt_header = $this->db_smartone->query($sql)->row_array(); + if ($dt_header) { + $header_id = $dt_header['Other_LcprepID']; + } + if ($header_id == 0) { + $sql = "INSERT INTO other_lcprep( + Other_LcprepT_orderDetailID, + Other_LcprepM_DoctorID, + Other_LcprepUserID, + Other_LcprepCreated + ) + VALUES( + {$detail_id}, + {$doctor_id}, + {$userid}, + NOW() + )"; + //echo $sql; + $this->db_smartone->query($sql); + $header_id = $this->db_smartone->insert_id(); + } else { + $sql = "UPDATE other_lcprep SET Other_LcprepM_DoctorID = {$doctor_id}, Other_LcprepUserID = {$userid} WHERE Other_LcprepID = {$header_id}"; + $this->db_smartone->query($sql); + } + + if ($adekuasi) { + foreach ($adekuasi as $k => $v) { + $selected = $v['chex'] ? 'Y' : 'N'; + if (intval($v['xid'] == 0)) { + $sql = "UPDATE other_lcprepadekuasi SET Other_LcprepAdekuasiIsActive = 'N' + WHERE + Other_LcprepAdekuasiOther_LcprepID = {$header_id} AND + Other_LcprepAdekuasiIsActive = 'Y' AND + Other_LcprepAdekuasiLcprep_AdekuasiID = {$v['id']}"; + $this->db_smartone->query($sql); + $sql = "INSERT INTO other_lcprepadekuasi ( + Other_LcprepAdekuasiOther_LcprepID, + Other_LcprepAdekuasiLcprep_AdekuasiID, + Other_LcprepAdekuasiChex, + Other_LcprepAdekuasiUserID, + Other_LcprepAdekuasiCreated + ) + VALUES( + {$header_id}, + {$v['id']}, + '{$selected}', + {$userid}, + NOW() + )"; + $this->db_smartone->query($sql); + //echo $sql; + } + if (intval($v['xid'] != 0)) { + + $sql = "UPDATE other_lcprepadekuasi SET + Other_LcprepAdekuasiChex = '{$selected}', + Other_LcprepAdekuasiUserID = {$userid} + WHERE + Other_LcprepAdekuasiID = {$v['xid']}"; + $this->db_smartone->query($sql); + } + + //echo $sql; + } + } + + if ($kategoriumum) { + foreach ($kategoriumum as $k => $v) { + $selected = $v['chex'] ? 'Y' : 'N'; + if (intval($v['xid'] == 0)) { + $sql = "UPDATE other_lcprepkategoriumum SET Other_LcprepKategoriUmumIsActive = 'N' + WHERE + Other_LcprepKategoriUmumOther_LcprepID = {$header_id} AND + Other_LcprepKategoriUmumLcprep_KategoriUmumID = {$v['id']} AND + Other_LcprepKategoriUmumIsActive = 'Y' + "; + $this->db_smartone->query($sql); + $sql = "INSERT INTO other_lcprepkategoriumum ( + Other_LcprepKategoriUmumOther_LcprepID, + Other_LcprepKategoriUmumLcprep_KategoriUmumID, + Other_LcprepKategoriUmumChex, + Other_LcprepKategoriUmumUserID, + Other_LcprepKategoriUmumCreated + ) + VALUES( + {$header_id}, + {$v['id']}, + '{$selected}', + {$userid}, + NOW() + )"; + $this->db_smartone->query($sql); + } + if (intval($v['xid'] != 0)) { + $sql = "UPDATE other_lcprepkategoriumum SET + Other_LcprepKategoriUmumChex = '{$selected}', + Other_LcprepKategoriUmumUserID = {$userid} + WHERE + Other_LcprepKategoriUmumID = {$v['xid']}"; + $this->db_smartone->query($sql); + } + + //echo $sql; + } + } + + if ($results) { + foreach ($results as $k => $v) { + if (intval($v['xid'] == 0)) { + $sql = "UPDATE other_lcprepdetails SET Other_LcprepDetailsIsActive = 'N' + WHERE + Other_LcprepDetailsOther_LcprepID = {$header_id} AND + Other_LcprepDetailsCode = '{$v['code']}' AND + Other_LcprepDetailsIsActive = 'Y'"; + $this->db_smartone->query($sql); + $sql = "INSERT INTO other_lcprepdetails ( + Other_LcprepDetailsOther_LcprepID, + Other_LcprepDetailsCode, + Other_LcprepDetailsLabel, + Other_LcprepDetailsResult, + Other_LcprepDetailsUserID, + Other_LcprepDetailsCreated + ) + VALUES( + {$header_id}, + '{$v['code']}', + '{$v['label']}', + '{$v['result']}', + {$userid}, + NOW() + )"; + $this->db_smartone->query($sql); + } + if (intval($v['xid'] != 0)) { + $sql = "UPDATE other_lcprepdetails SET + Other_LcprepDetailsCode = '{$v['code']}', + Other_LcprepDetailsLabel = '{$v['label']}', + Other_LcprepDetailsResult = '{$v['result']}', + Other_LcprepDetailsUserID = {$userid} + WHERE + Other_LcprepDetailsID = {$v['xid']}"; + $this->db_smartone->query($sql); + } + //echo $sql; + } + } + + if ($interpretasi) { + foreach ($interpretasi as $k => $v) { + if (count($v['subgroups']) > 0) { + foreach ($v['subgroups'] as $ik => $iv) { + if (count($iv['childs']) > 0) { + foreach ($iv['childs'] as $iik => $iiv) { + if (intval($iiv['xid'] == 0)) { + $chex = $iiv['chex'] ? 'Y' : 'N'; + $sql = "UPDATE other_lcprepinterpretasi SET Other_LcprepInterpretasiIsActive = 'N' + WHERE + Other_LcprepInterpretasiOther_LcprepID = {$header_id} AND + Other_LcprepInterpretasiLcprep_InterpretasiID = '{$iiv['id']}' AND + Other_LcprepInterpretasiIsActive = 'Y'"; + $this->db_smartone->query($sql); + $sql = "INSERT INTO other_lcprepinterpretasi ( + Other_LcprepInterpretasiOther_LcprepID, + Other_LcprepInterpretasiLcprep_InterpretasiID, + Other_LcprepInterpretasiChex, + Other_LcprepInterpretasiValue, + Other_LcprepInterpretasiUserID, + Other_LcprepInterpretasiCreated + ) + VALUES( + {$header_id}, + '{$iiv['id']}', + '{$chex}', + '{$iiv['value']}', + {$userid}, + NOW() + )"; + $this->db_smartone->query($sql); + } + + if (intval($iiv['xid'] != 0)) { + $chex = $iiv['chex'] ? 'Y' : 'N'; + $sql = "UPDATE other_lcprepinterpretasi SET + Other_LcprepInterpretasiChex = '{$chex}', + Other_LcprepInterpretasiValue = '{$iiv['value']}', + Other_LcprepInterpretasiUserID = {$userid} + WHERE + Other_LcprepInterpretasiID = {$iiv['xid']}"; + $this->db_smartone->query($sql); + //echo $sql; + + } + } + } + } + } + //echo $sql; + } + } + + + $result = array("total" => 1, "records" => array(), "sql" => ''); + $this->sys_ok($result); + exit; + } + + function saveresult_papsmear() + { + $prm = $this->sys_input; + $detail_id = $prm['detail_id']; + $doctor_id = $prm['doctor']; + $checks = $prm['checks']; + $maturasi = $prm['maturasi']; + $bahans = $prm['bahans']; + $categories = $prm['categories']; + $results = $prm['results']; + + $userid = $this->sys_user['M_UserID']; + + $header_id = 0; + $sql = "SELECT * FROM other_papsmear WHERE Other_PapSmearT_OrderDetailID = {$detail_id} AND Other_PapSmearIsActive = 'Y'"; + $dt_header = $this->db_smartone->query($sql)->row_array(); + if ($dt_header) { + $header_id = $dt_header['Other_PapSmearID']; + } + if ($header_id == 0) { + $sql = "INSERT INTO other_papsmear( + Other_PapSmearT_OrderDetailID, + Other_PapSmearM_DoctorID, + Other_PapSmearUserID, + Other_PapSmearCreated + ) + VALUES( + {$detail_id}, + {$doctor_id}, + {$userid}, + NOW() + )"; + $this->db_smartone->query($sql); + $header_id = $this->db_smartone->insert_id(); + } else { + $sql = "UPDATE other_papsmear SET Other_PapSmearM_DoctorID = {$doctor_id}, Other_PapSmearUserID = {$userid} WHERE Other_PapSmearID = {$header_id}"; + $this->db_smartone->query($sql); + } + + if ($checks) { + foreach ($checks as $k => $v) { + if (intval($v['xid']) == 0 && $v['selected'] === 'Y') { + $sql = "INSERT INTO other_papsmearcheck ( + Other_PapSmearCheckOther_PapSmearID, + Other_PapSmearCheckM_PapSmearCheckID, + Other_PapSmearCheckNote, + Other_PapSmearCheckUserID, + Other_PapSmearCheckCreated + ) + VALUES( + {$header_id}, + {$v['check_id']}, + '{$v['note']}', + {$userid}, + NOW() + )"; + $this->db_smartone->query($sql); + } + if (intval($v['xid']) != 0 && $v['selected'] === 'N') { + $sql = "UPDATE other_papsmearcheck SET + Other_PapSmearCheckIsActive = 'N', + Other_PapSmearCheckUserID = {$userid} + WHERE + Other_PapSmearCheckID = {$v['xid']}"; + $this->db_smartone->query($sql); + } + if (intval($v['xid']) != 0 && $v['selected'] === 'Y') { + $sql = "UPDATE other_papsmearcheck SET + Other_PapSmearCheckNote = '{$v['note']}', + Other_PapSmearCheckUserID = {$userid} + WHERE + Other_PapSmearCheckID = {$v['xid']}"; + $this->db_smartone->query($sql); + } + //echo $sql; + } + } + + if ($maturasi) { + if (intval($maturasi['xid']) == 0) { + $value = join("/", $maturasi['value']); + $sql = "INSERT INTO other_papsmearmaturasi ( + Other_PapSmearMaturasiOther_PapSmearID, + Other_PapSmearMaturasiValue, + Other_PapSmearMaturasiUserID, + Other_PapSmearMaturasiCreated + ) + VALUE( + {$header_id}, + '{$value}', + {$userid}, + NOW() + )"; + $this->db_smartone->query($sql); + //echo $sql; + } + if (intval($maturasi['xid']) != 0) { + $value = join("/", $maturasi['value']); + $sql = "UPDATE other_papsmearmaturasi SET + Other_PapSmearMaturasiValue = '{$value}', + Other_PapSmearMaturasiUserID = {$userid} + WHERE + Other_PapSmearMaturasiID = {$maturasi['xid']}"; + // echo $sql; + $this->db_smartone->query($sql); + } + } + + if ($bahans) { + foreach ($bahans as $k => $v) { + if (intval($v['xid']) == 0 && $v['selected'] === 'Y') { + $sql = "INSERT INTO other_papsmearbahan ( + Other_PapSmearBahanOther_PapSmearID, + Other_PapSmearBahanM_PapSmearBahanID, + Other_PapSmearBahanUserID, + Other_PapSmearBahanCreated + ) + VALUES( + {$header_id}, + {$v['bahan_id']}, + {$userid}, + NOW() + )"; + $this->db_smartone->query($sql); + } + if (intval($v['xid']) != 0 && $v['selected'] === 'N') { + $sql = "UPDATE other_papsmearbahan SET + Other_PapSmearBahanIsActive = 'N', + Other_PapsmearCategoryUserID = {$userid} + WHERE + Other_PapSmearBahanID = {$v['xid']}"; + $this->db_smartone->query($sql); + } + if (intval($v['xid']) != 0 && $v['selected'] === 'Y') { + $sql = "UPDATE other_papsmearbahan SET + Other_PapSmearBahanIsActive = 'Y', + Other_PapsmearCategoryUserID = {$userid} + WHERE + Other_PapSmearBahanID = {$v['xid']}"; + $this->db_smartone->query($sql); + } + //echo $sql; + } + } + + if ($categories) { + foreach ($categories as $k => $v) { + if (intval($v['xid']) == 0 && $v['selected'] === 'Y') { + $sql = "INSERT INTO other_papsmearcategory ( + Other_PapsmearCategoryOther_PapSmearID, + Other_PapsmearCategoryM_PapSmearCategoryID, + Other_PapsmearCategoryUserID, + Other_PapsmearCategoryCreated + ) + VALUES( + {$header_id}, + {$v['category_id']}, + {$userid}, + NOW() + )"; + $this->db_smartone->query($sql); + } + if (intval($v['xid']) != 0 && $v['selected'] === 'N') { + $sql = "UPDATE other_papsmearcategory SET + Other_PapsmearCategoryIsActive = 'N', + Other_PapsmearCategoryUserID = {$userid} + WHERE + Other_PapsmearCategoryID = {$v['xid']}"; + $this->db_smartone->query($sql); + } + //echo $sql; + if (intval($v['xid']) != 0 && $v['selected'] === 'Y') { + $sql = "UPDATE other_papsmearcategory SET + Other_PapsmearCategoryIsActive = 'Y', + Other_PapsmearCategoryUserID = {$userid} + WHERE + Other_PapsmearCategoryID = {$v['xid']}"; + $this->db_smartone->query($sql); + } + } + } + + if ($results) { + foreach ($results as $k => $v) { + if (intval($v['xid']) == 0) { + $sql = "INSERT INTO other_papsmeardetails ( + Other_PapSmearDetailsOther_PapSmearID, + Other_PapSmearDetailsCode, + Other_PapSmearDetailsLabel, + Other_PapSmearDetailsResult, + Other_PapSmearDetailsUserID, + Other_PapSmearDetailsCreated + ) + VALUES( + {$header_id}, + '{$v['code']}', + '{$v['label']}', + '{$v['result']}', + {$userid}, + NOW() + )"; + $this->db_smartone->query($sql); + } + if (intval($v['xid']) != 0) { + $sql = "UPDATE other_papsmeardetails SET + Other_PapSmearDetailsCode = '{$v['code']}', + Other_PapSmearDetailsLabel = '{$v['label']}', + Other_PapSmearDetailsResult = '{$v['result']}', + Other_PapSmearDetailsUserID = {$userid} + WHERE + Other_PapSmearDetailsID = {$v['xid']}"; + $this->db_smartone->query($sql); + } + //echo $sql; + } + } + + $result = array("total" => 1, "records" => array(), "sql" => ''); + $this->sys_ok($result); + exit; + } + + function saveresult_fna() + { + $inp = $this->sys_input; + $prm = $inp['results']; + $doctor_id = $inp['doctor']; + $userid = $this->sys_user['M_UserID']; + $header_id = 0; + if ($prm[0]['xid'] == '0') { + $sql = "INSERT INTO other_fna( + Other_FNAM_DoctorID, + Other_FNAT_OrderDetailID, + Other_FNAUserID, + Other_FNACreated + ) + VALUES( + {$doctor_id}, + {$prm[0]['orderdetail_id']}, + {$userid}, + NOW() + + )"; + //echo $sql; + $this->db_smartone->query($sql); + $header_id = $this->db_smartone->insert_id(); + } else { + $sql = "SELECT * FROM other_fna WHERE Other_FNAT_OrderDetailID = {$prm[0]['orderdetail_id']} AND Other_FNAIsActive = 'Y'"; + $data_header = $this->db_smartone->query($sql)->row_array(); + $header_id = $data_header['Other_FNAID']; + $sql = "UPDATE other_fna SET + Other_FNAM_DoctorID = {$doctor_id}, + Other_FNAUserID = {$userid} + WHERE + Other_FNAID = {$header_id}"; + $this->db_smartone->query($sql); + } + foreach ($prm as $k => $v) { + if ($v['xid'] == '0') { + $results = str_replace("'", "\\'", $v['result']); + $sql = "INSERT INTO other_fnadetails( + Other_FNADetailsOther_FNAID , + Other_FNADetailsCode, + Other_FNADetailsLabel, + Other_FNADetailsResult, + Other_FNADetailsCreated, + Other_FNADetailsUserID + ) + VALUES( + {$header_id}, + '{$v['code']}', + '{$v['label']}', + '{$results}', + NOW(), + {$userid} + )"; + $query = $this->db_smartone->query($sql); + } else { + $results = str_replace("'", "\\'", $v['result']); + $sql = "UPDATE other_fnadetails SET + Other_FNADetailsResult = '{$results}', + Other_FNADetailsUserID = {$userid} + WHERE + Other_FNADetailsID = {$v['xid']}"; + $query = $this->db_smartone->query($sql); + } + } + + $result = array("total" => 1, "records" => array(), "sql" => ''); + $this->sys_ok($result); + exit; + } + + function saveresult_cytologi() + { + $inp = $this->sys_input; + $prm = $inp['results']; + $doctor_id = $inp['doctor']; + + $userid = $this->sys_user['M_UserID']; + $header_id = 0; + if ($prm[0]['xid'] == '0') { + $sql = "INSERT INTO other_cytologi( + Other_CytologiT_OrderDetailID, + Other_CytologiM_DoctorID, + Other_CytologiUserID, + Other_CytologiCreated + ) + VALUES( + {$prm[0]['orderdetail_id']}, + {$doctor_id}, + {$userid}, + NOW() + + )"; + //echo $sql; + $this->db_smartone->query($sql); + $header_id = $this->db_smartone->insert_id(); + } else { + $sql = "SELECT * FROM other_cytologi WHERE Other_CytologiT_OrderDetailID = {$prm[0]['orderdetail_id']} AND Other_CytologiIsActive = 'Y'"; + $data_header = $this->db_smartone->query($sql)->row_array(); + $header_id = $data_header['Other_CytologiID']; + $sql = "UPDATE other_cytologi SET + Other_CytologiM_DoctorID = {$doctor_id}, + Other_CytologiUserID = {$userid} + WHERE + Other_CytologiID = {$header_id}"; + $this->db_smartone->query($sql); + } + foreach ($prm as $k => $v) { + if ($v['xid'] == '0') { + $results = str_replace("'", "\\'", $v['result']); + $sql = "INSERT INTO other_cytologidetails( + Other_CytologiDetailsOther_CytologiID , + Other_CytologiDetailsCode, + Other_CytologiDetailsLabel, + Other_CytologiDetailsResult, + Other_CytologiDetailsCreated, + Other_CytologiDetailsUserID + ) + VALUES( + {$header_id}, + '{$v['code']}', + '{$v['label']}', + '{$results}', + NOW(), + {$userid} + )"; + $query = $this->db_smartone->query($sql); + } else { + $results = str_replace("'", "\\'", $v['result']); + $sql = "UPDATE other_cytologidetails SET + Other_CytologiDetailsResult = '{$results}', + Other_CytologiDetailsUserID = {$userid} + WHERE + Other_CytologiDetailsID = {$v['xid']}"; + $query = $this->db_smartone->query($sql); + } + } + + $result = array("total" => 1, "records" => array(), "sql" => ''); + $this->sys_ok($result); + exit; + } + + function saveresult_mikro() + { + $inp = $this->sys_input; + $prm = $inp['results']; + $doctor_id = $inp['doctor']; + $backteria_id = $inp['bacteria']; + $userid = $this->sys_user['M_UserID']; + $header_id = 0; + + if ($inp['result_value'] != 'Negatif' && $inp['result_value'] != 'Positif') { + $prm['result_value'] = $prm['result_other']; + } else { + $prm['result_value'] = $inp['result_value']; + } + + if ($prm['xid'] == '0') { + $sql = "INSERT INTO other_mikro( + Other_MikroM_DoctorID, + Other_MikroResult, + Other_MikroT_BacteriaID, + Other_MikroT_OrderDetailID, + Other_MikroHasilBiakan, + Other_MikroSampleTypeName, + Other_MikroUserID, + Other_MikroCreated + ) + VALUES( + {$doctor_id}, + '{$prm['result_value']}', + {$backteria_id}, + {$prm['orderdetail_id']}, + '{$prm['hasil_biakan']}', + '{$prm['sample_name']}', + {$userid}, + NOW() + + )"; + //echo $sql; + $this->db_smartone->query($sql); + $header_id = $this->db_smartone->insert_id(); + } else { + $sql = "SELECT * FROM other_mikro WHERE Other_MikroT_OrderDetailID = {$prm['orderdetail_id']} AND Other_MikroIsActive = 'Y'"; + $data_header = $this->db_smartone->query($sql)->row_array(); + $header_id = $data_header['Other_MikroID']; + $sql = "UPDATE other_mikro SET + Other_MikroResult = '{$prm['result_value']}', + Other_MikroM_DoctorID = {$doctor_id}, + Other_MikroT_BacteriaID = {$backteria_id}, + Other_MikroHasilBiakan = '{$prm['hasil_biakan']}', + Other_MikroSampleTypeName = '{$prm['sample_name']}', + Other_MikroUserID = {$userid} + WHERE + Other_MikroID = {$header_id}"; + //echo $sql; + $this->db_smartone->query($sql); + } + + + + $sql = "UPDATE other_mikrodetails SET Other_MikroDetailsIsActive = 'N', Other_MikroDetailsUserID = 0 WHERE Other_MikroDetailsOther_MikroID = {$header_id}"; + $this->db_smartone->query($sql); + + $results = $prm['details']; + if ($inp['result_value'] == 'Positif') { + foreach ($results as $k => $v) { + if ($v['xid'] == '0') { + $sql = "INSERT INTO other_mikrodetails( + Other_MikroDetailsOther_MikroID , + Other_MikroDetailsT_AntibioticID, + Other_MikroDetailsValue, + Other_MikroDetailsNote, + Other_MikroDetailsCreated, + Other_MikroDetailsUserID + ) + VALUES( + {$header_id}, + '{$v['T_AntibioticID']}', + '{$v['value']}', + '{$v['note']}', + NOW(), + {$userid} + )"; + $query = $this->db_smartone->query($sql); + } else { + $sql = "UPDATE other_mikrodetails SET + Other_MikroDetailsT_AntibioticID = '{$v['T_AntibioticID']}', + Other_MikroDetailsValue = '{$v['value']}', + Other_MikroDetailsNote = '{$v['note']}', + Other_MikroDetailsIsActive = 'Y', + Other_MikroDetailsUserID = {$userid} + WHERE + Other_MikroDetailsID = {$v['xid']}"; + //echo $sql; + $query = $this->db_smartone->query($sql); + } + } + } + + + $result = array("total" => 1, "records" => array(), "sql" => ''); + $this->sys_ok($result); + exit; + } + + + function get_doctors_preparasi_sperma() + { + $prm = $this->sys_input; + // $id = $prm["id"]; + + $sql = " SELECT M_DoctorID as id, CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as name + FROM m_doctorso + JOIN m_doctor ON M_DoctorSOM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + M_DoctorSONat_SubGroupID = 10 AND + M_DoctorSOIsActive = 'Y' + ORDER BY M_DoctorName ASC"; + //echo $sql; + $query = $this->db_smartone->query($sql); + + if ($query) { + $rows = $query->result_array(); + $this->sys_ok(["records" => $rows]); + } else { + $this->sys_error_db("Rerun rows", $this->db_smartone); + exit; + } + } + + + function getpreparasispermaresult() + { + $prm = $this->sys_input; + $id = $prm["id"]; + + $sql = " SELECT other_preparasisperma.*, + Other_PreparasiSpermaID as xid, + Other_PreparasiSpermaT_OrderDetailID as orderdetail_id, + IFNULL(Other_PreparasiSpermaM_DoctorID,0) as doctor_id, + IF(ISNULL(Other_PreparasiSpermaM_DoctorID) OR Other_PreparasiSpermaM_DoctorID = 0 ,'0', CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3)) as doctor_name + FROM other_preparasisperma + LEFT JOIN m_doctor ON Other_PreparasiSpermaM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + Other_PreparasiSpermaT_OrderDetailID = {$id} AND Other_PreparasiSpermaIsActive = 'Y' + GROUP BY Other_PreparasiSpermaID"; + $query = $this->db_smartone->query($sql); + + if ($query) { + $rows = $query->row_array(); + $sql = " + SELECT '0' as id, 'Belum memilih dokter' as name + UNION + SELECT M_DoctorID as id, CONCAT(M_DoctorPrefix,M_DoctorPrefix2,M_DoctorName,M_DoctorSufix,M_DoctorSufix2,M_DoctorSufix3) as name + FROM m_doctorso + JOIN m_doctor ON M_DoctorSOM_DoctorID = M_DoctorID AND + M_DoctorIsActive = 'Y' + WHERE + M_DoctorSONat_SubGroupID = 10 AND + M_DoctorSOIsActive = 'Y' + ORDER BY name ASC"; + //echo $sql; + $doctors = $this->db_smartone->query($sql)->result_array(); + $images = array(); + $sql = "SELECT Other_PreparasiSpermaImgID as xid, + Other_PreparasiSpermaImgType as type, + CONCAT('/one-media/one-image-nonlab/',Other_PreparasiSpermaImgNewName) as image_url + FROM t_orderdetail + JOIN other_preparasisperma_img ON Other_PreparasiSpermaImgT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND + Other_PreparasiSpermaImgIsActive = 'Y' + WHERE + T_OrderDetailID = {$id} AND + T_OrderDetailIsActive = 'Y' + GROUP BY Other_PreparasiSpermaImgID"; + //echo $sql; + $images = $this->db_smartone->query($sql)->result_array(); + + $rst = array('doctors' => $doctors, 'results' => $rows, 'images' => $images); + $this->sys_ok(["records" => $rst]); + } else { + $this->sys_error_db("Rerun rows", $this->db_smartone); + exit; + } + } + + + function uploadimage_preparasi_sperma() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $userid = $this->sys_user["M_UserID"]; + $data = []; + //print_r($_SERVER); + + $prm = $this->sys_input; + $orderid = $this->input->post('orderid'); + $type = $this->input->post('type'); + $labnumber = $this->input->post('labnumber'); + $sql = "UPDATE other_preparasisperma_img SET + Other_PreparasiSpermaImgIsActive = 'N', + Other_PreparasiSpermaImgUserID = {$userid} + WHERE + Other_PreparasiSpermaImgT_OrderHeaderID = {$orderid} AND + Other_PreparasiSpermaImgType = '{$type}'"; + //echo $sql; + $this->db_onedev->query($sql); + //$config['upload_path'] = 'assets/'; + + $path = '/home/one/project/one/one-media/one-image-nonlab/'; + //echo $path; + $config['upload_path'] = $path; + $config['allowed_types'] = 'jpg|jpeg|png|gif'; + + $config['max_size'] = '10000'; + $count = count($_FILES['files']['name']); + //echo $count; + $this->load->library('upload', $config); + + $error = []; + for ($i = 0; $i < $count; $i++) { + + + if (!empty($_FILES['files']['name'][$i])) { + + + + $_FILES['file']['name'] = $_FILES['files']['name'][$i]; + + $_FILES['file']['type'] = $_FILES['files']['type'][$i]; + + $_FILES['file']['tmp_name'] = $_FILES['files']['tmp_name'][$i]; + + $_FILES['file']['error'] = $_FILES['files']['error'][$i]; + + $_FILES['file']['size'] = $_FILES['files']['size'][$i]; + + + + $namex = $orderid . '-' . $labnumber . '-' . $this->generateRandomString(5); + //echo $namex; + + $config['file_name'] = $namex; + $this->upload->initialize($config); + //echo $config['file_name'] ; + + + + + + if ($this->upload->do_upload('file')) { + + $uploadData = $this->upload->data(); + + $filename = $uploadData['file_name']; + //echo $filename; + + + $sql = "INSERT INTO other_preparasisperma_img ( + Other_PreparasiSpermaImgT_OrderHeaderID, + Other_PreparasiSpermaImgType, + Other_PreparasiSpermaImgOldName, + Other_PreparasiSpermaImgNewName, + Other_PreparasiSpermaImgCreated, + Other_PreparasiSpermaImgUserID + ) + VALUES( + {$orderid}, + '{$type}', + '{$_FILES['files']['name'][$i]}', + '{$filename}', + NOW(), + {$userid} + + )"; + //echo $sql; + $this->db_onedev->query($sql); + $xlast_id = $this->db_onedev->insert_id(); + $data['totalFiles'][] = array('xid' => $xlast_id, 'type' => $type, 'image_url' => '/one-media/one-image-nonlab/' . $filename); + } else { + $error = array('error' => $this->upload->display_errors()); + } + } + } + + $result = array("total" => count($data['totalFiles']), "records" => $data['totalFiles'], 'errors' => $error); + $this->sys_ok($result); + } + + + function saveresult_preparasi_sperma() + { + $inp = $this->sys_input; + $prm = $inp['results']; + $doctor_id = $inp['doctor']; + $orderdetail_id = $inp['orderdetailid']; + $userid = $this->sys_user['M_UserID']; + $header_id = 0; + if ($prm['xid'] == '0') { + $sql = "INSERT INTO other_preparasisperma( + Other_PreparasiSpermaM_DoctorID, + Other_PreparasiSpermaT_OrderDetailID, + Other_PreparasiSpermaPreMotilitasA, + Other_PreparasiSpermaPreMotilitasB, + Other_PreparasiSpermaPreMotilitasC, + Other_PreparasiSpermaPreKonsentrasi, + Other_PreparasiSpermaPreKontaminan, + Other_PreparasiSpermaPostMotilitasA, + Other_PreparasiSpermaPostMotilitasB, + Other_PreparasiSpermaPostMotilitasC, + Other_PreparasiSpermaPostKonsentrasi, + Other_PreparasiSpermaPostKontaminan, + Other_PreparasiSpermaNote, + Other_PreparasiSpermaUserID, + Other_PreparasiSpermaCreated + ) + VALUES( + {$doctor_id}, + {$orderdetail_id}, + '{$prm['Other_PreparasiSpermaPreMotilitasA']}', + '{$prm['Other_PreparasiSpermaPreMotilitasB']}', + '{$prm['Other_PreparasiSpermaPreMotilitasC']}', + '{$prm['Other_PreparasiSpermaPreKonsentrasi']}', + '{$prm['Other_PreparasiSpermaPreKontaminan']}', + '{$prm['Other_PreparasiSpermaPostMotilitasA']}', + '{$prm['Other_PreparasiSpermaPostMotilitasB']}', + '{$prm['Other_PreparasiSpermaPostMotilitasC']}', + '{$prm['Other_PreparasiSpermaPostKonsentrasi']}', + '{$prm['Other_PreparasiSpermaPostKontaminan']}', + '{$prm['Other_PreparasiSpermaNote']}', + {$userid}, + NOW() + + )"; + //echo $sql; + $this->db_smartone->query($sql); + $header_id = $this->db_smartone->insert_id(); + } else { + $sql = "SELECT * FROM other_preparasisperma WHERE Other_PreparasiSpermaT_OrderDetailID = {$orderdetail_id} AND Other_PreparasiSpermaIsActive = 'Y'"; + $data_header = $this->db_smartone->query($sql)->row_array(); + $header_id = $data_header['Other_PreparasiSpermaID']; + $sql = "UPDATE other_preparasisperma SET + Other_PreparasiSpermaM_DoctorID = {$doctor_id}, + Other_PreparasiSpermaPreMotilitasA = '{$prm['Other_PreparasiSpermaPreMotilitasA']}', + Other_PreparasiSpermaPreMotilitasB = '{$prm['Other_PreparasiSpermaPreMotilitasB']}', + Other_PreparasiSpermaPreMotilitasC = '{$prm['Other_PreparasiSpermaPreMotilitasC']}', + Other_PreparasiSpermaPreKonsentrasi = '{$prm['Other_PreparasiSpermaPreKonsentrasi']}', + Other_PreparasiSpermaPreKontaminan = '{$prm['Other_PreparasiSpermaPreKontaminan']}', + Other_PreparasiSpermaPostMotilitasA = '{$prm['Other_PreparasiSpermaPostMotilitasA']}', + Other_PreparasiSpermaPostMotilitasB = '{$prm['Other_PreparasiSpermaPostMotilitasB']}', + Other_PreparasiSpermaPostMotilitasC = '{$prm['Other_PreparasiSpermaPostMotilitasC']}', + Other_PreparasiSpermaPostKonsentrasi = '{$prm['Other_PreparasiSpermaPostKonsentrasi']}', + Other_PreparasiSpermaPostKontaminan = '{$prm['Other_PreparasiSpermaPostKontaminan']}', + Other_PreparasiSpermaNote = '{$prm['Other_PreparasiSpermaNote']}', + Other_PreparasiSpermaUserID = {$userid} + WHERE + Other_PreparasiSpermaID = {$header_id}"; + $this->db_smartone->query($sql); + } + + + $result = array("total" => 1, "records" => array(), "sql" => ''); + $this->sys_ok($result); + exit; + } + + function get_fpp() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $userid = $this->sys_user["M_UserID"]; + $inp = $this->sys_input; + $order_id = $inp['order_id']; + + $rpt = ""; + $sql = "SELECT BrnListFileLocation as rpt_url + FROM t_orderheaderaddon + JOIN brn_list ON BrnListBarcode = T_OrderHeaderAddOnBNR + WHERE + T_OrderHeaderAddOnT_OrderHeaderID = {$order_id} + "; + $data_rpt = $this->db_smartone->query($sql)->row_array(); + if ($data_rpt) + $rpt = $data_rpt["rpt_url"]; + + $result = array("data" => $rpt); + $this->sys_ok($result); + } + + // non lab + public function proses_upload_non_lab( + $filex, + $config, + $valid_extensions, + $order_id, + $date, + $userid, + $target_dir + ) { + $_FILES = $filex; + $data = []; + + $dir_file = "/home/one/project/one/"; + $sql_get_file = "select T_OrderAttachmentUrl + from t_order_attachment + WHERE T_OrderAttachmentIsActive = 'Y' + AND T_OrderAttachmentT_OrderHeaderID = {$order_id} + "; + + $qry_get_file = $this->db_onedev->query($sql_get_file); + if (!$qry_get_file) { + $this->db_onedev->trans_rollback(); + $this->sys_error_db("select t_order_attachment lab for get file failed"); + exit; + } + + $rows_get_file = $qry_get_file->result_array(); + $location_file = ""; + if (count($rows_get_file) > 0) { + $location_file = $dir_file . $rows_get_file[0]['T_OrderAttachmentUrl']; + if (file_exists($location_file)) { + // remove file in server, if exists + if (unlink($location_file)) { + // update old data + $sql_update_old = "UPDATE t_order_attachment SET + T_OrderAttachmentIsActive = 'N', + T_OrderAttachmentUserID = {$userid} + WHERE + T_OrderAttachmentT_OrderHeaderID = {$order_id} + AND T_OrderAttachmentIsActive = 'Y' + AND T_OrderAttachmentType = 'NonLab'"; + + $qry_update_old = $this->db_onedev->query($sql_update_old); + if (!$qry_update_old) { + $this->db_onedev->trans_rollback(); + $this->sys_error_db("update t_order_attachment lab failed"); + exit; + } + } + } + } + + // update old data + $sql_update_old = "UPDATE t_order_attachment SET + T_OrderAttachmentIsActive = 'N', + T_OrderAttachmentUserID = {$userid} + WHERE + T_OrderAttachmentT_OrderHeaderID = {$order_id} + AND T_OrderAttachmentIsActive = 'Y' + AND T_OrderAttachmentType = 'NonLab'"; + + $qry_update_old = $this->db_onedev->query($sql_update_old); + if (!$qry_update_old) { + $this->db_onedev->trans_rollback(); + $this->sys_error_db("update t_order_attachment non lab failed"); + exit; + } + + if (!empty($_FILES['fileNonLab']['name'])) { + $filenameNonLab = $_FILES['fileNonLab']['name']; + $extension_NonLab = pathinfo($filenameNonLab, PATHINFO_EXTENSION); + if (!in_array(strtolower($extension_NonLab), $valid_extensions)) { + echo json_encode([ + "status" => "ERR", + "message" => "Ekstensi file yang diperbolehkan .jpg, .png, jpeg, .pdf" + ]); + } + + $filenameNonLab = $order_id . '-' . 'NonLab' . '-' . date('Y') . '-' . $this->generateRandomString(5); + $_FILES['file']['name'] = $filenameNonLab; + $_FILES['file']['type'] = $_FILES['fileNonLab']['type'][0]; + $_FILES['file']['tmp_name'] = $_FILES['fileNonLab']['tmp_name'][0]; + $_FILES['file']['error'] = $_FILES['fileNonLab']['error'][0]; + $_FILES['file']['size'] = $_FILES['fileNonLab']['size'][0]; + + $config['file_name'] = $filenameNonLab; + $this->upload->initialize($config); + + if ($this->upload->do_upload('fileNonLab')) { + $uploadData = $this->upload->data(); + $filename = $uploadData['file_name']; + $url_nonlab = "/one-media/one-attachment/lampiran-result-entry-$date/" . $filename; + + // insert non lab + $sql = "INSERT INTO t_order_attachment ( + T_OrderAttachmentT_OrderHeaderID, + T_OrderAttachmentName, + T_OrderAttachmentUrl, + T_OrderAttachmentType, + T_OrderAttachmentCreated, + T_OrderAttachmentUserID + ) + VALUES( + {$order_id}, + '{$filename}', + '{$url_nonlab}', + 'NonLab', + NOW(), + {$userid} + )"; + + $qry_insert = $this->db_onedev->query($sql); + if (!$qry_insert) { + $this->db_onedev->trans_rollback(); + $this->sys_error_db("insert t_order_attachment nonlab failed : " . $this->db_onedev->last_query()); + exit; + } + + $xlast_id = $this->db_onedev->insert_id(); + $data['totalFiles'][] = array( + 'xid' => $xlast_id, + 'type' => "NonLab", + 'image_url' => "/one-media/one-attachment/lampiran-result-entry-$date/" . $filename, + ); + + return [ + "status" => "OK", + "data" => $data + ]; + + // echo json_encode([ + // "status" => "ERR", + // "message" => $sql, + // ]); + // exit; + } else { + $error = array('error' => $this->upload->display_errors()); + // echo json_encode([ + // "status" => "ERR", + // "message" => "Gagal Upload File Non Lab : $error", + // "error" => $error, + // "path" => $target_dir + // ]); + // exit; + + $e = $error['error']; + + return ([ + "status" => "ERR", + "message" => "Gagal Upload File Non Lab : $e", + "error" => $error, + "path" => $target_dir + ]); + } + } + } + + // lab + public function proses_upload_lab( + $filex, + $config, + $valid_extensions, + $order_id, + $date, + $userid, + $target_dir + ) { + $_FILES = $filex; + $data = []; + + $dir_file = "/home/one/project/one/"; + $sql_get_file = "select T_OrderAttachmentUrl + from t_order_attachment + WHERE T_OrderAttachmentIsActive = 'Y' + AND T_OrderAttachmentT_OrderHeaderID = {$order_id} + "; + + $qry_get_file = $this->db_onedev->query($sql_get_file); + if (!$qry_get_file) { + $this->db_onedev->trans_rollback(); + $this->sys_error_db("select t_order_attachment lab for get file failed"); + exit; + } + + $rows_get_file = $qry_get_file->result_array(); + $location_file = ""; + if (count($rows_get_file) > 0) { + $location_file = $dir_file . $rows_get_file[0]['T_OrderAttachmentUrl']; + if (file_exists($location_file)) { + // remove file in server, if exists + if (unlink($location_file)) { + // update old data + $sql_update_old = "UPDATE t_order_attachment SET + T_OrderAttachmentIsActive = 'N', + T_OrderAttachmentUserID = {$userid} + WHERE + T_OrderAttachmentT_OrderHeaderID = {$order_id} + AND T_OrderAttachmentIsActive = 'Y' + AND T_OrderAttachmentType = 'Lab'"; + + $qry_update_old = $this->db_onedev->query($sql_update_old); + if (!$qry_update_old) { + $this->db_onedev->trans_rollback(); + $this->sys_error_db("update t_order_attachment lab failed"); + exit; + } + } + } + } + + // update old data + $sql_update_old = "UPDATE t_order_attachment SET + T_OrderAttachmentIsActive = 'N', + T_OrderAttachmentUserID = {$userid} + WHERE + T_OrderAttachmentT_OrderHeaderID = {$order_id} + AND T_OrderAttachmentIsActive = 'Y' + AND T_OrderAttachmentType = 'Lab'"; + + $qry_update_old = $this->db_onedev->query($sql_update_old); + if (!$qry_update_old) { + $this->db_onedev->trans_rollback(); + $this->sys_error_db("update t_order_attachment lab failed"); + exit; + } + + if (!empty($_FILES['fileLab']['name'])) { + $filenameLab = $_FILES['fileLab']['name']; + $extension_Lab = pathinfo($filenameLab, PATHINFO_EXTENSION); + if (!in_array(strtolower($extension_Lab), $valid_extensions)) { + echo json_encode([ + "status" => "ERR", + "message" => "Ekstensi file yang diperbolehkan .jpg, .png, jpeg, .pdf" + ]); + } + + $filenameLab = $order_id . '-' . 'Lab' . '-' . date('Y') . '-' . $this->generateRandomString(5); + $_FILES['file']['name'] = $filenameLab; + $_FILES['file']['type'] = $_FILES['fileLab']['type'][0]; + $_FILES['file']['tmp_name'] = $_FILES['fileLab']['tmp_name'][0]; + $_FILES['file']['error'] = $_FILES['fileLab']['error'][0]; + $_FILES['file']['size'] = $_FILES['fileLab']['size'][0]; + + $config['file_name'] = $filenameLab; + $this->upload->initialize($config); + + if ($this->upload->do_upload('fileLab')) { + $uploadData = $this->upload->data(); + $filename = $uploadData['file_name']; + $url_Lab = "/one-media/one-attachment/lampiran-result-entry-$date/" . $filename; + + // insert non lab + $sql = "INSERT INTO t_order_attachment ( + T_OrderAttachmentT_OrderHeaderID, + T_OrderAttachmentName, + T_OrderAttachmentUrl, + T_OrderAttachmentType, + T_OrderAttachmentCreated, + T_OrderAttachmentUserID + ) + VALUES( + {$order_id}, + '{$filename}', + '{$url_Lab}', + 'Lab', + NOW(), + {$userid} + )"; + + $qry_insert = $this->db_onedev->query($sql); + if (!$qry_insert) { + $this->db_onedev->trans_rollback(); + $this->sys_error_db("insert t_order_attachment Lab failed : " . $this->db_onedev->last_query()); + exit; + } + + $xlast_id = $this->db_onedev->insert_id(); + $data['totalFiles'][] = array( + 'xid' => $xlast_id, + 'type' => "Lab", + 'image_url' => "/one-media/one-attachment/lampiran-result-entry-$date/" . $filename, + ); + + return [ + "status" => "OK", + "data" => $data + ]; + + // echo json_encode([ + // "status" => "ERR", + // "message" => $sql, + // ]); + // exit; + } else { + $error = array('error' => $this->upload->display_errors()); + // echo json_encode([ + // "status" => "ERR", + // "message" => "Gagal Upload File Lab : $error", + // "error" => $error, + // "path" => $target_dir + // ]); + // exit; + + $e = $error['error']; + return ([ + "status" => "ERR", + "message" => "Gagal Upload File Lab : $e", + "error" => $error, + "path" => $target_dir + ]); + } + } + } + + public function upload_file_lampiran_by_order_id() + { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $userid = $this->sys_user["M_UserID"]; + $inp = $this->sys_input; + $order_id = $inp['orderid']; + $data = []; + + if ($order_id == "0" || $order_id == 0) { + echo json_encode([ + "status" => "ERR", + "message" => "Tidak Ada Pemeriksaan", + ]); + exit; + } + + // $status = ""; + + // Valid file extensions + $valid_extensions = array("jpg", "jpeg", "png", "pdf"); + + // echo $orderid; + + $date = date('Y'); + $target_dir_one_media = "/home/one/project/one/one-media/"; + $target_dir_one_attachment = "/home/one/project/one/one-media/one-attachment/"; + $target_dir = "/home/one/project/one/one-media/one-attachment/lampiran-result-entry-$date/"; + + // check folder sudah ada apa belum + // if(!is_dir($target_dir_one_media)){ + // mkdir($target_dir_one_media, 0777, true); + if (!is_dir($target_dir_one_attachment)) { + mkdir($target_dir_one_attachment, 0777, true); + if (!is_dir($target_dir)) { + // echo json_encode([ + // "status" => "ERR", + // "message" => "ERR : Folder Upload Di Server Belum Ada", + // ]); + // exit; + mkdir($target_dir, 0777, true); + } + } + // } + + $config['upload_path'] = $target_dir; + // if(!is_dir($config['upload_path'])) mkdir($target_dir, 0777, TRUE); + $config['allowed_types'] = 'jpg|jpeg|png|pdf'; + $config['max_size'] = '10000'; + $this->load->library('upload', $config); + + // yang diupload hanya lab + if (!empty($_FILES['fileLab']['name'])) { + // $status = "lab"; + $resx_lab = $this->proses_upload_lab( + $_FILES, + $config, + $valid_extensions, + $order_id, + $date, + $userid, + $target_dir + ); + if ($resx_lab['status'] == "OK") { + $data['totalFiles'] = $resx_lab['data']; + $result = array( + "total" => count($data['totalFiles']), + "records" => $data['totalFiles'], + ); + $this->sys_ok($result); + } else { + echo json_encode([ + "status" => "ERR", + "message" => $resx_lab['message'], + "error" => $resx_lab['error'], + "path" => $resx_lab['path'] + ]); + } + } + + + // jika di upload lab dan non lab + // if (!empty($_FILES['fileNonLab']['name'])) { + // // $status = "nonlab"; + // $resx = $this->proses_upload_non_lab( + // $_FILES, + // $config, + // $valid_extensions, + // $order_id, + // $date, + // $userid, + // $target_dir + // ); + + // // echo $resx['status']; + + // if ($resx['status'] == "OK") { + // // $data['totalFiles'] = $resx[0]['data']; + // // $result = array( + // // "total" => count($data['totalFiles']), + // // "records" => $data['totalFiles'], + // // ); + // // $this->sys_ok($result); + + // if (empty($_FILES['fileLab']['name'])) { + // $data['totalFiles'] = $resx['data']; + // $result = array( + // "total" => count($data['totalFiles']), + // "records" => $data['totalFiles'], + // ); + // $this->sys_ok($result); + // } else { + // // check lab dan upload + // if (!empty($_FILES['fileLab']['name'])) { + // $resx_lab = $this->proses_upload_lab( + // $_FILES, + // $config, + // $valid_extensions, + // $order_id, + // $date, + // $userid, + // $target_dir + // ); + // if ($resx_lab['status'] == "OK") { + // $data['totalFiles'] = $resx_lab['data']; + // $result = array( + // "total" => count($data['totalFiles']), + // "records" => $data['totalFiles'], + // ); + // $this->sys_ok($result); + // } else { + // echo json_encode([ + // "status" => "ERR", + // "message" => $resx_lab['message'], + // "error" => $resx_lab['error'], + // "path" => $resx_lab['path'] + // ]); + // } + // } + // } + // } else { + // echo json_encode([ + // "status" => "ERR", + // "message" => $resx['message'], + // "error" => $resx['error'], + // "path" => $resx['path'] + // ]); + // } + // } else { + // if (!empty($_FILES['fileLab']['name'])) { + // // $status = "lab"; + // $resx_lab = $this->proses_upload_lab( + // $_FILES, + // $config, + // $valid_extensions, + // $order_id, + // $date, + // $userid, + // $target_dir + // ); + // if ($resx_lab['status'] == "OK") { + // // $data['totalFiles'] = $resx_lab['data']; + // // $result = array( + // // "total" => count($data['totalFiles']), + // // "records" => $data['totalFiles'], + // // ); + // // $this->sys_ok($result); + + // if (empty($_FILES['fileNonLab']['name'])) { + // $data['totalFiles'] = $resx_lab['data']; + // $result = array( + // "total" => count($data['totalFiles']), + // "records" => $data['totalFiles'], + // ); + // $this->sys_ok($result); + // } else { + // // check non lab dan upload + // if (!empty($_FILES['fileNonLab']['name'])) { + // $resx = $this->proses_upload_non_lab( + // $_FILES, + // $config, + // $valid_extensions, + // $order_id, + // $date, + // $userid, + // $target_dir + // ); + + // if ($resx['status'] == "OK") { + // $data['totalFiles'] = $resx['data']; + // $result = array( + // "total" => count($data['totalFiles']), + // "records" => $data['totalFiles'], + // ); + // $this->sys_ok($result); + // } else { + // echo json_encode([ + // "status" => "ERR", + // "message" => $resx['message'], + // "error" => $resx['error'], + // "path" => $resx['path'] + // ]); + // } + // } + // } + // } else { + // echo json_encode([ + // "status" => "ERR", + // "message" => $resx_lab['message'], + // "error" => $resx_lab['error'], + // "path" => $resx_lab['path'] + // ]); + // } + // } + // } + } + + public function test_make_directory() + { + $date = date('Y'); + $target_dir = "/home/one/project/one/one-media/one-attachment/test-directory-$date/"; + if (!file_exists($target_dir)) { + mkdir($target_dir, 0777, true); + // echo json_encode([ + // "status" => "ERR", + // "message" => "ERR : Folder Upload Di Server Belum Ada", + // ]); + // exit; + } + } +}