228 lines
8.2 KiB
PHP
228 lines
8.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\InformasiKegiatan;
|
|
use App\Models\Kabupaten;
|
|
use App\Models\Kecamatan;
|
|
use App\Models\Kelurahan;
|
|
use Illuminate\Http\Request;
|
|
use Carbon\Carbon;
|
|
|
|
class LayananController extends Controller
|
|
{
|
|
/**
|
|
* Get layanan data for homepage
|
|
*/
|
|
public function getLayananData()
|
|
{
|
|
// Header data
|
|
$header = [
|
|
'title' => 'Layanan Perizinan Lingkungan',
|
|
'subtitle' => 'Informasi terkini mengenai berbagai layanan perizinan dan penilaian dampak lingkungan'
|
|
];
|
|
|
|
// Tabs data
|
|
$tabs = [
|
|
['id' => 'amdal', 'label' => 'AMDAL'],
|
|
['id' => 'uklupl', 'label' => 'UKL-UPL'],
|
|
['id' => 'addendum', 'label' => 'Addendum'],
|
|
['id' => 'audit', 'label' => 'AUDIT']
|
|
];
|
|
|
|
// Contents data from database
|
|
$contents = [
|
|
'amdal' => $this->getKegiatanByJenis('AMDAL'),
|
|
'uklupl' => $this->getKegiatanByJenis('UKL-UPL'),
|
|
'addendum' => $this->getKegiatanByJenis('Addendum'),
|
|
'audit' => $this->getKegiatanByJenis('AUDIT', true) // Special format for audit
|
|
];
|
|
|
|
return response()->json([
|
|
'header' => $header,
|
|
'tabs' => $tabs,
|
|
'contents' => $contents
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Get kegiatan data by document type
|
|
*/
|
|
private function getKegiatanByJenis($jenis, $isAudit = false)
|
|
{
|
|
$kegiatan = InformasiKegiatan::where('JenisDokumen', $jenis)
|
|
->where('Status', 'aktif')
|
|
->whereDate('TanggalSelesaiPeriode', '>=', Carbon::now())
|
|
->orderBy('TanggalMulaiPeriode', 'desc')
|
|
->take(10)
|
|
->get();
|
|
|
|
if ($isAudit) {
|
|
// Format untuk audit table
|
|
return $kegiatan->map(function ($item, $index) {
|
|
return [
|
|
'no' => $index + 1,
|
|
'company' => $item->Pemrakarsa,
|
|
'title' => $item->NamaKegiatan,
|
|
'description' => $item->DeskripsiKegiatan,
|
|
'link' => route('layanan.detail', $item->KegiatanID)
|
|
];
|
|
})->toArray();
|
|
} else {
|
|
// Format untuk standard items
|
|
return $kegiatan->map(function ($item) {
|
|
return [
|
|
'id' => $item->KegiatanID,
|
|
'title' => $item->NamaKegiatan,
|
|
'description' => $item->DeskripsiKegiatan,
|
|
'periode' => $this->formatPeriode($item->TanggalMulaiPeriode, $item->TanggalSelesaiPeriode),
|
|
'link' => route('layanan.detail', $item->KegiatanID),
|
|
'status' => $item->Status,
|
|
'pemrakarsa' => $item->Pemrakarsa,
|
|
'jenis_dokumen' => $item->JenisDokumen,
|
|
'no_registrasi' => $item->NoRegistrasi
|
|
];
|
|
})->toArray();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Format periode display
|
|
*/
|
|
private function formatPeriode($tanggalMulai, $tanggalSelesai)
|
|
{
|
|
$mulai = Carbon::parse($tanggalMulai);
|
|
$selesai = Carbon::parse($tanggalSelesai);
|
|
|
|
return $mulai->format('d M') . ' - ' . $selesai->format('d M Y');
|
|
}
|
|
|
|
/**
|
|
* Get detail kegiatan for feedback form
|
|
*/
|
|
public function getDetailKegiatan($id)
|
|
{
|
|
$kegiatan = InformasiKegiatan::findOrFail($id);
|
|
|
|
return response()->json([
|
|
'id' => $kegiatan->KegiatanID,
|
|
'no_registrasi' => $kegiatan->NoRegistrasi,
|
|
'jenis_dokumen' => $kegiatan->JenisDokumen,
|
|
'nama_kegiatan' => $kegiatan->NamaKegiatan,
|
|
'bidang_usaha' => $kegiatan->BidangUsaha,
|
|
'skala_besaran' => $kegiatan->SkalaBesaran,
|
|
'lokasi_kegiatan' => $kegiatan->LokasiKegiatan,
|
|
'kewenangan' => $kegiatan->Kewenangan,
|
|
'pemrakarsa' => $kegiatan->Pemrakarsa,
|
|
'provinsi_kota' => $kegiatan->ProvinsiKota,
|
|
'deskripsi_kegiatan' => $kegiatan->DeskripsiKegiatan,
|
|
'dampak_potensial' => $kegiatan->DampakPotensial,
|
|
'deskripsi_lokasi' => $kegiatan->DeskripsiLokasi,
|
|
'latitude' => $kegiatan->Latitude,
|
|
'longitude' => $kegiatan->Longitude,
|
|
'periode' => $this->formatPeriode($kegiatan->TanggalMulaiPeriode, $kegiatan->TanggalSelesaiPeriode)
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Get wilayah data (Kabupaten, Kecamatan, Kelurahan)
|
|
*/
|
|
public function getWilayahData()
|
|
{
|
|
$kabupaten = Kabupaten::orderBy('NamaKabupaten')->get();
|
|
$kecamatan = Kecamatan::orderBy('NamaKecamatan')->get();
|
|
$kelurahan = Kelurahan::orderBy('NamaKelurahan')->get();
|
|
|
|
return response()->json([
|
|
'kabkota' => $kabupaten->map(function($item) {
|
|
return [
|
|
'value' => $item->KabupatenId,
|
|
'label' => $item->NamaKabupaten
|
|
];
|
|
}),
|
|
'kecamatan' => $kecamatan->map(function($item) {
|
|
return [
|
|
'value' => $item->KecamatanId,
|
|
'label' => $item->NamaKecamatan,
|
|
'kabupaten_id' => $item->KabupatenId
|
|
];
|
|
}),
|
|
'kelurahan' => $kelurahan->map(function($item) {
|
|
return [
|
|
'value' => $item->KelurahanId,
|
|
'label' => $item->NamaKelurahan,
|
|
'kecamatan_id' => $item->KecamatanId
|
|
];
|
|
})
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Get filtered kegiatan data
|
|
*/
|
|
public function getFilteredKegiatan(Request $request)
|
|
{
|
|
$query = InformasiKegiatan::where('Status', 'aktif')
|
|
->whereDate('TanggalSelesaiPeriode', '>=', Carbon::now());
|
|
|
|
// Filter by search term
|
|
if ($request->search) {
|
|
$query->where(function($q) use ($request) {
|
|
$q->where('NamaKegiatan', 'ILIKE', '%' . $request->search . '%')
|
|
->orWhere('DeskripsiKegiatan', 'ILIKE', '%' . $request->search . '%')
|
|
->orWhere('Pemrakarsa', 'ILIKE', '%' . $request->search . '%');
|
|
});
|
|
}
|
|
|
|
// Filter by document type
|
|
if ($request->jenis_dokumen) {
|
|
$allowedTypes = ['AMDAL', 'UKL-UPL', 'Addendum', 'AUDIT'];
|
|
if (in_array($request->jenis_dokumen, $allowedTypes)) {
|
|
$query->where('JenisDokumen', $request->jenis_dokumen);
|
|
}
|
|
}
|
|
|
|
// Filter by location (you can extend this based on your needs)
|
|
if ($request->kabkota) {
|
|
$query->where('ProvinsiKota', 'ILIKE', '%' . $request->kabkota . '%');
|
|
}
|
|
|
|
$kegiatan = $query->orderBy('TanggalMulaiPeriode', 'desc')->get();
|
|
|
|
// Group by document type
|
|
$groupedKegiatan = $kegiatan->groupBy('JenisDokumen');
|
|
|
|
$contents = [];
|
|
foreach ($groupedKegiatan as $jenis => $items) {
|
|
$key = strtolower($jenis);
|
|
if ($jenis === 'AUDIT') {
|
|
$contents[$key] = $items->map(function ($item, $index) {
|
|
return [
|
|
'no' => $index + 1,
|
|
'company' => $item->Pemrakarsa,
|
|
'title' => $item->NamaKegiatan,
|
|
'description' => $item->DeskripsiKegiatan,
|
|
'link' => route('layanan.detail', $item->KegiatanID)
|
|
];
|
|
})->toArray();
|
|
} else {
|
|
$contents[$key] = $items->map(function ($item) {
|
|
return [
|
|
'id' => $item->KegiatanID,
|
|
'title' => $item->NamaKegiatan,
|
|
'description' => $item->DeskripsiKegiatan,
|
|
'periode' => $this->formatPeriode($item->TanggalMulaiPeriode, $item->TanggalSelesaiPeriode),
|
|
'link' => route('layanan.detail', $item->KegiatanID),
|
|
'status' => $item->Status,
|
|
'pemrakarsa' => $item->Pemrakarsa,
|
|
'jenis_dokumen' => $item->JenisDokumen,
|
|
'no_registrasi' => $item->NoRegistrasi
|
|
];
|
|
})->toArray();
|
|
}
|
|
}
|
|
|
|
return response()->json($contents);
|
|
}
|
|
}
|