Files
BE_CPONE/application/controllers/v1/su/Samplinglab.php
2026-04-27 10:26:26 +07:00

284 lines
12 KiB
PHP

<?php
// curl -d '{"station_id":1}' http://sasone.aplikasi.web.id/one-api/v1/su/samplinglab/process
//
class Samplinglab extends MY_Controller
{
public function __construct() {
parent::__construct();
$this->db_smartone = $this->load->database("onedev", true);
}
function list() {
$prm = $this->sys_input;
$station_id = $prm["station_id"];
$start_date = date("Y-m-d 00:00:01");
$end_date = date("Y-m-d 23:59:59");
$sql = "select
concat(M_TitleName,' ',M_PatientName) Name,
fn_numbering_external(T_OrderHeaderLabNumber) Noreg,
case
when T_SamplingQueueLastStatusT_SamplingQueueStatusID is null then 'Tunggu'
when T_SamplingQueueLastStatusT_SamplingQueueStatusID = 1 then 'Panggil'
when T_SamplingQueueLastStatusT_SamplingQueueStatusID = 2 then 'Skip'
end Status
from t_orderheader
join m_patient on M_PatientID = T_OrderHeaderM_PatientID
and T_OrderHeaderIsActive = 'Y'
join m_title on M_TitleID = M_PatientM_TitleID
join t_ordersample on T_OrderSampleT_OrderHeaderID = T_OrderHeaderID
left join t_sampling_queue_last_status
on T_OrderHeaderID = T_SamplingQueueLastStatusT_OrderHeaderID
where ( T_SamplingQueueLastStatusT_SamplingQueueStatusID <= 2 or
T_SamplingQueueLastStatusT_SamplingQueueStatusID is null )
and T_OrderHeaderDate > '$start_date' and T_OrderHeaderDate < '$end_date'
and T_OrderSampleT_SampleStationID = $station_id
group by T_OrderHeaderID
order by T_OrderHeaderIsCito desc, T_OrderHeaderID
";
$qry = $this->db_smartone->query($sql);
if ($qry) {
$rows = $qry->result_array();
$this->sys_ok(
$rows
);
} else {
$this->sys_error_db(
"",
$this->db_smartone
);
}
}
function process() {
$prm = $this->sys_input;
$station_id = $prm["station_id"];
$start_date = date("Y-m-d 00:00:01");
$end_date = date("Y-m-d 23:59:59");
$sql = "select
concat(M_TitleName,' ',M_PatientName) Name,
fn_numbering_external(T_OrderHeaderLabNumber) Noreg,
case
when T_SamplingQueueLastStatusT_SamplingQueueStatusID = 1 then 'Tunggu'
when T_SamplingQueueLastStatusT_SamplingQueueStatusID = 2 then 'Tunggu'
when T_SamplingQueueLastStatusT_SamplingQueueStatusID = 3 then 'Proses'
end Status
from t_sampling_queue_last_status
join t_orderheader on T_SamplingQueueLastStatusT_OrderHeaderID = T_OrderHeaderID
and T_OrderHeaderIsActive = 'Y'
join m_patient on M_PatientID = T_OrderHeaderM_PatientID
join m_title on M_TitleID = M_PatientM_TitleID
where T_SamplingQueueLastStatusT_SamplingQueueStatusID = 3
and T_OrderHeaderDate > '$start_date' and T_OrderHeaderDate < '$end_date'
and T_SamplingQueueLastStatusT_SampleStationID = $station_id
order by T_OrderHeaderIsCito desc, T_OrderHeaderID
";
$qry = $this->db_smartone->query($sql);
if ($qry) {
$rows = $qry->result_array();
$this->sys_ok(
$rows
);
} else {
$this->sys_error_db(
"",
$this->db_smartone
);
}
}
function generate_sample(){
$sql = "SELECT * FROM t_orderheader";
$qry = $this->db_smartone->query($sql);
$datas = $qry->result_array();
if($datas){
foreach ($datas as $key => $value) {
$counter_barcode = 1;
$sql = "SELECT 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_OrderHeaderID = {$value['T_OrderHeaderID']}
group by T_SampleTypeID";
$qry = $this->db_smartone->query($sql);
$data_samples = $qry->result_array();
foreach ($data_samples as $k => $v) {
$lab_no = $v['T_OrderHeaderLabNumber'];
$test_id = $v['T_TestID'];
$sample_id = $v['T_SampleTypeID'];
$sample_code = $v['T_SampleTypeSuffix'];
$barcode = $lab_no.$sample_code;
$isnonlab = $v['T_SampleStationIsNonLab'];
$samplestation_id = $v['T_SampleStationID'];
if( $counter_barcode == 1){
$barcode = $barcode.$counter_barcode;
$sql = "INSERT INTO t_barcodelab(
T_BarcodeLabT_OrderHeaderID,
T_BarcodeLabBarcode,
T_BarcodeLabT_SampleTypeID,
T_BarcodeLabCounter)
VALUES ({$value['T_OrderHeaderID']},'{$barcode}',{$sample_id},{$counter_barcode})";
$this->db_smartone->query($sql);
$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 ({$value['T_OrderHeaderID']},{$sample_id},{$last_id_barcode},'{$barcode}',{$samplestation_id})";
$this->db_smartone->query($sql);
}
}
$sql = "SELECT MAX(T_BarcodeLabCounter) as ctr
FROM t_barcodelab
WHERE T_BarcodeLabT_OrderHeaderID = {$value['T_OrderHeaderID']} AND T_BarcodeLabBarcode LIKE CONCAT('{$barcode}', '%')
AND T_BarcodeLabIsActive = 'Y'";
$qry = $this->db_smartone->query($sql);
if($qry){
$ctr = $qry->row()->ctr;
$counter_barcode = $ctr + 1;
}
}
}
}
echo 'Selesai';
}
function order_station(){
$sql = "SELECT * FROM t_orderheader";
$qry = $this->db_smartone->query($sql);
$datas = $qry->result_array();
if($datas){
foreach ($datas as $key => $value) {
$counter_barcode = 1;
$sql = "SELECT T_SampleStationID,T_SampleStationName
FROM t_orderdetail
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = '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_OrderDetailT_OrderHeaderID = {$value['T_OrderHeaderID']}
GROUP BY T_SampleStationID";
$qry = $this->db_smartone->query($sql);
$data_samples = $qry->result_array();
foreach ($data_samples as $k => $v) {
$sql = "SELECT *
FROM m_location
WHERE
M_LocationT_SampleStationID = {$v['T_SampleStationID']}
ORDER BY M_LocationPriority DESC, M_LocationID ASC
LIMIT 1";
$location_id = $this->db_smartone->query($sql)->row()->M_LocationID;
$sql = "INSERT INTO t_order_location(
T_OrderLocationT_OrderHeaderID,
T_OrderLocationM_LocationID,
T_OrderLocationT_SampleStationID)
VALUES ({$value['T_OrderHeaderID']},{$location_id},{$v['T_SampleStationID']})";
$this->db_smartone->query($sql);
}
}
}
echo 'Selesai';
}
function fisik_umum_generate(){
$sql = " SELECT xsofisik.*, nso.So_ResultEntryID as re_id
FROM so_resultentry nso
JOIN t_orderheader norder ON nso.So_ResultEntryT_OrderHeaderID = T_OrderHeaderID
JOIN xso_resultentry_fisik_umum xsofisik ON xsofisik.T_OrderHeaderLabNumber = norder.T_OrderHeaderLabNumber
WHERE
`So_ResultEntryNonlab_TemplateName` = 'fisik umum' ";
$qry = $this->db_smartone->query($sql);
$datas = $qry->result_array();
if($datas){
foreach ($datas as $key => $value) {
$re_id = $value['re_id'];
$details = json_decode($value['So_ResultEntryFisikUmumDetails'], true);
if($value['So_ResultEntryFisikUmumType'] == 'riwayat' || $value['So_ResultEntryFisikUmumType'] == 'fisik'){
foreach ($details as $k => $v) {
$title = $v['title'];
$sql = " SELECT *
FROM fisik_template
WHERE
`FisikTemplateTitle` = ? AND FisikTemplateIsActive = 'Y' LIMIT 1";
$qry = $this->db_smartone->query($sql,[$title]);
// echo $this->db_smartone->last_query();
$templateID = $qry->row()->FisikTemplateID;
$result = json_encode($v);
$sql = "INSERT INTO so_resultentry_fisik_umum (
So_ResultEntryFisikUmumSo_ResultEntryID,
So_ResultEntryFisikUmumFisikTemplateID,
So_ResultEntryFisikUmumDetails
)
VALUES (?,?,?)";
$this->db_smartone->query($sql,[$re_id,$templateID,$result]);
}
}
}
}
echo 'Selesai';
}
function summarynonlab_generate(){
$sql = " SELECT *
FROM mcu_summarynonlab
JOIN nonlab_conclusion_mapping ON NonlabConclusionMappingNat_TestID = Mcu_SummaryNonlabNat_TestID AND Mcu_SummaryNonlabIsActive = 'Y'
WHERE
`Mcu_SummaryNonlabIsActive` = 'Y' ";
$qry = $this->db_smartone->query($sql);
$datas = $qry->result_array();
if($datas){
foreach ($datas as $key => $value) {
$new_ids = [];
$exp_val = explode(",",$value['Mcu_SummaryNonlabValue']);
foreach ($exp_val as $k => $v) {
$sql = "SELECT NonlabConclusionDetailID
FROM mcu_statusresult_value
JOIN nonlab_conclusion_detail ON NonlabConclusionDetailName = Mcu_StatusResultValueName AND NonlabConclusionDetailNonlabConclusionID = {$value['NonlabConclusionMappingNonlabConclusionID']}
WHERE
Mcu_StatusResultValueCode = '{$v}' AND Mcu_StatusResultValueIsActive = 'Y'";
$qry = $this->db_smartone->query($sql);
$row_id = $qry->row()->NonlabConclusionDetailID;
array_push($new_ids,$row_id);
}
$ids_join = JOIN(",", $new_ids);
$sql ="UPDATE mcu_summarynonlab SET Mcu_SummaryNonlabConclusionDetailIDs = '{$ids_join}'
WHERE Mcu_SummaryNonlabID = {$value['Mcu_SummaryNonlabID']}";
$this->db_smartone->query($sql);
}
}
echo 'Selesai';
}
}
?>