Files
2026-04-15 15:23:57 +07:00

364 lines
14 KiB
PHP

<?php
class Dashboard extends MY_Controller
{
var $db;
function __construct()
{
parent::__construct();
}
function index()
{
$cek = $this->db->query("select database() as current_db")->result();
echo "API DASHBOARD";
// print_r($cek);
}
function kunjungan_per_jam()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$date = date("Y-m-d");
if (isset($prm['date'])) {
$date = $prm["date"];
}
$sql = "SELECT HOUR(T_OrderHeaderDate) as jam,
COUNT(T_OrderHeaderID) as jumlah_pasien FROM t_orderheader
WHERE T_OrderHeaderIsActive = 'Y'
AND (DATE(T_OrderHeaderDate) = ?)
GROUP BY jam";
$qry = $this->db->query($sql, array($date));
// $last_qry = $this->db->last_query();
// print_r($last_qry);
if ($qry) {
$rows = $qry->result_array();
} else {
$this->sys_error_db("select pemeriksaan per jam error", $this->db);
exit;
}
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function jumlah_order()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$date = date("Y-m-d");
if (isset($prm['date'])) {
$date = $prm["date"];
}
$sql = "SELECT DATE(T_OrderHeaderDate) as tanggal,
COUNT(T_OrderHeaderID) as jumlah_pasien,
COUNT(a.T_OrderHeaderAddOnID) as sudah_selesai,
COUNT(b.T_OrderHeaderAddOnID) as selesai_sebagian,
COUNT(c.T_OrderHeaderAddOnID) as belum_selesai
FROM t_orderheader
LEFT JOIN t_orderheaderaddon as a ON T_OrderHeaderID = a.T_OrderHeaderAddOnT_OrderHeaderID
AND a.T_OrderHeaderAddOnIsActive = 'Y'
AND a.T_OrderHeaderAddOnValidationDone = 'Y'
LEFT JOIN t_orderheaderaddon as b ON T_OrderHeaderID = b.T_OrderHeaderAddOnT_OrderHeaderID
AND b.T_OrderHeaderAddOnIsActive = 'Y'
AND b.T_OrderHeaderAddOnValidationDone = 'P'
LEFT JOIN t_orderheaderaddon as c ON T_OrderHeaderID = c.T_OrderHeaderAddOnT_OrderHeaderID
AND c.T_OrderHeaderAddOnIsActive = 'Y'
AND c.T_OrderHeaderAddOnValidationDone = 'N'
WHERE T_OrderHeaderIsActive = 'Y'
AND (DATE(T_OrderHeaderDate) = ?)
GROUP BY tanggal";
$qry = $this->db->query($sql, array($date));
// $last_qry = $this->db->last_query();
// print_r($last_qry);
if ($qry) {
$rows = $qry->result_array();
} else {
$this->sys_error_db("select jumlah pasien error", $this->db);
exit;
}
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function jumlah_pemeriksaan()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$date = date("Y-m-d");
if (isset($prm['date'])) {
$date = $prm["date"];
}
$sql_sudah_selesai = "SELECT DATE(T_OrderHeaderDate) as tanggal,
COUNT(T_OrderDetailID) as pemeriksaan_sudah_selesai
FROM t_orderheader
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
AND T_OrderDetailValidation = 'Y'
AND T_OrderDetailT_TestIsResult = 'Y'
AND T_OrderHeaderIsActive = 'Y'
AND (DATE(T_OrderHeaderDate) = ?)
GROUP BY tanggal";
$qry_sudah_selesai = $this->db->query($sql_sudah_selesai, array($date));
// $last_qry_sudah_selesai = $this->db->last_query();
// print_r($last_qry_sudah_selesai);
if ($qry_sudah_selesai) {
$rows_sudah_selesai = $qry_sudah_selesai->result_array();
} else {
$this->sys_error_db("select pemeriksaan sudah selesai error", $this->db);
exit;
}
$sql_belum_selesai = "SELECT DATE(T_OrderHeaderDate) as tanggal,
COUNT(T_OrderDetailID) as pemeriksaan_belum_selesai
FROM t_orderheader
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
AND T_OrderDetailValidation = 'N'
AND T_OrderDetailT_TestIsResult = 'Y'
AND T_OrderHeaderIsActive = 'Y'
AND (DATE(T_OrderHeaderDate) = ?)
GROUP BY tanggal";
$qry_belum_selesai = $this->db->query($sql_belum_selesai, array($date));
if ($qry_belum_selesai) {
$rows_belum_selesai = $qry_belum_selesai->result_array();
} else {
$this->sys_error_db("select pemeriksaan belum selesai error", $this->db);
exit;
}
$jml_sdh_selesai = $rows_sudah_selesai[0]['pemeriksaan_sudah_selesai'];
// echo $jml_sdh_selesai;
$jml_blm_selesai = $rows_belum_selesai[0]['pemeriksaan_belum_selesai'];
// echo $jml_blm_selesai;
$total = $jml_sdh_selesai + $jml_blm_selesai;
// print_r($total);
$result = array(
"Pemeriksaan_sudah_selesai" => $rows_sudah_selesai,
"Pemeriksaan_belum_selesai" => $rows_belum_selesai,
"total_pemeriksaan" => $total
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function tat()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$date = date("Y-m-d");
if (isset($prm['date'])) {
$date = $prm["date"];
}
$sql = "SELECT IF(T_OrderDetailIsCito = 'N', 'Normal', 'Reguler') as cito,
AVG(TIME_TO_SEC(T_OrderDetailValDate) - TIME_TO_SEC(CONCAT(T_OrderSampleSamplingDate,' ', T_OrderSampleSamplingTime)))/60 AS TAT
FROM t_orderheader
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
AND T_TestIsActive = 'Y'
JOIN t_ordersample ON T_OrderHeaderID = T_OrderSampleT_OrderHeaderID
AND T_OrderSampleIsActive = 'Y'
AND T_TestT_SampleTypeID = T_OrderSampleT_SampleTypeID
AND T_OrderSampleSamplingDate IS NOT NULL
AND T_OrderSampleSamplingTime IS NOT NULL
WHERE T_OrderHeaderIsActive = 'Y' AND
(DATE(T_OrderHeaderDate) = ?)
GROUP BY T_OrderDetailIsCito";
$qry = $this->db->query($sql, array($date));
if ($qry) {
$rows = $qry->result_array();
} else {
$this->sys_error_db("select tat error", $this->db);
exit;
}
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function pemeriksaan()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$date = date("Y-m-d");
if (isset($prm['date'])) {
$date = $prm["date"];
}
$sql = "SELECT Nat_TestID,
Nat_TestName,
Nat_TestShortName,
Nat_TestShortNameBarcode,
COUNT(T_OrderDetailID) as pemeriksaan_belum_selesai
FROM t_orderheader
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
AND T_OrderDetailT_TestIsResult = 'Y'
AND T_OrderHeaderIsActive = 'Y'
AND T_OrderDetailValidation <> 'Y'
AND (DATE(T_OrderHeaderDate) = ?)
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
AND T_TestIsActive = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID
AND Nat_TestIsActive = 'Y'
GROUP BY Nat_TestID
ORDER BY COUNT(T_OrderDetailID) DESC";
$qry = $this->db->query($sql, array($date));
if ($qry) {
$rows = $qry->result_array();
} else {
$this->sys_error_db("select pemeriksaan belum selesai error", $this->db);
exit;
}
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function instrument()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$date = date("Y-m-d");
if (isset($prm['date'])) {
$date = $prm["date"];
}
$sql = "SELECT Nat_InstrumentName,
COUNT(T_OrderDetailID) as pemakaian_alat_pertest
FROM t_orderheader
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
AND T_TestIsActive = 'Y'
JOIN t_resultinstrument ON T_OrderDetailID = T_ResultInstrumentT_OrderDetailID
AND T_ResultInstrumentIsActive = 'Y'
JOIN nat_instrument ON T_ResultInstrumentNat_InstrumentID = Nat_InstrumentID
AND Nat_InstrumentIsActive = 'Y'
WHERE T_OrderHeaderIsActive= 'Y'
AND (DATE(T_OrderHeaderDate) = ?)
GROUP BY Nat_InstrumentID";
$qry = $this->db->query($sql, array($date));
if ($qry) {
$rows = $qry->result_array();
} else {
$this->sys_error_db("select pemakaian alat pertest error", $this->db);
exit;
}
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function kunjungan_per_test()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$date = date("Y-m-d");
if (isset($prm['date'])) {
$date = $prm["date"];
}
$sql = "SELECT Nat_SubGroupName,
COUNT(T_OrderDetailID) as total_pergroup
FROM t_orderheader
JOIN t_orderdetail ON T_OrderHeaderID = T_OrderDetailT_OrderHeaderID
AND T_OrderDetailIsActive = 'Y'
JOIN t_test ON T_OrderDetailT_TestID = T_TestID
AND T_TestIsActive = 'Y'
AND T_TestIsResult = 'Y'
JOIN nat_test ON T_TestNat_TestID = Nat_TestID
AND Nat_TestIsActive = 'Y'
JOIN nat_subgroup ON Nat_TestNat_SubGroupID = Nat_SubGroupID
AND Nat_SubGroupIsActive = 'Y'
WHERE T_OrderHeaderIsActive= 'Y'
AND (DATE(T_OrderHeaderDate) = ?)
GROUP BY Nat_SubGroupID";
$qry = $this->db->query($sql, array($date));
if ($qry) {
$rows = $qry->result_array();
} else {
$this->sys_error_db("select kunjungan per tempat pemeriksaan error", $this->db);
exit;
}
$result = array(
"records" => $rows
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
}