first(); // dd($jalan); $data = Kecelakaan::with('jalan')->where('id_jalan', $jalan->id)->get(); // dd($data); return view('dashboard.kecelakaan.index', ['data' => $data], ['nama_jalan' => $jalan]); } public function create($slug) { $jalan = Jalan::with('kecelakaan')->where('slug', $slug)->first(); // dd($jalan); return view('dashboard.kecelakaan.create', ['data' => $jalan]); } public function store(Request $request, Jalan $jalan) { // dd($request); $this->validate($request, [ 'tanggal' => 'required', 'waktu_kejadian' => 'required', 'jalans_id' => 'required', 'tkp_dusun' => '', 'desa' => '', 'kecamatan' => 'required', 'kabupaten' => 'required', 'latitude' => 'required', 'longitude' => 'required', 'korban_md' => '', 'korban_lb' => '', 'korban_lr' => '', 'kondisi_kecelakaan' => 'required', 'kondisi_cahaya' => 'required', 'bentuk_geometri' => 'required', ]); // Mengambil data dari form $waktu_kejadian = $request->waktu_kejadian; $kondisi_kecelakaan = $request->kondisi_kecelakaan; $kondisi_cahaya = $request->kondisi_cahaya; $bentuk_geometri = $request->bentuk_geometri; $waktuKejadian = keanggotaanWaktuKejadian($waktu_kejadian); // ---------------------------------- Kondisi Kecelakaan ---------------------------------- // $kondisiKecelakaan = keanggotaanKondisiKecelakaan($kondisi_kecelakaan); // ---------------------------------- Kondisi Cahaya ---------------------------------- // $kondisiCahaya = keanggotaanKondisiCahaya($kondisi_cahaya); // ---------------------------------- Bentuk Geometri ---------------------------------- // $bentukGeometri = keanggotaanBentukGeometri($bentuk_geometri); $rule = Rules::where('waktu_kejadian', $waktuKejadian['waktu_kejadianRule']) ->where('kondisi_kecelakaan', $kondisiKecelakaan['kondisi_kecelakaanRule']) ->where('kondisi_cahaya', $kondisiCahaya['kondisi_cahayaRule']) ->where('bentuk_geometri', $bentukGeometri['bentuk_geometriRule']) ->first(); // Menghitung nilai defuzzy $Maxwaktu_kejadian = max($waktuKejadian['waktu_kejadianA'], $waktuKejadian['waktu_kejadianB'], $waktuKejadian['waktu_kejadianC'], $waktuKejadian['waktu_kejadianD']); $Maxkondisi_kecelakaan = max($kondisiKecelakaan['kondisi_kecelakaanA'], $kondisiKecelakaan['kondisi_kecelakaanB'], $kondisiKecelakaan['kondisi_kecelakaanC']); $Maxkondisi_cahaya = max($kondisiCahaya['kondisi_cahayaA'], $kondisiCahaya['kondisi_cahayaB']); $Maxbentuk_geometri = max($bentukGeometri['bentuk_geometriA'], $bentukGeometri['bentuk_geometriB'], $bentukGeometri['bentuk_geometriC'], $bentukGeometri['bentuk_geometriD'], $bentukGeometri['bentuk_geometriE']); $minRule = min($Maxwaktu_kejadian, $Maxkondisi_kecelakaan, $Maxkondisi_cahaya, $Maxbentuk_geometri); $luasMoment = hitungLuasMoment($rule->tingkat_kerawanan, $minRule); $defuzzy = $luasMoment['totalMoment'] / $luasMoment['totalLuas']; // Mengambil semua data $data = $request->all(); $data['nama_jalan'] = $jalan->nama_jalan; $data['id_jalan'] = $jalan->id; $slug = SlugService::createSlug(Jalan::class, 'slug', $jalan->nama_jalan); $data['slug'] = substr($slug, 0, -2); $data['tingkat_kerawanan'] = $rule->tingkat_kerawanan; $data['id_rules'] = $rule->id; $data['defuzzy'] = $defuzzy; Kecelakaan::create($data); if ($data) { return redirect() ->route('jalan.kecelakaan.index', ['jalan' => $data['slug']]) ->with([ 'success' => 'Data Kecelakaan Berhasil Ditambahkan' ]); } else { return redirect() ->back() ->withInput() ->with([ 'error' => 'Some problem occurred, please try again' ]); } } public function show($jalan, $kecelakaan) { $detailkecelakaan = Kecelakaan::select('tanggal', 'waktu_kejadian', 'nama_jalan', 'tkp_dusun', 'desa', 'kecamatan', 'kabupaten', 'latitude', 'longitude', 'korban_md', 'korban_lb', 'korban_lr', 'kondisi_kecelakaan', 'kondisi_cahaya', 'bentuk_geometri')->find($kecelakaan); // dd($detailkecelakaan); return response()->json([ 'status' => 200, 'detail' => $detailkecelakaan ]); // dd($detailkecelakaan); } public function edit($jalan, $kecelakaan) { $jalan = Jalan::where('slug', $jalan)->first(); $kecelakaan = Kecelakaan::where('id', $kecelakaan)->first(); // dd($kecelakaan); return view('dashboard.kecelakaan.edit', ['jalan' => $jalan, 'kecelakaan' => $kecelakaan]); } public function update(Request $request, Jalan $jalan, Kecelakaan $kecelakaan) { // Validasi data input $data = [ 'tanggal' => $request->tanggal, 'waktu_kejadian' => $request->waktu_kejadian, 'jalans_id' => $request->jalans_id, 'tkp_dusun' => $request->tkp_dusun, 'desa' => $request->desa, 'kecamatan' => $request->kecamatan, 'kabupaten' => $request->kabupaten, 'latitude' => $request->latitude, 'longitude' => $request->longitude, 'korban_md' => $request->korban_md, 'korban_lb' => $request->korban_lb, 'korban_lr' => $request->korban_lr, 'kondisi_kecelakaan' => $request->kondisi_kecelakaan, 'kondisi_cahaya' => $request->kondisi_cahaya, 'bentuk_geometri' => $request->bentuk_geometri, 'tingkat_kerawanan' => $request->tingkat_kerawanan, 'id_jalan' => $request->id_jalan, 'id_rules' => $request->id_rules, ]; // Menghitung nilai defuzzy $waktu_kejadian = $request->waktu_kejadian; $kondisi_kecelakaan = $request->kondisi_kecelakaan; $kondisi_cahaya = $request->kondisi_cahaya; $bentuk_geometri = $request->bentuk_geometri; $waktuKejadian = keanggotaanWaktuKejadian($waktu_kejadian); $kondisiKecelakaan = keanggotaanKondisiKecelakaan($kondisi_kecelakaan); $kondisiCahaya = keanggotaanKondisiCahaya($kondisi_cahaya); $bentukGeometri = keanggotaanBentukGeometri($bentuk_geometri); $rule = Rules::where('waktu_kejadian', $waktuKejadian['waktu_kejadianRule']) ->where('kondisi_kecelakaan', $kondisiKecelakaan['kondisi_kecelakaanRule']) ->where('kondisi_cahaya', $kondisiCahaya['kondisi_cahayaRule']) ->where('bentuk_geometri', $bentukGeometri['bentuk_geometriRule']) ->first(); $Maxwaktu_kejadian = max($waktuKejadian['waktu_kejadianA'], $waktuKejadian['waktu_kejadianB'], $waktuKejadian['waktu_kejadianC'], $waktuKejadian['waktu_kejadianD']); $Maxkondisi_kecelakaan = max($kondisiKecelakaan['kondisi_kecelakaanA'], $kondisiKecelakaan['kondisi_kecelakaanB'], $kondisiKecelakaan['kondisi_kecelakaanC']); $Maxkondisi_cahaya = max($kondisiCahaya['kondisi_cahayaA'], $kondisiCahaya['kondisi_cahayaB']); $Maxbentuk_geometri = max($bentukGeometri['bentuk_geometriA'], $bentukGeometri['bentuk_geometriB'], $bentukGeometri['bentuk_geometriC'], $bentukGeometri['bentuk_geometriD'], $bentukGeometri['bentuk_geometriE']); $minRule = min($Maxwaktu_kejadian, $Maxkondisi_kecelakaan, $Maxkondisi_cahaya, $Maxbentuk_geometri); $luasMoment = hitungLuasMoment($rule->tingkat_kerawanan, $minRule); $defuzzy = $luasMoment['totalMoment'] / $luasMoment['totalLuas']; // Menyimpan data $data['nama_jalan'] = $jalan->nama_jalan; $data['id_jalan'] = $jalan->id; $slug = SlugService::createSlug(Jalan::class, 'slug', $jalan->nama_jalan); $data['slug'] = substr($slug, 0, -2); $data['tingkat_kerawanan'] = $rule->tingkat_kerawanan; $data['id_rules'] = $rule->id; $data['defuzzy'] = $defuzzy; $kecelakaan->update($data); if ($data) { return redirect() ->route('jalan.kecelakaan.index', ['jalan' => $jalan->slug]) ->with([ 'success' => 'Data Kecelakaan Berhasil Diubah' ]); } else { return redirect() ->back() ->withInput() ->with([ 'error' => 'Some problem occurred, please try again' ]); } } public function detail($jalan, $kecelakaan) { $jalan = Jalan::where('slug', $jalan)->first(); $kecelakaan = Kecelakaan::where('id', $kecelakaan)->with(['rules', 'jalan'])->first(); // Mengambil hasil perhitungan derajat keanggotaan $waktuKejadian = keanggotaanWaktuKejadian($kecelakaan->waktu_kejadian); // ---------------------------------- Kondisi Kecelakaan ---------------------------------- // $kondisiKecelakaan = keanggotaanKondisiKecelakaan($kecelakaan->kondisi_kecelakaan); // ---------------------------------- Kondisi Cahaya ---------------------------------- // $kondisiCahaya = keanggotaanKondisiCahaya($kecelakaan->kondisi_cahaya); // ---------------------------------- Bentuk Geometri ---------------------------------- // $bentukGeometri = keanggotaanBentukGeometri($kecelakaan->bentuk_geometri); // ----------------------------------Min-Max Fungsi implikasi---------------------------------- // $Maxwaktu_kejadian = max($waktuKejadian['waktu_kejadianA'], $waktuKejadian['waktu_kejadianB'], $waktuKejadian['waktu_kejadianC'], $waktuKejadian['waktu_kejadianD']); $Maxkondisi_kecelakaan = max($kondisiKecelakaan['kondisi_kecelakaanA'], $kondisiKecelakaan['kondisi_kecelakaanB'], $kondisiKecelakaan['kondisi_kecelakaanC']); $Maxkondisi_cahaya = max($kondisiCahaya['kondisi_cahayaA'], $kondisiCahaya['kondisi_cahayaB']); $Maxbentuk_geometri = max($bentukGeometri['bentuk_geometriA'], $bentukGeometri['bentuk_geometriB'], $bentukGeometri['bentuk_geometriC'], $bentukGeometri['bentuk_geometriD'], $bentukGeometri['bentuk_geometriE']); // Fungsi implikasi -> hitung moment (helper) $minRule = min($Maxwaktu_kejadian, $Maxkondisi_kecelakaan, $Maxkondisi_cahaya, $Maxbentuk_geometri); // Menyimpan nilai hasil hitung luas dan moment $luasMoment = hitungLuasMoment($kecelakaan->tingkat_kerawanan, $minRule); $luasA1 = $luasMoment['luasA1']; $luasA2 = $luasMoment['luasA2']; $luasA3 = $luasMoment['luasA3']; // dd($luasA1, $luasA2, $luasA3); $momentSatu = $luasMoment['momentSatu']; $momentDua = $luasMoment['momentDua']; $momentTiga = $luasMoment['momentTiga']; // ---------------------------------- Defuzzifikasi(Menghitung nilai tengah) ---------------------------------- // $defuzzy = $luasMoment['totalMoment'] / $luasMoment['totalLuas']; $fungsiKeanggotaan = [ 'waktu_kejadian' => $Maxwaktu_kejadian, 'kondisi_kecelakaan' => $Maxkondisi_kecelakaan, 'kondisi_cahaya' => $Maxkondisi_cahaya, 'bentuk_geometri' => $Maxbentuk_geometri, ]; return view('dashboard.kecelakaan.detailfix', [ //Menampilkan data 'jalan' => $jalan, 'kecelakaan' => $kecelakaan, 'keanggotaan' => $fungsiKeanggotaan, 'luasA1' => $luasA1, 'luasA2' => $luasA2, 'luasA3' => $luasA3, 'momentSatu' => $momentSatu, 'momentDua' => $momentDua, 'momentTiga' => $momentTiga, 'defuzzy' => $defuzzy, ]); } public function destroy($id) { try { DB::table('kecelakaans')->where('id', $id)->delete(); // alihkan halaman ke halaman jalan dengan pesan sukses return redirect() ->back() ->with([ 'success' => 'Data kecelakaan Berhasil Dihapus', ]); } catch (\Illuminate\Database\QueryException $e) { if ($e->getCode() == '23000') { // Integrity constraint violation return redirect() ->back() ->with([ 'error' => 'Data kecelakaan tidak dapat dihapus karena terkait dengan data kecelakaan.', ]); } // Tangani pengecualian lainnya return redirect() ->back() ->with([ 'warning' => 'Terjadi kesalahan saat menghapus data kecelakaan.', ]); } } }