From 51c1447ff736996bb002f27a34cc562571f4314b Mon Sep 17 00:00:00 2001 From: myqnrrhmn Date: Tue, 8 Jul 2025 10:03:39 +0700 Subject: [PATCH] feat: media monitoring and issue management statistic --- .../Dashboard/StatisticController.php | 188 +++++++++++++ public/assets/dashboard/css/custom.css | 4 + .../media-monitoring-statistics.blade.php | 2 +- ...edia-monitoring-issue-management.blade.php | 126 +++++++++ .../dashboard/statistics/index.blade.php | 44 +++ .../show/media-cooperation.blade.php | 0 ...edia-monitoring-issue-management.blade.php | 252 ++++++++++++++++++ .../views/partials/app/sweetalert.blade.php | 11 + .../views/partials/dashboard/footer.blade.php | 24 +- .../partials/dashboard/sidebar.blade.php | 6 + routes/web.php | 11 + 11 files changed, 662 insertions(+), 6 deletions(-) create mode 100644 app/Http/Controllers/Dashboard/StatisticController.php create mode 100644 resources/views/dashboard/statistics/chart/media-monitoring-issue-management.blade.php create mode 100644 resources/views/dashboard/statistics/index.blade.php create mode 100644 resources/views/dashboard/statistics/show/media-cooperation.blade.php create mode 100644 resources/views/dashboard/statistics/show/media-monitoring-issue-management.blade.php diff --git a/app/Http/Controllers/Dashboard/StatisticController.php b/app/Http/Controllers/Dashboard/StatisticController.php new file mode 100644 index 0000000..d3bfcf6 --- /dev/null +++ b/app/Http/Controllers/Dashboard/StatisticController.php @@ -0,0 +1,188 @@ + 'Aktivitas Login', + 'category' => 'login-activities', + 'is_available' => false + ], + [ + 'name' => 'Jurnalis', + 'category' => 'journalists', + 'is_available' => false + ], + [ + 'name' => 'Kerja Sama Media', + 'category' => 'media-cooperations', + 'is_available' => false + ], + [ + 'name' => 'Laporan Bukti Tayang', + 'category' => 'reports', + 'is_available' => false + ], + [ + 'name' => 'Media', + 'category' => 'media', + 'is_available' => false + ], + [ + 'name' => 'Monitoring Media & Manajemen Isu', + 'category' => 'media-monitorings-issue-management', + 'is_available' => true + ], + [ + 'name' => 'Penyelesaian Kerja Sama', + 'category' => 'cooperation-completions', + 'is_available' => false + ], + [ + 'name' => 'Pengguna', + 'category' => 'users', + 'is_available' => false + ], + [ + 'name' => 'Perusahaan', + 'category' => 'companies', + 'is_available' => false + ], + [ + 'name' => 'Rekap Konten', + 'category' => 'content-recaps', + 'is_available' => false + ], + [ + 'name' => 'Pengunjung Website', + 'category' => 'website-visitors', + 'is_available' => false + ], + ]; + + + return view('dashboard.statistics.index', [ + 'title' => 'Statistik', + 'statistics' => $statistics + ]); + } + + public function show(Request $request, $category){ + + $data = [ + 'category' => $category, + 'year' => $request->input('year') ? $request->input('year') : null, + 'from_month' => $request->input('from_month') ? $request->input('from_month') : null, + 'to_month' => $request->input('to_month') ? $request->input('to_month') : null, + ]; + + $upComings = [ + 'login-activities', + 'journalists', + 'media-cooperations', + 'reports', + 'media', + 'cooperation-completions', + 'users', + 'companies', + 'content-recaps', + 'website-visitors', + ]; + + if(in_array($category, $upComings)){ + return redirect()->back()->with('waiting-status', 'Dalam pegembangan'); + } + + $year = $request->input('year') ? $request->input('year') : Carbon::now()->year; + + switch($category){ + case 'media-monitorings-issue-management': + $data['title'] = 'Statistik Monitoring Media & Manajemen Isu'; + // Statistik Isu + $issues = IssueManagement::with(['mediaMonitoring']); + $mediaMonitorings = MediaMonitoring::with(['issue']); + + if($year !== 'all'){ + $issues->whereYear('created_at', $year); + $mediaMonitorings->whereYear('created_at', $year); + } + + $issues = $issues->get(); + $mediaMonitorings = $mediaMonitorings->get(); + + + $issueCounts = $issues->groupBy('issue')->map(function ($group) { + return $group->count(); + }); + + $data['crisisIssue'] = $issueCounts->get('krisis', 0); + $data['negativeIssue'] = $issueCounts->get('negatif', 0); + $data['neutralIssue'] = $issueCounts->get('netral', 0); + $data['positiveIssue'] = $issueCounts->get('positif', 0); + // Akhir Statistik Isu + + // Statistik Monitoring Media + $mediaMonitoringCount = $mediaMonitorings->groupBy('channel')->map(function ($group) { + return $group->count(); + }); + $data['facebookMediaMonitoring'] = $mediaMonitoringCount->get('facebook', 0); + $data['twitterMediaMonitoring'] = $mediaMonitoringCount->get('twitter', 0); + $data['websiteMediaMonitoring'] = $mediaMonitoringCount->get('website', 0); + $data['youtubeMediaMonitoring'] = $mediaMonitoringCount->get('youtube', 0); + $data['instagramMediaMonitoring'] = $mediaMonitoringCount->get('instagram', 0); + $data['tiktokMediaMonitoring'] = $mediaMonitoringCount->get('tiktok', 0); + $data['cetakMediaMonitoring'] = $mediaMonitoringCount->get('cetak', 0); + // Akhir Statistik Monitoring Media + + // Media Monitoring 2 (pakai koleksi yang sudah ada) + $mediaMonitoringMonthly = array_fill(0, 12, 0); // Init array 12 bulan + $mediaMonitorings->groupBy(function ($item) { + return (int) $item->created_at->format('m'); // bulan sebagai int + })->each(function ($group, $month) use (&$mediaMonitoringMonthly) { + $mediaMonitoringMonthly[$month - 1] = $group->count(); + }); + + // Issue Management 2 (pakai koleksi yang sudah ada) + $issueManagementMonthly = array_fill(0, 12, 0); + $issues->groupBy(function ($item) { + return (int) $item->created_at->format('m'); + })->each(function ($group, $month) use (&$issueManagementMonthly) { + $issueManagementMonthly[$month - 1] = $group->count(); + }); + + $mediaMonitoringWithoutIssue = MediaMonitoring::doesntHave('issue') + ->when($year !== 'all', function ($query) use ($year) { + $query->whereYear('created_at', $year); + }) + ->get(); + + $mediaMonitoringWithIssue = MediaMonitoring::has('issue') + ->when($year !== 'all', function ($query) use ($year) { + $query->whereYear('created_at', $year); + }) + ->get(); + + $data['mediaMonitoringWithoutIssueCount'] = $mediaMonitoringWithoutIssue->count(); + $data['mediaMonitoringWithIssueCount'] = $mediaMonitoringWithIssue->count(); + + $data['mediaMonitoringMonthly'] = $mediaMonitoringMonthly; + $data['issueManagementMonthly'] = $issueManagementMonthly; + + return view('dashboard.statistics.show.media-monitoring-issue-management', $data); + case 'issue-managements': + $data['title'] = 'Statistik Manajemen Isu'; + break; + } + } +} diff --git a/public/assets/dashboard/css/custom.css b/public/assets/dashboard/css/custom.css index 1784adf..35bddf0 100644 --- a/public/assets/dashboard/css/custom.css +++ b/public/assets/dashboard/css/custom.css @@ -171,3 +171,7 @@ .file-not-filled{ .link-show{ width: 68% !important; } + +.not-available-text{ + color: rgb(195, 195, 195) !important; +} diff --git a/resources/views/dashboard/media-monitorings/statistics/media-monitoring-statistics.blade.php b/resources/views/dashboard/media-monitorings/statistics/media-monitoring-statistics.blade.php index 86a6b26..d9fb094 100644 --- a/resources/views/dashboard/media-monitorings/statistics/media-monitoring-statistics.blade.php +++ b/resources/views/dashboard/media-monitorings/statistics/media-monitoring-statistics.blade.php @@ -24,7 +24,7 @@ }] }; var barChartMultiple = { - labels: ["Jan", "Feb", "Mar", "Apr", "Mey", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], dataUnit: 'Data', datasets: [{ label: "Monitoring Media", diff --git a/resources/views/dashboard/statistics/chart/media-monitoring-issue-management.blade.php b/resources/views/dashboard/statistics/chart/media-monitoring-issue-management.blade.php new file mode 100644 index 0000000..84ab7f9 --- /dev/null +++ b/resources/views/dashboard/statistics/chart/media-monitoring-issue-management.blade.php @@ -0,0 +1,126 @@ + diff --git a/resources/views/dashboard/statistics/index.blade.php b/resources/views/dashboard/statistics/index.blade.php new file mode 100644 index 0000000..00baca5 --- /dev/null +++ b/resources/views/dashboard/statistics/index.blade.php @@ -0,0 +1,44 @@ +@include('partials.dashboard.head') +@include('partials.dashboard.sidebar', ['page' => 'statistics']) +@include('partials.dashboard.header') + +
+
+
+
+
+
+
+

{{$title}}

+
+

Temukan informasi dan ringkasan data penting yang disajikan secara terstruktur untuk kemudahan pemantauan dan analisis.

+
+
+
+
+
+ @foreach ($statistics as $statistic) + + @endforeach +
+
+
+
+
+
+
+ +@include('partials.dashboard.footer', ['rich_editor' => false]) diff --git a/resources/views/dashboard/statistics/show/media-cooperation.blade.php b/resources/views/dashboard/statistics/show/media-cooperation.blade.php new file mode 100644 index 0000000..e69de29 diff --git a/resources/views/dashboard/statistics/show/media-monitoring-issue-management.blade.php b/resources/views/dashboard/statistics/show/media-monitoring-issue-management.blade.php new file mode 100644 index 0000000..7891042 --- /dev/null +++ b/resources/views/dashboard/statistics/show/media-monitoring-issue-management.blade.php @@ -0,0 +1,252 @@ +@include('partials.dashboard.head') +@include('partials.dashboard.sidebar', ['page' => 'statistics']) +@include('partials.dashboard.header') + +
+
+
+
+
+
+
+

{{$title}}

+
+ {{-- {{dd($cooperationRequests)}} --}} +
+
+ +
+
    +
  • +
    + Kembali +
    +
  • +
  • + @if (isset($year) && filled($year)) + + + + + + @endif +
    + Filter +
    +
  • +
+
+
+
+
+
+
+
+ @if (is_role(['1'])) +
+
+
+
+
+
+
Kanal Monitoring Media
+
+
+
+ +
+
    +
  • +
    + + Facebook {{ '('.$facebookMediaMonitoring.')' }} +
    +
  • +
  • +
    + + Twitter {{ '('.$twitterMediaMonitoring.')' }} +
    +
  • +
  • +
    + + Website {{ '('.$websiteMediaMonitoring.')' }} +
    +
  • +
  • +
    + + YouTube {{ '('.$youtubeMediaMonitoring.')' }} +
    +
  • +
  • +
    + + Instagram {{ '('.$instagramMediaMonitoring.')' }} +
    +
  • +
  • +
    + + TikTok {{ '('.$tiktokMediaMonitoring.')' }} +
    +
  • +
  • +
    + + Cetak {{ '('.$cetakMediaMonitoring.')' }} +
    +
  • +
+
+
+
+
+
+
+
+
+
+
+
Isu
+
+
+
+ +
+
    +
  • +
    + + Krisis {{ '('.$crisisIssue.')' }} +
    +
  • +
  • +
    + + Negatif {{ '('.$negativeIssue.')' }} +
    +
  • +
  • +
    + + Netral {{ '('.$neutralIssue.')' }} +
    +
  • +
  • +
    + + Positif {{ '('.$positiveIssue.')' }} +
    +
  • +
+
+
+
+
+
+
+
+
+
+
+
Status Monitoring Media
+
+
+
+ +
+
    +
  • +
    + + Belum Memiliki Isu {{ '('.$mediaMonitoringWithoutIssueCount.')' }} +
    +
  • +
  • +
    + + Sudah Memiliki Isu {{ '('.$mediaMonitoringWithIssueCount.')' }} +
    +
  • +
+
+
+
+
+ @endif +
+
+
+
+
+
+
Statistik Monitoring Media dan Manajemen Isu
+
+
+
+ +
+
+
+
+
+ + {{--
+
+
+
+ +
+
+
+
--}} +
+
+
+
+
+
+ +@include('partials.dashboard.footer', ['statistic_chart' => 'media-monitoring']) diff --git a/resources/views/partials/app/sweetalert.blade.php b/resources/views/partials/app/sweetalert.blade.php index a2c5899..c134058 100644 --- a/resources/views/partials/app/sweetalert.blade.php +++ b/resources/views/partials/app/sweetalert.blade.php @@ -265,6 +265,17 @@ function statusAction(url, message, confirmButtonAction) { @endif +@if (session('waiting-status')) + +@endif + @endif +@if (isset($statistic_chart)) +@switch($statistic_chart) + @case('media-monitoring') + @include('dashboard.statistics.chart.media-monitoring-issue-management') + @include('dashboard.media-monitorings.statistics.media-monitoring-statistics') + @break + @case(2) + + @break + @default + +@endswitch +@endif +