diff --git a/app/Filament/Pages/Dashboard.php b/app/Filament/Pages/Dashboard.php index 90ee825..2432824 100644 --- a/app/Filament/Pages/Dashboard.php +++ b/app/Filament/Pages/Dashboard.php @@ -4,7 +4,10 @@ use App\Filament\Widgets\Charts\BudgetRealizationChart; use App\Filament\Widgets\Charts\CooperationStatusChart; +use App\Filament\Widgets\Charts\IssueLocationChart; +use App\Filament\Widgets\Charts\IssueSentimentByDepartmentChart; use App\Filament\Widgets\Charts\PopularNewsChart; +use App\Filament\Widgets\Charts\SentimentTrendChart; use App\Filament\Widgets\Stats\OverviewStats; use BezhanSalleh\FilamentShield\Traits\HasPageShield; use Filament\Pages\Dashboard as BaseDashboard; @@ -28,6 +31,9 @@ public function getWidgets(): array OverviewStats::class, BudgetRealizationChart::class, PopularNewsChart::class, + SentimentTrendChart::class, + IssueSentimentByDepartmentChart::class, + IssueLocationChart::class, CooperationStatusChart::class, ]; } diff --git a/app/Filament/Widgets/Stats/OverviewStats.php b/app/Filament/Widgets/Stats/OverviewStats.php index aca5527..752bd3c 100644 --- a/app/Filament/Widgets/Stats/OverviewStats.php +++ b/app/Filament/Widgets/Stats/OverviewStats.php @@ -13,6 +13,7 @@ use App\Models\IssueManagement; use App\Models\Journalist; use App\Models\Location; +use App\Models\MediaMonitoring; use App\Models\News; use App\Models\PartnerMedia; use App\Models\Theme; @@ -48,6 +49,10 @@ protected function getStats(): array return $this->getContentAdminStats(); } + if ($user && $user->hasRole(RoleEnum::ADMIN_MONITORING->value)) { + return $this->getMonitoringStats(); + } + $totalJournalists = Journalist::count(); $totalMedia = PartnerMedia::count(); $average = $totalMedia > 0 ? round($totalJournalists / $totalMedia, 1) : 0; @@ -228,4 +233,29 @@ private function getContentAdminStats(): array ->color('warning'), ]; } + + private function getMonitoringStats(): array + { + return [ + Stat::make('Total Isu (Masalah)', IssueManagement::count()) + ->description('Manajemen Isu') + ->descriptionIcon('heroicon-o-exclamation-circle') + ->color('primary'), + + Stat::make('Isu Kritis / Negatif', IssueManagement::whereIn('issue', [IssueSentiment::NEGATIVE, IssueSentiment::CRISIS])->count()) + ->description('Perhatian Khusus') + ->descriptionIcon('heroicon-o-exclamation-triangle') + ->color('danger'), + + Stat::make('Total Media Monitoring', MediaMonitoring::count()) + ->description('Berita terpantau') + ->descriptionIcon('heroicon-o-globe-alt') + ->color($this->getRandomColor()), + + Stat::make('Total Lokus', Location::active()->count()) + ->description('Lokus aktif') + ->descriptionIcon('heroicon-o-map-pin') + ->color($this->getRandomColor()), + ]; + } } diff --git a/database/seeders/ShieldSeeder.php b/database/seeders/ShieldSeeder.php index 72dd67e..ed236f6 100644 --- a/database/seeders/ShieldSeeder.php +++ b/database/seeders/ShieldSeeder.php @@ -530,8 +530,6 @@ public function run(): void "name": "Admin Monitoring", "guard_name": "web", "permissions": [ - "View:Analytic", - "ViewAny:Classification", "View:Classification", "Create:Classification", @@ -546,6 +544,8 @@ public function run(): void "View:Dashboard", + "View:IssueLocationChart", + "ViewAny:IssueManagement", "View:IssueManagement", "Create:IssueManagement", @@ -558,6 +558,8 @@ public function run(): void "Replicate:IssueManagement", "Reorder:IssueManagement", + "View:IssueSentimentByDepartmentChart", + "ViewAny:Location", "View:Location", "Create:Location", @@ -582,6 +584,10 @@ public function run(): void "Replicate:MediaMonitoring", "Reorder:MediaMonitoring", + "View:OverviewStats", + + "View:SentimentTrendChart", + "ViewAny:SubClassification", "View:SubClassification", "Create:SubClassification",