TIF_E41200497/application/controllers/Ramal.php

422 lines
12 KiB
PHP

<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Ramal extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->model('M_pelayanan');
$this->load->helper('url');
$this->load->library('form_validation');
if ($this->session->userdata('status') != "login") {
redirect(base_url("Auth"));
}
}
public function index()
{
$data['data'] = $this->M_pelayanan->list_data()->result();
$data['alpha'] = $this->M_pelayanan->alpha()->row();
$this->load->view('ramal', $data);
}
public function alpha()
{
$alpha = $this->input->post('alpha');
$data = array(
'alpha' => $alpha
);
$where = array(
'id_alpha' => '1'
);
$this->session->set_flashdata('success', 'Anda Berhasil Mengubah alpha');
$this->M_pelayanan->update($where, $data, 'alpha');
redirect('ramal');
}
public function ramal_pengunjung($id_pelayanan)
{
$data['pelayanan'] = $this->M_pelayanan->get_detail($id_pelayanan)->row();
$awal = $this->db->query('SELECT tanggal FROM pengunjung order by tanggal asc')->row();
$akhir = $this->db->query('SELECT tanggal FROM pengunjung order by tanggal desc')->row();
$starter = 0;
$lb = 0;
$aktual = [];
$bulan = [];
// generate list bulan dan jumlah data aktual, dari awal hingga akhir kunjungan pada setiap pelayanan
for ($t = date("Y", strtotime($awal->tanggal)); $t <= date("Y", strtotime($akhir->tanggal)); $t++) {
if ($starter == 0) {
$lb = date("m", strtotime($awal->tanggal));
} else {
$lb = 1;
}
for ($b = $lb; $b <= 13; $b++) {
if ($b > 12) {
$starter = 1;
break;
} else {
$s_bln = sprintf("%02d", $b);
$s_thn = sprintf("%02d", $t);
$detail = $this->db->query("
SELECT pl.nama as nama_pelayanan, YEAR(tanggal) as tahun, MONTH(tanggal) as bulan, COUNT(p.id) as jumlah
FROM pengunjung p
JOIN pelayanan pl ON p.id_pelayanan= pl.id
WHERE p.id_pelayanan = '$id_pelayanan'
AND MONTH(p.tanggal) = '$s_bln'
AND YEAR(p.tanggal) = '$s_thn'
GROUP BY MONTH(p.tanggal), YEAR(p.tanggal)
")->row();
if ($t == date("Y", strtotime($akhir->tanggal)) && $b > date("m", strtotime($akhir->tanggal))) {
break;
} else {
if ($detail) {
$aktual[] = $detail->jumlah;
$bulan[] = sprintf("%02d", $b) . "-" . $t;
}
// else {
// //echo sprintf("%02d", $b)."-".$t."==".""."|"."0"."<br>";
// $aktual[]= 0;
// $bulan[] = sprintf("%02d",$b)." - ".$t;
// }
}
}
}
}
$data['alpha'] = $this->M_pelayanan->alpha()->row();
$alpha = $data['alpha']->alpha;
// mengkonversi nilai array menjadi number / int
$aktualInt = array_map('intval', $aktual);
// mengambil nilai awal pada data aktual
$nilaiAwal = array_slice($aktual, 0, 1);
$nilaiAwalInt = array_map('intval', $nilaiAwal);
//SMOOTHING 1
$s1[] = isset($nilaiAwalInt[0]) ? $nilaiAwalInt[0] : 0;
$s1Int = array_map('intval', $s1);
for ($i = 1; $i < count($aktualInt) + 1; $i++) {
$s1Int[$i] = round($alpha * $aktualInt[$i - 1] + (1 - $alpha) * $s1Int[$i - 1], 2);
}
//SMOOTHING 2
$s2[] = isset($nilaiAwalInt[0]) ? $nilaiAwalInt[0] : 0;
$s2Int = array_map('intval', $s2);
for ($i = 1; $i < count($s1Int); $i++) {
$s2Int[$i] = round($alpha * $s1Int[$i] + (1 - $alpha) * $s2Int[$i - 1], 2);
}
//SMOOTHING 3
$s3[] = isset($nilaiAwalInt[0]) ? $nilaiAwalInt[0] : 0;
$s3Int = array_map('intval', $s2);
for ($i = 1; $i < count($s2Int); $i++) {
$s3Int[$i] = round($alpha * $s2Int[$i] + (1 - $alpha) * $s3Int[$i - 1], 2);
}
//AT
$at = array();
$atInt = array_map('intval', $at);
for ($i = 1; $i < count($s1Int); $i++) {
$atInt[$i] = round(3 * $s1Int[$i] - 3 * $s2Int[$i] + $s3Int[$i], 2);
}
//BT
$bt = array();
$btInt = array_map('intval', $bt);
for ($i = 1; $i < count($s1Int); $i++) {
$btInt[$i] = round($alpha / 2 * pow(1 - $alpha, 2) * ((6 - 5 * $alpha) * $s1Int[$i] - (10 - 8 * $alpha) * $s2Int[$i] + (4 - 3 * $alpha) * $s3Int[$i]), 2);
}
//CT
$ct = array();
$ctInt = array_map('intval', $ct);
for ($i = 1; $i < count($s1Int); $i++) {
$ctInt[$i] = round(pow($alpha, 2) / pow(1 - $alpha, 2) * ($s1Int[$i] - 2 * $s2Int[$i] + $s3Int[$i]), 2);
}
//FT+M
$ft = array();
$ftInt = array_map('intval', $ft);
for ($i = 1; $i < count($atInt) + 1; $i++) {
$ftInt[$i] = round($atInt[$i] + $btInt[$i] * 1 + 1 / 2 * $ctInt[$i] * pow(1, 2), 0);
}
//at-ft
$selisih = array();
$selisihInt = array_map('intval', $selisih);
for ($i = 1; $i < count($aktualInt); $i++) {
$selisihInt[$i] = $aktualInt[$i] - $ftInt[$i];
}
//(at-ft)2
$selisihPangkat = array();
$selisihPangkatInt = array_map('intval', $selisihPangkat);
for ($i = 1; $i < count($selisihInt) + 1; $i++) {
$selisihPangkatInt[$i] = pow($selisihInt[$i], 2);
}
//abs((at-ft)/at)*100
$selisihSeratus = array();
$selisihSeratusInt = array_map('intval', $selisihSeratus);
for ($i = 1; $i < count($selisihInt) + 1; $i++) {
$selisihSeratusInt[$i] = abs($selisihInt[$i] / $aktualInt[$i]);
}
$jumlah = count(array_slice($aktualInt, 1));
$MAD = array_sum(array_map("abs", $selisihInt));
$MSE = array_sum($selisihPangkatInt);
$MAPE = round(array_sum($selisihSeratusInt), 3);
// echo "<div class='' hidden>";
// $hasilMSE = round($MSE / ($jumlah - 1), 3);
// $hasilMSE = ($jumlah - 1) <= 0 ? round(0, 3) : round($MSE / ($jumlah - 1), 3);
$jmlMSECast = ($jumlah - 1) == 0 ? 1 : ($jumlah - 1);
$jumlah = $jumlah == 0 ? 1 : $jumlah;
$hasilMAD = round($MAD / $jumlah, 3);
$hasilMSE = round($MSE / $jmlMSECast, 3);
$hasilMAPE = round($MAPE / $jumlah * 100, 3);
$hasilKeseluruhan = $hasilMAD + $hasilMSE + $hasilMAPE;
$ratarataKesalahan = round($hasilKeseluruhan / 3, 3);
// echo "</div>";
$data['bulan'] = $bulan;
$data['aktual'] = $aktualInt;
$data['ft'] = $ftInt;
// $data['dt']['bulan'] = $bulan;
// $data['dt']['aktual']= $aktualInt;
// $data['dt']['ft']= $ftInt;
$data['hasilMAD'] = $hasilMAD;
$data['hasilMSE'] = $hasilMSE;
$data['hasilMAPE'] = $hasilMAPE;
$data['ratarataKesalahan'] = $ratarataKesalahan;
$data['pengunjungBulan'] = end($ftInt);
// echo "<pre>";
// print_r($data['pengunjungBulan']);
// echo "</pre>";
// echo "<pre>";
// print_r($data['aktual']);
// echo "</pre>";
// echo "<pre>";
// print_r($data['ft']);
// echo "</pre>";
// echo json_encode($data['bulan']);
$this->load->view('ramalPengunjung', $data);
}
public function ramal_pengunjungAll($id_pelayanan)
{
$data['pelayanan'] = $this->M_pelayanan->get_detail($id_pelayanan)->row();
$awal = $this->db->query('SELECT tanggal FROM pengunjung order by tanggal asc')->row();
$akhir = $this->db->query('SELECT tanggal FROM pengunjung order by tanggal desc')->row();
$starter = 0;
$lb = 0;
$aktual = [];
$bulan = [];
for ($t = date("Y", strtotime($awal->tanggal)); $t <= date("Y", strtotime($akhir->tanggal)); $t++) {
if ($starter == 0) {
$lb = date("m", strtotime($awal->tanggal));
} else {
$lb = 1;
}
for ($b = $lb; $b <= 13; $b++) {
if ($b > 12) {
$starter = 1;
break;
} else {
$s_bln = sprintf("%02d", $b);
$s_thn = sprintf("%02d", $t);
$detail = $this->db->query("
SELECT pl.nama as nama_pelayanan, YEAR(tanggal) as tahun, MONTH(tanggal) as bulan, COUNT(p.id) as jumlah
FROM pengunjung p
JOIN pelayanan pl ON p.id_pelayanan= pl.id
WHERE p.id_pelayanan = '$id_pelayanan'
AND MONTH(p.tanggal) = '$s_bln'
AND YEAR(p.tanggal) = '$s_thn'
GROUP BY MONTH(p.tanggal), YEAR(p.tanggal)
")->row();
if ($t == date("Y", strtotime($akhir->tanggal)) && $b > date("m", strtotime($akhir->tanggal))) {
break;
} else {
if ($detail) {
$aktual[] = $detail->jumlah;
$bulan[] = sprintf("%02d", $b) . " - " . $t;
}
// else {
// //echo sprintf("%02d", $b)."-".$t."==".""."|"."0"."<br>";
// $aktual[]= 0;
// $bulan[] = sprintf("%02d",$b)." - ".$t;
// }
}
}
}
}
$alpha = array(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9);
for ($a = 0; $a < count($alpha); $a++) {
$aktualInt = array_map('intval', $aktual);
$nilaiAwal = array_slice($aktual, 0, 1);
$nilaiAwalInt = array_map('intval', $nilaiAwal);
//SMOOTHING 1
$s1[] = isset($nilaiAwalInt[0]) ? $nilaiAwalInt[0] : 0;
$s1Int = array_map('intval', $s1);
for ($i = 1; $i < count($aktualInt) + 1; $i++) {
$s1Int[$i] = round($alpha[$a] * $aktualInt[$i - 1] + (1 - $alpha[$a]) * $s1Int[$i - 1], 2);
}
//SMOOTHING 2
$s2[] = isset($nilaiAwalInt[0]) ? $nilaiAwalInt[0] : 0;
$s2Int = array_map('intval', $s2);
for ($i = 1; $i < count($s1Int); $i++) {
$s2Int[$i] = round($alpha[$a] * $s1Int[$i] + (1 - $alpha[$a]) * $s2Int[$i - 1], 2);
}
//SMOOTHING 3
$s3[] = isset($nilaiAwalInt[0]) ? $nilaiAwalInt[0] : 0;
$s3Int = array_map('intval', $s2);
for ($i = 1; $i < count($s2Int); $i++) {
$s3Int[$i] = round($alpha[$a] * $s2Int[$i] + (1 - $alpha[$a]) * $s3Int[$i - 1], 2);
}
//AT
$at = array();
$atInt = array_map('intval', $at);
for ($i = 1; $i < count($s1Int); $i++) {
$atInt[$i] = round(3 * $s1Int[$i] - 3 * $s2Int[$i] + $s3Int[$i], 2);
}
//BT
$bt = array();
$btInt = array_map('intval', $bt);
for ($i = 1; $i < count($s1Int); $i++) {
$btInt[$i] = round($alpha[$a] / 2 * pow(1 - $alpha[$a], 2) * ((6 - 5 * $alpha[$a]) * $s1Int[$i] - (10 - 8 * $alpha[$a]) * $s2Int[$i] + (4 - 3 * $alpha[$a]) * $s3Int[$i]), 2);
}
//CT
$ct = array();
$ctInt = array_map('intval', $ct);
for ($i = 1; $i < count($s1Int); $i++) {
$ctInt[$i] = round(pow($alpha[$a], 2) / pow(1 - $alpha[$a], 2) * ($s1Int[$i] - 2 * $s2Int[$i] + $s3Int[$i]), 2);
}
//FT+M
$ft = array();
$ftInt = array_map('intval', $ft);
for ($i = 1; $i < count($atInt) + 1; $i++) {
$ftInt[$i] = round($atInt[$i] + $btInt[$i] * 1 + 1 / 2 * $ctInt[$i] * pow(1, 2), 0);
}
//at-ft
$selisih = array();
$selisihInt = array_map('intval', $selisih);
for ($i = 1; $i < count($aktualInt); $i++) {
$selisihInt[$i] = $aktualInt[$i] - $ftInt[$i];
}
//(at-ft)2
$selisihPangkat = array();
$selisihPangkatInt = array_map('intval', $selisihPangkat);
for ($i = 1; $i < count($selisihInt) + 1; $i++) {
$selisihPangkatInt[$i] = pow($selisihInt[$i], 2);
}
//abs((at-ft)/at)*100
$selisihSeratus = array();
$selisihSeratusInt = array_map('intval', $selisihSeratus);
for ($i = 1; $i < count($selisihInt) + 1; $i++) {
$selisihSeratusInt[$i] = abs($selisihInt[$i] / $aktualInt[$i]);
}
$jumlah = count(array_slice($aktualInt, 1));
$MAD = array_sum(array_map("abs", $selisihInt));
$MSE = array_sum($selisihPangkatInt);
$MAPE = round(array_sum($selisihSeratusInt), 3);
// echo "<div class='' hidden>";
$hasilFtInt[$a] = end($ftInt);
$jmlMSECast = ($jumlah - 1) == 0 ? 1 : ($jumlah - 1);
$jumlah = $jumlah == 0 ? 1 : $jumlah;
// $jmlMSECast = ($jumlah - 1);
$hasilMAD[$a] = round($MAD / $jumlah, 3);
$hasilMSE[$a] = round($MSE / $jmlMSECast, 3);
$hasilMAPE[$a] = round($MAPE / $jumlah * 100, 3);
$hasilKeseluruhan = $hasilMAD[$a] + $hasilMSE[$a] + $hasilMAPE[$a];
$ratarataKesalahan[$a] = round($hasilKeseluruhan / 3, 3);
// echo "</div>";
}
$data['bulan'] = $bulan;
$data['aktual'] = $aktualInt;
$data['ft'] = $ftInt;
// $data['dt']['bulan'] = $bulan;
// $data['dt']['aktual']= $aktualInt;
// $data['dt']['ft']= $ftInt;
$data['alpha'] = $alpha;
$data['hasilFtint'] = $hasilFtInt;
$data['hasilMAD'] = $hasilMAD;
$data['hasilMSE'] = $hasilMSE;
$data['hasilMAPE'] = $hasilMAPE;
$data['ratarataKesalahan'] = $ratarataKesalahan;
$data['pengunjungBulan'] = end($ftInt);
// echo "<pre>";
// print_r($data['pengunjungBulan']);
// echo "</pre>";
// echo "<pre>";
// print_r($data['aktual']);
// echo "</pre>";
// echo "<pre>";
// print_r($data['ft']);
// echo "</pre>";
// echo json_encode($data['bulan']);
$this->load->view('ramalPengunjungAll', $data);
}
}