Files
BE_IBL/application/controllers/etl/Antropometri.php
2026-04-15 15:23:57 +07:00

293 lines
11 KiB
PHP

<?php
class Antropometri extends MY_Controller
{
var $db;
public function __construct()
{
parent::__construct();
}
public function index()
{
echo "ANTROPOMETRI API";
}
function generate($mgmMcuID, $debug = "")
{
$this->db->trans_begin();
$sql = "SELECT So_ResultEntryFisikUmumDetails
FROM one_etl.mcu_order
JOIN so_resultentry ON So_ResultEntryT_OrderHeaderID = Mcu_OrderT_OrderHeaderID AND So_ResultEntrySo_TemplateID IN (6, 8, 9 , 10, 60)
JOIN so_resultentry_fisik_umum ON So_ResultEntryFisikUmumSo_ResultEntryID = So_ResultEntryID AND So_ResultEntryFisikUmumType = 'fisik'
WHERE
Mcu_OrderMgm_McuID = '{$mgmMcuID}'";
$query = $this->db->query($sql);
if (!$query) {
$this->db->trans_rollback();
$error = array(
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error, $this->db);
exit;
}
if ($query) {
$rows = $query->result_array();
//echo $this->db->last_query();
$result = array();
$arr_bb_temp = [];
$arr_tb_temp = [];
$arr_lp_temp = [];
$arr_bmi_temp = [];
if ($rows) {
foreach ($rows as $k => $v) {
$data_json = json_decode($v['So_ResultEntryFisikUmumDetails']);
$data_json = $this->objToArray($data_json);
//print_r($data_json);
foreach ($data_json as $x => $y) {
if ($y['title'] == 'STATUS GIZI') {
foreach ($y['details'] as $detail) {
if ($detail['label'] === 'Berat badan' && $detail['value'] !== '-' && $detail['value'] != 0) {
$arr_bb_temp[] = $detail['value'];
//break;
}
if ($detail['label'] === 'Tinggi badan' && $detail['value'] !== '-' && $detail['value'] != 0) {
$arr_tb_temp[] = $detail['value'];
// break;
}
if ($detail['label'] === 'Lingkar perut' && $detail['value'] !== '-' && $detail['value'] != 0) {
$arr_lp_temp[] = $detail['value'];
// break;
}
if ($detail['label'] === 'BMI' && $detail['value'] !== '-' && !is_nan($detail['value']) && $detail['value'] != 0) {
$arr_bmi_temp[] = $detail['value'];
// break;
}
}
}
}
// echo " bb " . $r;
// echo " tb " . $t;
// echo " lp " . $l;
// echo " bmi " . $bmi;
}
$explode_bb = $arr_bb_temp;
$explode_tb = $arr_tb_temp;
$explode_lp = $arr_lp_temp;
$explode_bmi = $arr_bmi_temp;
// print_r($explode_bb);
// print_r($explode_tb);
// print_r($explode_lp);
// print_r($explode_bmi);
if ($debug != "") {
echo "<pre>TB:\n";
print_r($explode_tb);
}
// BB
// Calculate minimum value
$min_bb = min($explode_bb);
// Calculate maximum value
$max_bb = max($explode_bb);
// Calculate average (mean)
$average_bb = array_sum($explode_bb) / count($explode_bb);
if ($debug != "") {
echo "<pre>BB:\n";
print_r($explode_bb);
}
// Calculate median
sort($explode_bb);
$count_bb = count($explode_bb);
$middle_bb = floor($count_bb / 2);
if ($count_bb % 2) {
// Odd number of elements
$median_bb = $explode_bb[$middle_bb];
} else {
// Even number of elements
$median_bb = ($explode_bb[$middle_bb - 1] + $explode_bb[$middle_bb]) / 2;
}
//Output the results
/*echo "Minimum value BB: " . $min_bb . "\n";
echo "Maximum value BB: " . $max_bb . "\n";
echo "Average (mean) value BB: " . $average_bb . "\n";
echo "Median value BB: " . $median_bb . "\n";
*/
// tb
// Calculate minimum value
$min_tb = min($explode_tb);
// Calculate maximum value
$max_tb = max($explode_tb);
// Calculate average (mean)
$average_tb = array_sum($explode_tb) / count($explode_tb);
// Calculate median
sort($explode_tb);
$count_tb = count($explode_tb);
$middle_tb = floor($count_tb / 2);
if ($count_tb % 2) {
// Odd number of elements
$median_tb = $explode_tb[$middle_tb];
} else {
// Even number of elements
$median_tb = ($explode_tb[$middle_tb - 1] + $explode_tb[$middle_tb]) / 2;
}
// Output the results
/*echo "Minimum value tb: " . $min_tb . "\n";
echo "Maximum value tb: " . $max_tb . "\n";
echo "Average (mean) value tb: " . $average_tb . "\n";
echo "Median value tb: " . $median_tb . "\n";
*/
// lp
// Calculate minimum value
$min_lp = min($explode_lp);
// Calculate maximum value
$max_lp = max($explode_lp);
// Calculate average (mean)
$average_lp = array_sum($explode_lp) / count($explode_lp);
// Calculate median
sort($explode_lp);
$count_lp = count($explode_lp);
$middle_lp = floor($count_lp / 2);
if ($count_lp % 2) {
// Odd number of elements
$median_lp = $explode_lp[$middle_lp];
} else {
// Even number of elements
$median_lp = ($explode_lp[$middle_lp - 1] + $explode_lp[$middle_lp]) / 2;
}
// Output the results
/*echo "Minimum value lp: " . $min_lp . "\n";
echo "Maximum value lp: " . $max_lp . "\n";
echo "Average (mean) value lp: " . $average_lp . "\n";
echo "Median value lp: " . $median_lp . "\n";
*/
// bmi
// Calculate minimum value
$min_bmi = min($explode_bmi);
// Calculate maximum value
$max_bmi = max($explode_bmi);
// Calculate average (mean)
$average_bmi = array_sum($explode_bmi) / count($explode_bmi);
// Calculate median
sort($explode_bmi);
$count_bmi = count($explode_bmi);
$middle_bmi = floor($count_bmi / 2);
if ($count_bmi % 2) {
// Odd number of elements
$median_bmi = $explode_bmi[$middle_bmi];
} else {
// Even number of elements
$median_bmi = ($explode_bmi[$middle_bmi - 1] + $explode_bmi[$middle_bmi]) / 2;
}
if ($debug != "") {
echo "<pre>BMI:\n";
echo "Minimum value bmi: " . $min_bmi . "\n";
echo "Maximum value bmi: " . $max_bmi . "\n";
echo "Average (mean) value bmi: " . $average_bmi . "\n";
echo "Median value bmi: " . $median_bmi . "\n";
print_r($explode_bmi);
}
// Output the results
$sql = "DELETE FROM one_etl.antropometri WHERE AntropometriMgm_McuID = {$mgmMcuID}";
$qry = $this->db->query($sql);
if (!$qry) {
$this->db->trans_rollback();
$error = array(
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error, $this->db);
exit;
}
$this->insert_antropometri($mgmMcuID, $min_tb, $min_bb, $min_lp, $min_bmi, 'MIN');
$this->insert_antropometri($mgmMcuID, $max_tb, $max_bb, $max_lp, $max_bmi, 'MAX');
$this->insert_antropometri($mgmMcuID, $average_tb, $average_bb, $average_lp, $average_bmi, 'AVG');
$this->insert_antropometri($mgmMcuID, $median_tb, $median_bb, $median_lp, $median_bmi, 'MED');
}
}
$this->db->trans_commit();
$this->reply(["status" => "OK", 'message' => 'Proses generate antopometri berhasil']);
}
function reply($resp)
{
echo json_encode($resp);
}
function objToArray($obj)
{
// Not an object or array
if (!is_object($obj) && !is_array($obj)) {
return $obj;
}
// Parse array
foreach ($obj as $key => $value) {
$arr[$key] = $this->objToArray($value);
}
// Return parsed array
return $arr;
}
function insert_antropometri($mgmMcuID, $tb, $bb, $lp, $bmi, $type)
{
$sql = "INSERT INTO one_etl.antropometri(
AntropometriMgm_McuID,
AntropometriTB,
AntropometriBB,
AntropometriLP,
AntropometriBMI,
AntropometriType) VALUES(?,?,?,?,?,?)";
$qry = $this->db->query($sql, array(
$mgmMcuID,
$tb,
$bb,
$lp,
$bmi,
$type
));
$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;
}
}
}