1189 lines
60 KiB
PHP
1189 lines
60 KiB
PHP
<?php
|
|
|
|
class AntrianByStationAndLocation extends MY_Controller
|
|
{
|
|
|
|
|
|
var $IP_SOCKET_IO = "127.0.0.1";
|
|
function __construct()
|
|
{
|
|
parent::__construct();
|
|
/*$this->db_inventory = $this->load->database("inventory", true);
|
|
$this->db_inventory_log = $this->load->database('inventory_log', true);
|
|
$this->db_onex = 'one_aditya';*/
|
|
$this->db_onedev = $this->load->database("onedev", true);
|
|
$this->IP_SOCKET_IO = "127.0.0.1";
|
|
}
|
|
public function cobaBroadcast()
|
|
{
|
|
print_r($this->IP_SOCKET_IO);
|
|
// file_get_contents("https://" . $this->IP_SOCKET_IO . ":9099/broadcast/call");
|
|
file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/call");
|
|
echo file_get_contents("http://" . $this->IP_SOCKET_IO . ":9088/broadcast/call");
|
|
}
|
|
|
|
|
|
|
|
function getAntrian()
|
|
{
|
|
try {
|
|
$prm = $this->sys_input;
|
|
$arrLocationID = array();
|
|
$time = 30;
|
|
if (isset($prm['time'])) {
|
|
$time = trim($prm["time"]);
|
|
}
|
|
if (isset($prm['arrLocationID'])) {
|
|
$arrLocationID = implode(",", $prm["arrLocationID"]);
|
|
}
|
|
$sqlCek = "SELECT M_LocationT_SampleStationID AS stationID,
|
|
M_LocationID AS locationID FROM m_location
|
|
WHERE M_LocationID IN ($arrLocationID)
|
|
AND M_LocationIsActive = 'Y'";
|
|
$qry = $this->db_onedev->query($sqlCek, array());
|
|
if (!$qry) {
|
|
$this->sys_error_db("Error get stationID ", $this->db_onedev);
|
|
exit;
|
|
}
|
|
$arrLocationStation = $qry->result_array();
|
|
$this->db_onedev->trans_start();
|
|
$this->db_onedev->trans_strict(FALSE);
|
|
|
|
$arrServed = array();
|
|
$arrNotServed = array();
|
|
$arrCall = array();
|
|
$Bagian = "";
|
|
foreach ($arrLocationStation as $key => $ls) {
|
|
$locationId = intval($ls['locationID']);
|
|
$stationId = intval($ls['stationID']);
|
|
//Cek snapshot
|
|
$sqlCek = "SELECT * FROM t_orderlocationsampling
|
|
WHERE T_OrderLocationSamplingM_LocationID = ?
|
|
AND T_OrderLocationSamplingT_SamplingStationID = ?";
|
|
$qry = $this->db_onedev->query($sqlCek, array(intval($locationId), intval($stationId)));
|
|
if (!$qry) {
|
|
$this->sys_error_db("cek snapshot error", $this->db_onedev);
|
|
exit;
|
|
}
|
|
$last_qry = "";
|
|
$result = $qry->row_array();
|
|
$arr_location_station = array();
|
|
// print_r($result);
|
|
// exit;
|
|
//apabila snapshot tidak ada
|
|
if (empty($result)) {
|
|
$sql = "SELECT * FROM (
|
|
SELECT 1 as countx,
|
|
T_OrderHeaderDate,
|
|
'N' is_cito,
|
|
'' T_OrderHeaderAddonIsComingDate,
|
|
T_OrderHeaderID AS order_header_id,
|
|
T_OrderHeaderLabNumber AS order_lab_number,
|
|
T_SampleStationID AS station_id,
|
|
T_SampleStationName as station_name,
|
|
M_LocationID as location_id,
|
|
M_LocatioNName as location_name,
|
|
T_OrderHeaderDate AS order_date,
|
|
T_OrderHeaderLabNumber AS queue_number,
|
|
T_OrderHeaderM_PatientID AS patient_id,
|
|
M_PatientName AS patient_name,
|
|
fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status,
|
|
IF(ISNULL(AntrianSampleStationTime),T_OrderHeaderDate,AntrianSampleStationTime) as antri_time,
|
|
IF(ISNULL(AntrianSampleStationTime),T_OrderHeaderDate,AntrianSampleStationTime) as skip_time,
|
|
'N' AS is_clinic
|
|
FROM t_ordersample
|
|
JOIN t_samplestation ON T_OrderSampleT_SampleStationID = T_SampleStationID AND
|
|
T_SampleStationIsActive = 'Y' AND T_SampleStationIsNonLab = '' AND T_SampleStationID= ?
|
|
AND T_OrderSampleIsActive = 'Y' AND T_OrderSampleReceive = 'N'
|
|
JOIN t_orderheader ON T_OrderSampleT_OrderHeaderID = T_OrderHeaderID AND
|
|
DATE(T_OrderHeaderDate) = DATE(Now()) AND T_OrderHeaderIsActive = 'Y'
|
|
JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND
|
|
T_OrderLocationT_SampleStationID = T_SampleStationID AND T_OrderLocationIsActive = 'Y'
|
|
LEFT JOIN antrian_samplestation ON AntrianSampleStationT_OrderLocationID =T_OrderLocationID AND AntrianSampleStationIsActive = 'Y'
|
|
JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND M_LocationID = ?
|
|
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
|
|
|
--- JOIN last_status ON T_OrderHeaderID = Last_StatusT_OrderHeaderID AND ( Last_StatusM_StatusID > 3 OR Last_StatusM_StatusID NOT IN (4,6) )
|
|
LEFT JOIN t_sampling_queue_last_status
|
|
ON T_OrderHeaderID = T_SamplingQueueLastStatusT_OrderHeaderID
|
|
AND T_SamplingQueueLastStatusT_SampleStationID = $stationId
|
|
GROUP BY T_OrderHeaderID,T_samplestationID, M_LocationID
|
|
UNION
|
|
SELECT 1 as countx,T_OrderHeaderDate,
|
|
'' T_OrderHeaderAddonIsComingDate,
|
|
T_OrderHeaderID AS order_header_id,
|
|
T_OrderHeaderLabNumber AS order_lab_number,
|
|
T_SampleStationID AS station_id,
|
|
T_SampleStationName as station_name,
|
|
M_LocationID as location_id,
|
|
M_LocationName as location_name,
|
|
T_OrderHeaderDate AS order_date,
|
|
T_OrderHeaderLabNumber AS queue_number,
|
|
T_OrderHeaderM_PatientID AS patient_id,
|
|
M_PatientName AS patient_name,
|
|
|
|
fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status,
|
|
IF(ISNULL(AntrianSampleStationTime),T_OrderHeaderDate,AntrianSampleStationTime) as antri_time,
|
|
IF(ISNULL(AntrianSampleStationTime),T_OrderHeaderDate,AntrianSampleStationTime) as skip_time,
|
|
'N' AS is_clinic
|
|
FROM t_orderdetail
|
|
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderIsActive = 'Y'
|
|
|
|
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
|
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
|
|
JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID AND T_SampleTypeIsActive = 'Y'
|
|
JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID AND T_BahanIsActive = 'Y'
|
|
JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND
|
|
T_SampleStationIsActive = 'Y' AND
|
|
T_SampleStationIsNonLab <> '' AND T_SampleStationID = ?
|
|
JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND T_OrderLocationT_SampleStationID = T_SampleStationID AND T_OrderLocationIsActive = 'Y'
|
|
LEFT JOIN antrian_samplestation ON AntrianSampleStationT_OrderLocationID =T_OrderLocationID AND AntrianSampleStationIsActive = 'Y'
|
|
JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND M_LocationID = ?
|
|
LEFT JOIN t_samplingso ON T_OrderDetailT_OrderHeaderID = T_SamplingSoT_OrderHeaderID AND
|
|
T_OrderDetailT_TestID = T_SamplingSoT_TestID AND
|
|
T_SamplingSoT_SampleStationID = T_SampleStationID
|
|
WHERE DATE(T_OrderHeaderDate) = DATE(Now()) AND
|
|
T_OrderDetailIsActive = 'Y' AND
|
|
(ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X')
|
|
GROUP BY T_OrderHeaderID,T_samplestationID, M_LocationID
|
|
) tbl
|
|
ORDER BY antri_time ASC";
|
|
$query = $this->db_onedev->query($sql, array(
|
|
intval($stationId),
|
|
intval($locationId),
|
|
intval($stationId),
|
|
intval($locationId),
|
|
));
|
|
$last_qry = $this->db_onedev->last_query();
|
|
if ($query) {
|
|
$rows = $query->result_array();
|
|
|
|
foreach ($rows as $key => $value) {
|
|
if (count($arr_location_station) == 0)
|
|
|
|
$arr_location_station = array(
|
|
'station_id' => $value['station_id'],
|
|
'station_name' => $value['station_name'],
|
|
'location_id' => $value['location_id'],
|
|
'location_name' => $value['location_name'],
|
|
'antri_time' => $value['antri_time'],
|
|
'skip_time' => $value['skip_time'],
|
|
'Keterangan' => 'snapshow empty & get data & insert snapshot'
|
|
|
|
);
|
|
else {
|
|
$is_exist = false;
|
|
|
|
foreach ($arr_location_station as $k => $v) {
|
|
// if ($value['is_clinic'] == "Y") {
|
|
// if (100 == intval($value['station_id']) && $v['location_id'] == $value['location_id']) {
|
|
// $is_exist = true;
|
|
// }
|
|
// } else {
|
|
if ($v['station_id'] == $value['station_id'] && $v['location_id'] == $value['location_id']) {
|
|
$is_exist = true;
|
|
}
|
|
// }
|
|
}
|
|
if (!$is_exist)
|
|
$arr_location_station = array(
|
|
'station_id' => $value['station_id'],
|
|
'station_name' => $value['station_name'],
|
|
'location_id' => $value['location_id'],
|
|
'location_name' => $value['location_name'],
|
|
'antri_time' => $value['antri_time'],
|
|
'skip_time' => $value['skip_time'],
|
|
'Keterangan' => 'snapshow empty & get data & insert snapshot'
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$results = [];
|
|
foreach ($rows as $ky => $vy) {
|
|
// if ($vy['is_clinic'] == "Y") {
|
|
// if (100 == $vy['station_id'] && intval($locationId) == $vy['location_id']) {
|
|
// $results[] = $vy;
|
|
// }
|
|
// } else {
|
|
if (intval($stationId) == $vy['station_id'] && intval($locationId) == $vy['location_id']) {
|
|
$results[] = $vy;
|
|
}
|
|
// }
|
|
}
|
|
|
|
$count_all_queue = count($results);
|
|
$arr_process_queue = [];
|
|
$arr_waiting_queue = [];
|
|
$arr_call_queue = [];
|
|
foreach ($results as $key => $value) {
|
|
if ($value['status'] == 'Process') {
|
|
$arr_process_queue[] = $value;
|
|
} else if ($value['status'] == 'Call') {
|
|
$arr_call_queue[] = $value;
|
|
} else {
|
|
$arr_waiting_queue[] = $value;
|
|
}
|
|
}
|
|
$count_process = count($arr_process_queue);
|
|
$count_waiting = count($arr_waiting_queue);
|
|
$arr_location_station['count_all_queue'] = $count_all_queue;
|
|
$arr_location_station['count_process'] = $count_process;
|
|
$arr_location_station['count_waiting'] = $count_waiting;
|
|
$arr_location_station['details_waiting'] = $arr_waiting_queue;
|
|
$arr_location_station['details_process'] = $arr_process_queue;
|
|
$arr_location_station['details_call'] = $arr_call_queue;
|
|
|
|
|
|
if (count($arrNotServed) > 0) {
|
|
$idCollect = array();
|
|
foreach ($arrNotServed as $key1 => $i) {
|
|
$idCollect[] = $i['order_header_id'];
|
|
}
|
|
|
|
foreach ($arr_waiting_queue as $key1 => $i) {
|
|
|
|
if (!in_array(
|
|
$i['order_header_id'],
|
|
$idCollect
|
|
)) {
|
|
$arrNotServed[] = $i;
|
|
}
|
|
}
|
|
} else {
|
|
$arrNotServed = $arr_waiting_queue;
|
|
}
|
|
|
|
if (count($arrCall) > 0) {
|
|
$idCollect = array();
|
|
foreach ($arrCall as $key1 => $i) {
|
|
$idCollect[] = $i['order_header_id'];
|
|
}
|
|
|
|
foreach ($arr_call_queue as $key1 => $i) {
|
|
|
|
if (!in_array(
|
|
$i['order_header_id'],
|
|
$idCollect
|
|
)) {
|
|
$arrCall[] = $i;
|
|
}
|
|
}
|
|
} else {
|
|
$arrCall = $arr_call_queue;
|
|
}
|
|
|
|
if (count($arrServed) > 0) {
|
|
$idCollect = array();
|
|
foreach ($arrServed as $key1 => $i) {
|
|
$idCollect[] = $i['order_header_id'];
|
|
}
|
|
|
|
foreach ($arr_process_queue as $key1 => $i) {
|
|
|
|
if (!in_array(
|
|
$i['order_header_id'],
|
|
$idCollect
|
|
)) {
|
|
$arrServed[] = $i;
|
|
}
|
|
}
|
|
} else {
|
|
$arrServed = $arr_process_queue;
|
|
}
|
|
$bagian = "snapshot tidak ada query data dan input snapshot lalu return";
|
|
//insert into snapshot
|
|
$sqlInsert = "INSERT INTO t_orderlocationsampling
|
|
(T_OrderLocationSamplingM_LocationID,
|
|
T_OrderLocationSamplingT_SamplingStationID,
|
|
T_OrderLocationSamplingTotal,
|
|
T_OrderLocationSamplingTotalProcess,
|
|
T_OrderLocationSamplingTotalWaiting,
|
|
T_OrderLocationSamplingJSON,
|
|
T_OrderLocationSamplingLastUpdated)
|
|
VALUES (?,?,?,?,?,?,NOW())";
|
|
|
|
$qry = $this->db_onedev->query($sqlInsert, array(
|
|
intval($locationId),
|
|
intval($stationId),
|
|
intval($count_all_queue),
|
|
intval($count_process),
|
|
intval($count_waiting),
|
|
json_encode($arr_location_station)
|
|
));
|
|
|
|
if (!$qry) {
|
|
$this->sys_error_db("Insert snapshot error", $this->db_onedev);
|
|
exit;
|
|
}
|
|
|
|
$this->db_onedev->trans_complete();
|
|
//echo $this->db_onedev->last_query();
|
|
} else {
|
|
$this->sys_error_db("get data error", $this->db_onedev);
|
|
exit;
|
|
}
|
|
//apabila snapshot tidak kosong
|
|
} elseif (!empty($result)) {
|
|
$last_update = $result['T_OrderLocationSamplingLastUpdated'];
|
|
$time_before = strtotime($last_update);
|
|
$time_now = strtotime(date("Y-m-d H:i:s"));
|
|
$gap = $time_now - $time_before;
|
|
//gap lebih besar dari time akan query ulang dan update snapshot
|
|
if ($gap > $time) {
|
|
$sql = "SELECT * FROM (
|
|
SELECT 1 as countx,T_OrderHeaderDate,
|
|
'' T_OrderHeaderAddonIsComingDate,
|
|
T_OrderHeaderID AS order_header_id,
|
|
T_OrderHeaderLabNumber AS order_lab_number,
|
|
T_SampleStationID AS station_id,
|
|
T_SampleStationName as station_name,
|
|
M_LocationID as location_id,
|
|
M_LocatioNName as location_name,
|
|
T_OrderHeaderDate AS order_date,
|
|
T_OrderHeaderLabNumber AS queue_number,
|
|
T_OrderHeaderM_PatientID AS patient_id,
|
|
M_PatientName AS patient_name,
|
|
|
|
fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status,
|
|
IF(ISNULL(AntrianSampleStationTime),T_OrderHeaderDate,AntrianSampleStationTime) as antri_time,
|
|
IF(ISNULL(AntrianSampleStationTime),T_OrderHeaderDate,AntrianSampleStationTime) as skip_time,
|
|
'N' AS is_clinic
|
|
FROM t_ordersample
|
|
JOIN t_samplestation ON T_OrderSampleT_SampleStationID = T_SampleStationID AND
|
|
T_SampleStationIsActive = 'Y' AND T_SampleStationIsNonLab = '' AND T_SampleStationID= ?
|
|
AND T_OrderSampleIsActive = 'Y' AND T_OrderSampleReceive = 'N'
|
|
JOIN t_orderheader ON T_OrderSampleT_OrderHeaderID = T_OrderHeaderID AND
|
|
DATE(T_OrderHeaderDate) = DATE(Now()) AND T_OrderHeaderIsActive = 'Y'
|
|
JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND
|
|
T_OrderLocationT_SampleStationID = T_SampleStationID AND T_OrderLocationIsActive = 'Y'
|
|
LEFT JOIN antrian_samplestation ON AntrianSampleStationT_OrderLocationID =T_OrderLocationID AND AntrianSampleStationIsActive = 'Y'
|
|
JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND M_LocationID = ?
|
|
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
|
|
|
-- JOIN last_status ON T_OrderHeaderID = Last_StatusT_OrderHeaderID AND ( Last_StatusM_StatusID > 3 OR Last_StatusM_StatusID NOT IN (4,6) )
|
|
LEFT JOIN t_sampling_queue_last_status
|
|
ON T_OrderHeaderID = T_SamplingQueueLastStatusT_OrderHeaderID
|
|
AND T_SamplingQueueLastStatusT_SampleStationID = $stationId
|
|
|
|
GROUP BY T_OrderHeaderID,T_samplestationID, M_LocationID
|
|
UNION
|
|
SELECT 1 as countx,T_OrderHeaderDate,
|
|
'' T_OrderHeaderAddonIsComingDate,
|
|
T_OrderHeaderID AS order_header_id,
|
|
T_OrderHeaderLabNumber AS order_lab_number,
|
|
T_SampleStationID AS station_id,
|
|
T_SampleStationName as station_name,
|
|
M_LocationID as location_id,
|
|
M_LocationName as location_name,
|
|
T_OrderHeaderDate AS order_date,
|
|
T_OrderHeaderLabNumber AS queue_number,
|
|
T_OrderHeaderM_PatientID AS patient_id,
|
|
M_PatientName AS patient_name,
|
|
|
|
fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status,
|
|
IF(ISNULL(AntrianSampleStationTime),T_OrderHeaderDate,AntrianSampleStationTime) as antri_time,
|
|
IF(ISNULL(AntrianSampleStationTime),T_OrderHeaderDate,AntrianSampleStationTime) as skip_time,
|
|
'N' AS is_clinic
|
|
FROM t_orderdetail
|
|
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderIsActive = 'Y'
|
|
|
|
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
|
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
|
|
JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID AND T_SampleTypeIsActive = 'Y'
|
|
JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID AND T_BahanIsActive = 'Y'
|
|
JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND
|
|
T_SampleStationIsActive = 'Y' AND
|
|
T_SampleStationIsNonLab <> '' AND T_SampleStationID = ?
|
|
JOIN t_order_location ON T_OrderLocationT_OrderHeaderID = T_OrderHeaderID AND T_OrderLocationT_SampleStationID = T_SampleStationID AND T_OrderLocationIsActive = 'Y'
|
|
LEFT JOIN antrian_samplestation ON AntrianSampleStationT_OrderLocationID =T_OrderLocationID AND AntrianSampleStationIsActive = 'Y'
|
|
JOIN m_location ON T_OrderLocationM_LocationID = M_LocationID AND M_LocationID = ?
|
|
LEFT JOIN t_samplingso ON T_OrderDetailT_OrderHeaderID = T_SamplingSoT_OrderHeaderID AND
|
|
T_OrderDetailT_TestID = T_SamplingSoT_TestID AND
|
|
T_SamplingSoT_SampleStationID = T_SampleStationID
|
|
WHERE DATE(T_OrderHeaderDate) = DATE(Now()) AND
|
|
T_OrderDetailIsActive = 'Y' AND
|
|
(ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X')
|
|
GROUP BY T_OrderHeaderID,T_samplestationID, M_LocationID
|
|
) tbl
|
|
ORDER BY antri_time ASC";
|
|
$query = $this->db_onedev->query($sql, array(
|
|
intval($stationId),
|
|
intval($locationId),
|
|
intval($stationId),
|
|
intval($locationId),
|
|
));
|
|
$last_qry = $this->db_onedev->last_query();
|
|
if ($query) {
|
|
$rows = $query->result_array();
|
|
|
|
foreach ($rows as $key => $value) {
|
|
if (count($arr_location_station) == 0)
|
|
$arr_location_station = array(
|
|
'station_id' => $value['station_id'],
|
|
'station_name' => $value['station_name'],
|
|
'location_id' => $value['location_id'],
|
|
'location_name' => $value['location_name'],
|
|
'antri_time' => $value['antri_time'],
|
|
'skip_time' => $value['skip_time'],
|
|
|
|
);
|
|
else {
|
|
$is_exist = false;
|
|
foreach ($arr_location_station as $k => $v) {
|
|
if ($v['station_id'] == $value['station_id'] && $v['location_id'] == $value['location_id']) {
|
|
$is_exist = true;
|
|
}
|
|
}
|
|
if (!$is_exist)
|
|
$arr_location_station = array(
|
|
'station_id' => $value['station_id'],
|
|
'station_name' => $value['station_name'],
|
|
'location_id' => $value['location_id'],
|
|
'location_name' => $value['location_name'],
|
|
'antri_time' => $value['antri_time'],
|
|
'skip_time' => $value['skip_time'],
|
|
'Keterangan' => 'snapshot not empty & get data (more than' . $time . ') & update snapshot'
|
|
|
|
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$results = [];
|
|
foreach ($rows as $ky => $vy) {
|
|
if (intval($stationId) == $vy['station_id'] && intval($locationId) == $vy['location_id']) {
|
|
$results[] = $vy;
|
|
}
|
|
}
|
|
|
|
$count_all_queue = count($results);
|
|
$arr_process_queue = [];
|
|
$arr_waiting_queue = [];
|
|
$arr_call_queue = [];
|
|
foreach ($results as $key => $value) {
|
|
if ($value['status'] == 'Process') {
|
|
$arr_process_queue[] = $value;
|
|
} else if ($value['status'] == 'Call') {
|
|
$arr_call_queue[] = $value;
|
|
} else {
|
|
$arr_waiting_queue[] = $value;
|
|
}
|
|
}
|
|
$count_process = count($arr_process_queue);
|
|
$count_waiting = count($arr_waiting_queue);
|
|
$arr_location_station['count_all_queue'] = $count_all_queue;
|
|
$arr_location_station['count_process'] = $count_process;
|
|
$arr_location_station['count_waiting'] = $count_waiting;
|
|
$arr_location_station['details_waiting'] = $arr_waiting_queue;
|
|
$arr_location_station['details_process'] = $arr_process_queue;
|
|
$arr_location_station['details_call'] = $arr_call_queue;
|
|
|
|
if (count($arrNotServed) > 0) {
|
|
$idCollect = array();
|
|
foreach ($arrNotServed as $key1 => $i) {
|
|
$idCollect[] = $i['order_header_id'];
|
|
}
|
|
|
|
foreach ($arr_waiting_queue as $key1 => $i) {
|
|
|
|
if (!in_array(
|
|
$i['order_header_id'],
|
|
$idCollect
|
|
)) {
|
|
$arrNotServed[] = $i;
|
|
}
|
|
}
|
|
} else {
|
|
$arrNotServed = $arr_waiting_queue;
|
|
}
|
|
|
|
if (count($arrCall) > 0) {
|
|
$idCollect = array();
|
|
foreach ($arrCall as $key1 => $i) {
|
|
$idCollect[] = $i['order_header_id'];
|
|
}
|
|
|
|
foreach ($arr_call_queue as $key1 => $i) {
|
|
|
|
if (!in_array(
|
|
$i['order_header_id'],
|
|
$idCollect
|
|
)) {
|
|
$arrCall[] = $i;
|
|
}
|
|
}
|
|
} else {
|
|
$arrCall = $arr_call_queue;
|
|
}
|
|
|
|
if (count($arrServed) > 0) {
|
|
$idCollect = array();
|
|
foreach ($arrServed as $key1 => $i) {
|
|
$idCollect[] = $i['order_header_id'];
|
|
}
|
|
|
|
foreach ($arr_process_queue as $key1 => $i) {
|
|
|
|
if (!in_array(
|
|
$i['order_header_id'],
|
|
$idCollect
|
|
)) {
|
|
$arrServed[] = $i;
|
|
}
|
|
}
|
|
} else {
|
|
$arrServed = $arr_process_queue;
|
|
}
|
|
$bagian = "snapshot ada gap > time query ulang dan update snapshoot";
|
|
$sqlInsert = "UPDATE t_orderlocationsampling
|
|
SET T_OrderLocationSamplingTotal = ?,
|
|
T_OrderLocationSamplingTotalProcess = ?,
|
|
T_OrderLocationSamplingTotalWaiting = ?,
|
|
T_OrderLocationSamplingJSON = ?,
|
|
T_OrderLocationSamplingLastUpdated = NOW()
|
|
WHERE T_OrderLocationSamplingM_LocationID = ?
|
|
AND T_OrderLocationSamplingT_SamplingStationID = ?";
|
|
|
|
$qry = $this->db_onedev->query($sqlInsert, array(
|
|
intval($count_all_queue),
|
|
intval($count_process),
|
|
intval($count_waiting),
|
|
json_encode($arr_location_station),
|
|
intval($locationId),
|
|
intval($stationId)
|
|
));
|
|
|
|
if (!$qry) {
|
|
$this->sys_error_db("Insert snapshot error", $this->db_onedev);
|
|
exit;
|
|
}
|
|
|
|
$this->db_onedev->trans_complete();
|
|
//echo $this->db_onedev->last_query();
|
|
|
|
} else {
|
|
$this->sys_error_db("get data error", $this->db_onedev);
|
|
exit;
|
|
}
|
|
//gap lebiih kecil dari time maka return adalah isi snapshot
|
|
} else {
|
|
$arr_location_station = (array)json_decode($result['T_OrderLocationSamplingJSON']);
|
|
|
|
$arr_waiting = (array)$arr_location_station['details_waiting'];
|
|
$arr_process = (array)$arr_location_station['details_process'];
|
|
$arr_call = (array)$arr_location_station['details_call'];
|
|
if (count($arrNotServed) > 0) {
|
|
$idCollect = array();
|
|
foreach ($arrNotServed as $key => $i) {
|
|
$arr = (array) $i;
|
|
$idCollect[] = $arr['order_header_id'];
|
|
}
|
|
|
|
foreach ($arr_waiting as $key1 => $i) {
|
|
$arr = (array) $i;
|
|
if (!in_array(
|
|
$arr['order_header_id'],
|
|
$idCollect
|
|
)) {
|
|
if ($arr['status'] == 'Call') {
|
|
$arrCall[] = $arr;
|
|
} else {
|
|
$arrNotServed[] = $arr;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
foreach ($arr_waiting as $key => $value) {
|
|
$arr = (array)$value;
|
|
$arrNotServed[] = $arr;
|
|
}
|
|
}
|
|
|
|
if (count($arrServed) > 0) {
|
|
$idCollect = array();
|
|
foreach ($arrServed as $key => $i) {
|
|
$arr = (array) $i;
|
|
$idCollect[] = $arr['order_header_id'];
|
|
}
|
|
|
|
foreach ($arr_process as $key1 => $i) {
|
|
$arr = (array) $i;
|
|
if (!in_array(
|
|
$arr['order_header_id'],
|
|
$idCollect
|
|
)) {
|
|
$arrServed[] = $arr;
|
|
}
|
|
}
|
|
} else {
|
|
foreach ($arr_process as $key => $value) {
|
|
$arr = (array)$value;
|
|
$arrServed[] = $arr;
|
|
}
|
|
}
|
|
|
|
if (count($arrCall) > 0) {
|
|
$idCollect = array();
|
|
foreach ($arrCall as $key => $i) {
|
|
$arr = (array) $i;
|
|
$idCollect[] = $arr['order_header_id'];
|
|
}
|
|
|
|
foreach ($arr_call as $key1 => $i) {
|
|
$arr = (array) $i;
|
|
if (!in_array(
|
|
$arr['order_header_id'],
|
|
$idCollect
|
|
)) {
|
|
$arrCall[] = $arr;
|
|
}
|
|
}
|
|
} else {
|
|
foreach ($arr_call as $key => $value) {
|
|
$arr = (array)$value;
|
|
$arrCall[] = $arr;
|
|
}
|
|
}
|
|
|
|
$bagian = "snapshot ada gap < time tidak query ulang hanya ambil snapshoot";
|
|
// $arr_location_station->Keterangan = 'snapshot not empty & not get data (less than' . $time . ') & not update snapshot';
|
|
}
|
|
}
|
|
}
|
|
|
|
usort($arrServed, function ($item1, $item2) {
|
|
return $item1['order_date'] <=> $item2['order_date'];
|
|
});
|
|
usort($arrNotServed, function ($item1, $item2) {
|
|
$status1 = 0;
|
|
$status2 = 0;
|
|
if ($item1['status'] == 'Skip') {
|
|
$status1 = 1;
|
|
}
|
|
if ($item2['status'] == 'Skip') {
|
|
$status2 = 1;
|
|
}
|
|
return ($status1 <=> $status2) * 10 + ($item1['order_date'] <=> $item2['order_date']);
|
|
});
|
|
// usort($arrNotServed, function ($item1, $item2) {
|
|
// return $item1['order_date'] <=> $item2['order_date'];
|
|
// });
|
|
|
|
$data = array(
|
|
"bagian" => $bagian,
|
|
"call" => $arrCall,
|
|
"served" => $arrServed,
|
|
"notServed" => $arrNotServed,
|
|
"last_query" => $last_qry
|
|
|
|
);
|
|
$this->sys_ok($data);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
function coba()
|
|
{
|
|
try {
|
|
$prm = $this->sys_input;
|
|
$arrStationID = array();
|
|
print_r($prm);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
function getAntrianV2()
|
|
{
|
|
try {
|
|
$prm = $this->sys_input;
|
|
$arrStationID = array();
|
|
// print_r($prm);
|
|
|
|
|
|
if (isset($prm['arrStationID'])) {
|
|
$arrStationID = explode(",", $prm["arrStationID"]);
|
|
}
|
|
$onSite = $prm['onSite'];
|
|
$branchID = $prm['branchID'];
|
|
$setupID = $prm['setupID'];
|
|
$qryMgmMcu = '';
|
|
if ($onSite == 'N') {
|
|
$qryMgmMcu = " AND T_OrderHeaderMgm_McuID IN (SELECT Mgm_McuID FROM mgm_mcu WHERE Mgm_McuM_BranchID = '100' AND Mgm_McuIsActive= 'Y')";
|
|
} else {
|
|
$qryMgmMcu = "AND T_OrderHeaderMgm_McuID = $setupID";
|
|
}
|
|
$result = array();
|
|
// print_r($setupID);
|
|
// print_r($arrStationID);
|
|
foreach ($arrStationID as $key => $stationID) {
|
|
|
|
$sql = "SELECT
|
|
T_SampleStationID stationID,
|
|
T_SampleStationIsAdditionalFisik stationIsAdditionalFisik,
|
|
T_SampleStationOrder stationOrder,
|
|
T_SampleStationCode stationCode,
|
|
T_SampleStationName stationName,
|
|
T_SampleStationNat_GroupID stationNatGroupID,
|
|
T_SampleStationIsNonLab stationIsNonLab
|
|
FROM t_samplestation
|
|
WHERE T_SampleStationIsActive = 'Y'
|
|
AND T_SampleStationID = $stationID
|
|
ORDER BY T_SampleStationOrder ";
|
|
$qry = $this->db_onedev->query(
|
|
$sql
|
|
);
|
|
|
|
if (!$qry) {
|
|
$this->sys_error_db("Error select branch", $this->db_onedev);
|
|
exit;
|
|
}
|
|
$station = $qry->row_array();
|
|
|
|
$sql = "SELECT * FROM (
|
|
SELECT 1 as countx,
|
|
T_OrderHeaderDate,
|
|
T_OrderHeaderID AS order_header_id,
|
|
PreregisterAntrianNumber AS order_lab_number,
|
|
T_SampleStationID AS station_id,
|
|
T_SampleStationName as station_name,
|
|
T_OrderHeaderDate AS order_date,
|
|
T_OrderHeaderMgm_McuID as mgmMcuID,
|
|
T_OrderHeaderM_BranchID as branchID,
|
|
PreregisterAntrianNumber AS queue_number,
|
|
T_OrderHeaderLabNumber AS queuelab_number,
|
|
T_OrderHeaderM_PatientID AS patient_id,
|
|
M_PatientName AS patient_name,
|
|
fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status,
|
|
IF(ISNULL(AntrianSampleStationTime),T_OrderHeaderDate,AntrianSampleStationTime) as antri_time,
|
|
IF(ISNULL(AntrianSampleStationTime),T_OrderHeaderDate,AntrianSampleStationTime) as skip_time
|
|
FROM t_ordersample
|
|
JOIN t_samplestation ON T_OrderSampleT_SampleStationID = T_SampleStationID AND
|
|
T_SampleStationIsActive = 'Y' AND T_SampleStationIsNonLab = '' AND T_SampleStationID= $stationID
|
|
AND T_OrderSampleIsActive = 'Y' AND T_OrderSampleReceive = 'N'
|
|
JOIN t_orderheader ON T_OrderSampleT_OrderHeaderID = T_OrderHeaderID
|
|
AND DATE(T_OrderHeaderDate) = DATE(Now())
|
|
$qryMgmMcu
|
|
AND T_OrderHeaderM_BranchID = $branchID
|
|
AND T_OrderHeaderIsActive = 'Y'
|
|
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
|
LEFT JOIN t_sampling_queue_last_status
|
|
ON T_OrderHeaderID = T_SamplingQueueLastStatusT_OrderHeaderID
|
|
AND T_SamplingQueueLastStatusT_SampleStationID = $stationID
|
|
JOIN mcu_preregister_patients ON T_OrderHeaderID = Mcu_PreregisterPatientsT_OrderHeaderID
|
|
LEFT JOIN preregister_antrian ON Mcu_PreregisterPatientsID = PreregisterAntrianMcu_PreregisterPatientsID
|
|
LEFT JOIN antrian_samplestation ON T_OrderHeaderID = AntrianSampleStationOrderID
|
|
AND AntrianSampleStationIsActive = 'Y' AND AntrianSampleStationT_SampleStationID = $stationID
|
|
GROUP BY T_OrderHeaderID,T_samplestationID
|
|
UNION
|
|
SELECT 1 as countx,T_OrderHeaderDate,
|
|
T_OrderHeaderID AS order_header_id,
|
|
PreregisterAntrianNumber AS order_lab_number,
|
|
T_SampleStationID AS station_id,
|
|
T_SampleStationName as station_name,
|
|
T_OrderHeaderDate AS order_date,
|
|
T_OrderHeaderMgm_McuID as mgmMcuID,
|
|
T_OrderHeaderM_BranchID as branchID,
|
|
PreregisterAntrianNumber AS queue_number,
|
|
T_OrderHeaderLabNumber AS queuelab_number,
|
|
T_OrderHeaderM_PatientID AS patient_id,
|
|
M_PatientName AS patient_name,
|
|
fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status,
|
|
IF(ISNULL(AntrianSampleStationTime),T_OrderHeaderDate,AntrianSampleStationTime) as antri_time,
|
|
IF(ISNULL(AntrianSampleStationTime),T_OrderHeaderDate,AntrianSampleStationTime) as skip_time
|
|
FROM t_orderdetail
|
|
JOIN t_orderheader ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderIsActive = 'Y'
|
|
AND DATE(T_OrderHeaderDate) = DATE(Now())
|
|
$qryMgmMcu
|
|
AND T_OrderHeaderM_BranchID = $branchID
|
|
AND T_OrderDetailIsActive = 'Y'
|
|
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
|
|
JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID AND T_SampleTypeIsActive = 'Y'
|
|
JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID AND T_BahanIsActive = 'Y'
|
|
JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID AND
|
|
T_SampleStationIsActive = 'Y' AND
|
|
T_SampleStationIsNonLab <> '' AND T_SampleStationID = $stationID
|
|
JOIN m_patient
|
|
ON T_OrderHeaderM_PatientID = M_PatientID AND M_PatientIsActive = 'Y'
|
|
LEFT JOIN t_samplingso ON T_OrderDetailT_OrderHeaderID = T_SamplingSoT_OrderHeaderID AND
|
|
T_OrderDetailT_TestID = T_SamplingSoT_TestID AND
|
|
T_SamplingSoT_SampleStationID = T_SampleStationID
|
|
AND(ISNULL(T_SamplingSoID) OR T_SamplingSoFlag = 'P' OR T_SamplingSoFlag = 'X')
|
|
JOIN mcu_preregister_patients ON T_OrderHeaderID = Mcu_PreregisterPatientsT_OrderHeaderID
|
|
LEFT JOIN preregister_antrian ON Mcu_PreregisterPatientsID = PreregisterAntrianMcu_PreregisterPatientsID
|
|
LEFT JOIN antrian_samplestation ON T_OrderHeaderID = AntrianSampleStationOrderID
|
|
AND AntrianSampleStationIsActive = 'Y' AND AntrianSampleStationT_SampleStationID = $stationID
|
|
GROUP BY T_OrderHeaderID,T_samplestationID
|
|
) tbl
|
|
ORDER BY antri_time ASC";
|
|
$qry = $this->db_onedev->query(
|
|
$sql
|
|
);
|
|
|
|
|
|
if (!$qry) {
|
|
$this->sys_error_db("Error get antrian", $this->db_onedev);
|
|
exit;
|
|
}
|
|
// print_r("qry");
|
|
// print_r($this->db_onedev->last_query());
|
|
$process = array();
|
|
$waiting = array();
|
|
$call = array();
|
|
$queue = $qry->result_array();
|
|
// print_r($queue);
|
|
foreach ($queue as $row) {
|
|
if ($row['status'] == 'New' || $row['status'] == 'Skip') {
|
|
$waiting[] = $row;
|
|
}
|
|
if ($row['status'] == 'Call') {
|
|
if (count($process) == 0) {
|
|
# code...
|
|
$process[] = $row;
|
|
} else {
|
|
$process[0]['order_lab_number'] = $process[0]['order_lab_number'] . ', ' . $row['order_lab_number'];
|
|
$process[0]['patient_name'] = $process[0]['patient_name'] . ', ' . $row['patient_name'];
|
|
}
|
|
}
|
|
if ($row['status'] == 'Process') {
|
|
if (count($process) == 0) {
|
|
# code...
|
|
$process[] = $row;
|
|
} else {
|
|
$process[0]['order_lab_number'] = $process[0]['order_lab_number'] . ', ' . $row['order_lab_number'];
|
|
$process[0]['patient_name'] = $process[0]['patient_name'] . ', ' . $row['patient_name'];
|
|
}
|
|
}
|
|
}
|
|
if (count($process) == 0) {
|
|
$data = array(
|
|
"countx" => "1",
|
|
"T_OrderHeaderDate" => "2025-01-02 08:33:27",
|
|
"order_header_id" => "20429",
|
|
"order_lab_number" => "-",
|
|
"station_id" => "7",
|
|
"station_name" => "Sample Station Pemeriksaan Fisik",
|
|
"order_date" => "2025-01-02 08:33:27",
|
|
"mgmMcuID" => "61",
|
|
"branchID" => "3",
|
|
"queue_number" => "-",
|
|
"patient_id" => "5776",
|
|
"patient_name" => "-",
|
|
"status" => "Process",
|
|
"antri_time" => "2025-01-02 08:33:27",
|
|
"skip_time" => "2025-01-02 08:33:27"
|
|
);
|
|
$process[] = $data;
|
|
}
|
|
$data = array(
|
|
'stationID' => $stationID,
|
|
'stationName' => $station['stationName'],
|
|
'process' => $process,
|
|
'waiting' => $waiting,
|
|
'call' => $call
|
|
);
|
|
$result[] = $data;
|
|
}
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
function getSampleStation()
|
|
{
|
|
try {
|
|
$sql = "SELECT * FROM t_samplestation WHERE T_SampleStationIsActive = 'Y'";
|
|
$qry = $this->db_onedev->query(
|
|
$sql
|
|
);
|
|
|
|
if (!$qry) {
|
|
$this->sys_error_db("Error select sample station", $this->db_onedev);
|
|
exit;
|
|
}
|
|
$data = array(
|
|
"records" => $qry->result_array()
|
|
);
|
|
$this->sys_ok($data);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
|
|
function getLocationName()
|
|
{
|
|
try {
|
|
$sql = "SELECT m_location.*, T_SampleStationName
|
|
FROM m_location
|
|
JOIN t_samplestation ON M_LocationT_SampleStationID = T_SampleStationID
|
|
AND T_SampleStationIsActive = 'Y'
|
|
WHERE M_LocationIsActive = 'Y'
|
|
ORDER BY M_LocationPriority DESC";
|
|
$qry = $this->db_onedev->query(
|
|
$sql
|
|
);
|
|
|
|
if (!$qry) {
|
|
$this->sys_error_db("Error select location", $this->db_onedev);
|
|
exit;
|
|
}
|
|
$data = array(
|
|
"records" => $qry->result_array()
|
|
);
|
|
$this->sys_ok($data);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
function getBranch()
|
|
{
|
|
try {
|
|
$sql = "SELECT
|
|
*
|
|
FROM m_branch
|
|
WHERE M_BranchIsActive = 'Y'";
|
|
$qry = $this->db_onedev->query(
|
|
$sql
|
|
);
|
|
|
|
if (!$qry) {
|
|
$this->sys_error_db("Error select branch", $this->db_onedev);
|
|
exit;
|
|
}
|
|
$data = array(
|
|
"records" => $qry->result_array()
|
|
);
|
|
$this->sys_ok($data);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
function getStation()
|
|
{
|
|
try {
|
|
$sql = "SELECT
|
|
T_SampleStationID stationID,
|
|
T_SampleStationIsAdditionalFisik stationIsAdditionalFisik,
|
|
T_SampleStationOrder stationOrder,
|
|
T_SampleStationCode stationCode,
|
|
T_SampleStationName stationName,
|
|
T_SampleStationNat_GroupID stationNatGroupID,
|
|
T_SampleStationIsNonLab stationIsNonLab
|
|
FROM t_samplestation
|
|
WHERE T_SampleStationIsActive = 'Y'
|
|
ORDER BY T_SampleStationOrder ";
|
|
$qry = $this->db_onedev->query(
|
|
$sql
|
|
);
|
|
|
|
if (!$qry) {
|
|
$this->sys_error_db("Error select branch", $this->db_onedev);
|
|
exit;
|
|
}
|
|
$data = array(
|
|
"records" => $qry->result_array()
|
|
);
|
|
$this->sys_ok($data);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
public function getsetup($branchID = 0)
|
|
{
|
|
try {
|
|
// if (!$this->isLogin) {
|
|
// $this->sys_error("Invalid Token");
|
|
// exit;
|
|
// }
|
|
$filterBranch = '';
|
|
if ($branchID != 0) {
|
|
$filterBranch = "AND Mgm_McuM_BranchID = $branchID";
|
|
}
|
|
$sql = "SELECT *
|
|
FROM mgm_mcu
|
|
WHERE Mgm_McuIsActive = 'Y' AND ( CURDATE() BETWEEN Mgm_McuStartDate AND Mgm_McuEndDate )
|
|
$filterBranch
|
|
ORDER BY Mgm_McuStartDate ASC, Mgm_McuEndDate ASC";
|
|
$qry = $this->db_onedev->query($sql, []);
|
|
$last_qry = $this->db_onedev->last_query();
|
|
if (!$qry) {
|
|
$message = $this->db_onedev->error();
|
|
$message['last_qry'] = $last_qry;
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$data = $qry->result_array();
|
|
$result = [
|
|
"records" => $data,
|
|
];
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
public function getsetuponsite()
|
|
{
|
|
try {
|
|
// if (!$this->isLogin) {
|
|
// $this->sys_error("Invalid Token");
|
|
// exit;
|
|
// }
|
|
$sql = "SELECT GROUP_CONCAT(Mgm_McuID) as mcuID FROM mgm_mcu WHERE Mgm_McuM_BranchID = '100' AND Mgm_McuIsActive= 'Y'";
|
|
$qry = $this->db_onedev->query($sql, []);
|
|
$last_qry = $this->db_onedev->last_query();
|
|
if (!$qry) {
|
|
$message = $this->db_onedev->error();
|
|
$message['last_qry'] = $last_qry;
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$data = $qry->row_array();
|
|
$result = [
|
|
"records" => $data,
|
|
];
|
|
$this->sys_ok($result);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
public function getTicket($code = "")
|
|
{
|
|
try {
|
|
|
|
$sql = "SELECT
|
|
q.queueID,
|
|
q.queueNumber,
|
|
q.queueCode,
|
|
q.queueTicketBoothID,
|
|
q.queueStatusID,
|
|
M_BranchID,
|
|
M_BranchName,
|
|
serviceID,
|
|
serviceName,
|
|
ticketBoothName,
|
|
statusName,
|
|
DATE_FORMAT(queueStatusTicket, '%d-%m-%Y %H:%i') queueStatusTicket,
|
|
DATE_FORMAT(queueStatusTicket, '%H:%i') printed,
|
|
IFNULL(DATE_FORMAT(queueStatusLastCall, '%H:%i'), '-') queueStatusLastCall,
|
|
IFNULL(DATE_FORMAT(queueStatusServe, '%H:%i'), '-') queueStatusServe,
|
|
IFNULL(DATE_FORMAT(queueStatusDone, '%H:%i'),'-') queueStatusDone
|
|
FROM antrione.queue q
|
|
JOIN antrione.service
|
|
ON queueServiceID = serviceID
|
|
AND serviceIsActive = 'Y'
|
|
JOIN m_branch
|
|
ON queueBranchID = M_BranchID
|
|
AND M_BranchIsActive = 'Y'
|
|
JOIN antrione.ticket_booth
|
|
ON queueTicketBoothID = ticketBoothID
|
|
AND ticketBoothIsActive = 'Y'
|
|
JOIN antrione.queue_status
|
|
ON queueID = queueStatusQueueID
|
|
JOIN antrione.status
|
|
ON q.queueStatusID = statusID
|
|
WHERE queueCode = ?";
|
|
$qry = $this->db_onedev->query($sql, [$code]);
|
|
$last_qry = $this->db_onedev->last_query();
|
|
if (!$qry) {
|
|
$message = $this->db_onedev->error();
|
|
$message['last_qry'] = $last_qry;
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$data = $qry->row_array();
|
|
$statusFO = array();
|
|
|
|
if ($data) {
|
|
$statusFO[] = array(
|
|
"status" => "Ticket Printed",
|
|
"time" => $data["printed"],
|
|
);
|
|
$statusFO[] = array(
|
|
"status" => "Fo Call",
|
|
"time" => $data["queueStatusLastCall"],
|
|
);
|
|
$statusFO[] = array(
|
|
"status" => "Fo Serve",
|
|
"time" => $data["queueStatusServe"],
|
|
);
|
|
$statusFO[] = array(
|
|
"status" => "Fo Done",
|
|
"time" => $data["queueStatusDone"],
|
|
);
|
|
$data['statusFO'] = $statusFO;
|
|
}
|
|
|
|
$sql = "SELECT
|
|
T_OrderHeaderLabNumber,
|
|
T_OrderHeaderMgm_McuID,
|
|
M_PatientName,
|
|
queueID,
|
|
queueNumber ,
|
|
PreregisterAntrianID,
|
|
queueBranchID,
|
|
queueCreated,
|
|
Mcu_PreregisterPatientsT_OrderHeaderID,
|
|
T_OrderHeaderID,
|
|
T_OrderHeaderM_BranchID,
|
|
T_SampleStationName,
|
|
T_SampleStationID,
|
|
T_SamplingQueueLastStatusID,
|
|
T_SamplingQueueLastStatusT_SamplingQueueStatusID,
|
|
IFNULL(T_SamplingQueueStatusName, '') T_SamplingQueueStatusName
|
|
FROM antrione.queue q
|
|
JOIN preregister_antrian
|
|
ON queueNumber = PreregisterAntrianNumber
|
|
AND queueCode = ?
|
|
AND queueBranchID = ?
|
|
AND queueStatusID = 4
|
|
JOIN mcu_preregister_patients
|
|
ON PreregisterAntrianMcu_PreregisterPatientsID = Mcu_PreregisterPatientsID
|
|
AND DATE_FORMAT(queueCreated, '%d-%m-%Y') = DATE_FORMAT(PreregisterAntrianCreated, '%d-%m-%Y')
|
|
AND DATE_FORMAT(queueCreated, '%d-%m-%Y') = DATE_FORMAT(NOW(), '%d-%m-%Y')
|
|
JOIN t_orderheader
|
|
ON Mcu_PreregisterPatientsT_OrderHeaderID = T_OrderHeaderID
|
|
AND T_OrderHeaderIsActive = 'Y'
|
|
JOIN m_patient
|
|
ON T_OrderHeaderM_PatientID = M_PatientID
|
|
JOIN t_order_location
|
|
ON T_OrderHeaderID = T_OrderLocationT_OrderHeaderID
|
|
JOIN t_samplestation
|
|
ON T_OrderLocationT_SampleStationID = T_SampleStationID
|
|
LEFT JOIN t_sampling_queue_last_status
|
|
ON T_SamplingQueueLastStatusT_SampleStationID = T_SampleStationID
|
|
AND T_SamplingQueueLastStatusT_OrderHeaderID = T_OrderHeaderID
|
|
LEFT JOIN t_sampling_queue_status
|
|
ON T_SamplingQueueLastStatusT_SamplingQueueStatusID = T_SamplingQueueStatusID
|
|
GROUP BY T_OrderLocationID";
|
|
$qry = $this->db_onedev->query($sql, [$code, $data['M_BranchID']]);
|
|
$last_qry = $this->db_onedev->last_query();
|
|
if (!$qry) {
|
|
$message = $this->db_onedev->error();
|
|
$message['last_qry'] = $last_qry;
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$queueStation = $qry->result_array();
|
|
$data['statusStation'] = $queueStation;
|
|
|
|
|
|
$this->sys_ok($data);
|
|
} catch (Exception $exc) {
|
|
$message = $exc->getMessage();
|
|
$this->sys_error($message);
|
|
}
|
|
}
|
|
}
|