perling/app/Http/Controllers/JadwalSidangController.php

89 lines
3.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
use App\Models\JadwalSidang as JadwalSidangModel;
use App\Models\Perusahaan;
use App\Models\DokumenType;
use Carbon\Carbon;
class JadwalSidangController extends Controller
{
public function index(Request $request)
{
// Ambil jadwal dari DB dengan relasi
$query = JadwalSidangModel::with(['perusahaan', 'dokumenType'])->orderBy('TanggalMulai', 'desc');
if ($request->filled('document_type')) {
$kode = $request->input('document_type');
$query->whereHas('dokumenType', function ($q) use ($kode) {
$q->where('Kode', $kode);
});
}
$jadwalDb = $query->get();
// Map ke struktur frontend lama agar script disable time bekerja
$jadwal = $jadwalDb->map(function ($j) {
return [
'id' => $j->JadwalSidangID,
'title' => $j->NamaKegiatan,
'start' => optional($j->TanggalMulai)->toIso8601String(),
'end' => optional($j->TanggalSelesai)->toIso8601String(),
'documentType' => optional($j->dokumenType)->Kode,
'perusahaan' => optional($j->perusahaan)->NamaPerusahaan,
'description' => $j->Deskripsi,
];
})->values()->all();
// Data master untuk modal
$perusahaan = Perusahaan::orderBy('NamaPerusahaan')->get();
$dokumenTypes = DokumenType::orderBy('Nama')->get();
return view('penjadwalan.jadwal_sidang', compact('jadwal', 'perusahaan', 'dokumenTypes'));
}
public function create(Request $request)
{
if ($request->isMethod('post')) {
// Validasi minimal
$request->validate([
'title' => 'required|string|max:255',
'perusahaan_id' => 'required|exists:Perusahaan,PerusahaanID',
'start_date' => 'required|string',
'end_date' => 'required|string',
'document_type' => 'required|string',
]);
// Cari / buat dokumen type jika belum ada
$kode = $request->input('document_type');
$dokumenType = DokumenType::firstOrCreate(
['Kode' => $kode],
['Nama' => strtoupper(str_replace('_', ' ', $kode))]
);
// Parse tanggal dari format d/m/Y H:i
$start = Carbon::createFromFormat('d/m/Y H:i', $request->input('start_date'));
$end = Carbon::createFromFormat('d/m/Y H:i', $request->input('end_date'));
// Simpan ke DB
JadwalSidangModel::create([
'NamaKegiatan' => $request->input('title'),
'PerusahaanID' => $request->input('perusahaan_id'),
'DokumenTypeID' => $dokumenType->DokumenTypeID,
'Deskripsi' => $request->input('description', ''),
'TanggalMulai' => $start,
'TanggalSelesai' => $end,
]);
return redirect()->route('jadwal.index')->with('success', 'Jadwal berhasil ditambahkan');
}
// GET fallback (tidak digunakan karena pakai modal)
return redirect()->route('jadwal.index');
}
}