Files
fotospiel-app/app/Filament/Widgets/TopTenantsByRevenue.php
Codex Agent a949c8d3af - Wired the checkout wizard for Google “comfort login”: added Socialite controller + dependency, new Google env
hooks in config/services.php/.env.example, and updated wizard steps/controllers to store session payloads,
attach packages, and surface localized success/error states.
- Retooled payment handling for both Stripe and PayPal, adding richer status management in CheckoutController/
PayPalController, fallback flows in the wizard’s PaymentStep.tsx, and fresh feature tests for intent
creation, webhooks, and the wizard CTA.
- Introduced a consent-aware Matomo analytics stack: new consent context, cookie-banner UI, useAnalytics/
useCtaExperiment hooks, and MatomoTracker component, then instrumented marketing pages (Home, Packages,
Checkout) with localized copy and experiment tracking.
- Polished package presentation across marketing UIs by centralizing formatting in PresentsPackages, surfacing
localized description tables/placeholders, tuning badges/layouts, and syncing guest/marketing translations.
- Expanded docs & reference material (docs/prp/*, TODOs, public gallery overview) and added a Playwright smoke
test for the hero CTA while reconciling outstanding checklist items.
2025-10-19 11:41:03 +02:00

54 lines
1.6 KiB
PHP

<?php
namespace App\Filament\Widgets;
use App\Models\Tenant;
use Filament\Tables;
use Filament\Widgets\TableWidget as BaseWidget;
class TopTenantsByRevenue extends BaseWidget
{
protected static ?string $heading = null;
protected static ?int $sort = 2;
protected ?string $pollingInterval = '120s';
protected function getHeading(): ?string
{
return __('admin.widgets.top_tenants_by_revenue.heading');
}
public function table(Tables\Table $table): Tables\Table
{
return $table
->query(
Tenant::query()
->withSum('purchases', 'price')
->withCount('purchases')
->orderByDesc('purchases_sum_price')
->limit(10)
)
->columns([
Tables\Columns\TextColumn::make('name')
->label(__('admin.common.tenant'))
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('purchases_sum_price')
->label(__('admin.widgets.top_tenants_by_revenue.total'))
->money('EUR')
->sortable(),
Tables\Columns\TextColumn::make('purchases_count')
->label(__('admin.widgets.top_tenants_by_revenue.count'))
->badge()
->sortable(),
Tables\Columns\TextColumn::make('event_credits_balance')
->label(__('admin.common.credits'))
->badge()
->sortable(),
])
->paginated(false);
}
}