186 lines
7.7 KiB
PHP
186 lines
7.7 KiB
PHP
<?php
|
|
class Top3kelainan extends MY_Controller
|
|
{
|
|
var $db;
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
public function index()
|
|
{
|
|
echo "ETL MCU Top 3 Kelainan";
|
|
}
|
|
function reply($resp)
|
|
{
|
|
echo json_encode($resp);
|
|
}
|
|
function newTop3Kelainan($mgmMcuID)
|
|
{
|
|
// Mcu_KelainanID,
|
|
// Mcu_KelainanGroupID,
|
|
// Mcu_KelainanName,
|
|
// Mcu_KelainanGroupName,
|
|
$sql = "SELECT
|
|
COUNT(distinct Mgm_HeaderT_OrderHeaderID) AS xTotalPerItem,
|
|
if (Mcu_KelainanGroupID IN (2,3,16,22,17,18,19,20,28,29) , Mcu_KelainanGroupName, Mcu_KelainanName) as Mcu_KelainanGroupName
|
|
, if (Mcu_KelainanGroupID IN (2,3,16,22,17,18,19,20,28,29) , Mcu_KelainanGroupID, 0) as Mcu_KelainanGroupID
|
|
, if (Mcu_KelainanGroupID NOT IN (2,3,16,22,17,18,19,20,28,29) , Mcu_KelainanID,0) as Mcu_KelainanID
|
|
, Mgm_HeaderMgm_McuID
|
|
FROM
|
|
one_etl.mgm_header
|
|
JOIN one_etl.mgm_detail
|
|
ON Mgm_HeaderID = Mgm_DetailMgm_HeaderID
|
|
AND Mgm_HeaderIsActive = 'Y'
|
|
AND Mgm_DetailIsActive = 'Y'
|
|
JOIN one_etl.mcu_kelainangroup
|
|
ON Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
|
|
AND Mcu_KelainanGroupIsActive = 'Y'
|
|
join one_etl.mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID and Mcu_KelainanIsActive = 'Y'
|
|
WHERE
|
|
Mgm_HeaderMgm_McuID = {$mgmMcuID} and Mcu_KelainanName <> 'Normal' and Mcu_KelainanGroupID not in (1,5)
|
|
and Mcu_KelainanID not in (63,12)
|
|
GROUP BY
|
|
Mcu_KelainanID,
|
|
Mcu_KelainanGroupName
|
|
ORDER BY
|
|
xTotalPerItem DESC";
|
|
$qry = $this->db->query($sql, array());
|
|
if (!$qry) {
|
|
// $this->db->trans_rollback();
|
|
$this->sys_error_db("Error get raw top 3 kelainan");
|
|
exit;
|
|
}
|
|
$allKelainan = $qry->result_array();
|
|
$group = [2, 3, 16, 22, 17, 18, 19, 20, 28, 29];
|
|
$newKelainan = [];
|
|
$tmpGroupID = [];
|
|
for ($i = 0; $i < count($allKelainan); $i++) {
|
|
$data = $allKelainan[$i];
|
|
if (in_array(intval($data['Mcu_KelainanGroupID']), $group)) {
|
|
$groupID = $data['Mcu_KelainanGroupID'];
|
|
// Jika sudah ada di hasil, tambahkan xTotalPerItem
|
|
if (in_array($groupID, $tmpGroupID)) {
|
|
if (count($newKelainan) == 0) {
|
|
$newKelainan[] = $data;
|
|
}
|
|
for ($m = 0; $m < count($newKelainan); $m++) {
|
|
if ($groupID == $newKelainan[$m]['Mcu_KelainanGroupID']) {
|
|
$newKelainan[$m]['xTotalPerItem'] = (int)$data['xTotalPerItem'] + (int)$newKelainan[$m]['xTotalPerItem'];
|
|
}
|
|
}
|
|
} else {
|
|
// Jika belum ada, masukkan data awal
|
|
$newKelainan[] = [
|
|
"xTotalPerItem" => (int)$data['xTotalPerItem'],
|
|
"Mcu_KelainanGroupName" => $data['Mcu_KelainanGroupName'],
|
|
"Mcu_KelainanGroupID" => $groupID,
|
|
"Mcu_KelainanID" => $data['Mcu_KelainanID'],
|
|
"Mgm_HeaderMgm_McuID" => $data['Mgm_HeaderMgm_McuID']
|
|
];
|
|
$tmpGroupID[] = $groupID;
|
|
}
|
|
} else {
|
|
$newKelainan[] = $data;
|
|
}
|
|
}
|
|
usort($newKelainan, function ($a, $b) {
|
|
return $b['xTotalPerItem'] - $a['xTotalPerItem'];
|
|
});
|
|
// Mendapatkan 3 data teratas
|
|
$topThree = array_slice($newKelainan, 0, 3);
|
|
$result = array(
|
|
'allKelainan' => $allKelainan,
|
|
'newKelainan' => $newKelainan,
|
|
'top3Kelainan' => $topThree
|
|
);
|
|
$this->sys_ok($result);
|
|
}
|
|
|
|
|
|
function getTop3Kelainan($mgmMcuID)
|
|
{
|
|
|
|
$sql = "call sp_etl_top3_kelainan({$mgmMcuID});";
|
|
$qry = $this->db->query($sql, array());
|
|
$last_qry = $this->db->last_query();
|
|
if (!$qry) {
|
|
// $this->db->trans_rollback();
|
|
$error = array(
|
|
"message" => $this->db->error()["message"],
|
|
"sql" => $last_qry
|
|
);
|
|
$this->sys_error_db($error, $this->db);
|
|
exit;
|
|
}
|
|
$result = $qry->result_array();
|
|
$this->clean_mysqli_connection($this->db->conn_id);
|
|
$sql = "UPDATE one_etl.mcu_top3_kelainan
|
|
SET Mcu_Top3KelainanIsActive = 'N'
|
|
WHERE Mcu_Top3KelainanMgm_McuID = '{$mgmMcuID}'";
|
|
$qry = $this->db->query($sql, array());
|
|
$last_qry = $this->db->last_query();
|
|
if (!$qry) {
|
|
// $this->db->trans_rollback();
|
|
$this->sys_error_db("Error delete top 3 kelainan");
|
|
exit;
|
|
}
|
|
|
|
for ($i = 0; $i < count($result); $i++) {
|
|
// {
|
|
// "xTotalPerItem": "146",
|
|
// "Mcu_KelainanGroupName": "Gangguan Refraksi",
|
|
// "Mcu_KelainanGroupID": "3",
|
|
// "Mcu_KelainanID": "0",
|
|
// "Mgm_HeaderMgm_McuID": "23",
|
|
// "Percentage": "80.6600",
|
|
// "description": ""
|
|
// }
|
|
|
|
$sql = "SELECT Mcu_Top3KelainanID as id FROM
|
|
one_etl.mcu_top3_kelainan
|
|
WHERE Mcu_Top3KelainanMcu_KelainanGroupID = '{$result[$i]['Mcu_KelainanGroupID']}'
|
|
AND Mcu_Top3KelainanMcuKelainanID = '{$result[$i]['Mcu_KelainanID']}'
|
|
AND Mcu_Top3KelainanMgm_McuID = '{$result[$i]['Mgm_HeaderMgm_McuID']}'
|
|
AND Mcu_Top3KelainanIsActive = 'Y'";
|
|
$qry = $this->db->query($sql, array());
|
|
$last_qry = $this->db->last_query();
|
|
if (!$qry) {
|
|
// $this->db->trans_rollback();
|
|
$this->sys_error_db("Error cek top 3 kdelainan");
|
|
exit;
|
|
}
|
|
$cekID = $qry->result_array();
|
|
// if (count($cekID) > 0) {
|
|
|
|
// }
|
|
$sql = "INSERT INTO one_etl.mcu_top3_kelainan(
|
|
Mcu_Top3KelainanXTotalPerItem,
|
|
Mcu_Top3KelainanMcu_KelainangroupName,
|
|
Mcu_Top3KelainanMcu_KelainanGroupID,
|
|
Mcu_Top3KelainanMcuKelainanID,
|
|
Mcu_Top3KelainanMgm_McuID,
|
|
Mcu_Top3KelainanPercentage,
|
|
Mcu_Top3KelainanDescription)
|
|
VALUES(
|
|
'{$result[$i]['xTotalPerItem']}',
|
|
'{$result[$i]['Mcu_KelainanGroupName']}',
|
|
'{$result[$i]['Mcu_KelainanGroupID']}',
|
|
'{$result[$i]['Mcu_KelainanID']}',
|
|
'{$result[$i]['Mgm_HeaderMgm_McuID']}',
|
|
'{$result[$i]['Percentage']}',
|
|
'{$result[$i]['description']}'
|
|
);
|
|
";
|
|
$qry = $this->db->query($sql, array());
|
|
$last_qry = $this->db->last_query();
|
|
if (!$qry) {
|
|
// $this->db->trans_rollback();
|
|
$this->sys_error_db("Error insert top 3 kdelainan");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
$this->sys_ok("Success");
|
|
}
|
|
}
|