aduan admin

This commit is contained in:
rahmagustin 2026-01-15 21:07:10 +07:00
parent d8df50a853
commit fcb11aba99
9 changed files with 217 additions and 178 deletions

View File

@ -0,0 +1,55 @@
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\AduanTps;
use Illuminate\Http\Request;
class AduanController extends Controller
{
/**
* Tampilkan semua aduan
*/
public function index()
{
$aduan = AduanTps::with('lokasiTps')
->orderBy('tanggal_aduan', 'desc')
->get();
return view('admin.aduan.index', compact('aduan'));
}
public function show($id)
{
$aduan = AduanTps::findOrFail($id);
return view('admin.aduan.edit', compact('aduan'));
}
public function tanggapi(Request $request, $id)
{
$request->validate([
'tanggapan_admin' => 'required'
]);
$aduan = AduanTps::findOrFail($id);
$aduan->tanggapan_admin = $request->tanggapan_admin;
$aduan->tanggal_tanggapan = now();
$aduan->save();
return redirect()->route('admin.aduan.index')
->with('success', 'Tanggapan berhasil disimpan');
}
/**
* Hapus tanggapan admin
*/
public function destroy($id)
{
$aduan = AduanTps::findOrFail($id);
$aduan->delete();
return redirect()->route('admin.aduan.index')
->with('success', 'Aduan berhasil dihapus');
}
}

View File

@ -12,10 +12,13 @@ class AduanTps extends Model
protected $fillable = [
'lokasi_tps_id',
'nama_pelapor',
'alamat_pelapor',
'no_pelapor',
'isi_aduan',
'tanggal_aduan',
'bukti_foto'
'bukti_foto',
'tanggapan_admin',
'tanggal_tanggapan'
];
public function lokasiTps()

View File

@ -0,0 +1,22 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up()
{
Schema::table('aduan_tps', function (Blueprint $table) {
$table->text('tanggapan_admin')->nullable()->after('bukti_foto');
$table->dateTime('tanggal_tanggapan')->nullable()->after('tanggapan_admin');
});
}
public function down()
{
Schema::table('aduan_tps', function (Blueprint $table) {
$table->dropColumn(['tanggapan_admin', 'tanggal_tanggapan']);
});
}
};

View File

@ -0,0 +1,21 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up()
{
Schema::table('aduan_tps', function (Blueprint $table) {
$table->dropColumn('alamat');
});
}
public function down()
{
Schema::table('aduan_tps', function (Blueprint $table) {
$table->string('alamat', 255)->after('alamat_pelapor');
});
}
};

View File

