152 lines
4.5 KiB
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!');
|
|
}
|
|
}
|