diff --git a/app/Filament/Admin/Pages/Dashboard.php b/app/Filament/Admin/Pages/Dashboard.php new file mode 100644 index 0000000..2059b0a --- /dev/null +++ b/app/Filament/Admin/Pages/Dashboard.php @@ -0,0 +1,15 @@ +heading(__('app.stats.beneficiaries.genders')) + ->query( + fn () => Beneficiary::query() + ->select([ + 'gender', + new Alias(new Count('*'), 'count'), + new Alias(new Min('id'), 'id'), + ]) + ->groupBy('gender') + ) + ->columns([ + TextColumn::make('gender') + ->label(__('app.field.gender')) + ->sortable(), + + TextColumn::make('count') + ->label(Str::ucfirst(__('app.beneficiary.label.plural'))) + ->alignRight() + ->sortable() + ->numeric() + ->shrink(), + ]) + ->defaultSort('count', 'desc'); + } +} diff --git a/app/Filament/Admin/Widgets/BeneficiariesNationalitiesTableStats.php b/app/Filament/Admin/Widgets/BeneficiariesNationalitiesTableStats.php new file mode 100644 index 0000000..2a8814b --- /dev/null +++ b/app/Filament/Admin/Widgets/BeneficiariesNationalitiesTableStats.php @@ -0,0 +1,49 @@ +heading(__('app.stats.beneficiaries.nationalities')) + ->query( + fn () => Beneficiary::query() + ->join('countries', 'beneficiaries.nationality_id', 'countries.id') + ->select([ + new Alias('countries.name', 'country_name'), + new Alias(new Count('*'), 'count'), + new Alias(new Min('beneficiaries.id'), 'id'), + ]) + ->groupBy('country_name') + ) + ->columns([ + TextColumn::make('country_name') + ->label(__('app.field.country')) + ->wrap(), + + TextColumn::make('count') + ->label(Str::ucfirst(__('app.beneficiary.label.plural'))) + ->alignRight() + ->sortable() + ->numeric() + ->shrink(), + ]) + ->defaultSort('count', 'desc') + ->defaultPaginationPageOption(5); + } +} diff --git a/app/Filament/Admin/Widgets/RequestsStatusTableStats.php b/app/Filament/Admin/Widgets/RequestsStatusTableStats.php new file mode 100644 index 0000000..1f7bf6d --- /dev/null +++ b/app/Filament/Admin/Widgets/RequestsStatusTableStats.php @@ -0,0 +1,47 @@ +heading(__('app.stats.requests.status')) + ->query( + fn () => Request::query() + ->select([ + 'status', + new Alias(new Count('*'), 'count'), + new Alias(new Min('id'), 'id'), + ]) + ->groupBy('status') + ) + ->columns([ + TextColumn::make('status') + ->label(__('app.field.status')) + ->sortable(), + + TextColumn::make('count') + ->label(Str::ucfirst(__('app.request.label.plural'))) + ->alignRight() + ->sortable() + ->numeric() + ->shrink(), + ]) + ->defaultSort('count', 'desc'); + } +} diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index ed5d16d..ad734f4 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -5,13 +5,13 @@ namespace App\Providers\Filament; use App\Filament\Admin\Pages\Auth\Login; +use App\Filament\Admin\Pages\Dashboard; use App\Http\Middleware\EnsureUserIsActive; use App\Http\Middleware\SetLocale; use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\AuthenticateSession; use Filament\Http\Middleware\DisableBladeIconComponents; use Filament\Http\Middleware\DispatchServingFilamentEvent; -use Filament\Pages\Dashboard; use Filament\Panel; use Filament\PanelProvider; use Filament\SpatieLaravelTranslatablePlugin; diff --git a/lang/en/app.php b/lang/en/app.php index 8ab6ce5..994aa11 100644 --- a/lang/en/app.php +++ b/lang/en/app.php @@ -388,6 +388,9 @@ 'residencies' => 'Total beneficiaries per country of residence', 'genders' => 'Total beneficiaries per gender', ], + 'requests' => [ + 'status' => 'Total requests per status', + ], ], 'request' => [ 'label' => [