Initial import

This commit is contained in:
sas.fajri
2026-05-25 20:01:37 +07:00
commit 710d7c1b97
10371 changed files with 2381698 additions and 0 deletions

View File

@@ -0,0 +1,102 @@
<?php
class Rv_patient extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$nolab = '%' . $prm["nolab"] . '%';
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($prm['nolab'] != '')
$nolab = "%{$prm['nolab']}%";
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "select count(*) total
from t_orderheader
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
join m_doctor da on T_OrderHeaderPJM_DoctorID = da.M_DoctorID
JOIN m_company on T_OrderHeaderM_CompanyID = M_CompanyID
JOIN m_mou on T_OrderHeaderM_MouID = M_MouID
JOIN helper_order ON Helper_OrderT_OrderHeaderID = T_OrderHeaderID
AND Helper_OrderIsLAB = 'Y'
where T_OrderHeaderIsActive = 'Y'
and T_OrderHeaderLabNumber like ?
and
( M_PatientName LIKE ?
or ((M_PatientHP LIKE ? and M_PatientHP IS NOT NULL))
or ((M_PatientDOB LIKE ? and M_PatientDOB IS NOT NULL))
)
order by T_OrderHeaderLabNumber DESC";
$query = $this->db_smartone->query($sql, [$nolab, $search, $search, $search ]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "select T_OrderHeaderID, T_OrderHeaderLabNumber, T_OrderHeaderDate,
M_PatientID, M_PatientNoReg, fn_global_patient_name(M_PatientID) M_PatientName,
M_PatientDOB, T_OrderHeaderM_PatientAge, M_PatientHP, M_SexName,
da.M_DoctorID doctor_pj_id, fn_global_doctor_name(da.M_DoctorID) doctor_pj_name,
M_MouID, M_MouName, M_CompanyID, M_CompanyName,
T_OrderHeaderFoNote, T_OrderHeaderSamplingNote, T_OrderHeaderResultNote, M_LangCode,
T_OrderHeaderLangIsSI is_si
from t_orderheader
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
join m_doctor da on T_OrderHeaderPJM_DoctorID = da.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 helper_order ON Helper_OrderT_OrderHeaderID = T_OrderHeaderID
AND Helper_OrderIsLAB = 'Y'
JOIN m_lang ON T_OrderHeaderM_LangID = M_LangID
where T_OrderHeaderIsActive = 'Y'
and T_OrderHeaderLabNumber like ?
and
( M_PatientName LIKE ?
or ((M_PatientHP LIKE ? and M_PatientHP IS NOT NULL))
or ((M_PatientDOB LIKE ? and M_PatientDOB IS NOT NULL))
)
order by T_OrderHeaderLabNumber DESC
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$nolab, $search, $search, $search ]);
if ($query) {
$rows = $query->result_array();
foreach ($rows as $k => $v)
$rows[$k]['data'] = json_decode($v['data']);
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
}

View File

@@ -0,0 +1,160 @@
<?php
class Rv_px extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Px API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
$this->db_one = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 99;
$id = $prm["order_id"];
// QUERY TOTAL
// $sql = "";
// $query = $this->db_smartone->query($sql);
// if ($query) {
// $tot_count = $query->result_array()[0]["total"];
// }
// else {
// $this->sys_error_db("re count", $this->db_smartone);
// exit;
// }
$tot_count = 0;
$sql = "SELECT T_TestID
FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TEstID = T_TestID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
AND T_TestParentT_TestID = 0";
$query = $this->db_smartone->query($sql, [$id]);
if ($query) {
$rst = [];
$rows = $query->result_array();
foreach ($rows as $k => $v)
{
$sql = "WITH RECURSIVE ancestors AS
(
SELECT t_testid, t_testname,
T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, 1 level,
T_OrderDetailVerDeltaCheck delta_check,
T_OrderDetailVerTrendAnalysis trend_analysis,
T_OrderDetailVerification verification,
T_OrderDetailVerification verification_old,
T_OrderDetailReqStatus sample_handling_perfect
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
WHERE T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
AND t_testid = ?
UNION
SELECT g.t_testid, g.t_testname,
T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, level+1 level,
T_OrderDetailVerDeltaCheck delta_check,
T_OrderDetailVerTrendAnalysis trend_analysis,
T_OrderDetailVerification verification,
T_OrderDetailVerification verification_old,
T_OrderDetailReqStatus sample_handling_perfect
FROM ancestors a, t_orderdetail f
JOIN t_test g ON f.T_OrderDetailT_TestID = g.T_TestID
WHERE T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
AND g.t_testparentt_testid = a.t_testid and g.t_testisactive = 'Y' )
SELECT * FROM ancestors;";
$query = $this->db_smartone->query($sql, [$id, $v['T_TestID'], $id]);
$r = $query->result_array();
foreach($r as $k => $v) {
if ($v['delta_check'] == "X")
{
$tmp = $this->db_smartone->query("SELECT fn_process_re_deltacheck('{$v['id']}') x")
->row();
$v['delta_check'] = $tmp->x;
}
if ($v['trend_analysis'] == "X")
{
$trend_sql = "SELECT fn_process_re_trendanalysis('{$v['id']}') x";
$tmp = $this->db_smartone->query($trend_sql)
->row();
$j_trend_analysis= json_decode($tmp->x);
$v['trend_analysis'] = $j_trend_analysis->status;
}
// Sample Handling & Verification Perfect
// sipe always checked
if (true || $v['sample_handling_perfect'] == 'X')
{
$y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$id}', '{$v['t_testid']}') c")
->row();
$v['sample_handling_perfect'] = $y->c;
}
// Override
if ($y->c == "N")
{
$v['delta_check'] = "N";
$v['trend_analysis'] = "N";
}
$rst[] = $v;
}
}
$result = array("total" => $tot_count, "records" => $rst, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RE Px rows", $this->db_smartone);
exit;
}
}
public function confirm()
{
$prm = $this->sys_input;
$data = json_decode($prm["id"]);
if (sizeof($data) < 1)
{
$this->sys_error_db("RE Verification Confirmation", $this->db_smartone);
exit;
}
else
{
$ids = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailVerDeltaCheck', $v->delta)
->set('T_OrderDetailVerTrendAnalysis', $v->trend)
->set('T_OrderDetailVerification', $v->verification)
->set('T_OrderDetailVerDate', date('Y-m-d H:i:s'))
->set('T_OrderDetailVerUserID', $this->sys_user->M_UserID)
->where('T_OrderDetailID', $v->id)
->update('t_orderdetail');
$ids[] = $v->id;
}
$this->sys_ok($ids);
}
}
}

View File

@@ -0,0 +1,145 @@
<?php
class Rv_verification extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RV Px API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
$this->db_one= $this->load->database("onedev", true);
}
function requirement($id) {
$sql = "call sp_result_verify_requirement(?)";
$query = $this->db_one->query($sql, array($id));
$this->clean_mysqli_connection($this->db_one);
$rows = $query->result_array() ;
$result = array();
foreach( $rows as $r ) {
$jdata = json_decode( $r["jdata"] );
$a_pos = array();
foreach($jdata as $req ) {
$xreq = json_decode($req,true);
foreach($xreq as $position => $req) {
$a_req = explode("^",$req);
$a_pos[$position] = $a_req;
}
}
$result = $a_pos;
}
return $this->req_html($result);
}
function req_html($result) {
$a_pos = $result;
if (count($a_pos) == 0 ) return "";
$html = "<table >\n";
$html .= "<tr><th style='text-align:left;padding:5px;'>Position</th>
<th style='text-align:left;padding:5px;' >Requirements</th></tr>\n";
foreach($a_pos as $pos => $reqs) {
$html .= "<tr valign='top' >\n";
$html .= "<td style='text-align:left;padding:5px;'>$pos</td>";
$html .= "<td style='text-align:left;padding:5px;'>";
foreach($reqs as $r) {
$html .= "$r<br/>";
}
$html .= "</td>";
$html .= "</tr>";
}
$html .= "</table>";
return $html;
}
public function trend_analysis()
{
$prm = $this->sys_input;
$id = $prm["order_id"];
$image = "";
$note = "";
try {
$sql = "select fn_process_re_trendanalysis(?) ta";
$qry = $this->db_one->query($sql,array($id));
if ($qry) {
$row = $qry->row();
$j_tmp = json_decode($row->ta);
if ($j_tmp->image != "") {
$image = $j_tmp->image . "&ts=" . date("Ymdhnis");
}
$note = $j_tmp->note;
}
} catch(Exception $e) {
}
$req_note =$this->requirement($id);
if ($req_note != "" ) {
$note = $req_note;
$image = "";
}
$data = ["image"=>$image,
"note"=> $note,
"title"=>"Trend Analisis"];
$this->sys_ok($data);
}
public function delta_check()
{
$prm = $this->sys_input;
$id = $prm["order_id"];
$data = ["image"=>"https://www.sec.gov/files/trendChart-2018.jpg",
"note"=>$this->requirement($id),
"title"=>"Delta Check"];
$this->sys_ok($data);
}
public function confirm()
{
$prm = $this->sys_input;
$data = json_decode($prm["data"]);
if (sizeof($data) < 1)
{
$this->sys_error_db("RE Verification Confirmation", $this->db_smartone);
exit;
}
else
{
$ids = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailVerDeltaCheck', $v->delta)
->set('T_OrderDetailVerTrendAnalysis', $v->trend)
->set('T_OrderDetailVerification', $v->verification)
->set('T_OrderDetailVerDate', $v->verification == "Y" ? date('Y-m-d H:i:s') : null)
->set('T_OrderDetailVerUserID', $this->sys_user['M_UserID'])
->where('T_OrderDetailID', $v->id)
->update('t_orderdetail');
$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.Verification')
->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
$this->sys_ok($ids);
}
}
}

View File

@@ -0,0 +1,181 @@
<?php
class Io_left extends MY_Controller
{
function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search_px()
{
$prm = $this->sys_input;
$max_rst = 10;
$sdate = $prm["start_date"];
$edate = $prm["end_date"];
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "select count(distinct t_orderdetailt_testid) total
from t_orderdetail
join t_orderheader on t_orderheaderisactive = 'Y'
and t_orderheaderdate between '{$sdate} 00:00:00' and '{$edate} 23:59:59'
where t_orderdetailisactive = 'Y'
and t_orderdetailt_testisresult = 'Y'
and (t_orderdetailt_testname like ? or t_orderdetailt_testcode like ?)";
$query = $this->db_smartone->query($sql, [$search, $search]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "select t_orderdetailt_testid t_testid, t_orderdetailt_testcode t_testcode,
t_orderdetailt_testname t_testname
from t_orderdetail
join t_orderheader on t_orderheaderisactive = 'Y'
and t_orderheaderdate between '{$sdate} 00:00:00' and '{$edate} 23:59:59'
where t_orderdetailisactive = 'Y'
and t_orderdetailt_testisresult = 'Y'
and (t_orderdetailt_testname like ? or t_orderdetailt_testcode like ?)
group by t_orderdetailt_testid
order by t_orderdetailt_testname asc
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$search, $search]);
if ($query) {
$rows = $query->result_array();
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
public function search_patient()
{
$prm = $this->sys_input;
$max_rst = 10;
$sdate = $prm["start_date"];
$edate = $prm["end_date"];
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "select count(*) total
from t_orderheader
join m_patient on t_orderheaderm_patientid = m_patientid
where t_orderheaderisactive = 'Y'
and t_orderheaderdate between '{$sdate} 00:00:00' and '{$edate} 23:59:59'
and (m_patientname like ? or T_OrderHeaderLabNumber like ?)";
$query = $this->db_smartone->query($sql, [$search, $search]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "select T_OrderHeaderLabNumber order_number, m_patientname patient_name,
t_orderheaderid order_id
from t_orderheader
join m_patient on t_orderheaderm_patientid = m_patientid
where t_orderheaderisactive = 'Y'
and t_orderheaderdate between '{$sdate} 00:00:00' and '{$edate} 23:59:59'
and (m_patientname like ? or T_OrderHeaderLabNumber like ?)
order by T_OrderHeaderLabNumber desc
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$search, $search]);
if ($query) {
$rows = $query->result_array();
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
public function search_worklist()
{
$prm = $this->sys_input;
$max_rst = 10;
$sdate = $prm["start_date"];
$edate = $prm["end_date"];
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "select count(distinct t_worklistid) total
from t_worklist
join t_worklistdetail on t_worklistdetailt_worklistid = t_worklistid
and t_worklistdetailisactive = 'Y'
where t_worklistisactive = 'Y'
and (t_worklistname like ?)";
$query = $this->db_smartone->query($sql, [$search]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "select t_worklistid, t_worklistname
from t_worklist
join t_worklistdetail on t_worklistdetailt_worklistid = t_worklistid
and t_worklistdetailisactive = 'Y'
where t_worklistisactive = 'Y'
and (t_worklistname like ?)
group by t_worklistid
order by t_worklistname asc
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$search]);
if ($query) {
$rows = $query->result_array();
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
}
?>

View File

@@ -0,0 +1,277 @@
<?php
class Io_right extends MY_Controller
{
function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search_patient()
{
$prm = $this->sys_input;
$max_rst = 9999999999;
$sdate = $prm["start_date"];
$edate = $prm["end_date"];
$px_id = join(",", json_decode($prm["px_id"]));
if ($px_id == "") $px_id = -1;
// $search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "select count(distinct t_orderheaderid) total
from t_orderdetail
join t_orderheader on t_orderdetailt_orderheaderid = t_orderheaderid
and t_orderheaderisactive = 'Y'
and t_orderheaderdate between '{$sdate} 00:00:00' and '{$edate} 23:59:59'
join m_patient on t_orderheaderm_patientid = m_patientid
where t_orderdetailisactive = 'Y'
and t_orderdetailt_testid IN ({$px_id})";
$query = $this->db_smartone->query($sql);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "select T_OrderHeaderLabNumber order_number, m_patientname patient_name,
t_orderheaderid order_id, group_concat(t_orderdetailid separator ',') detail_id,
t_orderdetailt_instrumentid instrument_id,
group_concat(t_orderdetailt_testname separator ', ') test_name
from t_orderdetail
join t_orderheader on t_orderdetailt_orderheaderid = t_orderheaderid
and t_orderheaderisactive = 'Y'
and t_orderheaderdate between '{$sdate} 00:00:00' and '{$edate} 23:59:59'
join m_patient on t_orderheaderm_patientid = m_patientid
where t_orderdetailisactive = 'Y'
and t_orderdetailt_testid IN ({$px_id})
group by t_orderheaderid
order by T_OrderHeaderLabNumber desc
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql);
if ($query) {
$rows = $query->result_array();
// get instruments
$inst = $this->db_smartone->select("T_InstrumentID, T_InstrumentName", false)
->where("T_InstrumentIsActive", "Y")
->get("t_instrument")
->result_array();
foreach ($rows as $k => $v)
{
$rows[$k]['detail_id'] = explode(",", $v['detail_id']);
$rows[$k]['instrument'] = $inst;
}
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
public function search_px()
{
$prm = $this->sys_input;
$max_rst = 10;
$sdate = $prm["start_date"];
$edate = $prm["end_date"];
$order_id = $prm["order_id"];
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "select count(*) total
from t_orderdetail
where t_orderdetailisactive = 'Y'
and t_orderdetailt_testisresult = 'Y'
and t_orderdetailt_orderheaderid = ?";
$query = $this->db_smartone->query($sql, [$order_id]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "select t_orderdetailid detail_id, t_orderdetailt_testid t_testid,
t_orderdetailt_testcode t_testcode, t_orderdetailt_testname t_testname,
t_orderdetailt_instrumentid instrument_id
from t_orderdetail
where t_orderdetailisactive = 'Y'
and t_orderdetailt_testisresult = 'Y'
and t_orderdetailt_orderheaderid = ?
order by t_orderdetailt_testname asc
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$order_id]);
if ($query) {
$rows = $query->result_array();
// get instruments
$inst = $this->db_smartone->select("T_InstrumentID, T_InstrumentName", false)
->where("T_InstrumentIsActive", "Y")
->get("t_instrument")
->result_array();
foreach ($rows as $k => $v)
$rows[$k]['instrument'] = $inst;
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
public function search_worklist_patient()
{
$prm = $this->sys_input;
$max_rst = 10;
$sdate = $prm["start_date"];
$edate = $prm["end_date"];
$worklist_id = $prm["worklist_id"];
// $search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "select count(distinct t_orderheaderid) total
from t_orderdetail
join t_orderheader on t_orderdetailt_orderheaderid = t_orderheaderid
and t_orderheaderisactive = 'Y'
and t_orderheaderdate between '{$sdate} 00:00:00' and '{$edate} 23:59:59'
join t_worklistdetail on t_worklistdetailt_worklistid = ?
and t_worklistdetailisactive = 'Y'
and t_worklistdetailt_testid = t_orderdetailt_testid
join m_patient on t_orderheaderm_patientid = m_patientid
where t_orderdetailisactive = 'Y'
and t_orderdetailt_testisresult = 'Y'";
$query = $this->db_smartone->query($sql, [$worklist_id]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "select T_OrderHeaderLabNumber order_number, m_patientname patient_name,
t_orderheaderid order_id, t_orderdetailid detail_id,
0 instrument_id,
group_concat(t_orderdetailt_testname separator ', ') t_testnames
from t_orderdetail
join t_orderheader on t_orderdetailt_orderheaderid = t_orderheaderid
and t_orderheaderisactive = 'Y'
and t_orderheaderdate between '{$sdate} 00:00:00' and '{$edate} 23:59:59'
join t_worklistdetail on t_worklistdetailt_worklistid = ?
and t_worklistdetailisactive = 'Y'
and t_worklistdetailt_testid = t_orderdetailt_testid
join m_patient on t_orderheaderm_patientid = m_patientid
where t_orderdetailisactive = 'Y'
and t_orderdetailt_testisresult = 'Y'
group by t_orderheaderid
order by T_OrderHeaderLabNumber desc
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$worklist_id]);
$lq = $this->db_smartone->last_query();
if ($query) {
$rows = $query->result_array();
// get instruments
$inst = $this->db_smartone->select("T_InstrumentID, T_InstrumentName", false)
->where("T_InstrumentIsActive", "Y")
->get("t_instrument")
->result_array();
foreach ($rows as $k => $v)
$rows[$k]['instrument'] = $inst;
$result = array("total" => $tot_count, "total_page" => ceil($tot_count/$max_rst), "cur_page" => $page, "records" => $rows, "total_display" => sizeof($rows), "q" => $lq);
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
function send_orders()
{
$prm = $this->sys_input;
$data = json_decode($prm['data']);
$rst = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailT_InstrumentID', $v->instrument_id)
->where('T_OrderDetailID', $v->detail_id)
->update('t_orderdetail');
$this->db_smartone->query("
INSERT INTO t_ordertx(T_OrderTxM_PatientName,
T_OrderTxM_PatientNoReg,
T_OrderTxT_OrderHeaderID,
T_OrderTxT_OrderHeaderLabNumber,
T_OrderTxM_PatientSexCode,
T_OrderTxM_PatientDOB,
T_OrderTxM_DoctorName,
T_OrderTxT_InstrumentID,
T_OrderTxT_InstrumentTestCode,
T_OrderTxT_OrderDetailID,
T_OrderTxFlagGluc)
SELECT fn_global_patient_name(M_PatientID),
M_PatientNoReg,
T_OrderHeaderID,
T_OrderHeaderLabNumber,
M_SexCode,
M_PatientDOB,
fn_global_doctor_name(T_OrderHeaderSenderM_DoctorID),
{$v->instrument_id},
'',
T_OrderDetailID,
T_TestFlagGluc
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
JOIN m_sex on M_PatientM_SexID = M_SexID
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
WHERE T_OrderDetailID = {$v->detail_id}
");
$rst[] = $this->db_smartone->insert_id();
}
$this->sys_ok($rst);
}
}
?>

View File

@@ -0,0 +1,230 @@
<?php
class Ro_master extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RO Master Reference API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "select count(DISTINCT t_orderrefmasterID) total
from t_orderrefmaster
join t_test on t_orderrefmastert_testid = t_testid
join m_company on t_orderrefmastertom_companyid = m_companyid
where T_OrderRefMasterIsActive = 'Y'
and T_TestName LIKE ?
order by T_TestName ASC";
$query = $this->db_smartone->query($sql, [$search]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("RO Master Reference API Count", $this->db_smartone);
exit;
}
$sql = "select T_OrderRefMasterID, T_TestID, T_TestName, T_TestCode,
IFNULL(M_CompanyID, 0) M_CompanyID, IFNULL(M_CompanyName, '') M_CompanyName,
IFNULL(M_BranchID, 0) M_BranchID, IFNULL(M_BranchName, '') M_BranchName,
t_orderrefmasterisinternal is_internal,
IFNULL(S_RegionalID, 0) S_RegionalID, IFNULL(S_RegionalName, '') S_RegionalName
from t_orderrefmaster
join t_test on t_orderrefmastert_testid = t_testid
left join m_company on t_orderrefmastertom_companyid = m_companyid
left join m_branch on t_orderrefmastertom_branchid = m_branchid
left join s_regional on t_orderrefmastertos_regionalid = s_regionalid
where T_OrderRefMasterIsActive = 'Y'
and T_TestName LIKE ?
order by T_TestName ASC
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$search]);
if ($query) {
$rows = $query->result_array();
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RO Master Reference API", $this->db_smartone);
exit;
}
}
public function search_company()
{
$prm = $this->sys_input;
$max_rst = 12;
$tot_count =0;
$q = [
'search' => '%'
];
if ($prm['search'] != '')
{
$q['search'] = "%{$prm['search']}%";
}
// QUERY TOTAL
$sql = "select count(*) total
from
m_company
where M_CompanyIsActive = 'Y'
and M_CompanyIsLabTo = 'Y'
and M_CompanyName like ?";
$query = $this->db_smartone->query($sql, array($q['search']));
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("m_patient count",$this->db_smartone);
exit;
}
$sql = "select M_CompanyID, M_CompanyName,
IFNULL( concat('[', group_concat( json_object('M_MouID', M_MouID, 'M_MouName', M_MouName, 'M_MouStartDate', M_MouStartDate, 'M_MouEndDate', M_MouEndDate) ), ']'), '[]') as mou
from m_company
left join m_mou on M_MouM_CompanyID = M_CompanyID and M_MouIsActive = 'Y'
where M_CompanyIsActive = 'Y'
and M_CompanyIsLabTo = 'Y'
and M_CompanyName like ?
group by m_companyid";
$query = $this->db_smartone->query($sql, array($q['search']));
if ($query) {
$rows = $query->result_array();
foreach ($rows as $k => $v)
$rows[$k]['mou'] = json_decode($v['mou']);
$result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows));
$this->sys_ok($result);
}
else {
$this->sys_error_db("m_company rows",$this->db_smartone);
exit;
}
}
public function search_px()
{
$prm = $this->sys_input;
$search = $prm["search"];
$exclude = join(",", json_decode($prm["exclude"]));
$sql_param = array("%$search%", $exclude);
$sql = "select count(distinct T_TestID) total
from t_test
where T_TestName like ?
and T_TestIsResult = 'Y'
and NOT FIND_IN_SET(T_TestID, ?)";
$query = $this->db_smartone->query($sql, $sql_param);
$tot_count =0;
if ($query) {
$tot_count = $query->result_array()[0]["total"];
} else {
$this->sys_error_db("PX count", $this->db_smartone);
exit;
}
$sql = "select distinct T_TestID, T_TestName, 'N' IsFromPanel, T_TestRequirement
from t_test
where T_TestName like ?
and T_TestIsResult = 'Y'
and NOT FIND_IN_SET(T_TestID, ?)
order by T_TestName ASC
limit 0, 20";
$query = $this->db_smartone->query($sql, $sql_param);
$rows = $query->result_array();
$result = array("total" => $tot_count, "records" => $rows, "query" => $this->db_smartone->last_query() );
$this->sys_ok($result);
exit;
}
public function save()
{
$prm = $this->sys_input;
$data = $prm['data'];
$sql = "CALL sp_process_ref_master_save('{$data}');";
$query = $this->db_smartone->query($sql);
if ($query)
{
$rst = $query->row();
echo json_encode($rst);
}
else
{
$this->sys_error_db("save master", $this->db_smartone);
exit;
}
}
public function search_regional()
{
$prm = $this->sys_input;
$sql = "select count(*) total
from s_regional
where S_RegionalIsActive = 'Y'";
$query = $this->db_smartone->query($sql);
$tot_count =0;
if ($query) {
$tot_count = $query->result_array()[0]["total"];
} else {
$this->sys_error_db("Regional count", $this->db_smartone);
exit;
}
$sql = "select S_RegionalID, S_RegionalName,
CONCAT('[', GROUP_CONCAT(JSON_OBJECT('M_BranchID', M_BranchID, 'M_BranchName', M_BranchName) SEPARATOR ','), ']') branches
from s_regional
left join m_branch on m_branchs_regionalid = s_regionalid and m_branchisactive = 'Y'
where S_RegionalIsActive = 'Y'
group by S_RegionalID
order by S_RegionalName ASC";
$query = $this->db_smartone->query($sql);
if ($query)
{
$rows = $query->result_array();
foreach ($rows as $k => $v)
{
$rows[$k]['branches'] = json_decode($v['branches']);
}
$result = array("total" => $tot_count, "records" => $rows, "query" => $this->db_smartone->last_query() );
$this->sys_ok($result);
exit;
}
}
}

