aduan admin
This commit is contained in:
parent
d8df50a853
commit
fcb11aba99
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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']);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -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');
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
@ -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
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue