diff --git a/app/Http/Controllers/Dashboard/OverviewController.php b/app/Http/Controllers/Dashboard/OverviewController.php index e9dff14..b4afdfd 100644 --- a/app/Http/Controllers/Dashboard/OverviewController.php +++ b/app/Http/Controllers/Dashboard/OverviewController.php @@ -19,47 +19,15 @@ class OverviewController extends Controller { - public function index(Request $request){ - + 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 kerja sama - $data['cooperationRequests'] = $media->cooperations() - ->where(function ($query) { - $query->where('media_cooperations.status', '=', '0'); - }) - ->get(); - - // Data kalender Kerja sama - $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'])){ - + if (is_role(['3'])) { // Statistik Isu $issues = IssueManagement::all(); $issueCounts = $issues->groupBy('issue')->map(function ($group) { @@ -74,9 +42,11 @@ public function index(Request $request){ // 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); @@ -88,8 +58,8 @@ public function index(Request $request){ // Statistik Media Order $mediaOrder = MediaOrder::select('status', DB::raw('count(*) as total')) - ->groupBy('status') - ->pluck('total', 'status'); + ->groupBy('status') + ->pluck('total', 'status'); $data['waitingMediaOrder'] = $mediaOrder[0] ?? 0; // Status 0 = menunggu $data['acceptedMediaOrder'] = $mediaOrder[1] ?? 0; // Status 1 = diterima @@ -140,15 +110,130 @@ public function index(Request $request){ $data['mediaMonitoringMonthly'] = $mediaMonitoringMonthly; $data['issueManagementMonthly'] = $issueManagementMonthly; - - // Data kalender pengajuan kerja sama $data['cooperationRequests'] = Cooperation::all(); // Data kalender media order $data['mediaOrders'] = Order::with(['cooperation'])->get(); - }else if(is_role(['5'])){ + $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 kerja sama + $data['cooperationRequests'] = $media->cooperations() + ->where(function ($query) { + $query->where('media_cooperations.status', '=', '0'); + }) + ->get(); + + // Data kalender Kerja sama + $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 kerja sama + $data['cooperationRequests'] = Cooperation::all(); + + // Data kalender media order + $data['mediaOrders'] = Order::with(['cooperation'])->get(); + } else if (is_role(['5'])) { // Statistik Penyelesaian Kerja sama $cooperationCompletion = CooperationCompletion::all(); diff --git a/app/Http/Requests/RegisterRequest.php b/app/Http/Requests/RegisterRequest.php index c926067..54f7d20 100644 --- a/app/Http/Requests/RegisterRequest.php +++ b/app/Http/Requests/RegisterRequest.php @@ -26,11 +26,11 @@ public function rules(): array return [ // Login credential 'name' => ['required'], - 'email' => ['required', 'email','unique:users,email'], + 'email' => ['required', 'email', 'unique:users,email'], 'password' => ['required', 'confirmed', Password::min(8) - ->mixedCase() - ->numbers() - ->symbols()], + ->mixedCase() + ->numbers() + ->symbols()], // Company 'company_name' => ['required', 'max:100'], 'company_email' => ['required', 'max:100', 'email'], @@ -38,20 +38,20 @@ public function rules(): array 'company_director_name' => ['required', 'max:100'], 'company_director_nik' => ['required', 'max:100'], 'company_director_nik_doc' => ['required', 'file', 'mimes:pdf', 'max:2048'], - 'company_deed_incorporation' => ['nullable', 'max:100'], - 'company_deed_incorporation_doc' => ['nullable', 'file', 'mimes:pdf', 'max:2048'], - 'company_trade_license' => ['nullable', 'max:100'], - 'company_trade_license_doc' => ['nullable', 'file', 'mimes:pdf', 'max:2048'], - 'company_tax_id_number' => ['nullable', 'max:100'], - 'company_tax_id_number_doc' => ['nullable', 'file', 'mimes:pdf', 'max:2048'], - 'company_taxable_enterprise' => ['nullable', 'max:100'], - 'company_taxable_enterprise_doc' => ['nullable', 'file', 'mimes:pdf', 'max:2048'], - 'company_annual_tax_return' => ['nullable', 'max:100'], - 'company_annual_tax_return_doc' => ['nullable', 'file', 'mimes:pdf', 'max:2048'], - 'company_domicile_certificate' => ['nullable', 'max:100'], - 'company_domicile_certificate_doc' => ['nullable', 'file', 'mimes:pdf', 'max:2048'], - 'company_profile' => ['nullable', 'max:100'], - 'company_profile_doc' => ['nullable', 'file', 'mimes:pdf', 'max:2048'], + 'company_deed_incorporation' => ['required', 'max:100'], + 'company_deed_incorporation_doc' => ['required', 'file', 'mimes:pdf', 'max:2048'], + 'company_trade_license' => ['required', 'max:100'], + 'company_trade_license_doc' => ['required', 'file', 'mimes:pdf', 'max:2048'], + 'company_tax_id_number' => ['required', 'max:100'], + 'company_tax_id_number_doc' => ['required', 'file', 'mimes:pdf', 'max:2048'], + 'company_taxable_enterprise' => ['required', 'max:100'], + 'company_taxable_enterprise_doc' => ['required', 'file', 'mimes:pdf', 'max:2048'], + 'company_annual_tax_return' => ['required', 'max:100'], + 'company_annual_tax_return_doc' => ['required', 'file', 'mimes:pdf', 'max:2048'], + 'company_domicile_certificate' => ['required', 'max:100'], + 'company_domicile_certificate_doc' => ['required', 'file', 'mimes:pdf', 'max:2048'], + 'company_profile' => ['required', 'max:100'], + 'company_profile_doc' => ['required', 'file', 'mimes:pdf', 'max:2048'], // Media 'media_name' => ['required', 'max:100'], 'media_address' => ['required'], @@ -66,10 +66,10 @@ public function rules(): array 'journalist_name' => ['required', 'max:100'], 'journalist_email' => ['required', 'max:100', 'email'], 'journalist_phone_number' => ['required', 'max:100'], - 'journalist_press_card' => ['nullable', 'max:100'], - 'journalist_press_card_doc' => ['nullable', 'file', 'mimes:pdf', 'max:2048'], - 'journalist_ukw_sertificate' => ['nullable', 'max:100'], - 'journalist_ukw_sertificate_doc' => ['nullable', 'file', 'mimes:pdf', 'max:2048'], + 'journalist_press_card' => ['required', 'max:100'], + 'journalist_press_card_doc' => ['required', 'file', 'mimes:pdf', 'max:2048'], + 'journalist_ukw_sertificate' => ['required', 'max:100'], + 'journalist_ukw_sertificate_doc' => ['required', 'file', 'mimes:pdf', 'max:2048'], ]; } @@ -200,6 +200,4 @@ protected function prepareForValidation() 'journalist_ukw_sertificate_doc' => filled($this->journalist_ukw_sertificate_doc) ? $this->journalist_ukw_sertificate_doc : null, ]); } - - } diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index 2e0d30c..6e85f6e 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -161,7 +161,7 @@