View File

@@ -0,0 +1,136 @@
<?php
class Ro_patient extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RO Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$sdate = $prm["sdate"];
$edate = $prm["edate"];
$nolab = '%' . $prm["nolab"] . '%';
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "select count(DISTINCT T_OrderHeaderID) total
from t_orderheader
join t_orderdetail on t_orderheaderid = t_orderdetailt_orderheaderid
and t_orderdetailisactive = 'Y' and T_OrderDetailVerification <> 'Y'
join t_orderrefmaster on t_orderrefmastert_testid = t_orderdetailt_testid
and t_orderrefmasterisactive = 'Y'
left join t_orderrefout ON T_OrderRefOutT_OrderHeaderID = t_orderheaderid
AND T_OrderRefOutT_TestID = t_orderdetailt_testid
AND T_OrderRefOutIsActive = 'Y'
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
JOIN m_company on T_OrderRefMasterToM_CompanyID = M_CompanyID
where T_OrderheaderIsActive = 'Y'
and T_OrderheaderDate BETWEEN '{$sdate} 00:00:00' and '{$edate} 23:59:59'
and T_OrderHeaderLabNumber LIKE ?
and M_PatientName LIKE ?
order by T_OrderHeaderLabNumber DESC";
$query = $this->db_smartone->query($sql, [$nolab, $search]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "select T_OrderHeaderID, T_OrderHeaderLabNumber, T_OrderHeaderDate,
M_PatientID, M_PatientNoReg, fn_global_patient_name(M_PatientID) M_PatientName,
M_PatientDOB, T_OrderHeaderM_PatientAge, M_PatientHP,
T_OrderHeaderFoNote, T_OrderHeaderSamplingNote, T_OrderHeaderResultNote,
concat('[',
group_concat(JSON_OBJECT('T_TestID', T_TestID, 'T_TestCode', T_TestCode, 'T_TestName', T_TestName,
'M_CompanyID', M_CompanyID, 'M_CompanyName', M_CompanyName,
'M_BranchID', T_OrderRefMasterToM_BranchID, 'is_internal', T_OrderRefMasterIsInternal,
'sent', IFNULL(T_OrderRefOutIsSent, 'N'))
order by T_TestName SEPARATOR ','),
']') T_TestName
from t_orderheader
join t_orderdetail on t_orderheaderid = t_orderdetailt_orderheaderid
and t_orderdetailisactive = 'Y' and T_OrderDetailVerification <> 'Y'
join t_orderrefmaster on t_orderrefmastert_testid = t_orderdetailt_testid
and t_orderrefmasterisactive = 'Y'
join t_test on t_orderdetailt_testid = t_testid
left join t_orderrefout ON T_OrderRefOutT_OrderHeaderID = t_orderheaderid
AND T_OrderRefOutT_TestID = t_orderdetailt_testid
AND T_OrderRefOutIsActive = 'Y'
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
JOIN m_company on T_OrderRefMasterToM_CompanyID = M_CompanyID
where T_OrderheaderIsActive = 'Y'
and T_OrderheaderDate BETWEEN '{$sdate} 00:00:00' and '{$edate} 23:59:59'
and T_OrderHeaderLabNumber LIKE ?
and M_PatientName LIKE ?
group by T_OrderHeaderID
order by T_OrderHeaderLabNumber DESC
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$nolab, $search]);
if ($query) {
$rows = $query->result_array();
foreach ($rows as $k => $v)
$rows[$k]['T_TestName'] = json_decode($v['T_TestName']);
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
function send()
{
$prm = $this->sys_input;
$data = $prm['data'];
$sql = "CALL sp_process_ref_send('{$data}', '{$this->sys_input['M_UserID']}')";
$query = $this->db_smartone->query($sql);
if ($query)
{
$r = $query->row();
if ($r->status == "OK")
$this->sys_ok($r);
else
{
$this->sys_error($r->message);
exit;
}
}
else
$this->sys_error("ERROR");
}
}

View File

@@ -0,0 +1,80 @@
<?php
class Ri_detail extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RI Detail API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$order_id = $prm["order_id"];
$search = '%'.$prm["query"].'%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "SELECT COUNT(*)
FROM t_orderrefintdetail
JOIN t_orderheader ON T_OrderRefIntDetailT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderdetail ON T_OrderRefIntDetailT_OrderDetailID = T_OrderDetailID
JOIN t_test ON T_OrderRefIntDetailT_TestID = T_TestID
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
JOIN m_statusref ON T_OrderRefIntDetailM_StatusRefID = M_StatusRefID
WHERE T_OrderRefIntDetailIsActive = 'Y'
AND T_OrderRefIntDetailT_OrderRefIntID = ?
AND (M_PatientName LIKE ? OR T_OrderHeaderLabNumber LIKE ?)";
$query = $this->db_smartone->query($sql, [$order_id, $search, $search]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "SELECT T_OrderHeaderLabNumber, fn_global_patient_name(T_OrderHeaderM_PatientID) patient_name,
T_TestName, T_OrderRefIntDetailResult, T_OrderRefIntDetailPromise,
M_StatusRefName
FROM t_orderrefintdetail
JOIN t_orderheader ON T_OrderRefIntDetailT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderdetail ON T_OrderRefIntDetailT_OrderDetailID = T_OrderDetailID
JOIN t_test ON T_OrderRefIntDetailT_TestID = T_TestID
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
JOIN m_statusref ON T_OrderRefIntDetailM_StatusRefID = M_StatusRefID
WHERE T_OrderRefIntDetailIsActive = 'Y'
AND T_OrderRefIntDetailT_OrderRefIntID = ?
AND (M_PatientName LIKE ? OR T_OrderHeaderLabNumber LIKE ?)
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$order_id, $search, $search]);
if ($query) {
$rows = $query->result_array();
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RI Detail rows", $this->db_smartone);
exit;
}
}
}

View File

@@ -0,0 +1,91 @@
<?php
class Ri_header extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RI Header API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$sdate = $prm["sdate"];
$edate = $prm["edate"];
$nolab = '%' . $prm["nolab"] . '%';
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "SELECT COUNT(*)
FROM t_orderrefint
JOIN m_branch ON T_OrderRefIntDestM_BranchID = M_BranchID
JOIN m_statusref ON T_OrderRefIntM_StatusRefID = M_StatusRefID
WHERE T_OrderRefIntIsActive = 'Y'
AND T_OrderRefIntDate = ?";
$query = $this->db_smartone->query($sql, [$sdate]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "SELECT T_OrderRefIntID, T_OrderRefIntDate, T_OrderRefIntNumber, M_BranchID, M_BranchName,
M_StatusRefName T_OrderRefIntStatus, M_StatusRefCode
FROM t_orderrefint
JOIN m_branch ON T_OrderRefIntDestM_BranchID = M_BranchID
JOIN m_statusref ON T_OrderRefIntM_StatusRefID = M_StatusRefID
WHERE T_OrderRefIntIsActive = 'Y'
AND T_OrderRefIntDate = ?
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$sdate]);
if ($query) {
$rows = $query->result_array();
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RI Header rows", $this->db_smartone);
exit;
}
}
public function confirm()
{
$prm = $this->sys_input;
$ref_id = $prm['ref_id'];
$sql = "CALL sp_process_refinternal_confirm(?)";
$query = $this->db_smartone->query($sql, [$ref_id]);
if ($query) {
$rows = $query->row();
$this->sys_ok($rows);
}
else {
$this->sys_error_db("REF INTERNAL CONFIRM", $this->db_smartone);
exit;
}
}
}

View File

@@ -0,0 +1,126 @@
<?php
class Ri_new extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RI New API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search_branch()
{
$sql = "SELECT M_BranchID, M_BranchName, IFNULL(S_SystemsID, 0) `default`
FROM m_branch
LEFT JOIN conf_systems ON M_BranchID = S_SystemsM_BranchID
WHERE M_BranchIsActive = 'Y'
ORDER BY M_BranchName";
$query = $this->db_smartone->query($sql);
if ($query) {
$rows = $query->result_array();
$result = array("records" => $rows, "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("Branch rows", $this->db_smartone);
exit;
}
}
public function search_worklist()
{
$sql = "SELECT T_WorklistID, T_WorklistName,
CONCAT('[', GROUP_CONCAT(JSON_OBJECT('test_id', T_TestID, 'test_name', T_TestName) SEPARATOR ','), ']') tests
FROM t_worklist
JOIN t_worklistdetail ON T_WorklistDetailT_WorklistID = T_WorklistID
AND T_WorklistDetailIsActive = 'Y'
JOIN t_test ON T_WorklistDetailT_TestID = T_TestID
WHERE T_WorklistIsActive = 'Y'
AND T_WorklistIsRujukan = 'Y'
AND `fn_process_refinternal_hasorder`(T_TestID) > 0
GROUP BY T_WorklistID
ORDER BY T_WorklistName, T_TestName";
$query = $this->db_smartone->query($sql);
if ($query) {
$rows = $query->result_array();
foreach($rows as $k => $v)
$rows[$k]['tests'] = json_decode($v['tests']);
$result = array("records" => $rows, "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("Branch rows", $this->db_smartone);
exit;
}
}
public function search_patient()
{
// print_r($this->sys_user);
$prm = $this->sys_input;
$ids = $prm['ids'];
$sql = "SELECT b.T_OrderDetailID, T_OrderHeaderID, T_OrderHeaderLabNumber, b.T_OrderDetailT_TestName,
T_OrderHeaderDate, fn_global_patient_name(T_OrderHeaderM_PatientID) patient_name
FROM t_ordersample
JOIN t_test ON T_OrderSampleT_SampleTypeID = T_TestT_SampleTypeID
AND FIND_IN_SET(T_TestID, ?)
JOIN t_orderdetail a ON a.T_OrderDetailT_OrderHeaderID = T_OrderSampleT_OrderHeaderID
AND a.T_OrderDetailT_TestID = T_TestID
AND a.T_OrderDetailIsActive = 'Y'
JOIN t_orderdetail b ON a.T_OrderDetailT_OrderHeaderID = b.T_OrderDetailT_OrderHeaderID
AND b.T_OrderdetailIsActive = 'Y'
AND b.T_OrderDetailT_TestSasCode LIKE CONCAT(a.T_OrderDetailT_TestSasCode, '%')
AND b.T_OrderDetailT_TestIsResult = 'Y'
LEFT JOIN t_orderrefintdetail ON b.T_OrderDetailID = T_OrderRefIntDetailT_OrderDetailID
AND T_ORderRefIntDetailIsActive = 'Y'
JOIN t_orderheader ON a.T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
WHERE T_OrderSampleWorklistReceive = 'Y'
AND T_OrderSampleIsActive = 'Y'
AND T_OrderRefIntDetailID IS NULL";
$query = $this->db_smartone->query($sql, [$ids]);
if ($query) {
$rows = $query->result_array();
$result = array("records" => $rows, "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("Patient rows", $this->db_smartone);
exit;
}
}
public function save()
{
$prm = $this->sys_input;
$ids = json_encode(explode(',', $prm['ids']));
$branch_id = $prm['branch_id'];
$sql = "CALL sp_process_refinternal_save(?, ?)";
$query = $this->db_smartone->query($sql, [$branch_id, $ids]);
if ($query) {
$rows = $query->row();
$this->sys_ok($rows);
}
else {
$this->sys_error_db("Patient rows", $this->db_smartone);
exit;
}
}
}

View File

@@ -0,0 +1,75 @@
<?php
class Ri_samplereceive_header extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RI Sample Receive Header API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$sdate = $prm["sdate"];
$edate = $prm["edate"];
$nolab = '%' . $prm["nolab"] . '%';
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "SELECT COUNT(*)
FROM xfer_internal
JOIN m_branch ON T_OrderRefIntSrcM_BranchID = M_BranchID
JOIN m_statusref ON T_OrderRefIntM_StatusRefID = M_StatusRefID
WHERE Xfer_InternalIsActive = 'Y'
AND Xfer_InternalType = 'I'
AND Xfer_InternalDataType = 'REF.ORDER'";
$query = $this->db_smartone->query($sql, [$sdate]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "SELECT Xfer_InternalID, Xfer_InternalDate, M_BranchID, , T_OrderRefIntNumber, M_BranchID, M_BranchName,
M_StatusRefName T_OrderRefIntStatus, M_StatusRefCode
FROM xfer_internal
JOIN m_branch ON T_OrderRefIntSrcM_BranchID = M_BranchID
JOIN m_statusref ON T_OrderRefIntM_StatusRefID = M_StatusRefID
WHERE Xfer_InternalIsActive = 'Y'
AND Xfer_InternalType = 'I'
AND Xfer_InternalDataType = 'REF.ORDER'
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$sdate]);
if ($query) {
$rows = $query->result_array();
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RI Sample Receive Header rows", $this->db_smartone);
exit;
}
}
}

View File

@@ -0,0 +1,59 @@
<?php
class Re_normal_method extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Normal Methode API";
}
public function __construct()
{
parent::__construct();
$this->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_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->row();
$this->sys_ok(['data'=>json_decode($rows->data), 'query'=>$this->db_smartone->last_query()]);
return;
}
$this->sys_error_db("Change Methode", $this->db_smartone);
}
}
?>

View File

@@ -0,0 +1,42 @@
<?php
class Re_normal_methode extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Normal Methode API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search_methode()
{
$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_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);
}
}
?>

View File

@@ -0,0 +1,212 @@
<?php
class Re_patient extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$sdate = $prm["start_date"] . '%';
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
$group_id = 0;
if (isset($prm['group_id'])) $group_id = $prm['group_id'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// OVERRIDE
$max_rst = 9999;
$offset = 0;
$q_group;
if ($group_id != 0)
$q_group = "JOIN t_worklistdetail ON T_WorklistDetailIsActive = 'Y'
AND T_WorklistDetailT_WorklistID = {$group_id}
AND T_WorklistDetailT_TestID = T_OrderDetailT_TestID";
// QUERY TOTAL
$sql = "SELECT count(DISTINCT T_OrderHeaderID) total
from t_orderheader
JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeadeRID
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
{$q_group}
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
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 helper_order ON Helper_OrderT_OrderHeaderID = T_OrderHeaderID
-- AND Helper_OrderIsLAB = 'Y'
where T_OrderHeaderIsActive = 'Y'
and (T_OrderHeaderAddOnWorklistReceiveDateTime LIKE ? OR T_OrderPromiseDateTime LIKE ?)
and
( M_PatientName LIKE ?
or T_OrderHeaderLabNumber like ?
)
AND T_OrderHeaderAddOnFOVerification = 'Y'
AND T_OrderHeaderAddOnVerificationDone = 'N'
order by T_OrderHeaderLabNumber DESC";
$query = $this->db_smartone->query($sql, [$sdate, $sdate, $search, $search ]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "SELECT *,
CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT('\"', T_OrderPromiseDateTime, '\"') SEPARATOR ','), ']') order_promise FROM (
select T_OrderHeaderID, T_OrderHeaderLabNumber, T_OrderHeaderDate,
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
from t_orderheader
JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID
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
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
{$q_group}
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
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 helper_order ON Helper_OrderT_OrderHeaderID = T_OrderHeaderID
-- AND Helper_OrderIsLAB = 'Y'
JOIN nat_lang la ON T_OrderHeaderM_LangID = la.Nat_LangID
LEFT JOIN nat_lang lb ON T_OrderHeaderAddOnSecondM_LangID = lb.Nat_LangID
where T_OrderHeaderIsActive = 'Y'
and (T_OrderHeaderAddOnWorklistReceiveDateTime LIKE ? OR T_OrderPromiseDateTime LIKE ?)
and
( M_PatientName LIKE ?
or T_OrderHeaderLabNumber like ?
)
-- AND T_OrderHeaderAddOnResultDone <> 'Y'
AND T_OrderHeaderAddOnFOVerification = 'Y'
AND T_OrderHeaderAddOnVerificationDone = 'N'
order by FIELD(T_OrderHeaderIsCito, 'Y', 'N') ASC, T_OrderPromiseDateTime ASC, T_OrderHeaderLabNumber DESC) x
GROUP BY T_OrderHeaderID
order by FIELD(T_OrderHeaderIsCito, 'Y', 'N') ASC, T_OrderPromiseDateTime ASC, T_OrderHeaderLabNumber DESC
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$sdate, $sdate, $search, $search ]);
// file_put_contents("/home/one/patient_group.txt", $this->db_smartone->last_query());
if ($query) {
$rows = $query->result_array();
$tmp_ohnumber = [];
foreach ($rows as $k => $v)
{
$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));
}
$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());
$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();
$this->sys_ok(json_decode($row->data));
exit;
}
$this->sys_error_db("RESULT REQ", $this->db_smartone);
}
}

View File

