From e4fd3ee80958fc72dbdb006d5ff6afb4b121ede1 Mon Sep 17 00:00:00 2001 From: myuqinurrohman Date: Fri, 21 Mar 2025 13:11:15 +0700 Subject: [PATCH] chore: add issue count column in classification and sub classification --- .../Dashboard/ClassificationController.php | 4 +- .../Dashboard/DatatableController.php | 41 +++++++++++++-- .../Dashboard/IssueManagementController.php | 9 +++- .../Dashboard/SubClassificationController.php | 4 +- app/Models/Classification.php | 4 ++ app/Models/SubClassification.php | 4 ++ .../classifications/create.blade.php | 4 +- .../dashboard/classifications/edit.blade.php | 8 ++- .../dashboard/classifications/index.blade.php | 9 ++-- .../dashboard/classifications/show.blade.php | 42 +++++++++------ .../views/dashboard/overview/index.blade.php | 2 + .../sub-classifications/create.blade.php | 4 +- .../sub-classifications/edit.blade.php | 8 ++- .../sub-classifications/index.blade.php | 7 +-- .../sub-classifications/show.blade.php | 32 ++++++------ .../views/dashboard/users/edit.blade.php | 4 +- .../views/partials/app/datatable.blade.php | 46 ++++++++++++++-- .../app/overview-statistics.blade.php | 3 ++ .../views/partials/app/sweetalert.blade.php | 2 +- routes/web.php | 52 ++++++++++--------- 20 files changed, 201 insertions(+), 88 deletions(-) diff --git a/app/Http/Controllers/Dashboard/ClassificationController.php b/app/Http/Controllers/Dashboard/ClassificationController.php index 669898c..bab9bf2 100644 --- a/app/Http/Controllers/Dashboard/ClassificationController.php +++ b/app/Http/Controllers/Dashboard/ClassificationController.php @@ -25,13 +25,12 @@ public function create(){ public function store(ClassificationRequest $request){ $validatedData = $request->validated(); - $validatedData['slug'] = Str::slug($validatedData['name']); $validatedData['enhancer_id'] = Auth::id(); $createdClassification = Classification::create($validatedData); if($createdClassification){ - return redirect()->back()->with('success-status', 'Berhasil menambahkan klasifikasi.'); + return redirect()->route('dashboard.classifications.index')->with('success-status', 'Berhasil menambahkan klasifikasi.'); }else{ return redirect()->back()->with('failed-status', 'Gagal menambahkan klasifikasi.'); } @@ -48,7 +47,6 @@ public function edit($id){ public function update(ClassificationRequest $request, $id){ $validatedData = $request->validated(); - $validatedData['slug'] = Str::slug($validatedData['name']); $validatedData['enhancer_id'] = Auth::id(); $classification = Classification::findOrFail(decrypt_id($id)); diff --git a/app/Http/Controllers/Dashboard/DatatableController.php b/app/Http/Controllers/Dashboard/DatatableController.php index 62b026f..7a1f857 100644 --- a/app/Http/Controllers/Dashboard/DatatableController.php +++ b/app/Http/Controllers/Dashboard/DatatableController.php @@ -56,11 +56,21 @@ public function classification(Request $request){ return $subClassificationCount; } + }) + ->addColumn('issues', function ($data) { + $issueCount = $data->issues->count(); + + if($issueCount > 0){ + return $issueCount. ' [Lihat]'; + }else{ + return $issueCount; + } + }) ->addColumn('action', function ($data) { $showUrl = route('dashboard.classifications.show', ['id' => encrypt_id($data->id)]); - $addSubClassificationUrl = route('dashboard.sub.classifications.create', ['classification' => $data->slug]); + $addSubClassificationUrl = route('dashboard.sub.classifications.create', ['classification' => encrypt_id($data->id)]); $editUrl = route('dashboard.classifications.edit', ['id' => encrypt_id($data->id)]); @@ -92,7 +102,7 @@ public function classification(Request $request){ return $dropdown; }) - ->rawColumns(['sub_classifications', 'status', 'action']) + ->rawColumns(['sub_classifications', 'issues', 'status', 'action']) ->make(true); } @@ -134,6 +144,16 @@ public function subClassification(Request $request){ return 'Aktif'; } }) + ->addColumn('issues', function ($data) { + $issueCount = $data->issues->count(); + + if($issueCount > 0){ + return $issueCount. ' [Lihat]'; + }else{ + return $issueCount; + } + + }) ->addColumn('action', function ($data) { $showUrl = route('dashboard.sub.classifications.show', ['id' => encrypt_id($data->id)]); @@ -163,7 +183,7 @@ public function subClassification(Request $request){ return $dropdown; }) - ->rawColumns(['status', 'action']) + ->rawColumns(['issues', 'status', 'action']) ->make(true); } @@ -1662,7 +1682,20 @@ public function mediaMonitoring(Request $request){ public function issueManagement(Request $request){ if ($request->ajax()) { - $data = IssueManagement::with(['location', 'subLocation', 'classification', 'subClassification', 'enhancer', 'governmentAgencies'])->get(); + + $classificationParam = $request->input('classification', null); + $subClassificationParam = $request->input('sub_classification', null); + + if($classificationParam){ + $data = IssueManagement::with(['location', 'subLocation', 'classification', 'subClassification', 'enhancer', 'governmentAgencies'])->where('classification_id', decrypt_id($classificationParam))->get(); + + }else if($subClassificationParam){ + $data = IssueManagement::with(['location', 'subLocation', 'classification', 'subClassification', 'enhancer', 'governmentAgencies'])->where('sub_classification_id', decrypt_id($subClassificationParam))->get(); + + }else{ + $data = IssueManagement::with(['location', 'subLocation', 'classification', 'subClassification', 'enhancer', 'governmentAgencies'])->get(); + } + return DataTables::of($data) ->addIndexColumn() diff --git a/app/Http/Controllers/Dashboard/IssueManagementController.php b/app/Http/Controllers/Dashboard/IssueManagementController.php index be86f73..daea6f2 100644 --- a/app/Http/Controllers/Dashboard/IssueManagementController.php +++ b/app/Http/Controllers/Dashboard/IssueManagementController.php @@ -16,9 +16,14 @@ class IssueManagementController extends Controller { - public function index(){ + public function index(Request $request){ return view('dashboard.issue-managements.index', [ - 'title' => 'Manajemen Isu' + 'title' => 'Manajemen Isu', + 'classification' => $request->input('classification', null), + 'sub_classification' => $request->input('sub_classification', null), + 'location' => $request->input('location', null), + 'sub_location' => $request->input('sub_location', null), + 'agency' => $request->input('agency', null), ]); } diff --git a/app/Http/Controllers/Dashboard/SubClassificationController.php b/app/Http/Controllers/Dashboard/SubClassificationController.php index 7853a9b..b817f6d 100644 --- a/app/Http/Controllers/Dashboard/SubClassificationController.php +++ b/app/Http/Controllers/Dashboard/SubClassificationController.php @@ -42,13 +42,12 @@ public function create(Request $request){ public function store(SubClassificationRequest $request){ $validatedData = $request->validated(); - $validatedData['slug'] = Str::slug($validatedData['name']); $validatedData['enhancer_id'] = Auth::id(); $createdSubClassification = SubClassification::create($validatedData); if($createdSubClassification){ - return redirect()->back()->with('success-status', 'Berhasil menambahkan sub klasifikasi.'); + return redirect()->route('dashboard.sub.classifications.index')->with('success-status', 'Berhasil menambahkan sub klasifikasi.'); }else{ return redirect()->back()->with('failed-status', 'Gagal menambahkan sub klasifikasi.'); } @@ -66,7 +65,6 @@ public function edit($id){ public function update(SubClassificationRequest $request, $id){ $validatedData = $request->validated(); - $validatedData['slug'] = Str::slug($validatedData['name']); $validatedData['enhancer_id'] = Auth::id(); $subClassification = SubClassification::findOrFail(decrypt_id($id)); diff --git a/app/Models/Classification.php b/app/Models/Classification.php index 8962990..9506ce2 100644 --- a/app/Models/Classification.php +++ b/app/Models/Classification.php @@ -20,4 +20,8 @@ class Classification extends Model public function subClassifications(){ return $this->hasMany(SubClassification::class, 'classification_id', 'id'); } + + public function issues(){ + return $this->hasMany(IssueManagement::class, 'classification_id', 'id'); + } } diff --git a/app/Models/SubClassification.php b/app/Models/SubClassification.php index 3a10b8a..e6fdce7 100644 --- a/app/Models/SubClassification.php +++ b/app/Models/SubClassification.php @@ -19,4 +19,8 @@ class SubClassification extends Model public function classification(){ return $this->belongsTo(Classification::class, 'classification_id', 'id'); } + + public function issues(){ + return $this->hasMany(IssueManagement::class, 'sub_classification_id', 'id'); + } } diff --git a/resources/views/dashboard/classifications/create.blade.php b/resources/views/dashboard/classifications/create.blade.php index 16dc045..8a0d9e3 100644 --- a/resources/views/dashboard/classifications/create.blade.php +++ b/resources/views/dashboard/classifications/create.blade.php @@ -12,7 +12,7 @@
{{$title}}
-
+ @csrf
@@ -49,7 +49,7 @@
Kembali - +
diff --git a/resources/views/dashboard/classifications/edit.blade.php b/resources/views/dashboard/classifications/edit.blade.php index d200a26..1375578 100644 --- a/resources/views/dashboard/classifications/edit.blade.php +++ b/resources/views/dashboard/classifications/edit.blade.php @@ -12,7 +12,7 @@
{{$title}}
- + @csrf @method('put')
@@ -49,8 +49,12 @@

+ @if (request()->query('show')) + Kembali + @else Kembali - + @endif +
diff --git a/resources/views/dashboard/classifications/index.blade.php b/resources/views/dashboard/classifications/index.blade.php index a2b93a0..d6fe171 100644 --- a/resources/views/dashboard/classifications/index.blade.php +++ b/resources/views/dashboard/classifications/index.blade.php @@ -44,11 +44,12 @@ - + - - - + + + +
NoNo NamaStatusSub KlasifikasiStatusSub KlasifikasiIsu
diff --git a/resources/views/dashboard/classifications/show.blade.php b/resources/views/dashboard/classifications/show.blade.php index 2331578..1f5d9be 100644 --- a/resources/views/dashboard/classifications/show.blade.php +++ b/resources/views/dashboard/classifications/show.blade.php @@ -1,5 +1,5 @@ @include('partials.dashboard.head') -@include('partials.dashboard.sidebar', ['page' => 'journalists']) +@include('partials.dashboard.sidebar', ['page' => 'classifications']) @include('partials.dashboard.header')
@@ -12,7 +12,7 @@
@@ -44,6 +44,30 @@
+
+
+ Sub Klasifikasi + + @if ($classification->subClassifications->count() > 0) + {{$classification->subClassifications->count()}} + @else + {{$classification->subClassifications->count()}} + @endif + +
+
+
+
+ Isu + + @if ($classification->issues->count() > 0) + {{$classification->issues->count()}} + @else + {{$classification->issues->count()}} + @endif + +
+
{{--
--}} @@ -59,22 +83,10 @@ - {{--
-
- Konten -
-
-
-
- {!!$journalistMonitoring->content!!} -
-
-
-
--}}
Kembali - {{-- Ubah --}} + Ubah
diff --git a/resources/views/dashboard/overview/index.blade.php b/resources/views/dashboard/overview/index.blade.php index 2c2bcfe..9829c51 100644 --- a/resources/views/dashboard/overview/index.blade.php +++ b/resources/views/dashboard/overview/index.blade.php @@ -30,6 +30,7 @@
+ @if (is_role(['1']))
@@ -210,6 +211,7 @@
+ @endif
diff --git a/resources/views/dashboard/sub-classifications/create.blade.php b/resources/views/dashboard/sub-classifications/create.blade.php index 3ce9569..c2a827f 100644 --- a/resources/views/dashboard/sub-classifications/create.blade.php +++ b/resources/views/dashboard/sub-classifications/create.blade.php @@ -12,7 +12,7 @@
{{$title}}
- + @csrf
@@ -67,7 +67,7 @@
Kembali - +
diff --git a/resources/views/dashboard/sub-classifications/edit.blade.php b/resources/views/dashboard/sub-classifications/edit.blade.php index d956819..9a27716 100644 --- a/resources/views/dashboard/sub-classifications/edit.blade.php +++ b/resources/views/dashboard/sub-classifications/edit.blade.php @@ -12,7 +12,7 @@
{{$title}}
- + @csrf @method('put')
@@ -61,8 +61,12 @@

+ @if (request()->query('show')) + Kembali + @else Kembali - + @endif +
diff --git a/resources/views/dashboard/sub-classifications/index.blade.php b/resources/views/dashboard/sub-classifications/index.blade.php index b2f5746..93591ff 100644 --- a/resources/views/dashboard/sub-classifications/index.blade.php +++ b/resources/views/dashboard/sub-classifications/index.blade.php @@ -44,11 +44,12 @@ - + - - + + +
NoNo Klasifikasi NamaStatusIsuStatus
diff --git a/resources/views/dashboard/sub-classifications/show.blade.php b/resources/views/dashboard/sub-classifications/show.blade.php index c35ba91..b2e3fcb 100644 --- a/resources/views/dashboard/sub-classifications/show.blade.php +++ b/resources/views/dashboard/sub-classifications/show.blade.php @@ -1,5 +1,5 @@ @include('partials.dashboard.head') -@include('partials.dashboard.sidebar', ['page' => 'journalists']) +@include('partials.dashboard.sidebar', ['page' => 'sub_classifications']) @include('partials.dashboard.header')
@@ -12,7 +12,7 @@
@@ -34,6 +34,18 @@ {{$subClassification->classification->name}}
+
+
+ Isu + + @if ($subClassification->issues->count() > 0) + {{$subClassification->issues->count()}} + @else + {{$subClassification->issues->count()}} + @endif + +
+
Status @@ -65,22 +77,10 @@
- {{--
-
- Konten -
-
-
-
- {!!$journalistMonitoring->content!!} -
-
-
-
--}}
- Kembali - {{-- Ubah --}} + Kembali + Ubah
diff --git a/resources/views/dashboard/users/edit.blade.php b/resources/views/dashboard/users/edit.blade.php index 17da47f..2a4b9df 100644 --- a/resources/views/dashboard/users/edit.blade.php +++ b/resources/views/dashboard/users/edit.blade.php @@ -38,20 +38,20 @@ @enderror + @if ($user->role_id !== 3)
+ @endif
diff --git a/resources/views/partials/app/datatable.blade.php b/resources/views/partials/app/datatable.blade.php index c45ee31..4bd5625 100644 --- a/resources/views/partials/app/datatable.blade.php +++ b/resources/views/partials/app/datatable.blade.php @@ -33,13 +33,33 @@ { data: 'name', name: 'name' }, { data: 'status', name: 'status' }, { data: 'sub_classifications', name: 'sub_classifications' }, + { data: 'issues', name: 'issues' }, { data: 'action', name: 'action', orderable: false, searchable: false }, { data: 'created_at', name: 'created_at', visible: false }, { data: 'id', name: 'id', orderable: true, searchable: false, visible: false }, ], + columnDefs: [ + { targets: 0, width: 'auto' }, + { targets: 2, width: '7%' }, + { targets: 3, width: '10%' }, + { targets: 4, width: '10%' }, + { targets: 5, width: 'auto' }, + { + targets: [1], + createdCell: function(td, cellData, rowData, row, col) { + $(td).css({ + 'word-wrap': 'break-word', + 'white-space': 'normal', + 'overflow-wrap': 'break-word' + }); + } + } + ], language: datatableLanguage, autoWidth: false, - order: [[5, 'desc']], + order: [ + [6, 'desc'], + ], pagingType: "simple", lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']], scrollX: true @@ -60,14 +80,34 @@ { data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false }, { data: 'classification', name: 'classification' }, { data: 'name', name: 'name' }, + { data: 'issues', name: 'issues' }, { data: 'status', name: 'status' }, { data: 'action', name: 'action', orderable: false, searchable: false }, { data: 'created_at', name: 'created_at', visible: false }, { data: 'id', name: 'id', orderable: true, searchable: false, visible: false }, ], + columnDefs: [ + { targets: 0, width: 'auto' }, + { targets: 1, width: '10%' }, + { targets: 3, width: '10%' }, + { targets: 4, width: '10%' }, + { targets: 5, width: 'auto' }, + { + targets: [2], + createdCell: function(td, cellData, rowData, row, col) { + $(td).css({ + 'word-wrap': 'break-word', + 'white-space': 'normal', + 'overflow-wrap': 'break-word' + }); + } + } + ], language: datatableLanguage, autoWidth: false, - order: [[5, 'desc']], + order: [ + [6, 'desc'] + ], pagingType: "simple", lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']], scrollX: true @@ -729,7 +769,7 @@ $('#issueManagementsTable').DataTable({ processing: true, serverSide: true, - ajax: '{{ route('dashboard.issue.managements.data') }}', + ajax: '{{ route('dashboard.issue.managements.data', ["classification" => $classification, "sub_classification" => $sub_classification, "location" => $location, "sub_location" => $sub_location, "agency" => $agency]) }}', columns: [ { data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false }, { data: 'code', name: 'code' }, diff --git a/resources/views/partials/app/overview-statistics.blade.php b/resources/views/partials/app/overview-statistics.blade.php index 32e462e..a1ccd7f 100644 --- a/resources/views/partials/app/overview-statistics.blade.php +++ b/resources/views/partials/app/overview-statistics.blade.php @@ -699,6 +699,8 @@ function ecommerceBarS1(selector, set_data) { data: [4305, 859, 482, 138] }] }; + + @if(is_role(['1'])) var issueStatistics = { labels: ["Krisis", "Negatif", "Netral", "Positif"], dataUnit: 'Data', @@ -720,6 +722,7 @@ function ecommerceBarS1(selector, set_data) { data: ["{{ $facebookMediaMonitoring }}", "{{ $twitterMediaMonitoring }}", "{{ $websiteMediaMonitoring }}", "{{ $youtubeMediaMonitoring }}", "{{ $instagramMediaMonitoring }}", "{{ $tiktokMediaMonitoring }}", "{{ $cetakMediaMonitoring }}"] }] }; + @endif var mediaOrderStatistics = { labels: ["Menunggu", "Diterima", "Ditolak"], diff --git a/resources/views/partials/app/sweetalert.blade.php b/resources/views/partials/app/sweetalert.blade.php index b18eceb..152ed79 100644 --- a/resources/views/partials/app/sweetalert.blade.php +++ b/resources/views/partials/app/sweetalert.blade.php @@ -143,7 +143,7 @@ function statusAction(url, message, confirmButtonAction) { reverseButtons: true }).then((result) => { if (result.isConfirmed) { - console.log("Form akan dikirim..."); + // console.log("Form akan dikirim..."); $('#myForm').off('submit').submit(); // Pastikan hanya submit 1x } diff --git a/routes/web.php b/routes/web.php index 751c69e..29da5f4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -51,38 +51,42 @@ Route::get('/overview', 'index')->name('overview'); }); - Route::prefix('classifications')->name('classifications.')->group(function(){ - Route::controller(ClassificationController::class)->group(function(){ - Route::get('/', 'index')->name('index'); - Route::get('/{id}/show', 'show')->name('show'); + Route::middleware('role:1,2,4')->group(function(){ + Route::prefix('classifications')->name('classifications.')->group(function(){ + Route::controller(ClassificationController::class)->group(function(){ + Route::get('/', 'index')->name('index'); + Route::get('/{id}/show', 'show')->name('show'); - Route::middleware('role:1')->group(function(){ - Route::get('/create', 'create')->name('create'); - Route::post('/', 'store')->name('store'); - Route::get('/{id}/edit', 'edit')->name('edit'); - Route::put('/{id}', 'update')->name('update'); - Route::delete('/{id}', 'destroy')->name('destroy'); + Route::middleware('role:1')->group(function(){ + Route::get('/create', 'create')->name('create'); + Route::post('/', 'store')->name('store'); + Route::get('/{id}/edit', 'edit')->name('edit'); + Route::put('/{id}', 'update')->name('update'); + Route::delete('/{id}', 'destroy')->name('destroy'); + }); }); - }); - Route::get('/data', [DatatableController::class, 'classification'])->name('data'); + Route::get('/data', [DatatableController::class, 'classification'])->name('data'); + }); }); - Route::prefix('sub-classifications')->name('sub.classifications.')->group(function(){ - Route::controller(SubClassificationController::class)->group(function(){ - Route::get('/', 'index')->name('index'); - Route::get('/{id}/show', 'show')->name('show'); + Route::middleware('role:1,2,4')->group(function(){ + Route::prefix('sub-classifications')->name('sub.classifications.')->group(function(){ + Route::controller(SubClassificationController::class)->group(function(){ + Route::get('/', 'index')->name('index'); + Route::get('/{id}/show', 'show')->name('show'); - Route::middleware('role:1')->group(function(){ - Route::get('/create', 'create')->name('create'); - Route::post('/', 'store')->name('store'); - Route::get('/{id}/edit', 'edit')->name('edit'); - Route::put('/{id}', 'update')->name('update'); - Route::delete('/{id}', 'destroy')->name('destroy'); + Route::middleware('role:1')->group(function(){ + Route::get('/create', 'create')->name('create'); + Route::post('/', 'store')->name('store'); + Route::get('/{id}/edit', 'edit')->name('edit'); + Route::put('/{id}', 'update')->name('update'); + Route::delete('/{id}', 'destroy')->name('destroy'); + }); }); - }); - Route::get('/data', [DatatableController::class, 'subClassification'])->name('data'); + Route::get('/data', [DatatableController::class, 'subClassification'])->name('data'); + }); }); Route::prefix('locations')->name('locations.')->group(function(){