388 lines
16 KiB
PHP
388 lines
16 KiB
PHP
<?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);
|
||
}
|
||
} |