@@ -0,0 +1,510 @@
<?php
class Re_px extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Px API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search_old()
{
$prm = $this->sys_input;
$max_rst = 99;
$id = $prm["order_id"];
// QUERY TOTAL
// $sql = "";
// $query = $this->db_smartone->query($sql);
// if ($query) {
// $tot_count = $query->result_array()[0]["total"];
// }
// else {
// $this->sys_error_db("re count", $this->db_smartone);
// exit;
// }
$tot_count = 0;
$sql = "SELECT T_TestID
FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TEstID = T_TestID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
AND T_TestParentT_TestID = 0";
$query = $this->db_smartone->query($sql, [$id]);
if ($query) {
$rst = [];
$rows = $query->result_array();
foreach ($rows as $k => $v)
{
$sql = "WITH RECURSIVE ancestors AS
(
SELECT t_testid, t_testname,
T_OrderDetailResult result, T_OrderDetailResult result_old, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, T_TestIsQuantitative is_quantitative,
1 level FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
WHERE T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
AND t_testid = ?
UNION
SELECT g.t_testid, g.t_testname,
T_OrderDetailResult result, T_OrderDetailResult result_old, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, g.T_TestIsQuantitative is_quantitative,
level+1 level
FROM ancestors a, t_orderdetail f
JOIN t_test g ON f.T_OrderDetailT_TestID = g.T_TestID
WHERE T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
AND g.t_testparentt_testid = a.t_testid and g.t_testisactive = 'Y' )
SELECT * FROM ancestors;";
$query = $this->db_smartone->query($sql, [$id, $v['T_TestID'], $id]);
$r = $query->result_array();
foreach($r 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();
}
$rst[] = $v;
}
}
$result = array("total" => $tot_count, "records" => $rst, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RE Px rows", $this->db_smartone);
exit;
}
}
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 ($lang == $this->lang_default_code)
// {
if ($group_id != 0)
{
$sql = "SELECT IFNULL(y.T_TesTID, x.t_testid) t_testid,
IFNULL(y.T_TestName, x.t_testname) t_testname,
IFNULL(y.T_TestNat_TesTID, x.nattest_id) nattest_id,
IFNULL(y.T_OrderDetailResult, x.result) result,
IFNULL(y.T_OrderDetailResult, x.result_old) result_old,
y.T_OrderDetailResultFlag result_flag,
IFNULL(y.T_OrderDetailNote, x.note) note,
IFNULL(y.T_OrderDetailNote, x.note_old) note_old,
IFNULL(y.T_OrderDetailID, x.id) id,
IFNULL(y.T_OrderDetailT_TestIsResult, x.is_result) is_result,
IFNULL(y.T_TestIsQuantitative, x.is_quantitative) is_quantitative,
IFNULL(y.T_OrderDetailNat_NormalValueID, x.normal_id) normal_id,
IFNULL(y.T_OrderDetailNormalValueNote, x.normal_note) normal_note,
IFNULL(y.T_OrderDetailNat_UnitName, x.unit_name) unit_name,
IFNULL(y.T_OrderdetailNat_MethodeID, x.methode_id) methode_id,
IFNULL(y.T_OrderdetailNat_MethodeName, x.methode_name) methode_name,
IFNULL(y.T_OrderDetailVerification, x.T_OrderDetailVerification) T_OrderDetailVerification,
IFNULL(y.T_OrderDetailT_OrderHeaderID, x.T_OrderDetailT_OrderHeaderID) T_OrderDetailT_OrderHeaderID,
IFNULL(y.T_OrderDetailT_TestSasCode, x.T_OrderDetailT_TestSasCode) T_OrderDetailT_TestSasCode,
y.T_OrderSampleReceive sample_receive,
y.T_OrderSampleWorklistReceive sample_worklist_receive,
y.T_OrderSampleProcessing sample_processing,
y.PreAnalyticID pre_analytic,
CAST( level + (LENGTH(y.T_OrderDetailT_TestSasCode) - LENGTH(x.T_OrderDetailT_TestSasCode))/2 as SIGNED) level,
y.T_OrderDetailAddOnResample `resample`, y.T_OrderDetailAddOnResampleStatus resample_status,
y.T_OrderDetailAddOnRef ref
FROM (
SELECT IFNULL(a.t_testid, b.t_testid) t_testid, IFNULL(a.t_testname, b.t_testname) t_testname,
T_OrderDetailResult result, T_OrderDetailResult result_old, T_OrderDetailNote note, T_OrderDetailNote note_old, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
COUNT(b.T_TestID) level, T_OrderDetailNat_NormalValueID normal_id,
T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n,
T_OrderDetailVerification, T_OrderDetailT_OrderHeaderID, IFNULL(T_OrderDetailT_TestSasCode, b.T_TestSasCode) T_OrderDetailT_TestSasCode,
T_OrderSampleReceive, T_OrderSampleProcessing, T_OrderSampleWorklistReceive, PreAnalyticID,
T_OrderDetailResultFlag result_flag,
T_OrderDetailAddOnResample `resample`, T_OrderDetailAddOnResampleStatus resample_status
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = a.T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
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 AND a.T_TestIsResult = 'Y'))
LEFT JOIN t_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = T_OrderDetailID
LEFT JOIN pre_analytic ON PreAnalyticNat_TestID = a.T_TestNat_TestID AND PreAnalyticDate = date(now()) and PreAnalyticIsActive = 'Y'
AND PreAnalyticT_WorklistID = ?
LEFT JOIN t_orderdetailaddon ON T_OrderDetailID = T_OrderDetailAddOnT_OrderDetailID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_TestID IN
( SELECT T_WorklistDetailT_TestID
FROM t_worklistdetail
WHERE T_WorklistDetailIsactive = 'Y' ANd T_WorklistDetailT_WorklistID = ?
)
GROUP BY a.T_TestID
ORDER BY T_OrderDetailT_TestSasCode ASC
) x
LEFT JOIN (
SELECT *
FROM t_orderdetail
LEFT JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
LEFT JOIN t_test ON T_OrderDetailT_TestID = T_TestID
LEFT JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
LEFT JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
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 T_TestT_SampleTypeID = os.T_OrderSampleT_SampleTypeID
LEFT JOIN pre_analytic ON PreAnalyticNat_TestID = T_TestNat_TestID AND PreAnalyticDate = date(now()) and PreAnalyticIsActive = 'Y'
AND PreAnalyticT_WorklistID = ?
LEFT JOIN t_orderdetailaddon ON T_OrderDetailID = T_OrderDetailAddOnT_OrderDetailID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
) y
ON x.T_OrderDetailT_OrderHeaderID = y.T_OrderDetailT_OrderHeaderID
AND y.T_OrderDetailT_TestSasCode LIKE CONCAT(x.T_OrderDetailT_TestSasCode, '%')
GROUP BY t_testid
order by y.T_TestSasCode
";
$query = $this->db_smartone->query($sql, [$id, $group_id, $id, $group_id, $id, $group_id, $id]);
$lq = $this->db_smartone->last_query();
}
else
{
$sql = "SELECT *, 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,
PreAnalyticID pre_analytic,
T_OrderHeaderID order_id, y.T_OrderDetailT_TestSasCode test_sas_code,
tx.T_TestSasCode,
T_OrderDetailAddOnResample `resample`, T_OrderDetailAddOnResampleStatus resample_status,
T_OrderDetailAddOnRef ref
FROM t_orderdetail x
JOIN t_test tx ON x.T_OrderDetailT_TestID = T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = tx.T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
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 a.t_testid, T_OrderDetailLangNat_TestLangName t_testname,
// T_OrderDetailLangResult result, T_OrderDetailLangResult result_old, T_OrderDetailLangNote note, T_OrderDetailLangNote note_old, T_OrderDetailLangID id,
// T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
// COUNT(b.T_TestID) level, T_OrderDetailVerification
// FROM t_orderdetail
// JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
// AND a.T_TestIsNonLab = ''
// LEFT JOIN t_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
// JOIN t_orderdetaillang ON T_OrderDetailLangT_OrderDetailID = T_OrderDetailID
// AND T_OrderDetailLangIsActive = 'Y'
// AND T_OrderDetailLangNat_LangID = ?
// WHERE T_OrderDetailT_OrderHeaderID = ?
// AND T_OrderDetailIsActive = 'Y'
// GROUP BY a.T_TestID
// ORDER BY T_OrderDetailT_TestSasCode ASC
// ";
// $query = $this->db_smartone->query($sql, [$lang_id, $id ]);
// }
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;
}
$ids = [];
foreach ($data as $k => $v)
{
$y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$v->order_id}', '{$v->test_id}') c")
->row();
$req_status = $y->c;
if ($lang == $this->lang_default_code)
{
$this->db_smartone->set('T_OrderDetailResult', $v->result)
->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
$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 = 12;
// 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;
}
}
}

View File

@@ -0,0 +1,474 @@
<?php
class Re_px_2 extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Px API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search_old()
{
$prm = $this->sys_input;
$max_rst = 99;
$id = $prm["order_id"];
// QUERY TOTAL
// $sql = "";
// $query = $this->db_smartone->query($sql);
// if ($query) {
// $tot_count = $query->result_array()[0]["total"];
// }
// else {
// $this->sys_error_db("re count", $this->db_smartone);
// exit;
// }
$tot_count = 0;
$sql = "SELECT T_TestID
FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TEstID = T_TestID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
AND T_TestParentT_TestID = 0";
$query = $this->db_smartone->query($sql, [$id]);
if ($query) {
$rst = [];
$rows = $query->result_array();
foreach ($rows as $k => $v)
{
$sql = "WITH RECURSIVE ancestors AS
(
SELECT t_testid, t_testname,
T_OrderDetailResult result, T_OrderDetailResult result_old, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, T_TestIsQuantitative is_quantitative,
1 level FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
WHERE T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
AND t_testid = ?
UNION
SELECT g.t_testid, g.t_testname,
T_OrderDetailResult result, T_OrderDetailResult result_old, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, g.T_TestIsQuantitative is_quantitative,
level+1 level
FROM ancestors a, t_orderdetail f
JOIN t_test g ON f.T_OrderDetailT_TestID = g.T_TestID
WHERE T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
AND g.t_testparentt_testid = a.t_testid and g.t_testisactive = 'Y' )
SELECT * FROM ancestors;";
$query = $this->db_smartone->query($sql, [$id, $v['T_TestID'], $id]);
$r = $query->result_array();
foreach($r 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();
}
$rst[] = $v;
}
}
$result = array("total" => $tot_count, "records" => $rst, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RE Px rows", $this->db_smartone);
exit;
}
}
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 ($lang == $this->lang_default_code)
// {
if ($group_id != 0)
{
$sql = "SELECT IFNULL(y.T_TesTID, x.t_testid) t_testid,
IFNULL(y.T_TestName, x.t_testname) t_testname,
IFNULL(y.T_TestNat_TesTID, x.nattest_id) nattest_id,
IFNULL(y.T_OrderDetailResult, x.result) result,
IFNULL(y.T_OrderDetailResult, x.result_old) result_old,
IFNULL(y.T_OrderDetailNote, x.note) note,
IFNULL(y.T_OrderDetailNote, x.note_old) note_old,
IFNULL(y.T_OrderDetailID, x.id) id,
IFNULL(y.T_OrderDetailT_TestIsResult, x.is_result) is_result,
IFNULL(y.T_TestIsQuantitative, x.is_quantitative) is_quantitative,
IFNULL(y.T_OrderDetailNat_NormalValueID, x.normal_id) normal_id,
IFNULL(y.T_OrderDetailNormalValueNote, x.normal_note) normal_note,
IFNULL(y.T_OrderDetailNat_UnitName, x.unit_name) unit_name,
IFNULL(y.T_OrderdetailNat_MethodeID, x.methode_id) methode_id,
IFNULL(y.T_OrderdetailNat_MethodeName, x.methode_name) methode_name,
IFNULL(y.T_OrderDetailVerification, x.T_OrderDetailVerification) T_OrderDetailVerification,
IFNULL(y.T_OrderDetailT_OrderHeaderID, x.T_OrderDetailT_OrderHeaderID) T_OrderDetailT_OrderHeaderID,
IFNULL(y.T_OrderDetailT_TestSasCode, x.T_OrderDetailT_TestSasCode) T_OrderDetailT_TestSasCode,
IFNULL(y.T_OrderSampleReceive, x.T_OrderSampleReceive) sample_receive,
IFNULL(y.T_OrderSampleWorklistReceive, x.T_OrderSampleWorklistReceive) sample_worklist_receive,
IFNULL(y.T_OrderSampleProcessing, x.T_OrderSampleProcessing) sample_processing,
IFNULL(y.PreAnalyticID, x.PreAnalyticID) pre_analytic,
CAST( level + (LENGTH(y.T_OrderDetailT_TestSasCode) - LENGTH(x.T_OrderDetailT_TestSasCode))/2 as SIGNED) level
FROM (
SELECT IFNULL(a.t_testid, b.t_testid) t_testid, IFNULL(a.t_testname, b.t_testname) t_testname,
T_OrderDetailResult result, T_OrderDetailResult result_old, T_OrderDetailNote note, T_OrderDetailNote note_old, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
COUNT(b.T_TestID) level, T_OrderDetailNat_NormalValueID normal_id,
T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n,
T_OrderDetailVerification, T_OrderDetailT_OrderHeaderID, IFNULL(T_OrderDetailT_TestSasCode, b.T_TestSasCode) T_OrderDetailT_TestSasCode,
T_OrderSampleReceive, T_OrderSampleProcessing, T_OrderSampleWorklistReceive, PreAnalyticID
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
JOIN t_test a ON 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 AND a.T_TestIsResult = 'Y'))
LEFT JOIN t_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = T_OrderDetailID
LEFT JOIN pre_analytic ON PreAnalyticNat_TestID = a.T_TestNat_TestID AND PreAnalyticDate = date(now()) and PreAnalyticIsActive = 'Y'
AND PreAnalyticT_WorklistID = ?
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_TestID IN
( SELECT T_WorklistDetailT_TestID
FROM t_worklistdetail
WHERE T_WorklistDetailIsactive = 'Y' ANd T_WorklistDetailT_WorklistID = ?
)
GROUP BY a.T_TestID
ORDER BY T_OrderDetailT_TestSasCode ASC) x
LEFT JOIN (
SELECT *
FROM t_orderdetail
LEFT JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
LEFT JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND 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 T_TestT_SampleTypeID = os.T_OrderSampleT_SampleTypeID
LEFT JOIN pre_analytic ON PreAnalyticNat_TestID = T_TestNat_TestID AND PreAnalyticDate = date(now()) and PreAnalyticIsActive = 'Y'
AND PreAnalyticT_WorklistID = ?
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
) y
ON x.T_OrderDetailT_OrderHeaderID = y.T_OrderDetailT_OrderHeaderID
AND y.T_OrderDetailT_TestSasCode LIKE CONCAT(x.T_OrderDetailT_TestSasCode, '%')
GROUP BY t_testid";
$query = $this->db_smartone->query($sql, [$id, $group_id, $id, $group_id, $id, $group_id, $id]);
$lq = $this->db_smartone->last_query();
}
else
{
$sql = "SELECT *, cOUNT(a2.T_OrderDetailID) level FROM (
SELECT IFNULL(y.T_OrderDetailT_TestID, x.T_OrderDetailT_TestID) t_testid,
IFNULL(y.T_OrderDetailT_TestName, x.T_OrderDetailT_TestName) t_testname,
x.T_OrderDetailResult result, x.T_OrderDetailResult result_old, x.T_OrderDetailNote note, x.T_OrderDetailNote note_old, y.T_OrderDetailID id,
x.T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
x.T_OrderDetailNat_NormalValueID normal_id,
x.T_OrderDetailNormalValueNote normal_note, x.T_OrderDetailNat_UnitName unit_name,
x.T_OrderdetailNat_MethodeID methode_id, x.T_OrderdetailNat_MethodeName methode_name,
a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n,
x.T_OrderDetailVerification, T_OrderSampleReceive sample_receive,
T_OrderSampleProcessing sample_processing, T_OrderSampleWorklistReceive sample_worklist_receive,
PreAnalyticID pre_analytic,
T_OrderHeaderID order_id, y.T_OrderDetailT_TestSasCode test_sas_code
FROM t_orderdetail x
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
AND a.T_TestIsNonLab = ''
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_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_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
";
$query = $this->db_smartone->query($sql, [$id, $id]);
$lq = $this->db_smartone->last_query();
}
// }
// else
// {
// $sql = "SELECT a.t_testid, T_OrderDetailLangNat_TestLangName t_testname,
// T_OrderDetailLangResult result, T_OrderDetailLangResult result_old, T_OrderDetailLangNote note, T_OrderDetailLangNote note_old, T_OrderDetailLangID id,
// T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
// COUNT(b.T_TestID) level, T_OrderDetailVerification
// FROM t_orderdetail
// JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
// AND a.T_TestIsNonLab = ''
// LEFT JOIN t_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
// JOIN t_orderdetaillang ON T_OrderDetailLangT_OrderDetailID = T_OrderDetailID
// AND T_OrderDetailLangIsActive = 'Y'
// AND T_OrderDetailLangNat_LangID = ?
// WHERE T_OrderDetailT_OrderHeaderID = ?
// AND T_OrderDetailIsActive = 'Y'
// GROUP BY a.T_TestID
// ORDER BY T_OrderDetailT_TestSasCode ASC
// ";
// $query = $this->db_smartone->query($sql, [$lang_id, $id ]);
// }
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();
}
$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;
}
$ids = [];
foreach ($data as $k => $v)
{
$y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$v->order_id}', '{$v->test_id}') c")
->row();
$req_status = $y->c;
if ($lang == $this->lang_default_code)
{
$this->db_smartone->set('T_OrderDetailResult', $v->result)
->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
$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 = 12;
// 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;
}
}
}

View File

@@ -0,0 +1,489 @@
<?php
class Search_box extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Px API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function save_order() {
$prm = $this->sys_input;
$orders= $prm["orders"];
$odid = "-1";
foreach($orders as $order) {
$odid .= "," . $order["T_OrderDetailID"];
}
$sql = "select * from t_orderdetail where T_OrderDetailID in ($odid)";
$rows_before = $this->db_smartone->query($sql)->result_array();
$userID = $this->sys_user['M_UserID'];
$sql = "update t_orderdetail set T_OrderDetailResult = ? , T_OrderDetailUserID = ?
where T_OrderDetailID = ?";
foreach($orders as $order) {
$id = $order["T_OrderDetailID"];
$result = $order["T_OrderDetailResult"];
$this->db_smartone->query($sql,array($result,$userID, $id));
echo $this->db_smartone->last_query() . "\n";
}
$sql = "insert into one_log.log_resultentry(Log_ResultEntryCode,
Log_ResultEntryUserID, Log_ResultEntryJson)
values('RE.PX',$userID, ?)";
$j_log = json_encode(array("before" => $rows_before , "after" => $orders));
$this->db_smartone->query($sql,$j_log);
$this->sys_ok( array("message"=>"Result Save"));
}
public function search_order()
{
$prm = $this->sys_input;
$max_rst = 99;
$nat_test_id = $prm["nat_test_id"];
$date = $prm["sdate"];
$sdate = $date . " 00:00:01";
$edate = $date . " 23:59:59";
$sql = "select T_OrderHeaderID, T_OrderHeaderLabNumber, concat(M_TitleName,' ', M_PatientName) M_PatientName,
T_OrderDetailID,T_OrderDetailResult,T_OrderDetailNormalValueDescription, T_OrderDetailNote,
T_TestIsQuantitative,T_OrderDetailNormalValueNote, T_OrderDetailVerification,
T_OrderDetailResult as OriginalResult, T_TestID,
case
when T_OrderSampleHandling = 'Y' then 'OK'
when T_OrderSampleReceive= 'N' then 'Bahan Belum'
else 'Bahan Belum'
end
SampleStatus,
ifnull(T_OrderSampleWorklistReceive,'N') T_OrderSampleWorklistReceive,
fn_have_preanalytic( date(T_OrderHeaderDate), T_TestNat_TestID) IsPreAnalytic,
Nat_UnitName
from t_orderdetail
join t_orderheader on T_OrderHeaderIsActive = 'Y' and T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
and T_OrderHeaderDate > ? and T_OrderHeaderDate < ?
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
join m_title on M_PatientM_TitleID = M_TitleID
join t_test on T_OrderDetailT_TestID = T_TestID and T_OrderDetailIsActive = 'Y'
and T_TestNat_TestID = ?
join t_ordersample on T_OrderHeaderID = T_OrderSampleT_OrderHeaderID and T_TestT_SampleTypeID = T_OrderSampleT_SampleTypeID
join nat_test on T_TestNat_TestID = Nat_TestID
join nat_unit on Nat_TestNat_UnitID = Nat_UnitID
order by T_OrderHeaderID";
$query = $this->db_smartone->query($sql, array($sdate,$edate,$nat_test_id ));
$result = array();
if ($query) {
$result =$query->result_array();
$new_result = array();
foreach($result as $idx => $v) {
if ( $v["T_OrderDetailResult"] <> "") {
$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) $result[$idx]['template'] = $x->result_array();
}
$new_result[] = $v;
}
} else {
$this->sys_error_db($this->db_smartone->last_query());
}
$this->sys_ok( array("records" => $new_result , "message" => ""));
}
public function search_px()
{
$prm = $this->sys_input;
$max_rst = 99;
$group_id = $prm["group_id"];
$search = '%' . $prm["search"] . '%' ;
$date = $prm["sdate"];
$sdate = $date . " 00:00:01";
$edate = $date . " 23:59:59";
$sql = "
select distinct
Nat_TestID, Nat_TestCode, Nat_TestName
from t_test
join nat_test on T_TestNat_TestID = Nat_TestID
join t_orderdetail on
T_TestID = T_OrderDetailT_TestID
and T_TestIsResult = 'Y'
and T_OrderDetailIsActive = 'Y'
and T_OrderDetailVerification <> 'Y'
join t_orderheader on T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
and T_OrderHeaderDate > ? and T_OrderHeaderDate < ?
and T_OrderHeaderIsActive = 'Y'
join t_worklistdetail on T_TestID = T_WorklistDetailT_TestID
and ( T_WorklistDetailT_WorklistID = $group_id or $group_id = 0 )
where T_TestCode like '$search' or T_TestName like '$search'
union
select distinct
Nat_TestID, Nat_TestCode, Nat_TestName
from t_worklistdetail
join t_test p on
p.T_TestID = T_WorklistDetailT_TestID and T_WorklistDetailIsActive = 'Y'
and ( T_WorklistDetailT_WorklistID = $group_id )
join t_test c on
c.T_TestSasCode like concat(p.T_TestSasCode, '%')
and c.T_TestIsResult = 'Y'
join t_orderdetail on
c.T_TestID = T_OrderDetailT_TestID
and c.T_TestIsResult = 'Y'
and T_OrderDetailIsActive = 'Y'
and T_OrderDetailVerification <> 'Y'
join t_orderheader on T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
and T_OrderHeaderDate > ? and T_OrderHeaderDate < ?
and T_OrderHeaderIsActive = 'Y'
join nat_test on Nat_TestID = c.T_TestNat_TestID
where c.T_TestCode like '$search' or c.T_TestName like '$search'
order by Nat_TestCode ";
$query = $this->db_smartone->query($sql, array($sdate,$edate,$sdate,$edate));
$result = array();
if ($query) {
$result =$query->result_array();
} else {
$this->sys_error_db($this->db_smartone->last_query());
}
$this->sys_ok( array("records" => $result , "message" => ""));
}
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 = "";
// if ($lang == $this->lang_default_code)
// {
if (isset($prm['group_id']) && $prm["group_id"] > 0 )
{
$sql = "SELECT IFNULL(z.T_TesTID, x.t_testid) t_testid,
IFNULL(z.T_TestName, x.t_testname) t_testname,
IFNULL(z.T_TestNat_TesTID, x.nattest_id) nattest_id,
IFNULL(y.T_OrderDetailResult, x.result) result,
IFNULL(y.T_OrderDetailResult, x.result_old) result_old,
IFNULL(y.T_OrderDetailNote, x.note) note,
IFNULL(y.T_OrderDetailNote, x.note_old) note_old,
IFNULL(y.T_OrderDetailID, x.id) id,
IFNULL(y.T_OrderDetailT_TestIsResult, x.is_result) is_result,
IFNULL(z.T_TestIsQuantitative, x.is_quantitative) is_quantitative,
IFNULL(y.T_OrderDetailNat_NormalValueID, x.normal_id) normal_id,
IFNULL(y.T_OrderDetailNormalValueNote, x.normal_note) normal_note,
IFNULL(y.T_OrderDetailNat_UnitName, x.unit_name) unit_name,
IFNULL(y.T_OrderdetailNat_MethodeID, x.methode_id) methode_id,
IFNULL(y.T_OrderdetailNat_MethodeName, x.methode_name) methode_name,
IFNULL(y.T_OrderDetailVerification, x.T_OrderDetailVerification) T_OrderDetailVerification,
IFNULL(y.T_OrderDetailT_OrderHeaderID, x.T_OrderDetailT_OrderHeaderID) T_OrderDetailT_OrderHeaderID,
IFNULL(y.T_OrderDetailT_TestSasCode, x.T_OrderDetailT_TestSasCode) T_OrderDetailT_TestSasCode,
IFNULL(os1.T_OrderSampleReceive, x.T_OrderSampleReceive) sample_receive,
CAST( level + (LENGTH(y.T_OrderDetailT_TestSasCode) - LENGTH(x.T_OrderDetailT_TestSasCode))/2 as SIGNED) level
FROM (
SELECT IFNULL(a.t_testid, b.t_testid) t_testid, IFNULL(a.t_testname, b.t_testname) t_testname,
T_OrderDetailResult result, T_OrderDetailResult result_old, T_OrderDetailNote note, T_OrderDetailNote note_old, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
COUNT(b.T_TestID) level, T_OrderDetailNat_NormalValueID normal_id,
T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n,
T_OrderDetailVerification, T_OrderDetailT_OrderHeaderID, IFNULL(T_OrderDetailT_TestSasCode, b.T_TestSasCode) T_OrderDetailT_TestSasCode,
T_OrderSampleReceive
FROM t_orderdetail
JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
AND a.T_TestIsNonLab = ''
JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive
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_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = T_OrderDetailID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_TestID IN
( SELECT T_WorklistDetailT_TestID
FROM t_worklistdetail
WHERE T_WorklistDetailIsactive = 'Y' ANd T_WorklistDetailT_WorklistID = ?
)
GROUP BY a.T_TestID
ORDER BY T_OrderDetailT_TestSasCode ASC) x
LEFT JOIN t_orderdetail y ON x.T_OrderDetailT_OrderHeaderID = y.T_OrderDetailT_OrderHeaderID
AND y.T_OrderDetailIsActive = 'Y'
AND y.T_OrderDetailT_TestSasCode LIKE CONCAT(x.T_OrderDetailT_TestSasCode, '%')
LEFT JOIN t_test z ON y.T_OrderDetailT_TestID = z.T_TestID
LEFT JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive
FROM t_ordersample WHERE T_OrderSampleT_OrderHeaderID = ?
AND T_OrderSampleIsactive = 'Y'
GROUP BY T_OrderSampleT_SampleTypeID) os1 ON z.T_TestT_SampleTypeID = os1.T_OrderSampleT_SampleTypeID";
$query = $this->db_smartone->query($sql, [$id, $id, $prm['group_id'], $id]);
$lq = $this->db_smartone->last_query();
}
else
{
// sipe : b.T_TestIsQuantitative di ganti a.T_TestIsQuantitative
$sql = "SELECT IFNULL(a.t_testid, b.t_testid) t_testid, IFNULL(a.t_testname, b.t_testname) t_testname,
T_OrderDetailResult result, T_OrderDetailResult result_old, T_OrderDetailNote note, T_OrderDetailNote note_old, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
COUNT(b.T_TestID) level, T_OrderDetailNat_NormalValueID normal_id,
T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n,
T_OrderDetailVerification, T_OrderSampleReceive sample_receive
FROM t_orderdetail
JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
AND a.T_TestIsNonLab = ''
JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive
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_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = T_OrderDetailID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
GROUP BY a.T_TestID
ORDER BY T_OrderDetailT_TestSasCode ASC
";
$query = $this->db_smartone->query($sql, [$id, $id]);
}
// file_put_contents("/xtmp/xx.sql",$sql);
// }
// else
// {
// $sql = "SELECT a.t_testid, T_OrderDetailLangNat_TestLangName t_testname,
// T_OrderDetailLangResult result, T_OrderDetailLangResult result_old, T_OrderDetailLangNote note, T_OrderDetailLangNote note_old, T_OrderDetailLangID id,
// T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
// COUNT(b.T_TestID) level, T_OrderDetailVerification
// FROM t_orderdetail
// JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
// AND a.T_TestIsNonLab = ''
// LEFT JOIN t_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
// JOIN t_orderdetaillang ON T_OrderDetailLangT_OrderDetailID = T_OrderDetailID
// AND T_OrderDetailLangIsActive = 'Y'
// AND T_OrderDetailLangNat_LangID = ?
// WHERE T_OrderDetailT_OrderHeaderID = ?
// AND T_OrderDetailIsActive = 'Y'
// GROUP BY a.T_TestID
// ORDER BY T_OrderDetailT_TestSasCode ASC
// ";
// $query = $this->db_smartone->query($sql, [$lang_id, $id ]);
// }
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();
}
$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;
}
$ids = [];
foreach ($data as $k => $v)
{
$y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$v->order_id}', '{$v->test_id}') c")
->row();
$req_status = $y->c;
if ($lang == $this->lang_default_code)
{
$this->db_smartone->set('T_OrderDetailResult', $v->result)
->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
$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 = 12;
// 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;
}
}
}