@ -1,62 +0,0 @@
@extends('admin.template')
@section('content')
<div class="content-wrapper">
<div class="row">
<div class="col-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">Basic form elements</h4>
<p class="card-description">
Basic form elements
</p>
<form class="forms-sample">
<div class="form-group">
<label for="exampleInputName1">Name</label>
<input type="text" class="form-control" id="exampleInputName1" placeholder="Name">
</div>
<div class="form-group">
<label for="exampleInputEmail3">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail3" placeholder="Email">
</div>
<div class="form-group">
<label for="exampleInputPassword4">Password</label>
<input type="password" class="form-control" id="exampleInputPassword4"
placeholder="Password">
</div>
<div class="form-group">
<label for="exampleSelectGender">Gender</label>
<select class="form-control" id="exampleSelectGender">
<option>Male</option>
<option>Female</option>
</select>
</div>
<div class="form-group">
<label>File upload</label>
<input type="file" name="img[]" class="file-upload-default">
<div class="input-group col-xs-12">
<input type="text" class="form-control file-upload-info" disabled
placeholder="Upload Image">
<span class="input-group-append">
<button class="file-upload-browse btn btn-primary" type="button">Upload</button>
</span>
</div>
</div>
<div class="form-group">
<label for="exampleInputCity1">City</label>
<input type="text" class="form-control" id="exampleInputCity1"
placeholder="Location">
</div>
<div class="form-group">
<label for="exampleTextarea1">Textarea</label>
<textarea class="form-control" id="exampleTextarea1" rows="4"></textarea>
</div>
<button type="submit" class="btn btn-primary mr-2">Submit</button>
<button class="btn btn-light">Cancel</button>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@ -6,54 +6,68 @@
<div class="col-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">Basic form elements</h4>
<h4 class="card-title">Tanggapi Aduan</h4>
<p class="card-description">
Basic form elements
Form tanggapan admin terhadap aduan masyarakat
</p>
<form class="forms-sample">
<form class="forms-sample"
action="{{ route('admin.aduan.tanggapi', $aduan->id_aduan) }}"
method="POST">
@csrf
<!-- Nama Pelapor -->
<div class="form-group">
<label for="exampleInputName1">Name</label>
<input type="text" class="form-control" id="exampleInputName1" placeholder="Name">
<label>Nama Pelapor</label>
<input type="text" class="form-control"
value="{{ $aduan->nama_pelapor }}"
readonly>
</div>
<!-- Alamat Pelapor -->
<div class="form-group">
<label for="exampleInputEmail3">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail3" placeholder="Email">
<label>Alamat Pelapor</label>
<input type="text" class="form-control"
value="{{ $aduan->alamat_pelapor }}"
readonly>
</div>
<!-- Isi Aduan -->
<div class="form-group">
<label for="exampleInputPassword4">Password</label>
<input type="password" class="form-control" id="exampleInputPassword4"
placeholder="Password">
<label>Isi Aduan</label>
<textarea class="form-control" rows="4" readonly>{{ $aduan->isi_aduan }}</textarea>
</div>
<div class="form-group">
<label for="exampleSelectGender">Gender</label>
<select class="form-control" id="exampleSelectGender">
<option>Male</option>
<option>Female</option>
</select>
</div>
<div class="form-group">
<label>File upload</label>
<input type="file" name="img[]" class="file-upload-default">
<div class="input-group col-xs-12">
<input type="text" class="form-control file-upload-info" disabled
placeholder="Upload Image">
<span class="input-group-append">
<button class="file-upload-browse btn btn-primary" type="button">Upload</button>
</span>
<!-- Bukti Foto -->
@if ($aduan->bukti_foto)
<div class="form-group">
<label>Bukti Foto</label><br>
<img src="{{ asset('storage/' . $aduan->bukti_foto) }}"
alt="Bukti Aduan"
class="img-fluid rounded"
style="max-height: 250px;">
</div>
</div>
@endif
<!-- Tanggapan Admin -->
<div class="form-group">
<label for="exampleInputCity1">City</label>
<input type="text" class="form-control" id="exampleInputCity1"
placeholder="Location">
<label>Tanggapan Admin</label>
<textarea name="tanggapan_admin"
class="form-control"
rows="4"
placeholder="Masukkan tanggapan admin..."
required>{{ old('tanggapan_admin', $aduan->tanggapan_admin) }}</textarea>
</div>
<div class="form-group">
<label for="exampleTextarea1">Textarea</label>
<textarea class="form-control" id="exampleTextarea1" rows="4"></textarea>
</div>
<button type="submit" class="btn btn-primary mr-2">Submit</button>
<button class="btn btn-light">Cancel</button>
<!-- Tombol -->
<button type="submit" class="btn btn-primary mr-2">
Simpan Tanggapan
</button>
<a href="{{ route('admin.aduan.index') }}" class="btn btn-light">
Kembali
</a>
</form>
</div>
</div>
</div>

View File

@ -7,20 +7,14 @@
<div class="card">
<div class="card-body">
<!-- Header card: Judul kiri, tombol kanan -->
<!-- Header card -->
<div class="d-flex justify-content-between align-items-center mb-3">
<div>
<h4 class="card-title mb-0">Basic Table</h4>
<h4 class="card-title mb-0">Data Aduan</h4>
<p class="card-description mb-0">
Add class <code>.table</code>
Daftar aduan masyarakat
</p>
</div>
<a href="{{ route('admin.tps.create') }}" class="btn btn-primary">
<i class="bi bi-plus-lg"></i> Tambah
</a>
</div>
<!-- Tabel -->
@ -28,62 +22,54 @@
<table class="table">
<thead>
<tr>
<th>Profile</th>
<th>VatNo.</th>
<th>Created</th>
<th>Nama Pelapor</th>
<th>Alamat</th>
<th>Tanggal Aduan</th>
<th>Status</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<tr>
<td>Jacob</td>
<td>53275531</td>
<td>12 May 2017</td>
<td><label class="badge badge-danger">Pending</label></td>
<td class="text-center">
<a href="#" class="btn btn-warning btn-sm me-1" title="Edit">
<i class="bi bi-pencil-square"></i>
</a>
<a href="#" class="btn btn-danger btn-sm" title="Hapus"
onclick="return confirm('Yakin ingin menghapus data ini?')">
<i class="bi bi-trash"></i>
</a>
</td>
</tr>
<tr>
<td>Messsy</td>
<td>53275532</td>
<td>15 May 2017</td>
<td><label class="badge badge-warning">In progress</label></td>
<td class="text-center">
<a href="#" class="btn btn-warning btn-sm me-1" title="Edit">
<i class="bi bi-pencil-square"></i>
</a>
<a href="#" class="btn btn-danger btn-sm" title="Hapus"
onclick="return confirm('Yakin ingin menghapus data ini?')">
<i class="bi bi-trash"></i>
</a>
</td>
</tr>
<tr>
<td>John</td>
<td>53275533</td>
<td>14 May 2017</td>
<td><label class="badge badge-info">Fixed</label></td>
</tr>
<tr>
<td>Peter</td>
<td>53275534</td>
<td>16 May 2017</td>
<td><label class="badge badge-success">Completed</label></td>
</tr>
<tr>
<td>Dave</td>
<td>53275535</td>
<td>20 May 2017</td>
<td><label class="badge badge-warning">In progress</label></td>
</tr>
@forelse ($aduan as $item)
<tr>
<td>{{ $item->nama_pelapor }}</td>
<td>{{ $item->alamat_pelapor }}</td>
<td>
{{ \Carbon\Carbon::parse($item->tanggal_aduan)->format('d M Y') }}
</td>
<td>
@if ($item->tanggapan_admin)
<label class="badge badge-success">Ditanggapi</label>
@else
<label class="badge badge-danger">Belum</label>
@endif
</td>
<td class="text-center">
<a href="{{ route('admin.aduan.show', $item->id_aduan) }}"
class="btn btn-warning btn-sm me-1"
title="Tanggapi">
<i class="bi bi-pencil-square"></i>
</a>
<form action="{{ route('admin.aduan.destroy', $item->id_aduan) }}"
method="POST"
style="display:inline"
onsubmit="return confirm('Yakin ingin menghapus aduan ini?')">
@csrf
@method('DELETE')
<button class="btn btn-danger btn-sm" title="Hapus">
<i class="bi bi-trash"></i>
</button>
</form>
</td>
</tr>
@empty
<tr>
<td colspan="5" class="text-center">
Data aduan belum tersedia
</td>
</tr>
@endforelse
</tbody>
</table>
</div>

