feat: Tambah kontroler HistoryPerusahaan, HistoryPerusahaanRequest, HistoryPerusahaan model, dan migrasi CreateTableHistoryPerusahaan
parent
e1dc04a279
commit
39524477f1
|
@ -0,0 +1,138 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Requests\HistoryPerusahaanRequest;
|
||||||
|
use App\Models\HistoryKegiatan;
|
||||||
|
use App\Models\HistoryPerusahaan;
|
||||||
|
use App\Models\Kabupaten;
|
||||||
|
use App\Models\Kecamatan;
|
||||||
|
use App\Models\Kelurahan;
|
||||||
|
use App\Models\Perusahaan;
|
||||||
|
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', 'historyKegiatan', '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,
|
||||||
|
'historyKegiatan' => HistoryKegiatan::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);
|
||||||
|
|
||||||
|
$historyKegiatan = HistoryKegiatan::all();
|
||||||
|
|
||||||
|
$historyPerusahaan = HistoryPerusahaan::with('historyKegiatan')->where('PerusahaanId', $perusahaanId)->get();
|
||||||
|
|
||||||
|
return Inertia::render('admin/history_perusahaan/detail_history_perusahaan', [
|
||||||
|
'perusahaan' => $perusahaan,
|
||||||
|
'historyKegiatan' => $historyKegiatan,
|
||||||
|
'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',
|
||||||
|
'HistoryKegiatanId' => '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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -24,6 +24,7 @@ class PerusahaanController extends Controller
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$perusahaan = Perusahaan::with('jenisKegiatan', 'kelurahan.kecamatan.kabupaten', 'verifikator', 'jenisDokIL')->get();
|
$perusahaan = Perusahaan::with('jenisKegiatan', 'kelurahan.kecamatan.kabupaten', 'verifikator', 'jenisDokIL')->get();
|
||||||
|
|
||||||
return Inertia::render('admin/perusahaan/index_perusahaan', [
|
return Inertia::render('admin/perusahaan/index_perusahaan', [
|
||||||
'perusahaan' => $perusahaan,
|
'perusahaan' => $perusahaan,
|
||||||
'jenisKegiatan' => JenisKegiatan::all(),
|
'jenisKegiatan' => JenisKegiatan::all(),
|
||||||
|
@ -155,15 +156,46 @@ class PerusahaanController extends Controller
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function update(PerusahaanRequest $request, Perusahaan $perusahaan): JsonResponse
|
// public function update(PerusahaanRequest $request, Perusahaan $perusahaan): JsonResponse
|
||||||
{
|
// {
|
||||||
$perusahaan->update($request->validated());
|
// $perusahaan->update($request->validated());
|
||||||
|
|
||||||
return response()->json([
|
// return response()->json([
|
||||||
'status' => 'success',
|
// 'status' => 'success',
|
||||||
'message' => 'Data perusahaan berhasil diperbarui',
|
// 'message' => 'Data perusahaan berhasil diperbarui',
|
||||||
'data' => $perusahaan
|
// 'data' => $perusahaan
|
||||||
]);
|
// ]);
|
||||||
|
// }
|
||||||
|
|
||||||
|
public function update(PerusahaanRequest $request, Perusahaan $perusahaan)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
DB::beginTransaction();
|
||||||
|
|
||||||
|
$data = $request->validated();
|
||||||
|
|
||||||
|
if (!$request->hasFile('ILDokumen')) {
|
||||||
|
unset($data['ILDokumen']);
|
||||||
|
} else {
|
||||||
|
if ($perusahaan->ILDokumen && Storage::disk('public')->exists($perusahaan->ILDokumen)) {
|
||||||
|
Storage::disk('public')->delete($perusahaan->SanksiFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
$fileName = time() . '_' . $request->file('ILDokumen')->getClientOriginalName();
|
||||||
|
$path = $request->file('ILDokumen')->storeAs('files/il', $fileName, 'public');
|
||||||
|
$data['ILDokumen'] = $path;
|
||||||
|
}
|
||||||
|
|
||||||
|
$perusahaan->update($data);
|
||||||
|
|
||||||
|
DB::commit();
|
||||||
|
|
||||||
|
return redirect()->route('admin.perusahaan.index')->with('success', 'Perusahaan berhasil diperbarui');
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
DB::rollBack();
|
||||||
|
Log::error('Error updating perusahaan: ' . $e->getMessage());
|
||||||
|
return response()->json(['message' => 'Error: ' . $e->getMessage()], 500);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function destroy(Perusahaan $perusahaan): JsonResponse
|
public function destroy(Perusahaan $perusahaan): JsonResponse
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class HistoryPerusahaanRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*/
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'PerusahaanId' => 'required|integer',
|
||||||
|
'HistoryKegiatanId' => 'required|integer',
|
||||||
|
'TanggalHistory' => 'required|date',
|
||||||
|
'NomorHistory' => 'nullable|string|max:100',
|
||||||
|
'KeteranganHistory' => 'nullable|string',
|
||||||
|
'DokumenHistory' => 'required|file|mimes:pdf',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class HistoryPerusahaan extends Model
|
||||||
|
{
|
||||||
|
protected $table = 'HistoryPerusahaan';
|
||||||
|
protected $primaryKey = 'HistoryPerusahaanId';
|
||||||
|
protected $fillable = [
|
||||||
|
'PerusahaanId',
|
||||||
|
'HistoryKegiatanId',
|
||||||
|
'TanggalHistory',
|
||||||
|
'NomorHistory',
|
||||||
|
'KeteranganHistory',
|
||||||
|
'DokumenHistory',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function perusahaan()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Perusahaan::class, 'PerusahaanId', 'PerusahaanId');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function historyKegiatan()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(HistoryKegiatan::class, 'HistoryKegiatanId', 'HistoryKegiatanId');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function kelurahan()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Kelurahan::class, 'KelurahanId', 'KelurahanId');
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('HistoryPerusahaan', function (Blueprint $table) {
|
||||||
|
$table->id('HistoryPerusahaanId');
|
||||||
|
$table->unsignedInteger('PerusahaanId');
|
||||||
|
$table->unsignedInteger('HistoryKegiatanId');
|
||||||
|
$table->date('TanggalHistory')->comment('tanggal surat');
|
||||||
|
$table->string('NomorHistory', 100)->nullable()->comment('nomor surat');
|
||||||
|
$table->text('KeteranganHistory')->nullable();
|
||||||
|
$table->string('DokumenHistory', 255);
|
||||||
|
$table->timestamps();
|
||||||
|
|
||||||
|
$table->foreign('PerusahaanId')->references('PerusahaanId')->on('Perusahaan')->onDelete('set null');
|
||||||
|
$table->foreign('HistoryKegiatanId')->references('HistoryKegiatanId')->on('HistoryKegiatan')->onDelete('set null');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('HistoryPerusahaan');
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue