Initial import
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user