View File

@ -69,55 +69,48 @@
<div class="container-fluid page-body-wrapper">
<nav class="sidebar sidebar-offcanvas" id="sidebar">
<ul class="nav">
<li class="nav-item">
<li class="nav-item {{ request()->routeIs('admin.dashboard') ? 'active' : '' }}">
<a class="nav-link" href="{{ route('admin.dashboard') }}">
<i class="icon-grid menu-icon"></i>
<span class="menu-title">Dashboard</span>
</a>
</li>
<li class="nav-item">
<li class="nav-item {{ request()->routeIs('admin.tps.*') ? 'active' : '' }}">
<a class="nav-link" href="{{ route('admin.tps.index') }}">
<i class="icon-grid menu-icon"></i>
<span class="menu-title">Kelola TPS</span>
</a>
</li>
<li class="nav-item">
<li class="nav-item {{ request()->routeIs('admin.kategori.*') ? 'active' : '' }}">
<a class="nav-link" href="{{ route('admin.kategori.index') }}">
<i class="icon-bell menu-icon"></i>
<span class="menu-title">Kategori TPS</span>
</a>
</li>
<li class="nav-item">
<li class="nav-item {{ request()->routeIs('admin.sampah.*') ? 'active' : '' }}">
<a class="nav-link" href="{{ route('admin.sampah.index') }}">
<i class="icon-trash menu-icon"></i>
<span class="menu-title">Kelola Sampah</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('admin.sampah.index') }}">
<li class="nav-item {{ request()->routeIs('admin.aduan.*') ? 'active' : '' }}">
<a class="nav-link" href="{{ route('admin.aduan.index') }}">
<i class="icon-paper menu-icon"></i>
<span class="menu-title">Kelola Aduan</span>
</a>
</li>
</ul>
</nav>
<div class="main-panel">
@yield('content')
<footer class="footer">
<div class="d-sm-flex justify-content-center justify-content-sm-between">
<span class="text-muted text-center text-sm-left d-block d-sm-inline-block">Copyright © 2021.
Premium <a href="https://www.bootstrapdash.com/" target="_blank">Bootstrap admin
template</a> from BootstrapDash. All rights reserved.</span>
<span class="float-none float-sm-right d-block mt-1 mt-sm-0 text-center">Hand-crafted & made
with <i class="ti-heart text-danger ml-1"></i></span>
</div>
<div class="d-sm-flex justify-content-center justify-content-sm-between">
<span class="text-muted text-center text-sm-left d-block d-sm-inline-block">Distributed by <a
href="https://www.themewagon.com/" target="_blank">Themewagon</a></span>
</div>
</footer>
</div>
</div>
</div>

View File

@ -2,6 +2,7 @@
use App\Http\Controllers\SigController;
use App\Http\Controllers\AboutController;
use App\Http\Controllers\Admin\AduanController as AdminAduanController;
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Admin\KategoriTpsController;
use App\Http\Controllers\Admin\LoginController;
@ -75,4 +76,10 @@
Route::get('/sampah/{id}/edit', [SampahController::class, 'edit'])->name('sampah.edit');
Route::put('/sampah/{id}', [SampahController::class, 'update'])->name('sampah.update');
Route::delete('/sampah/{id}', [SampahController::class, 'destroy'])->name('sampah.destroy');
// ADUAN ADMIN
Route::get('/aduan', [AdminAduanController::class, 'index'])->name('aduan.index');
Route::get('/aduan/{id}', [AdminAduanController::class, 'show'])->name('aduan.show');
Route::post('/aduan/{id}/tanggapi', [AdminAduanController::class, 'tanggapi'])->name('aduan.tanggapi');
Route::post('/aduan/{id}', [AdminAduanController::class, 'destroy'])->name('aduan.destroy');
});