779 lines
43 KiB
PHP
779 lines
43 KiB
PHP
<?php
|
|
|
|
class AntrianByStationAndLocation extends MY_Controller
|
|
{
|
|
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);
|
|
}
|
|
|
|
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_OrderHeaderIsCito,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_OrderHeaderQueue AS queue_number,
|
|
T_OrderHeaderM_PatientID AS patient_id,
|
|
M_PatientName AS patient_name,
|
|
T_OrderHeaderIsCito AS is_cito,
|
|
fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status,
|
|
IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as antri_time,
|
|
IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,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 t_orderheaderaddon ON T_OrderHeaderID = T_OrderHeaderAddOnT_OrderHeaderID AND
|
|
T_OrderHeaderAddOnIsActive = 'Y'
|
|
JOIN last_status ON T_OrderHeaderID = Last_StatusT_OrderHeaderID AND ( Last_StatusM_StatusID > 3 OR Last_StatusM_StatusID NOT IN (4,6) )
|
|
GROUP BY T_OrderHeaderID,T_samplestationID, M_LocationID
|
|
UNION
|
|
SELECT 1 as countx, T_OrderHeaderIsCito,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_OrderHeaderQueue AS queue_number,
|
|
T_OrderHeaderM_PatientID AS patient_id,
|
|
M_PatientName AS patient_name,
|
|
T_OrderHeaderIsCito AS is_cito,
|
|
fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status,
|
|
IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as antri_time,
|
|
IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,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 t_orderheaderaddon ON T_OrderHeaderID = T_OrderHeaderAddOnT_OrderHeaderID AND T_OrderHeaderAddOnIsActive = '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
|
|
|
|
UNION
|
|
|
|
SELECT
|
|
1 as countx,
|
|
T_OrderHeaderIsCito,
|
|
T_OrderHeaderDate,
|
|
'' AS T_OrderHeaderAddonIsComingDate,
|
|
orderID AS order_header_id,
|
|
orderNumber AS order_lab_number,
|
|
M_LocationT_SampleStationID AS station_id,
|
|
'' as station_name,
|
|
M_LocationID as location_id,
|
|
M_LocatioNName as location_name,
|
|
DATE_FORMAT(orderDate,'%d-%m-%Y %H:%i') as order_date,
|
|
orderQueueNumber AS queue_number,
|
|
M_PatientID AS patient_id,
|
|
M_PatientName AS patient_name,
|
|
'N' AS is_cito,
|
|
fn_sampling_clinic_queue_status_name(orderID,M_LocationT_SampleStationID) as status,
|
|
IFNULL(AntrianSampleStationTime, orderDate) as antri_time,
|
|
IFNULL(AntrianSampleStationTime, orderDate) as skip_time,
|
|
'Y' AS is_clinic
|
|
FROM one_klinik.order
|
|
JOIN m_patient
|
|
ON orderM_PatientID = M_PatientID
|
|
AND M_PatientIsActive = 'Y'
|
|
JOIN m_title ON M_PatientM_TitleID = M_TitleID
|
|
JOIN m_sex ON M_PatientM_SexID = M_SexID
|
|
JOIN m_location ON orderM_LocationID = M_LocationID AND M_LocationID = ?
|
|
LEFT JOIN t_orderheader
|
|
ON orderT_OrderHeaderID = T_OrderHeaderID
|
|
AND T_OrderHeaderIsActive = 'Y'
|
|
LEFT JOIN antrian_samplestation
|
|
ON orderID = AntrianSampleStationOrderID AND AntrianSampleStationIsActive = 'Y'
|
|
WHERE DATE_FORMAT(orderDate,'%Y-%m-%d') = DATE_FORMAT( NOW(),'%Y-%m-%d') AND orderIsActive = 'Y' AND orderIsCheck <> 'D'
|
|
) tbl
|
|
ORDER BY T_OrderHeaderIsCito DESC, antri_time ASC";
|
|
$query = $this->db_onedev->query($sql, array(intval($stationId), intval($locationId), intval($stationId), intval($locationId), 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_OrderHeaderIsCito,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_OrderHeaderQueue AS queue_number,
|
|
T_OrderHeaderM_PatientID AS patient_id,
|
|
M_PatientName AS patient_name,
|
|
T_OrderHeaderIsCito AS is_cito,
|
|
fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status,
|
|
IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as antri_time,
|
|
IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,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 t_orderheaderaddon ON T_OrderHeaderID = T_OrderHeaderAddOnT_OrderHeaderID AND
|
|
T_OrderHeaderAddOnIsActive = 'Y'
|
|
JOIN last_status ON T_OrderHeaderID = Last_StatusT_OrderHeaderID AND ( Last_StatusM_StatusID > 3 OR Last_StatusM_StatusID NOT IN (4,6) )
|
|
|
|
GROUP BY T_OrderHeaderID,T_samplestationID, M_LocationID
|
|
UNION
|
|
SELECT 1 as countx, T_OrderHeaderIsCito,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_OrderHeaderQueue AS queue_number,
|
|
T_OrderHeaderM_PatientID AS patient_id,
|
|
M_PatientName AS patient_name,
|
|
T_OrderHeaderIsCito AS is_cito,
|
|
fn_sampling_queue_status_name(T_OrderHeaderID,T_SampleStationID) as status,
|
|
IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,T_OrderHeaderDate),AntrianSampleStationTime) as antri_time,
|
|
IF(ISNULL(AntrianSampleStationTime),IFNULL(T_OrderHeaderAddonIsComingDate,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 t_orderheaderaddon ON T_OrderHeaderID = T_OrderHeaderAddOnT_OrderHeaderID AND T_OrderHeaderAddOnIsActive = '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
|
|
|
|
UNION
|
|
|
|
SELECT
|
|
1 as countx,
|
|
T_OrderHeaderIsCito,
|
|
T_OrderHeaderDate,
|
|
'' AS T_OrderHeaderAddonIsComingDate,
|
|
orderID AS order_header_id,
|
|
orderNumber AS order_lab_number,
|
|
M_LocationT_SampleStationID AS station_id,
|
|
'' as station_name,
|
|
M_LocationID as location_id,
|
|
M_LocatioNName as location_name,
|
|
DATE_FORMAT(orderDate,'%d-%m-%Y %H:%i') as order_date,
|
|
orderQueueNumber AS queue_number,
|
|
M_PatientID AS patient_id,
|
|
M_PatientName AS patient_name,
|
|
'N' AS is_cito,
|
|
fn_sampling_clinic_queue_status_name(orderID,M_LocationT_SampleStationID) as status,
|
|
IFNULL(AntrianSampleStationTime, orderDate) as antri_time,
|
|
IFNULL(AntrianSampleStationTime, orderDate) as skip_time,
|
|
'Y' AS is_clinic
|
|
FROM one_klinik.order
|
|
JOIN m_patient
|
|
ON orderM_PatientID = M_PatientID
|
|
AND M_PatientIsActive = 'Y'
|
|
JOIN m_title ON M_PatientM_TitleID = M_TitleID
|
|
JOIN m_sex ON M_PatientM_SexID = M_SexID
|
|
JOIN m_location ON orderM_LocationID = M_LocationID AND M_LocationID = ?
|
|
LEFT JOIN t_orderheader
|
|
ON orderT_OrderHeaderID = T_OrderHeaderID
|
|
AND T_OrderHeaderIsActive = 'Y'
|
|
LEFT JOIN antrian_samplestation
|
|
ON orderID = AntrianSampleStationOrderID AND AntrianSampleStationIsActive = 'Y'
|
|
WHERE DATE_FORMAT(orderDate,'%Y-%m-%d') = DATE_FORMAT( NOW(),'%Y-%m-%d') AND orderIsActive = 'Y' AND orderIsCheck <> 'D'
|
|
) tbl
|
|
ORDER BY T_OrderHeaderIsCito DESC, antri_time ASC";
|
|
$query = $this->db_onedev->query($sql, array(intval($stationId), intval($locationId), intval($stationId), intval($locationId), 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 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);
|
|
}
|
|
}
|
|
}
|