perling/app/Http/Controllers/LayananController.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);
}
}