284 lines
12 KiB
PHP
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';
|
|
}
|
|
}
|
|
?>
|