Files
fotospiel-app/app/Filament/Widgets/RevenueTrendWidget.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

56 lines
1.6 KiB
PHP

<?php
namespace App\Filament\Widgets;
use App\Models\PurchaseHistory;
use Filament\Widgets\LineChartWidget;
class RevenueTrendWidget extends LineChartWidget
{
protected static ?int $sort = 1;
protected int|string|array $columnSpan = 'full';
public function getHeading(): ?string
{
return __('admin.widgets.revenue_trend.heading');
}
protected function getData(): array
{
$start = now()->startOfMonth()->subMonths(11);
$months = collect(range(0, 11))->map(fn (int $offset) => $start->copy()->addMonths($offset));
$records = PurchaseHistory::query()
->where('purchased_at', '>=', $start)
->get(['purchased_at', 'price']);
$grouped = $records->groupBy(fn (PurchaseHistory $history) => $history->purchased_at?->format('Y-m'));
$labels = [];
$values = [];
foreach ($months as $month) {
$key = $month->format('Y-m');
$labels[] = $month->translatedFormat('M Y');
$total = $grouped->get($key, collect())->sum(fn (PurchaseHistory $history) => (float) $history->price);
$values[] = round($total, 2);
}
return [
'datasets' => [
[
'label' => __('admin.widgets.revenue_trend.series'),
'data' => $values,
'borderColor' => '#ec4899',
'backgroundColor' => 'rgba(236, 72, 153, 0.2)',
'tension' => 0.4,
'fill' => 'origin',
],
],
'labels' => $labels,
];
}
}