167 lines
6.7 KiB
PHP
167 lines
6.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Dashboard;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\ContentRecap;
|
|
use App\Models\Cooperation;
|
|
use App\Models\CooperationCompletion;
|
|
use App\Models\IssueManagement;
|
|
use App\Models\Media;
|
|
use App\Models\MediaMonitoring;
|
|
use App\Models\MediaOrder;
|
|
use App\Models\Order;
|
|
use App\Models\User;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class OverviewController extends Controller
|
|
{
|
|
public function index(Request $request){
|
|
|
|
$data = [
|
|
'title' => 'Ikhtisar'
|
|
];
|
|
|
|
$year = $request->input('year') ? $request->input('year') : Carbon::now()->year;
|
|
|
|
if(is_role(['3'])){
|
|
$mediaId = Auth::user()->company->media->id;
|
|
$media = Media::with('cooperations')->findOrFail($mediaId);
|
|
$user = User::with(['announcements'])->find(Auth::id());
|
|
|
|
// Data pengumuman
|
|
$data['announcements'] = $user->announcements()
|
|
->where(function ($query) {
|
|
$query->where('announcements_users.category', '=', 'general');
|
|
})
|
|
->get();
|
|
|
|
// Data pengajuan kerjasama
|
|
$data['cooperationRequests'] = $media->cooperations()
|
|
->where(function ($query) {
|
|
$query->where('media_cooperations.status', '=', '0');
|
|
})
|
|
->get();
|
|
|
|
// Data kalender Kerjasama
|
|
$data['cooperationMedia'] = $media->cooperations->filter(function ($cooperation) use ($mediaId){
|
|
return $cooperation->proposals->where('status', 1)->where('media_id', $mediaId)->isNotEmpty();
|
|
});
|
|
|
|
// Data kalender media order
|
|
$data['mediaOrders'] = $media->orders()
|
|
->where(function ($query) {
|
|
$query->where('media_orders.status', '=', '1');
|
|
})
|
|
->get();
|
|
|
|
}else if(is_role(['1'])){
|
|
|
|
// Statistik Isu
|
|
$issues = IssueManagement::all();
|
|
$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
|
|
$mediaMonitorings = MediaMonitoring::all();
|
|
$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
|
|
|
|
// Statistik Media Order
|
|
$mediaOrder = MediaOrder::select('status', DB::raw('count(*) as total'))
|
|
->groupBy('status')
|
|
->pluck('total', 'status');
|
|
|
|
$data['waitingMediaOrder'] = $mediaOrder[0] ?? 0; // Status 0 = menunggu
|
|
$data['acceptedMediaOrder'] = $mediaOrder[1] ?? 0; // Status 1 = diterima
|
|
$data['rejectedMediaOrder'] = $mediaOrder[2] ?? 0; // Status 2 = ditolak
|
|
// Akhir Statistik Media Order
|
|
|
|
|
|
// Statistik Rekap Konten
|
|
$contentRecap = ContentRecap::all();
|
|
$contentRecapCount = $contentRecap->groupBy('channel')->map(function ($group) {
|
|
return $group->count();
|
|
});
|
|
$data['facebookContentRecap'] = $contentRecapCount->get('facebook', 0);
|
|
$data['twitterContentRecap'] = $contentRecapCount->get('twitter', 0);
|
|
$data['websiteContentRecap'] = $contentRecapCount->get('website', 0);
|
|
$data['youtubeContentRecap'] = $contentRecapCount->get('youtube', 0);
|
|
$data['instagramContentRecap'] = $contentRecapCount->get('instagram', 0);
|
|
$data['tiktokContentRecap'] = $contentRecapCount->get('tiktok', 0);
|
|
$data['cetakContentRecap'] = $contentRecapCount->get('cetak', 0);
|
|
// Akhir Statistik Rekap Konten
|
|
|
|
// Inisialisasi array 12 bulan (0-11)
|
|
$mediaMonitoringMonthly = array_fill(0, 12, 0);
|
|
$issueManagementMonthly = array_fill(0, 12, 0);
|
|
|
|
// Media Monitoring
|
|
$mediaMonitorings = DB::table('media_monitorings')
|
|
->whereYear('created_at', $year)
|
|
->selectRaw('MONTH(created_at) as month, COUNT(*) as total')
|
|
->groupBy('month')
|
|
->pluck('total', 'month');
|
|
|
|
foreach ($mediaMonitorings as $month => $total) {
|
|
$mediaMonitoringMonthly[$month - 1] = $total;
|
|
}
|
|
|
|
// Issue Management
|
|
$issueManagements = DB::table('issue_managements')
|
|
->whereYear('created_at', $year)
|
|
->selectRaw('MONTH(created_at) as month, COUNT(*) as total')
|
|
->groupBy('month')
|
|
->pluck('total', 'month');
|
|
|
|
foreach ($issueManagements as $month => $total) {
|
|
$issueManagementMonthly[$month - 1] = $total;
|
|
}
|
|
|
|
$data['mediaMonitoringMonthly'] = $mediaMonitoringMonthly;
|
|
$data['issueManagementMonthly'] = $issueManagementMonthly;
|
|
|
|
|
|
|
|
// Data kalender pengajuan kerjasama
|
|
$data['cooperationRequests'] = Cooperation::all();
|
|
|
|
// Data kalender media order
|
|
$data['mediaOrders'] = Order::with(['cooperation'])->get();
|
|
|
|
}else if(is_role(['5'])){
|
|
|
|
// Statistik Penyelesaian Kerjasama
|
|
$cooperationCompletion = CooperationCompletion::all();
|
|
$cooperationCompletionCounts = $cooperationCompletion->groupBy('status')->map(function ($group) {
|
|
return $group->count();
|
|
});
|
|
|
|
$data['cooperationCompletionWaiting'] = $cooperationCompletionCounts->get('0', 0);
|
|
$data['cooperationCompletionAccepted'] = $cooperationCompletionCounts->get('1', 0);
|
|
$data['cooperationCompletionRejected'] = $cooperationCompletionCounts->get('2', 0);
|
|
}
|
|
|
|
return view('dashboard.overview.index', $data);
|
|
}
|
|
}
|