PenilaianModel = new ModelPenilaian(); $this->DetailPenilaianModel = new ModelDetailPenilaian(); $this->GuruModel = new ModelGuru(); $this->KriteriaModel = new ModelKriteria(); $this->AbsensiModel = new ModelAbsensi(); $this->AmalModel = new ModelAmal(); $this->SuratModel = new ModelSurat(); $this->JurnalModel = new ModelJurnal(); } public function index() { $bulan_selected = $this->request->getPost('bulan'); $tahun_selected = $this->request->getPost('tahun'); if (session()->has('nip') && session()->has('username')) { $data = array( 'body' => 'Penilaian/list', 'username' => session('username'), 'nama' => session('nama'), 'nip' => session('nip'), 'hak_akses' => session('hak_akses'), 'bulan_selected' => $bulan_selected, 'tahun_selected' => $tahun_selected, 'nilaiBelum' => $this->DetailPenilaianModel->getPenilaianBelum(), ); if ($bulan_selected !== null || $tahun_selected !== null) { // Jika kategori dipilih, ambil data penilaian sesuai kategori $data['nilaiSudah'] = $this->DetailPenilaianModel->getPenilaianSudah($bulan_selected, $tahun_selected); } else { $bulan_selected = date('m'); $tahun_selected = date('Y'); // Jika kategori tidak dipilih, inisialisasi $perhitungan dengan array kosong $data['nilaiSudah'] = $this->DetailPenilaianModel->getPenilaianSudah($bulan_selected, $tahun_selected); } return view('index', $data); } else { // Jika pengguna belum login, arahkan ke halaman login return redirect()->to(base_url() . 'login'); } } public function insert() { // Ambil data bulan dan tahun dari form atau dari inputan mana pun yang sesuai dengan implementasi Anda $bulan = $this->request->getPost('bulan'); $tahun = $this->request->getPost('tahun'); // Simpan data penilaian ke dalam tabel penilaian $dataPenilaian = [ 'bulan' => $bulan, 'tahun' => $tahun, ]; if ($this->PenilaianModel->insert_penilaian($dataPenilaian)) { // Ambil Id Penilaian $idPenilaian = $this->PenilaianModel->insertID(); // Ambil semua data guru dari tabel guru $dataGuru = $this->GuruModel->getGuru(); // Simpan data detail penilaian ke dalam tabel detail_penilaian foreach ($dataGuru as $guru) { $dataDetailPenilaian = [ 'id_penilaian' => $idPenilaian, 'nip' => $guru->nip, ]; $insertDetail = $this->DetailPenilaianModel->insert($dataDetailPenilaian); if (!$insertDetail) { session()->setFlashdata('error', 'Gagal Menambahkan Data'); return redirect()->to(base_url() . 'penilaian/list'); } } session()->setFlashdata('success', 'Berhasil Menambahkan Data'); return redirect()->to(base_url() . 'penilaian/list'); } else { session()->setFlashdata('error', 'Gagal Menambahkan Data'); return redirect()->to(base_url() . 'penilaian/list'); } } public function edit($id) { if (session()->has('nip') && session()->has('username')) { $data_detailPenilaian = new ModelDetailPenilaian(); $detailPenilaian = $data_detailPenilaian->getById($id)->getRow(); if ($detailPenilaian) { $bulanSekarang = $detailPenilaian->bulan; // Bulan sekarang (1-12) $tahunSekarang = $detailPenilaian->tahun; // Tahun sekarang $nip = $detailPenilaian->nip; // Ambil data absensi 3 bulan terakhir $rekapAbsensi = $this->AbsensiModel->getRekapAbsensi($bulanSekarang, $tahunSekarang, $nip); // Ambil data amal yaumi 3 bulan terakhir $rekapAmal = $this->AmalModel->getRekapAmal($bulanSekarang, $tahunSekarang, $nip); // Ambil data jurnal mengajar 3 bulan terakhir $rekapJurnal = $this->JurnalModel->getRekapJurnal($bulanSekarang, $tahunSekarang, $nip); // Ambil data surat tugas 3 bulan terakhir $rekapTugas = $this->SuratModel->getRekapTugas($nip); // Ambil data surat panitia 3 bulan terakhir $rekapPanitia = $this->SuratModel->getRekapPanitia($nip); $data = array( 'body' => 'Penilaian/edit', 'username' => session('username'), 'nama' => session('nama'), 'nip' => session('nip'), 'hak_akses' => session('hak_akses'), 'data' => $detailPenilaian, 'rekap_absensi' => $rekapAbsensi, 'rekap_amal' => $rekapAmal, 'rekap_tugas' => $rekapTugas, 'rekap_panitia' => $rekapPanitia, 'rekap_jurnal' => $rekapJurnal, ); return view('index', $data); } else { // Handle jika detailPenilaian tidak ditemukan return redirect()->to(base_url() . 'error'); } } else { // Jika pengguna belum login, arahkan ke halaman login return redirect()->to(base_url() . 'login'); } } public function update($id) { $nip_penilai = $this->request->getVar('nip_penilai'); $tanggal = date('Y-m-d'); $k1 = $this->request->getVar('k1'); $k2 = $this->request->getVar('k2'); $k3 = $this->request->getVar('k3'); $k4 = $this->request->getVar('k4'); $k5 = $this->request->getVar('k5'); $k6 = $this->request->getVar('k6'); $k7 = $this->request->getVar('k7'); $k8 = $this->request->getVar('k8'); $k9 = $this->request->getVar('k9'); // Hitung nilai hasil $hasil = $this->hitungHasil($k1, $k2, $k3, $k4, $k5, $k6, $k7, $k8, $k9); $data = $this->DetailPenilaianModel->update($id, [ 'nip_penilai' => $nip_penilai, 'tanggal' => $tanggal, 'k1' => $k1, 'k2' => $k2, 'k3' => $k3, 'k4' => $k4, 'k5' => $k5, 'k6' => $k6, 'k7' => $k7, 'k8' => $k8, 'k9' => $k9, 'hasil' => $hasil, 'status' => 1, ]); if ($data == true) { return redirect()->to(base_url() . 'penilaian/list')->with('success', 'Penilaian Berhasil!'); } else { return redirect()->to(base_url() . 'penilaian/edit')->with('error', 'Penilaian Gagal!'); } } private function hitungHasil($k1, $k2, $k3, $k4, $k5, $k6, $k7, $k8, $k9) { // Ambil bobot dari tabel kriteria $bobot = [ 'k1' => $this->getBobotByKode('K1'), 'k2' => $this->getBobotByKode('K2'), 'k3' => $this->getBobotByKode('K3'), 'k4' => $this->getBobotByKode('K4'), 'k5' => $this->getBobotByKode('K5'), 'k6' => $this->getBobotByKode('K6'), 'k7' => $this->getBobotByKode('K7'), 'k8' => $this->getBobotByKode('K8'), 'k9' => $this->getBobotByKode('K9'), ]; // Normalisasi nilai $normalizedValues = []; foreach (['K1', 'K2', 'K3', 'K4', 'K5', 'K6', 'K7', 'K8', 'K9'] as $kodeKriteria) { $kriteria = strtolower($kodeKriteria); // Konversi kode kriteria menjadi huruf kecil $normalizedValues[$kriteria] = $this->normalisasi(${$kriteria}, $kodeKriteria); } // Hitung nilai hasil $hasil = 0; foreach ($normalizedValues as $kriteria => $value) { $hasil += $value * $bobot[$kriteria]; } return $hasil; } private function getBobotByKode($kode) { // Ambil bobot dari tabel kriteria berdasarkan kode kriteria // Implementasi ini bergantung pada struktur tabel dan model Anda // Gantilah dengan cara yang sesuai untuk aplikasi Anda return $this->KriteriaModel->getBobotByKode($kode); } private function normalisasi($nilai, $kriteria) { // Ambil tipe kriteria (benefit atau cost) dari tabel kriteria berdasarkan kode kriteria $tipe = $this->KriteriaModel->getTipeByKode($kriteria); // Tentukan nilai maksimum dan minimum berdasarkan tipe kriteria $max = ($tipe == 'Benefit') ? 4 : 1; $min = ($tipe == 'Benefit') ? 1 : 4; // Normalisasi nilai if ($tipe == 'Benefit') { $normalisasi = $nilai / $max; } else { $normalisasi = $min / $nilai; } return $normalisasi; } public function delete($id) { $this->DetailPenilaianModel->delete($id); return redirect()->to(base_url() . 'kriteria/list')->with('success', 'Data Berhasil Dihapus!'); } public function indexCetak() { return view('Penilaian/cetak'); } public function cetakPenilaian($id) { $data_detailPenilaian = new ModelDetailPenilaian(); $data['data'] = $data_detailPenilaian->getById($id)->getRow(); $data['dataP'] = $data_detailPenilaian->getByIdPenilai($id)->getRow(); // Mulai pembuatan PDF $dompdf = new Dompdf(); $options = new Options(); $dompdf->set_option('isRemoteEnabled', true); // Muat HTML ke Dompdf $dompdf->loadHtml(view('Penilaian/cetak',$data)); // Atur ukuran dan orientasi halaman (opsional) $dompdf->setPaper('A4', 'portrait'); // Render PDF $dompdf->render(); // Output PDF ke browser atau simpan di server $dompdf->stream("output.pdf", ["Attachment" => false]); // Jika ingin menyimpan PDF ke server, gunakan: // $dompdf->output(); } }