Files
api-kedungdoro/api/resultentry-v106/History.php
2024-02-20 09:03:06 +07:00

351 lines
12 KiB
PHP

<?php
class History extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "History API";
}
public function __construct()
{
parent::__construct();
$this->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);
}
}