From 69e3db9ce30258767e6820a26650d4e4ae595fa3 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 29 Jan 2026 15:21:03 +0700 Subject: [PATCH] refactor: Consolidate journalist statistics into `OverviewStats` widget, removing dedicated `JournalistMetricsStats` and `JournalistUkwChart` widgets and their permissions. --- .../Widgets/JournalistMetricsStats.php | 43 --------------- app/Filament/Widgets/JournalistUkwChart.php | 55 ------------------- app/Filament/Widgets/OverviewStats.php | 15 +++++ database/seeders/ShieldSeeder.php | 8 --- 4 files changed, 15 insertions(+), 106 deletions(-) delete mode 100644 app/Filament/Widgets/JournalistMetricsStats.php delete mode 100644 app/Filament/Widgets/JournalistUkwChart.php diff --git a/app/Filament/Widgets/JournalistMetricsStats.php b/app/Filament/Widgets/JournalistMetricsStats.php deleted file mode 100644 index c499490..0000000 --- a/app/Filament/Widgets/JournalistMetricsStats.php +++ /dev/null @@ -1,43 +0,0 @@ -filters['startDate'] ?? null; - $endDate = $this->filters['endDate'] ?? null; - - $totalJournalists = Journalist::when($startDate, fn ($q) => $q->whereDate('created_at', '>=', $startDate)) - ->when($endDate, fn ($q) => $q->whereDate('created_at', '<=', $endDate)) - ->count(); - - $totalMedia = PartnerMedia::when($startDate, fn ($q) => $q->whereDate('created_at', '>=', $startDate)) - ->when($endDate, fn ($q) => $q->whereDate('created_at', '<=', $endDate)) - ->count(); - - $average = $totalMedia > 0 ? round($totalJournalists / $totalMedia, 1) : 0; - - return [ - Stat::make('Rata-rata Jurnalis / Media', $average) - ->description('Rasio sebaran jurnalis') - ->descriptionIcon(Heroicon::Users) - ->color('primary'), - ]; - } -} diff --git a/app/Filament/Widgets/JournalistUkwChart.php b/app/Filament/Widgets/JournalistUkwChart.php deleted file mode 100644 index d2aa899..0000000 --- a/app/Filament/Widgets/JournalistUkwChart.php +++ /dev/null @@ -1,55 +0,0 @@ -filters['startDate'] ?? null; - $endDate = $this->filters['endDate'] ?? null; - - $certified = Journalist::whereNotNull('ukw_certificate') - ->where('ukw_certificate', '!=', '') - ->when($startDate, fn ($q) => $q->whereDate('created_at', '>=', $startDate)) - ->when($endDate, fn ($q) => $q->whereDate('created_at', '<=', $endDate)) - ->count(); - - $notCertified = Journalist::where(function ($query) { - $query->whereNull('ukw_certificate') - ->orWhere('ukw_certificate', ''); - }) - ->when($startDate, fn ($q) => $q->whereDate('created_at', '>=', $startDate)) - ->when($endDate, fn ($q) => $q->whereDate('created_at', '<=', $endDate)) - ->count(); - - return [ - 'datasets' => [ - [ - 'label' => 'Jumlah Jurnalis', - 'data' => [$certified, $notCertified], - 'backgroundColor' => ['#10B981', '#EF4444'], - ], - ], - 'labels' => ['Sudah Sertifikasi UKW', 'Belum Sertifikasi UKW'], - ]; - } - - protected function getType(): string - { - return 'doughnut'; - } -} diff --git a/app/Filament/Widgets/OverviewStats.php b/app/Filament/Widgets/OverviewStats.php index 4d964db..d12f36e 100644 --- a/app/Filament/Widgets/OverviewStats.php +++ b/app/Filament/Widgets/OverviewStats.php @@ -27,6 +27,16 @@ protected function getStats(): array $startDate = $this->filters['startDate'] ?? null; $endDate = $this->filters['endDate'] ?? null; + $totalJournalists = Journalist::when($startDate, fn ($q) => $q->whereDate('created_at', '>=', $startDate)) + ->when($endDate, fn ($q) => $q->whereDate('created_at', '<=', $endDate)) + ->count(); + + $totalMedia = PartnerMedia::when($startDate, fn ($q) => $q->whereDate('created_at', '>=', $startDate)) + ->when($endDate, fn ($q) => $q->whereDate('created_at', '<=', $endDate)) + ->count(); + + $average = $totalMedia > 0 ? round($totalJournalists / $totalMedia, 1) : 0; + return [ Stat::make('Total Perusahaan', Company::when($startDate, fn ($q) => $q->whereDate('created_at', '>=', $startDate)) ->when($endDate, fn ($q) => $q->whereDate('created_at', '<=', $endDate)) @@ -72,6 +82,11 @@ protected function getStats(): array ->description('Total traffic') ->descriptionIcon(Heroicon::ChartBar) ->color('info'), + + Stat::make('Rata-rata Jurnalis / Media', $average) + ->description('Rasio sebaran jurnalis') + ->descriptionIcon(Heroicon::Users) + ->color('primary'), ]; } } diff --git a/database/seeders/ShieldSeeder.php b/database/seeders/ShieldSeeder.php index 573aa06..e5fcd80 100644 --- a/database/seeders/ShieldSeeder.php +++ b/database/seeders/ShieldSeeder.php @@ -134,12 +134,8 @@ public function run(): void "Replicate:IssueManagement", "Reorder:IssueManagement", - "View:JournalistMetricsStats", - "View:JournalistRegistrationChart", - "View:JournalistUkwChart", - "ViewAny:Location", "View:Location", "Create:Location", @@ -395,12 +391,8 @@ public function run(): void "Replicate:IssueManagement", "Reorder:IssueManagement", - "View:JournalistMetricsStats", - "View:JournalistRegistrationChart", - "View:JournalistUkwChart", - "ViewAny:Location", "View:Location", "Create:Location",