formMitigasiService = $formMitigasiService; } public function thankYou(string $id) { $user = Auth::user(); $km = KegiatanMitigasi::findOrFail($id); $data = [ 'oleh' => $user ? $user->name : 'Guest', 'waktu' => $km->created_at->translatedFormat('l, d F Y, H:i'), 'nama' => $km->nama_kegiatan, 'tahun' => $km->tahun_kegiatan, 'sektor' => $km->sektor, 'subsektor' => $km->sub_sektor, 'target' => $km->target, 'satuan' => $km->satuan, 'penurunan' => $km->emission_factor, ]; return view('form.index-mitigasi-thankyou', compact('data', 'km')); } public function downloadPDF(string $id) { $user = Auth::user(); $km = KegiatanMitigasi::findOrFail($id); $data = [ 'oleh' => $user ? $user->name : 'Guest', 'waktu' => $km->created_at->translatedFormat('l, d F Y, H:i'), 'nama' => $km->nama_kegiatan, 'tahun' => $km->tahun_kegiatan, 'sektor' => $km->sektor, 'subsektor' => $km->sub_sektor, 'target' => $km->target, 'satuan' => $km->satuan, 'penurunan' => $km->emission_factor, ]; $pdf = PDF::loadView('form.index-mitigasi-pdf', compact('data')) ->setPaper('a4', 'portrait'); return $pdf->download('bukti-submission-'.$km->nama_kegiatan.'.pdf'); } public function view(string $id) { $km = KegiatanMitigasi::with('sumberData')->findOrFail($id); $forms = ActivityDataMitigationForm::where('kegiatan_mitigasi_id', $id)->get(); $sessionData = [ 'tipe_kegiatan' => $km->tipe_kegiatan, 'tahun_kegiatan' => $km->tahun_kegiatan, 'sektor' => $km->sektor, 'sub_sektor' => $km->sub_sektor, 'kategori_perhitungan' => $km->kategori_perhitungan, 'kategori_sub_aktivitas' => $km->kategori_sub_aktivitas, 'mitigation_id' => $km->mitigation_id, 'tipe_laporan' => $km->tipe_laporan, 'nama_kegiatan' => $km->nama_kegiatan, 'informasi_lokasi_kegiatan' => $km->informasi_lokasi_kegiatan, 'jenis_kegiatan' => $km->jenis_kegiatan, 'pelaksana_kegiatan' => $km->pelaksana_kegiatan, 'pelaksana_kegiatan_rad' => $km->pelaksana_kegiatan_rad, 'nomenklatur_kemendagri' => $km->nomenklatur_kemendagri, 'target' => $km->target, 'satuan' => $km->satuan, 'realisasi' => $km->realisasi, 'sdg' => is_array($km->sdg) ? $km->sdg : (json_decode($km->sdg, true) ?? []), 'catatan' => $km->catatan, 'alokasi_apbn' => $km->alokasi_apbn, 'alokasi_apbd' => $km->alokasi_apbd, 'alokasi_swasta' => $km->alokasi_swasta, 'alokasi_sumber_dana_lain' => $km->alokasi_sumber_dana_lain, 'realisasi_apbn' => $km->realisasi_apbn, 'realisasi_apbd' => $km->realisasi_apbd, 'realisasi_swasta' => $km->realisasi_swasta, 'realisasi_sumber_dana_lain' => $km->realisasi_sumber_dana_lain, 'kabupaten_kota_location' => $km->kabupaten_kota_location, 'kecamatan_location' => $km->kecamatan_location, 'kelurahan_location' => $km->kelurahan_location, 'lat_location' => $km->lat_location, 'long_location' => $km->long_location, 'sumber_data' => $km->sumberData->map(fn($s) => [ 'title' => $s->judul_sumber_reference, 'year' => $s->tahun_sumber_reference, 'link' => $s->link_sumber_reference, ])->toArray(), 'activity_forms' => $forms->mapWithKeys(function($f) { $raw = $f->values_array; if (is_string($raw)) { $values = json_decode($raw, true) ?: []; } elseif (is_array($raw)) { $values = $raw; } else { $values = [$f->value]; } $values = array_map('strval', $values); return [ "activity_data_{$f->sequence}" => $values, "unit_{$f->sequence}" => $f->unit, ]; })->toArray(), ]; return view('form.index-mitigasi-view', [ 'sessionData' => $sessionData, 'id' => $id, ]); } public function edit(string $id, Request $request) { $km = KegiatanMitigasi::with('sumberData')->findOrFail($id); $forms = ActivityDataMitigationForm::where('kegiatan_mitigasi_id', $id)->get(); $sessionData = [ 'mitigation_id' => $km->mitigation_id, 'tipe_laporan' => $km->tipe_laporan, 'tipe_kegiatan' => $km->tipe_kegiatan, 'tahun_kegiatan' => $km->tahun_kegiatan, 'sektor' => $km->sektor, 'sub_sektor' => $km->sub_sektor, 'kategori_perhitungan' => $km->kategori_perhitungan, 'kategori_sub_aktivitas' => $km->kategori_sub_aktivitas, 'nama_kegiatan' => $km->nama_kegiatan, 'informasi_lokasi_kegiatan' => $km->informasi_lokasi_kegiatan, 'jenis_kegiatan' => $km->jenis_kegiatan, 'pelaksana_kegiatan' => $km->pelaksana_kegiatan, 'pelaksana_kegiatan_rad' => $km->pelaksana_kegiatan_rad, 'nomenklatur_kemendagri' => $km->nomenklatur_kemendagri, 'target' => $km->target, 'satuan' => $km->satuan, 'realisasi' => $km->realisasi, 'sdg' => json_decode($km->sdg, true) ?? [], 'catatan' => $km->catatan, 'alokasi_apbn' => $km->alokasi_apbn, 'alokasi_apbd' => $km->alokasi_apbd, 'alokasi_swasta' => $km->alokasi_swasta, 'alokasi_sumber_dana_lain' => $km->alokasi_sumber_dana_lain, 'realisasi_apbn' => $km->realisasi_apbn, 'realisasi_apbd' => $km->realisasi_apbd, 'realisasi_swasta' => $km->realisasi_swasta, 'realisasi_sumber_dana_lain' => $km->realisasi_sumber_dana_lain, 'kabupaten_kota_location' => $km->kabupaten_kota_location, 'kecamatan_location' => $km->kecamatan_location, 'kelurahan_location' => $km->kelurahan_location, 'lat_location' => $km->lat_location, 'long_location' => $km->long_location, 'sumber_data' => $km->sumberData->map(fn($s) => [ 'title' => $s->judul_sumber_reference, 'year' => $s->tahun_sumber_reference, 'link' => $s->link_sumber_reference, ])->toArray(), 'activity_forms' => $forms->mapWithKeys(function($f) { $raw = $f->values_array; if (is_string($raw)) { $values = json_decode($raw, true) ?: []; } elseif (is_array($raw)) { $values = $raw; } else { $values = [$f->value]; } $values = array_map('strval', $values); return [ "activity_data_{$f->sequence}" => $values, "unit_{$f->sequence}" => $f->unit, ]; })->toArray(), ]; $request->session()->put('kegiatan_mitigasi', $sessionData); $startYear = 2000; $currentYear = now()->year; $years = range($startYear, $currentYear); rsort($years); $sectors = KegiatanMitigasi::distinct()->pluck('sektor')->toArray(); return view('form.index-mitigasi-edit', [ 'sessionData' => $sessionData, 'years' => $years, 'currentYear' => $currentYear, 'sectors' => $sectors, 'mitigation' => $km, 'readonly' => false ]); } protected function persistActivityForms(array $inputs, string $mitigationId, string $kegiatanMitigasiId) { $isMultipleMap = ActivityDataMitigation::where('mitigation_id', $mitigationId) ->pluck('is_multiple', 'sequence') ->toArray(); $typeMap = ActivityDataMitigation::where('mitigation_id', $mitigationId) ->pluck('type_emission_reduction', 'sequence') ->toArray(); foreach ($isMultipleMap as $sequence => $isMultiple) { $unit = $inputs['unit_' . $sequence] ?? null; $value = $inputs['activity_data_' . $sequence] ?? null; $typeEmis = $typeMap[$sequence] ?? null; if ($isMultiple) { $clean = is_array($value) ? array_filter($value, fn($v) => $v !== null && $v !== '') : []; if (!empty($clean)) { ActivityDataMitigationForm::create([ 'kegiatan_mitigasi_id' => $kegiatanMitigasiId, 'sequence' => $sequence, 'value' => null, 'values_array' => array_values($clean), 'unit' => $unit, 'mitigation_id' => $mitigationId, 'type_emission_reduction' => $typeEmis, ]); } } else { $single = is_array($value) ? ($value[0] ?? null) : $value; if ($single !== null && $single !== '') { ActivityDataMitigationForm::create([ 'kegiatan_mitigasi_id' => $kegiatanMitigasiId, 'sequence' => $sequence, 'value' => $single, 'values_array' => null, 'unit' => $unit, 'mitigation_id' => $mitigationId, 'type_emission_reduction' => $typeEmis, ]); } } } } public function create(Request $request) { if ($request->has('reset')) { $request->session()->forget('kegiatan_mitigasi'); } $sessionData = $request->session()->get('kegiatan_mitigasi', []); $startYear = 2000; $currentYear = date('Y'); $years = range($startYear, $currentYear); rsort($years); return view('form.index-mitigasi', compact('sessionData', 'years', 'currentYear')); } public function update(Request $request, $id) { $kegiatanMitigasi = KegiatanMitigasi::with('sumberData')->findOrFail($id); $sessionData = $request->session()->get('kegiatan_mitigasi'); if (empty($sessionData)) { return response()->json([ 'success' => false, 'message' => 'Data tidak lengkap, silakan lengkapi semua bagian.' ]); } try { DB::transaction(function() use ($sessionData, $request, $kegiatanMitigasi) { $kegiatanMitigasi->revisi = ($kegiatanMitigasi->revisi ?? 0) + 1; $kegiatanMitigasi->update([ 'tipe_kegiatan' => $sessionData['tipe_kegiatan'] ?? null, 'tahun_kegiatan' => $this->sanitizeInteger($sessionData['tahun_kegiatan'] ?? null), 'sektor' => $sessionData['sektor'] ?? null, 'sub_sektor' => $sessionData['sub_sektor'] ?? null, 'kategori_perhitungan' => $sessionData['kategori_perhitungan'] ?? null, 'kategori_sub_aktivitas' => $sessionData['kategori_sub_aktivitas'] ?? null, 'mitigation_id' => $sessionData['mitigation_id'] ?? null, 'tipe_laporan' => $sessionData['tipe_laporan'] ?? 'laporan', 'nama_kegiatan' => $sessionData['nama_kegiatan'] ?? null, 'informasi_lokasi_kegiatan' => $sessionData['informasi_lokasi_kegiatan'] ?? null, 'jenis_kegiatan' => $sessionData['jenis_kegiatan'] ?? null, 'pelaksana_kegiatan' => $sessionData['pelaksana_kegiatan'] ?? null, 'pelaksana_kegiatan_rad' => $sessionData['pelaksana_kegiatan_rad'] ?? null, 'nomenklatur_kemendagri' => $sessionData['nomenklatur_kemendagri'] ?? null, 'target' => $sessionData['target'] ?? null, 'satuan' => $sessionData['satuan'] ?? null, 'realisasi' => $sessionData['realisasi'] ?? null, 'sdg' => json_encode($sessionData['sdg'] ?? []), 'catatan' => $sessionData['catatan'] ?? null, 'alokasi_apbn' => $sessionData['alokasi_apbn'] ?? null, 'alokasi_apbd' => $sessionData['alokasi_apbd'] ?? null, 'alokasi_swasta' => $sessionData['alokasi_swasta'] ?? null, 'alokasi_sumber_dana_lain' => $sessionData['alokasi_sumber_dana_lain'] ?? null, 'realisasi_apbn' => $sessionData['realisasi_apbn'] ?? null, 'realisasi_apbd' => $sessionData['realisasi_apbd'] ?? null, 'realisasi_swasta' => $sessionData['realisasi_swasta'] ?? null, 'realisasi_sumber_dana_lain'=> $sessionData['realisasi_sumber_dana_lain'] ?? null, 'kabupaten_kota_location' => $sessionData['kabupaten_kota_location'] ?? null, 'kecamatan_location' => $sessionData['kecamatan_location'] ?? null, 'kelurahan_location' => $sessionData['kelurahan_location'] ?? null, 'lat_location' => $sessionData['lat_location'] ?? null, 'long_location' => $sessionData['long_location'] ?? null, 'updated_by' => auth()->check() ? auth()->user()->name : null, ]); // Update sumber data (delete all, re-insert sanitized) $kegiatanMitigasi->sumberData()->delete(); foreach($sessionData['sumber_data'] ?? [] as $s) { $kegiatanMitigasi->sumberData()->create([ 'id' => Str::uuid(), 'judul_sumber_reference' => trim($s['title'] ?? '') ?: null, 'tahun_sumber_reference' => $this->sanitizeInteger($s['year'] ?? null), 'link_sumber_reference' => trim($s['link'] ?? '') ?: null, ]); } ActivityDataMitigationForm::where('kegiatan_mitigasi_id', $kegiatanMitigasi->id)->delete(); $this->persistActivityForms($request->all(), $sessionData['mitigation_id'], $kegiatanMitigasi->id); $this->formMitigasiService->calculateAndPersist($sessionData['mitigation_id'], $kegiatanMitigasi); $request->session()->forget('kegiatan_mitigasi'); }); return response()->json([ 'success' => true, 'redirect' => route('formMitigasi.thankYou', $id), ]); } catch (\Exception $e) { Log::error('Error updating data: ' . $e->getMessage()); return back()->with('error', 'Gagal mengupdate data. Silakan coba lagi.'); } } public function loadQuestion(Request $request) { $mitigation_id = $request->input('mitigation_id'); if (!Str::isUuid($mitigation_id)) { return response()->json(['message' => 'Invalid mitigation ID'], 400); } $questions = ActivityDataMitigation::select( 'activity_data_mitigation.id', 'activity_data_mitigation.activity_data', 'activity_data_mitigation.unit', 'activity_data_mitigation.sequence', 'activity_data_mitigation.type', 'activity_data_mitigation.list_data', 'activity_data_mitigation.is_multiple', 'activity_data_mitigation.question_plus', 'activity_data_mitigation.ad_sequence', 'activity_data_mitigation.type_emission_reduction', 'activity_data_mitigation.is_required', 'activity_data_mitigation.title_group', 'activity_data_mitigation.keterangan', 'am.activity_desc as activity_desc', 'am.activity_type as title' ) ->join('activity.mitigation as am', 'activity_data_mitigation.mitigation_id', '=', 'am.id') ->where('activity_data_mitigation.mitigation_id', $mitigation_id) ->orderBy('activity_data_mitigation.sequence') ->get() ->map(function ($item) { $dataMitigation = ActivityDataMitigation::with('units') ->find($item->id); $units = $dataMitigation && $dataMitigation->units->isNotEmpty() ? $dataMitigation->units->pluck('unit') : collect([$item->unit])->filter(); $category = $dataMitigation && $dataMitigation->units->isNotEmpty() ? $dataMitigation->units->pluck('category') : collect([$item->unit])->filter(); return [ 'id' => $item->id, 'sequence' => $item->sequence, 'activity_data' => $item->activity_data, 'units' => $units->values(), 'category' => $category->values(), 'type' => $item->type, 'choices' => $this->parseListData($item->list_data), 'is_multiple' => (bool)$item->is_multiple, 'is_required' => (bool)$item->is_required, 'question_plus' => $item->question_plus, 'ad_sequence' => $item->ad_sequence, 'type_emission_reduction' => $item->type_emission_reduction, 'activity_desc' => $item->activity_desc, 'title' => $item->title, 'title_group' => $item->title_group, 'keterangan' => $item->keterangan, ]; }); return response()->json($questions); } public function storePart1(Request $request) { $validated = $request->validate([ 'tipe_kegiatan' => 'required|in:inti,pendukung,prasyarat', 'tahun_kegiatan' => 'required|integer|min:2000|max:' . date('Y'), 'sektor' => 'required|string', 'sub_sektor' => 'required|string', 'kategori_perhitungan' => 'required|string', 'kategori_sub_aktivitas' => 'sometimes|nullable|string', 'mitigation_id' => 'required|string' ]); $sessionData = $request->session()->get('kegiatan_mitigasi'); $sessionArray = is_object($sessionData) ? $sessionData->toArray() : (array) $sessionData; $mergedData = array_merge($sessionArray, $validated); if ($request->filled('laporan')) { $mergedData['tipe_laporan'] = $request->laporan; } else { $mergedData['tipe_laporan'] = $sessionArray['tipe_laporan'] ?? 'laporan'; } $request->session()->put('kegiatan_mitigasi', $mergedData); return response()->json(['success' => true]); } public function storePart2(Request $request) { $validated = $request->validate([ 'nama_kegiatan' => 'required|string', 'informasi_lokasi_kegiatan' => 'required|string', 'jenis_kegiatan' => 'required|string|in:lokal,berkelanjutan', 'pelaksana_kegiatan' => 'nullable|string', 'pelaksana_kegiatan_rad' => 'nullable|string', 'nomenklatur_kemendagri' => 'nullable|string', 'target' => 'required|string', 'satuan' => 'required|string', 'realisasi' => 'nullable|string', 'sdg' => 'nullable|array', 'catatan' => 'nullable|string', ]); $sessionData = $request->session()->get('kegiatan_mitigasi'); if (!$sessionData) { return response()->json(['success' => false, 'message' => 'Silakan lengkapi bagian Informasi Umum terlebih dahulu']); } $updatedData = array_merge($sessionData, $validated); $request->session()->put('kegiatan_mitigasi', $updatedData); return response()->json(['success' => true]); } public function storePart3(Request $request) { $validated = $request->validate([ 'alokasi_apbn' => 'nullable|string', 'alokasi_apbd' => 'nullable|string', 'alokasi_swasta' => 'nullable|string', 'alokasi_sumber_dana_lain' => 'nullable|string', 'realisasi_apbn' => 'nullable|string', 'realisasi_apbd' => 'nullable|string', 'realisasi_swasta' => 'nullable|string', 'realisasi_sumber_dana_lain' => 'nullable|string' ]); $sessionData = $request->session()->get('kegiatan_mitigasi'); if (!$sessionData) { return response()->json(['success' => false, 'message' => 'Silakan lengkapi bagian Informasi Umum terlebih dahulu']); } $updatedData = array_merge($sessionData, $validated); $request->session()->put('kegiatan_mitigasi', $updatedData); return response()->json(['success' => true]); } public function storePart4(Request $request) { try { $validated = $request->validate([ 'titleSourceReference' => 'nullable|array', 'titleSourceReference.*' => 'nullable|string|max:255', 'yearSourceReference' => 'nullable|array', 'yearSourceReference.*' => 'nullable|string|max:4', 'linkSourceReference' => 'nullable|array', 'linkSourceReference.*' => 'nullable|string|max:500', ]); $sessionData = $request->session()->get('kegiatan_mitigasi', []); if (empty($sessionData)) { return response()->json([ 'success' => false, 'message' => 'Silakan lengkapi bagian Informasi Umum terlebih dahulu.' ]); } $titles = $validated['titleSourceReference'] ?? []; $years = $validated['yearSourceReference'] ?? []; $links = $validated['linkSourceReference'] ?? []; $max = max(count($titles), count($years), count($links)); $sumberDataList = []; for ($i = 0; $i < $max; $i++) { $sumberDataList[] = [ 'title' => trim($titles[$i] ?? ''), 'year' => trim($years[$i] ?? ''), 'link' => trim($links[$i] ?? ''), ]; } $updatedData = array_merge($sessionData, ['sumber_data' => $sumberDataList]); $request->session()->put('kegiatan_mitigasi', $updatedData); return response()->json(['success' => true]); } catch (\Exception $e) { Log::error('Error storePart4: '.$e->getMessage()); return response()->json([ 'success' => false, 'message' => 'Terjadi error server: '.$e->getMessage() ]); } } public function storePart5(Request $request) { $validated = $request->validate([ 'kabupaten_kota_location' => 'nullable|string', 'kecamatan_location' => 'nullable|string', 'kelurahan_location' => 'nullable|string', 'lat_location' => 'nullable|string', 'long_location' => 'nullable|string' ]); $sessionData = $request->session()->get('kegiatan_mitigasi'); if (!$sessionData) { return response()->json(['success' => false, 'message' => 'Silakan lengkapi bagian Informasi Umum terlebih dahulu']); } $updatedData = array_merge($sessionData, $validated); $request->session()->put('kegiatan_mitigasi', $updatedData); return response()->json(['success' => true]); } public function storeFinal(Request $request) { $sessionData = $request->session()->get('kegiatan_mitigasi'); if (empty($sessionData)) { return response()->json([ 'success' => false, 'message' => 'Silakan lengkapi semua bagian terlebih dahulu' ]); } try { $mitigasiId = Str::uuid()->toString(); DB::transaction(function() use ($sessionData, $request, $mitigasiId) { $kegiatanMitigasi = KegiatanMitigasi::create([ 'id' => $mitigasiId, 'tipe_kegiatan' => $sessionData['tipe_kegiatan'] ?? null, 'tahun_kegiatan' => $this->sanitizeInteger($sessionData['tahun_kegiatan'] ?? null), 'sektor' => $sessionData['sektor'] ?? null, 'sub_sektor' => $sessionData['sub_sektor'] ?? null, 'kategori_perhitungan' => $sessionData['kategori_perhitungan'] ?? null, 'kategori_sub_aktivitas' => $sessionData['kategori_sub_aktivitas'] ?? null, 'mitigation_id' => $sessionData['mitigation_id'] ?? null, 'tipe_laporan' => $sessionData['tipe_laporan'] ?? 'laporan', 'nama_kegiatan' => $sessionData['nama_kegiatan'] ?? null, 'informasi_lokasi_kegiatan' => $sessionData['informasi_lokasi_kegiatan'] ?? null, 'jenis_kegiatan' => $sessionData['jenis_kegiatan'] ?? null, 'pelaksana_kegiatan' => $sessionData['pelaksana_kegiatan'] ?? null, 'pelaksana_kegiatan_rad' => $sessionData['pelaksana_kegiatan_rad'] ?? null, 'nomenklatur_kemendagri' => $sessionData['nomenklatur_kemendagri'] ?? null, 'target' => $sessionData['target'] ?? null, 'satuan' => $sessionData['satuan'] ?? null, 'realisasi' => $sessionData['realisasi'] ?? null, 'sdg' => json_encode($sessionData['sdg'] ?? []), 'catatan' => $sessionData['catatan'] ?? null, 'alokasi_apbn' => $sessionData['alokasi_apbn'] ?? null, 'alokasi_apbd' => $sessionData['alokasi_apbd'] ?? null, 'alokasi_swasta' => $sessionData['alokasi_swasta'] ?? null, 'alokasi_sumber_dana_lain' => $sessionData['alokasi_sumber_dana_lain'] ?? null, 'realisasi_apbn' => $sessionData['realisasi_apbn'] ?? null, 'realisasi_apbd' => $sessionData['realisasi_apbd'] ?? null, 'realisasi_swasta' => $sessionData['realisasi_swasta'] ?? null, 'realisasi_sumber_dana_lain' => $sessionData['realisasi_sumber_dana_lain'] ?? null, 'kabupaten_kota_location'=> $sessionData['kabupaten_kota_location'] ?? null, 'kecamatan_location' => $sessionData['kecamatan_location'] ?? null, 'kelurahan_location' => $sessionData['kelurahan_location'] ?? null, 'lat_location' => $sessionData['lat_location'] ?? null, 'long_location' => $sessionData['long_location'] ?? null, 'created_by' => auth()->check() ? auth()->user()->name : null, ]); collect($sessionData['sumber_data'] ?? []) ->filter(function($s) { return trim($s['title'] ?? '') !== '' || trim($s['year'] ?? '') !== '' || trim($s['link'] ?? '') !== ''; }) ->each(function($s) use ($kegiatanMitigasi) { $kegiatanMitigasi->sumberData()->create([ 'id' => Str::uuid()->toString(), 'judul_sumber_reference' => trim($s['title'] ?? '') ?: null, 'tahun_sumber_reference' => $this->sanitizeInteger($s['year'] ?? null), 'link_sumber_reference' => trim($s['link'] ?? '') ?: null, ]); }); $this->persistActivityForms($request->all(), $sessionData['mitigation_id'], $mitigasiId); $this->formMitigasiService->calculateAndPersist($sessionData['mitigation_id'], $kegiatanMitigasi, $mitigasiId); $request->session()->forget('kegiatan_mitigasi'); }); return response()->json([ 'success' => true, 'redirect' => route('formMitigasi.thankYou', $mitigasiId), ]); } catch (\Exception $e) { Log::error('Error storing final data: ' . $e->getMessage()); return back()->with('error', 'Gagal menyimpan data. Silakan coba lagi.'); } } // ... fungsi getSectors, getSubSectors, getKategoriPerhitungan, getSubActivity, getAksiRAD, getKabkot, getKecamatan, getKelurahan tidak perlu diubah ... public function getSectors() { $query = Mitigation::select('sector') ->where('is_active', true) ->distinct(); $result = $query->pluck('sector'); return response()->json($result); } public function getSubSectors(Request $request) { $param = $request->input('sector'); $query = Mitigation::select('sub_sector') ->where('sector', $param) ->where('is_active', true) ->distinct(); $result = $query->pluck('sub_sector'); return response()->json($result); } public function getKategoriPerhitungan(Request $request) { $param = $request->input('sub_sector'); $param2 = $request->input('sector'); $query = Mitigation::select('id', 'activity_type') ->where('sub_sector', $param) ->where('sector', $param2) ->where('is_active', true) ->distinct('activity_type')->get(); return response()->json($query); } public function getSubActivity(Request $request) { $param = $request->input('sub_sector'); $param2 = $request->input('sector'); $param3 = $request->input('activity'); $query = Mitigation::select('id', 'sub_activity', 'sub_activity_desc') ->where('sub_sector', $param) ->where('sector', $param2) ->where('activity_type', $param3) ->where('is_active', true) ->distinct('sub_activity')->get(); return response()->json($query); } public function getAksiRAD(Request $request) { $param = $request->input('sub_sector'); $data = MitigationRendahKarbonDaerah::select('sector', 'sub_sector', 'name') ->where('sub_sector', $param) ->distinct('name')->get(); $result = $data->map(function ($item) { return "[" . $item->sector . " - " . $item->sub_sector . "] " . $item->name; }); return response()->json($result); } public function getKabkot() { $query = Kabupaten::select('kabkot_id', 'kabkot_name') ->get(); return response()->json($query); } public function getKecamatan(Request $request) { $param = $request->input('kabkot_id'); $query = Kecamatan::select('kec_id', 'kec_name') ->where('kabkot_id', $param) ->get(); return response()->json($query); } public function getKelurahan(Request $request) { $kabkot_id = $request->input('kabkot_id'); $kec_id = $request->input('kec_id'); $query = Kelurahan::select('kel_id', 'kel_name') ->where('kabkot_id', $kabkot_id) ->where('kec_id', $kec_id) ->get(); return response()->json($query); } }