View File

@@ -0,0 +1,106 @@
<?php
class Rh_patient extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RH Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$date = $prm["date"];
$nolab = '%' . $prm["nolab"] . '%';
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "select count(DISTINCT T_OrderHeaderID) total
from t_orderpromise
join t_orderheader on t_orderpromiset_orderheaderid = t_orderheaderid
join t_orderdetail on t_orderheaderid = t_orderdetailt_orderheaderid
and t_orderdetailisactive = 'Y' and T_OrderDetailValidation = 'Y'
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
join m_doctor da on T_OrderHeaderPJM_DoctorID = da.M_DoctorID
JOIN m_company on T_OrderHeaderM_CompanyID = M_CompanyID
JOIN m_mou on T_OrderHeaderM_MouID = M_MouID
where T_OrderPromiseIsActive = 'Y'
and T_OrderPromiseDateTime LIKE '{$date}%'
and T_OrderHeaderLabNumber like ?
and
( M_PatientName LIKE ?
)
order by T_OrderHeaderLabNumber DESC";
$query = $this->db_smartone->query($sql, [$nolab, $search]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "select T_OrderHeaderID, T_OrderHeaderLabNumber, T_OrderHeaderDate,
M_PatientID, M_PatientNoReg, fn_global_patient_name(M_PatientID) M_PatientName,
M_PatientDOB, T_OrderHeaderM_PatientAge, M_PatientHP,
da.M_DoctorID doctor_pj_id, fn_global_doctor_name(da.M_DoctorID) doctor_pj_name,
M_MouID, M_MouName, M_CompanyID, M_CompanyName,
T_OrderHeaderFoNote, T_OrderHeaderSamplingNote, T_OrderHeaderResultNote,
T_OrderPromiseDateTime
from t_orderpromise
join t_orderheader on t_orderpromiset_orderheaderid = t_orderheaderid
join t_orderdetail on t_orderheaderid = t_orderdetailt_orderheaderid
and t_orderdetailisactive = 'Y' and T_OrderDetailValidation = 'Y'
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
join m_doctor da on T_OrderHeaderPJM_DoctorID = da.M_DoctorID
JOIN m_company on T_OrderHeaderM_CompanyID = M_CompanyID
JOIN m_mou on T_OrderHeaderM_MouID = M_MouID
where T_OrderPromiseIsActive = 'Y'
and T_OrderPromiseDateTime LIKE '{$date}%'
and T_OrderHeaderLabNumber like ?
and
( M_PatientName LIKE ?
)
group by T_OrderHeaderID
order by T_OrderHeaderLabNumber DESC
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$nolab, $search]);
if ($query) {
$rows = $query->result_array();
foreach ($rows as $k => $v)
{
$rows[$k]['data'] = json_decode($v['data']);
$btn = $this->db_smartone->query("SELECT fn_process_rp_buttons('{$v['T_OrderHeaderID']}') x")
->row();
$rows[$k]['buttons'] = json_decode($btn->x);
}
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
}

View File

@@ -0,0 +1,106 @@
<?php
class Rp_patient extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RP Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$date = $prm["date"];
$nolab = '%' . $prm["nolab"] . '%';
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "select count(DISTINCT T_OrderHeaderID) total
from t_orderpromise
join t_orderheader on t_orderpromiset_orderheaderid = t_orderheaderid
join t_orderdetail on t_orderheaderid = t_orderdetailt_orderheaderid
and t_orderdetailisactive = 'Y' and T_OrderDetailValidation = 'Y'
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
join m_doctor da on T_OrderHeaderPJM_DoctorID = da.M_DoctorID
JOIN m_company on T_OrderHeaderM_CompanyID = M_CompanyID
JOIN m_mou on T_OrderHeaderM_MouID = M_MouID
where T_OrderPromiseIsActive = 'Y'
and T_OrderPromiseDateTime LIKE '{$date}%'
and T_OrderHeaderLabNumber like ?
and
( M_PatientName LIKE ?
)
order by T_OrderHeaderLabNumber DESC";
$query = $this->db_smartone->query($sql, [$nolab, $search]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "select T_OrderHeaderID, T_OrderHeaderLabNumber, T_OrderHeaderDate,
M_PatientID, M_PatientNoReg, fn_global_patient_name(M_PatientID) M_PatientName,
M_PatientDOB, T_OrderHeaderM_PatientAge, M_PatientHP,
da.M_DoctorID doctor_pj_id, fn_global_doctor_name(da.M_DoctorID) doctor_pj_name,
M_MouID, M_MouName, M_CompanyID, M_CompanyName,
T_OrderHeaderFoNote, T_OrderHeaderSamplingNote, T_OrderHeaderResultNote,
T_OrderPromiseDateTime
from t_orderpromise
join t_orderheader on t_orderpromiset_orderheaderid = t_orderheaderid
join t_orderdetail on t_orderheaderid = t_orderdetailt_orderheaderid
and t_orderdetailisactive = 'Y' and T_OrderDetailValidation = 'Y'
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
join m_doctor da on T_OrderHeaderPJM_DoctorID = da.M_DoctorID
JOIN m_company on T_OrderHeaderM_CompanyID = M_CompanyID
JOIN m_mou on T_OrderHeaderM_MouID = M_MouID
where T_OrderPromiseIsActive = 'Y'
and T_OrderPromiseDateTime LIKE '{$date}%'
and T_OrderHeaderLabNumber like ?
and
( M_PatientName LIKE ?
)
group by T_OrderHeaderID
order by T_OrderHeaderLabNumber DESC
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$nolab, $search]);
if ($query) {
$rows = $query->result_array();
foreach ($rows as $k => $v)
{
$rows[$k]['data'] = json_decode($v['data']);
$btn = $this->db_smartone->query("SELECT fn_process_rp_buttons('{$v['T_OrderHeaderID']}') x")
->row();
$rows[$k]['buttons'] = json_decode($btn->x);
}
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
}

View File

@@ -0,0 +1,102 @@
<?php
class Rv_patient extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$nolab = '%' . $prm["nolab"] . '%';
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($prm['nolab'] != '')
$nolab = "%{$prm['nolab']}%";
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// QUERY TOTAL
$sql = "select count(*) total
from t_orderheader
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
join m_doctor da on T_OrderHeaderPJM_DoctorID = da.M_DoctorID
JOIN m_company on T_OrderHeaderM_CompanyID = M_CompanyID
JOIN m_mou on T_OrderHeaderM_MouID = M_MouID
JOIN helper_order ON Helper_OrderT_OrderHeaderID = T_OrderHeaderID
AND Helper_OrderIsLAB = 'Y'
where T_OrderHeaderIsActive = 'Y'
and T_OrderHeaderLabNumber like ?
and
( M_PatientName LIKE ?
or ((M_PatientHP LIKE ? and M_PatientHP IS NOT NULL))
or ((M_PatientDOB LIKE ? and M_PatientDOB IS NOT NULL))
)
order by T_OrderHeaderLabNumber DESC";
$query = $this->db_smartone->query($sql, [$nolab, $search, $search, $search ]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "select T_OrderHeaderID, T_OrderHeaderLabNumber, T_OrderHeaderDate,
M_PatientID, M_PatientNoReg, fn_global_patient_name(M_PatientID) M_PatientName,
M_PatientDOB, T_OrderHeaderM_PatientAge, M_PatientHP, M_SexName,
da.M_DoctorID doctor_pj_id, fn_global_doctor_name(da.M_DoctorID) doctor_pj_name,
M_MouID, M_MouName, M_CompanyID, M_CompanyName,
T_OrderHeaderFoNote, T_OrderHeaderSamplingNote, T_OrderHeaderResultNote, M_LangCode,
T_OrderHeaderLangIsSI is_si
from t_orderheader
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
join m_doctor da on T_OrderHeaderPJM_DoctorID = da.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 helper_order ON Helper_OrderT_OrderHeaderID = T_OrderHeaderID
AND Helper_OrderIsLAB = 'Y'
JOIN m_lang ON T_OrderHeaderM_LangID = M_LangID
where T_OrderHeaderIsActive = 'Y'
and T_OrderHeaderLabNumber like ?
and
( M_PatientName LIKE ?
or ((M_PatientHP LIKE ? and M_PatientHP IS NOT NULL))
or ((M_PatientDOB LIKE ? and M_PatientDOB IS NOT NULL))
)
order by T_OrderHeaderLabNumber DESC
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$nolab, $search, $search, $search ]);
if ($query) {
$rows = $query->result_array();
foreach ($rows as $k => $v)
$rows[$k]['data'] = json_decode($v['data']);
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
}

View File

@@ -0,0 +1,178 @@
<?php
class Rv_px extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Px API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 99;
$id = $prm["order_id"];
// QUERY TOTAL
// $sql = "";
// $query = $this->db_smartone->query($sql);
// if ($query) {
// $tot_count = $query->result_array()[0]["total"];
// }
// else {
// $this->sys_error_db("re count", $this->db_smartone);
// exit;
// }
$tot_count = 0;
$sql = "SELECT T_TestID
FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TEstID = T_TestID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
AND T_TestParentT_TestID = 0";
$query = $this->db_smartone->query($sql, [$id]);
if ($query) {
$rst = [];
$rows = $query->result_array();
foreach ($rows as $k => $v)
{
$sql = "WITH RECURSIVE ancestors AS
(
SELECT t_testid, t_testname,
T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, 1 level,
T_OrderDetailValMRState mr_state,
T_OrderDetailValidation validation,
T_OrderDetailValidation validation_old,
'N' unvalidation
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
WHERE T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
AND t_testid = ?
UNION
SELECT g.t_testid, g.t_testname,
T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, level+1 level,
T_OrderDetailValMRState mr_state,
T_OrderDetailValidation validation,
T_OrderDetailValidation validation_old,
'N' unvalidation
FROM ancestors a, t_orderdetail f
JOIN t_test g ON f.T_OrderDetailT_TestID = g.T_TestID
WHERE T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
AND g.t_testparentt_testid = a.t_testid and g.t_testisactive = 'Y' )
SELECT * FROM ancestors;";
$query = $this->db_smartone->query($sql, [$id, $v['T_TestID'], $id]);
$r = $query->result_array();
foreach($r as $k => $v) {
if ($v['mr_state'] == "X")
{
$tmp = $this->db_smartone->query("SELECT fn_process_rv_mrstate('{$v['id']}') x")
->row();
$v['mr_state'] = $tmp->x;
}
// Sample Handling & Verification Perfect
$y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$id}', '{$v['t_testid']}') c")
->row();
$v['sample_handling_perfect'] = $y->c;
$rst[] = $v;
}
}
$result = array("total" => $tot_count, "records" => $rst, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RE Px rows", $this->db_smartone);
exit;
}
}
public function confirm()
{
$prm = $this->sys_input;
$data = json_decode($prm["id"]);
if (sizeof($data) < 1)
{
$this->sys_error_db("RE Verification Confirmation", $this->db_smartone);
exit;
}
else
{
$ids = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailVerDeltaCheck', $v->delta)
->set('T_OrderDetailVerTrendAnalysis', $v->trend)
->set('T_OrderDetailVerification', $v->verification)
->set('T_OrderDetailVerDate', date('Y-m-d H:i:s'))
->set('T_OrderDetailVerUserID', $this->sys_user->M_UserID)
->where('T_OrderDetailID', $v->id)
->update('t_orderdetail');
$ids[] = $v->id;
}
$this->sys_ok($ids);
}
}
public function search_group()
{
$prm = $this->sys_input;
$max_rst = 12;
// 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;
}
}
}

View File

@@ -0,0 +1,73 @@
<?php
class Rv_validation extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "Result Validation API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function mr_state()
{
$prm = $this->sys_input;
$id = $prm["order_id"];
$data = ["image"=>"http://blog.aylien.com/wp-content/uploads/2016/07/Screen-Shot-2016-07-21-at-18.46.42.png",
"note"=>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
"title"=>"Multi Rule"];
$this->sys_ok($data);
}
public function unvalidate()
{
$prm = $this->sys_input;
$data = json_decode($prm["data"]);
if (sizeof($data) < 1)
{
$this->sys_error_db("RE UnValidation", $this->db_smartone);
exit;
}
else
{
$ids = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailValidation', "N")
->set('T_OrderDetailValDate', null)
->set('T_OrderDetailValUserID', 0)
->where('T_OrderDetailID', $v->id)
->update('t_orderdetail');
$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.Unvalidation')
->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
$this->sys_ok($ids);
}
}
}

View File

@@ -0,0 +1,162 @@
<?php
class Rv_patient extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$sdate = $prm["start_date"] . '%';
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// OVERRIDE
$max_rst = 9999;
$offset = 0;
// QUERY TOTAL
$sql = "SELECT count(DISTINCT T_OrderHeaderID) total
from t_orderheader
JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeadeRID
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive= 'Y' AND T_OrderDetailVerification = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
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 helper_order ON Helper_OrderT_OrderHeaderID = T_OrderHeaderID
-- AND Helper_OrderIsLAB = 'Y'
where T_OrderHeaderIsActive = 'Y'
and (T_OrderHeaderAddOnWorklistReceiveDateTime LIKE ? OR T_OrderPromiseDateTime LIKE ?)
and
( M_PatientName LIKE ?
or T_OrderHeaderLabNumber like ?
)
order by T_OrderHeaderLabNumber DESC";
$query = $this->db_smartone->query($sql, [$sdate, $sdate, $search, $search ]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "SELECT *,
CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT('\"', T_OrderPromiseDateTime, '\"') SEPARATOR ','), ']') order_promise FROM (
SELECT T_OrderHeaderID, T_OrderHeaderLabNumber, T_OrderHeaderDate,
M_PatientID, M_PatientNoReg, fn_global_patient_name(M_PatientID) M_PatientName,
M_PatientDOB, T_OrderHeaderM_PatientAge, M_PatientHP, M_SexName,
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 deliveries,
T_OrderPromiseDateTime, fn_process_history(T_OrderHeaderID) is_history
from t_orderheader
JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeadeRID
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive= 'Y' AND T_OrderDetailVerification = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
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 helper_order ON Helper_OrderT_OrderHeaderID = T_OrderHeaderID
-- AND Helper_OrderIsLAB = 'Y'
JOIN nat_lang la ON T_OrderHeaderM_LangID = la.Nat_LangID
LEFT JOIN nat_lang lb ON T_OrderHeaderAddOnSecondM_LangID = lb.Nat_LangID
where T_OrderHeaderIsActive = 'Y'
and (T_OrderHeaderAddOnWorklistReceiveDateTime LIKE ? OR T_OrderPromiseDateTime LIKE ?)
and
( M_PatientName LIKE ?
or T_OrderHeaderLabNumber like ?
)
order by FIELD(T_OrderHeaderIsCito, 'Y', 'N') ASC, T_OrderPromiseDateTime ASC, T_OrderHeaderLabNumber DESC) x
GROUP BY T_OrderHeaderID
order by FIELD(T_OrderHeaderIsCito, 'Y', 'N') ASC, T_OrderPromiseDateTime ASC, T_OrderHeaderLabNumber DESC
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$sdate, $sdate, $search, $search ]);
if ($query) {
$rows = $query->result_array();
foreach ($rows as $k => $v) {
$rows[$k]['data'] = json_decode($v['data']);
$rows[$k]['delivery'] = [];
$r = $this->db_smartone->query("CALL sp_fo_payment_get_delivery('{$v['T_OrderHeaderID']}')");
$this->clean_mysqli_connection($this->db_smartone->conn_id);
if ($r) {
$d = $r->row();
$rows[$k]['delivery'] = json_decode($d->delivery);
}
$rows[$k]['deliveries'] = JSON_DECODE($v['deliveries']);
$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));
}
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
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();
$this->sys_ok(json_decode($row->data));
exit;
}
$this->sys_error_db("RESULT REQ", $this->db_smartone);
}
}

View File

