From 12f06869658da24fb192594fd4c4ad6dec1d8521 Mon Sep 17 00:00:00 2001 From: ahmadafriadi Date: Tue, 26 May 2026 11:30:24 +0700 Subject: [PATCH 01/12] 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'); From a274f84fe2c3591097cce845f128a92228ca54ca Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Tue, 26 May 2026 12:25:18 +0700 Subject: [PATCH 02/12] RedirectResponse --- app/Http/Controllers/Web/Ekosistem/FormBasisDataController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Http/Controllers/Web/Ekosistem/FormBasisDataController.php b/app/Http/Controllers/Web/Ekosistem/FormBasisDataController.php index 4d03593..c2982ec 100644 --- a/app/Http/Controllers/Web/Ekosistem/FormBasisDataController.php +++ b/app/Http/Controllers/Web/Ekosistem/FormBasisDataController.php @@ -10,6 +10,7 @@ use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; +use Illuminate\Http\RedirectResponse; use App\Models\Ekosistem\TabelBasisData; use App\Models\Ekosistem\FormBasisData; From 05967cce752f78944991d6f183974d73759b67fa Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Tue, 26 May 2026 13:01:57 +0700 Subject: [PATCH 03/12] test value --- .../Ekosistem/ValueBasisDataController.php | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php b/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php index 8279d3b..16597ca 100644 --- a/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php +++ b/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php @@ -21,6 +21,13 @@ use App\Models\Core\Program; class ValueBasisDataController extends Controller { + private $tableModelClassMap = [ + 'master_provinsi' => \App\Models\Wilayah\Provinsi::class, + 'master_kabupaten_kota' => \App\Models\Wilayah\KabupatenKota::class, + 'master_kecamatan' => \App\Models\Wilayah\Kecamatan::class, + 'master_desa_kelurahan' => \App\Models\Wilayah\DesaKelurahan::class, + ]; + public function index(Request $request, string $tabelId): View { if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { @@ -198,7 +205,12 @@ class ValueBasisDataController extends Controller if ($k->tipe == 'foreign_key') { $relasi['kolom_id'] = $k->id; try { - $options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at'); + $modelClass = $this->tableModelClassMap[$k->relasi_tabel] ?? null; + if ($modelClass) { + $options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->whereNull('deleted_at'); + } else { + $options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at'); + } $relasi['options'] = $options_kolom->get(); $relasi['sql'] = $options_kolom->toSql(); } catch (\Throwable $th) { @@ -281,9 +293,6 @@ class ValueBasisDataController extends Controller return redirect()->route('tabel.data.index', [$tabelId, 'program_id' => $program->id])->with('success', 'Data berhasil ditambahkan.'); } - /** - * Display the specified resource. - */ public function show(Request $request, string $tabelId, string $id): View { if (!Gate::any(['super_admin', 'admin'])) { @@ -329,7 +338,9 @@ class ValueBasisDataController extends Controller foreach ($values as $v) { $k = $kolom->where('id', $v->kolom_id)->first(); if ($k->tipe == 'foreign_key') { - $v->value_relasi_label = DB::table($k->relasi_tabel)->where($k->relasi_kolom_id, $v->value_relasi)->value($k->relasi_kolom_label); + $v->value_relasi_label = DB::table($k->relasi_tabel) + ->where($k->relasi_kolom_id, $v->value_relasi) + ->value($k->relasi_kolom_label); } else if ($k->tipe == 'enum') { $opsi = collect($k->enum_opsi); $found = $opsi->first(function ($item) use ($v) { From 17c4c966937d33a2e8e2289d9fc8a505db022301 Mon Sep 17 00:00:00 2001 From: ahmadafriadi Date: Tue, 26 May 2026 14:30:43 +0700 Subject: [PATCH 04/12] Penambahan Form Varietas --- .../Web/Master/JenisKomoditasController.php | 12 + .../Web/Master/VarietasController.php | 226 ++++++++ app/Models/Master/Varietas.php | 33 ++ resources/views/master/varietas/add.blade.php | 61 ++ .../views/master/varietas/edit.blade.php | 64 ++ .../views/master/varietas/index.blade.php | 547 ++++++++++++++++++ .../views/master/varietas/view.blade.php | 34 ++ routes/web.php | 2 + 8 files changed, 979 insertions(+) create mode 100644 app/Http/Controllers/Web/Master/VarietasController.php create mode 100644 app/Models/Master/Varietas.php create mode 100644 resources/views/master/varietas/add.blade.php create mode 100644 resources/views/master/varietas/edit.blade.php create mode 100644 resources/views/master/varietas/index.blade.php create mode 100644 resources/views/master/varietas/view.blade.php diff --git a/app/Http/Controllers/Web/Master/JenisKomoditasController.php b/app/Http/Controllers/Web/Master/JenisKomoditasController.php index d4728b2..ea6ce41 100644 --- a/app/Http/Controllers/Web/Master/JenisKomoditasController.php +++ b/app/Http/Controllers/Web/Master/JenisKomoditasController.php @@ -40,6 +40,18 @@ class JenisKomoditasController extends Controller )); } + public function getByKomoditas($komoditas_id) + { + $jenisKomoditas = JenisKomoditas::where('komoditas_id', $komoditas_id) + ->orderBy('nama', 'asc') + ->get(['id', 'nama']); + + return response()->json([ + 'status' => 'success', + 'data' => $jenisKomoditas, + ]); + } + /** * Store a newly created resource in storage. */ diff --git a/app/Http/Controllers/Web/Master/VarietasController.php b/app/Http/Controllers/Web/Master/VarietasController.php new file mode 100644 index 0000000..420380c --- /dev/null +++ b/app/Http/Controllers/Web/Master/VarietasController.php @@ -0,0 +1,226 @@ +get('per_page', 10); + $search = $request->get('search'); + + $varietas = Varietas::with(['komoditas', 'jenisKomoditas']) + ->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}%"); + }) + ->orWhereHas('jenisKomoditas', function ($jenisQuery) use ($search) { + $jenisQuery->where('nama', 'ILIKE', "%{$search}%"); + }); + }); + }) + ->latest() + ->paginate($perPage); + + $komoditas = Komoditas::orderBy('nama', 'asc')->get(); + + return view('master.varietas.index', compact( + 'varietas', + 'komoditas' + )); + } + + public function store(Request $request) + { + $komoditasTable = (new Komoditas)->getTable(); + $jenisKomoditasTable = (new JenisKomoditas)->getTable(); + $varietasTable = (new Varietas)->getTable(); + + $validated = $request->validate([ + 'komoditas_id' => [ + 'required', + 'integer', + Rule::exists($komoditasTable, 'id'), + ], + 'jenis_komoditas_id' => [ + 'required', + 'integer', + Rule::exists($jenisKomoditasTable, 'id') + ->where('komoditas_id', $request->komoditas_id), + ], + 'nama' => [ + 'required', + 'string', + 'max:255', + Rule::unique($varietasTable, 'nama') + ->where('komoditas_id', $request->komoditas_id) + ->where('jenis_komoditas_id', $request->jenis_komoditas_id), + ], + 'deskripsi' => [ + 'nullable', + 'string', + ], + ]); + + try { + DB::beginTransaction(); + + $varietas = Varietas::create([ + 'komoditas_id' => $validated['komoditas_id'], + 'jenis_komoditas_id' => $validated['jenis_komoditas_id'], + 'nama' => $validated['nama'], + 'deskripsi' => $validated['deskripsi'] ?? null, + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + DB::commit(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data varietas berhasil disimpan.', + 'data' => $varietas, + ]); + } catch (\Throwable $e) { + DB::rollBack(); + + Log::error('Gagal menyimpan varietas', [ + 'error' => $e->getMessage(), + 'request' => $request->all(), + ]); + + return response()->json([ + 'status' => 'error', + 'message' => 'Gagal menyimpan data: ' . $e->getMessage(), + ], 500); + } + } + + public function show(string $id) + { + try { + $varietas = Varietas::with(['komoditas', 'jenisKomoditas'])->findOrFail($id); + + return response()->json([ + 'status' => 'success', + 'data' => $varietas, + ]); + } catch (\Throwable $e) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data varietas tidak ditemukan.', + ], 404); + } + } + + public function update(Request $request, string $id) + { + $komoditasTable = (new Komoditas)->getTable(); + $jenisKomoditasTable = (new JenisKomoditas)->getTable(); + $varietasTable = (new Varietas)->getTable(); + + $validated = $request->validate([ + 'komoditas_id' => [ + 'required', + 'integer', + Rule::exists($komoditasTable, 'id'), + ], + 'jenis_komoditas_id' => [ + 'required', + 'integer', + Rule::exists($jenisKomoditasTable, 'id') + ->where('komoditas_id', $request->komoditas_id), + ], + 'nama' => [ + 'required', + 'string', + 'max:255', + Rule::unique($varietasTable, 'nama') + ->where('komoditas_id', $request->komoditas_id) + ->where('jenis_komoditas_id', $request->jenis_komoditas_id), + ], + 'deskripsi' => [ + 'nullable', + 'string', + ], + ]); + + try { + DB::beginTransaction(); + + $varietas = Varietas::findOrFail($id); + $varietas->update([ + 'komoditas_id' => $validated['komoditas_id'], + 'jenis_komoditas_id' => $validated['jenis_komoditas_id'], + 'nama' => $validated['nama'], + 'deskripsi' => $validated['deskripsi'] ?? null, + 'updated_by' => auth()->id(), + ]); + + DB::commit(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data varietas berhasil diperbarui.', + 'data' => $varietas->fresh(['komoditas', 'jenisKomoditas']), + ]); + } catch (\Throwable $e) { + DB::rollBack(); + + Log::error('Gagal update varietas', [ + 'error' => $e->getMessage(), + 'id' => $id, + 'request' => $request->all(), + ]); + + return response()->json([ + 'status' => 'error', + 'message' => 'Gagal mengupdate data: ' . $e->getMessage(), + ], 500); + } + } + + public function destroy(string $id) + { + try { + DB::beginTransaction(); + + $varietas = Varietas::findOrFail($id); + $varietas->update(['deleted_by' => auth()->id()]); + $varietas->delete(); + + DB::commit(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data varietas berhasil dihapus.', + ]); + } catch (\Throwable $e) { + DB::rollBack(); + + Log::error('Gagal hapus varietas', [ + 'error' => $e->getMessage(), + 'id' => $id, + ]); + + return response()->json([ + 'status' => 'error', + 'message' => 'Gagal menghapus data: ' . $e->getMessage(), + ], 500); + } + } +} diff --git a/app/Models/Master/Varietas.php b/app/Models/Master/Varietas.php new file mode 100644 index 0000000..b8d867f --- /dev/null +++ b/app/Models/Master/Varietas.php @@ -0,0 +1,33 @@ +belongsTo(JenisKomoditas::class, 'jenis_komoditas_id'); + } + + public function komoditas() + { + return $this->belongsTo(Komoditas::class, 'komoditas_id'); + } +} diff --git a/resources/views/master/varietas/add.blade.php b/resources/views/master/varietas/add.blade.php new file mode 100644 index 0000000..25717c2 --- /dev/null +++ b/resources/views/master/varietas/add.blade.php @@ -0,0 +1,61 @@ +
+
+
Tambah Varietas
+ +
+ +
+
+ @csrf + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
\ No newline at end of file diff --git a/resources/views/master/varietas/edit.blade.php b/resources/views/master/varietas/edit.blade.php new file mode 100644 index 0000000..42a5300 --- /dev/null +++ b/resources/views/master/varietas/edit.blade.php @@ -0,0 +1,64 @@ +
+
+
Edit Varietas
+ +
+ +
+
+ @csrf + @method('PUT') + + + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
\ No newline at end of file diff --git a/resources/views/master/varietas/index.blade.php b/resources/views/master/varietas/index.blade.php new file mode 100644 index 0000000..ffd26ca --- /dev/null +++ b/resources/views/master/varietas/index.blade.php @@ -0,0 +1,547 @@ +@extends('layout.main') + +@section('content') +
+
+
+
+
+
+ + + +
+
+ +
+
+ + + @if(request('search')) + + + + @endif + + +
+ + +
+
+
+ +
+ + + + + + + + + + + + + @forelse($varietas as $index => $item) + @php + $namaVarietas = $item->nama ?? '-'; + $words = preg_split('/\s+/', trim($namaVarietas)); + $initials = collect($words) + ->filter() + ->map(fn($word) => strtoupper(substr($word, 0, 1))) + ->take(2) + ->implode(''); + + $states = ['success', 'danger', 'warning', 'info', 'primary', 'secondary']; + $state = $states[$item->id % count($states)]; + @endphp + + + + + + + + + + + + + @empty + + + + @endforelse + +
NoNama VarietasKomoditasJenis KomoditasActions
{{ $varietas->firstItem() + $index }} +
+
+
+ + {{ $initials ?: 'VR' }} + +
+
+ +
+ {{ $item->nama }} + {{ $item->deskripsi }} +
+
+
+ + {{ $item->komoditas->nama ?? '-' }} + + + + {{ $item->jenisKomoditas->nama ?? '-' }} + + +
+ + + + + +
+
+ Tidak ada data ditemukan. +
+
+ + @if($varietas->hasPages()) + + @endif +
+
+ +@include('master.varietas.add') +@include('master.varietas.edit') +@include('master.varietas.view') +@endsection + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/master/varietas/view.blade.php b/resources/views/master/varietas/view.blade.php new file mode 100644 index 0000000..fabb816 --- /dev/null +++ b/resources/views/master/varietas/view.blade.php @@ -0,0 +1,34 @@ +
+
+
Detail Varietas
+ +
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 64fb4e6..ea137e3 100644 --- a/routes/web.php +++ b/routes/web.php @@ -86,6 +86,8 @@ Route::middleware('auth') 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('/jenis-komoditas-by-komoditas/{komoditas_id}', [App\Http\Controllers\Web\Master\JenisKomoditasController::class, 'getByKomoditas'])->name('jenis-komoditas.by-komoditas'); + Route::resource('varietas', App\Http\Controllers\Web\Master\VarietasController::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'); From 7681984d890445f62215e74802f307e3c6f3aa4e Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Tue, 26 May 2026 16:32:25 +0700 Subject: [PATCH 05/12] tabel ekosistem --- .../Ekosistem/TabelBasisDataController.php | 5 ++- .../Ekosistem/ValueBasisDataController.php | 16 +++++++--- .../Ekosistem/FormBasisDataResource.php | 32 +++++++++++++++++++ .../Ekosistem/TabelBasisDataResource.php | 1 + app/Models/Wilayah/DesaKelurahan.php | 2 +- 5 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 app/Http/Resources/Ekosistem/FormBasisDataResource.php diff --git a/app/Http/Controllers/Api/Ekosistem/TabelBasisDataController.php b/app/Http/Controllers/Api/Ekosistem/TabelBasisDataController.php index 4f6512d..f02ee4f 100644 --- a/app/Http/Controllers/Api/Ekosistem/TabelBasisDataController.php +++ b/app/Http/Controllers/Api/Ekosistem/TabelBasisDataController.php @@ -54,11 +54,10 @@ class TabelBasisDataController extends Controller abort(403); } - $tabel = TabelBasisData::with('kolom')->findOrFail($id); + $tabel = TabelBasisData::with('kolom', 'form', 'form.form', 'form.form.form', 'form.form.form.kolom')->findOrFail($id); return (new TabelBasisDataResource($tabel)) - ->response() - ->setStatusCode(201); + ->response(); } /** diff --git a/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php b/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php index 16597ca..ce3e301 100644 --- a/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php +++ b/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php @@ -12,6 +12,7 @@ use Illuminate\Support\Facades\Validator; use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Str; +use Illuminate\Support\Arr; use App\Models\Ekosistem\TabelBasisData; use App\Models\Ekosistem\KolomBasisData; @@ -173,7 +174,7 @@ class ValueBasisDataController extends Controller if (!Gate::any(['super_admin', 'admin'])) { abort(403); } - + $tabel = TabelBasisData::with('kolom') ->whereHas('kolom', function ($query) { $query->where('is_active', true); @@ -205,11 +206,11 @@ class ValueBasisDataController extends Controller if ($k->tipe == 'foreign_key') { $relasi['kolom_id'] = $k->id; try { - $modelClass = $this->tableModelClassMap[$k->relasi_tabel] ?? null; + $modelClass = Arr::get($this->tableModelClassMap, 'master_desa_kelurahan'); if ($modelClass) { - $options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->whereNull('deleted_at'); + $options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000); } else { - $options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at'); + $options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at')->limit(10000); } $relasi['options'] = $options_kolom->get(); $relasi['sql'] = $options_kolom->toSql(); @@ -404,7 +405,12 @@ class ValueBasisDataController extends Controller if ($k->tipe == 'foreign_key') { $relasi['kolom_id'] = $k->id; try { - $options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at'); + $modelClass = Arr::get($this->tableModelClassMap, 'master_desa_kelurahan'); + if ($modelClass) { + $options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000); + } else { + $options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at')->limit(10000); + } $relasi['options'] = $options_kolom->get(); $relasi['sql'] = $options_kolom->toSql(); } catch (\Throwable $th) { diff --git a/app/Http/Resources/Ekosistem/FormBasisDataResource.php b/app/Http/Resources/Ekosistem/FormBasisDataResource.php new file mode 100644 index 0000000..9b64112 --- /dev/null +++ b/app/Http/Resources/Ekosistem/FormBasisDataResource.php @@ -0,0 +1,32 @@ + + */ + public function toArray(Request $request): array + { + return [ + 'id' => $this->id, + 'tabel_id' => $this->tabel_id, + 'parent_id' => $this->parent_id, + 'tipe' => $this->tipe, + 'column_width' => $this->column_width, + 'kolom_id' => $this->kolom_id, + 'section_label' => $this->section_label, + 'urutan' => $this->urutan, + 'kolom' => new KolomBasisDataResource($this->whenLoaded('kolom')), + 'form' => FormBasisDataResource::collection($this->whenLoaded('form')), + ]; + } +} diff --git a/app/Http/Resources/Ekosistem/TabelBasisDataResource.php b/app/Http/Resources/Ekosistem/TabelBasisDataResource.php index 2b2feb6..5b4de9e 100644 --- a/app/Http/Resources/Ekosistem/TabelBasisDataResource.php +++ b/app/Http/Resources/Ekosistem/TabelBasisDataResource.php @@ -29,6 +29,7 @@ class TabelBasisDataResource extends JsonResource // 'group' => new GroupBasisDataResource($this->whenLoaded('group')), 'kolom' => KolomBasisDataResource::collection($this->whenLoaded('kolom')), //'ringkasan' => RingkasanBasisDataResource::collection($this->whenLoaded('ringkasan')), + 'form' => FormBasisDataResource::collection($this->whenLoaded('form')), ]; } } diff --git a/app/Models/Wilayah/DesaKelurahan.php b/app/Models/Wilayah/DesaKelurahan.php index ac8beef..123a402 100644 --- a/app/Models/Wilayah/DesaKelurahan.php +++ b/app/Models/Wilayah/DesaKelurahan.php @@ -1,6 +1,6 @@ Date: Thu, 28 May 2026 09:59:36 +0700 Subject: [PATCH 06/12] realisasi verifikasi --- .../Web/Program/RealisasiController.php | 2 +- .../Web/Program/VerifikasiController.php | 25 +++- resources/views/layout/sidebar.blade.php | 55 ++++---- .../realisasi/index-aktivitas.blade.php | 12 +- .../program/realisasi/index-tujuan.blade.php | 11 ++ .../views/program/realisasi/index.blade.php | 1 + .../views/program/verifikasi/list.blade.php | 117 ++++++++++++++++++ routes/web.php | 2 +- 8 files changed, 193 insertions(+), 32 deletions(-) create mode 100644 resources/views/program/verifikasi/list.blade.php diff --git a/app/Http/Controllers/Web/Program/RealisasiController.php b/app/Http/Controllers/Web/Program/RealisasiController.php index 25eed7d..697ccde 100644 --- a/app/Http/Controllers/Web/Program/RealisasiController.php +++ b/app/Http/Controllers/Web/Program/RealisasiController.php @@ -64,7 +64,7 @@ class RealisasiController extends Controller abort(403); } - $realisasi = Realisasi::with('target', 'target.aktivitas', 'target.aktivitas.transformasi') + $realisasi = Realisasi::with('target', 'target.aktivitas', 'target.aktivitas.transformasi', 'verifikasi') ->find($id); if (!$realisasi) { return response()->json([ diff --git a/app/Http/Controllers/Web/Program/VerifikasiController.php b/app/Http/Controllers/Web/Program/VerifikasiController.php index 0e52d7e..932da21 100644 --- a/app/Http/Controllers/Web/Program/VerifikasiController.php +++ b/app/Http/Controllers/Web/Program/VerifikasiController.php @@ -17,9 +17,9 @@ class VerifikasiController extends Controller /** * Display a listing of the resource. */ - public function index() + public function index(Request $request): JsonResponse { - // + } /** @@ -83,8 +83,25 @@ class VerifikasiController extends Controller /** * Remove the specified resource from storage. */ - public function destroy(string $id) + public function destroy(string $id): JsonResponse { - // + if (!Gate::any(['super_admin', 'admin'])) { + abort(403); + } + + $verifikasi = Verifikasi::find($id); + if (!$verifikasi) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data verifikasi tidak ditemukan.' + ], 404); + } + + $verifikasi->update(['updated_by' => auth()->id()]); + $verifikasi->delete(); + return response()->json([ + 'status' => 'success', + 'message' => 'Dokumen bukti berhasil dihapus.' + ]); } } diff --git a/resources/views/layout/sidebar.blade.php b/resources/views/layout/sidebar.blade.php index 1e8bf4b..4ec5d33 100644 --- a/resources/views/layout/sidebar.blade.php +++ b/resources/views/layout/sidebar.blade.php @@ -144,11 +144,18 @@ --> - -