From 7be1b5d68e8f5f2fc7248a7efd1eb564b1a54f0b Mon Sep 17 00:00:00 2001 From: rahmagustin Date: Sat, 10 Jan 2026 21:25:51 +0700 Subject: [PATCH] fungsi crud kategori tps admin --- .../Admin/KategoriTpsController.php | 94 ++++++++++ app/Http/Controllers/Admin/TpsController.php | 119 +++++++++++- app/Models/KategoriTps.php | 7 +- app/Models/LokasiTps.php | 16 +- ...dd_foto_kategori_to_kategori_tps_table.php | 21 +++ .../views/admin/kategori-tps/create.blade.php | 61 +++--- .../views/admin/kategori-tps/edit.blade.php | 77 ++++---- .../views/admin/kategori-tps/index.blade.php | 104 ++++------- resources/views/admin/template.blade.php | 15 +- resources/views/admin/tps/create.blade.php | 135 ++++++++------ resources/views/admin/tps/index.blade.php | 173 ++++++++++-------- routes/web.php | 85 +++++---- 12 files changed, 587 insertions(+), 320 deletions(-) create mode 100644 app/Http/Controllers/Admin/KategoriTpsController.php create mode 100644 database/migrations/2026_01_10_130721_add_foto_kategori_to_kategori_tps_table.php diff --git a/app/Http/Controllers/Admin/KategoriTpsController.php b/app/Http/Controllers/Admin/KategoriTpsController.php new file mode 100644 index 0000000..fea4b84 --- /dev/null +++ b/app/Http/Controllers/Admin/KategoriTpsController.php @@ -0,0 +1,94 @@ +validate([ + 'nama_kategori' => 'required|string|max:100', + 'deskripsi' => 'nullable|string', + 'foto_kategori' => 'nullable|image|mimes:jpg,jpeg,png|max:2048' + ]); + + if ($request->hasFile('foto_kategori')) { + $data['foto_kategori'] = $request->file('foto_kategori') + ->store('kategori', 'public'); + } + + KategoriTps::create($data); + + return redirect() + ->route('admin.kategori.index') + ->with('success', 'Kategori berhasil ditambahkan'); + } + + public function edit($id) + { + $title = 'Edit Kategori TPS'; + $kategori = KategoriTps::findOrFail($id); + + return view('admin.kategori-tps.edit', compact('title', 'kategori')); + } + + public function update(Request $request, $id) + { + $kategori = KategoriTps::findOrFail($id); + + $data = $request->validate([ + 'nama_kategori' => 'required|string|max:100', + 'deskripsi' => 'nullable|string', + 'foto_kategori' => 'nullable|image|mimes:jpg,jpeg,png|max:2048' + ]); + + if ($request->hasFile('foto_kategori')) { + if ($kategori->foto_kategori) { + Storage::disk('public')->delete($kategori->foto_kategori); + } + + $data['foto_kategori'] = $request->file('foto_kategori') + ->store('kategori', 'public'); + } + + $kategori->update($data); + + return redirect() + ->route('admin.kategori.index') + ->with('success', 'Kategori berhasil diperbarui'); + } + + public function destroy($id) + { + $kategori = KategoriTps::findOrFail($id); + + if ($kategori->foto_kategori) { + Storage::disk('public')->delete($kategori->foto_kategori); + } + + $kategori->delete(); + + return redirect() + ->route('admin.kategori.index') + ->with('success', 'Kategori berhasil dihapus'); + } +} diff --git a/app/Http/Controllers/Admin/TpsController.php b/app/Http/Controllers/Admin/TpsController.php index fe17036..14fe3f7 100644 --- a/app/Http/Controllers/Admin/TpsController.php +++ b/app/Http/Controllers/Admin/TpsController.php @@ -4,22 +4,127 @@ use App\Http\Controllers\Controller; use Illuminate\Http\Request; +use App\Models\LokasiTps; +use App\Models\KategoriTps; +use Illuminate\Support\Facades\Storage; class TpsController extends Controller { public function index() { - $title = 'Tps Admin'; - return view('admin.tps.index', compact('title')); + $title = 'Data TPS'; + + // Ambil TPS + kategori + jumlah aduan + $tps = LokasiTps::with('kategori') + ->withCount('aduan') + ->get(); + + return view('admin.tps.index', compact('title', 'tps')); } + public function create() { - $title = 'Tambah Tps Admin'; - return view('admin.tps.create', compact('title')); + $title = 'Tambah TPS'; + $kategori = KategoriTps::all(); + + return view('admin.tps.create', compact('title', 'kategori')); } - public function edit() + + public function store(Request $request) { - $title = 'Edit Tps Admin'; - return view('admin.tps.edit', compact('title')); + $request->validate([ + 'kategori_tps_id' => 'required|exists:kategori_tps,id', + 'nama_tps' => 'required|string|max:255', + 'status_tps' => 'required', + 'tahun_pembuatan' => 'required|numeric', + 'kapasitas_tps' => 'required', + 'latitude' => 'required', + 'longitude' => 'required', + 'foto_tps' => 'nullable|image|mimes:jpg,jpeg,png|max:2048', + ]); + + // Upload foto + if ($request->hasFile('foto_tps')) { + $foto = $request->file('foto_tps')->store('foto-tps', 'public'); + } else { + $foto = null; + } + + LokasiTps::create([ + 'kategori_tps_id' => $request->kategori_tps_id, + 'nama_tps' => $request->nama_tps, + 'status_tps' => $request->status_tps, + 'tahun_pembuatan' => $request->tahun_pembuatan, + 'kapasitas_tps' => $request->kapasitas_tps, + 'latitude' => $request->latitude, + 'longitude' => $request->longitude, + 'foto_tps' => $foto, + ]); + + return redirect()->route('tps.index') + ->with('success', 'Data TPS berhasil ditambahkan'); + } + + public function edit($id) + { + $title = 'Edit TPS'; + $tps = LokasiTps::findOrFail($id); + $kategori = KategoriTps::all(); + + return view('admin.tps.edit', compact('title', 'tps', 'kategori')); + } + + public function update(Request $request, $id) + { + $tps = LokasiTps::findOrFail($id); + + $request->validate([ + 'kategori_tps_id' => 'required|exists:kategori_tps,id', + 'nama_tps' => 'required|string|max:255', + 'status_tps' => 'required', + 'tahun_pembuatan' => 'required|numeric', + 'kapasitas_tps' => 'required', + 'latitude' => 'required', + 'longitude' => 'required', + 'foto_tps' => 'nullable|image|mimes:jpg,jpeg,png|max:2048', + ]); + + // Jika upload foto baru + if ($request->hasFile('foto_tps')) { + if ($tps->foto_tps) { + Storage::disk('public')->delete($tps->foto_tps); + } + $foto = $request->file('foto_tps')->store('foto-tps', 'public'); + } else { + $foto = $tps->foto_tps; + } + + $tps->update([ + 'kategori_tps_id' => $request->kategori_tps_id, + 'nama_tps' => $request->nama_tps, + 'status_tps' => $request->status_tps, + 'tahun_pembuatan' => $request->tahun_pembuatan, + 'kapasitas_tps' => $request->kapasitas_tps, + 'latitude' => $request->latitude, + 'longitude' => $request->longitude, + 'foto_tps' => $foto, + ]); + + return redirect()->route('tps.index') + ->with('success', 'Data TPS berhasil diperbarui'); + } + + public function destroy($id) + { + $tps = LokasiTps::findOrFail($id); + + if ($tps->foto_tps) { + Storage::disk('public')->delete($tps->foto_tps); + } + + $tps->delete(); + + return redirect()->route('tps.index') + ->with('success', 'Data TPS berhasil dihapus'); } } diff --git a/app/Models/KategoriTps.php b/app/Models/KategoriTps.php index f0043b7..cc5260d 100644 --- a/app/Models/KategoriTps.php +++ b/app/Models/KategoriTps.php @@ -8,11 +8,14 @@ class KategoriTps extends Model { protected $table = 'kategori_tps'; - protected $fillable = ['nama_kategori', 'deskripsi']; + protected $fillable = [ + 'nama_kategori', + 'deskripsi', + 'foto_kategori' + ]; public function lokasiTps() { return $this->hasMany(LokasiTps::class); } } - diff --git a/app/Models/LokasiTps.php b/app/Models/LokasiTps.php index 8d89c13..6c793e9 100644 --- a/app/Models/LokasiTps.php +++ b/app/Models/LokasiTps.php @@ -2,10 +2,13 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class LokasiTps extends Model { + use HasFactory; + protected $table = 'lokasi_tps'; protected $fillable = [ @@ -16,17 +19,24 @@ class LokasiTps extends Model 'kapasitas_tps', 'latitude', 'longitude', - 'foto_tps' + 'foto_tps', ]; + /** + * Relasi ke tabel kategori_tps + * One TPS belongs to one kategori + */ public function kategori() { return $this->belongsTo(KategoriTps::class, 'kategori_tps_id'); } + /** + * Relasi ke tabel aduan_tps + * One TPS has many aduan + */ public function aduan() { - return $this->hasMany(AduanTps::class); + return $this->hasMany(AduanTps::class, 'lokasi_tps_id'); } } - diff --git a/database/migrations/2026_01_10_130721_add_foto_kategori_to_kategori_tps_table.php b/database/migrations/2026_01_10_130721_add_foto_kategori_to_kategori_tps_table.php new file mode 100644 index 0000000..aa55662 --- /dev/null +++ b/database/migrations/2026_01_10_130721_add_foto_kategori_to_kategori_tps_table.php @@ -0,0 +1,21 @@ +string('foto_kategori')->nullable()->after('deskripsi'); + }); + } + + public function down(): void + { + Schema::table('kategori_tps', function (Blueprint $table) { + $table->dropColumn('foto_kategori'); + }); + } +}; diff --git a/resources/views/admin/kategori-tps/create.blade.php b/resources/views/admin/kategori-tps/create.blade.php index 8b801bb..ba0d2e5 100644 --- a/resources/views/admin/kategori-tps/create.blade.php +++ b/resources/views/admin/kategori-tps/create.blade.php @@ -6,54 +6,43 @@
-

Basic form elements

-

- Basic form elements -

-
+

Tambah Kategori TPS

+

Form tambah data kategori TPS

+ + + @csrf +
- - + +
+
- - + +
+
- - -
-
- - -
-
- - + + + +
+ placeholder="Upload Foto"> - +
-
- - -
-
- - -
- - + + + + Batal
+
diff --git a/resources/views/admin/kategori-tps/edit.blade.php b/resources/views/admin/kategori-tps/edit.blade.php index 8b801bb..fceb442 100644 --- a/resources/views/admin/kategori-tps/edit.blade.php +++ b/resources/views/admin/kategori-tps/edit.blade.php @@ -6,54 +6,59 @@
-

Basic form elements

-

- Basic form elements -

-
+

Edit Kategori TPS

+

Form edit data kategori TPS

+ + + @csrf + @method('PUT') +
- - + +
+
- - + +
+
- - -
-
- - -
-
- - + + + + + +
+ placeholder="Upload Foto"> + - +
+ + + @if (!empty($kategori->foto_kategori)) +
+ Foto saat ini:
+ Foto Kategori +
+ @endif
-
- - -
-
- - -
- - + + + + Batal
+
diff --git a/resources/views/admin/kategori-tps/index.blade.php b/resources/views/admin/kategori-tps/index.blade.php index 164d64d..e7b6620 100644 --- a/resources/views/admin/kategori-tps/index.blade.php +++ b/resources/views/admin/kategori-tps/index.blade.php @@ -6,84 +6,54 @@
- - -
-
-

Basic Table

-

- Add class .table -

-
- - - Tambah + -
- - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @foreach ($kategori as $item) + + + + + + + @endforeach
ProfileVatNo.CreatedStatusNama KategoriFotoDeskripsi Aksi
Jacob5327553112 May 2017 - - - - - - -
Messsy5327553215 May 2017 - - - - - - -
John5327553314 May 2017
Peter5327553416 May 2017
Dave5327553520 May 2017
{{ $item->nama_kategori }} + @if ($item->foto_kategori) + + @else + - + @endif + {{ $item->deskripsi ?? '-' }} + + + +
+ @csrf + @method('DELETE') + + +
+ +
diff --git a/resources/views/admin/template.blade.php b/resources/views/admin/template.blade.php index cb6e3ea..4bfb70b 100644 --- a/resources/views/admin/template.blade.php +++ b/resources/views/admin/template.blade.php @@ -61,15 +61,21 @@