simedkom/app/Http/Controllers/Dashboard/StatisticController.php

189 lines
7.1 KiB
PHP

<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Controller;
use App\Models\IssueManagement;
use App\Models\MediaMonitoring;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class StatisticController extends Controller
{
public function index(Request $request){
$statistics = [
[
'name' => '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;
}
}
}