$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-adaptasi-thankyou', compact('data', 'km')); } public function downloadPDF(string $id) { $user = Auth::user(); $km = KegiatanAdaptasi::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-adaptasi.pdf', compact('data')) ->setPaper('a4', 'portrait'); return $pdf->download('bukti-submission-'.$km->nama_kegiatan.'.pdf'); } public function view(string $id) { $ka = KegiatanAdaptasi::findOrFail($id); $sessionData = [ 'adaptation_id' => $ka->adaptation_id, 'nama_kegiatan' => $ka->nama_kegiatan, 'tahun_kegiatan' => $ka->tahun_kegiatan, 'sektor' => $ka->sektor, 'sub_sektor' => $ka->sub_sektor, 'kategori_aksi' => $ka->kategori_aksi, // 'jenis_aksi' => $ka->jenis_aksi, // 'aksi' => $ka->aksi, 'pelaksana_kegiatan' => $ka->pelaksana_kegiatan, 'lokasi_kegiatan' => $ka->lokasi_kegiatan, 'waktu_kegiatan' => $ka->waktu_kegiatan, 'dokumen' => $ka->dokumen, 'alokasi_apbn' => $ka->alokasi_apbn, 'alokasi_apbd' => $ka->alokasi_apbd, 'alokasi_swasta' => $ka->alokasi_swasta, 'alokasi_sumber_dana_lain' => $ka->alokasi_sumber_dana_lain, 'realisasi_apbn' => $ka->realisasi_apbn, 'realisasi_apbd' => $ka->realisasi_apbd, 'realisasi_swasta' => $ka->realisasi_swasta, 'realisasi_sumber_dana_lain' => $ka->realisasi_sumber_dana_lain, 'detail_kegiatan' => $ka->detail_kegiatan, ]; return view('form.index-adaptasi-view', [ 'sessionData' => $sessionData, 'id' => $id, ]); } public function edit(string $id, Request $request) { $ka = KegiatanAdaptasi::findOrFail($id); $sessionData = [ 'adaptation_id' => $ka->adaptation_id, 'nama_kegiatan' => $ka->nama_kegiatan, 'tahun_kegiatan' => $ka->tahun_kegiatan, 'sektor' => $ka->sektor, 'sub_sektor' => $ka->sub_sektor, 'kategori_aksi' => $ka->kategori_aksi, // 'jenis_aksi' => $ka->jenis_aksi, // 'aksi' => $ka->aksi, 'pelaksana_kegiatan' => $ka->pelaksana_kegiatan, 'lokasi_kegiatan' => $ka->lokasi_kegiatan, 'waktu_kegiatan' => $ka->waktu_kegiatan, 'dokumen' => $ka->dokumen, 'alokasi_apbn' => $ka->alokasi_apbn, 'alokasi_apbd' => $ka->alokasi_apbd, 'alokasi_swasta' => $ka->alokasi_swasta, 'alokasi_sumber_dana_lain' => $ka->alokasi_sumber_dana_lain, 'realisasi_apbn' => $ka->realisasi_apbn, 'realisasi_apbd' => $ka->realisasi_apbd, 'realisasi_swasta' => $ka->realisasi_swasta, 'realisasi_sumber_dana_lain' => $ka->realisasi_sumber_dana_lain, 'detail_kegiatan' => $ka->detail_kegiatan, ]; $request->session()->put('kegiatan_adaptasi', $sessionData); $startYear = 200; $currentYear = now()->year; $years = range($startYear, $currentYear); rsort($years); $sectors = KegiatanAdaptasi::distinct()->pluck('sektor')->toArray(); return view('form.index-adaptasi-edit', [ 'sessionData' => $sessionData, 'years' => $years, 'currentYear' => $currentYear, 'sectors' => $sectors, 'adaptation' => $ka, 'readonly' => false ]); } public function create(Request $request) { if ($request->has('reset')) { $request->session()->forget('kegiatan_adaptasi'); } $sessionData = $request->session()->get('kegiatan_adaptasi', []); $startYear = 2000; $currentYear = date('Y'); $years = range($startYear, $currentYear); rsort($years); return view('form.index-adaptasi', compact('sessionData', 'years', 'currentYear')); } public function update(Request $request, $id) { $kegiatanAdaptasi = KegiatanAdaptasi::findOrFail($id); $sessionData = $request->session()->get('kegiatan_adaptasi'); if (empty($sessionData)) { return response()->json([ 'success' => false, 'message' => 'Data tidak lengkap, silakan lengkapi semua bagian.' ]); } try { DB::transaction(function() use ($sessionData, $request, $kegiatanAdaptasi) { $kegiatanAdaptasi->update([ 'adaptation_id' => $sessionData['adaptation_id'] ?? null, 'nama_kegiatan' => $sessionData['nama_kegiatan'] ?? null, 'tahun_kegiatan' => $sessionData['tahun_kegiatan'] ?? null, 'sektor' => $sessionData['sektor'] ?? null, 'sub_sektor' => $sessionData['sub_sektor'] ?? null, 'kategori_aksi' => $sessionData['kategori_aksi'] ?? null, // 'jenis_aksi' => $sessionData['jenis_aksi'] ?? null, // 'aksi' => $sessionData['aksi'] ?? null, 'pelaksana_kegiatan' => $sessionData['pelaksana_kegiatan'] ?? null, 'lokasi_kegiatan' => $sessionData['lokasi_kegiatan'] ?? null, 'waktu_kegiatan' => $sessionData['waktu_kegiatan'] ?? null, 'dokumen' => $sessionData['dokumen'] ?? 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, 'detail_kegiatan' => $request['detail_kegiatan'] ?? $sessionData['detail_kegiatan'], 'updated_by' => auth()->check() ? auth()->user()->name : null, ]); $request->session()->forget('kegiatan_adaptasi'); }); return response()->json([ 'success' => true, 'redirect' => route('formAdaptasi.thankYou', $id), ]); } catch(\Exception $e) { Log::error('Error updating data: ' . $e->getMessage()); return back()->with('error', 'Gagal mengupdate data. Silakan coba lagi.'); } } public function storePart1(Request $request) { $validated = $request->validate([ 'nama_kegiatan' => 'required|string', 'tahun_kegiatan' => 'required|integer|min:2000|max:' . date('Y'), 'sektor' => 'required|string', 'sub_sektor' => 'required|string', 'kategori_aksi' => 'required|string', // 'jenis_aksi' => 'required|string', // 'aksi' => 'required|string', 'pelaksana_kegiatan' => 'nullable|string', 'lokasi_kegiatan' => 'nullable|string', 'waktu_kegiatan' => 'nullable|string', 'dokumen' => 'nullable|string', 'adaptation_id' => 'required|string' ]); $sessionData = $request->session()->get('kegiatan_adaptasi'); $sessionArray = is_object($sessionData) ? $sessionData->toArray() : (array) $sessionData; $mergedData = array_merge($sessionArray, $validated); $request->session()->put('kegiatan_adaptasi', $mergedData); return response()->json(['success' => true]); } public function storePart2(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_adaptasi'); if(!$sessionData) { return response()->json(['success' => false, 'message' => 'Silakan lengkapi bagian Informasi Umum terlebih dahulu']); } $updatedData = array_merge($sessionData, $validated); $request->session()->put('kegiatan_adaptasi', $updatedData); return response()->json(['success' => true]); } public function storeFinal(Request $request) { $sessionData = $request->session()->get('kegiatan_adaptasi'); if (empty($sessionData)) { return response()->json([ 'success' => false, 'message' => 'Silakan lengkapi semua bagian terlebih dahulu' ]); } try { $adaptasiId = Str::uuid()->toString(); DB::transaction(function() use ($sessionData, $request, $adaptasiId) { // 1️⃣ Create master record KegiatanAdaptasi::create([ 'id' => $adaptasiId, 'adaptation_id' => $sessionData['adaptation_id'] ?? null, 'nama_kegiatan' => $sessionData['nama_kegiatan'] ?? null, 'tahun_kegiatan' => $sessionData['tahun_kegiatan'] ?? null, 'sektor' => $sessionData['sektor'] ?? null, 'sub_sektor' => $sessionData['sub_sektor'] ?? null, 'kategori_aksi' => $sessionData['kategori_aksi'] ?? null, // 'jenis_aksi' => $sessionData['jenis_aksi'] ?? null, // 'aksi' => $sessionData['aksi'] ?? null, 'pelaksana_kegiatan' => $sessionData['pelaksana_kegiatan'] ?? null, 'lokasi_kegiatan' => $sessionData['lokasi_kegiatan'] ?? null, 'waktu_kegiatan' => $sessionData['waktu_kegiatan'] ?? null, 'dokumen' => $sessionData['dokumen'] ?? 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, 'detail_kegiatan' => $sessionData['detail_kegiatan'] ?? $request->input('detail_kegiatan'), 'created_by' => auth()->check() ? auth()->user()->name : null, ]); // bersihkan session setelah sukses $request->session()->forget('kegiatan_adaptasi'); }); return response()->json([ 'success' => true, 'redirect' => route('formAdaptasi.thankYou', $adaptasiId), ]); } catch (\Exception $e) { Log::error('Error storing final data: ' . $e->getMessage()); return back()->with('error', 'Gagal menyimpan data. Silakan coba lagi.'); } } public function getSectors() { $query = Adaptation::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 = Adaptation::select('sub_sector') ->where('sector', $param) ->where('is_active', true) ->distinct(); $result = $query->pluck('sub_sector'); return response()->json($result); } public function getKategoriAksi(Request $request) { $param = $request->input('sub_sector'); $param2 = $request->input('sector'); $query = Adaptation::select('id','kategori_aksi') ->where('sub_sector', $param) ->where('sector', $param2) ->where('is_active', true) ->distinct() ->get(); // kirim langsung object, jangan pluck return response()->json($query); } public function getJenisAksi(Request $request) { $param = $request->input('sub_sector'); $param2 = $request->input('sector'); $param3 = $request->input('kategori'); $query = Adaptation::select('jenis_aksi') ->where('sub_sector', $param) ->where('sector', $param2) ->where('kategori_aksi', $param3) ->where('is_active', true) ->distinct()->get(); $result = $query->pluck('jenis_aksi'); return response()->json($result); } public function getAksi(Request $request) { $param = $request->input('sub_sector'); $param2 = $request->input('sector'); $param3 = $request->input('kategori'); $param4 = $request->input('jenis'); $query = Adaptation::select('id', 'aksi') ->where('sub_sector', $param) ->where('sector', $param2) ->where('kategori_aksi', $param3) ->where('jenis_aksi', $param4) ->where('is_active', true) ->distinct('aksi')->get(); return response()->json($query); } }