sigd/app/Http/Controllers/Activity/FormAdaptasiController.php

388 lines
16 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

<?php
namespace App\Http\Controllers\Activity;
use App\Http\Controllers\Controller;
use App\Models\Adaptation;
use Illuminate\Http\Request;
use App\Models\KegiatanAdaptasi;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Auth;
use Barryvdh\DomPDF\Facade\Pdf;
class FormAdaptasiController extends Controller
{
public function thankYou(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,
];
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);
}
}