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