db_onedev = $this->load->database("onedev", true);
$this->db_smartone = $this->load->database("onedev", true);
}
function update_result_from_api(){
$nolab = 'R2509090031';
$sql = "SELECT *
FROM `api_result`
WHERE `api_ResultNolab` = '{$nolab}' LIMIT 50";
$query = $this->db_smartone->query($sql);
$rows = $query->result_array();
foreach($rows as $row){
$result = $row['api_ResultResult'];
$unit = $row['api_ResultUnit'];
$flag = $row['api_ResultFlag'];
$normal_value = $row['api_ResultNormalText'];
$methode = $row['api_ResultNormalMethode'];
$t_orderdetailid = $row['api_ResultT_OrderDetailID'];
$sql = "UPDATE t_orderdetail
SET T_OrderDetailResult = '{$result}',
T_OrderDetailNat_UnitName = '{$unit}',
T_OrderDetailResultFlag = '{$flag}',
T_OrderDetailNormalValueNote = '{$normal_value}',
T_OrderdetailNat_MethodeName = '{$methode}'
WHERE T_OrderDetailID = '{$t_orderdetailid}'";
//echo $sql."
";
$query = $this->db_smartone->query($sql);
if(!$query){
echo "error : ".$this->db_smartone->error();
return;
}
echo "update t_orderdetail : ".$t_orderdetailid."
";
}
}
function index() {
$this->load->library("Resultcalc");
$id = 946;
$rows = $this->resultcalc->auto($id);
echo "
$rows";
}
function generate_random_number($length = 3) {
$characters = '0123456789';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
function ganti_paket_preregister($before_packet,$after_packet){
$userid = $this->generate_random_number(3);
echo "before_packet : ".$before_packet." - after_packet : ".$after_packet."
";
$this->db_onedev->trans_begin();
$sql = "SELECT * FROM `mcu_preregister_patients`
WHERE
`Mcu_PreregisterPatientsOrders` = '{$before_packet}' AND
`Mcu_PreregisterPatientsIsActive` = 'Y' AND
`Mcu_PreregisterPatientsIsRegistered` = 'N'";
$query = $this->db_onedev->query($sql);
if(!$query){
echo "error : ".$this->db_onedev->error();
return;
}
$rows = $query->result_array();
if(count($rows) == 0){
echo "no data";
return;
}
echo "total data : ".count($rows)."
";
echo "start update data
";
$errors = [];
foreach($rows as $row){
$pre_id = $row['Mcu_PreregisterPatientsID'];
$mgm_mcuid = $row['Mcu_PreregisterPatientsMgm_McuID'];
$m_patientid = $row['Mcu_PreregisterPatientsM_PatientID'];
$order_before = $row['Mcu_PreregisterPatientsOrders'];
$order_after = $after_packet;
$sql = "INSERT INTO temp_replace_packet(
pre_id,
mgm_mcuid,
m_patientid,
order_before,
order_after,
user,
created)
VALUES (?,?,?,?,?,?,NOW())";
$query = $this->db_onedev->query($sql, [$pre_id, $mgm_mcuid, $m_patientid, $order_before, $order_after, $userid]);
if(!$query){
echo "error : temp";
$errors[] = "error : ".$m_patientid;
//$this->db_onedev->trans_rollback();
echo "error : insert temp_replace_packet : ".$m_patientid."
";
continue;
}
echo "insert temp_replace_packet : ".$m_patientid."
";
$sql = "UPDATE mcu_preregister_patients
SET Mcu_PreregisterPatientsOrders = ?,
Mcu_PreregisterPatientsUserID = ?
WHERE Mcu_PreregisterPatientsID = ? AND
Mcu_PreregisterPatientsIsActive = 'Y' AND
Mcu_PreregisterPatientsIsRegistered = 'N' AND
Mcu_PreregisterPatientsOrders = ?";
//echo $sql."
";
$query = $this->db_onedev->query($sql, [$order_after, $userid, $pre_id, $order_before]);
if(!$query){
echo "error : update mcu_preregister_patients";
$errors[] = "error : ".$m_patientid;
continue;
}
// echo $this->db_onedev->last_query();
}
echo "end update data
";
if(count($errors) > 0){
echo "errors : ".count($errors)."
";
echo "errors : ".implode(", ", $errors)."
";
$this->db_onedev->trans_rollback();
return;
}
else{
$this->db_onedev->trans_commit();
echo "success
";
return;
}
}
function generate_uuid(){
// Generate 16 bytes (128 bits) of random data
$data = random_bytes(16);
// Set version to 0100
$data[6] = chr(ord($data[6]) & 0x0f | 0x40);
// Set bits 6-7 to 10
$data[8] = chr(ord($data[8]) & 0x3f | 0x80);
// Output the 36 character UUID
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
function generate_code_string(){
$length = 5;
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$code = '';
for ($i = 0; $i < $length; $i++) {
$code .= $characters[rand(0, strlen($characters) - 1)];
}
return $code;
}
function generate_code_form($preid,$orderid){
$userid = 555;
//echo "preid : ".$preid." - orderid : ".$orderid."
";
//return;
$sql = "SELECT COUNT(*) as total
FROM form_riwayat_pasien
WHERE FormRiwayatPasienPreregisterID = ? AND
FormRiwayatPasienIsActive = 'Y'
";
$qry = $this->db_onedev->query($sql, [$preid]);
//echo $this->db_onedev->last_query();
//exit;
if($qry){
$total = $qry->result_array()[0]['total'];
if($total == 0){
$code = $this->generate_code_string();
$uuid = $this->generate_uuid();
// echo "code : ".$code." - uuid : ".$uuid."
";
//exit;
$sql = "INSERT INTO form_riwayat_pasien (
FormRiwayatPasienPreregisterID,
FormRiwayatPasienCode,
FormRiwayatPasienUUID,
FormRiwayatPasienT_OrderHeaderID,
FormRiwayatPasienCreated,
FormRiwayatPasienCreatedUserID)
VALUES (?, ?, ?, ?, NOW(), ?)";
$qry = $this->db_onedev->query($sql, [$preid, $code, $uuid, $orderid, $userid]);
//echo $this->db_onedev->last_query();
//exit;
if(!$qry){
echo "error : ".$this->db_onedev->error();
return;
}
//return array('uuid' => $uuid, 'code' => $code);
$genformqrcode = $this->genformqrcode($uuid);
echo json_encode($genformqrcode);
}
}else{
echo "no data";
}
}
function genformqrcode($uuid){
$this->load->library('ciqrcode'); //pemanggilan library QR CODE
$home_dir = "/home/one/project/one/";
$target_dir = $home_dir . "one-media/one-qrpatient/";
$config['cacheable'] = false; //boolean, the default is true
//$config['cachedir'] = './assets/'; //string, the default is application/cache/
//$config['errorlog'] = './assets/'; //string, the default is application/logs/
$config['imagedir'] = $target_dir; //direktori penyimpanan qr code
$config['quality'] = true; //boolean, the default is true
$config['size'] = '1024'; //interger, the default is 1024
$config['black'] = array(224,255,255); // array, default is array(255,255,255)
$config['white'] = array(70,130,180); // array, default is array(0,0,0)
$this->ciqrcode->initialize($config);
$image_name="form_qr_".$uuid.".png"; //buat name dari qr code sesuai dengan nim
$params['data'] = 'https://cpone.aplikasi.web.id/one-ui/test/vuex/cpone-riwayat-form/?id='.$uuid; //data yang akan di jadikan QR CODE
$params['level'] = 'H'; //H=High
$params['size'] = 10;
$params['savename'] = $config['imagedir'].$image_name; //simpan image QR CODE ke folder assets/images/
$this->ciqrcode->generate($params); // fungsi untuk generate QR CODE
return array('image' => "https://cpone.aplikasi.web.id/one-media/one-qrpatient/".$image_name, 'url' => $params['data']);
//echo "selesai";
}
function fix_order_not_same_in_packet($labnumber,$packet_number){
$this->db_onedev->trans_begin();
$sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = '{$labnumber}'";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
$rows = $query->row_array();
$order_id = $rows['T_OrderHeaderID'];
$sql = "SELECT *
FROM t_orderdetailorder
JOIN t_packet ON T_OrderDetailOrderT_PacketID = T_PacketID AND T_PacketIsActive = 'Y' AND
T_PacketSasCode = '{$packet_number}'
WHERE T_OrderDetailOrderT_OrderHeaderID = '{$order_id}' AND
T_OrderDetailOrderIsActive = 'Y'
LIMIT 1";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
$get_packet = $query->result_array();
if(count($get_packet) == 0){
$this->db_onedev->trans_rollback();
echo "no data packet : ".$labnumber." - ".$packet_number."
";
return;
}
$packet_id = $get_packet[0]['T_PacketID'];
$orderdetail_order_id = $get_packet[0]['T_OrderDetailOrderID'];
$sql = "SELECT *
FROM t_packetdetail
JOIN t_packet ON T_PacketDetailT_PacketID = T_PacketID
JOIN t_test ON T_PacketDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
WHERE
T_PacketDetailT_PacketID = '{$packet_id}' AND
T_PacketDetailIsActive = 'Y'";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
$packetdetails = $query->result_array();
if(count($packetdetails) == 0){
$this->db_onedev->trans_rollback();
echo "no data packetdetail : ".$labnumber." - ".$packet_number."
";
return;
}
$packet_price = $get_packet[0]['T_PacketPrice'];
/*loop packetdetail start*/
foreach($packetdetails as $packetdetail){
$test_id = $packetdetail['T_TestID'];
$sql = "SELECT *
FROM t_orderdetail
WHERE
T_OrderDetailT_OrderHeaderID = '{$order_id}' AND
T_OrderDetailT_TestID = '{$test_id}' AND T_OrderDetailIsActive = 'Y'";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
$orderdetail = $query->result_array();
if(count($orderdetail) == 0){
$test_sascode = $packetdetail['T_TestSasCode'];
$sql = "SELECT *, IFNULL(Nat_UnitID,0) as Nat_UnitID, IFNULL(Nat_UnitName,'') as Nat_UnitName
FROM t_test
JOIN nat_test ON T_TestNat_TestID = Nat_TestID
LEFT JOIN nat_unit ON Nat_TestNat_UnitID = Nat_UnitID
WHERE
T_TestSasCode LIKE '{$test_sascode}%' AND T_TestIsActive = 'Y'";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
$tests = $query->result_array();
foreach($tests as $test){
$isPanel = 'N';
$isPanelChildren = 'N';
$isPanelChildrenPrintNota = 'N';
$price = $test_id == $test['T_TestID'] ? $packetdetail['T_PacketDetailPrice'] : 0;
$price_for_disc = $test_id == $test['T_TestID'] ? $packetdetail['T_PacketDetailPrice'] : 0;
$disc = 0;
$disc_amount = 0;
$disc_total = 0;
$total = $price;
$nat_unitid = $test['Nat_UnitID'];
$nat_unit_name = $test['Nat_UnitName'];
$sql = "INSERT INTO t_orderdetail(
T_OrderDetailT_OrderHeaderID,
T_OrderDetailT_OrderDetailOrderID,
T_OrderDetailT_TestID,
T_OrderDetailT_TestCode,
T_OrderDetailT_TestSasCode,
T_OrderDetailT_TestName,
T_OrderDetailT_TestIsResult,
T_OrderDetailT_TestIsPanel,
T_OrderDetailT_TestIsPanelChildren,
T_OrderDetailT_TestIsPanelChildrenPrintNota,
T_OrderDetailT_TestIsPrice,
T_OrderDetailPrice,
T_OrderDetailPriceForDisc,
T_OrderDetailDisc,
T_OrderDetailDiscAmount,
T_OrderDetailDiscTotal,
T_OrderDetailTotal,
T_OrderDetailNat_UnitID,
T_OrderDetailNat_UnitName,
T_OrderDetailCreated,
T_OrderDetailCreatedUserID)
VALUES (
'{$order_id}',
'{$orderdetail_order_id}',
'{$test['T_TestID']}',
'{$test['T_TestCode']}',
'{$test['T_TestSasCode']}',
'{$test['T_TestName']}',
'{$test['T_TestIsResult']}',
'{$isPanel}',
'{$isPanelChildren}',
'{$isPanelChildrenPrintNota}',
'{$test['T_TestIsPrice']}',
'{$price}',
'{$price_for_disc}',
'{$disc}',
'{$disc_amount}',
'{$disc_total}',
'{$total}',
'{$nat_unitid}',
'{$nat_unit_name}',
'NOW()',
55516
)
";
//echo $sql."
";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : insert : ".$test['T_TestName']."
";
echo $this->db_onedev->last_query();
return;
}
}
}
}
/*loop packetdetail end*/
$sql = "SELECT SUM(T_OrderDetailTotal) as total_detail
FROM t_orderdetail
WHERE T_OrderDetailT_OrderHeaderID = '{$order_id}' AND T_OrderDetailIsActive = 'Y'";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
$orderdetail = $query->row_array();
if($orderdetail['total_detail'] != $packet_price){
$this->db_onedev->trans_rollback();
echo "total detail : ".$orderdetail['total_detail']." - packet price : ".$packet_price."
";
echo "error total not same : ".$labnumber." - ".$packet_number."
";
}
else{
$sql = "UPDATE t_orderheader
SET T_OrderHeaderSubTotal = '{$orderdetail['total_detail']}',
T_OrderHeaderTotal = '{$orderdetail['total_detail']}'
WHERE
T_OrderHeaderID = '{$order_id}' AND T_OrderHeaderIsActive = 'Y'";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
echo "total detail : ".$orderdetail['total_detail']." - packet price : ".$packet_price."
";
echo "success : ".$labnumber." - ".$packet_number."
";
}
$this->db_onedev->trans_commit();
$this->fix_ordersample($labnumber);
$this->fix_order_location($labnumber);
}
function fix_ordersample($labnumber){
$this->db_onedev->trans_begin();
$sql = "SELECT T_OrderHeaderID,T_OrderHeaderLabNumber, T_TestID, T_SampleTypeID , T_SampleTypeSuffix, T_SampleStationIsNonLab, T_SampleStationID
from t_orderheader
JOIN t_orderdetail ON t_orderheaderid = t_orderdetailt_orderheaderid AND t_orderdetailIsActive = 'Y'
JOIN t_test ON t_orderdetailt_testid = t_testid AND T_TestIsResult = 'Y'
JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID
JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID
JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID
where T_OrderHeaderLabNumber = '{$labnumber}'
group by T_SampleTypeID";
$query = $this->db_onedev->query($sql);
if(!$query){
echo "error : ".$this->db_onedev->error();
return;
}
$rows = $query->result_array();
$new_insert = [];
foreach($rows as $row){
$lab_no = $row['T_OrderHeaderLabNumber'];
$test_id = $row['T_TestID'];
$sample_id = $row['T_SampleTypeID'];
$sample_code = $row['T_SampleTypeSuffix'];
$barcode = $lab_no . $sample_code;
$isnonlab = $row['T_SampleStationIsNonLab'];
$samplestation_id = $row['T_SampleStationID'];
$counter_barcode = 1;
$sql = "SELECT *
FROM t_barcodelab
WHERE T_BarcodeLabT_OrderHeaderID = '{$row['T_OrderHeaderID']}' AND
T_BarcodeLabT_SampleTypeID = '{$row['T_SampleTypeID']}' AND T_BarcodeLabIsActive = 'Y'";
$query = $this->db_onedev->query($sql);
if(!$query){
echo "error : ".$this->db_onedev->error();
return;
}
$barcodelab = $query->result_array();
//echo count($barcodelab)."
";
if(count($barcodelab) == 0){
$new_insert[] = [
'T_OrderHeaderID' => $row['T_OrderHeaderID'],
'T_SampleTypeID' => $sample_id,
'T_BarcodeLabBarcode' => $barcode,
'T_BarcodeLabCounter' => $counter_barcode
];
$barcode = $barcode . $counter_barcode;
$sql = "INSERT INTO t_barcodelab(
T_BarcodeLabT_OrderHeaderID,
T_BarcodeLabBarcode,
T_BarcodeLabT_SampleTypeID,
T_BarcodeLabCounter)
VALUES ('{$row['T_OrderHeaderID']}','{$barcode}','{$sample_id}','{$counter_barcode}')";
//echo $sql."
";
$qry = $this->db_onedev->query($sql);
//echo $this->db_smartone->last_query();
if (!$qry) {
$this->db_onedev->trans_rollback();
$this->sys_error_db(["status" => "ERR", "message" => "insert t_barcodelab | " .
$this->db_onedev->error()["message"], "debug" => $this->db_onedev->last_query()]);
exit;
}
$last_id_barcode = $this->db_smartone->insert_id();
if ($isnonlab == "") {
$sql = "INSERT INTO t_ordersample(
T_OrderSampleT_OrderHeaderID,
T_OrderSampleT_SampleTypeID,
T_OrderSampleT_BarcodeLabID,
T_OrderSampleBarcode,
T_OrderSampleT_SampleStationID)
VALUES ('{$row['T_OrderHeaderID']}','{$sample_id}','{$last_id_barcode}','{$barcode}','{$samplestation_id}')";
//echo $sql."
";
$qry = $this->db_onedev->query($sql);
if (!$qry) {
$this->db_onedev->trans_rollback();
$this->sys_error_db(["status" => "ERR", "message" => "insert t_ordersample | " .
$this->db_onedev->error()["message"], "debug" => $this->db_onedev->last_query()]);
exit;
}
}
}
}
$this->db_onedev->trans_commit();
if(count($new_insert) > 0){
return json_encode([
"status" => "OK",
"message" => "success",
"data" => $new_insert
]);
}
else{
return json_encode([
"status" => "OK",
"message" => "no data",
"data" => []
]);
}
}
function price_not_same($stardate,$enddate){
$sql = "SELECT *
FROM t_orderheader
JOIN t_orderdetailorder ON T_OrderHeaderID = T_OrderDetailOrderT_OrderHeaderID AND T_OrderDetailOrderIsActive = 'Y'
WHERE T_OrderHeaderIsActive = 'Y' AND DATE(T_OrderHeaderDate) BETWEEN ? AND ?
GROUP BY T_OrderHeaderID";
$query = $this->db_onedev->query($sql, array($stardate, $enddate));
if(!$query){
echo "error : ".$this->db_onedev->error();
return;
}
$rows = $query->result_array();
foreach($rows as $row){
$sql = "SELECT SUM(T_OrderDetailTotal) as total_detail
FROM t_orderdetail
WHERE T_OrderDetailIsActive = 'Y' AND T_OrderDetailT_OrderHeaderID = ?";
$query = $this->db_onedev->query($sql, array($row['T_OrderHeaderID']));
if(!$query){
echo "error : ".$this->db_onedev->error();
return;
}
$orderdetail = $query->row_array();
if($orderdetail['total_detail'] != $row['T_OrderHeaderTotal']){
$sql = "UPDATE t_orderheader SET
T_OrderHeaderSubTotal = {$orderdetail['total_detail']},
T_OrderHeaderTotal = {$orderdetail['total_detail']}
WHERE T_OrderHeaderID = {$row['T_OrderHeaderID']} AND T_OrderHeaderIsActive = 'Y'";
//echo $sql."
";
$this->db_onedev->query($sql);
//echo $this->db_onedev->last_query();
echo $row['T_OrderHeaderLabNumber']." - ".$orderdetail['total_detail']." - ".$row['T_OrderHeaderTotal']."
";
}
}
}
function delet_duplicate_translation(){
$sql = "UPDATE translate_word tw1
JOIN (
SELECT Translate_WordFrom, MAX(Translate_WordID) as latest_id
FROM translate_word
WHERE Translate_WordIsActive = 'Y'
GROUP BY Translate_WordFrom
HAVING COUNT(*) > 1
) tw2 ON tw1.Translate_WordFrom = tw2.Translate_WordFrom
SET tw1.Translate_WordIsActive = 'N'
WHERE tw1.Translate_WordIsActive = 'Y'
AND tw1.Translate_WordID != tw2.latest_id;";
$query = $this->db_onedev->query($sql);
if(!$query){
echo "error : ".$this->db_onedev->error();
return;
}
echo "success";
}
function delete_reflek_27($mgm_mcu_number){
$sql = "SELECT *
FROM t_orderheader
JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID AND Mgm_McuIsActive = 'Y'
AND Mgm_McuNumber = ? AND T_OrderHeaderIsActive = 'Y'
JOIN mgm_mcutemplate ON Mgm_McuTemplateMgm_McuID = Mgm_McuID AND Mgm_McuTemplateIsActive = 'Y'";
$rows = $this->db_onedev->query($sql, array($mgm_mcu_number))->result_array();
if(count($rows) > 0){
foreach($rows as $row){
$sql = "SELECT *
FROM so_resultentry
WHERE So_ResultEntryT_OrderHeaderID = ? AND So_ResultEntryIsActive = 'Y' AND So_ResultEntryNonlab_TemplateID = 27 LIMIT 1";
$so_resultentry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID']))->result_array();
//echo $this->db_onedev->last_query();
if(count($so_resultentry) > 0){
$so_reid = $so_resultentry[0]['So_ResultEntryID'];
//echo $so_reid."
";
$sql = "SELECT COUNT(*) as exist_dt FROM so_resultentry_fisik_umum
WHERE So_ResultEntryFisikUmumFisikTemplateID IN (40,27) AND
So_ResultEntryFisikUmumSo_ResultEntryID = {$so_reid} AND
So_ResultEntryFisikUmumIsActive = 'Y'";
//echo $sql;
$so_resultentry_fisik_umum = $this->db_onedev->query($sql)->row_array();
if($so_resultentry_fisik_umum['exist_dt'] == 2){
$sql = "UPDATE so_resultentry_fisik_umum SET
So_ResultEntryFisikUmumIsActive = 'N',
So_ResultEntryFisikUmumDeleted = NOW(),
So_ResultEntryFisikUmumDeletedUserID = 666
WHERE So_ResultEntryFisikUmumSo_ResultEntryID = {$so_reid} AND So_ResultEntryFisikUmumFisikTemplateID = 27";
//$this->db_onedev->query($sql);
echo $sql."
";
echo "success : ".$row['T_OrderHeaderLabNumber']."
";
}
}
}
}
}
function add_new_reflek($mgm_mcu_number){
$sql = "SELECT *
FROM t_orderheader
JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID AND Mgm_McuIsActive = 'Y'
AND Mgm_McuNumber = ? AND T_OrderHeaderIsActive = 'Y'
JOIN mgm_mcutemplate ON Mgm_McuTemplateMgm_McuID = Mgm_McuID AND Mgm_McuTemplateIsActive = 'Y'";
$rows = $this->db_onedev->query($sql, array($mgm_mcu_number))->result_array();
if(count($rows) > 0){
$sql = "SELECT * FROM fisik_template WHERE FisikTemplateIsActive = 'Y' AND FisikTemplateCode = 'FI18.2' LIMIT 1";
$fisik_template = $this->db_onedev->query($sql)->row_array();
//echo $fisik_template['FisikTemplateID']."
";
foreach($rows as $row){
$sql = "SELECT *
FROM so_resultentry
WHERE So_ResultEntryT_OrderHeaderID = ? AND So_ResultEntryIsActive = 'Y' AND So_ResultEntryNonlab_TemplateID = 27 LIMIT 1";
$so_resultentry = $this->db_onedev->query($sql, array($row['T_OrderHeaderID']))->result_array();
//echo $this->db_onedev->last_query();
if(count($so_resultentry) > 0){
$so_reid = $so_resultentry[0]['So_ResultEntryID'];
//echo $so_reid."
";
$sql = "SELECT COUNT(*) as exist_dt FROM so_resultentry_fisik_umum
WHERE So_ResultEntryFisikUmumFisikTemplateID IN ({$fisik_template['FisikTemplateID']},27) AND
So_ResultEntryFisikUmumSo_ResultEntryID = {$so_reid} AND
So_ResultEntryFisikUmumIsActive = 'Y'";
//echo $sql;
$so_resultentry_fisik_umum = $this->db_onedev->query($sql)->row_array();
//echo $this->db_onedev->last_query();
if($so_resultentry_fisik_umum['exist_dt'] == 0){
$sql = "INSERT INTO
so_resultentry_fisik_umum (
So_ResultEntryFisikUmumFisikTemplateID,
So_ResultEntryFisikUmumSo_ResultEntryID,
So_ResultEntryFisikUmumDetails,
So_ResultEntryFisikUmumIsActive,
So_ResultEntryFisikUmumCreated,
So_ResultEntryFisikUmumCreatedUserID)
VALUES (
{$fisik_template['FisikTemplateID']},
{$so_reid},
'{$fisik_template['FisikTemplateJSON']}', 'Y', NOW(), 666)";
//echo $sql."
";
$query = $this->db_onedev->query($sql);
if(!$query){
echo "error : ".$this->db_onedev->error();
return;
}
echo $row['T_OrderHeaderLabNumber']."
";
}
}
}
}
}
function check_undeleted_hba1c_total(){
$sql = "SELECT * FROM undeleted_hba1c WHERE `status` = 'Y'";
$query = $this->db_onedev->query($sql);
if(!$query){
echo "error : ".$this->db_onedev->error();
return;
}
$rows = $query->result_array();
foreach($rows as $row){
$sql = "SELECT SUM(T_OrderDetailTotal) as total_detail, T_OrderHeaderTotal as total_header
FROM `t_orderdetail`
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
WHERE `T_OrderDetailIsActive` = 'Y' AND T_OrderHeaderLabNumber = '{$row['nolab']}'";
$query = $this->db_onedev->query($sql);
if(!$query){
echo "error : ".$this->db_onedev->error();
return;
}
$rows = $query->result_array();
if($rows[0]['total_detail'] != $rows[0]['total_header']){
echo "nolab : ".$row['nolab']. " - total detail : ".$rows[0]['total_detail']. " - total header : ".$rows[0]['total_header']."
";
}
}
}
function fix_undeleted_hba1c_in_orderdetail(){
$this->db_onedev->trans_begin();
$sql = "SELECT * FROM undeleted_hba1c WHERE `status` = 'N' LIMIT 9";
//echo $sql."
";
//echo "start
";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
$rows = $query->result_array();
foreach($rows as $row){
$sql = "SELECT *
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND
T_OrderHeaderIsActive = 'Y' AND
T_OrderHeaderLabNumber = '{$row['nolab']}'
WHERE
T_OrderDetailT_TestID IN (1012,1013,1014,3468) AND T_OrderDetailIsActive = 'N'";
//echo $sql."
";
//echo "nolab : ".$row['nolab']."
";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
$orderdetail = $query->result_array();
if(count($orderdetail) > 0){
foreach($orderdetail as $detail){
$sql = "UPDATE t_orderdetail SET
T_OrderDetailIsActive = 'Y',
T_OrderDetailLastUpdated = NOW(),
T_OrderDetailLastUpdatedUserID = 666
WHERE T_OrderDetailID = {$detail['T_OrderDetailID']}";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
//echo "update detail : ".$detail['T_OrderDetailID']."
";
//echo $sql."
";
}
}
$sql = "SELECT *
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND
T_OrderHeaderIsActive = 'Y' AND
T_OrderHeaderLabNumber = '{$row['nolab']}'
WHERE
T_OrderDetailT_TestID = 3509 AND T_OrderDetailIsActive = 'Y'";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
$orderdetail_eag = $query->result_array();
//echo $sql."
";
if(count($orderdetail_eag) > 0){
foreach($orderdetail_eag as $detail_eag){
$sql = "UPDATE t_orderdetail SET
T_OrderDetailIsActive = 'N',
T_OrderDetailLastUpdated = NOW(),
T_OrderDetailLastUpdatedUserID = 666
WHERE T_OrderDetailID = {$detail_eag['T_OrderDetailID']}";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
//echo "update eag : ".$detail_eag['T_OrderDetailID']."
";
//echo $sql."
";
}
}
$sql = "UPDATE undeleted_hba1c SET status = 'Y' WHERE nolab = '{$row['nolab']}'";
//echo $sql."
";
$query = $this->db_onedev->query($sql);
if(!$query){
$this->db_onedev->trans_rollback();
echo "error : ".$this->db_onedev->error();
return;
}
$this->db_onedev->trans_commit();
echo "success : ".$row['nolab']."
";
}
}
function update_sampling_status($labnumber){
$sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ?";
$rows = $this->db_onedev->query($sql, array($labnumber))->row_array();
$order_id = $rows['T_OrderHeaderID'];
$sql = "UPDATE t_sampling_queue_last_status SET
T_SamplingQueueLastStatusT_SamplingQueueStatusID = 2,
T_SamplingQueueLastStatusLastUpdated = NOW(),
T_SamplingQueueLastStatusLastUpdatedUserID = 3461
WHERE T_SamplingQueueLastStatusT_OrderHeaderID = ? AND
T_SamplingQueueLastStatusT_SamplingQueueStatusID = 3";
$this->db_onedev->query($sql, array($order_id));
echo "Sampling status updated successfully.";
}
function hitungUmur($dob, $dateTo = null) {
// Validasi format tanggal lahir
if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $dob)) {
return "Format tanggal lahir tidak valid. Gunakan format YYYY-MM-DD";
}
// Dapatkan tanggal lahir sebagai objek DateTime
$birthDateObj = new DateTime($dob);
// Dapatkan tanggal perhitungan
if ($dateTo === null) {
// Jika tidak ada tanggal perhitungan, gunakan tanggal hari ini
$toDateObj = new DateTime();
} else {
// Validasi format tanggal perhitungan
if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $dateTo)) {
return "Format tanggal perhitungan tidak valid. Gunakan format YYYY-MM-DD";
}
// Parse tanggal perhitungan
$toDateObj = new DateTime($dateTo);
}
// Jika tanggal lahir lebih besar dari tanggal perhitungan, return error
if ($birthDateObj > $toDateObj) {
return "Tanggal lahir tidak boleh setelah tanggal perhitungan";
}
// Hitung perbedaan antara tanggal perhitungan dan tanggal lahir
$diff = $toDateObj->diff($birthDateObj);
// Format hasil
$tahun = $diff->y;
$bulan = $diff->m;
$hari = $diff->d;
// Buat hasil string
$hasil = '';
if ($tahun > 0) {
$hasil .= $tahun . ' tahun ';
}
if ($bulan > 0 || $tahun > 0) {
$hasil .= $bulan . ' bulan ';
}
$hasil .= $hari . ' hari';
return trim($hasil);
}
function recount_age($labnumber){
$sql = "SELECT * , DATE(T_OrderHeaderDate) as tanggal_lahir
FROM m_patient
JOIN t_orderheader ON M_PatientID = T_OrderHeaderM_PatientID AND T_OrderHeaderIsActive = 'Y' AND
T_OrderHeaderLabNumber = ?
WHERE M_PatientIsActive = 'Y'";
$rows = $this->db_onedev->query($sql, array($labnumber))->result_array();
if(count($rows) > 0){
$patient = $rows[0];
$age = $this->hitungUmur($patient['M_PatientDOB'], $patient['tanggal_lahir']);
$sql = "UPDATE t_orderheader SET T_OrderHeaderM_PatientAge = ? WHERE T_OrderHeaderID = ?";
$this->db_onedev->query($sql, array($age, $patient['T_OrderHeaderID']));
$data_log = [
'age_before' => $patient['T_OrderHeaderM_PatientAge'],
'age_after' => $age,
'labnumber' => $patient['T_OrderHeaderLabNumber'],
'patient_name' => $patient['M_PatientName'],
'patient_id' => $patient['M_PatientID'],
'order_id' => $patient['T_OrderHeaderID']
];
$sql = "INSERT INTO cpone_log.log_fo(
Log_FoT_OrderHeaderID,
Log_FoDate,
Log_FoCode,
Log_FoJson,
Log_FoUserID
)
VALUES (?, NOW(), 'RECOUNT_AGE', ?, ?)";
$this->db_onedev->query($sql, array($patient['T_OrderHeaderID'], json_encode($data_log), 666));
echo 'Tanggal Order : '.$patient['tanggal_lahir']."
";
echo 'Tanggal Lahir : '.$patient['M_PatientDOB']."
";
echo 'Hasil : '.$patient['M_PatientName']." - ".$age."
";
}
}
function retotal_orderbypacket($pakcetNumber){
$rst = [];
$sql = "SELECT T_OrderHeaderID, T_OrderHeaderLabNumber, SUM(T_OrderDetailTotal) as total , T_OrderHeaderTotal
FROM t_orderdetail
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND
T_OrderHeaderIsActive = 'Y'
JOIN t_orderdetailorder ON T_OrderDetailOrderT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
T_OrderDetailOrderIsActive = 'Y'
JOIN t_packet ON T_OrderDetailOrderT_PacketID = T_PacketID AND T_PacketIsActive = 'Y' AND T_PacketSasCode = ?
WHERE T_OrderDetailIsActive = 'Y'
GROUP BY T_OrderHeaderID
HAVING total <> T_OrderHeaderTotal";
$rows = $this->db_onedev->query($sql, array($pakcetNumber))->result_array();
if(count($rows) > 0){
foreach($rows as $row){
if($row['total'] != $row['T_OrderHeaderTotal']){
$sql = "UPDATE t_orderheader SET T_OrderHeaderLastUpdated = NOW(), T_OrderHeaderLastUpdatedUserID = 1617, T_OrderHeaderSubTotal = ?, T_OrderHeaderTotal = ? WHERE T_OrderHeaderID = ?";
$this->db_onedev->query($sql, array($row['total'], $row['total'], $row['T_OrderHeaderID']));
$rst[] = $row['T_OrderHeaderLabNumber'];
}
}
}
echo json_encode($rst);
}
function fix_hba1c_deleted(){
/*$sql = "SELECT *
FROM t_orderheader
JOIN t_orderdetailorder ON T_OrderDetailOrderT_OrderHeaderID = T_OrderHeaderID AND
T_OrderDetailOrderT_PacketID IN (490,491)
JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND
T_OrderDetailIsActive = 'N' AND T_OrderDetailT_TestID = 1012
";
*/
$sql = "SELECT DISTINCT T_OrderHeaderID FROM `t_orderdetail`
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND
T_OrderHeaderIsActive = 'Y'
JOIN t_orderdetailorder ON T_OrderDetailOrderT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND
T_OrderDetailOrderT_TestID = 1012 AND T_OrderDetailOrderIsActive = 'Y'
WHERE `T_OrderDetailIsActive` = 'N' AND T_OrderDetailT_TestID = 1012 AND
T_OrderDetailDeletedUserID = 313
LIMIT 50";
$rows = $this->db_onedev->query($sql)->result_array();
foreach($rows as $row){
$sql = "SELECT * FROM t_orderdetail WHERE T_OrderDetailT_OrderHeaderID = {$row['T_OrderHeaderID']} AND
T_OrderDetailT_TestID IN (1012,1013,1014,3468) AND T_OrderDetailIsActive = 'Y'";
$orderdetail_active = $this->db_onedev->query($sql)->result_array();
if(count($orderdetail_active) == 0){
$sql = "UPDATE t_orderdetail SET
T_OrderDetailLastUpdatedUserID = 2730,
T_OrderDetailLastUpdated = NOW(),
T_OrderDetailIsActive = 'Y'
WHERE
T_OrderDetailT_OrderHeaderID = {$row['T_OrderHeaderID']} AND
T_OrderDetailT_TestID IN (1012,1013,1014,3468) AND T_OrderDetailIsActive = 'N'";
$this->db_onedev->query($sql);
}
}
}
function change_corporate_order(){
$prm = $this->sys_input;
$labnumber = isset($prm['labnumber']) ? $prm['labnumber'] : '';
$corporate_code_before = isset($prm['corporate_code_before']) ? $prm['corporate_code_before'] : '';
$corporate_code_after = isset($prm['corporate_code_after']) ? $prm['corporate_code_after'] : '';
if($labnumber == '' || $corporate_code_before == '' || $corporate_code_after == ''){
echo 'Labnumber, Corporate Code Before dan Corporate Code After tidak boleh kosong';
exit;
}
$sql = "SELECT * FROM corporate WHERE CorporateCode = ? AND CorporateIsActive = 'Y'";
$corporate = $this->db_onedev->query($sql, array($corporate_code_after))->row_array();
if(count($corporate) == 0){
echo 'Corporate Code After tidak ditemukan';
exit;
}
$corporate_id_after = $corporate['CorporateID'];
$sql = "UPDATE t_orderheader SET T_OrderHeaderCorporateID = ? WHERE T_OrderHeaderLabNumber = ?";
$query = $this->db_onedev->query($sql, array($corporate_id_after, $labnumber));
if(!$query){
echo 'Error : '.$this->db_onedev->error();
exit;
}
$sql = "SELECT *
FROM t_orderheader
JOIN corporate ON T_OrderHeaderCorporateID = CorporateID AND CorporateIsActive = 'Y'
WHERE
T_OrderHeaderLabNumber = ? AND T_OrderHeaderIsActive = 'Y'";
$query = $this->db_onedev->query($sql, array($labnumber));
if(!$query){
echo 'Error : '.$this->db_onedev->error();
exit;
}
$order = $query->row_array();
echo 'Corporate Code Setelah Update : '.$order['CorporateName']." - ".$order['CorporateCode']."
";
echo 'Berhasil mengubah Corporate Code Order : '.$labnumber."
";
}
function change_template_nonlab($labnumber,$test_code){
$sql = "SELECT *
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
WHERE T_OrderHeaderLabNumber = ? AND T_TestSasCode = ? AND T_OrderDetailIsActive = 'Y'";
$order = $this->db_onedev->query($sql, array($labnumber, $test_code))->row_array();
$order_id = $order['T_OrderDetailT_OrderHeaderID'];
$orderdetail_id = $order['T_OrderDetailID'];
$test_id = $order['T_OrderDetailT_TestID'];
$nat_test_id = $order['T_TestNat_TestID'];
echo $order['T_TestName']."
";
$sql = "SELECT *
FROM nonlab_template_mapping
JOIN nonlab_template ON NonlabTemplateMappingNonlabTemplateID = NonlabTemplateID
WHERE NonlabTemplateMappingNat_TestID = ? AND NonlabTemplateMappingIsActive = 'Y'
ORDER BY NonlabTemplateMappingID DESC
LIMIT 1 ";
$query = $this->db_onedev->query($sql, array($nat_test_id));
if(!$query)
{
echo "Tidak ditemukan template nonlab ".$nat_test_id."
";
exit;
}
$nonlab_template_mapping = $query->row_array();
$nonlab_template_id = $nonlab_template_mapping['NonlabTemplateID'];
$nonlab_template_name = $nonlab_template_mapping['NonlabTemplateName'];
echo "Template Baru : ".$nonlab_template_name."
";
$sql = "SELECT * FROM so_resultentry
WHERE So_ResultEntryT_OrderDetailID = ? AND So_ResultEntryT_OrderHeaderID = ? AND
So_ResultEntryNonlab_TemplateID = ? AND So_ResultEntryIsActive = 'Y'";
$so_resultentry = $this->db_onedev->query($sql, array($orderdetail_id, $order_id, $nonlab_template_id))->result_array();
if(count($so_resultentry) == 0){
$sql = "SELECT * FROM so_resultentry
WHERE So_ResultEntryT_OrderDetailID = ? AND
So_ResultEntryT_OrderHeaderID = ? AND
So_ResultEntryIsActive = 'Y' LIMIT 1";
$query = $this->db_onedev->query($sql, array($orderdetail_id, $order_id));
$resultentry = $query->row_array();
$so_id = $resultentry['So_ResultEntryID'];
$sql = "UPDATE so_resultentry SET So_ResultEntryIsActive = 'N',
So_ResultEntryDeletedUserID = 1617,
So_ResultEntryDeleted = NOW()
WHERE So_ResultEntryID = ? AND So_ResultEntryIsActive = 'Y'";
$this->db_onedev->query($sql, array($so_id));
$sql = "UPDATE so_resultentry_detail SET
So_ResultEntryDetailIsActive = 'N',
So_ResultEntryDetailDeletedUserID = 1617,
So_ResultEntryDetailDeleted = NOW()
WHERE So_ResultEntryDetailSo_ResultEntryID = ? AND So_ResultEntryDetailIsActive = 'Y'";
$this->db_onedev->query($sql, array($so_id));
$sql = "INSERT INTO so_resultentry (
So_ResultEntryT_OrderDetailID,
So_ResultEntryT_OrderHeaderID,
So_ResultEntryNonlab_TemplateID,
So_ResultEntryNonlab_TemplateName,
So_ResultEntryIsActive,
So_ResultEntryCreated,
So_ResultEntryCreatedUserID
)
VALUES (?, ?, ?, ?, 'Y', NOW(), 1617)";
$query = $this->db_onedev->query($sql, array($orderdetail_id, $order_id, $nonlab_template_id, $nonlab_template_name));
if(!$query){
echo $this->db_onedev->last_query();
exit;
}
$last_id = $this->db_onedev->insert_id();
echo $nonlab_template_mapping['NonlabTemplateName']."
";
$sql = "SELECT * FROM nonlab_template_detail WHERE NonlabTemplateDetailNonlabTemplateID = ? AND NonlabTemplateDetailIsActive = 'Y'";
$nonlab_template_detail = $this->db_onedev->query($sql, array($nonlab_template_id))->result_array();
//print_r($nonlab_template_detail);
foreach($nonlab_template_detail as $detail){
$sql = "INSERT INTO so_resultentrydetail (
So_ResultEntryDetailSo_ResultEntryID,
So_ResultEntryDetailNonlab_TemplateDetailID,
So_ResultEntryDetailNonlab_TemplateDetailName,
So_ResultEntryDetailIsActive,
So_ResultEntryDetailCreated,
So_ResultEntryDetailCreatedUserID
)
VALUES (?, ?, ?, 'Y', NOW(), 1617)";
$query = $this->db_onedev->query($sql, array($last_id, $detail['NonlabTemplateDetailID'], $detail['NonlabTemplateDetailName']));
if(!$query){
echo $this->db_onedev->last_query();
exit;
}
//echo $query->last_query();
echo $detail['NonlabTemplateDetailName']."
";
}
}else{
echo "Template sudah sesuai dengan settingan";
}
}
function deactivate_test_in_packets() {
// Define the packet IDs and test ID to check
$packet_ids = [491, 490];
$test_id_to_deactivate = 3509;
// Find orders with the specified packets
$sql = "SELECT DISTINCT T_OrderDetailOrderT_OrderHeaderID
FROM t_orderdetailorder
WHERE T_OrderDetailOrderT_PacketID IN (" . implode(',', $packet_ids) . ")
AND T_OrderDetailOrderIsActive = 'Y'";
$affected_orders = $this->db_onedev->query($sql)->result_array();
if (empty($affected_orders)) {
echo "No orders found with the specified packets.";
return;
}
$updated_orders = 0;
$deactivated_tests = 0;
foreach ($affected_orders as $order) {
$order_header_id = $order['T_OrderDetailOrderT_OrderHeaderID'];
// Check if this order has the test we want to deactivate
$sql = "SELECT T_OrderDetailID
FROM t_orderdetail
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailT_TestID = ?
AND T_OrderDetailIsActive = 'Y'";
$tests_to_deactivate = $this->db_onedev->query($sql, array($order_header_id, $test_id_to_deactivate))->result_array();
if (!empty($tests_to_deactivate)) {
// Deactivate the tests
$test_ids = array_column($tests_to_deactivate, 'T_OrderDetailID');
$sql = "UPDATE t_orderdetail
SET T_OrderDetailIsActive = 'N',
T_OrderDetailDeleted = NOW(),
T_OrderDetailDeletedUserID = 3461
WHERE T_OrderDetailID IN (" . implode(',', $test_ids) . ")";
$this->db_onedev->query($sql);
$deactivated_tests += count($test_ids);
// Recalculate the order total
$sql = "SELECT SUM(T_OrderDetailTotal) as total
FROM t_orderdetail
WHERE T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'";
$total_result = $this->db_onedev->query($sql, array($order_header_id))->row_array();
$new_total = $total_result['total'] ?? 0;
// Update the order header
$sql = "UPDATE t_orderheader
SET T_OrderHeaderSubTotal = ?,
T_OrderHeaderTotal = ?,
T_OrderHeaderLastUpdated = NOW(),
T_OrderHeaderLastUpdatedUserID = 3461
WHERE T_OrderHeaderID = ?";
$this->db_onedev->query($sql, array($new_total, $new_total, $order_header_id));
$sql = "INSERT INTO delete_eag(orderid) VALUES(?)";
$this->db_onedev->query($sql, array($order_header_id));
$updated_orders++;
}
}
echo "Process completed successfully.
";
echo "Orders updated: $updated_orders
";
echo "Tests deactivated: $deactivated_tests
";
}
function search_test_by_code($xcode, $mcuid)
{
$is_packet = 'N';
$px_type = 'PX';
$pxtype = '';
if (substr($xcode, 0, 2) == 'PN' || substr($xcode, 0, 2) == 'PR') {
$is_packet = 'Y';
$px_type = substr($xcode, 0, 2);
$sql = "SELECT T_PacketID as T_TestID FROM t_packet WHERE T_PacketSasCode = '{$xcode}' AND T_PacketIsActive = 'Y'";
$pxtype = "px_type = '{$px_type}' AND";
} else {
$sql = "SELECT T_TestID FROM t_test WHERE T_TestSasCode = '{$xcode}' AND T_TestIsActive = 'Y'";
}
//echo $sql;
$xrow_test = $this->db_smartone->query($sql)->row_array();
$sql = "SELECT * FROM ";
$sql = "select *
from
ss_price_mou
where
T_PriceT_PriceHeaderID = {$mcuid} AND
T_TestID = {$xrow_test['T_TestID']} AND
$pxtype
is_packet = '{$is_packet}' AND
T_PriceIsCito <> 'Y';";
//echo $sql;
$query = $this->db_smartone->query($sql);
if ($query) {
$row = $query->row_array();
$id_to_remove = [];
// var_dump($rows);
$row['requirement'] = [];
if ($row['px_type'] == "PX") {
$x = $this->db_smartone->query("SELECT fn_fo_requirement_get('{$row['T_TestID']}') x")
->row();
if ($x->x != null)
$row['requirement'] = json_decode($x->x);
}
//print_r($row);
// Janji Hasil per PX
//$x = $this->db_smartone->query("SELECT fn_fo_find_promise_by_one_px('{$row['T_TestID']}') x")->row();
if ($row['is_packet'] == 'N') {
$tests = $row['T_PriceT_TestID'];
$panels = '';
} else {
$tests = '';
$panels = $row['T_PriceT_TestID'];
}
$sql_param = array($tests, $panels);
// $sql = "select fn_fo_find_promise_by_px(?, ?) as x";
// $x = $this->db_smartone->query($sql, $sql_param)->row();
// if ($x->x != null)
// $row['promise'] = $x->x;
$row['nat_test'] = json_decode($row['nat_test']);
$row['child_test'] = json_decode($row['child_test']);
//print_r($row['child_test'] );
// IF PROFILE
if ($row['px_type'] == "PN" || $row['px_type'] == "PR" || $row['px_type'] == "PXR") {
foreach ($row['child_test'] as $l => $w) {
$row['child_test'][$l]->requirement = [];
$row['child_test'][$l]->nat_test = json_decode($w->nat_test);
$row['child_test'][$l]->promise = null;
//echo "SELECT fn_fo_requirement_get('{$w->T_TestID}')";
$x = $this->db_smartone->query("SELECT fn_fo_requirement_get('{$w->T_TestID}') x")->row();
if ($x->x != null)
$row['child_test'][$l]->requirement = json_decode($x->x);
// Janji Hasil per PX
//$x = $this->db_smartone->query("SELECT fn_fo_find_promise_by_one_px('{$w->T_TestID}') x")
// ->row();
//if ($x->x != null)
$row['child_test'][$l]->promise = null;
}
}
echo json_encode($row);
}
}
function inject_rectal_swab($labnumber){
$sql = "SELECT * FROM t_orderheader WHERE T_OrderHeaderLabNumber = ?";
$order = $this->db_onedev->query($sql, array($labnumber))->row_array();
$order_id = $order['T_OrderHeaderID'];
$sql = "UPDATE t_orderdetail SET T_OrderDetailResult = 'Rectal swab'
WHERE T_OrderDetailT_TestID = 3470 AND T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'";
$this->db_onedev->query($sql, array($order_id));
echo "Update Bahan success";
$sql = "UPDATE t_orderdetail SET T_OrderDetailResult = '1. E. coli pathogen : Negatif
2. Salmonella sp : Negatif
3. Shigella sp : Negatif
4. Vibrio cholerae : Negatif'
WHERE T_OrderDetailT_TestID = 3474 AND T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'";
$this->db_onedev->query($sql, array($order_id));
echo "Update Hasil Biakan success";
$sql = "UPDATE t_orderdetail SET T_OrderDetailResult = 'dr. D. Hangga Kusuma, Sp. MK'
WHERE T_OrderDetailT_TestID = 3478 AND T_OrderDetailT_OrderHeaderID = ?
AND T_OrderDetailIsActive = 'Y'";
$this->db_onedev->query($sql, array($order_id));
}
function check_missing_order_location($labnumber, $test_code = null) {
// Get order header details
$sql = "SELECT T_OrderHeaderID
FROM t_orderheader
WHERE T_OrderHeaderLabNumber = ?
AND T_OrderHeaderIsActive = 'Y'";
$order = $this->db_onedev->query($sql, array($labnumber))->row_array();
if (!$order) {
echo "Error: Order tidak ditemukan untuk nomor lab {$labnumber}\n";
return;
}
// Get tests that should have locations
$sql = "SELECT DISTINCT
t.T_TestID,
t.T_TestName,
t.T_TestSasCode,
st.T_SampleTypeID,
st.T_SampleTypeName,
b.T_BahanID,
b.T_BahanName,
ss.T_SampleStationID,
ss.T_SampleStationName,
ml.M_LocationID,
ml.M_LocationName,
CASE
WHEN tol.T_OrderLocationID IS NULL THEN 'Missing'
ELSE 'Present'
END as location_status";
// Add additional fields for specific test analysis
if ($test_code) {
$sql .= ", od.T_OrderDetailID,
od.T_OrderDetailIsActive,
t.T_TestIsResult,
t.T_TestIsActive,
ss.T_SampleStationIsActive,
ml.M_LocationIsActive";
}
$sql .= " FROM t_orderdetail od
JOIN t_test t ON od.T_OrderDetailT_TestID = t.T_TestID
JOIN t_sampletype st ON t.T_TestT_SampleTypeID = st.T_SampleTypeID
JOIN t_bahan b ON st.T_SampleTypeT_BahanID = b.T_BahanID
JOIN t_samplestation ss ON b.T_BahanT_SampleStationID = ss.T_SampleStationID
JOIN m_location ml ON ml.M_LocationT_SampleStationID = ss.T_SampleStationID
LEFT JOIN t_order_location tol ON tol.T_OrderLocationT_OrderHeaderID = od.T_OrderDetailT_OrderHeaderID
AND tol.T_OrderLocationT_SampleStationID = ss.T_SampleStationID
AND tol.T_OrderLocationIsActive = 'Y'
WHERE od.T_OrderDetailT_OrderHeaderID = ?
AND od.T_OrderDetailIsActive = 'Y'
AND t.T_TestIsResult = 'Y'
AND t.T_TestIsActive = 'Y'
AND ss.T_SampleStationIsActive = 'Y'
AND ml.M_LocationIsActive = 'Y'";
if ($test_code) {
$sql .= " AND t.T_TestSasCode = ?";
$results = $this->db_onedev->query($sql, array($order['T_OrderHeaderID'], $test_code))->result_array();
} else {
$results = $this->db_onedev->query($sql, array($order['T_OrderHeaderID']))->result_array();
}
if (empty($results)) {
// Hanya ambil pengaturan untuk test_code yang spesifik
$current_settings = "SELECT
oh.T_OrderHeaderLabNumber,
od.T_OrderDetailIsActive as detail_active,
t.T_TestName,
t.T_TestSasCode,
t.T_TestIsResult as test_result,
t.T_TestIsActive as test_active,
st.T_SampleTypeName,
ss.T_SampleStationName,
ss.T_SampleStationIsActive as station_active,
ml.M_LocationName,
ml.M_LocationIsActive as location_active
FROM t_orderheader oh
LEFT JOIN t_orderdetail od ON oh.T_OrderHeaderID = od.T_OrderDetailT_OrderHeaderID
LEFT JOIN t_test t ON od.T_OrderDetailT_TestID = t.T_TestID
LEFT JOIN t_sampletype st ON t.T_TestT_SampleTypeID = st.T_SampleTypeID
LEFT JOIN t_samplestation ss ON st.T_SampleTypeT_BahanID = ss.T_SampleStationID
LEFT JOIN m_location ml ON ml.M_LocationT_SampleStationID = ss.T_SampleStationID
WHERE oh.T_OrderHeaderLabNumber = ?
AND t.T_TestSasCode = ?";
$settings = $this->db_onedev->query($current_settings, array($labnumber, $test_code))->result_array();
echo "";
echo "⚠️ Tidak ditemukan tes yang memerlukan lokasi untuk:
";
echo "Nomor Lab: {$labnumber}
Kode Tes: {$test_code}
";
echo "";
echo "📊 Status Konfigurasi Tes:
";
echo "";
echo "";
echo "Komponen ";
echo "Status ";
echo "Keterangan ";
echo " ";
if (!empty($settings)) {
foreach ($settings as $setting) {
// Test
echo "";
echo "Tes {$setting['T_TestSasCode']} ";
echo "";
echo "Nama: {$setting['T_TestName']}
";
echo "IsResult: " . ($setting['test_result'] == 'Y' ? '✅' : '❌') . "
";
echo "IsActive: " . ($setting['test_active'] == 'Y' ? '✅' : '❌');
echo " ";
echo "";
if ($setting['test_result'] != 'Y') {
echo "Pemeriksaan ini tidak ada hasil (T_TestIsResult = N)
";
echo "";
echo "- Pemeriksaan ini tidak memerlukan pengaturan stasiun sampel dan lokasi
";
echo "- Jika pemeriksaan ini seharusnya memiliki hasil, silakan ke masterdata test untuk mengubah pengaturan T_TestIsResult menjadi Y (ada hasil dicentang)
";
echo "- Hanya pemeriksaan dengan T_TestIsResult = Y (punya hasil) yang memerlukan pengaturan stasiun sampel dan lokasi
";
echo "
";
} elseif ($setting['test_active'] != 'Y') {
echo "Pemeriksaan tidak aktif, perlu mengaktifkan status IsActive";
} else {
echo "Konfigurasi tes sudah benar";
}
echo " ";
echo " ";
// Order Detail
echo "";
echo "Order Detail ";
echo "" .
($setting['detail_active'] == 'Y' ? '✅ Aktif' : '❌ Tidak Aktif') . " ";
echo "" .
($setting['detail_active'] == 'Y' ? 'Order detail sudah benar' : 'Order detail perlu diaktifkan') . " ";
echo " ";
}
} else {
echo "";
echo "❌ Tes dengan kode {$test_code} tidak ditemukan dalam sistem";
echo " ";
}
echo "
";
echo "";
if (!empty($settings) && $settings[0]['test_result'] == 'N') {
echo "";
echo "ℹ️ Informasi Penting
";
echo "Pemeriksaan {$settings[0]['T_TestName']} ({$settings[0]['T_TestSasCode']}) adalah jenis pemeriksaan tanpa hasil.
";
echo "Tindakan yang bisa dilakukan:
";
echo "";
echo "- Jika ini sudah benar (memang tidak perlu hasil), abaikan pesan ini
";
echo "- Jika seharusnya ada hasil, hubungi admin untuk:
";
echo " ";
echo " - Mengubah pengaturan T_TestIsResult menjadi Y (ada hasil dicentang)
";
echo " - Mengatur stasiun sampel yang sesuai (setting sample station sesuai dengan bahan dan jenis sampel)
";
echo " - Mengatur lokasi yang diperlukan (setting location sesuai dengan sample stasiun )
";
echo "
";
echo "
";
echo "";
}
echo "";
return;
}
$line = str_repeat("=", 80) . "\n";
echo $line;
echo " Analysis for Lab Number: {$labnumber}\n";
echo $line;
// Group results by sample station
$stations = array();
foreach ($results as $row) {
$station_key = $row['T_SampleStationID'];
if (!isset($stations[$station_key])) {
$stations[$station_key] = array(
'station_name' => $row['T_SampleStationName'],
'locations' => array(),
'tests' => array()
);
}
// Add location if not already added
$location_key = $row['M_LocationID'];
if (!isset($stations[$station_key]['locations'][$location_key])) {
$stations[$station_key]['locations'][$location_key] = array(
'name' => $row['M_LocationName'],
'status' => $row['location_status']
);
}
// Add test details
$stations[$station_key]['tests'][] = array(
'name' => $row['T_TestName'],
'code' => $row['T_TestSasCode'],
'sample_type' => $row['T_SampleTypeName']
);
}
echo "";
echo "Analisis untuk Nomor Lab: {$labnumber}
";
if ($test_code) {
echo "";
echo "🔍 Analisis Detail untuk Kode Tes: {$test_code}
";
if (empty($results)) {
echo "Tidak ada data ditemukan untuk kode tes {$test_code}. Kemungkinan penyebab:
";
echo "";
echo "- Kode tes tidak ada dalam sistem
";
echo "- Tes tidak aktif (T_TestIsActive = 'N')
";
echo "- Tes tidak dikonfigurasi untuk hasil (T_TestIsResult = 'N')
";
echo "- Detail order tidak aktif (T_OrderDetailIsActive = 'N')
";
echo "
";
} else {
foreach ($results as $row) {
echo "Nama Tes: {$row['T_TestName']}
";
echo "Stasiun Sampel: {$row['T_SampleStationName']}
";
echo "Status Lokasi: " . ($row['location_status'] == 'Present' ? 'Tersedia' : 'Tidak Tersedia') . "
";
if ($row['location_status'] == 'Missing') {
echo "Pemeriksaan Status:
";
echo "";
echo "- Detail Order Aktif: " . ($row['T_OrderDetailIsActive'] == 'Y' ? '✓' : '✗') . "
";
echo "- Tes Memiliki Hasil: " . ($row['T_TestIsResult'] == 'Y' ? '✓' : '✗') . "
";
echo "- Tes Aktif: " . ($row['T_TestIsActive'] == 'Y' ? '✓' : '✗') . "
";
echo "- Stasiun Sampel Aktif: " . ($row['T_SampleStationIsActive'] == 'Y' ? '✓' : '✗') . "
";
echo "- Lokasi Aktif: " . ($row['M_LocationIsActive'] == 'Y' ? '✓' : '✗') . "
";
echo "
";
}
}
}
echo "
";
}
foreach ($stations as $station) {
echo "| 📍 SAMPLE STATION: {$station['station_name']} | ||
|---|---|---|
| 🏢 Locations: "; $location_texts = []; foreach ($station['locations'] as $location) { $status_class = ($location['status'] == 'Present') ? 'status-present' : 'status-missing'; $status_symbol = ($location['status'] == 'Present') ? '✓' : '✗'; $location_texts[] = "[{$status_symbol}] {$location['name']}"; } echo implode(" | ", $location_texts) . " | ||
| Test Name | Code | Type |
| {$test['name']} | {$test['code']} | {$test['sample_type']} |
Total Stasiun Sampel: {$total_stations}
";
echo "Total Lokasi yang Diperlukan: {$total_locations}
";
if ($missing_count > 0) {
echo "Lokasi yang Belum Tersedia: {$missing_count}
";
echo "⚠️ Tindakan Diperlukan: Mohon tetapkan lokasi yang belum tersedia";
} else {
echo "✓ Semua lokasi telah ditetapkan dengan benar";
}
echo "