MIF_E31222663/app/Http/Controllers/LatihController.php

152 lines
4.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\DataLatih;
use PhpOffice\PhpSpreadsheet\IOFactory;
class LatihController extends Controller
{
private function convertJumlahPenduduk($nilai)
{
// Hapus titik dan ubah koma jadi titik
$nilai_bersih = str_replace('.', '', $nilai);
$nilai_bersih = str_replace(',', '.', $nilai_bersih);
// Kembalikan sebagai integer
return (int) $nilai_bersih;
}
public function index(Request $request)
{
$search = $request->get('search');
$data_latih = $search
? DataLatih::where('kecamatan', 'like', '%' . $search . '%')->paginate(10)
: DataLatih::paginate(10);
return view('admin.data-latih.index', compact('data_latih'));
}
public function import(Request $request)
{
$request->validate([
'file' => 'required|file|mimes:xlsx,xls'
]);
$file = $request->file('file');
$spreadsheet = IOFactory::load($file);
$sheet = $spreadsheet->getActiveSheet();
$rows = $sheet->toArray();
$dataToInsert = [];
foreach ($rows as $index => $row) {
if ($index === 0) continue; // Skip header
$kecamatan = trim($row[1] ?? '');
if (empty($kecamatan)) continue;
// Konversi jumlah penduduk, hapus format koma/titik dan jadi integer
$jumlah_penduduk = $this->convertJumlahPenduduk($row[2] ?? 0);
// Pastikan nilai numerik, jika tidak maka default 0
$phbs = is_numeric($row[3]) ? $row[3] : 0;
$pcv1 = is_numeric($row[4]) ? $row[4] : 0;
$pcv2 = is_numeric($row[5]) ? $row[5] : 0;
$imunisasi = ($pcv1 + $pcv2) / 2;
$merokok = is_numeric($row[7]) ? $row[7] : 0;
$kasus_2023 = is_numeric($row[8]) ? $row[8] : 0;
// Latitude dan longitude dibagi 1.000.000 untuk konversi ke desimal
$latitude = is_numeric($row[9]) ? ($row[9] / 1000000) : 0;
$longitude = is_numeric($row[10]) ? ($row[10] / 1000000) : 0;
// Hipotesis = ambil string, trim dan pastikan nilainya "Naik" atau "Turun"
$hipotesis = isset($row[11]) ? trim($row[11]) : null;
if (!in_array($hipotesis, ['Naik', 'Turun'])) {
// Jika hipotesis tidak valid, bisa set null atau default "Naik" misalnya
$hipotesis = null; // atau 'Naik' sesuai kebutuhan
}
$dataToInsert[] = [
'kecamatan' => $kecamatan,
'jumlah_penduduk' => $jumlah_penduduk,
'phbs' => $phbs,
'pcv1' => $pcv1,
'pcv2' => $pcv2,
'imunisasi' => $imunisasi,
'merokok' => $merokok,
'kasus_2023' => $kasus_2023,
'latitude' => $latitude,
'longitude' => $longitude,
'hipotesis' => $hipotesis,
];
}
if (!empty($dataToInsert)) {
DataLatih::insert($dataToInsert);
}
return redirect()->back()->with('success', 'Data berhasil diimpor!');
}
public function edit($id)
{
$data = DataLatih::findOrFail($id);
return view('admin.data-latih.edit', compact('data'));
}
public function update(Request $request, $id)
{
$request->validate([
'kecamatan' => 'required|string|max:255',
'jumlah_penduduk' => 'required|integer',
'phbs' => 'required|numeric',
'pcv1' => 'required|numeric',
'pcv2' => 'required|numeric',
'imunisasi' => 'required|numeric',
'merokok' => 'required|numeric',
'kasus_2023' => 'required|integer',
'latitude' => 'required|numeric',
'longitude' => 'required|numeric',
'hipotesis' => 'required|string|in:Naik,Turun',
'data_tahun' => 'required|integer', // tambah ini kalau ada di DB
]);
$data = DataLatih::findOrFail($id);
$data->update($request->only([
'kecamatan',
'jumlah_penduduk',
'phbs',
'pcv1',
'pcv2',
'imunisasi',
'merokok',
'kasus_2023',
'latitude',
'longitude',
'hipotesis',
'data_tahun', // tambah ini kalau ada
]));
return redirect()->route('admin.data-latih')->with('success', 'Data berhasil diperbarui!');
}
public function destroyAll()
{
DataLatih::truncate();
return redirect()->back()->with('success', 'Semua data berhasil dihapus.');
}
public function delete($id)
{
$data = DataLatih::findOrFail($id);
$data->delete();
return redirect()->route('admin.data-latih')->with('success', 'Data berhasil dihapus!');
}
}