distinct()->orderBy('bulan')->pluck('bulan'); // Konversi ke array bulan teks manual dalam bahasa Indonesia $bulanOptions = $availableMonths->mapWithKeys(function ($item) { return [$item => $this->getNamaBulan($item)]; }); // Bulan aktif dari request atau pakai bulan terakhir $bulanDipilih = $request->get('bulan', $availableMonths->first()); // Ambil data peringkat berdasarkan bulan $peringkat = Peringkat::where('bulan', $bulanDipilih)->join('brands', 'peringkat.brands', '=', 'brands.id')->select('peringkat.peringkat', 'brands.nama_brand as brand_nama', 'peringkat.total')->orderBy('peringkat.peringkat')->get(); // Cek apakah data sudah ada untuk bulan tersebut $hasData = $peringkat->isNotEmpty(); return view('peringkat', compact('peringkat', 'bulanOptions', 'bulanDipilih', 'hasData')); } private function getNamaBulan($bulan) { $namaBulan = [ 1 => 'Januari', 2 => 'Februari', 3 => 'Maret', 4 => 'April', 5 => 'Mei', 6 => 'Juni', 7 => 'Juli', 8 => 'Agustus', 9 => 'September', 10 => 'Oktober', 11 => 'November', 12 => 'Desember', ]; return $namaBulan[$bulan] ?? 'Tidak Diketahui'; } private function getUrutanBulan() { $startMonth = session('startMonth') ?? 1; $bulan = []; for ($i = 0; $i < 4; $i++) { $bulan[] = (($startMonth + $i - 1) % 12) + 1; } return $bulan; } public function proses(Request $request) { // Kosongkan tabel peringkat dulu (jika perlu) Peringkat::truncate(); // Ambil semua bulan unik dari tabel hasil $bulans = Hasil::select('bulan')->distinct()->orderBy('bulan')->pluck('bulan'); // Ambil semua brand $brands = Brand::all(); $jumlahBrand = $brands->count(); // hitung total brand $maxPeringkat = $jumlahBrand; foreach ($bulans as $bulan) { $peringkatData = []; foreach ($brands as $brand) { // Ambil total, jika tidak ditemukan isi dengan 0 $total = Hasil::where('brands', $brand->id)->where('bulan', $bulan)->value('total_bulan') ?? 0; $peringkatData[] = [ 'bulan' => $bulan, 'brands' => $brand->id, 'total' => $total, ]; } // Urutkan descending berdasarkan total usort($peringkatData, fn($a, $b) => $b['total'] <=> $a['total']); // Tambahkan peringkat 1 - jumlah brand (dinamis) $rank = 1; foreach ($peringkatData as $data) { Peringkat::create([ 'bulan' => $data['bulan'], 'brands' => $data['brands'], 'total' => $data['total'], 'peringkat' => $rank, ]); $rank++; if ($rank > $maxPeringkat) { $rank = 1; } } } return redirect()->route('peringkat.index')->with('success', 'Peringkat Brand berhasil dihitung.'); } public function reset() { DB::table('peringkat')->truncate(); return redirect()->route('peringkat.index')->with('success', 'Peringkat Brand berhasil direset.'); } }