@@ -0,0 +1,374 @@
<?php
class Rv_px extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Px API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search_old()
{
$prm = $this->sys_input;
$max_rst = 99;
$id = $prm["order_id"];
// QUERY TOTAL
// $sql = "";
// $query = $this->db_smartone->query($sql);
// if ($query) {
// $tot_count = $query->result_array()[0]["total"];
// }
// else {
// $this->sys_error_db("re count", $this->db_smartone);
// exit;
// }
$tot_count = 0;
$sql = "SELECT T_TestID
FROM t_orderdetail JOIN t_test ON T_OrderDetailT_TEstID = T_TestID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
AND T_TestParentT_TestID = 0";
$query = $this->db_smartone->query($sql, [$id]);
if ($query) {
$rst = [];
$rows = $query->result_array();
foreach ($rows as $k => $v)
{
$sql = "WITH RECURSIVE ancestors AS
(
SELECT t_testid, t_testname,
T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, 1 level,
T_OrderDetailValMRState mr_state,
T_OrderDetailValidation validation,
T_OrderDetailValidation validation_old,
T_OrderDetailReqStatus sample_handling_perfect
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
WHERE T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
AND t_testid = ?
UNION
SELECT g.t_testid, g.t_testname,
T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, level+1 level,
T_OrderDetailValMRState mr_state,
T_OrderDetailValidation validation,
T_OrderDetailValidation validation_old,
T_OrderDetailReqStatus sample_handling_perfect
FROM ancestors a, t_orderdetail f
JOIN t_test g ON f.T_OrderDetailT_TestID = g.T_TestID
WHERE T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_OrderHeaderID = ?
AND g.t_testparentt_testid = a.t_testid and g.t_testisactive = 'Y' )
SELECT * FROM ancestors;";
$query = $this->db_smartone->query($sql, [$id, $v['T_TestID'], $id]);
$r = $query->result_array();
foreach($r as $k => $v) {
if ($v['mr_state'] == "X")
{
$tmp = $this->db_smartone->query("SELECT fn_process_rv_mrstate('{$v['id']}') x")
->row();
$v['mr_state'] = $tmp->x;
}
// Sample Handling & Verification Perfect
if ($v['sample_handling_perfect'] == 'X')
{
$y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$id}', '{$v['t_testid']}') c")
->row();
$v['sample_handling_perfect'] = $y->c;
}
// Override
if ($y->c == "N")
{
$v['mr_state'] = "N";
}
$rst[] = $v;
}
}
$result = array("total" => $tot_count, "records" => $rst, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RE Px rows", $this->db_smartone);
exit;
}
}
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;
// if ($lang == $this->lang_default_code)
// {
$sql = "SELECT *, cOUNT(a2.T_OrderDetailID) level FROM (
SELECT x.T_OrderDetailVerification verification,
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, x.T_OrderDetailID id,
x.T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
x.T_OrderDetailResultFlag result_flag,
x.T_OrderDetailValMRState mr_state,
x.T_OrderDetailValidation validation,
x.T_OrderDetailValidation validation_old,
y.T_OrderDetailReqStatus sample_handling_perfect,
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,
x.T_OrderDetailVerification, T_OrderSampleReceive sample_receive,
T_OrderSampleProcessing sample_processing, T_OrderSampleWorklistReceive sample_worklist_receive,
PreAnalyticID pre_analytic,
T_OrderHeaderID order_id, y.T_OrderDetailT_TestSasCode test_sas_code,
tx.T_TestSasCode,
T_OrderDetailAddOnResample `resample`, T_OrderDetailAddOnResampleStatus resample_status,
T_OrderDetailAddOnRef ref
FROM t_orderdetail x
JOIN t_test tx ON x.T_OrderDetailT_TestID = T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = tx.T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
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]);
// $sql = "SELECT a.t_testid, a.t_testname,
// T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
// T_OrderDetailT_TestIsResult is_result, COUNT(b.T_TestID) level,
// T_OrderDetailValMRState mr_state,
// T_OrderDetailValidation validation,
// T_OrderDetailValidation validation_old,
// T_OrderDetailReqStatus sample_handling_perfect, T_OrderDetailNat_NormalValueID normal_id,
// T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
// T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
// a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n,
// T_OrderDetailVerification
// FROM t_orderdetail
// JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
// AND a.T_TestIsNonLab = ''
// LEFT JOIN t_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
// LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = T_OrderDetailID
// WHERE T_OrderDetailT_OrderHeaderID = ?
// AND T_OrderDetailIsActive = 'Y'
// GROUP BY a.T_TestID
// ORDER BY T_OrderDetailT_TestSasCode ASC
// ";
// $query = $this->db_smartone->query($sql, [$id]);
// }
// else
// {
// $sql = "SELECT a.t_testid, a.t_testname,
// T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
// T_OrderDetailT_TestIsResult is_result, COUNT(b.T_TestID) level,
// T_OrderDetailValMRState mr_state,
// T_OrderDetailValidation validation,
// T_OrderDetailValidation validation_old,
// T_OrderDetailReqStatus sample_handling_perfect, T_OrderDetailNat_NormalValueID normal_id,
// T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
// T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
// a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n
// FROM t_orderdetail
// JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
// AND a.T_TestIsNonLab = ''
// LEFT JOIN t_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
// JOIN t_orderdetaillang ON T_OrderDetailLangT_OrderDetailID = T_OrderDetailID
// AND T_OrderDetailLangIsActive = 'Y'
// AND T_OrderDetailLangNat_LangID = ?
// WHERE T_OrderDetailT_OrderHeaderID = ?
// AND T_OrderDetailIsActive = 'Y'
// GROUP BY a.T_TestID
// ORDER BY T_OrderDetailT_TestSasCode ASC
// ";
// $query = $this->db_smartone->query($sql, [$lang_id, $id ]);
// }
if ($query) {
$rst = [];
$rows = $query->result_array();
// echo json_encode($rows); return;
// echo $this->db_smartone->last_query(); return;
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 ($v['mr_state'] == "X")
{
$tmp = $this->db_smartone->query("SELECT fn_process_rv_mrstate('{$v['id']}') x")
->row();
$v['mr_state'] = $tmp->x;
}
// Sample Handling & Verification Perfect
if ($v['sample_handling_perfect'] == 'X')
{
$y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$id}', '{$v['t_testid']}') c")
->row();
$v['sample_handling_perfect'] = $y->c;
}
// Override
if ($y->c == "N")
{
$v['mr_state'] = "N";
}
if ($v['sample_handling_perfect']== 'Y' && $v['mr_state'] == 'Y' && $v['verification'] == 'Y')
$v['validation'] = 'Y';
// 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" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RE Px rows", $this->db_smartone);
exit;
}
}
public function confirm()
{
$prm = $this->sys_input;
$data = json_decode($prm["id"]);
if (sizeof($data) < 1)
{
$this->sys_error_db("RE Verification Confirmation", $this->db_smartone);
exit;
}
else
{
$ids = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailVerDeltaCheck', $v->delta)
->set('T_OrderDetailVerTrendAnalysis', $v->trend)
->set('T_OrderDetailVerification', $v->verification)
->set('T_OrderDetailVerDate', date('Y-m-d H:i:s'))
->set('T_OrderDetailVerUserID', $this->sys_user->M_UserID)
->where('T_OrderDetailID', $v->id)
->update('t_orderdetail');
$ids[] = $v->id;
}
$this->sys_ok($ids);
}
}
public function search_group()
{
$prm = $this->sys_input;
$max_rst = 12;
// 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;
}
}
}

View File

@@ -0,0 +1,407 @@
<?php
class Rv_validation extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "Result Validation API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function mr_state()
{
$prm = $this->sys_input;
$id = $prm["order_id"];
$data = ["image"=>"http://blog.aylien.com/wp-content/uploads/2016/07/Screen-Shot-2016-07-21-at-18.46.42.png",
"note"=>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
"title"=>"Multi Rule"];
$this->sys_ok($data);
}
public function confirm()
{
$prm = $this->sys_input;
$data = json_decode($prm["data"]);
if (sizeof($data) < 1)
{
$this->sys_error_db("RE Validation Confirmation", $this->db_smartone);
exit;
}
else
{
$ids = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailValMRState', $v->mr_state)
->set('T_OrderDetailValidation', $v->validation)
->set('T_OrderDetailValDate', $v->validation == "Y" ? date('Y-m-d H:i:s') : null)
->set('T_OrderDetailValUserID', $this->sys_user['M_UserID'])
->where('T_OrderDetailID', $v->id)
->update('t_orderdetail');
$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.Validation')
->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
$this->sys_ok($ids);
}
}
// public function validate()
// {
// $prm = $this->sys_input;
// $data = json_decode($prm["data"]);
// if (sizeof($data) < 1)
// {
// $this->sys_error_db("RE Validation Confirmation", $this->db_smartone);
// exit;
// }
// else
// {
// $ids = [];
// foreach ($data as $k => $v)
// {
// $this->db_smartone->set('T_OrderDetailValMRState', $v->mr_state)
// ->set('T_OrderDetailValidation', $v->validation)
// ->set('T_OrderDetailValDate', $v->validation == "Y" ? date('Y-m-d H:i:s') : null)
// ->set('T_OrderDetailValUserID', $this->sys_user['M_UserID'])
// ->where('T_OrderDetailID', $v->id)
// ->update('t_orderdetail');
// $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.Validation')
// ->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
// $this->sys_ok($ids);
// }
// }
function print_count()
{
$this->firstprint();
$prm = $this->sys_input;
$sql = "UPDATE t_orderdetail SET T_OrderDetailPrintCount = T_OrderDetailPrintCount + 1
WHERE T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailValidation = 'Y'
AND T_OrderDetailIsActive = 'Y'";
$query = $this->db_smartone->query($sql, [$prm['order_id']]);
if ($query)
{
$this->sys_ok($this->db_smartone->last_query());
}
else
$this->sys_error_db("Print Count", $this->db_smartone);
}
public function reject()
{
$prm = $this->sys_input;
// QUERY TOTAL
$sql = "CALL sp_process_result_validation_reject(?, ?)";
$query = $this->db_smartone->query($sql, [$prm['id'], $prm['action']]);
if ($query) {
$row = $query->row();
$this->sys_ok($row);
}
else {
$this->sys_error_db("REJECT VALIDATION", $this->db_smartone);
}
}
public function unvalidate()
{
$prm = $this->sys_input;
$order_id = $prm["order_id"];
$this->db_smartone->set('T_OrderDetailValidation', "N")
->set('T_OrderDetailValDate', null)
->set('T_OrderDetailValUserID', 0)
->where('T_OrderDetailT_OrderHeaderID', $prm['order_id'])
->where('T_OrderDetailIsActive', 'Y')
->where('T_OrderDetailValidation', 'Y')
->update('t_orderdetail');
$q = $this->db_smartone->last_query();
// 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_OrderDetailT_OrderHeaderID', $prm['order_id'])
->get('t_orderdetail')
->row();
$dblog = $this->load->database("onelog", true);
$dblog->set('Log_ProcessCode', 'PROCESS.Result.Unvalidation')
->set('Log_ProcessOrderID', $order->id)
->set('Log_ProcessOrderNumber', $order->lab_number)
->set('Log_ProcessJson', '{}')
->set('Log_ProcessUserID', $this->sys_user['M_UserID'])
->insert('log_process');
// END OF Log Process
$this->sys_ok($q);
}
// Copas Fajri
function firstprint()
{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userid = $this->sys_user["M_UserID"];
$prm['T_OrderHeaderID'] = $prm['order_id'];
$datarows = [];
$query = " SELECT T_OrderDetailID,T_TestName
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y'
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID AND DocumentationGroupName = 'lab'
WHERE
T_OrderDetailT_OrderHeaderID = {$prm['T_OrderHeaderID']} AND
T_OrderDetailValidation = 'Y' AND
T_OrderDetailPrintCount = 0 AND
T_OrderDetailT_OrderPromiseID <> 0 AND
( T_OrderDetailResult <> '' OR T_OrderDetailResult IS NOT NULL ) AND
T_OrderDetailIsActive = 'Y'
GROUP BY T_OrderDetailID";
//echo $query;
$datarows = $this->db_smartone->query($query)->result_array();
$ids = array();
$testname = array();
if($datarows) {
foreach($datarows as $k => $v) {
$sql = "UPDATE t_orderdetail SET T_OrderDetailPrintCount = 1 WHERE T_OrderDetailID = {$v['T_OrderDetailID']}";
$this->db_smartone->query($sql);
array_push($ids,$v['T_OrderDetailID']);
array_push($testname,$v['T_TestName']);
}
}
$join_ids = "[".join(",",$ids)."]";
$join_testname = "[".join(",",$testname)."]";
$sql = "SELECT t_orderdelivery.*, M_DeliveryTypeCode as code
FROM t_orderdelivery
JOIN m_deliverytype ON T_OrderDeliveryM_DeliveryTypeID = M_DeliveryTypeID
WHERE
T_OrderDeliveryT_OrderHeaderID = {$prm['T_OrderHeaderID']} AND
T_OrderDeliveryIsActive = 'Y'
GROUP BY T_OrderDeliveryID
";
//echo $sql;
$result_delivery = $this->db_smartone->query($sql)->result_array();
$arr_deliveryid = array();
foreach($result_delivery as $i => $j){
array_push($arr_deliveryid,$j["T_OrderDeliveryM_DeliveryID"]);
}
foreach($result_delivery as $k => $v){
if($v['code'] == 'PICKUP'){
$sql = "INSERT INTO result_frontoffice(
Result_FrontOfficeT_OrderHeaderID,
Result_FrontOfficeIds,
Result_FrontOfficeStatus,
Result_FrontOfficeType,
Result_FrontOfficeTestName,
Result_FrontOfficeCreated,
Result_FrontOfficeUserID
)
VALUES(
{$prm['T_OrderHeaderID']},
'{$join_ids}',
'P',
'lab',
'Pemeriksaan Laboratorium',
NOW(),
{$userid}
) ON DUPLICATE KEY UPDATE
Result_FrontOfficeStatus = 'P',
Result_FrontOfficeUserID = {$userid}
";
$this->db_smartone->query($sql);
$sql = "SELECT * FROM result_frontoffice
WHERE Result_FrontOfficeT_OrderHeaderID = {$prm['T_OrderHeaderID']} AND
Result_FrontOfficeIds = '{$join_ids}' AND
Result_FrontOfficeType = 'lab'";
$rst_log = $this->db_smartone->query($sql)->result_array();
$dt_log = json_encode($rst_log);
$sql = "INSERT INTO one_log.log_result_front_office(
Log_ResultFrontOfficeDateTime,
Log_ResultFrontOfficeJson,
Log_ResultFrontOfficeUserID
)
VALUES(
NOW(),
'{$dt_log}',
{$userid}
)";
$this->db_smartone->query($sql);
}
if($v['code'] == 'EMAIL'){
$type = "MANUAL";
if(in_array(1,$arr_deliveryid) && (in_array(3,$arr_deliveryid) || in_array(5,$arr_deliveryid) || in_array(11,$arr_deliveryid))){
$type = "FO";
}
$sql = "INSERT INTO result_sendemail(
Result_SendEmailT_OrderHeaderID,
Result_SendEmailActionBy,
Result_SendEmailIds,
Result_SendEmailT_OrderDeliveryID,
Result_SendEmailStatus,
Result_SendEmailType,
Result_SendEmailT_TestName,
Result_SendEmailCreated,
Result_SendEmailUserID
)
VALUES(
{$prm['T_OrderHeaderID']},
'{$type}',
'{$join_ids}',
{$v['T_OrderDeliveryID']},
'P',
'lab',
'Pemeriksaan Laboratorium',
NOW(),
{$userid}
) ON DUPLICATE KEY UPDATE
Result_SendEmailStatus = 'P',
Result_SendEmailUserID = {$userid}
";
$this->db_smartone->query($sql);
$sql = "SELECT * FROM result_sendemail
WHERE
Result_SendEmailT_OrderHeaderID = {$prm['T_OrderHeaderID']} AND
Result_SendEmailIds = '{$join_ids}' AND
Result_SendEmailT_OrderDeliveryID = {$v['T_OrderDeliveryID']} AND
Result_SendEmailType = 'lab' LIMIT 1";
$dt_log = json_encode($this->db_smartone->query($sql)->row_array());
$sql = "INSERT INTO one_log.log_resultsendemail (
Log_ResultSendEmailDatetime,
Log_ResultSendEmailJson,
Log_ResultSendEmailUserID
)
VALUES(
NOW(),
'{$dt_log}',
{$userid}
)";
$this->db_smartone->query($sql);
}
if($v['code'] == 'ADDRESS'){
$sql = "INSERT INTO result_sendcourier(
Result_SendCourierT_OrderHeaderID,
Result_SendCourierIds,
Result_SendCourierT_OrderDeliveryID,
Result_SendCourierStatus,
Result_SendCourierType,
Result_SendCourierT_TestName,
Result_SendCourierCreated,
Result_SendCourierUserID
)
VALUES(
{$prm['T_OrderHeaderID']},
'{$join_ids}',
{$v['T_OrderDeliveryID']},
'P',
'lab',
'Pemeriksaan Laboratorium',
NOW(),
{$userid}
) ON DUPLICATE KEY UPDATE
Result_SendCourierStatus = 'P',
Result_SendCourierUserID = {$userid}
";
$this->db_smartone->query($sql);
$sql = "SELECT * FROM result_sendcourier
WHERE
Result_SendCourierT_OrderHeaderID = {$prm['T_OrderHeaderID']} AND
Result_SendCourierIds = '{$join_ids}' AND
Result_SendCourierT_OrderDeliveryID = {$v['T_OrderDeliveryID']} AND
Result_SendCourierType = 'lab' LIMIT 1";
$dt_log = json_encode($this->db_smartone->query($sql)->row_array());
$sql = "INSERT INTO one_log.log_resultsendcourier (
Log_ResultSendCourierDateTime,
Log_ResultSendCourierJson,
Log_ResultSendCourierUserID
)
VALUES(
NOW(),
'{$dt_log}',
{$userid}
)";
$this->db_smartone->query($sql);
}
//echo $sql;
}
return;
// $result = array(
// "total" => count($datarows) ,
// "records" => $datarows,
// );
// $this->sys_ok($result);
// exit;
}
}

View File

@@ -0,0 +1,58 @@
<?php
class Rv_verification extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "Result Validation API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function mr()
{
$prm = $this->sys_input;
$id = $prm["order_id"];
$data = ["image"=>"http://blog.aylien.com/wp-content/uploads/2016/07/Screen-Shot-2016-07-21-at-18.46.42.png",
"note"=>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
"title"=>"Multi Rule"];
$this->sys_ok($data);
}
public function confirm()
{
$prm = $this->sys_input;
$data = json_decode($prm["data"]);
if (sizeof($data) < 1)
{
$this->sys_error_db("RE Validation Confirmation", $this->db_smartone);
exit;
}
else
{
$ids = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailValMRState', $v->mr_state)
->set('T_OrderDetailValidation', $v->validation)
->set('T_OrderDetailValDate', $v->validation == "Y" ? date('Y-m-d H:i:s') : null)
->set('T_OrderDetailValUserID', $this->sys_user['M_UserID'])
->where('T_OrderDetailID', $v->id)
->update('t_orderdetail');
$ids[] = $v->id;
}
$this->sys_ok($ids);
}
}
}

View File

@@ -0,0 +1,170 @@
<?php
class Rv_patient extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 10;
$sdate = $prm["start_date"] . '%';
$search = '%' . $prm["search"] . '%';
$page = $prm['page'];
$group_id = 0;
if (isset($prm['group_id'])) $group_id = $prm['group_id'];
if ($page == null)
$page = 1;
$offset = ($page - 1) * $max_rst;
// OVERRIDE
$max_rst = 9999;
$offset = 0;
$q_group;
if ($group_id != 0)
$q_group = "JOIN t_worklistdetail ON T_WorklistDetailIsActive = 'Y'
AND T_WorklistDetailT_WorklistID = {$group_id}
AND T_WorklistDetailT_TestID = T_OrderDetailT_TestID";
// QUERY TOTAL
$sql = "SELECT count(DISTINCT T_OrderHeaderID) total
from t_orderheader
JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeadeRID
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
{$q_group}
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
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 helper_order ON Helper_OrderT_OrderHeaderID = T_OrderHeaderID
-- AND Helper_OrderIsLAB = 'Y'
where T_OrderHeaderIsActive = 'Y'
and (T_OrderHeaderAddOnWorklistReceiveDateTime LIKE ? OR T_OrderPromiseDateTime LIKE ?)
and
( M_PatientName LIKE ?
or T_OrderHeaderLabNumber like ?
)
AND T_OrderHeaderAddOnFOVerification = 'Y'
AND T_OrderHeaderAddOnValidationDone = 'N'
order by T_OrderHeaderLabNumber DESC";
$query = $this->db_smartone->query($sql, [$sdate, $sdate, $search, $search ]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("re count", $this->db_smartone);
exit;
}
$sql = "SELECT *,
CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT('\"', T_OrderPromiseDateTime, '\"') SEPARATOR ','), ']') order_promise FROM (
SELECT T_OrderHeaderID, T_OrderHeaderLabNumber, T_OrderHeaderDate,
M_PatientID, M_PatientNoReg, fn_global_patient_name(M_PatientID) M_PatientName,
M_PatientDOB, T_OrderHeaderM_PatientAge, M_PatientHP, M_SexName,
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
from t_orderheader
JOIN t_orderheaderaddon ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID
JOIN t_orderpromise ON T_OrderPromiseT_OrderHeaderID = T_OrderHeadeRID
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND T_OrderDetailIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
{$q_group}
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
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 helper_order ON Helper_OrderT_OrderHeaderID = T_OrderHeaderID
-- AND Helper_OrderIsLAB = 'Y'
JOIN nat_lang la ON T_OrderHeaderM_LangID = la.Nat_LangID
LEFT JOIN nat_lang lb ON T_OrderHeaderAddOnSecondM_LangID = lb.Nat_LangID
where T_OrderHeaderIsActive = 'Y'
and (T_OrderHeaderAddOnWorklistReceiveDateTime LIKE ? OR T_OrderPromiseDateTime LIKE ?)
and
( M_PatientName LIKE ?
or T_OrderHeaderLabNumber like ?
)
AND T_OrderHeaderAddOnFOVerification = 'Y'
AND T_OrderHeaderAddOnValidationDone = 'N'
order by FIELD(T_OrderHeaderIsCito, 'Y', 'N') ASC, T_OrderPromiseDateTime ASC, T_OrderHeaderLabNumber DESC) x
GROUP BY T_OrderHeaderID
order by FIELD(T_OrderHeaderIsCito, 'Y', 'N') ASC, T_OrderPromiseDateTime ASC, T_OrderHeaderLabNumber DESC
limit {$offset}, {$max_rst}";
$query = $this->db_smartone->query($sql, [$sdate, $sdate, $search, $search ]);
if ($query) {
$rows = $query->result_array();
foreach ($rows as $k => $v)
{
$rows[$k]['data'] = json_decode($v['data']);
$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));
}
$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());
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist rows", $this->db_smartone);
exit;
}
}
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();
$this->sys_ok(json_decode($row->data));
exit;
}
$this->sys_error_db("RESULT REQ", $this->db_smartone);
}
}

View File

