awal; $data['akhir'] = $request->akhir; $data['next_periode'] = 1; $data['moving_periode'] = $request->moving_periode; $data['title'] = "Hasil Perhitungan"; // Judul halaman // Ambil nilai pencarian dari input 'search' $data['q'] = $request->input('q'); // Ambil semua produk dari model Produk $produks = Produk::all(); $data['produks'] = []; // Loop untuk mengisi array $data['produks'] foreach ($produks as $produk) { $data['produks'][$produk->kode_produk] = $produk->nama_produk; } // Inisialisasi query untuk hasil perhitungan $query = Hasil::query() ->where('periode', $data['moving_periode']) ->whereIn('kode_produk', array_keys($data['produks'])); // Jika ada nilai pencarian, tambahkan kondisi pencarian if (!empty($data['q'])) { $query->where(function ($query) use ($data) { $query->where('kode_produk', 'like', '%' . $data['q'] . '%') ->orWhere('tanggal', 'like', '%' . $data['q'] . '%') ->orWhere('jumlah', 'like', '%' . $data['q'] . '%') ->orWhere('mape', 'like', '%' . $data['q'] . '%'); }); } $data['rows'] = $query->get(); return view('hitung.hitungHasil', $data); } function hasil(Request $request) { $data['q'] = $request->input('q'); $data['kode_produk'] = $request->input('kode_produk'); $data['title'] = 'Hasil Peramalan'; $data['limit'] = 25; $query = Hasil::where(function ($query) use ($data) { $query->where('nama_produk', 'like', '%' . $data['q'] . '%') ->orWhere('tb_hasil.kode_produk', 'like', '%' . $data['q'] . '%') ->orWhere('tb_hasil.periode', 'like', '%' . $data['q'] . '%'); })->leftJoin('tb_produk', 'tb_produk.kode_produk', '=', 'tb_hasil.kode_produk') ->orderBy('tanggal', 'DESC'); if ($data['kode_produk']) $query->where('tb_produk.kode_produk', $data['kode_produk']); $data['rows'] = $query->paginate($data['limit'])->withQueryString(); $data['no'] = $data['rows']->firstItem(); return view('hitung.hasil', $data); } function detail(Request $request) { $data['awal'] = $request->awal; $data['akhir'] = $request->akhir; $data['next_periode'] = 1; $data['moving_periode'] = $request->moving_periode; $data['title'] = "Hasil Perhitungan"; //judul halaman $data['search'] = $request->input('search'); $produks = Produk::all(); //mengambil semua produk $data['produks'] = array(); foreach ($produks as $row) { $data['produks'][$row->kode_produk] = $row->nama_produk; } foreach ($data['produks'] as $kode_produk => $nama_produk) { $rows = get_results("SELECT MAX(tanggal) as tanggal, SUM(jumlah) AS total FROM tb_penjualan WHERE tanggal>='$data[awal]' AND tanggal<='$data[akhir]' AND kode_produk='$kode_produk' GROUP BY YEAR(tanggal), MONTH(tanggal)"); $periode_data = array(); foreach ($rows as $row) { $periode_data[$row->tanggal] = $row->total; } $ma = new MovingAverage($periode_data, $data['moving_periode'], $data['next_periode']); $max = max(array_keys($ma->yt)); foreach ($ma->next_ft as $key => $val) { $tanggal = date('Y-m-d', strtotime("+$key month", strtotime($max))); $tahun = date('Y', strtotime("+$key month", strtotime($max))); $bulan = date('m', strtotime("+$key month", strtotime($max))); Hasil::where('kode_produk', $kode_produk) ->where('periode', $data['moving_periode']) ->whereMonth('tanggal', $bulan) ->whereYear('tanggal', $tahun) ->delete(); $hasil = new Hasil([ 'tanggal' => $tanggal, 'kode_produk' => $kode_produk, 'periode' => $data['moving_periode'], 'jumlah' => $val, 'mape' => $ma->error['MAPE'], ]); $hasil->save(); // Menambahkan logika kategori MAPE $akurasi = ''; if ($ma->error['MAPE'] >= 0 && $ma->error['MAPE'] <= 0.10) { $akurasi = 'Sangat Baik'; } elseif ($ma->error['MAPE'] > 0.10 && $ma->error['MAPE'] <= 0.20) { $akurasi = 'Baik'; } elseif ($ma->error['MAPE'] > 0.20 && $ma->error['MAPE'] <= 0.50) { $akurasi = 'Cukup Baik'; } elseif ($ma->error['MAPE'] > 0.50) { $akurasi = 'Sangat Buruk'; } // Update hasil dengan kategori MAPE $hasil->akurasi = $akurasi; $hasil->save(); } } // Ambil hasil dari database $query = Hasil::where('periode', $data['moving_periode']) ->whereIn('kode_produk', array_keys($data['produks'])); // Apply search filter if present if (!empty($data['q'])) { $query->where(function ($search) use ($data) { $search->where('kode_produk', 'like', '%' . $data['q'] . '%') ->orWhere('tanggal', 'like', '%' . $data['q'] . '%') ->orWhere('jumlah', 'like', '%' . $data['q'] . '%') ->orWhere('mape', 'like', '%' . $data['q'] . '%'); }); } $data['results'] = $query->get()->groupBy('kode_produk'); return view('hitung.hitungHasil', $data); //memanggil view hitung.hasil } function cetak(Request $request) { $moving_periode = 3; $data['moving_periode'] = $moving_periode; $data['title'] = "Hasil Perhitungan"; $produks = Produk::all(); $data['produks'] = []; foreach ($produks as $row) { $data['produks'][$row->kode_produk] = $row->nama_produk; } $data['results'] = Hasil::where('periode', $data['moving_periode']) ->whereIn('kode_produk', array_keys($data['produks'])) ->get() ->groupBy('kode_produk'); // Log data untuk memastikan data yang diterima return view('hitung.cetak', $data); } }