remove list trashed data in classification

This commit is contained in:
myuqinurrohman 2025-03-24 09:21:44 +07:00
parent 8de64a00dd
commit 01a8b500a4
10 changed files with 123 additions and 66 deletions

View File

@ -11,9 +11,10 @@
class ClassificationController extends Controller class ClassificationController extends Controller
{ {
public function index(){ public function index(Request $request){
return view('dashboard.classifications.index', [ return view('dashboard.classifications.index', [
'title' => 'Klasifikasi' 'title' => 'Klasifikasi',
'filter' => $request->input('filter', null)
]); ]);
} }
@ -60,7 +61,7 @@ public function update(ClassificationRequest $request, $id){
} }
public function show($id){ public function show($id){
$classification = Classification::find(decrypt_id($id)); $classification = Classification::withTrashed()->find(decrypt_id($id));
return view('dashboard.classifications.show', [ return view('dashboard.classifications.show', [
'title' => 'Detail Klasifikasi', 'title' => 'Detail Klasifikasi',

View File

@ -36,12 +36,19 @@ class DatatableController extends Controller
public function classification(Request $request){ public function classification(Request $request){
if ($request->ajax()) { if ($request->ajax()) {
$data = Classification::with(['subClassifications'])->get(); if($request->input('filter') === 'deleted'){
$data = Classification::with(['subClassifications'])->onlyTrashed()->get();
}else{
$data = Classification::with(['subClassifications'])->get();
}
return DataTables::of($data) return DataTables::of($data)
->addIndexColumn() ->addIndexColumn()
->addColumn('status', function ($data) { ->addColumn('status', function ($data) {
if ($data->status == '0') { if(filled($data->deleted_at)){
return '<span class="badge bg-danger" style="display:inline-block;font-size:0.8rem;">Dihapus</span>';
}else if ($data->status == '0') {
return '<span class="badge bg-danger" style="display:inline-block;font-size:0.8rem;">Nonaktif</span>'; return '<span class="badge bg-danger" style="display:inline-block;font-size:0.8rem;">Nonaktif</span>';
}else{ }else{
return '<span class="badge bg-primary" style="display:inline-block;font-size:0.8rem;">Aktif</span>'; return '<span class="badge bg-primary" style="display:inline-block;font-size:0.8rem;">Aktif</span>';
@ -82,15 +89,15 @@ public function classification(Request $request){
<ul class="link-list-opt"> <ul class="link-list-opt">
<li><a href="'.$showUrl.'"><em class="icon ni ni-eye"></em><span>Detail</span></a></li>'; <li><a href="'.$showUrl.'"><em class="icon ni ni-eye"></em><span>Detail</span></a></li>';
if (is_role([1])) { if (is_role([1]) && !filled($data->deleted_at)) {
$dropdown .= '<li><a href="'.$addSubClassificationUrl.'"><em class="icon ni ni-plus"></em><span>Tambah Sub Klasifikasi</span></a></li>'; $dropdown .= '<li><a href="'.$addSubClassificationUrl.'"><em class="icon ni ni-plus"></em><span>Tambah Sub Klasifikasi</span></a></li>';
} }
if (is_role([1])) { if (is_role([1]) && !filled($data->deleted_at)) {
$dropdown .= '<li><a href="'.$editUrl.'"><em class="icon ni ni-edit"></em><span>Ubah</span></a></li>'; $dropdown .= '<li><a href="'.$editUrl.'"><em class="icon ni ni-edit"></em><span>Ubah</span></a></li>';
} }
if (is_role([1])) { if (is_role([1]) && !filled($data->deleted_at)) {
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus klasifikasi '.$data->name.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>'; $dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus klasifikasi '.$data->name.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
} }
@ -113,7 +120,10 @@ public function classification(Request $request){
public function subClassification(Request $request){ public function subClassification(Request $request){
if ($request->ajax()) { if ($request->ajax()) {
$classificationParam = $request->input('classification', null); if($request->input('filter') === 'deleted'){
$data = SubClassification::with(['classification'])->onlyTrashed()->get();
}else{
$classificationParam = $request->input('classification', null);
if ($classificationParam) { if ($classificationParam) {
$classification = Classification::where('id', '=', decrypt_id($classificationParam))->first(); $classification = Classification::where('id', '=', decrypt_id($classificationParam))->first();
@ -130,6 +140,7 @@ public function subClassification(Request $request){
$query->withTrashed(); $query->withTrashed();
}])->get(); }])->get();
} }
}
return DataTables::of($data) return DataTables::of($data)
@ -138,7 +149,9 @@ public function subClassification(Request $request){
return $data->classification->name; return $data->classification->name;
}) })
->addColumn('status', function ($data) { ->addColumn('status', function ($data) {
if ($data->status == '0') { if(filled($data->deleted_at)){
return '<span class="badge bg-danger" style="display:inline-block;font-size:0.8rem;">Dihapus</span>';
}else if ($data->status == '0') {
return '<span class="badge bg-danger" style="display:inline-block;font-size:0.8rem;">Nonaktif</span>'; return '<span class="badge bg-danger" style="display:inline-block;font-size:0.8rem;">Nonaktif</span>';
}else{ }else{
return '<span class="badge bg-primary" style="display:inline-block;font-size:0.8rem;">Aktif</span>'; return '<span class="badge bg-primary" style="display:inline-block;font-size:0.8rem;">Aktif</span>';
@ -167,14 +180,17 @@ public function subClassification(Request $request){
<ul class="link-list-opt"> <ul class="link-list-opt">
<li><a href="'.$showUrl.'"><em class="icon ni ni-eye"></em><span>Detail</span></a></li>'; <li><a href="'.$showUrl.'"><em class="icon ni ni-eye"></em><span>Detail</span></a></li>';
if (is_role([1])) { if (is_role([1]) && !filled($data->deleted_at)) {
$dropdown .= '<li><a href="'.$editUrl.'"><em class="icon ni ni-edit"></em><span>Ubah</span></a></li>'; $dropdown .= '<li><a href="'.$editUrl.'"><em class="icon ni ni-edit"></em><span>Ubah</span></a></li>';
} }
if (is_role([1])) { if (is_role([1]) && !filled($data->deleted_at)) {
$dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus sub klasifikasi '.$data->name.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>'; $dropdown .= '<li><a href="javascript:void(0);" onclick="deleteItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin menghapus sub klasifikasi '.$data->name.'? Item ini akan dihapus secara permanen!\')"><em class="icon ni ni-trash"></em><span>Hapus</span></a></li>';
} }
// else{
// $dropdown .= '<li><a href="javascript:void(0);" onclick="restoreItem(\''.$deleteUrl.'\', \'Apakah Anda yakin ingin mengembalikan sub klasifikasi '.$data->name.'? Item ini akan dipulihkan!\')"><em class="icon ni ni-unarchive"></em><span>Pulihkan</span></a></li>';
// }
$dropdown .= '</ul> $dropdown .= '</ul>
</div> </div>

View File

@ -17,6 +17,7 @@ public function index(Request $request){
$viewData = [ $viewData = [
'title' => 'Sub Klasifikasi', 'title' => 'Sub Klasifikasi',
'classification' => $request->input('classification', null), 'classification' => $request->input('classification', null),
'filter' => $request->input('filter', null)
]; ];
return view('dashboard.sub-classifications.index', $viewData); return view('dashboard.sub-classifications.index', $viewData);
@ -78,7 +79,7 @@ public function update(SubClassificationRequest $request, $id){
} }
public function show($id){ public function show($id){
$subClassification = SubClassification::with(['classification'])->find(decrypt_id($id)); $subClassification = SubClassification::with(['classification'])->withTrashed()->find(decrypt_id($id));
return view('dashboard.sub-classifications.show', [ return view('dashboard.sub-classifications.show', [
'title' => 'Detail Sub Klasifikasi', 'title' => 'Detail Sub Klasifikasi',

View File

@ -3,9 +3,12 @@
namespace App\Models; namespace App\Models;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class SubClassification extends Model class SubClassification extends Model
{ {
use SoftDeletes;
protected $table = 'sub_classifications'; protected $table = 'sub_classifications';
protected $fillable = [ protected $fillable = [
@ -17,7 +20,7 @@ class SubClassification extends Model
]; ];
public function classification(){ public function classification(){
return $this->belongsTo(Classification::class, 'classification_id', 'id'); return $this->belongsTo(Classification::class, 'classification_id', 'id')->withTrashed();
} }
public function issues(){ public function issues(){

View File

@ -17,18 +17,6 @@
<a href="#" class="btn btn-icon btn-trigger toggle-expand me-n1" data-target="pageMenu"><em class="icon ni ni-more-v"></em></a> <a href="#" class="btn btn-icon btn-trigger toggle-expand me-n1" data-target="pageMenu"><em class="icon ni ni-more-v"></em></a>
<div class="toggle-expand-content" data-content="pageMenu"> <div class="toggle-expand-content" data-content="pageMenu">
<ul class="nk-block-tools g-3"> <ul class="nk-block-tools g-3">
{{-- <li>
<div class="drodown">
<a href="#" class="dropdown-toggle btn btn-white btn-dim btn-outline-light" data-bs-toggle="dropdown"><em class="d-none d-sm-inline icon ni ni-calender-date"></em><span><span class="d-none d-md-inline">Last</span> 30 Days</span><em class="dd-indc icon ni ni-chevron-right"></em></a>
<div class="dropdown-menu dropdown-menu-end">
<ul class="link-list-opt no-bdr">
<li><a href="#"><span>Last 30 Days</span></a></li>
<li><a href="#"><span>Last 6 Months</span></a></li>
<li><a href="#"><span>Last 1 Years</span></a></li>
</ul>
</div>
</div>
</li> --}}
<li class="nk-block-tools-opt"><a href="{{route('dashboard.classifications.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li> <li class="nk-block-tools-opt"><a href="{{route('dashboard.classifications.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li>
</ul> </ul>
</div> </div>
@ -46,9 +34,9 @@
<tr> <tr>
<th>No</th> <th>No</th>
<th>Nama</th> <th>Nama</th>
<th>Status</th>
<th>Sub Klasifikasi</th> <th>Sub Klasifikasi</th>
<th>Isu</th> <th>Isu</th>
<th>Status</th>
<th></th> <th></th>
</tr> </tr>
</thead> </thead>

View File

@ -31,18 +31,16 @@
<div class="profile-ud-item"> <div class="profile-ud-item">
<div class="profile-ud wider"> <div class="profile-ud wider">
<span class="profile-ud-label">Status</span> <span class="profile-ud-label">Status</span>
@switch($classification->status) @if (filled($classification->deleted_at))
@case(0) <span class="profile-ud-value"><span class="badge bg-danger">Dihapus</span></span>
<span class="profile-ud-value"><span class="badge bg-warning">Nonaktif</span></span> @elseif ($classification->status == 0)
@break <span class="profile-ud-value"><span class="badge bg-warning">Nonaktif</span></span>
@case(1) @elseif ($classification->status == 1)
<span class="profile-ud-value"><span class="badge bg-success">Aktif</span></span> <span class="profile-ud-value"><span class="badge bg-success">Aktif</span></span>
@break @else
@default <span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span> @endif
@endswitch
</div> </div>
</div> </div>
<div class="profile-ud-item"> <div class="profile-ud-item">
<div class="profile-ud wider"> <div class="profile-ud wider">
@ -68,6 +66,12 @@
</span> </span>
</div> </div>
</div> </div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Dibuat Pada</span>
<span class="profile-ud-value">{{idn_date($classification->created_at, 'l, d F Y')}}</span>
</div>
</div>
</div><!-- .profile-ud-list --> </div><!-- .profile-ud-list -->
</div><!-- .nk-block --> </div><!-- .nk-block -->
{{-- <div class="nk-divider divider md"></div> --}} {{-- <div class="nk-divider divider md"></div> --}}
@ -86,7 +90,9 @@
<hr> <hr>
<div class="nk-block d-flex justify-content-end"> <div class="nk-block d-flex justify-content-end">
<a href="{{route('dashboard.classifications.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a> <a href="{{route('dashboard.classifications.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
@if (!filled($classification->deleted_at))
<a href="{{route('dashboard.classifications.edit', ['id' => encrypt_id($classification->id), 'show' => true])}}" class="btn btn-warning"><span>Ubah</span></a> <a href="{{route('dashboard.classifications.edit', ['id' => encrypt_id($classification->id), 'show' => true])}}" class="btn btn-warning"><span>Ubah</span></a>
@endif
</div><!-- .nk-block --> </div><!-- .nk-block -->
</div><!-- .card-inner --> </div><!-- .card-inner -->
</div><!-- .card-content --> </div><!-- .card-content -->

View File

@ -17,18 +17,6 @@
<a href="#" class="btn btn-icon btn-trigger toggle-expand me-n1" data-target="pageMenu"><em class="icon ni ni-more-v"></em></a> <a href="#" class="btn btn-icon btn-trigger toggle-expand me-n1" data-target="pageMenu"><em class="icon ni ni-more-v"></em></a>
<div class="toggle-expand-content" data-content="pageMenu"> <div class="toggle-expand-content" data-content="pageMenu">
<ul class="nk-block-tools g-3"> <ul class="nk-block-tools g-3">
{{-- <li>
<div class="drodown">
<a href="#" class="dropdown-toggle btn btn-white btn-dim btn-outline-light" data-bs-toggle="dropdown"><em class="d-none d-sm-inline icon ni ni-calender-date"></em><span><span class="d-none d-md-inline">Last</span> 30 Days</span><em class="dd-indc icon ni ni-chevron-right"></em></a>
<div class="dropdown-menu dropdown-menu-end">
<ul class="link-list-opt no-bdr">
<li><a href="#"><span>Last 30 Days</span></a></li>
<li><a href="#"><span>Last 6 Months</span></a></li>
<li><a href="#"><span>Last 1 Years</span></a></li>
</ul>
</div>
</div>
</li> --}}
<li class="nk-block-tools-opt"><a href="{{route('dashboard.sub.classifications.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li> <li class="nk-block-tools-opt"><a href="{{route('dashboard.sub.classifications.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li>
</ul> </ul>
</div> </div>

View File

@ -49,18 +49,22 @@
<div class="profile-ud-item"> <div class="profile-ud-item">
<div class="profile-ud wider"> <div class="profile-ud wider">
<span class="profile-ud-label">Status</span> <span class="profile-ud-label">Status</span>
@switch($subClassification->status) @if (filled($subClassification->deleted_at))
@case(0) <span class="profile-ud-value"><span class="badge bg-danger">Dihapus</span></span>
<span class="profile-ud-value"><span class="badge bg-warning">Nonaktif</span></span> @elseif ($subClassification->status == 0)
@break <span class="profile-ud-value"><span class="badge bg-warning">Nonaktif</span></span>
@case(1) @elseif ($subClassification->status == 1)
<span class="profile-ud-value"><span class="badge bg-success">Aktif</span></span> <span class="profile-ud-value"><span class="badge bg-success">Aktif</span></span>
@break @else
@default <span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span>
<span class="profile-ud-value"><span class="badge bg-secondary">Tidak Diketahui</span></span> @endif
@endswitch </div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Dibuat Pada</span>
<span class="profile-ud-value">{{idn_date($subClassification->created_at, 'l, d F Y')}}</span>
</div> </div>
</div> </div>
</div><!-- .profile-ud-list --> </div><!-- .profile-ud-list -->
</div><!-- .nk-block --> </div><!-- .nk-block -->
@ -80,7 +84,9 @@
<hr> <hr>
<div class="nk-block d-flex justify-content-end"> <div class="nk-block d-flex justify-content-end">
<a href="{{route('dashboard.sub.classifications.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a> <a href="{{route('dashboard.sub.classifications.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
@if (!filled($subClassification->deleted_at))
<a href="{{route('dashboard.sub.classifications.edit', ['id' => encrypt_id($subClassification->id), 'show' => true])}}" class="btn btn-warning"><span>Ubah</span></a> <a href="{{route('dashboard.sub.classifications.edit', ['id' => encrypt_id($subClassification->id), 'show' => true])}}" class="btn btn-warning"><span>Ubah</span></a>
@endif
</div><!-- .nk-block --> </div><!-- .nk-block -->
</div><!-- .card-inner --> </div><!-- .card-inner -->
</div><!-- .card-content --> </div><!-- .card-content -->

View File

@ -27,22 +27,22 @@
$('#classificationsTable').DataTable({ $('#classificationsTable').DataTable({
processing: true, processing: true,
serverSide: true, serverSide: true,
ajax: '{{ route('dashboard.classifications.data') }}', ajax: '{{ route('dashboard.classifications.data', ["filter" => $filter]) }}',
columns: [ columns: [
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false }, { data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
{ data: 'name', name: 'name' }, { data: 'name', name: 'name' },
{ data: 'status', name: 'status' },
{ data: 'sub_classifications', name: 'sub_classifications' }, { data: 'sub_classifications', name: 'sub_classifications' },
{ data: 'issues', name: 'issues' }, { data: 'issues', name: 'issues' },
{ data: 'status', name: 'status' },
{ data: 'action', name: 'action', orderable: false, searchable: false }, { data: 'action', name: 'action', orderable: false, searchable: false },
{ data: 'created_at', name: 'created_at', visible: false }, { data: 'created_at', name: 'created_at', visible: false },
{ data: 'id', name: 'id', orderable: true, searchable: false, visible: false }, { data: 'id', name: 'id', orderable: true, searchable: false, visible: false },
], ],
columnDefs: [ columnDefs: [
{ targets: 0, width: 'auto' }, { targets: 0, width: 'auto' },
{ targets: 2, width: '7%' }, { targets: 2, width: '10%' },
{ targets: 3, width: '10%' }, { targets: 3, width: '10%' },
{ targets: 4, width: '10%' }, { targets: 4, width: '7%' },
{ targets: 5, width: 'auto' }, { targets: 5, width: 'auto' },
{ {
targets: [1], targets: [1],
@ -75,7 +75,7 @@
$('#subClassificationsTable').DataTable({ $('#subClassificationsTable').DataTable({
processing: true, processing: true,
serverSide: true, serverSide: true,
ajax: '{{ route('dashboard.sub.classifications.data', ["classification" => $classification]) }}', ajax: '{{ route('dashboard.sub.classifications.data', ["classification" => $classification, "filter" => $filter]) }}',
columns: [ columns: [
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false }, { data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
{ data: 'classification', name: 'classification' }, { data: 'classification', name: 'classification' },

View File

@ -46,6 +46,54 @@ function deleteItem(url, message) {
} }
</script> </script>
<script>
$(document).ready(function() {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
});
function restoreItem(url, message) {
Swal.fire({
title: 'Apakah Anda yakin?',
text: message,
icon: 'question',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, pulihkan!',
cancelButtonText: 'Batal',
reverseButtons: true
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
type: "POST",
url: url,
success: function(response) {
$('#usersTable').DataTable().ajax.reload();
Swal.fire(
'Terhapus!',
response.message,
'success'
).then(() => {
location.reload();
});
},
error: function(xhr) {
Swal.fire(
'Terjadi kesalahan!',
xhr.responseText,
'error'
);
}
});
}
});
}
</script>
<script> <script>
$(document).ready(function() { $(document).ready(function() {
$.ajaxSetup({ $.ajaxSetup({