From a76652a485e7c7635fbfe3e5caa1fac765f3a0f7 Mon Sep 17 00:00:00 2001
From: ericko-cyber
Date: Mon, 7 Jul 2025 13:23:49 +0700
Subject: [PATCH] up
up
---
app/Controllers/Admin/Siswa.php | 143 +++++++++++++-----
app/Controllers/Admin/Tahun.php | 116 +++++++++-----
app/Views/admin/siswa/edit.php | 59 ++++++--
app/Views/admin/tahun/tambah.php | 48 ++----
.../staff_keuangan/input_tagihan/index.php | 4 +-
assets/template/template-siswa.xlsx | Bin 6401 -> 8567 bytes
.../file/1751868964_fbee9982b9a1b785f9a6.xlsx | Bin 0 -> 9282 bytes
.../file/1751869344_c4e1c9165e33b9457c7b.xlsx | Bin 0 -> 9282 bytes
8 files changed, 251 insertions(+), 119 deletions(-)
create mode 100644 assets/upload/file/1751868964_fbee9982b9a1b785f9a6.xlsx
create mode 100644 assets/upload/file/1751869344_c4e1c9165e33b9457c7b.xlsx
diff --git a/app/Controllers/Admin/Siswa.php b/app/Controllers/Admin/Siswa.php
index 7b22ab0..9c925d5 100644
--- a/app/Controllers/Admin/Siswa.php
+++ b/app/Controllers/Admin/Siswa.php
@@ -156,67 +156,107 @@ class Siswa extends BaseController
}
}
- // Fungsi untuk edit data siswa
public function edit($id_siswa)
{
$m_siswa = new Siswa_model();
$siswa = $m_siswa->detail($id_siswa);
- if ($this->request->getMethod() === 'post' && $this->validate([
+ $rules = [
'nama_siswa' => 'required',
+ 'nis' => 'required',
+ 'jenis_kelamin' => 'required',
+ 'kategori' => 'required',
+ 'status_siswa' => 'required',
+ 'id_tahun' => 'required',
+ 'id_kelas' => 'required',
+ 'telepon' => 'required',
+ 'email' => 'required|valid_email',
+
+ // Validasi gambar
'gambar' => [
+ 'permit_empty',
'ext_in[gambar,jpg,jpeg,gif,png,svg]',
'max_size[gambar,4096]',
],
- ])) {
- // Penanganan unggah gambar (update)
+
+ // Validasi ortu dan wali sebagai input opsional
+ 'nama_ayah' => 'permit_empty',
+ 'telepon_ayah' => 'permit_empty',
+ 'nama_ibu' => 'permit_empty',
+ 'telepon_ibu' => 'permit_empty',
+ 'nama_wali' => 'permit_empty',
+ 'telepon_wali' => 'permit_empty',
+ ];
+
+ $messages = [
+ 'required' => '{field} wajib diisi.',
+ 'valid_email' => 'Format email tidak valid.',
+ 'ext_in' => 'Format gambar tidak didukung (hanya jpg, jpeg, png, gif, svg).',
+ 'max_size' => 'Ukuran gambar maksimal 4MB.',
+ ];
+
+ if ($this->request->getMethod() === 'post' && $this->validate($rules, $messages)) {
+ // Ambil data input
+ $nama_ayah = $this->request->getPost('nama_ayah');
+ $telepon_ayah = $this->request->getPost('telepon_ayah');
+ $nama_ibu = $this->request->getPost('nama_ibu');
+ $telepon_ibu = $this->request->getPost('telepon_ibu');
+ $nama_wali = $this->request->getPost('nama_wali');
+ $telepon_wali = $this->request->getPost('telepon_wali');
+
+ // Validasi logika ortu/wali
+ if (empty($nama_ayah) && empty($nama_ibu) && empty($nama_wali)) {
+ session()->setFlashdata('error', 'Jika nama ayah dan ibu kosong, maka nama wali wajib diisi.');
+ return redirect()->back()->withInput();
+ }
+
+ if (empty($telepon_ayah) && empty($telepon_ibu) && empty($telepon_wali)) {
+ session()->setFlashdata('error', 'Jika telepon ayah dan ibu kosong, maka telepon wali wajib diisi.');
+ return redirect()->back()->withInput();
+ }
+
+ // Penanganan unggah gambar
$gambar = $this->request->getFile('gambar');
if ($gambar && $gambar->isValid() && !$gambar->hasMoved()) {
$namabaru = $gambar->getRandomName();
- $gambar->move(WRITEPATH . 'uploads', $namabaru); // Simpan file di folder "uploads"
+ $gambar->move(WRITEPATH . 'uploads', $namabaru);
} else {
- // Jika tidak ada gambar baru yang diunggah, gunakan gambar lama
- $namabaru = $siswa->gambar; // Ambil gambar lama jika tidak ada gambar baru
+ $namabaru = $siswa->gambar;
}
- // Membuat slug otomatis jika slug kosong
- $slug_siswa = $siswa->slug_siswa;
- if (empty($slug_siswa)) {
- $slug_siswa = $this->createSlug($this->request->getPost('nama_siswa')); // Jika slug kosong, buat slug
- }
+ // Slug otomatis
+ $slug_siswa = $siswa->slug_siswa ?: $this->createSlug($this->request->getPost('nama_siswa'));
- // Menangkap data jenis pembiayaan
- $jenis_pembiayaan = $this->request->getPost('jenis_pembiayaan');
-
- // Menyimpan perubahan data
+ // Data yang akan disimpan
$data = [
'nama_siswa' => $this->request->getPost('nama_siswa'),
- 'slug_siswa' => $slug_siswa, // Masukkan slug_siswa
+ 'slug_siswa' => $slug_siswa,
'nis' => $this->request->getPost('nis'),
'jenis_kelamin' => $this->request->getPost('jenis_kelamin'),
'telepon' => $this->request->getPost('telepon'),
'email' => $this->request->getPost('email'),
- 'gambar' => $namabaru, // Simpan nama gambar
+ 'gambar' => $namabaru,
'status_siswa' => $this->request->getPost('status_siswa'),
'id_tahun' => $this->request->getPost('id_tahun'),
'id_kelas' => $this->request->getPost('id_kelas'),
- 'nama_ayah' => $this->request->getPost('nama_ayah'),
- 'telepon_ayah' => $this->request->getPost('telepon_ayah'),
- 'nama_ibu' => $this->request->getPost('nama_ibu'),
- 'telepon_ibu' => $this->request->getPost('telepon_ibu'),
- 'kategori' => $jenis_pembiayaan, // Menyimpan jenis pembiayaan
+ 'nama_ayah' => $nama_ayah,
+ 'telepon_ayah' => $telepon_ayah,
+ 'nama_ibu' => $nama_ibu,
+ 'telepon_ibu' => $telepon_ibu,
+ 'nama_wali' => $nama_wali,
+ 'telepon_wali' => $telepon_wali,
+ 'kategori' => $this->request->getPost('kategori'),
];
- // Menyimpan data ke database
if ($m_siswa->update($id_siswa, $data)) {
- $this->session->setFlashdata('sukses', 'Data telah disimpan');
+ session()->setFlashdata('sukses', 'Data siswa berhasil diperbarui.');
} else {
- $this->session->setFlashdata('error', 'Terjadi kesalahan, data tidak bisa disimpan');
+ session()->setFlashdata('error', 'Terjadi kesalahan saat menyimpan data.');
}
return redirect()->to(base_url('admin/siswa'));
} else {
- // Kirim data ke view untuk menampilkan form edit dengan data yang sudah ada
+ // Jika validasi gagal atau belum disubmit
$data = [
'title' => 'Edit Siswa: ' . $siswa->nama_siswa,
'siswa' => $siswa,
@@ -232,7 +272,6 @@ class Siswa extends BaseController
$m_kelas = new Kelas_model();
$m_tahun = new Tahun_model();
-
$kelas = $m_kelas->listing();
$tahun = $m_tahun->listing();
@@ -255,12 +294,11 @@ class Siswa extends BaseController
$filepath = WRITEPATH . '../assets/upload/file/' . $filename;
$ext = $file->getClientExtension();
- // Pilih reader berdasarkan ekstensi file
if ($ext == 'csv') {
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Csv');
} elseif ($ext == 'xls') {
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xls');
- } else { // xlsx
+ } else {
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
}
@@ -269,6 +307,7 @@ class Siswa extends BaseController
$worksheet = $spreadsheet->getActiveSheet();
$i = 1;
+ $errors = [];
foreach ($worksheet->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
@@ -278,8 +317,32 @@ class Siswa extends BaseController
$cells[] = $cell->getValue();
}
- if ($i > 1) { // Lewati header
- if (empty($cells[1])) {
+ if ($i > 1) {
+ if (empty($cells[1])) { // Lewati jika NIS kosong
+ $i++;
+ continue;
+ }
+
+ // Ambil data ortu/wali
+ $nama_ayah = $cells[7];
+ $nama_ibu = $cells[8];
+ $nama_wali = $cells[9];
+ $telepon_wali = $cells[10];
+ $telepon_ayah = $cells[11];
+ $telepon_ibu = $cells[12];
+
+ // Validasi jika nama ayah & ibu kosong, maka nama wali wajib
+ if (empty($nama_ayah) && empty($nama_ibu) && empty($nama_wali)) {
+ $errors[] = "Baris ke-$i: Nama wali wajib diisi jika nama ayah dan ibu kosong.";
+ }
+
+ // Validasi jika telepon ayah & ibu kosong, maka telepon wali wajib
+ if (empty($telepon_ayah) && empty($telepon_ibu) && empty($telepon_wali)) {
+ $errors[] = "Baris ke-$i: Telepon wali wajib diisi jika telepon ayah dan ibu kosong.";
+ }
+
+ // Skip insert jika ada error
+ if (!empty($errors)) {
$i++;
continue;
}
@@ -298,10 +361,12 @@ class Siswa extends BaseController
'password_hint' => null,
'jenis_kelamin' => $cells[5],
'isi' => $cells[6],
- 'nama_ayah' => $cells[7],
- 'nama_ibu' => $cells[8],
- 'telepon_ayah' => $cells[9],
- 'telepon_ibu' => $cells[10],
+ 'nama_ayah' => $nama_ayah,
+ 'nama_ibu' => $nama_ibu,
+ 'nama_wali' => $nama_wali,
+ 'telepon_wali' => $telepon_wali,
+ 'telepon_ayah' => $telepon_ayah,
+ 'telepon_ibu' => $telepon_ibu,
'kelompok' => null,
'gambar' => null,
'status_siswa' => 'Aktif',
@@ -315,6 +380,11 @@ class Siswa extends BaseController
$i++;
}
+ if (!empty($errors)) {
+ $this->session->setFlashdata('error', implode(' ', $errors));
+ return redirect()->back()->withInput();
+ }
+
$this->session->setFlashdata('sukses', 'Data siswa berhasil diimpor.');
return redirect()->to(base_url('admin/siswa'));
} else {
@@ -328,6 +398,7 @@ class Siswa extends BaseController
}
}
+
public function proses()
{
$m_siswa = new Siswa_model();
diff --git a/app/Controllers/Admin/Tahun.php b/app/Controllers/Admin/Tahun.php
index 1844e51..e013e08 100644
--- a/app/Controllers/Admin/Tahun.php
+++ b/app/Controllers/Admin/Tahun.php
@@ -1,4 +1,5 @@
-listing();
$total = $m_tahun->total();
// Start validasi
- if($this->request->getMethod() === 'post' && $this->validate(
+ if ($this->request->getMethod() === 'post' && $this->validate(
[
'nama_tahun' => 'required|min_length[1]|is_unique[tahun.nama_tahun]',
- ])) {
+ ]
+ )) {
// masuk database
- $data = [ 'id_user' => $this->session->get('id_user'),
- 'nama_tahun' => $this->request->getPost('nama_tahun'),
- 'tahun_mulai' => $this->request->getPost('tahun_mulai'),
- 'tahun_selesai' => $this->request->getPost('tahun_selesai'),
- 'keterangan' => $this->request->getPost('keterangan')
- ];
+ $data = [
+ 'id_user' => $this->session->get('id_user'),
+ 'nama_tahun' => $this->request->getPost('nama_tahun'),
+ 'tahun_mulai' => $this->request->getPost('tahun_mulai'),
+ 'tahun_selesai' => $this->request->getPost('tahun_selesai'),
+ 'keterangan' => $this->request->getPost('keterangan')
+ ];
$m_tahun->tambah($data);
// masuk database
- $this->session->setFlashdata('sukses','Data telah ditambah');
+ $this->session->setFlashdata('sukses', 'Data telah ditambah');
return redirect()->to(base_url('admin/tahun'));
- }else{
- $data = [ 'title' => 'Master Tahun Ajaran: '.$total->total,
- 'tahun' => $tahun,
- 'content' => 'admin/tahun/index'
- ];
- echo view('admin/layout/wrapper',$data);
+ } else {
+ $data = [
+ 'title' => 'Master Tahun Ajaran: ' . $total->total,
+ 'tahun' => $tahun,
+ 'content' => 'admin/tahun/index'
+ ];
+ echo view('admin/layout/wrapper', $data);
}
}
// edit
public function edit($id_tahun)
{
-
+
$m_tahun = new Tahun_model();
$tahun = $m_tahun->detail($id_tahun);
// Start validasi
- if($this->request->getMethod() === 'post' && $this->validate(
+ if ($this->request->getMethod() === 'post' && $this->validate(
[
- 'nama_tahun' => 'required|min_length[1]',
- ])) {
-
- $data = [ 'id_tahun' => $id_tahun,
- 'id_user' => $this->session->get('id_user'),
- 'nama_tahun' => $this->request->getPost('nama_tahun'),
- 'tahun_mulai' => $this->request->getPost('tahun_mulai'),
- 'tahun_selesai' => $this->request->getPost('tahun_selesai'),
- 'keterangan' => $this->request->getPost('keterangan')
- ];
+ 'nama_tahun' => 'required|min_length[1]',
+ ]
+ )) {
+
+ $data = [
+ 'id_tahun' => $id_tahun,
+ 'id_user' => $this->session->get('id_user'),
+ 'nama_tahun' => $this->request->getPost('nama_tahun'),
+ 'tahun_mulai' => $this->request->getPost('tahun_mulai'),
+ 'tahun_selesai' => $this->request->getPost('tahun_selesai'),
+ 'keterangan' => $this->request->getPost('keterangan')
+ ];
$m_tahun->edit($data);
// masuk database
- $this->session->setFlashdata('sukses','Data telah diedit');
+ $this->session->setFlashdata('sukses', 'Data telah diedit');
return redirect()->to(base_url('admin/tahun'));
- }else{
- $data = [ 'title' => 'Edit Tahun Ajaran: '.$tahun->nama_tahun,
- 'tahun' => $tahun,
- 'content' => 'admin/tahun/edit'
- ];
- echo view('admin/layout/wrapper',$data);
+ } else {
+ $data = [
+ 'title' => 'Edit Tahun Ajaran: ' . $tahun->nama_tahun,
+ 'tahun' => $tahun,
+ 'content' => 'admin/tahun/edit'
+ ];
+ echo view('admin/layout/wrapper', $data);
}
}
+ public function tambah()
+ {
+ $m_tahun = new \App\Models\Tahun_model();
+
+ // Validasi input
+ if ($this->request->getMethod() === 'post' && $this->validate([
+ 'nama_tahun' => 'required|min_length[1]|is_unique[tahun.nama_tahun]',
+ 'tahun_mulai' => 'required|numeric',
+ 'tahun_selesai' => 'required|numeric',
+ ])) {
+ // Data yang disimpan ke database
+ $data = [
+ 'id_user' => $this->session->get('id_user'),
+ 'nama_tahun' => $this->request->getPost('nama_tahun'),
+ 'tahun_mulai' => $this->request->getPost('tahun_mulai'),
+ 'tahun_selesai' => $this->request->getPost('tahun_selesai'),
+ 'keterangan' => $this->request->getPost('keterangan'),
+ 'tanggal_update' => date('Y-m-d H:i:s')
+ ];
+
+ $m_tahun->tambah($data);
+
+ $this->session->setFlashdata('sukses', 'Data tahun ajaran berhasil ditambahkan');
+ return redirect()->to(base_url('admin/tahun/index'));
+ } else {
+ // Validasi gagal
+ return redirect()->back()->withInput()->with('errors', $this->validator->getErrors());
+ }
+ }
+
+
// delete
public function delete($id_tahun)
{
-
+
$m_tahun = new Tahun_model();
$data = ['id_tahun' => $id_tahun];
$m_tahun->delete($data);
// masuk database
- $this->session->setFlashdata('sukses','Data telah dihapus');
+ $this->session->setFlashdata('sukses', 'Data telah dihapus');
return redirect()->to(base_url('admin/tahun'));
}
-}
\ No newline at end of file
+}
diff --git a/app/Views/admin/siswa/edit.php b/app/Views/admin/siswa/edit.php
index da75a7b..8fbfe16 100644
--- a/app/Views/admin/siswa/edit.php
+++ b/app/Views/admin/siswa/edit.php
@@ -1,4 +1,5 @@
-id_siswa));
-echo csrf_field();
+echo form_open_multipart(base_url('admin/siswa/edit/' . $siswa->id_siswa));
+echo csrf_field();
?>
@@ -31,10 +32,10 @@ echo csrf_field();
FOTO SISWA
- gambar == '') { ?>
+ gambar == '') { ?>
Belum Ada foto
-
+
@@ -79,6 +80,23 @@ echo csrf_field();
+
+
+
+
+
+
+
@@ -204,4 +243,4 @@ echo csrf_field();
Simpan
-
+
\ No newline at end of file
diff --git a/app/Views/admin/tahun/tambah.php b/app/Views/admin/tahun/tambah.php
index faf4fb6..5170350 100644
--- a/app/Views/admin/tahun/tambah.php
+++ b/app/Views/admin/tahun/tambah.php
@@ -3,59 +3,42 @@
Tambah Baru
-
+
+= form_open(base_url('admin/tahun')) ?>
+= csrf_field() ?>
+
+