MIF_E31222519/app/Http/Controllers/DashboardController.php

195 lines
6.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Siswa;
use App\Models\Guru;
use App\Models\Kelas;
use App\Models\User;
use App\Models\Mapel;
use App\Models\Jurusan;
use App\Models\Pelajaran;
use Illuminate\Support\Facades\DB;
class DashboardController extends Controller
{
public function index()
{
$kelas = DB::table('kelas')->get();
$jumlahSiswa = DB::table('siswa')->count();
$jumlahGuru = DB::table('guru')->count();
$jumlahKelas = DB::table('kelas')->count();
$jumlahUser = DB::table('user')->count();
$jumlahMapel = DB::table('pelajaran')->count();
$jumlahJurusan = DB::table('jurusan')->count();
$siswaPerJurusan = DB::table('siswa')
->join('kelas', 'siswa.id_kelas', '=', 'kelas.id_kelas')
->join('jurusan', 'kelas.id_jurusan', '=', 'jurusan.id_jurusan')
->select('jurusan.nama_jurusan', DB::raw('count(*) as total'))
->groupBy('jurusan.nama_jurusan')
->get();
$jurusanLabels = $siswaPerJurusan->pluck('nama_jurusan');
$jurusanData = $siswaPerJurusan->pluck('total');
$siswaPerKelas = DB::table('siswa')
->join('kelas', 'siswa.id_kelas', '=', 'kelas.id_kelas')
->select('kelas.nama_kelas', DB::raw('count(*) as total'))
->groupBy('kelas.nama_kelas')
->get();
$kelasLabels = $siswaPerKelas->pluck('nama_kelas');
$kelasData = $siswaPerKelas->pluck('total');
// Get data for filters
$mapelList = DB::table('pelajaran')->get();
$guruList = DB::table('guru')->get();
// Add this query for kelasList
$kelasList = DB::table('kelas')
->join('jurusan', 'kelas.id_jurusan', '=', 'jurusan.id_jurusan')
->select(
'kelas.id_kelas',
'kelas.jenjang',
'kelas.nama_kelas',
'jurusan.nama_jurusan'
)
->orderBy('kelas.jenjang')
->orderBy('jurusan.nama_jurusan')
->orderBy('kelas.nama_kelas')
->get();
// Get saved filters from session
$savedFilters = session('jadwal_filters', [
'hari' => '',
'mapel' => '',
'guru' => '',
'kelas' => ''
]);
// Get filtered jadwal
$jadwalQuery = DB::table('jadwal_pelajaran')
->join('kode_pembelajaran', 'jadwal_pelajaran.id_kodepembelajaran', '=', 'kode_pembelajaran.id_kodepembelajaran')
->join('pelajaran', 'kode_pembelajaran.id_pelajaran', '=', 'pelajaran.id_pelajaran')
->join('guru', 'kode_pembelajaran.id_guru', '=', 'guru.id_guru')
->join('kelas', 'jadwal_pelajaran.id_kelas', '=', 'kelas.id_kelas')
->join('jurusan', 'kelas.id_jurusan', '=', 'jurusan.id_jurusan')
->select(
'jadwal_pelajaran.id_hari',
'jadwal_pelajaran.id_jam_pelajaran',
'pelajaran.nama_pelajaran',
'guru.nama_guru',
'kelas.jenjang',
'kelas.nama_kelas',
'jurusan.nama_jurusan'
);
if (!empty($savedFilters['hari'])) {
$jadwalQuery->where('jadwal_pelajaran.id_hari', $savedFilters['hari']);
}
if (!empty($savedFilters['mapel'])) {
$jadwalQuery->where('pelajaran.id_pelajaran', $savedFilters['mapel']);
}
if (!empty($savedFilters['guru'])) {
$jadwalQuery->where('guru.id_guru', $savedFilters['guru']);
}
if (!empty($savedFilters['kelas'])) {
$jadwalQuery->where('kelas.id_kelas', $savedFilters['kelas']);
}
$jadwalPelajaran = $jadwalQuery
->orderBy('jadwal_pelajaran.id_hari')
->orderBy('jadwal_pelajaran.id_jam_pelajaran')
->get();
// Get pelanggaran data for the chart
$pelanggaranData = $this->getPelanggaranData();
return view('dasboard', compact(
'jumlahSiswa',
'jumlahGuru',
'jumlahKelas',
'jumlahUser',
'jumlahMapel',
'jumlahJurusan',
'jurusanLabels',
'jurusanData',
'kelasLabels',
'kelasData',
'mapelList',
'guruList',
'kelasList',
'jadwalPelajaran',
'savedFilters',
'kelas',
'pelanggaranData'
));
}
private function getPelanggaranData($idKelas = null)
{
try {
$query = DB::table('monitoring_siswa.pelanggaran')
->join('monitoring_siswa.list_pelanggaran', 'monitoring_siswa.pelanggaran.id_listpelanggaran', '=', 'monitoring_siswa.list_pelanggaran.id_listpelanggaran')
->join('monitoring_siswa.bentuk_pelanggaran', 'monitoring_siswa.list_pelanggaran.id_bentukpelanggaran', '=', 'monitoring_siswa.bentuk_pelanggaran.id_bentukpelanggaran')
->join('monitoring_siswa.siswa', 'monitoring_siswa.pelanggaran.id_siswa', '=', 'monitoring_siswa.siswa.id_siswa');
if ($idKelas) {
$query->where('monitoring_siswa.siswa.id_kelas', $idKelas);
}
$result = $query
->select('monitoring_siswa.bentuk_pelanggaran.nama_bentuk_pelanggaran', DB::raw('COUNT(*) as jumlah'))
->groupBy('monitoring_siswa.bentuk_pelanggaran.nama_bentuk_pelanggaran')
->get();
return [
'labels' => $result->pluck('nama_bentuk_pelanggaran')->toArray(),
'data' => $result->pluck('jumlah')->toArray()
];
} catch (\Exception $e) {
return [
'labels' => [],
'data' => [],
'error' => $e->getMessage()
];
}
}
public function updateFilter(Request $request)
{
$filters = [
'hari' => $request->input('hari'),
'mapel' => $request->input('mapel'),
'guru' => $request->input('guru'),
'kelas' => $request->input('kelas')
];
// Store filters in session
session(['jadwal_filters' => $filters]);
return response()->json(['success' => true]);
}
public function chartPelanggaran(Request $request)
{
try {
$idKelas = $request->id_kelas;
$data = $this->getPelanggaranData($idKelas);
return response()->json([
'success' => true,
'labels' => $data['labels'],
'data' => $data['data']
]);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'error' => $e->getMessage()
], 500);
}
}
}