skl/app/Http/Controllers/HistoryPerusahaanController...

139 lines
5.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\HistoryPerusahaanRequest;
use App\Models\HistoryPerusahaan;
use App\Models\Kabupaten;
use App\Models\Kecamatan;
use App\Models\Kelurahan;
use App\Models\Perusahaan;
use App\Models\RefHistoryKegiatan;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Inertia\Inertia;
class HistoryPerusahaanController extends Controller
{
public function index()
{
try{
$historyPerusahaan = HistoryPerusahaan::with(['perusahaan', 'refhistoryKegiatan', 'kelurahan.kecamatan.kabupaten'])->orderBy('created_at', 'desc')->get();
// Eager load companies with their relationships
$perusahaan = Perusahaan::with('kelurahan.kecamatan.kabupaten')->get()
->map(function ($company) {
$company->Kabupaten = $company->kelurahan?->kecamatan?->kabupaten?->NamaKabupaten ?? '-';
return $company;
});
return Inertia::render('admin/history_perusahaan/index_history_perusahaan', [
'historyPerusahaan' => $historyPerusahaan,
'perusahaan' => $perusahaan,
'refhistoryKegiatan' => RefHistoryKegiatan::all(),
'kabupaten' => Kabupaten::all(),
'kecamatan' => Kecamatan::all(),
'kelurahan' => Kelurahan::all(),
]);
} catch (\Exception $e) {
Log::error('Error fetching data: ' . $e->getMessage());
return back()->with('error', 'Terjadi kesalahan saat memuat data.');
}
}
public function store(HistoryPerusahaanRequest $request)
{
try {
DB::beginTransaction();
$data = $request->validated();
if ($request->hasFile('DokumenHistory')) {
$fileName = time() . '_' . $request->file('DokumenHistory')->getClientOriginalName();
// Misalnya, jika data memiliki PerusahaanId, gunakan untuk membuat folder
$folder = 'files/history_perusahaan/' . $data['PerusahaanId'];
$path = $request->file('DokumenHistory')->storeAs($folder, $fileName, 'public');
$data['DokumenHistory'] = $path;
}
HistoryPerusahaan::create($data);
DB::commit();
return redirect()
->route('admin.history_perusahaan.detail', $data['PerusahaanId'])
->with('success', 'History Perusahaan berhasil ditambahkan');
} catch (\Exception $e) {
DB::rollBack();
Log::error('Error creating History Perusahaan: ' . $e->getMessage());
return response()->json(['message' => 'Error: ' . $e->getMessage()], 500);
}
}
public function detail($perusahaanId)
{
$perusahaan = Perusahaan::with('historyPerusahaan')->findOrFail($perusahaanId);
$refhistoryKegiatan = RefHistoryKegiatan::all();
$historyPerusahaan = HistoryPerusahaan::with('refhistoryKegiatan')->where('PerusahaanId', $perusahaanId)->get();
return Inertia::render('admin/history_perusahaan/detail_history_perusahaan', [
'perusahaan' => $perusahaan,
'refhistoryKegiatan' => $refhistoryKegiatan,
'historyPerusahaan' => $historyPerusahaan,
]);
}
public function update(Request $request, $historyPerusahaanId)
{
try {
DB::beginTransaction();
// Validasi input secara inline
$data = $request->validate([
'PerusahaanId' => 'required|integer',
'NomorHistory' => 'required|string',
'TanggalHistory' => 'required|date',
'RefHistoryKegiatanId' => 'required|integer',
'KeteranganHistory' => 'nullable|string',
'DokumenHistory' => 'nullable|file|mimes:pdf',
]);
// Cari data HistoryPerusahaan berdasarkan primary key kustom
$history = HistoryPerusahaan::findOrFail($historyPerusahaanId);
// Jika ada file baru yang diupload, proses upload dan set path file
if ($request->hasFile('DokumenHistory')) {
$fileName = time() . '_' . $request->file('DokumenHistory')->getClientOriginalName();
$folder = 'files/history_perusahaan/' . $data['PerusahaanId'];
$path = $request->file('DokumenHistory')->storeAs($folder, $fileName, 'public');
$data['DokumenHistory'] = $path;
} else {
// Jika tidak ada file baru, jangan mengubah nilai DokumenHistory
unset($data['DokumenHistory']);
}
// Update record dengan data baru
$history->update($data);
DB::commit();
return redirect()
->route('admin.history_perusahaan.detail', $data['PerusahaanId'])
->with('success', 'History Perusahaan berhasil diperbarui');
} catch (\Exception $e) {
DB::rollBack();
Log::error('Error updating History Perusahaan: ' . $e->getMessage());
return response()->json(['message' => 'Error: ' . $e->getMessage()], 500);
}
}
}