diff --git a/.env.example b/.env.example index 52598a5..88540e2 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,4 @@ -APP_NAME=spk_Al_Amien +APP_NAME=spk_status_gizi APP_ENV=local APP_KEY= APP_DEBUG=true @@ -9,7 +9,7 @@ LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 -DB_DATABASE=pkg +DB_DATABASE=spk_status_gizi DB_USERNAME=root DB_PASSWORD= diff --git a/app/Exports/BalitaExport.php b/app/Exports/BalitaExport.php new file mode 100644 index 0000000..1919f14 --- /dev/null +++ b/app/Exports/BalitaExport.php @@ -0,0 +1,14 @@ +validate([ + 'nama_balita' => 'required|string', + 'nik' => 'required|string', + 'nama_orangtua' => 'required|string', + 'alamat_rt_rw' => 'required|string', + 'jenis_kelamin' => 'required|in:1,2', + 'tanggal_timbang' => 'required|date', + 'tanggal_lahir' => 'required|date', + 'umur_bulan' => 'required|integer', + 'berat_badan' => 'required|numeric', + 'tinggi_badan' => 'required|numeric', + ]); + $berat_badan = $request->berat_badan; + $tinggi_badan = $request->tinggi_badan; + $umur_bulan = $request->umur_bulan; + + //alternatif + $balita = Balita::create([ + 'balita' => $request->nama_balita, + 'id_role' => $request->jenis_kelamin, + ]); + + //Laki - laki + if ($request->jenis_kelamin == 1) { + if ($umur_bulan >= 0 && $umur_bulan <= 12) { + if ($berat_badan < 2.1) { + $C1laki = 1; + } elseif ($berat_badan < 2.5) { + $C1laki = 2; + } elseif ($berat_badan <= 10.8) { + $C1laki = 3; + } else { + $C1laki = 4; + } + } else if ($umur_bulan >= 13 && $umur_bulan <= 24) { + if ($berat_badan < 7.1) { + $C1laki = 1; + } elseif ($berat_badan < 7.9) { + $C1laki = 2; + } elseif ($berat_badan <= 13.6) { + $C1laki = 3; + } else { + $C1laki = 4; + } + } else if ($umur_bulan >= 25 && $umur_bulan <= 36) { + if ($berat_badan < 8.8) { + $C1laki = 1; + } elseif ($berat_badan < 9.8) { + $C1laki = 2; + } elseif ($berat_badan <= 16.2) { + $C1laki = 3; + } else { + $C1laki = 4; + } + } else if ($umur_bulan >= 37 && $umur_bulan <= 48) { + if ($berat_badan < 10.1) { + $C1laki = 1; + } elseif ($berat_badan < 11.4) { + $C1laki = 2; + } elseif ($berat_badan <= 18.6) { + $C1laki = 3; + } else { + $C1laki = 4; + } + } else if ($umur_bulan >= 49 && $umur_bulan <= 60) { + if ($berat_badan < 11.3) { + $C1laki = 1; + } elseif ($berat_badan < 12.8) { + $C1laki = 2; + } elseif ($berat_badan <= 21.0) { + $C1laki = 3; + } else { + $C1laki = 4; + } + } + if ($umur_bulan >= 0 && $umur_bulan <= 12) { + if ($tinggi_badan < 44.2) { + $C2laki = 1; + } elseif ($tinggi_badan < 46.1) { + $C2laki = 2; + } elseif ($tinggi_badan <= 82.9) { + $C2laki = 3; + } else { + $C2laki = 4; + } + } else if ($umur_bulan >= 13 && $umur_bulan <= 24) { + if ($tinggi_badan < 69.6) { + $C2laki = 1; + } elseif ($tinggi_badan < 72.1) { + $C2laki = 2; + } elseif ($tinggi_badan <= 97.0) { + $C2laki = 3; + } else { + $C2laki = 4; + } + } else if ($umur_bulan >= 25 && $umur_bulan <= 36) { + if ($tinggi_badan < 78.6) { + $C2laki = 1; + } elseif ($tinggi_badan < 81.7) { + $C2laki = 2; + } elseif ($tinggi_badan <= 107.2) { + $C2laki = 3; + } else { + $C2laki = 4; + } + } else if ($umur_bulan >= 37 && $umur_bulan <= 48) { + if ($tinggi_badan < 85.5) { + $C2laki = 1; + } elseif ($tinggi_badan < 89.2) { + $C2laki = 2; + } elseif ($tinggi_badan <= 115.9) { + $C2laki = 3; + } else { + $C2laki = 4; + } + } else if ($umur_bulan >= 49 && $umur_bulan <= 60) { + if ($tinggi_badan < 91.2) { + $C2laki = 1; + } elseif ($tinggi_badan < 95.4) { + $C2laki = 2; + } elseif ($tinggi_badan <= 123.9) { + $C2laki = 3; + } else { + $C2laki = 4; + } + } + Nilai::create([ + 'kdbalita' => $balita->kdbalita, + 'kdKriteria' => 1, + 'nilai' => $C1laki, + ]); + Nilai::create([ + 'kdbalita' => $balita->kdbalita, + 'kdKriteria' => 2, + 'nilai' => $C2laki, + ]); + } elseif ($request->jenis_kelamin == 2) { + if ($umur_bulan >= 0 && $umur_bulan <= 12) { + if ($berat_badan < 2) { + $C1perempuan = 1; + } elseif ($berat_badan < 2.4) { + $C1perempuan = 2; + } elseif ($berat_badan <= 10.1) { + $C1perempuan = 3; + } else { + $C1perempuan = 4; + } + } else if ($umur_bulan >= 13 && $umur_bulan <= 24) { + if ($berat_badan < 6.4) { + $C1perempuan = 1; + } elseif ($berat_badan < 7.2) { + $C1perempuan = 2; + } elseif ($berat_badan <= 13.0) { + $C1perempuan = 3; + } else { + $C1perempuan = 4; + } + } else if ($umur_bulan >= 25 && $umur_bulan <= 36) { + if ($berat_badan < 8.2) { + $C1perempuan = 1; + } elseif ($berat_badan < 9.2) { + $C1perempuan = 2; + } elseif ($berat_badan <= 15.8) { + $C1perempuan = 3; + } else { + $C1perempuan = 4; + } + } else if ($umur_bulan >= 37 && $umur_bulan <= 48) { + if ($berat_badan < 9.7) { + $C1perempuan = 1; + } elseif ($berat_badan < 10.9) { + $C1perempuan = 2; + } elseif ($berat_badan <= 18.5) { + $C1perempuan = 3; + } else { + $C1perempuan = 4; + } + } else if ($umur_bulan >= 49 && $umur_bulan <= 60) { + if ($berat_badan < 11) { + $C1perempuan = 1; + } elseif ($berat_badan < 12.4) { + $C1perempuan = 2; + } elseif ($berat_badan <= 21.2) { + $C1perempuan = 3; + } else { + $C1perempuan = 4; + } + } + if ($umur_bulan >= 0 && $umur_bulan <= 12) { + if ($tinggi_badan < 43.6) { + $C2perempuan = 1; + } elseif ($tinggi_badan < 45.4) { + $C2perempuan = 2; + } elseif ($tinggi_badan <= 81.7) { + $C2perempuan = 3; + } else { + $C2perempuan = 4; + } + } else if ($umur_bulan >= 13 && $umur_bulan <= 24) { + if ($tinggi_badan < 67.3) { + $C2perempuan = 1; + } elseif ($tinggi_badan < 70) { + $C2perempuan = 2; + } elseif ($tinggi_badan <= 96.1) { + $C2perempuan = 3; + } else { + $C2lC2perempuanaki = 4; + } + } else if ($umur_bulan >= 25 && $umur_bulan <= 36) { + if ($tinggi_badan < 76.8) { + $C2perempuan = 1; + } elseif ($tinggi_badan < 80) { + $C2perempuan = 2; + } elseif ($tinggi_badan <= 106.5) { + $C2perempuan = 3; + } else { + $C2perempuan = 4; + } + } else if ($umur_bulan >= 37 && $umur_bulan <= 48) { + if ($tinggi_badan < 84.2) { + $C2perempuan = 1; + } elseif ($tinggi_badan < 88) { + $C2perempuan = 2; + } elseif ($tinggi_badan <= 115.7) { + $C2perempuan = 3; + } else { + $C2perempuan = 4; + } + } else if ($umur_bulan >= 49 && $umur_bulan <= 60) { + if ($tinggi_badan < 90.3) { + $C2perempuan = 1; + } elseif ($tinggi_badan < 94.6) { + $C2perempuan = 2; + } elseif ($tinggi_badan <= 123.7) { + $C2perempuan = 3; + } else { + $C2perempuan = 4; + } + } + Nilai::create([ + 'kdbalita' => $balita->kdbalita, + 'kdKriteria' => 1, + 'nilai' => $C1perempuan, + ]); + Nilai::create([ + 'kdbalita' => $balita->kdbalita, + 'kdKriteria' => 2, + 'nilai' => $C2perempuan, + ]); + } + + // Simpan data balita ke dalam database + dataBalita::create($validatedData); + + // Redirect ke halaman index atau halaman lain sesuai kebutuhan + return redirect()->route('data-lengkap')->with('success', 'Balita telah ditambahkan.'); + } + public function destroy($id) + { + // Cari data balita berdasarkan ID + $balita = dataBalita::find($id); + if (!$balita) { + return redirect()->route('data-lengkap')->with('error', 'Balita tidak ditemukan.'); + } + + // Dapatkan nama balita + $namaBalita = $balita->nama_balita; + + // Hapus data balita dari tabel dataBalita + $balita->delete(); + + // Dapatkan kdbalita berdasarkan nama balita dari tabel Balita + $kdbalita = Balita::where('balita', $namaBalita)->value('kdbalita'); + + // Hapus data nilai berdasarkan kdbalita dari tabel Nilai + Nilai::where('kdbalita', $kdbalita)->delete(); + // Hapus data balita dari tabel Balita jika nama_balita cocok + Balita::where('balita', $namaBalita)->delete(); + + + // Redirect ke halaman index atau halaman lain sesuai kebutuhan + return redirect()->route('data-lengkap')->with('success', 'Balita ' . $namaBalita . ' telah dihapus.'); + } +} diff --git a/app/Http/Controllers/KriteriaController.php b/app/Http/Controllers/KriteriaController.php new file mode 100644 index 0000000..2f928df --- /dev/null +++ b/app/Http/Controllers/KriteriaController.php @@ -0,0 +1,129 @@ +validate([ + 'kode_kriteria' => 'required', + 'sifat' => 'required', + 'nama_kriteria' => 'required', + 'bobot_kriteria' => 'required|numeric', + 'itemKriteria1' => 'required', + 'itemKriteria2' => 'required', + 'itemKriteria3' => 'required', + 'itemKriteria4' => 'required', + ]); + + // Create a new Kriteria instance and save it + $kriteria = Kriteria::create([ + 'kriteria' => $request->kode_kriteria, + 'sifat' => $request->sifat, + 'detail' => $request->nama_kriteria, + 'bobot' => $request->bobot_kriteria, + ]); + + // Get the ID of the newly created Kriteria + $kdKriteria = DB::getPdo()->lastInsertId(); + + // Create SubKriteria instances and save them + $items = [ + $request->itemKriteria1, + $request->itemKriteria2, + $request->itemKriteria3, + $request->itemKriteria4, + ]; + + for ($i = 1; $i <= 4; $i++) { + SubKriteria::create([ + 'kdKriteria' => $kdKriteria, + 'subKriteria' => $items[$i - 1], + 'value' => $i, + ]); + } + + return redirect()->route('data_kriteria')->with('success', 'Data kriteria berhasil ditambahkan.'); + } + + public function edit($id) + { + $kriteria = Kriteria::findOrFail($id); + + // Create an instance of the SubKriteria model + $subKriteriaModel = new SubKriteria; + + // Retrieve subkriteria based on kdKriteria + $subkriteria = $subKriteriaModel->getSubKriteriaByKdKriteria($kriteria->kdKriteria); + + return view('pages.data_kriteria.edit', compact('kriteria', 'subkriteria', 'id')); + } + public function update(Request $request, $id) + { + $request->validate([ + 'kode_kriteria' => 'required', + 'sifat' => 'required', + 'nama_kriteria' => 'required', + 'bobot_kriteria' => 'required|numeric', + 'itemKriteria.*' => 'required', // Validate all itemKriteria fields. + ]); + + $kriteria = Kriteria::findOrFail($id); + + $kriteria->update([ + 'kriteria' => $request->kode_kriteria, + 'sifat' => $request->sifat, + 'detail' => $request->nama_kriteria, + 'bobot' => $request->bobot_kriteria, + ]); + + SubKriteria::where('kdKriteria', $id)->delete(); + $items = $request->itemKriteria; + + for ($i = 0; $i < count($items); $i++) { + SubKriteria::create([ + 'kdKriteria' => $id, + 'subKriteria' => $items[$i], + 'value' => $i + 1, + ]); + } + + return redirect()->route('data_kriteria')->with('success', 'Data kriteria berhasil diperbarui.'); + } + + public function destroy($kdKriteria) + { + $kriteria = Kriteria::find($kdKriteria); + + // Delete associated SubKriteria records based on kdKriteria + SubKriteria::where('kdKriteria', $kdKriteria)->delete(); + + // Delete the main Kriteria + $kriteria->delete(); + + if (!$kriteria) { + return redirect()->route('data_kriteria')->with('error', 'Kriteria tidak ditemukan.'); + } + + return redirect()->route('data_kriteria')->with('success', 'SubKriteria dan Kriteria berhasil dihapus berdasarkan ID Kriteria.'); + } +} diff --git a/app/Http/Controllers/MstBalitaController.php b/app/Http/Controllers/MstBalitaController.php new file mode 100644 index 0000000..8b899e2 --- /dev/null +++ b/app/Http/Controllers/MstBalitaController.php @@ -0,0 +1,137 @@ +getDataInsert(); + $roles = Role::all(); + $roleData = []; + $nilaiBalita = []; // Initialize $nilaiBalita as an empty array + + if ($id !== null) { + $balita = Balita::find($id); + $nilaiBalita = Nilai::where('kdbalita', $id)->get(); + $roleData = $balita->role; + } + // dd($dataView); + return view('pages.mst_balita.form', compact('dataView', 'roles', 'roleData', 'nilaiBalita')); + } + + + public function store(Request $request) + { + $request->validate([ + 'nama_balita' => 'required', // Corrected field name + 'jenis_kelamin' => 'required', // Corrected field name + 'nilai' => 'required', + ]); + + $balita = Balita::create([ + 'balita' => $request->nama_balita, // Corrected field name + 'id_role' => $request->jenis_kelamin, // Corrected field name + ]); + + foreach ($request->nilai as $item => $value) { + Nilai::create([ + 'kdbalita' => $balita->kdbalita, // Adjust to the actual primary key column name + 'kdKriteria' => $item, + 'nilai' => $value, + ]); + } + + return redirect()->route('balita.index')->with('success', 'Data balita berhasil ditambahkan.'); + } + + + public function edit($id) + { + // Fetch the "balita" with the given $id + $balita = Balita::findOrFail($id); + + // Fetch the "nilai" values associated with the "balita" + $nilai = Nilai::where('kdbalita', $id)->get(); + + // Fetch data from the "dataBalita" model based on "nama_balita" + $data_balita = dataBalita::where('nama_balita', $balita->balita)->first(); + // dd($data_balita); + // Fetch data to populate dataView + $dataView = $this->getDataInsert(); + + return view('pages.mst_balita.edit', compact('balita', 'dataView', 'nilai', 'data_balita')); + } + + public function update(Request $request, $id) + { + $request->validate([ + 'balita' => 'required', + 'role' => 'required', + 'nilai' => 'required', + ]); + + $balita = Balita::find($id); + $balita->update([ + 'balita' => $request->balita, + 'role' => $request->role, + ]); + + Nilai::where('kdbalita', $id)->delete(); + + foreach ($request->nilai as $item => $value) { + Nilai::create([ + 'kdbalita' => $balita->id, + 'kdKriteria' => $item, + 'nilai' => $value, + ]); + } + + return redirect()->route('balita.index')->with('success', 'Data balita berhasil diperbarui.'); + } + + public function destroy($id) + { + Nilai::where('kdbalita', $id)->delete(); + Balita::find($id)->delete(); + + return redirect()->route('balita.index')->with('success', 'Data balita berhasil dihapus.'); + } + + private function getDataInsert() + { + $dataView = []; + $kriteria = Kriteria::all(); + + // Assuming you have an instance of the SubKriteria model + $subKriteriaModel = new SubKriteria(); + + foreach ($kriteria as $item) { + $subKriteriaData = $subKriteriaModel->getById($item->kdKriteria); + + $dataView[$item->kdKriteria] = [ + 'nama' => $item->kriteria, + 'detail' => $item->detail, + 'data' => $subKriteriaData, + ]; + } + + return $dataView; + } +} diff --git a/app/Http/Controllers/MstGuruController.php b/app/Http/Controllers/MstGuruController.php deleted file mode 100644 index c46fe35..0000000 --- a/app/Http/Controllers/MstGuruController.php +++ /dev/null @@ -1,21 +0,0 @@ -groupBy('kdKriteria')->map(function ($grouped) { + return $grouped->max('nilai'); + }); + + // Loop untuk mengumpulkan data untuk setiap balita + foreach ($balita as $b) { + $kdbalita = $b->kdbalita; + $namaBalita = $b->balita; + + // Mengonversi nilai-nilai balita terpilih ke dalam bentuk array + $nilaiBalita = $nilai->where('kdbalita', $kdbalita)->toArray(); + + // Normalisasi nilai berdasarkan nilai maksimum untuk setiap kdKriteria + $normalizedNilai = array_map(function ($nilaiItem) use ($kriteria, $maxNilaiByKriteria) { + $matchingKriteria = $kriteria->where('kdKriteria', $nilaiItem['kdKriteria'])->first(); + + if ($matchingKriteria) { + $kdKriteria = $matchingKriteria->kdKriteria; + + // Normalisasi nilai menggunakan nilai maksimum yang sesuai untuk setiap kdKriteria + $maxValueForKriteria = $maxNilaiByKriteria->get($kdKriteria); + if ($maxValueForKriteria) { + $normalizedValue = $nilaiItem['nilai'] / $maxValueForKriteria; + } + + $nilaiItem['bobot'] = $matchingKriteria->bobot; + $nilaiItem['kriteria'] = $matchingKriteria->kriteria; + $nilaiItem['normalized'] = $normalizedValue; + $nilaiItem['nilaimaximum'] = $maxValueForKriteria; + $nilaiItem['nilai_preferensi'] = $normalizedValue * $nilaiItem['bobot']; + } + return $nilaiItem; + }, $nilaiBalita); + + // Menghitung total preferensi untuk balita + $totalPreferensi = array_sum(array_column($normalizedNilai, 'nilai_preferensi')); + + // Menentukan kategori gizi + if ($totalPreferensi > 90) { + $kategoriGizi = 'Gizi Baik'; + } elseif ($totalPreferensi >= 81 && $totalPreferensi <= 90) { + $kategoriGizi = 'Gizi Sedang'; + } elseif ($totalPreferensi >= 71 && $totalPreferensi <= 80) { + $kategoriGizi = 'Gizi Kurang'; + } else { + $kategoriGizi = 'Gizi Buruk'; + } + + // Get additional data + $tanggal_timbang = dataBalita::where('nama_balita', $namaBalita)->value('tanggal_timbang'); + $berat_badan = dataBalita::where('nama_balita', $namaBalita)->value('berat_badan'); + $tinggi_badan = dataBalita::where('nama_balita', $namaBalita)->value('tinggi_badan'); + + // Menambahkan hasil kategori gizi tanpa melakukan perankingan + $output[] = [ + 'kdbalita' => $kdbalita, + 'nama_balita' => $namaBalita, + 'nilai' => $nilaiBalita, + 'berat_badan' => $berat_badan, + 'tinggi_badan' => $tinggi_badan, + 'tanggal_timbang' => $tanggal_timbang, + 'normalized_nilai' => $normalizedNilai, + 'total_preferensi' => $totalPreferensi, + 'kategori_gizi' => $kategoriGizi, + ]; + } + + // Mengurutkan hasil berdasarkan total preferensi + usort($output, function ($a, $b) { + return $b['total_preferensi'] <=> $a['total_preferensi']; + }); + + // Menambahkan peringkat ke output + $currentRank = 1; + $previousTotalPreferensi = null; + foreach ($output as &$item) { + // Mengatur peringkat hanya ketika total preferensi berbeda dari entri sebelumnya + if ($item['total_preferensi'] !== $previousTotalPreferensi) { + $item['ranking'] = $currentRank; + } + + // Increment the rank + $currentRank++; + } + + // Mengurutkan hasil berdasarkan kdbalita + usort($output, function ($a, $b) { + return $a['kdbalita'] <=> $b['kdbalita']; + }); + + return view('pages.proses.index', [ + 'output' => $output, + ]); +} + +} diff --git a/app/Http/Controllers/RangkingController.php b/app/Http/Controllers/RangkingController.php new file mode 100644 index 0000000..70f46de --- /dev/null +++ b/app/Http/Controllers/RangkingController.php @@ -0,0 +1,106 @@ +groupBy('kdKriteria')->map(function ($grouped) { + return $grouped->max('nilai'); + }); + + // Loop to collect values for each balita + foreach ($balita as $b) { + $kdbalita = $b->kdbalita; + $namaBalita = $b->balita; + // dd($balita); + // Get values for the specific balita and convert to an array + $nilaiBalita = $nilai->where('kdbalita', $kdbalita)->toArray(); + + // Normalize the values based on the maximum value for each kdKriteria + $normalizedNilai = array_map(function ($nilaiItem) use ($kriteria, $maxNilaiByKriteria) { + $matchingKriteria = $kriteria->where('kdKriteria', $nilaiItem['kdKriteria'])->first(); + + if ($matchingKriteria) { + $kdKriteria = $matchingKriteria->kdKriteria; + + // Normalize the value using the corresponding max value for this kdKriteria + $maxValueForKriteria = $maxNilaiByKriteria->get($kdKriteria); + if ($maxValueForKriteria) { + $normalizedValue = $nilaiItem['nilai'] / $maxValueForKriteria; + } + + $nilaiItem['bobot'] = $matchingKriteria->bobot; + $nilaiItem['kriteria'] = $matchingKriteria->kriteria; + $nilaiItem['normalized'] = $normalizedValue; + $nilaiItem['nilaimaximum'] = $maxValueForKriteria; + $nilaiItem['nilai_preferensi'] = $normalizedValue * $nilaiItem['bobot']; + } + return $nilaiItem; + }, $nilaiBalita); + + // Calculate the total preferensi for this balita + $totalPreferensi = array_sum(array_column($normalizedNilai, 'nilai_preferensi')); + if ($totalPreferensi > 90) { + $kategoriGizi = 'Gizi Baik'; + } elseif ($totalPreferensi >= 81 && $totalPreferensi <= 90) { + $kategoriGizi = 'Gizi Sedang'; + } elseif ($totalPreferensi >= 71 && $totalPreferensi <= 80) { + $kategoriGizi = 'Gizi Kurang'; + } else { + $kategoriGizi = 'Gizi Buruk'; + } + + $tanggal_timbang = dataBalita::where('nama_balita', $namaBalita)->value('tanggal_timbang'); + $berat_badan = dataBalita::where('nama_balita', $namaBalita)->value('berat_badan'); + $tinggi_badan = dataBalita::where('nama_balita', $namaBalita)->value('tinggi_badan'); + $nama_orangtua = dataBalita::where('nama_balita', $namaBalita)->value('nama_orangtua'); + $nik = dataBalita::where('nama_balita', $namaBalita)->value('nik'); + $alamat_rt_rw = dataBalita::where('nama_balita', $namaBalita)->value('alamat_rt_rw'); + $jenis_kelamin = dataBalita::where('nama_balita', $namaBalita)->value('jenis_kelamin'); + $tanggal_timbang = dataBalita::where('nama_balita', $namaBalita)->value('tanggal_timbang'); + $tanggal_lahir = dataBalita::where('nama_balita', $namaBalita)->value('tanggal_lahir'); + $umur_bulan = dataBalita::where('nama_balita', $namaBalita)->value('umur_bulan'); + $output[] = [ + 'kdbalita' => $kdbalita, + 'nama_balita' => $namaBalita, + 'nilai' => $nilaiBalita, + 'berat_badan' => $berat_badan, + 'tinggi_badan' => $tinggi_badan, + 'tanggal_timbang' => $tanggal_timbang, + 'normalized_nilai' => $normalizedNilai, + 'total_preferensi' => $totalPreferensi, + 'kategori_gizi' => $kategoriGizi, + 'nik' => $nik, + 'alamat' => $alamat_rt_rw, + 'jenis_kelamin' => $jenis_kelamin, + 'tanggal_lahir' => $tanggal_lahir, + 'umur_bulan' => $umur_bulan, + 'nama_orangtua'=> $nama_orangtua + ]; + } + + // dd($output); + + return view('pages.data_penilaian.index', [ + 'output' => $output, + ]); + } +} diff --git a/app/Http/Controllers/RoleController.php b/app/Http/Controllers/RoleController.php new file mode 100644 index 0000000..37e34c5 --- /dev/null +++ b/app/Http/Controllers/RoleController.php @@ -0,0 +1,65 @@ +validate([ + 'namaRole' => 'required|string', + ]); + + $role = new Role([ + 'nama' => strtoupper($request->input('namaRole')), + ]); + + $role->save(); + + return redirect()->route('role.index'); + } + + public function edit($id) + { + $role = Role::find($id); + return view('role.edit', compact('role')); + } + + public function update(Request $request, $id) + { + $request->validate([ + 'namaRole' => 'required|string', + ]); + + $role = Role::find($id); + $role->nama = strtoupper($request->input('namaRole')); + $role->save(); + + return redirect()->route('role.index'); + } + + public function destroy($id) + { + $role = Role::find($id); + $role->delete(); + return redirect()->route('role.index'); + } +} diff --git a/app/Http/Controllers/DataAlternatifController.php b/app/Http/Controllers/backup/DataAlternatifController.php similarity index 100% rename from app/Http/Controllers/DataAlternatifController.php rename to app/Http/Controllers/backup/DataAlternatifController.php diff --git a/app/Http/Controllers/DataKriteriaController.php b/app/Http/Controllers/backup/DataKriteriaController.php similarity index 100% rename from app/Http/Controllers/DataKriteriaController.php rename to app/Http/Controllers/backup/DataKriteriaController.php diff --git a/app/Http/Controllers/HasilPerhitunganController.php b/app/Http/Controllers/backup/HasilPerhitunganController.php similarity index 100% rename from app/Http/Controllers/HasilPerhitunganController.php rename to app/Http/Controllers/backup/HasilPerhitunganController.php diff --git a/app/Http/Controllers/backup/MstBalitaController.php b/app/Http/Controllers/backup/MstBalitaController.php new file mode 100644 index 0000000..6319a6d --- /dev/null +++ b/app/Http/Controllers/backup/MstBalitaController.php @@ -0,0 +1,21 @@ +where('id_role', $role_id)->get(); + } + public function Nilai() + { + return $this->hasOne(Nilai::class, 'kdbalita', 'kdbalita'); + } + public function getAllBalitas() + { + return $this->all(); + } + + public function getNilaiByBalita($id) + { + return $this->select('balita.kdbalita', 'balita.balita', 'kriteria.kdKriteria', 'nilai') + ->join('nilai', 'balita.kdbalita', '=', 'nilai.kdbalita') + ->join('kriteria', 'kriteria.kdKriteria', '=', 'nilai.kdKriteria') + ->where('balita.kdbalita', $id) + ->get(); + } + + public function insertBalita($data) + { + return $this->create($data); + } + + public function updateBalita($id, $data) + { + return $this->where('kdbalita', $id)->update($data); + } + + public function deleteBalita($id) + { + return $this->where('kdbalita', $id)->delete(); + } + + public function getBalitasSelect($role_id) + { + return $this->where('id_role', $role_id)->get(); + } + + public function getLastBalitaID() + { + return $this->select('kdbalita')->orderBy('kdbalita', 'DESC')->first(); + } +} diff --git a/app/Models/Kriteria.php b/app/Models/Kriteria.php index 2907fee..716183c 100644 --- a/app/Models/Kriteria.php +++ b/app/Models/Kriteria.php @@ -2,16 +2,57 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Kriteria extends Model { - use HasFactory; - - protected $table = 'mst_kriteria'; - + public $timestamps = false; + protected $table = 'kriteria'; + protected $primaryKey = 'kdKriteria'; protected $fillable = [ - 'kode_kriteria', 'nama_kriteria', 'bobot_kriteria', + 'kriteria', 'sifat', 'bobot', 'detail', ]; + public function subkriteria() + { + return $this->hasMany(SubKriteria::class, 'kdKriteria', 'id'); // Adjust the column names as needed + } + + public function getAll() + { + return $this->all(); + } + + public function getById($id) + { + return $this->find($id); + } + + public function insert($data) + { + return $this->create($data); + } + + public function updateKriteria($id, $data) + { + $kriteria = $this->find($id); + if ($kriteria) { + return $kriteria->update($data); + } + return false; + } + + public function deleteById($id) + { + return $this->where('kdKriteria', $id)->delete(); + } + + public function getLastID() + { + return $this->select('kdKriteria')->orderBy('kdKriteria', 'desc')->first(); + } + + public function getBobotKriteria() + { + return $this->select('kriteria', 'bobot')->get(); + } } diff --git a/app/Models/Nilai.php b/app/Models/Nilai.php new file mode 100644 index 0000000..fceb2ee --- /dev/null +++ b/app/Models/Nilai.php @@ -0,0 +1,44 @@ +select('kdbalita', 'kdKriteria', 'nilai') + ->join('balita', 'balita.kdbalita', '=', 'nilai.kdbalita') + ->join('kriteria', 'kriteria.kdKriteria', '=', 'nilai.kdKriteria') + ->get(); + } + + public function getNilaiByPlayer($id) + { + return $this->select('nilai.kdbalita', 'balita', 'nilai.kdKriteria', 'nilai') + ->join('balita', 'balita.kdbalita', '=', 'nilai.kdbalita') + ->join('kriteria', 'kriteria.kdKriteria', '=', 'nilai.kdKriteria') + ->where('nilai.kdbalita', $id) + ->groupBy('nilai.kdbalita', 'balita', 'nilai.kdKriteria', 'nilai') + ->get(); + } + + public function updateNilai() + { + return $this->where('kdbalita', $this->kdbalita) + ->where('kdKriteria', $this->kdKriteria) + ->update(['nilai' => $this->nilai]); + } + + public function deleteNilai($id) + { + return $this->where('kdbalita', $id)->delete(); + } +} diff --git a/app/Models/Role.php b/app/Models/Role.php new file mode 100644 index 0000000..e5a9f5b --- /dev/null +++ b/app/Models/Role.php @@ -0,0 +1,44 @@ +all(); + } + + public function getNilaiByRole($id) + { + return $this->where('id', $id)->get(); + } + + public function getRoleById($id) + { + return $this->find($id); + } + + public function insertRole($data) + { + return $this->create($data); + } + + public function updateRole($id, $data) + { + return $this->where('id', $id)->update($data); + } + + public function deleteRole($id) + { + return $this->where('id', $id)->delete(); + } +} diff --git a/app/Models/SubKriteria.php b/app/Models/SubKriteria.php new file mode 100644 index 0000000..bbd2e5e --- /dev/null +++ b/app/Models/SubKriteria.php @@ -0,0 +1,46 @@ +table)->get()->all(); + } + + public function getById($kdKriteria) + { + return DB::table($this->table)->where('kdKriteria', $kdKriteria)->get()->all(); + } + public function getSubKriteriaByKdKriteria($kdKriteria) + { + return $this->where('kdKriteria', $kdKriteria)->get(); + } + public function insertData($data) + { + return DB::table($this->table)->insert($data); + } + + public function updateData($kdSubKriteria, $data) + { + return DB::table($this->table) + ->where('kdSubKriteria', $kdSubKriteria) + ->update($data); + } + + public function deleteData($kdKriteria) + { + return DB::table($this->table) + ->where('kdKriteria', $kdKriteria) + ->delete(); + } +} diff --git a/app/Models/dataBalita.php b/app/Models/dataBalita.php new file mode 100644 index 0000000..6a9190a --- /dev/null +++ b/app/Models/dataBalita.php @@ -0,0 +1,16 @@ +=5.3.0", + "phpoffice/phpexcel": "~1.8.0" + }, + "require-dev": { + "mockery/mockery": "~0.9", + "orchestra/testbench": "~2.2.0@dev", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Maatwebsite\\Excel\\": "src/" + }, + "classmap": [ + "src/Maatwebsite/Excel", + "tests/TestCase.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL" + ], + "authors": [ + { + "name": "Maatwebsite.nl", + "email": "patrick@maatwebsite.nl" + } + ], + "description": "An eloquent way of importing and exporting Excel and CSV in Laravel 4 with the power of PHPExcel", + "keywords": [ + "PHPExcel", + "batch", + "csv", + "excel", + "export", + "import", + "laravel" + ], + "support": { + "issues": "https://github.com/Maatwebsite/Laravel-Excel/issues", + "source": "https://github.com/Maatwebsite/Laravel-Excel/tree/master" + }, + "time": "2014-07-10T09:06:07+00:00" + }, { "name": "monolog/monolog", "version": "2.9.1", @@ -2131,6 +2190,68 @@ }, "time": "2022-01-27T09:35:39+00:00" }, + { + "name": "phpoffice/phpexcel", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PHPExcel.git", + "reference": "372c7cbb695a6f6f1e62649381aeaa37e7e70b32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PHPExcel/zipball/372c7cbb695a6f6f1e62649381aeaa37e7e70b32", + "reference": "372c7cbb695a6f6f1e62649381aeaa37e7e70b32", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "ext-xmlwriter": "*", + "php": ">=5.2.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "PHPExcel": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "http://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker" + }, + { + "name": "Franck Lefevre", + "homepage": "http://blog.rootslabs.net" + }, + { + "name": "Erik Tilt" + } + ], + "description": "PHPExcel - OpenXML - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "http://phpexcel.codeplex.com", + "keywords": [ + "OpenXML", + "excel", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PHPExcel/issues", + "source": "https://github.com/PHPOffice/PHPExcel/tree/master" + }, + "abandoned": "phpoffice/phpspreadsheet", + "time": "2015-05-01T07:00:55+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.1", @@ -7777,5 +7898,5 @@ "php": "^7.3 || ^8.0" }, "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/database/migrations/2023_07_06_082030_create_mst_kriteria_table.php b/database/migrations/2023_07_06_082030_create_mst_kriteria_table.php deleted file mode 100644 index d469d7b..0000000 --- a/database/migrations/2023_07_06_082030_create_mst_kriteria_table.php +++ /dev/null @@ -1,34 +0,0 @@ -id(); - $table->string('kode_kriteria'); - $table->string('nama_kriteria'); - $table->integer('bobot_kriteria'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('mst_kriteria'); - } -} diff --git a/database/migrations/2023_10_29_132002_create_kriteria_table.php b/database/migrations/2023_10_29_132002_create_kriteria_table.php new file mode 100644 index 0000000..7bbd07a --- /dev/null +++ b/database/migrations/2023_10_29_132002_create_kriteria_table.php @@ -0,0 +1,29 @@ +id('kdKriteria'); + $table->string('kriteria', 100); + $table->char('sifat', 1); + $table->integer('bobot'); + $table->text('detail'); + }); + } + + public function down() + { + Schema::dropIfExists('kriteria'); + } +} diff --git a/database/migrations/2023_09_21_080240_create_gurumodels_table.php b/database/migrations/2023_10_29_132009_create_role_table.php similarity index 55% rename from database/migrations/2023_09_21_080240_create_gurumodels_table.php rename to database/migrations/2023_10_29_132009_create_role_table.php index e99d9c0..85417a6 100644 --- a/database/migrations/2023_09_21_080240_create_gurumodels_table.php +++ b/database/migrations/2023_10_29_132009_create_role_table.php @@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -class CreateGurumodelsTable extends Migration +class CreateRoleTable extends Migration { /** * Run the migrations. @@ -13,19 +13,14 @@ class CreateGurumodelsTable extends Migration */ public function up() { - Schema::create('gurumodels', function (Blueprint $table) { + Schema::create('role', function (Blueprint $table) { $table->id(); - $table->timestamps(); + $table->string('nama', 255); }); } - /** - * Reverse the migrations. - * - * @return void - */ public function down() { - Schema::dropIfExists('gurumodels'); + Schema::dropIfExists('role'); } } diff --git a/database/migrations/2023_10_29_132010_create_balita_table.php b/database/migrations/2023_10_29_132010_create_balita_table.php new file mode 100644 index 0000000..5156589 --- /dev/null +++ b/database/migrations/2023_10_29_132010_create_balita_table.php @@ -0,0 +1,28 @@ +id('kdbalita'); + $table->string('balita', 50); + $table->unsignedBigInteger('id_role'); + $table->foreign('id_role')->references('id')->on('role'); + }); + } + + public function down() + { + Schema::dropIfExists('balita'); + } +} diff --git a/database/migrations/2023_10_29_132012_create_subkriteria_table.php b/database/migrations/2023_10_29_132012_create_subkriteria_table.php new file mode 100644 index 0000000..7981681 --- /dev/null +++ b/database/migrations/2023_10_29_132012_create_subkriteria_table.php @@ -0,0 +1,29 @@ +id('kdSubKriteria'); + $table->string('subKriteria', 50); + $table->integer('value'); + $table->unsignedBigInteger('kdKriteria'); + $table->foreign('kdKriteria')->references('kdKriteria')->on('kriteria'); + }); + } + + public function down() + { + Schema::dropIfExists('subkriteria'); + } +} diff --git a/database/migrations/2023_10_29_132021_create_nilai_table.php b/database/migrations/2023_10_29_132021_create_nilai_table.php new file mode 100644 index 0000000..d5c71a7 --- /dev/null +++ b/database/migrations/2023_10_29_132021_create_nilai_table.php @@ -0,0 +1,32 @@ +id(); + $table->unsignedBigInteger('kdbalita'); + $table->unsignedBigInteger('kdKriteria'); + $table->integer('nilai'); + $table->unique(['kdbalita', 'kdKriteria']); + $table->foreign('kdbalita')->references('kdbalita')->on('balita'); // Corrected typo here + $table->foreign('kdKriteria')->references('kdKriteria')->on('kriteria'); + }); + } + + + public function down() + { + Schema::dropIfExists('nilai'); + } +} diff --git a/database/migrations/2023_11_04_085636_create_balitas_table.php b/database/migrations/2023_11_04_085636_create_balitas_table.php new file mode 100644 index 0000000..a3898fb --- /dev/null +++ b/database/migrations/2023_11_04_085636_create_balitas_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('nama_balita'); + $table->string('nik'); + $table->string('nama_orangtua'); + $table->string('alamat_rt_rw'); + $table->tinyInteger('jenis_kelamin')->comment('1: Laki-laki, 2: Perempuan'); + $table->date('tanggal_timbang'); + $table->date('tanggal_lahir'); + $table->integer('umur_bulan'); + $table->decimal('berat_badan', 5, 2); // Misalnya, 5 digit dengan 2 digit di belakang koma + $table->decimal('tinggi_badan', 5, 2); // Misalnya, 5 digit dengan 2 digit di belakang koma + $table->timestamps(); + }); + } + + public function down() + { + Schema::dropIfExists('balitas'); + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index c2a8892..541e210 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -15,6 +15,9 @@ class DatabaseSeeder extends Seeder { $this->call([ UsersSeeder::class, + RoleSeeder::class, + KriteriaSeeder::class, + SubkriteriaSeeder::class, ]); } } diff --git a/database/seeders/KriteriaSeeder.php b/database/seeders/KriteriaSeeder.php new file mode 100644 index 0000000..6a8fbda --- /dev/null +++ b/database/seeders/KriteriaSeeder.php @@ -0,0 +1,33 @@ +insert([ + [ + 'kriteria' => 'C1', + 'sifat' => 'B', + 'bobot' => 50, + 'detail' => 'Berat Badan', + ], + [ + 'kriteria' => 'C2', + 'sifat' => 'B', + 'bobot' => 50, + 'detail' => 'Tinggi Badan', + ], + ]); + } +} diff --git a/database/seeders/RoleSeeder.php b/database/seeders/RoleSeeder.php new file mode 100644 index 0000000..8cf78c2 --- /dev/null +++ b/database/seeders/RoleSeeder.php @@ -0,0 +1,23 @@ +insert([ + ['nama' => 'laki-laki'], + ['nama' => 'perempuan'], + ]); + } +} diff --git a/database/seeders/SubkriteriaSeeder.php b/database/seeders/SubkriteriaSeeder.php new file mode 100644 index 0000000..112962f --- /dev/null +++ b/database/seeders/SubkriteriaSeeder.php @@ -0,0 +1,61 @@ +insert([ + [ + 'subKriteria' => 'Sangat Kurang', + 'value' => 1, + 'kdKriteria' => 1, // Sesuaikan dengan kdKriteria dari tabel kriteria + ], + [ + 'subKriteria' => 'Kurang', + 'value' => 2, + 'kdKriteria' => 1, + ], + [ + 'subKriteria' => 'Normal', + 'value' => 3, + 'kdKriteria' => 1, + ], + [ + 'subKriteria' => 'Lebih', + 'value' => 4, + 'kdKriteria' => 1, + ], + [ + 'subKriteria' => 'Sangat Pendek', + 'value' => 1, + 'kdKriteria' => 2, // Sesuaikan dengan kdKriteria dari tabel kriteria + ], + [ + 'subKriteria' => 'Pendek', + 'value' => 2, + 'kdKriteria' => 2, + ], + [ + 'subKriteria' => 'Normal', + 'value' => 3, + 'kdKriteria' => 2, + ], + [ + 'subKriteria' => 'Tinggi', + 'value' => 4, + 'kdKriteria' => 2, + ], + ]); + } +} diff --git a/database/seeders/UsersSeeder.php b/database/seeders/UsersSeeder.php index 2841816..28cddb0 100644 --- a/database/seeders/UsersSeeder.php +++ b/database/seeders/UsersSeeder.php @@ -16,7 +16,7 @@ class UsersSeeder extends Seeder { $users = [ [ - 'name' => 'Yuliana Dewi', + 'name' => 'Dwi Nur Ellisa', 'username' => 'admin', 'password' => bcrypt('admin'), 'roles' => 'admin', diff --git a/resources/views/component/footer.blade.php b/resources/views/component/footer.blade.php index df50a13..d8c06a2 100644 --- a/resources/views/component/footer.blade.php +++ b/resources/views/component/footer.blade.php @@ -1,7 +1,7 @@ \ No newline at end of file diff --git a/resources/views/component/navbar.blade.php b/resources/views/component/navbar.blade.php index 496b435..ee4a9ff 100644 --- a/resources/views/component/navbar.blade.php +++ b/resources/views/component/navbar.blade.php @@ -5,7 +5,7 @@ -