293 lines
10 KiB
PHP
293 lines
10 KiB
PHP
<?php
|
|
|
|
namespace App\Controllers;
|
|
|
|
use Dompdf\Dompdf;
|
|
use Dompdf\Options;
|
|
use App\Models\ModelPenilaian;
|
|
use App\Models\ModelDetailPenilaian;
|
|
use App\Models\ModelGuru;
|
|
use App\Models\ModelKriteria;
|
|
use App\Models\ModelAbsensi;
|
|
use App\Models\ModelAmal;
|
|
use App\Models\ModelSurat;
|
|
use App\Models\ModelJurnal;
|
|
|
|
class Penilaian extends BaseController
|
|
{
|
|
protected $PenilaianModel;
|
|
protected $DetailPenilaianModel;
|
|
protected $GuruModel;
|
|
protected $KriteriaModel;
|
|
protected $AbsensiModel;
|
|
protected $AmalModel;
|
|
protected $SuratModel;
|
|
protected $JurnalModel;
|
|
|
|
function __construct()
|
|
{
|
|
$this->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();
|
|
}
|
|
}
|