@@ -0,0 +1,501 @@
<?php
class Rv_px extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Px API";
}
public function __construct()
{
parent::__construct();
$this->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 ($lang == $this->lang_default_code)
// {
if ($group_id != 0)
{
$sql = "SELECT IFNULL(y.T_TesTID, x.t_testid) t_testid,
IFNULL(y.T_TestName, x.t_testname) t_testname,
IFNULL(y.T_TestNat_TesTID, x.nattest_id) nattest_id,
IFNULL(y.T_OrderDetailResult, x.result) result,
IFNULL(y.T_OrderDetailResult, x.result_old) result_old,
y.T_OrderDetailResultFlag result_flag,
IFNULL(y.T_OrderDetailNote, x.note) note,
IFNULL(y.T_OrderDetailNote, x.note_old) note_old,
IFNULL(y.T_OrderDetailID, x.id) id,
IFNULL(y.T_OrderDetailT_TestIsResult, x.is_result) is_result,
IFNULL(y.T_TestIsQuantitative, x.is_quantitative) is_quantitative,
y.T_OrderDetailVerDeltaCheck delta_check,
y.T_OrderDetailVerTrendAnalysis trend_analysis,
y.T_OrderDetailVerification verification,
y.T_OrderDetailVerification verification_old,
y.T_OrderDetailValidation validation,
y.T_OrderDetailReqStatus sample_handling_perfect,
IFNULL(y.T_OrderDetailNat_NormalValueID, x.normal_id) normal_id,
IFNULL(y.T_OrderDetailNormalValueNote, x.normal_note) normal_note,
IFNULL(y.T_OrderDetailNat_UnitName, x.unit_name) unit_name,
IFNULL(y.T_OrderdetailNat_MethodeID, x.methode_id) methode_id,
IFNULL(y.T_OrderdetailNat_MethodeName, x.methode_name) methode_name,
IFNULL(y.T_OrderDetailVerification, x.T_OrderDetailVerification) T_OrderDetailVerification,
IFNULL(y.T_OrderDetailT_OrderHeaderID, x.T_OrderDetailT_OrderHeaderID) T_OrderDetailT_OrderHeaderID,
IFNULL(y.T_OrderDetailT_TestSasCode, x.T_OrderDetailT_TestSasCode) T_OrderDetailT_TestSasCode,
y.T_OrderSampleReceive sample_receive,
y.T_OrderSampleWorklistReceive sample_worklist_receive,
y.T_OrderSampleProcessing sample_processing,
y.PreAnalyticID pre_analytic,
CAST( level + (LENGTH(y.T_OrderDetailT_TestSasCode) - LENGTH(x.T_OrderDetailT_TestSasCode))/2 as SIGNED) level,
y.T_OrderDetailAddOnResample `resample`, y.T_OrderDetailAddOnResampleStatus resample_status,
y.T_OrderDetailAddOnRef ref
FROM (
SELECT IFNULL(a.t_testid, b.t_testid) t_testid, IFNULL(a.t_testname, b.t_testname) t_testname,
T_OrderDetailResult result, T_OrderDetailResult result_old, T_OrderDetailNote note, T_OrderDetailNote note_old, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
COUNT(b.T_TestID) level, T_OrderDetailNat_NormalValueID normal_id,
T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n,
T_OrderDetailVerification, T_OrderDetailT_OrderHeaderID, IFNULL(T_OrderDetailT_TestSasCode, b.T_TestSasCode) T_OrderDetailT_TestSasCode,
T_OrderSampleReceive, T_OrderSampleProcessing, T_OrderSampleWorklistReceive, PreAnalyticID,
T_OrderDetailResultFlag result_flag,
T_OrderDetailAddOnResample `resample`, T_OrderDetailAddOnResampleStatus resample_status
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = a.T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
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 AND a.T_TestIsResult = 'Y'))
LEFT JOIN t_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = T_OrderDetailID
LEFT JOIN pre_analytic ON PreAnalyticNat_TestID = a.T_TestNat_TestID AND PreAnalyticDate = date(now()) and PreAnalyticIsActive = 'Y'
AND PreAnalyticT_WorklistID = ?
LEFT JOIN t_orderdetailaddon ON T_OrderDetailID = T_OrderDetailAddOnT_OrderDetailID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_TestID IN
( SELECT T_WorklistDetailT_TestID
FROM t_worklistdetail
WHERE T_WorklistDetailIsactive = 'Y' ANd T_WorklistDetailT_WorklistID = ?
)
GROUP BY a.T_TestID
ORDER BY T_OrderDetailT_TestSasCode ASC) x
LEFT JOIN (
SELECT *
FROM t_orderdetail
LEFT JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
LEFT JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsNonLab = ''
LEFT JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
LEFT JOIN documentation_group ON DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupName = 'lab'
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 T_TestT_SampleTypeID = os.T_OrderSampleT_SampleTypeID
LEFT JOIN pre_analytic ON PreAnalyticNat_TestID = T_TestNat_TestID AND PreAnalyticDate = date(now()) and PreAnalyticIsActive = 'Y'
AND PreAnalyticT_WorklistID = ?
LEFT JOIN t_orderdetailaddon ON T_OrderDetailID = T_OrderDetailAddOnT_OrderDetailID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
) y
ON x.T_OrderDetailT_OrderHeaderID = y.T_OrderDetailT_OrderHeaderID
AND y.T_OrderDetailT_TestSasCode LIKE CONCAT(x.T_OrderDetailT_TestSasCode, '%')
GROUP BY t_testid
order by T_TestSasCode";
$query = $this->db_smartone->query($sql, [$id, $group_id, $id, $group_id, $id, $group_id, $id]);
$lq = $this->db_smartone->last_query();
}
else
{
$sql = "SELECT *, 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_OrderDetailVerDeltaCheck delta_check,
y.T_OrderDetailVerTrendAnalysis trend_analysis,
y.T_OrderDetailVerification verification,
y.T_OrderDetailVerification verification_old,
y.T_OrderDetailValidation validation,
y.T_OrderDetailReqStatus sample_handling_perfect,
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,
PreAnalyticID pre_analytic,
T_OrderHeaderID order_id, y.T_OrderDetailT_TestSasCode test_sas_code,
tx.T_TestSasCode,
T_OrderDetailAddOnResample `resample`, T_OrderDetailAddOnResampleStatus resample_status,
T_OrderDetailAddOnRef ref
FROM t_orderdetail x
JOIN t_test tx ON x.T_OrderDetailT_TestID = T_TestID
JOIN documentation_group_detail ON DocumentationGroupDetailNat_SubGroupID = tx.T_TestNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
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();
}
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 search_old_2()
{
$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;
$group_id = 0;
if (isset($prm['group_id']))
$group_id = $prm['group_id'];
// if ($lang == $this->lang_default_code)
// {
if ($group_id != 0)
{
$sql = "SELECT IFNULL(z.T_TesTID, x.t_testid) t_testid,
IFNULL(z.T_TestName, x.t_testname) t_testname,
IFNULL(z.T_TestNat_TesTID, x.nattest_id) nattest_id,
IFNULL(y.T_OrderDetailResult, x.result) result,
IFNULL(y.T_OrderDetailResult, x.result_old) result_old,
IFNULL(y.T_OrderDetailNote, x.note) note,
IFNULL(y.T_OrderDetailNote, x.note_old) note_old,
IFNULL(y.T_OrderDetailID, x.id) id,
IFNULL(y.T_OrderDetailT_TestIsResult, x.is_result) is_result,
IFNULL(z.T_TestIsQuantitative, x.is_quantitative) is_quantitative,
IFNULL(y.T_OrderDetailVerDeltaCheck, x.delta_check) delta_check,
IFNULL(y.T_OrderDetailVerTrendAnalysis, x.trend_analysis) trend_analysis,
IFNULL(y.T_OrderDetailVerification, x.verification) verification,
IFNULL(y.T_OrderDetailVerification, x.verification_old) verification_old,
IFNULL(y.T_OrderDetailReqStatus, x.sample_handling_perfect) sample_handling_perfect,
IFNULL(y.T_OrderDetailNat_NormalValueID, x.normal_id) normal_id,
IFNULL(y.T_OrderDetailNormalValueNote, x.normal_note) normal_note,
IFNULL(y.T_OrderDetailNat_UnitName, x.unit_name) unit_name,
IFNULL(y.T_OrderdetailNat_MethodeID, x.methode_id) methode_id,
IFNULL(y.T_OrderdetailNat_MethodeName, x.methode_name) methode_name,
IFNULL(y.T_OrderDetailVerification, x.T_OrderDetailVerification) T_OrderDetailVerification,
IFNULL(y.T_OrderDetailT_OrderHeaderID, x.T_OrderDetailT_OrderHeaderID) T_OrderDetailT_OrderHeaderID,
IFNULL(y.T_OrderDetailT_TestSasCode, x.T_OrderDetailT_TestSasCode) T_OrderDetailT_TestSasCode,
IFNULL(os1.T_OrderSampleReceive, x.T_OrderSampleReceive) sample_receive,
IFNULL(os1.T_OrderSampleProcessing, x.T_OrderSampleProcessing) sample_processing,
CAST( level + (LENGTH(y.T_OrderDetailT_TestSasCode) - LENGTH(x.T_OrderDetailT_TestSasCode))/2 as SIGNED) level
FROM (
SELECT IFNULL(a.t_testid, b.t_testid) t_testid, IFNULL(a.t_testname, b.t_testname) t_testname,
T_OrderDetailResult result, T_OrderDetailResult result_old, T_OrderDetailNote note, T_OrderDetailNote note_old, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
COUNT(b.T_TestID) level,
T_OrderDetailVerDeltaCheck delta_check,
T_OrderDetailVerTrendAnalysis trend_analysis,
T_OrderDetailVerification verification,
T_OrderDetailVerification verification_old,
T_OrderDetailReqStatus sample_handling_perfect,
T_OrderDetailNat_NormalValueID normal_id,
T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n,
T_OrderDetailVerification, T_OrderDetailT_OrderHeaderID, IFNULL(T_OrderDetailT_TestSasCode, b.T_TestSasCode) T_OrderDetailT_TestSasCode,
T_OrderSampleReceive, T_OrderSampleProcessing
FROM t_orderdetail
JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
LEFT JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive, T_OrderSampleProcessing
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_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = T_OrderDetailID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_TestID IN
( SELECT T_WorklistDetailT_TestID
FROM t_worklistdetail
WHERE T_WorklistDetailIsactive = 'Y' ANd T_WorklistDetailT_WorklistID = ?
)
GROUP BY a.T_TestID
ORDER BY T_OrderDetailT_TestSasCode ASC) x
LEFT JOIN t_orderdetail y ON x.T_OrderDetailT_OrderHeaderID = y.T_OrderDetailT_OrderHeaderID
AND y.T_OrderDetailIsActive = 'Y'
AND y.T_OrderDetailT_TestSasCode LIKE CONCAT(x.T_OrderDetailT_TestSasCode, '%')
LEFT JOIN t_test z ON y.T_OrderDetailT_TestID = z.T_TestID
LEFT JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive, T_OrderSampleProcessing
FROM t_ordersample WHERE T_OrderSampleT_OrderHeaderID = ?
AND T_OrderSampleIsactive = 'Y'
GROUP BY T_OrderSampleT_SampleTypeID) os1 ON z.T_TestT_SampleTypeID = os1.T_OrderSampleT_SampleTypeID";
$query = $this->db_smartone->query($sql, [$id, $id, $group_id, $id]);
$lq = $this->db_smartone->last_query();
}
else
{
$sql = "SELECT a.t_testid, a.t_testname,
T_OrderDetailResult result, T_OrderDetailNote note, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, COUNT(b.T_TestID) level,
T_OrderDetailVerDeltaCheck delta_check,
T_OrderDetailVerTrendAnalysis trend_analysis,
T_OrderDetailVerification verification,
T_OrderDetailVerification verification_old,
T_OrderDetailReqStatus sample_handling_perfect, T_OrderDetailNat_NormalValueID normal_id,
T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n,
T_OrderDetailVerification, T_OrderSampleReceive sample_receive,
T_OrderSampleProcessing sample_processing
FROM t_orderdetail
JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
AND a.T_TestIsNonLab = ''
JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive, T_OrderSampleProcessing
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_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = T_OrderDetailID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
GROUP BY a.T_TestID
ORDER BY T_OrderDetailT_TestSasCode ASC
";
$query = $this->db_smartone->query($sql, [$id, $id]);
}
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 ($v['delta_check'] == "X")
{
$tmp = $this->db_smartone->query("SELECT fn_process_re_deltacheck('{$v['id']}') x")
->row();
$v['delta_check'] = $tmp->x;
}
if ($v['trend_analysis'] == "X")
{
$tmp = $this->db_smartone->query("SELECT fn_process_re_trendanalysis('{$v['id']}') x")
->row();
$v['trend_analysis'] = $tmp->x;
}
// Sample Handling & Verification Perfect
if ($v['sample_handling_perfect'] == 'X')
{
$y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$id}', '{$v['t_testid']}') c")
->row();
$v['sample_handling_perfect'] = $y->c;
}
// Override
if ($y->c == "N")
{
$v['delta_check'] = "N";
$v['trend_analysis'] = "N";
}
$rst[] = $v;
}
$result = array("total" => $tot_count, "records" => $rst, "total_display" => sizeof($rows), "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
}
else {
$this->sys_error_db("RE Px rows", $this->db_smartone);
exit;
}
}
public function confirm()
{
$prm = $this->sys_input;
$data = json_decode($prm["id"]);
if (sizeof($data) < 1)
{
$this->sys_error_db("RE Verification Confirmation", $this->db_smartone);
exit;
}
else
{
$ids = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailVerDeltaCheck', $v->delta)
->set('T_OrderDetailVerTrendAnalysis', $v->trend)
->set('T_OrderDetailVerification', $v->verification)
->set('T_OrderDetailVerDate', date('Y-m-d H:i:s'))
->set('T_OrderDetailVerUserID', $this->sys_user->M_UserID)
->where('T_OrderDetailID', $v->id)
->update('t_orderdetail');
$ids[] = $v->id;
}
$this->sys_ok($ids);
}
}
public function search_group()
{
$prm = $this->sys_input;
$max_rst = 12;
// 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;
}
}
}

View File

@@ -0,0 +1,187 @@
<?php
class Rv_verification extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RV Px API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
$this->db_one= $this->load->database("onedev", true);
}
function requirement($id) {
$sql = "call sp_result_verify_requirement(?)";
$query = $this->db_one->query($sql, array($id));
$this->clean_mysqli_connection($this->db_one);
$rows = $query->result_array() ;
$result = array();
foreach( $rows as $r ) {
$jdata = json_decode( $r["jdata"] );
$a_pos = array();
foreach($jdata as $req ) {
$xreq = json_decode($req,true);
foreach($xreq as $position => $req) {
$a_req = explode("^",$req);
$a_pos[$position] = $a_req;
}
}
$result = $a_pos;
}
return $this->req_html($result);
}
function req_html($result) {
$a_pos = $result;
if (count($a_pos) == 0 ) return "";
$html = "<table >\n";
$html .= "<tr><th style='text-align:left;padding:5px;'>Position</th>
<th style='text-align:left;padding:5px;' >Requirements</th></tr>\n";
foreach($a_pos as $pos => $reqs) {
$html .= "<tr valign='top' >\n";
$html .= "<td style='text-align:left;padding:5px;'>$pos</td>";
$html .= "<td style='text-align:left;padding:5px;'>";
foreach($reqs as $r) {
$html .= "$r<br/>";
}
$html .= "</td>";
$html .= "</tr>";
}
$html .= "</table>";
return $html;
}
public function trend_analysis()
{
$prm = $this->sys_input;
$id = $prm["order_id"];
$image = "";
$note = "";
try {
$sql = "select fn_process_re_trendanalysis(?) ta";
$qry = $this->db_one->query($sql,array($id));
if ($qry) {
$row = $qry->row();
$j_tmp = json_decode($row->ta);
if ($j_tmp->image != "") {
$image = $j_tmp->image . "&ts=" . date("Ymdhnis");
}
$note = $j_tmp->note;
}
} catch(Exception $e) {
}
$req_note =$this->requirement($id);
if ($req_note != "" ) {
$note = $req_note;
$image = "";
}
$data = ["image"=>$image,
"note"=> $note,
"title"=>"Trend Analisis"];
$this->sys_ok($data);
}
public function delta_check()
{
$prm = $this->sys_input;
$id = $prm["order_id"];
$note = "";
try {
$sql = "select fn_process_re_deltacheck(?) ta";
$qry = $this->db_one->query($sql,array($id));
if ($qry) {
$row = $qry->row();
$j_tmp = json_decode($row->ta);
$note = $j_tmp->note;
}
} catch(Exception $e) {
}
$req_note =$this->requirement($id);
if ($req_note != "" ) {
$note = $req_note;
$image = "";
}
$data = [ "note"=> $note,
"image" => "",
"title"=>"Delta Check"];
$this->sys_ok($data);
}
public function confirm()
{
$prm = $this->sys_input;
$data = json_decode($prm["data"]);
if (sizeof($data) < 1)
{
$this->sys_error_db("RE Verification Confirmation", $this->db_smartone);
exit;
}
else
{
$ids = [];
foreach ($data as $k => $v)
{
$this->db_smartone->set('T_OrderDetailVerDeltaCheck', $v->delta)
->set('T_OrderDetailVerTrendAnalysis', $v->trend)
->set('T_OrderDetailVerification', $v->verification)
->set('T_OrderDetailVerDate', $v->verification == "Y" ? date('Y-m-d H:i:s') : null)
->set('T_OrderDetailVerUserID', $this->sys_user['M_UserID'])
->where('T_OrderDetailID', $v->id)
->update('t_orderdetail');
$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.Verification')
->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
//sipe : verifikasi Y t_orderdetail IsParent Y T_OrderDetailVerification X IsResult N
$sql = "update t_orderdetail,t_test
set T_OrderDetailVerification='Y',
T_OrderDetailVerDate = now(),
T_OrderDetailVerUserID = ?
where T_OrderDetailT_OrderHeaderID = ? and T_OrderDetailT_TestID = T_TestID
and T_TestIsParent = 'Y' and T_TestIsResult = 'N'
and T_OrderDetailVerification='X'";
$this->db_smartone->query($sql,array($this->sys_user['M_UserID'],$order->id));
file_put_contents("/xtmp/pe-debug.sql",$this->db_smartone->last_query());
$this->sys_ok($ids);
}
}
public function reject()
{
$prm = $this->sys_input;
// QUERY TOTAL
$sql = "CALL sp_process_result_validation_reject(?, ?)";
$query = $this->db_smartone->query($sql, [$prm['id'], $prm['action']]);
if ($query) {
$row = $query->row();
$this->sys_ok($row);
}
else {
$this->sys_error_db("REJECT VERIFICATION", $this->db_smartone);
}
}
}

View File

@@ -0,0 +1,486 @@
<?php
class Search_box extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "RE Px API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function save_order() {
$prm = $this->sys_input;
$orders= $prm["orders"];
$odid = "-1";
foreach($orders as $order) {
$odid .= "," . $order["T_OrderDetailID"];
}
$sql = "select * from t_orderdetail where T_OrderDetailID in ($odid)";
$rows_before = $this->db_smartone->query($sql)->result_array();
$userID = $this->sys_user['M_UserID'];
$sql = "update t_orderdetail set T_OrderDetailResult = ? , T_OrderDetailUserID = ?
where T_OrderDetailID = ?";
foreach($orders as $order) {
$id = $order["T_OrderDetailID"];
$result = $order["T_OrderDetailResult"];
$this->db_smartone->query($sql,array($result,$userID, $id));
echo $this->db_smartone->last_query() . "\n";
}
$sql = "insert into one_log.log_resultentry(Log_ResultEntryCode,
Log_ResultEntryUserID, Log_ResultEntryJson)
values('RE.PX',$userID, ?)";
$j_log = json_encode(array("before" => $rows_before , "after" => $orders));
$this->db_smartone->query($sql,$j_log);
$this->sys_ok( array("message"=>"Result Save"));
}
public function search_order()
{
$prm = $this->sys_input;
$max_rst = 99;
$nat_test_id = $prm["nat_test_id"];
$date = $prm["sdate"];
$sdate = $date . " 00:00:01";
$edate = $date . " 23:59:59";
$sql = "select T_OrderHeaderID, T_OrderHeaderLabNumber, concat(M_TitleName,' ', M_PatientName) M_PatientName,
T_OrderDetailID,T_OrderDetailResult,T_OrderDetailNormalValueDescription, T_OrderDetailNote,
T_TestIsQuantitative,T_OrderDetailNormalValueNote, T_OrderDetailVerification,
T_OrderDetailResult as OriginalResult, T_TestID,
case
when T_OrderSampleHandling = 'Y' then 'OK'
when T_OrderSampleReceive= 'N' then 'Bahan Belum'
else 'Bahan Belum'
end
SampleStatus,
ifnull(T_OrderSampleWorklistReceive,'N') T_OrderSampleWorklistReceive,
fn_have_preanalytic( date(T_OrderHeaderDate), T_TestNat_TestID) IsPreAnalytic,
fn_get_requirement(T_OrderHeaderID,T_TestID) IsHavingRequirement,
Nat_UnitName
from t_orderdetail
join t_orderheader on T_OrderHeaderIsActive = 'Y' and T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
and T_OrderHeaderDate > ? and T_OrderHeaderDate < ?
join m_patient on T_OrderHeaderM_PatientID = M_PatientID
join m_title on M_PatientM_TitleID = M_TitleID
join t_test on T_OrderDetailT_TestID = T_TestID and T_OrderDetailIsActive = 'Y'
and T_TestNat_TestID = ?
join t_ordersample on T_OrderHeaderID = T_OrderSampleT_OrderHeaderID and T_TestT_SampleTypeID = T_OrderSampleT_SampleTypeID
join nat_test on T_TestNat_TestID = Nat_TestID
join nat_unit on Nat_TestNat_UnitID = Nat_UnitID
order by T_OrderHeaderID";
$query = $this->db_smartone->query($sql, array($sdate,$edate,$nat_test_id ));
$result = array();
if ($query) {
$result =$query->result_array();
$new_result = array();
foreach($result as $idx => $v) {
$new_result[] = $v;
}
} else {
$this->sys_error_db($this->db_smartone->last_query());
}
$this->sys_ok( array("records" => $new_result , "message" => ""));
}
public function search_px()
{
$prm = $this->sys_input;
$max_rst = 99;
$group_id = $prm["group_id"];
$search = '%' . $prm["search"] . '%' ;
$date = $prm["sdate"];
$sdate = $date . " 00:00:01";
$edate = $date . " 23:59:59";
$sql = "
select distinct
Nat_TestID, Nat_TestCode, Nat_TestName
from t_test
join nat_test on T_TestNat_TestID = Nat_TestID
join t_orderdetail on
T_TestID = T_OrderDetailT_TestID
and T_TestIsResult = 'Y'
and T_OrderDetailIsActive = 'Y'
and T_OrderDetailVerification <> 'Y'
join t_orderheader on T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
and T_OrderHeaderDate > ? and T_OrderHeaderDate < ?
and T_OrderHeaderIsActive = 'Y'
join t_worklistdetail on T_TestID = T_WorklistDetailT_TestID
and ( T_WorklistDetailT_WorklistID = $group_id or $group_id = 0 )
where T_TestCode like '$search' or T_TestName like '$search'
union
select distinct
Nat_TestID, Nat_TestCode, Nat_TestName
from t_worklistdetail
join t_test p on
p.T_TestID = T_WorklistDetailT_TestID and T_WorklistDetailIsActive = 'Y'
and ( T_WorklistDetailT_WorklistID = $group_id )
join t_test c on
c.T_TestSasCode like concat(p.T_TestSasCode, '%')
and c.T_TestIsResult = 'Y'
join t_orderdetail on
c.T_TestID = T_OrderDetailT_TestID
and c.T_TestIsResult = 'Y'
and T_OrderDetailIsActive = 'Y'
and T_OrderDetailVerification <> 'Y'
join t_orderheader on T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
and T_OrderHeaderDate > ? and T_OrderHeaderDate < ?
and T_OrderHeaderIsActive = 'Y'
join nat_test on Nat_TestID = c.T_TestNat_TestID
where c.T_TestCode like '$search' or c.T_TestName like '$search'
order by Nat_TestCode ";
$query = $this->db_smartone->query($sql, array($sdate,$edate,$sdate,$edate));
$result = array();
if ($query) {
$result =$query->result_array();
} else {
$this->sys_error_db($this->db_smartone->last_query());
}
$this->sys_ok( array("records" => $result , "message" => ""));
}
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 = "";
// if ($lang == $this->lang_default_code)
// {
if (isset($prm['group_id']) && $prm["group_id"] > 0 )
{
$sql = "SELECT IFNULL(z.T_TesTID, x.t_testid) t_testid,
IFNULL(z.T_TestName, x.t_testname) t_testname,
IFNULL(z.T_TestNat_TesTID, x.nattest_id) nattest_id,
IFNULL(y.T_OrderDetailResult, x.result) result,
IFNULL(y.T_OrderDetailResult, x.result_old) result_old,
IFNULL(y.T_OrderDetailNote, x.note) note,
IFNULL(y.T_OrderDetailNote, x.note_old) note_old,
IFNULL(y.T_OrderDetailID, x.id) id,
IFNULL(y.T_OrderDetailT_TestIsResult, x.is_result) is_result,
IFNULL(z.T_TestIsQuantitative, x.is_quantitative) is_quantitative,
IFNULL(y.T_OrderDetailNat_NormalValueID, x.normal_id) normal_id,
IFNULL(y.T_OrderDetailNormalValueNote, x.normal_note) normal_note,
IFNULL(y.T_OrderDetailNat_UnitName, x.unit_name) unit_name,
IFNULL(y.T_OrderdetailNat_MethodeID, x.methode_id) methode_id,
IFNULL(y.T_OrderdetailNat_MethodeName, x.methode_name) methode_name,
IFNULL(y.T_OrderDetailVerification, x.T_OrderDetailVerification) T_OrderDetailVerification,
IFNULL(y.T_OrderDetailT_OrderHeaderID, x.T_OrderDetailT_OrderHeaderID) T_OrderDetailT_OrderHeaderID,
IFNULL(y.T_OrderDetailT_TestSasCode, x.T_OrderDetailT_TestSasCode) T_OrderDetailT_TestSasCode,
IFNULL(os1.T_OrderSampleReceive, x.T_OrderSampleReceive) sample_receive,
CAST( level + (LENGTH(y.T_OrderDetailT_TestSasCode) - LENGTH(x.T_OrderDetailT_TestSasCode))/2 as SIGNED) level
FROM (
SELECT IFNULL(a.t_testid, b.t_testid) t_testid, IFNULL(a.t_testname, b.t_testname) t_testname,
T_OrderDetailResult result, T_OrderDetailResult result_old, T_OrderDetailNote note, T_OrderDetailNote note_old, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
COUNT(b.T_TestID) level, T_OrderDetailNat_NormalValueID normal_id,
T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n,
T_OrderDetailVerification, T_OrderDetailT_OrderHeaderID, IFNULL(T_OrderDetailT_TestSasCode, b.T_TestSasCode) T_OrderDetailT_TestSasCode,
T_OrderSampleReceive
FROM t_orderdetail
JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
AND a.T_TestIsNonLab = ''
JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive
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_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = T_OrderDetailID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_TestID IN
( SELECT T_WorklistDetailT_TestID
FROM t_worklistdetail
WHERE T_WorklistDetailIsactive = 'Y' ANd T_WorklistDetailT_WorklistID = ?
)
GROUP BY a.T_TestID
ORDER BY T_OrderDetailT_TestSasCode ASC) x
LEFT JOIN t_orderdetail y ON x.T_OrderDetailT_OrderHeaderID = y.T_OrderDetailT_OrderHeaderID
AND y.T_OrderDetailIsActive = 'Y'
AND y.T_OrderDetailT_TestSasCode LIKE CONCAT(x.T_OrderDetailT_TestSasCode, '%')
LEFT JOIN t_test z ON y.T_OrderDetailT_TestID = z.T_TestID
LEFT JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive
FROM t_ordersample WHERE T_OrderSampleT_OrderHeaderID = ?
AND T_OrderSampleIsactive = 'Y'
GROUP BY T_OrderSampleT_SampleTypeID) os1 ON z.T_TestT_SampleTypeID = os1.T_OrderSampleT_SampleTypeID";
$query = $this->db_smartone->query($sql, [$id, $id, $prm['group_id'], $id]);
$lq = $this->db_smartone->last_query();
}
else
{
// sipe : b.T_TestIsQuantitative di ganti a.T_TestIsQuantitative
$sql = "SELECT IFNULL(a.t_testid, b.t_testid) t_testid, IFNULL(a.t_testname, b.t_testname) t_testname,
T_OrderDetailResult result, T_OrderDetailResult result_old, T_OrderDetailNote note, T_OrderDetailNote note_old, T_OrderDetailID id,
T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
COUNT(b.T_TestID) level, T_OrderDetailNat_NormalValueID normal_id,
T_OrderDetailNormalValueNote normal_note, T_OrderDetailNat_UnitName unit_name,
T_OrderdetailNat_MethodeID methode_id, T_OrderdetailNat_MethodeName methode_name,
a.T_TestNat_TestID nattest_id, count(T_ResultInstrumentID) as result_instrument_n,
T_OrderDetailVerification, T_OrderSampleReceive sample_receive
FROM t_orderdetail
JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
AND a.T_TestIsNonLab = ''
JOIN (SELECT T_OrderSampleT_SampleTypeID, T_OrderSampleReceive
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_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
LEFT JOIN t_resultinstrument ON T_ResultInstrumentT_OrderDetailID = T_OrderDetailID
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'
GROUP BY a.T_TestID
ORDER BY T_OrderDetailT_TestSasCode ASC
";
$query = $this->db_smartone->query($sql, [$id, $id]);
}
// file_put_contents("/xtmp/xx.sql",$sql);
// }
// else
// {
// $sql = "SELECT a.t_testid, T_OrderDetailLangNat_TestLangName t_testname,
// T_OrderDetailLangResult result, T_OrderDetailLangResult result_old, T_OrderDetailLangNote note, T_OrderDetailLangNote note_old, T_OrderDetailLangID id,
// T_OrderDetailT_TestIsResult is_result, a.T_TestIsQuantitative is_quantitative,
// COUNT(b.T_TestID) level, T_OrderDetailVerification
// FROM t_orderdetail
// JOIN t_test a ON T_OrderDetailT_TestID = a.T_TestID
// AND a.T_TestIsNonLab = ''
// LEFT JOIN t_test b ON a.T_TestSasCode LIKE CONCAT(b.T_TestSasCode, '%')
// JOIN t_orderdetaillang ON T_OrderDetailLangT_OrderDetailID = T_OrderDetailID
// AND T_OrderDetailLangIsActive = 'Y'
// AND T_OrderDetailLangNat_LangID = ?
// WHERE T_OrderDetailT_OrderHeaderID = ?
// AND T_OrderDetailIsActive = 'Y'
// GROUP BY a.T_TestID
// ORDER BY T_OrderDetailT_TestSasCode ASC
// ";
// $query = $this->db_smartone->query($sql, [$lang_id, $id ]);
// }
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();
}
$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;
}
$ids = [];
foreach ($data as $k => $v)
{
$y = $this->db_smartone->query("SELECT fn_process_sample_handling_perfect('{$v->order_id}', '{$v->test_id}') c")
->row();
$req_status = $y->c;
if ($lang == $this->lang_default_code)
{
$this->db_smartone->set('T_OrderDetailResult', $v->result)
->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
$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 = 12;
// 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;
}
}
}

