795 lines
32 KiB
PHP
795 lines
32 KiB
PHP
<?php
|
|
|
|
class Sample extends MY_Controller
|
|
{
|
|
var $db_onedev;
|
|
public function index()
|
|
{
|
|
echo "REF RECEIVE SAMPLE API";
|
|
}
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->db_onedev = $this->load->database("onedev", true);
|
|
}
|
|
|
|
function selected_sample()
|
|
{
|
|
try {
|
|
//# cek token valid
|
|
if (! $this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$prm = $this->sys_input;
|
|
$id = $prm['id'];
|
|
$barcode = $prm['barcode'];
|
|
|
|
$sql = $this->db_onedev->query("SELECT COUNT(*) as semua FROM incoming_ref_detail
|
|
WHERE incomingRefDetailIncomingRefID = '{$id}'")->row();
|
|
$semua = $sql->semua;
|
|
|
|
$sql = $this->db_onedev->query("SELECT COUNT(*) as terima FROM incoming_ref_detail
|
|
WHERE incomingRefDetailIncomingRefID = '{$id}' AND incomingRefDetailStatus <> 'N'")->row();
|
|
$terima = $sql->terima;
|
|
|
|
$sql = $this->db_onedev->query("SELECT incomingRefIsConfirm as konfirmasi FROM incoming_ref
|
|
WHERE incomingRefID = '{$id}'")->row();
|
|
$konfirmasi = $sql->konfirmasi;
|
|
|
|
$sql = "SELECT *, IF(incomingRefDetailStatus = 'N' AND nosample = '{$barcode}', 'R', incomingRefDetailStatus) as ischoose FROM (SELECT incoming_ref_detail.*,
|
|
incomingRefDetailStatus as ischoose,
|
|
LEFT(incomingRefDetailT_BarcodeLabBarcode,12) as nosample,
|
|
'{$semua}' as semua,
|
|
'{$terima}' as terima
|
|
from incoming_ref_detail
|
|
where
|
|
incomingRefDetailIncomingRefID = '{$id}') a
|
|
GROUP BY nosample";
|
|
// echo $sql;
|
|
$query = $this->db_onedev->query($sql);
|
|
if ($query) {
|
|
$rows = $query->result_array();
|
|
} else {
|
|
$this->sys_error_db( $this->db_onedev->last_query() );
|
|
exit;
|
|
}
|
|
$result = array ("total" => count($rows), "records" => $rows, "semua" => $semua, "terima" => $terima, "konfirmasi" => $konfirmasi);
|
|
$this->sys_ok($result);
|
|
|
|
} catch(Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
function confirmdeliveryorder(){
|
|
if (! $this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$prm = $this->sys_input;
|
|
$userid = $this->sys_user["M_UserID"];
|
|
|
|
$incomingRefID = $prm["id"];
|
|
$sql = $this->db_onedev->query("SELECT incomingRefIsConfirm as konfirmasi FROM incoming_ref
|
|
WHERE incomingRefID = '{$incomingRefID}'")->row();
|
|
$konfirmasi = $sql->konfirmasi;
|
|
if($konfirmasi == 'N'){
|
|
$sql = "select M_BranchID, M_BranchIPAddress
|
|
from m_branch
|
|
join incoming_ref
|
|
on M_BranchID = incomingRefM_BranchID
|
|
where incomingRefID = ?";
|
|
$qry = $this->db_onedev->query($sql, array($incomingRefID));
|
|
$branchID = 0;
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
if(count($rows)>0) {
|
|
$branchID = $rows[0]["M_BranchID"];
|
|
$branchIPAddress = $rows[0]["M_BranchIPAddress"];
|
|
}
|
|
}
|
|
if ($branchID == 0 ) {
|
|
$this->sys_errror("Invalid Branch ID");
|
|
//file_put_contents("/xtmp/log-confirmdeliveryorder.log","Invalid Branch ID\n", FILE_APPEND);
|
|
exit;
|
|
}
|
|
$a_accept = array();
|
|
$a_reject = array();
|
|
$s_ids = "0";
|
|
$s_nosamples = "''";
|
|
foreach($prm["dodetail"] as $idx => $detail) {
|
|
$orderHeaderID = $detail["incomingRefDetailT_OrderHeaderID"];
|
|
if (! isset($a_accept[$orderHeaderID]) ) {
|
|
$a_accept[$orderHeaderID] = array();
|
|
$a_reject[$orderHeaderID] = array();
|
|
}
|
|
if ($detail["ischoose"] == "N" ) {
|
|
$a_reject[$orderHeaderID][] = $detail["incomingRefDetailID"];
|
|
} else {
|
|
$a_accept[$orderHeaderID][] = $detail["incomingRefDetailID"];
|
|
$s_ids .= "," . $detail["incomingRefDetailID"];
|
|
$s_nosamples .= "," . "'".$detail["nosample"]."'";
|
|
}
|
|
}
|
|
|
|
$hid = "";
|
|
$sql = $this->db_onedev->query("SELECT GROUP_CONCAT(DISTINCT incomingRefDetailT_OrderHeaderID SEPARATOR ',') as hid FROM incoming_ref_detail
|
|
WHERE incomingRefDetailID in ( $s_ids )")->row();
|
|
$hid = $sql->hid;
|
|
//all px yg di terima
|
|
$sql="select distinct incomingRefDetailID from incoming_ref_detail
|
|
where incomingRefDetailIncomingRefID = ?
|
|
AND incomingRefDetailT_OrderHeaderID in ($hid)
|
|
AND LEFT(incomingRefDetailT_BarcodeLabBarcode,12) in ($s_nosamples)";
|
|
$qry = $this->db_onedev->query($sql, array($incomingRefID));
|
|
//echo $this->db_onedev->last_query();
|
|
$s_ids = "0";
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
foreach($rows as $r) {
|
|
$s_ids .= "," . $r["incomingRefDetailID"];
|
|
}
|
|
}
|
|
|
|
// CEK KELENGKAPAN SETTINGAN
|
|
$sql = $this->db_onedev->query("SELECT incomingRefM_BranchID as branchid FROM incoming_ref
|
|
WHERE incomingRefID = '{$incomingRefID}'")->row();
|
|
$branchid = $sql->branchid;
|
|
|
|
$sql = $this->db_onedev->query("SELECT M_BranchM_CompanyID as companyid FROM m_branch
|
|
WHERE M_BranchID = '{$branchid}'")->row();
|
|
$companyid = $sql->companyid;
|
|
|
|
$sql = $this->db_onedev->query("SELECT M_BranchM_MouID as mouid FROM m_branch
|
|
WHERE M_BranchID = '{$branchid}'")->row();
|
|
$mouid = $sql->mouid;
|
|
|
|
$sql = $this->db_onedev->query("SELECT M_BranchM_DoctorID as doctorid FROM m_branch
|
|
WHERE M_BranchID = '{$branchid}'")->row();
|
|
$doctorid = $sql->doctorid;
|
|
|
|
$sql = $this->db_onedev->query("SELECT M_BranchM_DoctorAddressID as doctoraddressid FROM m_branch
|
|
WHERE M_BranchID = '{$branchid}'")->row();
|
|
$doctoraddressid = $sql->doctoraddressid;
|
|
|
|
if($companyid > 0 && $mouid > 0 && $doctorid > 0 && $doctoraddressid > 0){
|
|
$noprice = "0";
|
|
$sql = $this->db_onedev->query("SELECT count(IFNULL(Ss_PriceMouID,0)) as noprice,
|
|
GROUP_CONCAT(DISTINCT CONCAT(a.T_TestSasCode,' | ', a.T_TestName) SEPARATOR '\n') as tes FROM
|
|
incoming_ref_detail
|
|
JOIN t_test a ON a.T_TestID = incomingRefDetailT_TestID AND a.T_TestIsPrice = 'Y'
|
|
LEFT JOIN ss_price_mou ON Ss_PriceMouM_MouID = '{$mouid}' AND T_PriceT_TestID = a.T_TestID
|
|
WHERE
|
|
incomingRefDetailID in ($s_ids) AND Ss_PriceMouID IS NULL")->row();
|
|
$noprice = $sql->noprice;
|
|
$tes = $sql->tes;
|
|
|
|
if($noprice != "0"){
|
|
$this->sys_error("Cek kelengkapan harga pemeriksaan : " .$tes);
|
|
exit;
|
|
}else{
|
|
if($s_ids != "0" ) {
|
|
$sql = "update incoming_ref_detail
|
|
set incomingRefDetailStatus = 'Y'
|
|
where incomingRefDetailID in ( $s_ids ) ";
|
|
$qry = $this->db_onedev->query($sql);
|
|
//generate order
|
|
$rst = $this->ref_order($incomingRefID);
|
|
if ($rst["status"] != "OK" ) {
|
|
$this->sys_error($rst["message"]);
|
|
//file_put_contents("/xtmp/log-confirmdeliveryorder.log","Ref Order:" . $rst["message"] . "\n", FILE_APPEND);
|
|
exit;
|
|
}
|
|
$sql = "select
|
|
incomingRefT_RefDeliveryOrderID,
|
|
incomingRefDetailT_OrderDetailID,
|
|
incomingRefDetailStatus,
|
|
T_OrderDetailResult,
|
|
T_OrderDetailNat_NormalValueID,
|
|
T_OrderDetailVerification,
|
|
T_OrderDetailValidation
|
|
from incoming_ref_detail
|
|
join incoming_ref on incomingRefID = incomingRefDetailIncomingRefID
|
|
and incomingRefID = ?
|
|
left join t_orderdetail on incomingRefDetailNewT_OrderHeaderID = T_OrderDetailT_OrderHeaderID
|
|
and T_OrderDetailIsActive = 'Y' and incomingRefDetailT_TestID = T_OrderDetailT_TestID";
|
|
$qry = $this->db->query($sql, array($incomingRefID));
|
|
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
$param = json_encode($rows);
|
|
$note = $rst["message"];
|
|
//insert to
|
|
$sql = "insert into tx_branch_status(TxBranchStatusStage, TxBranchStatusM_BranchID,
|
|
TxBranchStatusM_BranchIP, TxBranchStatusJson,TxBranchStatusNote )
|
|
values ('CONFIRM',?,?,?,?)";
|
|
$qry = $this->db_onedev->query($sql, array($branchID, $branchIPAddress, $param, $note));
|
|
}
|
|
|
|
$this->clean_mysqli_connection($this->db_onedev->conn_id);
|
|
$sql = "update incoming_ref set incomingRefIsConfirm = 'Y'
|
|
where incomingRefID = ?";
|
|
$qry = $this->db_onedev->query($sql, array($incomingRefID));
|
|
$this->sys_ok($rst["message"]);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
|
|
}else{
|
|
$this->sys_error("Belum Ada Settingan Agremeent / Dokternya");
|
|
exit;
|
|
}
|
|
|
|
|
|
}else{
|
|
$result = array(
|
|
"total" => 1 ,
|
|
"records" => array('status'=>'OK')
|
|
);
|
|
$this->sys_ok($result);
|
|
exit;
|
|
}
|
|
}
|
|
function ref_order($incomingRefID) {
|
|
//$adminUserID = 3;
|
|
$adminUserID = $this->sys_user["M_UserID"] ;
|
|
|
|
$sql = "select * from incoming_ref where incomingRefID = ?";
|
|
$qry = $this->db_onedev->query($sql, array($incomingRefID) );
|
|
$rows = array();
|
|
$branchID = 0;
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
if ( count($rows) > 0 ) $branchID = $rows[0]["incomingRefM_BranchID"];
|
|
}
|
|
|
|
if ($branchID == 0 ) {
|
|
return array(
|
|
"status" => "ERR",
|
|
"message" => "Branch belum di set");
|
|
}
|
|
$companyID = 0;
|
|
if ($branchID > 0 ) {
|
|
$sql = "select *
|
|
from m_branch where M_BranchID = ?";
|
|
$qry = $this->db_onedev->query($sql, array($branchID) );
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
$companyID = $rows[0]["M_BranchM_CompanyID"];
|
|
$mouID = $rows[0]["M_BranchM_MouID"];
|
|
$doctorID = $rows[0]["M_BranchM_DoctorID"];
|
|
$doctorAddressID = $rows[0]["M_BranchM_DoctorAddressID"];
|
|
$branchKelurahanID= $rows[0]["M_BranchM_KelurahanID"];
|
|
$branchAddresss = $rows[0]["M_BranchAddress"];
|
|
}
|
|
}
|
|
if ($companyID == 0 ) {
|
|
return array(
|
|
"status" => "ERR",
|
|
"message" => "Branch / Company/MOU belum di set");
|
|
}
|
|
//create order yg di confirm saja
|
|
$sql = "select *
|
|
from incoming_ref_detail
|
|
where incomingRefDetailIncomingRefID = ?
|
|
and incomingRefDetailStatus = 'Y'
|
|
order by incomingRefDetailT_OrderHeaderID";
|
|
$qry = $this->db_onedev->query($sql, array($incomingRefID) );
|
|
$orders = array();
|
|
$ax_test = array();
|
|
$a_promise = array();
|
|
$a_barcode = array();
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
$prev_oh_id = 0;
|
|
foreach($rows as $r) {
|
|
$oh_id = $r["incomingRefDetailT_OrderHeaderID"];
|
|
$incomingRefDetailFoNote = str_replace("'", " ", $r["incomingRefDetailFoNote"]);
|
|
if ( ! isset($orders[$oh_id]) ) {
|
|
$orders[$oh_id]["patient"] = json_decode($r["incomingRefDetailPatient"],true);
|
|
$orders[$oh_id]["foNote"] = $incomingRefDetailFoNote;
|
|
$orders[$oh_id]["verificationNote"] = $r["incomingRefDetailVefificationNote"];
|
|
$orders[$oh_id]["samplingNote"] = $r["incomingRefDetailSamplingNote"];
|
|
$orders[$oh_id]["LabNumber"] = $r["incomingRefDetailT_OrderHeaderLabNumber"];
|
|
$orders[$oh_id]["test"] = array();
|
|
}
|
|
$orders[$oh_id]["test"][] = array (
|
|
"T_TestID" => $r["incomingRefDetailT_TestID"],
|
|
"Promise" => $r["incomingRefDetailT_OrderPromiseDateTime"],
|
|
"T_OrderDetailID" => $r["incomingRefDetailT_OrderDetailID"],
|
|
"T_BarcodeLabBarcode" => $r["incomingRefDetailT_BarcodeLabBarcode"],
|
|
"Requirements" => json_decode($r["incomingRefDetailRequirements"],true)
|
|
);
|
|
$ax_test[] = $r["incomingRefDetailT_TestID"];
|
|
$a_promise[$oh_id][$r["incomingRefDetailT_TestID"]] = $r["incomingRefDetailT_OrderPromiseDateTime"];
|
|
$a_barcode[$oh_id][$r["incomingRefDetailT_TestID"]] = $r["incomingRefDetailT_BarcodeLabBarcode"];
|
|
}
|
|
}
|
|
$s_test = "0," . join(",",$ax_test);
|
|
$sql = "select * from ss_price_mou
|
|
where Ss_PriceMouM_MouID = ? and T_TestID in ( $s_test ) ";
|
|
$qry = $this->db_onedev->query($sql, array($mouID) );
|
|
//test primer sama dengan T_TestID
|
|
$a_test = array();
|
|
if ($qry ) {
|
|
$rows = $qry->result_array();
|
|
foreach($rows as $r) {
|
|
$testID = $r["T_TestID"];
|
|
$a_test[$testID] = array(
|
|
"T_PriceAmount" => $r["T_PriceAmount"],
|
|
"T_PriceDiscRp" => $r["T_PriceDiscRp"],
|
|
"T_PriceDisc" => $r["T_PriceDisc"]
|
|
);
|
|
}
|
|
}
|
|
//test sekunder dari Nat_Test
|
|
$a_test_v2 = array();
|
|
$sql = "select ss_price_mou.*
|
|
from ss_price_mou
|
|
where Ss_PriceMouM_MouID = ? and
|
|
ss_price_mou.T_TestID in (
|
|
select s.T_TestID
|
|
from t_test s
|
|
join t_test p on s.T_TestNat_TestID = p.T_TestNat_TestID
|
|
and p.T_TestID in ( $s_test )
|
|
) ";
|
|
$qry = $this->db_onedev->query($sql, array($mouID) );
|
|
//test primer sama dengan T_TestID
|
|
if ($qry ) {
|
|
$rows = $qry->result_array();
|
|
foreach($rows as $r) {
|
|
$testID = $r["T_TestID"];
|
|
$a_test_v2[$testID] = array(
|
|
"T_PriceAmount" => $r["T_PriceAmount"],
|
|
"T_PriceDiscRp" => $r["T_PriceDiscRp"],
|
|
"T_PriceDisc" => $r["T_PriceDisc"]
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
$message = "";
|
|
foreach($orders as $oh_id => $o){
|
|
$noreg = $o["patient"]["M_PatientNoReg"];
|
|
$lab_number= $o["LabNumber"];
|
|
//if noreg not exists create patient
|
|
$sql = "select count(*) tot from m_patient where M_PatientNoReg=? and M_PatientIsActive = 'Y'";
|
|
$qry = $this->db_onedev->query($sql, array($noreg));
|
|
$patientID = 0;
|
|
if($qry) {
|
|
$rows = $qry->result_array();
|
|
if ($rows[0]["tot"] == 0 ) {
|
|
$patientID = $this->create_patient($orders[$oh_id]["patient"], $adminUserID);
|
|
} else {
|
|
$patientID = $orders[$oh_id]["patient"]["M_PatientID"];
|
|
}
|
|
}
|
|
if ($patientID == 0 ) {
|
|
if ($message != "" ) $message .= ",";
|
|
$message .= "[ $lab_number, gagal buat pasien $noreg ]";
|
|
continue;
|
|
}
|
|
$sql = "select fn_global_age_count(M_PatientDOB,now()) age
|
|
from m_patient where M_PatientID = ? ";
|
|
$qry = $this->db_onedev->query($sql, array($patientID) );
|
|
$patientAge = "";
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
if (count($rows) > 0 ) {
|
|
$patientAge = $rows[0]["age"];
|
|
}
|
|
}
|
|
//echo "1. $lab_number : $patientID \n";
|
|
//register order
|
|
$xheader = array(
|
|
'patient_id' => $patientID,
|
|
'age' => $patientAge,
|
|
'sender_doctor_id' => $doctorID,
|
|
'sender_address_id' => $doctorAddressID,
|
|
'company_id' => $companyID,
|
|
'mou_id' => $mouID,
|
|
'lang_id' => '1',
|
|
'lang_si' => 'N',
|
|
'doctor_note' => '',
|
|
'fo_note' => $orders[$oh_id]["foNote"],
|
|
'queue' => '',
|
|
'received_sample' => 'Y',
|
|
'lang_id_2' => '2',
|
|
'lang_si_2' => 'N',
|
|
);
|
|
$xdel = array(
|
|
array(
|
|
'address_id' => $branchID,
|
|
'delivery_id' => '10',
|
|
'delivery_type_id' => '2',
|
|
'senderdoctorid' => $doctorID,
|
|
'senderaddressid' => $doctorAddressID,
|
|
'note' => $branchAddresss,
|
|
'kelurahan' => $branchKelurahanID
|
|
));
|
|
$xdet = array();
|
|
$reqs = array();
|
|
foreach($orders[$oh_id]["test"] as $t ) {
|
|
if ( isset($a_test[$t["T_TestID"]]) ) {
|
|
$v=$a_test[$t["T_TestID"]];
|
|
$xdet[] = array(
|
|
't_id' => $t['T_TestID'],
|
|
't_cito' => 'N',
|
|
't_price' => $v['T_PriceAmount'],
|
|
't_disc' => $v['T_PriceDisc'],
|
|
't_discrp' => $v['T_PriceDiscRp'],
|
|
't_req' => 'Y',
|
|
't_reqnote' => '',
|
|
't_ispacket' => "N",
|
|
't_packettype' => "PX",
|
|
't_packetid' => '0'
|
|
);
|
|
} elseif ( isset($a_test_v2["T_TestID"] ) ) {
|
|
$v=$a_test_v2[$t["T_TestID"]];
|
|
$xdet[] = array(
|
|
't_id' => $t['T_TestID'],
|
|
't_cito' => 'N',
|
|
't_price' => $v['T_PriceAmount'],
|
|
't_disc' => $v['T_PriceDisc'],
|
|
't_discrp' => $v['T_PriceDiscRp'],
|
|
't_req' => 'Y',
|
|
't_reqnote' => '',
|
|
't_ispacket' => "N",
|
|
't_packettype' => "PX",
|
|
't_packetid' => '0'
|
|
);
|
|
} else {
|
|
$xdet[] = array(
|
|
't_id' => $t['T_TestID'],
|
|
't_cito' => 'N',
|
|
't_price' => 0,
|
|
't_disc' => 0,
|
|
't_discrp' => 0,
|
|
't_req' => 'Y',
|
|
't_reqnote' => '',
|
|
't_ispacket' => "N",
|
|
't_packettype' => "PX",
|
|
't_packetid' => '0'
|
|
);
|
|
}
|
|
if (count($t["Requirements"]) > 0 ) {
|
|
$reqs = array_merge($reqs, $t["Requirements"]);
|
|
}
|
|
}
|
|
//requirements
|
|
$xreq = array(
|
|
'status' => 'Y',
|
|
'reqs' => '[]'
|
|
);
|
|
$header_json = json_encode($xheader);
|
|
$delivery_json = json_encode($xdel);
|
|
$detail_json = json_encode($xdet);
|
|
$req_json = json_encode($xreq);
|
|
$sql = "CALL `sp_fo_register_save_v5`(
|
|
0,
|
|
'{$header_json}',
|
|
'{$delivery_json}',
|
|
'{$detail_json}',
|
|
'{$req_json}',
|
|
'{$adminUserID}'
|
|
);";
|
|
$r = $this->db_onedev->query($sql)->row();
|
|
$this->clean_mysqli_connection($this->db_onedev->conn_id);
|
|
if ($r->status != "OK" ) {
|
|
if ($message != "" ) $message .= ",";
|
|
$xmsg = print_r($r, true);
|
|
$message .= "[ $lab_number, gagal sp_fo_register_save_v5 : $xmsg ]";
|
|
$g_date = date("Y-m-d H:i:s");
|
|
file_put_contents("/xtmp/gagal-order.log","$g_date $message\n", FILE_APPEND);
|
|
continue;
|
|
}
|
|
$data = json_decode($r->data,true);
|
|
$new_oh_id = $data["id"];
|
|
$new_lab_number= $data["number"];
|
|
|
|
//echo "2. $new_oh_id : $lab_number => $new_lab_number \n";
|
|
//update incoming_ref
|
|
$sql = "update incoming_ref_detail set incomingRefDetailNewT_OrderHeaderID=?,
|
|
incomingRefDetailNewM_PatientID = ?
|
|
where incomingRefDetailIncomingRefID = ?
|
|
and incomingRefDetailT_OrderHeaderID=?";
|
|
$this->db_onedev->query($sql,array($new_oh_id, $patientID, $incomingRefID, $oh_id));
|
|
|
|
$sql = "update t_orderheaderaddon set T_OrderHeaderAddOnLabNumberOrigin=?
|
|
where T_OrderHeaderAddOnT_OrderHeaderID = ?";
|
|
$this->db_onedev->query($sql,array($lab_number,$new_oh_id));
|
|
|
|
|
|
//update promise
|
|
$a_promise_test = array();
|
|
$a_promise_date= array();
|
|
$a_promise_id= array();
|
|
foreach($a_promise[$oh_id] as $testID => $promise ) {
|
|
if(!isset($a_promise_date[$promise])) {
|
|
$sql = "insert into t_orderpromise(T_OrderPromiseT_OrderHeaderID, T_OrderPromiseDateTime)
|
|
values(?,?)";
|
|
$this->db_onedev->query($sql, array($new_oh_id,$promise));
|
|
$promise_id = $this->db_onedev->insert_id();
|
|
$a_promise_test[$testID] = $promise_id;
|
|
$a_promise_date["$promise"] = $promise_id;
|
|
} else {
|
|
$a_promise_test[$testID] = $a_promise_date["$promise"];
|
|
}
|
|
}
|
|
if ( count($a_promise_test) > 0 ) {
|
|
$s_test = join(",", array_keys($a_promise_test));
|
|
$sql = "update t_orderpromise,t_orderdetail
|
|
set T_OrderPromiseIsActive = 'N'
|
|
where T_OrderPromiseID = T_OrderDetailT_OrderPromiseID
|
|
and T_OrderDetailT_OrderHeaderID = ?
|
|
and T_OrderDetailT_TestID in ($s_test) ";
|
|
$this->db_onedev->query($sql, array($new_oh_id));
|
|
}
|
|
foreach($a_promise_test as $testID => $promiseID ) {
|
|
$sql = "update t_orderdetail
|
|
set T_OrderDetailT_OrderPromiseID= ?
|
|
where T_OrderDetailT_OrderHeaderID = ?
|
|
and T_OrderDetailT_TestID = ? ";
|
|
$this->db_onedev->query($sql, array($promiseID , $new_oh_id, $testID) );
|
|
}
|
|
//insert requirements
|
|
foreach($reqs as $r) {
|
|
$sql ="insert into t_orderreq(T_OrderReqT_OrderHeaderID,T_OrderReqNat_PositionID,
|
|
T_OrderReqStatus, T_OrderReqT_TestID, T_OrderReqs)
|
|
values(?,?, ?,?,?)";
|
|
$this->db_onedev->query($sql, array($new_oh_id, $r["T_OrderReqNat_PositionID"],
|
|
$r["T_OrderReqStatus"], $r["T_OrderReqT_TestID"], $r["T_OrderReqs"] ));
|
|
}
|
|
//update note
|
|
$sql = "update t_orderheader
|
|
set T_OrderHeaderFoNote = ? , T_OrderHeaderFoNoteM_UserID = ?,
|
|
T_OrderHeaderSamplingNote = ?, T_OrderHeaderSamplingNoteM_UserID = ?,
|
|
T_OrderHeaderVerificationNote = ?, T_OrderHeaderVerificationNoteM_UserID = ?
|
|
where T_OrderHeaderID = ? ";
|
|
$this->db_onedev->query($sql, array( $o["foNote"],$adminUserID,
|
|
$o["samplingNote"], $adminUserID, $o["verificationNote"], $adminUserID,
|
|
$new_oh_id));
|
|
$result = $this->fo_verify($new_oh_id,$adminUserID);
|
|
|
|
//update t_barcodelab
|
|
foreach($a_barcode[$oh_id] as $testID => $barcode) {
|
|
$sql = "update t_barcodelab,t_test
|
|
set T_BarcodeLabBarcodeOrigin =?
|
|
where T_BarcodeLabT_OrderHeaderID = ?
|
|
and T_TestID = ?
|
|
and T_TestIsActive = 'Y' and T_BarcodeLabT_SampleTypeID = T_TestT_SampleTypeID";
|
|
$this->db_onedev->query($sql, array($barcode, $new_oh_id, $testID));
|
|
}
|
|
|
|
// update nilai normal
|
|
$sql = "select distinct T_OrderDetailT_OrderHeaderID id,
|
|
T_TestT_SampleTypeID sid
|
|
from t_orderdetail
|
|
join t_test on T_OrderDetailT_OrderHeaderID = ?
|
|
and T_OrderDetailIsActive = 'Y' and
|
|
T_OrderDetailT_TestID = T_TestID
|
|
and T_TestIsActive = 'Y' ";
|
|
$qry = $this->db_onedev->query($sql, array($new_oh_id));
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
foreach($rows as $r) {
|
|
$sql = "call sp_sampling_set_normal(?,?)";
|
|
$this->db_onedev->query($sql,array($r["id"],$r["sid"]));
|
|
}
|
|
}
|
|
if ($message != "" ) $message .= ",";
|
|
$message .= "[ $lab_number -> $new_lab_number Fo Verify : $result ]";
|
|
}
|
|
try {
|
|
//update child test
|
|
$sql = "update incoming_ref_child, incoming_ref_detail
|
|
set incomingRefChildNewT_OrderHeaderID = incomingRefDetailNewT_OrderHeaderID
|
|
where incomingRefChildIncomingRefID = incomingRefDetailIncomingRefID
|
|
and incomingRefChildT_OrderHeaderID = incomingRefDetailT_OrderHeaderID
|
|
and incomingRefChildNewT_OrderHeaderID is null
|
|
and incomingRefChildIncomingRefID = ? ";
|
|
$this->db_onedev->query($sql,array($incomingRefID));
|
|
} catch(Exception $e) {
|
|
}
|
|
try {
|
|
//update barcode
|
|
$sql = "update incoming_ref_detail, t_test, t_barcodelab
|
|
set T_BarcodeLabBarcodeOrigin = incomingRefDetailT_BarcodeLabBarcode
|
|
where
|
|
incomingRefDetailT_TestID = T_TestID
|
|
and incomingRefDetailNewT_OrderHeaderID = T_BarcodeLabT_OrderHeaderID
|
|
and T_BarcodeLabT_SampleTypeID =
|
|
json_extract(fn_worklist_get_info(incomingRefDetailNewT_OrderHeaderID,T_TestID), '$.sampleTypeID')
|
|
and incomingRefDetailIncomingRefID = ?
|
|
and T_TestT_SampleTypeID = 0
|
|
and T_BarcodeLabBarcodeOrigin is null";
|
|
$this->db_onedev->query($sql,array($incomingRefID));
|
|
} catch(Exception $e) {
|
|
}
|
|
return array( "status" => "OK",
|
|
"message" => $message );
|
|
}
|
|
function create_patient($p, $userID) {
|
|
$sql = "insert into m_patient";
|
|
//check title
|
|
$sql = "select M_TitleID from m_title where M_TitleName = ? and M_TitleIsActive = 'Y'";
|
|
$qry = $this->db_onedev->query($sql, array($p["title"]["M_TitleName"]));
|
|
$titleID = 0;
|
|
if ($qry) {
|
|
$rows = $qry->result_array();
|
|
if (count($rows) > 0 ) $titleID = $rows[0]["M_TitleID"];
|
|
}
|
|
if ($titleID == 0) {
|
|
$sql = "insert into m_title(M_TitleName, M_TitleM_SexID) values ( ? , ? )";
|
|
$qry = $this->db_onedev->query($sql, array($p["title"]["M_TitleName"], $p["title"]["M_TitleM_SexID"]));
|
|
if ($qry) {
|
|
$titleID = $this->db_onedev->insert_id();
|
|
}
|
|
}
|
|
if ($titleID == 0 ) {
|
|
return 0;
|
|
}
|
|
$p_name = stripslashes($p['M_PatientName']);
|
|
$patient_name = str_replace("'", "\\'", $p_name);
|
|
$pdob = date('Y-m-d',strtotime($p['M_PatientDOB']));
|
|
$query ="INSERT INTO m_patient (
|
|
M_PatientM_TitleID,
|
|
M_PatientName,
|
|
M_PatientDOB,
|
|
M_PatientM_SexID,
|
|
M_PatientM_ReligionID,
|
|
M_PatientEmail,
|
|
M_PatientPOB,
|
|
M_PatientHP,
|
|
M_PatientPhone,
|
|
M_PatientM_IdTypeID,
|
|
M_PatientIDNumber,
|
|
M_PatientNote,
|
|
M_PatientUserID
|
|
)
|
|
VALUES(
|
|
'{$titleID}',
|
|
'{$patient_name}',
|
|
'{$pdob}',
|
|
'{$p['M_PatientM_SexID']}',
|
|
'{$p['M_PatientM_ReligionID']}',
|
|
'{$p['M_PatientEmail']}',
|
|
'{$p['M_PatientPOB']}',
|
|
'{$p['M_PatientHP']}',
|
|
'{$p['M_PatientPhone']}',
|
|
'{$p['M_PatientM_IdTypeID']}',
|
|
'{$p['M_PatientIDNumber']}',
|
|
'{$p['M_PatientNote']}',
|
|
$userID
|
|
)";
|
|
$qry = $this->db_onedev->query($query);
|
|
$patientID = 0;
|
|
if ($qry ) {
|
|
$patientID = $this->db_onedev->insert_id();
|
|
}
|
|
|
|
//
|
|
$sql = "insert into m_patientaddress(M_PatientAddressM_PatientID, M_PatientAddressNote,
|
|
M_PatientAddressDescription,M_PatientAddressLocation,M_PatientAddressM_KelurahanID,
|
|
M_PatientAddressOldCityID, M_PatientAddressPostCodeID, M_PatientAddressFax,
|
|
M_PatientAddressEmail, M_PatientAddressPhone)
|
|
values(?,?, ?,?,?, ?,?,?, ?,?) ";
|
|
foreach($p["address"] as $adr) {
|
|
$address_description = str_replace("'", "\\'", $adr['M_PatientAddressDescription']);
|
|
$prm = array($patientID , $adr["M_PatientAddressNote"],
|
|
$address_description,$adr["M_PatientAddressLocation"],$adr["M_PatientAddressM_KelurahanID"],
|
|
$adr["M_PatientAddressOldCityID"], $adr["M_PatientAddressPostCodeID"], $adr["M_PatientAddressFax"],
|
|
$adr["M_PatientAddressEmail"], $adr["M_PatientAddressPhone"] );
|
|
$this->db_onedev->query($sql,$prm);
|
|
}
|
|
|
|
return $patientID;
|
|
}
|
|
|
|
|
|
|
|
|
|
function fo_verify($orderID,$userID) {
|
|
$sql="INSERT INTO fo_verificationsvalue (
|
|
Fo_VerificationsValueT_OrderHeaderID,
|
|
Fo_VerificationsValueFo_VerificationsLabelID,
|
|
Fo_VerificationsValueCheck,
|
|
Fo_VerificationsValueNote,
|
|
Fo_VerificationsValueUserID,
|
|
Fo_VerificationsValueCreated )
|
|
SELECT {$orderID},
|
|
Fo_VerificationsLabelID,
|
|
'Y',
|
|
'', {$userID},
|
|
NOW()
|
|
FROM fo_verificationslabel
|
|
WHERE
|
|
Fo_VerificationsLabelIsActive = 'Y' ";
|
|
$this->db_onedev->query($sql);
|
|
|
|
$sql = "call sp_fo_barcode_generate({$orderID})";
|
|
$this->db_onedev->query($sql);
|
|
|
|
$fostatusid = 3;
|
|
$fologcode = 'FO.VERIFICATION.CONFIRM';
|
|
|
|
$sql = "insert into fo_status(
|
|
Fo_StatusDate,
|
|
Fo_StatusT_OrderHeaderID,
|
|
Fo_StatusM_StatusID,
|
|
Fo_StatusM_UserID,
|
|
Fo_StatusCreated,
|
|
Fo_StatusUpdated)
|
|
values( now(), ?, ?, ?, now(),now())";
|
|
|
|
$query = $this->db_onedev->query($sql,
|
|
array(
|
|
$orderID,
|
|
$fostatusid, $userID
|
|
)
|
|
);
|
|
|
|
if (!$query) {
|
|
return "Error Fo Status";
|
|
}
|
|
|
|
$sql = "SELECT * FROM fo_verificationsvalue WHERE Fo_VerificationsValueT_OrderHeaderID = {$orderID}";
|
|
|
|
$data_log = array();
|
|
$data_log['orderid'] = $orderID;
|
|
$data_log['values'] = $this->db_onedev->query($sql)->result_array();
|
|
$data_log['note'] = '';
|
|
|
|
$json_dt_log = json_encode($data_log);
|
|
$sql = "insert into one_log.log_fo(
|
|
Log_FoDate,
|
|
Log_FoCode,
|
|
Log_FoJson,
|
|
Log_FoUserID)
|
|
values( now(), ?, ?, ?)";
|
|
$query = $this->db_onedev->query($sql,
|
|
array(
|
|
$fologcode,
|
|
$json_dt_log,
|
|
$userID
|
|
)
|
|
);
|
|
|
|
if (!$query) {
|
|
return "Error Fo Log";
|
|
}
|
|
|
|
/* T_OrderSample */
|
|
$adminUserID = $userID;
|
|
$sql = "update t_ordersample
|
|
set T_OrderSampleSampling='Y', T_OrderSampleSamplingDate = now(),
|
|
T_OrderSampleSamplingTime = now(),T_OrderSampleSamplingUserID = $adminUserID,
|
|
T_OrderSampleReceive='Y', T_OrderSampleReceiveDate = now() , T_OrderSampleReceiveTime = now(),
|
|
T_OrderSampleReceiveUserID = $adminUserID,
|
|
T_OrderSampleVerification='Y', T_OrderSampleVerificationDate=now(), T_OrderSampleVerificationTime=now(),
|
|
T_OrderSampleVerificationUserID = $adminUserID,
|
|
T_OrderSampleSendHandling = 'Y', T_OrderSampleSendHandlingDate =now(), T_OrderSampleSendHandlingTime=now(),
|
|
T_OrderSampleSendHandlingUserID = $adminUserID,
|
|
T_OrderSampleReceiveHandling = 'Y', T_OrderSampleReceiveHandlingDate=now(), T_OrderSampleReceiveHandlingTime=now(),
|
|
T_OrderSampleReceiveHandlingUserID=$adminUserID,
|
|
T_OrderSampleHandling='Y', T_OrderSampleHandlingDate=now(), T_OrderSampleHandlingTime=now(),
|
|
T_OrderSampleHandlingUserID=$adminUserID,
|
|
T_OrderSampleProcessing='Y', T_OrderSampleReadyToProcessDateTime=now(), T_OrderSampleProcessingDate=now(),
|
|
T_OrderSampleProcessingTime=now(), T_OrderSampleProcessingUserID=$adminUserID,
|
|
T_OrderSampleUserID=$adminUserID
|
|
where T_OrderSampleT_OrderHeaderID = ?";
|
|
|
|
|
|
$qry = $this->db_onedev->query($sql, array($orderID) );
|
|
if (!$qry) {
|
|
return "Error T_OrderSample : " . $this->db_onedev->last_query();
|
|
}
|
|
return "OK";
|
|
}
|
|
|
|
|
|
|
|
}
|