Files
BE_IBL/application/controllers/mockup/fo/antrian/AntrianByStationAndLocation.php
2026-04-15 15:24:34 +07:00

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);
}
}
}