View File

@@ -0,0 +1,605 @@
<?php
class Pre_analytic extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
function suggest_v2() {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$orderID = $prm["T_OrderHeaderID"];
$testID = $prm["T_TestID"];
$sampleTypeID = $prm["T_SampleTypeID"];
$sql= "select T_WorklistName, count(*) tot_px
from
t_worklist
join t_worklistdetail on T_WorklistID = T_WorklistDetailT_WorklistID
and T_WorklistDetailIsActive = 'Y'
and T_WorklistIsActive = 'Y'
join t_test tw on tw.T_TestID = T_WorklistDetailT_TestID
join t_test t on t.T_TestNat_TestID = tw.T_TestNat_TestID
and t.T_TestT_SampleTypeID = ?
join t_orderdetail on t.T_TestID = T_OrderDetailT_TestID
and T_OrderDetailIsActive = 'Y' and T_OrderDetailT_OrderHeaderID = ?
group by T_WorklistID
order by tot_px desc";
$qry = $this->db_onedev->query($sql, array($sampleTypeID,$orderID) );
$rows = $qry->result_array();
$msg = "Tidak ada preferensi";
if (count($rows) > 0 ) {
$prev_tot_px = 0;
$msg = "";
foreach($rows as $r) {
$tot_px = $r["tot_px"];
$name = $r["T_WorklistName"];
if ($tot_px >= $prev_tot_px) {
if ($msg != "") $msg .= ", ";
$msg .= "$name [ <b>$tot_px</b> Px ]";
}
$prev_tot_px = $tot_px;
}
}
$result = array(
"message"=> $msg,
);
$this->sys_ok($result);
}
function suggest() {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$orderID = $prm["T_OrderHeaderID"];
$testID = $prm["T_TestID"];
$sampleTypeID = $prm["T_SampleTypeID"];
$sql= "select T_WorklistName, count(*) tot_px
from
t_worklist
join t_worklistdetail on T_WorklistID = T_WorklistDetailT_WorklistID
and T_WorklistDetailIsActive = 'Y'
and T_WorklistIsActive = 'Y'
join t_orderdetail on T_WorklistDetailT_TestID = T_OrderDetailT_TestID
and T_OrderDetailIsActive = 'Y' and T_OrderDetailT_OrderHeaderID = ?
join t_test on T_OrderDetailT_TestID = T_TestID
and T_TestT_SampleTypeID = ?
group by T_WorklistID
order by tot_px desc";
$qry = $this->db_onedev->query($sql, array($orderID, $sampleTypeID) );
$rows = $qry->result_array();
$msg = "Tidak ada preferensi";
if (count($rows) > 0 ) {
$prev_tot_px = 0;
$msg = "";
foreach($rows as $r) {
$tot_px = $r["tot_px"];
$name = $r["T_WorklistName"];
if ($tot_px >= $prev_tot_px) {
if ($msg != "") $msg .= ", ";
$msg .= "$name [ <b>$tot_px</b> Px ]";
}
$prev_tot_px = $tot_px;
}
}
$result = array(
"message"=> $msg,
);
$this->sys_ok($result);
}
function get_v2() {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$sql= "select T_TestNat_TestID T_TestID,PreAnalyticDate, PreAnalyticTime,
PreAnalyticT_WorklistID T_WorklistID,
PreAnalyticRequirements,PreAnalyticIsOk
from pre_analytic
join t_test on PreAnalyticNat_TestID = T_TestNat_TestID
where
PreAnalyticDate = date(now()) ";
$rows = $this->db_onedev->query($sql)->result_array();
$result = array(
"records"=> $rows,
"total" => count($rows)
);
$this->sys_ok($result);
}
function get() {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$sql= "select T_TestID,PreAnalyticDate, PreAnalyticTime,
PreAnalyticT_WorklistID T_WorklistID,
PreAnalyticRequirements,PreAnalyticIsOk
from pre_analytic
join t_test on PreAnalyticNat_TestID = T_TestNat_TestID
where
PreAnalyticDate = date(now()) ";
$rows = $this->db_onedev->query($sql)->result_array();
$result = array(
"records"=> $rows,
"total" => count($rows)
);
$this->sys_ok($result);
}
function save_v2() {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$testID = $prm["T_TestID"];
$worklistID = $prm["T_WorklistID"];
$reqs = $prm["reqs"];
$count = 0;
$req_ids = array();
foreach($reqs as $req) {
$count++;
$req_ids[] = $req["id"];
}
$j_req_ids = json_encode($req_ids);
$sql = "select distinct T_TestNat_TestID
from (
select T_TestNat_TestID
from t_test where T_TestNat_TestID = ?
union
select c.T_TestNat_TestID
from t_test p
join t_test c on c.T_TestSasCode like concat(p.T_TestSasCode,'%')
and length(c.T_TestSasCode) > length(p.T_TestSasCode) and p.T_TestNat_TestID = ?
and c.T_TestIsResult = 'Y'
) x
";
$qry = $this->db_onedev->query($sql, array($testID,$testID) );
$rows = $qry->result_array();
foreach($rows as $r) {
$nat_testID = $r["T_TestNat_TestID"];
$is_ok = 'Y';
if ($count > 0 ) $is_ok = 'N';
$sql= "insert into pre_analytic (PreAnalyticDate, PreAnalyticTime, PreAnalyticT_WorklistID,
PreAnalyticNat_TestID,PreAnalyticRequirements,PreAnalyticIsOk)
values(now(),now(), $worklistID, $nat_testID,?,'$is_ok')
on duplicate key update
PreAnalyticRequirements = ?,
PreAnalyticIsOk = ?";
$this->db_onedev->query($sql,array($j_req_ids, $j_req_ids, $is_ok));
}
$userID = $this->sys_user['M_UserID'];
if ($prm["userID"] > 0 ) $userID = $prm["userID"];
$j_log = json_encode( array(
"T_TestID" => $testID,
"T_WorklistID" => $worklistID,
"Requirement" => $reqs
));
$sql = "insert into one_log.log_worklist(Log_WorklistCode, Log_WorklistUserID, Log_WorklistJson)
values('PRE.ANALYTIC',$userID,'$j_log')";
$this->db_onedev->query($sql);
$result = array("message" => "OK");
$this->sys_ok($result);
}
function save() {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$testID = $prm["T_TestID"];
$worklistID = $prm["T_WorklistID"];
$reqs = $prm["reqs"];
$count = 0;
$req_ids = array();
foreach($reqs as $req) {
$count++;
$req_ids[] = $req["id"];
}
$j_req_ids = json_encode($req_ids);
$sql = "select distinct T_TestNat_TestID
from (
select T_TestNat_TestID
from t_test where T_TestID = ?
union
select c.T_TestNat_TestID
from t_test p
join t_test c on c.T_TestSasCode like concat(p.T_TestSasCode,'%')
and length(c.T_TestSasCode) > length(p.T_TestSasCode) and p.T_TestID = ?
and c.T_TestIsResult = 'Y'
) x
";
$qry = $this->db_onedev->query($sql, array($testID,$testID) );
$rows = $qry->result_array();
//if (count($rows) > 0 ) {
foreach($rows as $r) {
$nat_testID = $r["T_TestNat_TestID"];
$is_ok = 'Y';
if ($count > 0 ) $is_ok = 'N';
$sql= "insert into pre_analytic (PreAnalyticDate, PreAnalyticTime, PreAnalyticT_WorklistID,
PreAnalyticNat_TestID,PreAnalyticRequirements,PreAnalyticIsOk)
values(now(),now(), $worklistID, $nat_testID,?,'$is_ok')
on duplicate key update
PreAnalyticRequirements = ?,
PreAnalyticIsOk = ?";
$this->db_onedev->query($sql,array($j_req_ids, $j_req_ids, $is_ok));
}
$userID = $this->sys_user['M_UserID'];
if ($prm["userID"] > 0 ) $userID = $prm["userID"];
$j_log = json_encode( array(
"T_TestID" => $testID,
"T_WorklistID" => $worklistID,
"Requirement" => $reqs
));
$sql = "insert into one_log.log_worklist(Log_WorklistCode, Log_WorklistUserID, Log_WorklistJson)
values('PRE.ANALYTIC',$userID,'$j_log')";
$this->db_onedev->query($sql);
$result = array("message" => "OK");
$this->sys_ok($result);
}
function worklist_receive() {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$userID = $this->sys_user['M_UserID'];
if ($prm["userID"] > 0 ) $userID = $prm["userID"];
$prm = $this->sys_input;
$orderID= $prm["T_OrderHeaderID"];
$sampleTypeID= $prm["T_SampleTypeID"];
$sql = "update t_ordersample set T_OrderSampleWorklistReceive = 'Y'
, T_OrderSampleWorklistReceiveDateTime = now(), T_OrderSampleWorklistReceiveUserID = $userID
where T_OrderSampleT_OrderHeaderID = ? and T_OrderSampleT_SampleTypeID = ?";
$this->db_onedev->query($sql, array($orderID, $sampleTypeID) );
$j_log = json_encode(
array( "T_OrderHeaderID" => $orderID ,
"T_SampleTypeID" => $testID
));
$sql = "insert into one_log.log_worklist(Log_WorklistCode, Log_WorklistUserID, Log_WorklistJson)
values('RECEIVE',$userID,'$j_log')";
$this->db_onedev->query($sql);
$result = array("message" => "OK");
$this->sys_ok($result);
}
function save_confirmation() {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$testID = $prm["testID"];
$orderID= $prm["orderID"];
$reqs = json_encode($prm["requirement"],true);
$sql = "insert into t_worklist_confirm(T_WorklistConfirmT_OrderHeaderID, T_WorklistConfirmT_TestID, T_WorklistConfirmJson)
values($orderID,$testID,'$reqs')";
$this->db_onedev->query($sql);
$j_log = json_encode(
array( "T_OrderHeaderID" => $orderID ,
"T_TestID" => $testID,
"Requirements" => $reqs
));
$userID = $this->sys_user['M_UserID'];
if ($prm["userID"] > 0 ) $userID = $prm["userID"];
$sql = "insert into one_log.log_worklist(Log_WorklistCode, Log_WorklistUserID, Log_WorklistJson)
values('PRE.ANALYTIC.CONF',$userID,'$j_log')";
$this->db_onedev->query($sql);
$result = array("message" => "OK");
$this->sys_ok($result);
}
function save_reject() {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$userID = $this->sys_user['M_UserID'];
if ($prm["userID"] > 0 ) $userID = $prm["userID"];
$prm = $this->sys_input;
$orderID= $prm["orderID"];
$sampleTypeID= $prm["sampleTypeID"];
$sql = "select * from t_ordersample where T_OrderSampleT_OrderHeaderID=? and T_OrderSampleT_SampleTypeID=?";
$qry = $this->db_onedev->query($sql,array($orderID, $sampleTypeID));
if ($qry) {
$rows = $qry->result_array();
$j_log = json_encode($rows);
$sql = "update t_ordersample
set T_OrderSampleProcessing = 'N' ,
T_OrderSampleHandling = 'N',
T_OrderSampleReceiveHandling = 'N',
T_OrderSampleSendHandling= 'N',
T_OrderSampleVerification= 'N',
T_OrderSampleReceive = 'N',
T_OrderSampleReceiveDate = null,
T_OrderSampleReceiveTime = null,
T_OrderSampleSampling = 'X',
T_OrderSampleSamplingDate = null,
T_OrderSampleSamplingTime = null
where T_OrderSampleT_OrderHeaderID = $orderID and T_OrderSampleT_SampleTypeID = $sampleTypeID";
$this->db_onedev->query($sql);
$sql = "update t_ordersamplereq, t_ordersample set T_OrderSampleReqStatus= 'X'
, T_OrderSampleReqs = '[]'
where T_OrderSampleReqNat_PositionID in (4,3,2)
and T_OrderSampleReqT_OrderHeaderID = T_OrderSampleT_OrderHeaderID
and T_OrderSampleReqT_OrderSampleID = T_OrderSampleID
and T_OrderSampleReqT_OrderHeaderID = $orderID
and T_OrderSampleT_SampleTypeID = $sampleTypeID ";
$this->db_onedev->query($sql);
$sql = "update t_sampling_queue_last_status, t_samplestation
set T_SamplingQueueLastStatusT_SamplingQueueStatusID = 2
where T_SampleStationIsNonLab = ''
and T_SamplingQueueLastStatusT_OrderHeaderID = ? ";
$this->db_onedev->query($sql,array($orderID));
$sql = "insert into one_log.log_worklist(Log_WorklistCode, Log_WorklistUserID, Log_WorklistJson)
values('REJECT',$userID,'$j_log')";
$this->db_onedev->query($sql);
$result = array("message" => "OK");
$this->sys_ok($result);
} else {
$this->sys_error($this->db_onedev->error());
}
}
function getrequirements(){
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$rows = array();
$query = "
SELECT Nat_RequirementID as id,
Nat_RequirementName as name,
'N' as chex
FROM nat_requirement
JOIN nat_requirementposition ON Nat_RequirementPositionNat_RequirementID = Nat_RequirementID AND Nat_RequirementPositionNat_PositionID = 5 AND
Nat_RequirementPositionIsActive = 'Y'
WHERE
Nat_RequirementIsActive = 'Y'
GROUP BY nat_requirementID";
//echo $query;
$rows = $this->db_onedev->query($query)->result_array();
$result = array(
"total" => count($rows) ,
"records" => $rows,
);
$this->sys_ok($result);
exit;
}
public function search_px_v3()
{
$prm = $this->sys_input;
$max_rst = 12;
$wkl = $prm["worklist_id"];
$sdate = date('Y-m-d', strtotime($prm['sdate']));
$edate = date('Y-m-d', strtotime($prm['edate']));
$sql ="call sp_process_worklist_requirement_v2(?,?,?)";
$query = $this->db_smartone->query($sql,array($wkl, $sdate, $edate));
if ($query) {
$rows = $query->result_array();
$result = array();
$prev_test_id = "";
$last_idx = 0;
foreach($rows as $r) {
$test_id = $r["Nat_TestID"];
if ($prev_test_id != $test_id ) {
$result[] = array(
"T_TestID" => $test_id,
"Nat_TestID" => $test_id,
"T_TestCode" => $r["Nat_TestCode"],
"T_TestName" => $r["Nat_TestName"],
"T_WorklistID" => $wkl,
"patients" => array()
);
$last_idx = sizeof($result) - 1;
}
if ($r["M_PatientName"] != "" ) {
$result[$last_idx]["patients"][] = array(
"name" => $r["M_PatientName"],
"id" => $r["T_OrderHeaderID"],
"did" => $r["T_OrderDetailID"],
"number" => $r["T_OrderHeaderLabNumber"],
"T_SampleTypeID" => $r["T_SampleTypeID"],
"speciment_receive" => $r["IsCollectionReceive"],
"speciment_handling" => $r["IsSamplingHandling"],
"is_cito" => $r["IsCito"],
"is_received" => $r["IsWorklistReceive"],
"is_confirm" => $r["IsWorklistConfirm"],
"barcode" => $r["BarcodeLabel"],
"requirements" => json_decode($r["Requirement"],true)
);
}
$prev_test_id = $test_id;
}
$tot_count = sizeof($result);
$result = array("total" => $tot_count, "records" => $result,
"total_display" => $tot_count, "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
} else {
$this->sys_error_db("worklist err", $this->db_smartone);
exit;
}
}
public function search_px_v2()
{
$prm = $this->sys_input;
$max_rst = 12;
$wkl = $prm["worklist_id"];
$sdate = date('Y-m-d', strtotime($prm['sdate']));
$edate = date('Y-m-d', strtotime($prm['edate']));
$sql ="call sp_process_worklist_requirement(?,?,?)";
$query = $this->db_smartone->query($sql,array($wkl, $sdate, $edate));
if ($query) {
$rows = $query->result_array();
$result = array();
$prev_test_id = "";
$last_idx = 0;
foreach($rows as $r) {
$test_id = $r["T_TestID"];
if ($prev_test_id != $test_id ) {
$result[] = array(
"T_TestID" => $test_id,
"T_TestCode" => $r["T_TestCode"],
"T_TestName" => $r["T_TestName"],
"T_WorklistID" => $wkl,
"patients" => array()
);
$last_idx = sizeof($result) - 1;
}
if ($r["M_PatientName"] != "" ) {
$result[$last_idx]["patients"][] = array(
"name" => $r["M_PatientName"],
"id" => $r["T_OrderHeaderID"],
"did" => $r["T_OrderDetailID"],
"number" => $r["T_OrderHeaderLabNumber"],
"T_SampleTypeID" => $r["T_SampleTypeID"],
"speciment_receive" => $r["IsCollectionReceive"],
"speciment_handling" => $r["IsSamplingHandling"],
"is_cito" => $r["IsCito"],
"is_received" => $r["IsWorklistReceive"],
"is_confirm" => $r["IsWorklistConfirm"],
"barcode" => $r["BarcodeLabel"],
"requirements" => json_decode($r["Requirement"],true)
);
}
$prev_test_id = $test_id;
}
$tot_count = sizeof($result);
$result = array("total" => $tot_count, "records" => $result,
"total_display" => $tot_count, "q" => $this->db_smartone->last_query());
$this->sys_ok($result);
} else {
$this->sys_error_db("worklist err", $this->db_smartone);
exit;
}
}
public function search_px()
{
$prm = $this->sys_input;
$max_rst = 12;
$wkl = $prm["worklist_id"];
$sdate = date('Y-m-d', strtotime($prm['sdate']));
$edate = date('Y-m-d', strtotime($prm['edate']));
// QUERY TOTAL
$sql = "select count(*) total
from t_worklistdetail
join t_test on t_worklistdetailt_testid = t_testid
where T_WorklistDetailIsActive = 'Y'
and t_worklistdetailt_worklistid = ?";
$query = $this->db_smartone->query($sql, array($wkl));
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("worklist detail count", $this->db_smartone);
exit;
}
$sql = "select T_TestID, T_TestCode, IFNULL(T_TestWorklistName, T_TestName) T_TestName
from t_worklistdetail
join t_test on t_worklistdetailt_testid = t_testid
where T_WorklistDetailIsActive = 'Y'
and t_worklistdetailt_worklistid = ?
order by t_testname asc
limit 0, {$max_rst}";
$query = $this->db_smartone->query($sql, array($wkl));
if ($query) {
$rows = $query->result_array();
foreach ($rows as $k => $v)
{
$q_x = $this->db_smartone->query("select `fn_process_worklist_patient_list`('{$v['T_TestID']}', '{$sdate}', '{$edate}') n");
// echo "select `fn_process_worklist_patient_list`('{$v['T_TestID']}', '{$sdate}', '{$edate}') n; <br/>";
if ($q_x) {
$x = $q_x->row();
$rows[$k]['patients'] = json_decode($x->n);
}
}
$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 test rows", $this->db_smartone);
exit;
}
}
public function search_patient($pxid, $sdate, $edate)
{
$prm = $this->sys_input;
$max_rst = 12;
// QUERY TOTAL
$sql = "select count(*) total from (
select t_orderheaderid
from t_orderheader
join t_orderdetail on t_orderdetailt_orderheaderid = t_orderheaderid
and t_orderdetailisactive = 'Y'
and t_orderdetailt_testid = ?
where t_orderheaderdate between ? and ?
and t_orderheaderisactive = 'Y'
group by t_orderheaderid) a";
$query = $this->db_smartone->query($sql, array($pxid, $sdate.' 00:00:00', $edate.' 23:59:59'));
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("worklist patient count", $this->db_smartone);
exit;
}
$sql = "select t_orderheaderid, t_orderheaderdate, t_orderheaderlabnumber,
m_patientnoreg, m_patientname
from t_orderheader
join m_patient on t_orderheaderm_patientid = m_patientid
join t_orderdetail on t_orderdetailt_orderheaderid = t_orderheaderid
and t_orderdetailisactive = 'Y'
and t_orderdetailt_testid = ?
where t_orderheaderdate between ? and ?
and t_orderheaderisactive = 'Y'
group by t_orderheaderid
limit 0, {$max_rst}";
$query = $this->db_smartone->query($sql, array($pxid, $sdate.' 00:00:00', $edate.' 23:59:59'));
if ($query) {
$rows = $query->result_array();
$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 patient rows", $this->db_smartone);
exit;
}
}
}

