From 12f06869658da24fb192594fd4c4ad6dec1d8521 Mon Sep 17 00:00:00 2001 From: ahmadafriadi Date: Tue, 26 May 2026 11:30:24 +0700 Subject: [PATCH] Update Jenis Komoditas --- .../Web/Master/JenisKomoditasController.php | 216 ++++++++ app/Models/Master/JenisKomoditas.php | 28 + .../views/master/jeniskomoditas/add.blade.php | 42 ++ .../master/jeniskomoditas/edit.blade.php | 45 ++ .../master/jeniskomoditas/index.blade.php | 485 ++++++++++++++++++ .../master/jeniskomoditas/view.blade.php | 24 + routes/web.php | 2 + 7 files changed, 842 insertions(+) create mode 100644 app/Http/Controllers/Web/Master/JenisKomoditasController.php create mode 100644 app/Models/Master/JenisKomoditas.php create mode 100644 resources/views/master/jeniskomoditas/add.blade.php create mode 100644 resources/views/master/jeniskomoditas/edit.blade.php create mode 100644 resources/views/master/jeniskomoditas/index.blade.php create mode 100644 resources/views/master/jeniskomoditas/view.blade.php diff --git a/app/Http/Controllers/Web/Master/JenisKomoditasController.php b/app/Http/Controllers/Web/Master/JenisKomoditasController.php new file mode 100644 index 0000000..d4728b2 --- /dev/null +++ b/app/Http/Controllers/Web/Master/JenisKomoditasController.php @@ -0,0 +1,216 @@ +get('per_page', 10); + $search = $request->get('search'); + + $jenisKomoditas = JenisKomoditas::with('komoditas') + ->when($search, function ($query) use ($search) { + $query->where(function ($q) use ($search) { + $q->where('nama', 'ILIKE', "%{$search}%") + ->orWhere('path', 'ILIKE', "%{$search}%") + ->orWhereHas('komoditas', function ($komoditasQuery) use ($search) { + $komoditasQuery->where('nama', 'ILIKE', "%{$search}%"); + }); + }); + }) + ->latest() + ->paginate($perPage); + + $komoditas = Komoditas::orderBy('nama', 'asc')->get(); + + return view('master.jeniskomoditas.index', compact( + 'jenisKomoditas', + 'komoditas' + )); + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + $validated = $request->validate([ + 'komoditas_id' => [ + 'required', + 'integer', + 'exists:master_komoditas,id', + ], + 'nama' => [ + 'required', + 'string', + 'max:255', + Rule::unique('jenis_komoditas', 'nama') + ->where('komoditas_id', $request->komoditas_id), + ], + ], [ + 'komoditas_id.required' => 'Komoditas wajib dipilih.', + 'komoditas_id.exists' => 'Komoditas yang dipilih tidak valid.', + 'nama.required' => 'Nama jenis komoditas wajib diisi.', + 'nama.unique' => 'Nama jenis komoditas sudah tersedia pada komoditas ini.', + ]); + + try { + DB::beginTransaction(); + + $jenisKomoditas = JenisKomoditas::create([ + 'komoditas_id' => $validated['komoditas_id'], + 'nama' => $validated['nama'], + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + DB::commit(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data jenis komoditas berhasil disimpan.', + 'data' => $jenisKomoditas, + ]); + } catch (\Throwable $e) { + DB::rollBack(); + + Log::error('Gagal menyimpan jenis komoditas', [ + 'error' => $e->getMessage(), + 'request' => $request->all(), + ]); + + return response()->json([ + 'status' => 'error', + 'message' => 'Gagal menyimpan data: ' . $e->getMessage(), + ], 500); + } + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + try { + $jenisKomoditas = JenisKomoditas::with('komoditas')->findOrFail($id); + + return response()->json([ + 'status' => 'success', + 'data' => $jenisKomoditas, + ]); + } catch (\Throwable $e) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data jenis komoditas tidak ditemukan.', + ], 404); + } + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + $jenisKomoditas = JenisKomoditas::findOrFail($id); + + $validated = $request->validate([ + 'komoditas_id' => [ + 'required', + 'integer', + 'exists:master_komoditas,id', + ], + 'nama' => [ + 'required', + 'string', + 'max:255', + Rule::unique('jenis_komoditas', 'nama') + ->where('komoditas_id', $request->komoditas_id) + ->ignore($jenisKomoditas->id), + ], + 'path' => [ + 'nullable', + 'string', + ], + ], [ + 'komoditas_id.required' => 'Komoditas wajib dipilih.', + 'komoditas_id.exists' => 'Komoditas yang dipilih tidak valid.', + 'nama.required' => 'Nama jenis komoditas wajib diisi.', + 'nama.unique' => 'Nama jenis komoditas sudah tersedia pada komoditas ini.', + ]); + + try { + DB::beginTransaction(); + + $jenisKomoditas->update([ + 'komoditas_id' => $validated['komoditas_id'], + 'nama' => $validated['nama'], + 'updated_by' => auth()->id(), + ]); + + DB::commit(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data jenis komoditas berhasil diperbarui.', + 'data' => $jenisKomoditas->fresh('komoditas'), + ]); + } catch (\Throwable $e) { + DB::rollBack(); + + Log::error('Gagal update jenis komoditas', [ + 'error' => $e->getMessage(), + 'id' => $id, + 'request' => $request->all(), + ]); + + return response()->json([ + 'status' => 'error', + 'message' => 'Gagal mengupdate data: ' . $e->getMessage(), + ], 500); + } + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + try { + DB::beginTransaction(); + + $jenisKomoditas = JenisKomoditas::findOrFail($id); + $jenisKomoditas->update(['deleted_by' => auth()->id()]); + $jenisKomoditas->delete(); + + DB::commit(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data jenis komoditas berhasil dihapus.', + ]); + } catch (\Throwable $e) { + DB::rollBack(); + + Log::error('Gagal hapus jenis komoditas', [ + 'error' => $e->getMessage(), + 'id' => $id, + ]); + + return response()->json([ + 'status' => 'error', + 'message' => 'Gagal menghapus data: ' . $e->getMessage(), + ], 500); + } + } +} diff --git a/app/Models/Master/JenisKomoditas.php b/app/Models/Master/JenisKomoditas.php new file mode 100644 index 0000000..cce5c46 --- /dev/null +++ b/app/Models/Master/JenisKomoditas.php @@ -0,0 +1,28 @@ +belongsTo(Komoditas::class, 'komoditas_id'); + } +} diff --git a/resources/views/master/jeniskomoditas/add.blade.php b/resources/views/master/jeniskomoditas/add.blade.php new file mode 100644 index 0000000..543735d --- /dev/null +++ b/resources/views/master/jeniskomoditas/add.blade.php @@ -0,0 +1,42 @@ +
+
+
Tambah Jenis Komoditas
+ +
+ +
+
+ @csrf + +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
\ No newline at end of file diff --git a/resources/views/master/jeniskomoditas/edit.blade.php b/resources/views/master/jeniskomoditas/edit.blade.php new file mode 100644 index 0000000..fd9a5dd --- /dev/null +++ b/resources/views/master/jeniskomoditas/edit.blade.php @@ -0,0 +1,45 @@ +
+
+
Edit Jenis Komoditas
+ +
+ +
+
+ @csrf + @method('PUT') + + + +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
\ No newline at end of file diff --git a/resources/views/master/jeniskomoditas/index.blade.php b/resources/views/master/jeniskomoditas/index.blade.php new file mode 100644 index 0000000..936d389 --- /dev/null +++ b/resources/views/master/jeniskomoditas/index.blade.php @@ -0,0 +1,485 @@ +@extends('layout.main') + +@section('content') +
+ +
+
+
+
+
Jenis Komoditas
+ Kelola data jenis komoditas +
+ + +
+
+ +
+
+ +
+
+ + + +
+
+ +
+
+ + + @if(request('search')) + + + + @endif + + +
+
+
+
+ +
+ + + + + + + + + + + + @forelse($jenisKomoditas as $index => $jenis) + @php + $komoditasNama = $jenis->komoditas->nama ?? '-'; + $words = preg_split('/\s+/', trim($komoditasNama)); + $initials = collect($words) + ->filter() + ->map(fn($word) => strtoupper(substr($word, 0, 1))) + ->take(2) + ->implode(''); + + $states = ['success', 'danger', 'warning', 'info', 'primary', 'secondary']; + $state = $states[$jenis->id % count($states)]; + @endphp + + + + + + + + + + + @empty + + + + @endforelse + +
NoNama Jenis KomoditasKomoditasActions
{{ $jenisKomoditas->firstItem() + $index }} +
+
+
+ + {{ $initials ?: 'JK' }} + +
+
+ +
+ {{ $jenis->nama }} + ID: {{ $jenis->id }} +
+
+
+ + {{ $komoditasNama }} + + +
+ + + + + +
+
+
+ + Tidak ada data ditemukan. +
+
+
+ + @if($jenisKomoditas->hasPages()) + + @endif +
+
+ +@include('master.jeniskomoditas.add') +@include('master.jeniskomoditas.edit') +@include('master.jeniskomoditas.view') +@endsection + + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/master/jeniskomoditas/view.blade.php b/resources/views/master/jeniskomoditas/view.blade.php new file mode 100644 index 0000000..b4f71d6 --- /dev/null +++ b/resources/views/master/jeniskomoditas/view.blade.php @@ -0,0 +1,24 @@ +
+
+
Detail Jenis Komoditas
+ +
+ +
+
+ + +
+ +
+ + +
+ +
+ +
+
+
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 1a68e89..64fb4e6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -85,6 +85,8 @@ Route::middleware('auth') Route::put('/komoditas/{id}', [App\Http\Controllers\Web\Master\KomoditasController::class, 'update'])->name('komoditas.update'); Route::delete('/komoditas/{id}', [App\Http\Controllers\Web\Master\KomoditasController::class, 'destroy'])->name('komoditas.destroy'); + Route::resource('jenis-komoditas', App\Http\Controllers\Web\Master\JenisKomoditasController::class); + Route::get('/keluarga', [App\Http\Controllers\Web\Master\KeluargaController::class, 'index'])->name('keluarga.index'); Route::get('/keluarga/add', [App\Http\Controllers\Web\Master\KeluargaController::class, 'create'])->name('keluarga.create'); Route::post('/keluarga', [App\Http\Controllers\Web\Master\KeluargaController::class, 'store'])->name('keluarga.store');