293 lines
11 KiB
PHP
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;
|
|
}
|
|
}
|
|
}
|