View File

@@ -0,0 +1,184 @@
<?php
class Receive_patient extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 12;
$nolab = '%' . $prm["nolab"] . '%';
$search = '%' . $prm["search"] . '%';
if ($prm['nolab'] != '')
$nolab = "%{$prm['nolab']}%";
// QUERY TOTAL
$sql = "select count(*) total
from t_ordersample
join t_orderheader on t_ordersamplet_orderheaderid = t_orderheaderid
join m_patient on t_orderheaderm_patientid = m_patientid
join m_title on M_PatientM_TitleID = M_TitleID
join last_statussample on t_ordersamplet_orderheaderid = last_statussamplet_orderheaderid
and t_ordersamplet_sampletypeid = last_statussamplet_sampletypeid
and t_ordersamplebarcode = last_statussamplebarcode
join m_statussample on last_statussamplem_statussampleid = m_statussampleid
and m_statussamplecode = 'SAMPLING.Handling.To.Process'
where T_OrderHeaderLabNumber like ?
and M_PatientName LIKE ?";
$query = $this->db_smartone->query($sql, array($nolab, $search));
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("m_patient count", $this->db_smartone);
exit;
}
$sql = "select T_OrderHeaderID, T_OrderHeaderLabNumber lab, T_OrderHeaderDate `date`,
M_PatientID, M_PatientNoReg,
concat(M_TitleName,' ',M_PatientName) name,
T_OrderSampleBarcode sid, '' status, last_statussampleid id
from t_ordersample
join t_orderheader on t_ordersamplet_orderheaderid = t_orderheaderid
join m_patient on t_orderheaderm_patientid = m_patientid
join m_title on M_PatientM_TitleID = M_TitleID
join last_statussample on t_ordersamplet_orderheaderid = last_statussamplet_orderheaderid
and t_ordersamplet_sampletypeid = last_statussamplet_sampletypeid
and t_ordersamplebarcode = last_statussamplebarcode
join m_statussample on last_statussamplem_statussampleid = m_statussampleid
and m_statussamplecode = 'SAMPLING.Handling.To.Process'
where T_OrderHeaderLabNumber like ?
and M_PatientName LIKE ?
limit 0, {$max_rst}";
$query = $this->db_smartone->query($sql, array($nolab, $search));
if ($query) {
$rows = $query->result_array();
$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("m_patient rows", $this->db_smartone);
exit;
}
}
public function search_sent()
{
$prm = $this->sys_input;
$max_rst = 12;
$nolab = '%' . $prm["nolab"] . '%';
$search = '%' . $prm["search"] . '%';
if ($prm['nolab'] != '')
$nolab = "%{$prm['nolab']}%";
// QUERY TOTAL
$sql = "select count(*) total
from t_ordersample
join t_orderheader on t_ordersamplet_orderheaderid = t_orderheaderid
join m_patient on t_orderheaderm_patientid = m_patientid
join m_title on M_PatientM_TitleID = M_TitleID
join last_statussample on t_ordersamplet_orderheaderid = last_statussamplet_orderheaderid
and t_ordersamplet_sampletypeid = last_statussamplet_sampletypeid
and t_ordersamplebarcode = last_statussamplebarcode
join m_statussample on last_statussamplem_statussampleid = m_statussampleid
and (m_statussamplecode = 'PROCESS.Process.From.Handling')
where T_OrderHeaderLabNumber like ?
and M_PatientName LIKE ?";
$query = $this->db_smartone->query($sql, array($nolab, $search));
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("m_patient count", $this->db_smartone);
exit;
}
$sql = "select T_OrderHeaderID, T_OrderHeaderLabNumber lab, T_OrderHeaderDate `date`,
M_PatientID, M_PatientNoReg,
concat(M_TitleName,' ',M_PatientName) name,
T_OrderSampleBarcode sid, m_statussamplecode status, last_statussampleid id
from t_ordersample
join t_orderheader on t_ordersamplet_orderheaderid = t_orderheaderid
join m_patient on t_orderheaderm_patientid = m_patientid
join m_title on M_PatientM_TitleID = M_TitleID
join last_statussample on t_ordersamplet_orderheaderid = last_statussamplet_orderheaderid
and t_ordersamplet_sampletypeid = last_statussamplet_sampletypeid
and t_ordersamplebarcode = last_statussamplebarcode
join m_statussample on last_statussamplem_statussampleid = m_statussampleid
and (m_statussamplecode = 'PROCESS.Process.From.Handling')
where T_OrderHeaderLabNumber like ?
and M_PatientName LIKE ?
limit 0, {$max_rst}";
$query = $this->db_smartone->query($sql, array($nolab, $search));
if ($query) {
$rows = $query->result_array();
$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("m_patient rows", $this->db_smartone);
exit;
}
}
function receive()
{
$prm = $this->sys_input;
$sql = "CALL sp_process_worklist_01_receive_remove('RCV', '0', '{$prm['ids']}')";
$query = $this->db_smartone->query($sql);
if ($query)
{
$row = $query->row();
$this->sys_ok($row);
}
else {
$this->sys_error_db("handling receive", $this->db_smartone);
exit;
}
}
function remove()
{
$prm = $this->sys_input;
$sql = "CALL sp_process_worklist_01_receive_remove('RMV', '{$prm['id']}', '')";
$query = $this->db_smartone->query($sql);
if ($query)
{
$row = $query->row();
$this->sys_ok($row);
}
else {
$this->sys_error_db("worklist receive remove", $this->db_smartone);
exit;
}
}
}

View File

@@ -0,0 +1,39 @@
<?php
class Staff extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "Patient API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
function search() {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$rows = [];
$query ="SELECT M_StaffID as id, M_StaffName as name, M_StaffCode as code, M_UserID as userid
FROM m_staff
JOIN m_user ON M_UserM_StaffID = M_StaffID AND M_UserIsActive = 'Y'
WHERE
M_StaffIsActive = 'Y' AND M_StaffCode = '{$prm['search']}' LIMIT 1 ";
$rows = $this->db_onedev->query($query)->row_array();
$result = array(
"total" => count($rows) ,
"records" => $rows,
);
$this->sys_ok($result);
exit;
}
}

View File

@@ -0,0 +1,352 @@
<?php
class Worklist_new extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "Worklist API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search_v2()
{
$prm = $this->sys_input;
$max_rst = 12;
// $nolab = '%' . $prm["nolab"] . '%';
$search = '%' . $prm["search"] . '%';
$chosen = $prm['chosen'];
// if ($prm['nolab'] != '')
// $nolab = "%{$prm['nolab']}%";
// QUERY TOTAL
$sql = "select count(*) total
from t_test
join documentation_group_detail on T_TestNat_SubGroupID = DocumentationGroupDetailNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
join documentation_group on DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupIsActive = 'Y' AND DocumentationGroupName = 'lab'
where t_testisactive = 'Y'
and t_testisworklist = 'Y'
and t_testname like ?
and not find_in_set(t_testid, ?)";
$query = $this->db_smartone->query($sql, [$search, $chosen]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("worklist count", $this->db_smartone);
exit;
}
$sql = "select T_TestID, T_TestCode,
T_TestName
from t_test
left join t_sampletype on T_TestT_SampleTypeID = T_SampleTypeID
join documentation_group_detail on T_TestNat_SubGroupID = DocumentationGroupDetailNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
join documentation_group on DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupIsActive = 'Y' AND DocumentationGroupName = 'lab'
where T_TestIsActive = 'Y'
and T_TestIsWorklist = 'Y'
and t_testname like ?
and not find_in_set(t_testid, ?)
order by T_TestName ASC
limit 0, {$max_rst}";
$query = $this->db_smartone->query($sql, [$search, $chosen]);
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()
{
$prm = $this->sys_input;
$max_rst = 12;
// $nolab = '%' . $prm["nolab"] . '%';
$search = '%' . $prm["search"] . '%';
$chosen = $prm['chosen'];
// if ($prm['nolab'] != '')
// $nolab = "%{$prm['nolab']}%";
// QUERY TOTAL
$sql = "select count(*) total
from t_test
join documentation_group_detail on T_TestNat_SubGroupID = DocumentationGroupDetailNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
join documentation_group on DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupIsActive = 'Y' AND DocumentationGroupName = 'lab'
where t_testisactive = 'Y'
and t_testisworklist = 'Y'
and t_testname like ?
and not find_in_set(t_testid, ?)";
$query = $this->db_smartone->query($sql, [$search, $chosen]);
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("worklist count", $this->db_smartone);
exit;
}
$sql = "select T_TestID, T_TestCode,
T_TestName
from t_test
left join t_sampletype on T_TestT_SampleTypeID = T_SampleTypeID
join documentation_group_detail on T_TestNat_SubGroupID = DocumentationGroupDetailNat_SubGroupID
AND DocumentationGroupDetailIsActive = 'Y'
join documentation_group on DocumentationGroupDetailDocumentationGroupID = DocumentationGroupID
AND DocumentationGroupIsActive = 'Y' AND DocumentationGroupName = 'lab'
where T_TestIsActive = 'Y'
and T_TestIsWorklist = 'Y'
and t_testname like ?
and not find_in_set(t_testid, ?)
order by T_TestName ASC
limit 0, {$max_rst}";
$query = $this->db_smartone->query($sql, [$search, $chosen]);
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 save()
{
//# ambil parameter input
$prm = $this->sys_input;
$name = $prm['name'];
$test = json_encode(explode(',', $prm['test']));
$rujukan = $prm['rujukan'];
$instrument = $prm['instrument'];
$sql = "CALL sp_process_worklist_new('{$name}', '{$test}', '{$rujukan}', '{$instrument}')";
$query = $this->db_smartone->query($sql);
if ($query) {
$row = $query->row();
$result = $row;
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist save rows", $this->db_smartone);
exit;
}
}
public function save_edit()
{
//# ambil parameter input
$prm = $this->sys_input;
$name = $prm['name'];
$id = $prm['id'];
$test = json_encode(explode(',', $prm['test']));
$rujukan = $prm['rujukan'];
$instrument = $prm['instrument'];
$sql = "CALL sp_process_worklist_edit('{$id}', '{$name}', '{$test}', '{$rujukan}', '{$instrument}')";
$query = $this->db_smartone->query($sql);
if ($query) {
$row = $query->row();
$result = $row;
$this->sys_ok($result);
}
else {
$this->sys_error_db("worklist save rows", $this->db_smartone);
exit;
}
}
public function search_chosen()
{
$prm = $this->sys_input;
$max_rst = 100;
$wkl = $prm["worklist_id"];
// QUERY TOTAL
$sql = "select count(*) total
from t_worklistdetail
join t_test on t_worklistdetailt_testid = t_testid
where T_WorklistDetailIsActive = 'Y'
and t_worklistdetailt_worklistid = ?";
$query = $this->db_smartone->query($sql, array($wkl));
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("worklist detail count", $this->db_smartone);
exit;
}
$search = "%" . $prm["search"] . "%";
$sql = "select T_TestID, T_TestCode,
concat(T_TestName,' [', ifnull(T_SampleTypeName,'Belum ada SampleType') , ']') T_TestName
from t_worklistdetail
join t_test on t_worklistdetailt_testid = t_testid
left join t_sampletype on T_TestT_SampleTypeID = T_SampleTypeID
where T_WorklistDetailIsActive = 'Y'
and T_TestName like ?
and t_worklistdetailt_worklistid = ?
order by t_testname asc
limit 0, {$max_rst}";
$query = $this->db_smartone->query($sql, array($search,$wkl));
if ($query) {
$rows = $query->result_array();
$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 test rows", $this->db_smartone);
exit;
}
}
public function search_patient($pxid, $sdate, $edate)
{
$prm = $this->sys_input;
$max_rst = 12;
// $wkl = $prm["worklist_id"];
// $edate = date('Y-m-d H:i:s');
// $sdate = date_create();
// date_sub($sdate, date_interval_create_from_date_string("30 days"));
// $sdate = date_format($sdate,"Y-m-d H:i:s");
// $search = '%' . $prm["search"] . '%';
// if ($prm['nolab'] != '')
// $nolab = "%{$prm['nolab']}%";
// QUERY TOTAL
$sql = "select count(*) total from (
select t_orderheaderid
from t_orderheader
join t_orderdetail on t_orderdetailt_orderheaderid = t_orderheaderid
and t_orderdetailisactive = 'Y'
and t_orderdetailt_testid = ?
where t_orderheaderdate between ? and ?
and t_orderheaderisactive = 'Y'
group by t_orderheaderid) a";
$query = $this->db_smartone->query($sql, array($pxid, $sdate.' 00:00:00', $edate.' 23:59:59'));
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("worklist patient count", $this->db_smartone);
exit;
}
$sql = "select t_orderheaderid, t_orderheaderdate, t_orderheaderlabnumber,
m_patientnoreg, m_patientname
from t_orderheader
join m_patient on t_orderheaderm_patientid = m_patientid
join t_orderdetail on t_orderdetailt_orderheaderid = t_orderheaderid
and t_orderdetailisactive = 'Y'
and t_orderdetailt_testid = ?
where t_orderheaderdate between ? and ?
and t_orderheaderisactive = 'Y'
group by t_orderheaderid
limit 0, {$max_rst}";
$query = $this->db_smartone->query($sql, array($pxid, $sdate.' 00:00:00', $edate.' 23:59:59'));
if ($query) {
$rows = $query->result_array();
$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 patient rows", $this->db_smartone);
exit;
}
}
function del()
{
$prm = $this->sys_input;
$wkl = $prm["worklist_id"];
// QUERY DELETE
$sql = "update t_worklistdetail
set t_worklistdetailisactive = 'N'
where T_WorklistDetailIsActive = 'Y'
and t_worklistdetailt_worklistid = ?";
$query = $this->db_smartone->query($sql, array($wkl));
if ($query) {
// QUERY DELETE
$sql = "update t_worklist
set t_worklistisactive = 'N'
where T_WorklistIsActive = 'Y'
and t_worklistid = ?";
$query = $this->db_smartone->query($sql, array($wkl));
$result = ["worklist_id" => $wkl];
$this->sys_ok($result);
exit;
}
else {
$this->sys_error_db("worklist detail delete", $this->db_smartone);
exit;
}
}
public function search_instrument()
{
$prm = $this->sys_input;
$sql = "select Nat_InstrumentID, Nat_InstrumentName
from nat_instrument
WHERE Nat_InstrumentIsActive = 'Y'
order by Nat_InstrumentName ASC";
$query = $this->db_smartone->query($sql);
if ($query) {
$rows = $query->result_array();
$result = array("records" => $rows);
$this->sys_ok($result);
}
else {
$this->sys_error_db("Instrument rows", $this->db_smartone);
exit;
}
}
}

View File

@@ -0,0 +1,224 @@
<?php
class Worklist_patient extends MY_Controller
{
var $db_smartone;
public function index()
{
echo "Worklist API";
}
public function __construct()
{
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
public function search()
{
$prm = $this->sys_input;
$max_rst = 12;
// $nolab = '%' . $prm["nolab"] . '%';
// $search = '%' . $prm["search"] . '%';
// if ($prm['nolab'] != '')
// $nolab = "%{$prm['nolab']}%";
// 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, T_WorklistName, T_WorklistIsRujukan, Nat_InstrumentID, Nat_InstrumentName
from t_worklist
left join nat_instrument on t_worklistnat_instrumentid = nat_instrumentid
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_px()
{
$prm = $this->sys_input;
$max_rst = 12;
$wkl = $prm["worklist_id"];
$sdate = date('Y-m-d', strtotime($prm['sdate']));
$edate = date('Y-m-d', strtotime($prm['edate']));
// $search = '%' . $prm["search"] . '%';
// if ($prm['nolab'] != '')
// $nolab = "%{$prm['nolab']}%";
// QUERY TOTAL
$sql = "select count(*) total
from t_worklistdetail
join t_test on t_worklistdetailt_testid = t_testid
where T_WorklistDetailIsActive = 'Y'
and t_worklistdetailt_worklistid = ?";
$query = $this->db_smartone->query($sql, array($wkl));
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("worklist detail count", $this->db_smartone);
exit;
}
$sql = "select T_TestID, T_TestCode, IFNULL(T_TestWorklistName, T_TestName) T_TestName
from t_worklistdetail
join t_test on t_worklistdetailt_testid = t_testid
where T_WorklistDetailIsActive = 'Y'
and t_worklistdetailt_worklistid = ?
order by t_testname asc
limit 0, {$max_rst}";
$query = $this->db_smartone->query($sql, array($wkl));
if ($query) {
$rows = $query->result_array();
foreach ($rows as $k => $v)
{
$x = $this->db_smartone->query("select `fn_process_worklist_patient_list`('{$v['T_TestID']}', '{$sdate}', '{$edate}') n")->row();
$rows[$k]['patients'] = json_decode($x->n);
}
$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 test rows", $this->db_smartone);
exit;
}
}
public function search_patient($pxid, $sdate, $edate)
{
$prm = $this->sys_input;
$max_rst = 12;
// $wkl = $prm["worklist_id"];
// $edate = date('Y-m-d H:i:s');
// $sdate = date_create();
// date_sub($sdate, date_interval_create_from_date_string("30 days"));
// $sdate = date_format($sdate,"Y-m-d H:i:s");
// $search = '%' . $prm["search"] . '%';
// if ($prm['nolab'] != '')
// $nolab = "%{$prm['nolab']}%";
// QUERY TOTAL
$sql = "select count(*) total from (
select t_orderheaderid
from t_orderheader
join t_orderdetail on t_orderdetailt_orderheaderid = t_orderheaderid
and t_orderdetailisactive = 'Y'
and t_orderdetailt_testid = ?
where t_orderheaderdate between ? and ?
and t_orderheaderisactive = 'Y'
group by t_orderheaderid) a";
$query = $this->db_smartone->query($sql, array($pxid, $sdate.' 00:00:00', $edate.' 23:59:59'));
if ($query) {
$tot_count = $query->result_array()[0]["total"];
}
else {
$this->sys_error_db("worklist patient count", $this->db_smartone);
exit;
}
$sql = "select t_orderheaderid, t_orderheaderdate, t_orderheaderlabnumber,
m_patientnoreg, m_patientname
from t_orderheader
join m_patient on t_orderheaderm_patientid = m_patientid
join t_orderdetail on t_orderdetailt_orderheaderid = t_orderheaderid
and t_orderdetailisactive = 'Y'
and t_orderdetailt_testid = ?
where t_orderheaderdate between ? and ?
and t_orderheaderisactive = 'Y'
group by t_orderheaderid
limit 0, {$max_rst}";
$query = $this->db_smartone->query($sql, array($pxid, $sdate.' 00:00:00', $edate.' 23:59:59'));
if ($query) {
$rows = $query->result_array();
$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 patient rows", $this->db_smartone);
exit;
}
}
function verify()
{
$prm = $this->sys_input;
$data = json_encode($prm['data']);
$sql = "CALL sp_sampling_handling_02_process_reject('PRC', '{$prm['orderid']}', '{$prm['laststatusid']}', '{$data}')";
$query = $this->db_smartone->query($sql);
if ($query)
{
$row = $query->row();
$this->sys_ok($row);
}
else {
$this->sys_error_db("verification verify", $this->db_smartone);
exit;
}
}
function reject()
{
$prm = $this->sys_input;
$data = json_encode($prm['data']);
$sql = "CALL sp_sampling_handling_02_process_reject('RJC', '{$prm['orderid']}', '{$prm['laststatusid']}', '{$data}')";
$query = $this->db_smartone->query($sql);
if ($query)
{
$row = $query->row();
$this->sys_ok($row);
}
else {
$this->sys_error_db("verification reject", $this->db_smartone);
exit;
}
}
}