711 lines
26 KiB
PHP
711 lines
26 KiB
PHP
<?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"];
|
|
$worklistID= $prm["worklistID"];
|
|
$sampleTypeID = $prm["T_SampleTypeID"];
|
|
//cari sampleTypeID
|
|
$sql = "
|
|
select distinct T_WorklistDetailT_WorklistID
|
|
from t_worklistdetailv2
|
|
where t_WorklistDetailIsActive = 'Y' and
|
|
T_WorklistDetailNat_TestID
|
|
in (
|
|
select T_WorklistDetailNat_TestID
|
|
from
|
|
t_worklistdetailv2
|
|
where T_WorklistDetailT_WorklistID = ?
|
|
and T_WorklistDetailIsActive ='Y'
|
|
) ";
|
|
$qry = $this->db_smartone->query($sql, array($worklistID));
|
|
$w_ids = "0";
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
foreach($rows as $r) {
|
|
$w_ids .= "," . $r["T_WorklistDetailT_WorklistID"];
|
|
}
|
|
}
|
|
$q_w_ids = " ( $w_ids ) ";
|
|
|
|
$sql= "select T_WorklistName, count(*) tot_px
|
|
from
|
|
t_worklist
|
|
join t_worklistdetailv2 on T_WorklistID = T_WorklistDetailT_WorklistID
|
|
and T_WorklistDetailIsActive = 'Y'
|
|
and T_WorklistIsActive = 'Y'
|
|
and T_WorklistDetailT_WorklistID in {$q_w_ids}
|
|
join t_test t on t.T_TestNat_TestID = T_WorklistDetailNat_TestID
|
|
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_smartone->query($sql, array($orderID) );
|
|
echo $this->db_smartone->last_query();
|
|
|
|
$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_smartone->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_smartone->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_smartone->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_smartone->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_smartone->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_smartone->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_smartone->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_smartone->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_smartone->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_smartone->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_smartone->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;
|
|
$wkl = $prm["worklistid"];
|
|
$stype = $prm["stype"];
|
|
$sdate = $prm['sdate'];
|
|
$sbatch = $prm['sbatch'];
|
|
$datas = $prm['labs'];
|
|
$userID = $this->sys_user['M_UserID'];
|
|
$sql = "insert into t_mappingbatch
|
|
(T_MappingBatchDate,
|
|
T_MappingBatchT_WorklistID,
|
|
T_MappingBatchType,
|
|
T_MappingBatchNo,
|
|
T_MappingBatchUserID,
|
|
T_MappingBatchCreated,
|
|
T_MappingBatchLastUpdated)
|
|
values
|
|
('{$sdate}',
|
|
$wkl,
|
|
'{$stype}',
|
|
$sbatch,
|
|
$userID,
|
|
now(),
|
|
now())";
|
|
$query = $this->db_smartone->query($sql);
|
|
$last_id = $this->db_smartone->insert_id();
|
|
|
|
foreach ($datas as $k => $v){
|
|
foreach ($v['patients'] as $kx => $vx){
|
|
$sql = "INSERT INTO t_mappingbatchdetail (
|
|
T_MappingBatchDetailT_MappingBatchID,
|
|
T_MappingBatchDetailNo,
|
|
T_MappingBatchDetailT_OrderHeaderID,
|
|
T_MappingBatchDetailLabNumber,
|
|
T_MappingBatchDetailUserID,
|
|
T_MappingBatchDetailCreated,
|
|
T_MappingBatchDetailLastUpdated
|
|
)
|
|
VALUES(
|
|
$last_id,
|
|
'{$vx['name']}',
|
|
{$vx['labid']},
|
|
'{$vx['number']}',
|
|
$userID,
|
|
now(),
|
|
NOW()
|
|
)";
|
|
$this->db_smartone->query($sql);
|
|
//echo $this->db_smartone->last_query();
|
|
}
|
|
}
|
|
$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_smartone->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_smartone->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_smartone->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_smartone->query($sql,array($orderID));
|
|
|
|
$sql = "insert into one_log.log_worklist(Log_WorklistCode, Log_WorklistUserID, Log_WorklistJson)
|
|
values('REJECT',$userID,'$j_log')";
|
|
$this->db_smartone->query($sql);
|
|
$result = array("message" => "OK");
|
|
$this->sys_ok($result);
|
|
} else {
|
|
$this->sys_error($this->db_smartone->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_smartone->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;
|
|
$wkl = $prm["worklist_id"];
|
|
$rtype = $prm["racktype"];
|
|
$sdate = date('Y-m-d', strtotime($prm['sdate']));
|
|
$edate = date('Y-m-d', strtotime($prm['edate']));
|
|
$pg = $prm['curr_page'];
|
|
// $pg = 1;
|
|
if($rtype == '48'){
|
|
$number_limit = 46;
|
|
}else{
|
|
$number_limit = 92;
|
|
}
|
|
$number_offset = ($pg - 1) * $number_limit ;
|
|
$sql = "SELECT COUNT(T_OrderHeaderID) as total FROM
|
|
(SELECT T_OrderHeaderID
|
|
from
|
|
(SELECT T_OrderHeaderID,
|
|
fn_mapping_batch_get_worklist(T_OrderHeaderID, T_TestID) as isreceive
|
|
FROM
|
|
t_worklistdetailv2
|
|
join t_test t on T_WorklistDetailNat_TestID = t.T_TestNat_TestID
|
|
and T_WorklistDetailIsActive = 'Y'
|
|
and T_WorklistDetailT_WorklistID = $wkl
|
|
join nat_test on T_WorklistDetailNat_TestID = Nat_TestID
|
|
join t_orderdetail on t.T_TestID = T_OrderDetailT_TestID
|
|
and T_OrderDetailIsActive = 'Y'
|
|
and T_OrderDetailVerification <> 'Y'
|
|
left join t_orderpromise on T_OrderDetailT_OrderHeaderID = T_OrderPromiseT_OrderHeaderID
|
|
and T_OrderDetailT_OrderPromiseID = T_OrderPromiseID
|
|
join t_orderheader on T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
|
|
and (
|
|
date(T_OrderHeaderDate) = '{$sdate}'
|
|
or
|
|
date(T_OrderPromiseDateTime) = '{$sdate}'
|
|
)
|
|
and T_OrderHeaderIsActive = 'Y'
|
|
join t_orderheaderaddon on T_OrderHeaderID = T_OrderHeaderAddonT_OrderHeaderID
|
|
join pre_analytic on PreAnalyticNat_TestID = Nat_TestID AND PreAnalyticDate = date(now()) AND PreAnalyticIsOk = 'Y'
|
|
|
|
left join t_worklist_confirm on T_OrderHeaderID = T_WorklistConfirmT_OrderHeaderID
|
|
and t.T_TestID = T_WorklistConfirmT_TestID and T_WorklistConfirmIsActive = 'Y'
|
|
GROUP BY T_OrderHeaderID) a WHERE isreceive = 'Y') b ";
|
|
// $total = $this->db_smartone->query($sql,$sql_param)->row()->total;
|
|
$query = $this->db_smartone->query($sql);
|
|
// echo $this->db_smartone->last_query();
|
|
// echo $number_limit;
|
|
//echo $number_offset;
|
|
$tot_count = 0;
|
|
$tot_page = 0;
|
|
if ($query) {
|
|
$tot_count = $query->result_array()[0]["total"];
|
|
$tot_page = ceil($tot_count/$number_limit);
|
|
} else {
|
|
$this->sys_error_db("t_testattribute count", $this->db_smartone);
|
|
exit;
|
|
}
|
|
$sql ="call sp_mapping_batch_v2(?,?,?,?,?,?)";
|
|
$query = $this->db_smartone->query($sql,array($wkl, $sdate,$rtype, $number_limit,$number_offset,$pg));
|
|
// echo $this->db_smartone->last_query();
|
|
if ($query) {
|
|
$rows = $query->result_array();
|
|
$result = array();
|
|
$prev_test_id = "";
|
|
$last_idx = 0;
|
|
foreach($rows as $r) {
|
|
$test_id = $r["T_MappingRackID"];
|
|
if ($prev_test_id != $test_id ) {
|
|
$result[] = array(
|
|
"T_MappingRackID" => $test_id,
|
|
"T_MappingBatchID" => $r["T_MappingBatchID"],
|
|
"T_MappingRackType" => $r["T_MappingRackType"],
|
|
"T_MappingRackNo" => $r["T_MappingRackNo"],
|
|
"T_WorklistID" => $wkl,
|
|
"isconfirm" => $r["isconfirm"],
|
|
"patients" => array()
|
|
);
|
|
$last_idx = sizeof($result) - 1;
|
|
}
|
|
if ($r["T_MappingRackDetailName"] != "" ) {
|
|
$rackname = $r["T_MappingRackDetailName"];
|
|
$lab_number = $r["T_MappingRackDetailValue"];
|
|
$labid = $r["T_OrderHeaderID"];
|
|
$worklistInfo = json_decode($r["WorklistInfo"],true);
|
|
|
|
$result[$last_idx]["patients"][] = array(
|
|
"name" => $rackname,
|
|
"number" => $lab_number,
|
|
"labid" => $labid
|
|
);
|
|
}
|
|
$prev_test_id = $test_id;
|
|
}
|
|
$tot_count = sizeof($result);
|
|
$result = array("total" => $tot_count,"totalpage" => $tot_page,"limit" => $number_limit,"offset" => $number_offset, "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 = 50;
|
|
|
|
$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 = 50;
|
|
|
|
$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;
|
|
}
|
|
}
|
|
|
|
}
|