user(); $subscription = $user->subscription(); $currentPlan = $user->currentPlan(); $currentInterval = null; if ($currentPlan && $subscription) { $currentInterval = $subscription->stripe_price === $currentPlan->stripe_price_id_yearly ? 'yearly' : 'monthly'; } return [ // Rückkehr aus dem Stripe-Checkout (?checkout=erfolg|abbruch) // bzw. Hinweis aus den Checkout-Guards (Session-Flash). 'checkoutResult' => request()->query('checkout'), 'checkoutNotice' => session('checkout-notice'), 'plans' => Plan::query()->active()->get(), 'currentPlan' => $currentPlan, 'currentInterval' => $currentInterval, 'subscription' => $subscription, // Bestandstarife: laufende Legacy-Vereinbarungen (MAN-Kreis, // unbegrenzte PMs — Entscheidung 12.06.2026). 'legacyOptions' => $user->userPaymentOptions() ->whereIn('status', [ UserPaymentOptionStatus::Active->value, UserPaymentOptionStatus::Grandfathered->value, ]) ->orderBy('current_period_end') ->get(), 'openPurchases' => $user->singlePurchases() ->grantingSubmission() ->orderBy('paid_at') ->get(), 'consumedPurchases' => $user->singlePurchases() ->where('status', SinglePurchaseStatus::Consumed->value) ->with('pressRelease') ->latest('consumed_at') ->limit(10) ->get(), 'quotaRemaining' => $user->pressReleaseQuotaRemaining(), 'quotaTotal' => $user->pressReleaseQuotaTotal(), 'singlePmPrice' => $this->formatEuro((int) config('billing.single_pm_price_cents')), 'singlePmAvailable' => (bool) config('billing.single_pm_stripe_price_id'), ]; } }; ?>
{{-- ============== CHECKOUT-RÜCKMELDUNG ============== --}} @if ($checkoutResult === 'erfolg')
{{ __('Vielen Dank für Ihre Buchung!') }} {{ __('Die Zahlung wird von Stripe bestätigt — die Buchung erscheint hier in wenigen Augenblicken. Die Rechnung finden Sie anschließend unter Rechnungen.') }}
@elseif ($checkoutResult === 'abbruch')
{{ __('Der Bezahlvorgang wurde abgebrochen. Es wurde nichts gebucht — Sie können den Checkout jederzeit erneut starten.') }}
@endif @if ($checkoutNotice)
{{ $checkoutNotice }}
@endif {{-- ============== PAGE HEADER ============== --}}
{{ __('User Backend') }} {{ __('Mein Bereich · Finanzen') }}

{{ __('Buchungen & Add-ons') }}

{{ __('Tarif wählen oder einzelne Pressemitteilung buchen. Alle Preise sind Nettopreise zzgl. USt.; die Abrechnung erfolgt sicher über Stripe.') }}

{{ __('Rechnungen') }}
{{-- ============== AKTUELLER TARIF ============== --}}
{{ __('Aktueller Tarif') }} @if ($currentPlan) {{ $currentPlan->name }} @elseif ($legacyOptions->isNotEmpty()) {{ __('Bestandstarif') }} @else {{ __('Kein Abo') }} @endif
@if ($currentPlan)
{{ $currentInterval === 'yearly' ? $this->formatEuro($currentPlan->yearly_price_cents).' / '.__('Jahr') : $this->formatEuro($currentPlan->monthly_price_cents).' / '.__('Monat') }} {{ __('netto') }}

{{ __(':quota Pressemitteilungen pro Monat', ['quota' => $currentPlan->press_release_quota]) }} @if ($currentPlan->daily_limit) · {{ __('max. :limit Veröffentlichungen pro Tag', ['limit' => $currentPlan->daily_limit]) }} @endif

@if ($subscription?->onGracePeriod())

{{ __('Gekündigt — läuft am :date aus.', ['date' => $subscription->ends_at?->format('d.m.Y')]) }}

@endif @elseif ($legacyOptions->isNotEmpty()) @foreach ($legacyOptions as $option)
{{ data_get($option->legacy_conditions, 'name') ?? $option->paymentOption?->article_number ?? __('Bestehende Vereinbarung') }}

{{ __('Unbegrenzte Pressemitteilungen (Bestandsschutz).') }} @if ($option->current_period_end) {{ __('Nächste Rechnung am :date.', ['date' => $option->current_period_end->format('d.m.Y')]) }} @endif

@endforeach

{{ __('Ihre bisherigen Konditionen gelten unverändert weiter; die Abrechnung erfolgt wie gewohnt per Rechnung.') }}

@elseif ($openPurchases->isNotEmpty())
{{ trans_choice(':count Einzel-Pressemitteilung verfügbar|:count Einzel-Pressemitteilungen verfügbar', $openPurchases->count(), ['count' => $openPurchases->count()]) }}

{{ __('Jeder Kauf berechtigt zu genau einer Veröffentlichung — eingelöst wird er erst, wenn die Pressemitteilung live geht.') }}

@else
{{ __('Noch kein aktiver Tarif') }}

{{ __('Wählen Sie unten einen Tarif oder buchen Sie eine einzelne Pressemitteilung ohne Abo.') }}

@endif
{{ __('PM-Kontingent diesen Monat') }}
@if (is_null($quotaRemaining)) {{ __('Unbegrenzt') }} @else {{ $quotaRemaining }} / {{ $quotaTotal }} @endif
{{ __('Wird erst bei Veröffentlichung verbraucht.') }}
@if ($subscription) {{ __('Abo verwalten') }}

{{ __('Zahlungsmethode, Rechnungen und Kündigung — sicher über das Stripe-Kundenportal.') }}

@endif
{{-- ============== TARIF-RASTER ============== --}}
{{ __('Tarife') }}

{{ __('Den passenden Tarif wählen') }}

{{ __('Monatlich kündbar. Im Jahrestarif sind 2 Monate gratis — Sie zahlen 10 von 12 Monaten.') }}

@foreach ($plans as $plan) @php($isCurrent = $currentPlan && $plan->is($currentPlan))
$isCurrent]) wire:key="plan-{{ $plan->slug }}">

{{ $plan->name }}

@if ($isCurrent) {{ __('Aktuell') }} @endif
{{ $this->formatEuro($plan->monthly_price_cents) }} / {{ __('Monat') }}
{{ $this->formatEuro($plan->yearly_price_cents) }} / {{ __('Jahr') }}
{{ __('netto zzgl. USt.') }}
  • {{ __(':quota Pressemitteilungen pro Monat', ['quota' => $plan->press_release_quota]) }}
  • @if ($plan->daily_limit) {{ __('max. :limit Veröffentlichungen pro Tag', ['limit' => $plan->daily_limit]) }} @else {{ __('Ohne Tageslimit') }} @endif
  • {{ __('KI-Prüfung & Veröffentlichung inklusive') }}
@if ($subscription) {{ $isCurrent ? __('Ihr aktueller Tarif') : __('Wechsel über „Abo verwalten"') }} @else
{{ __('Monatlich buchen') }}
{{ __('Jährlich buchen') }}
@endif
@endforeach

{{ __('Mehr als 60 Pressemitteilungen pro Monat, mehrere Teams oder Sonderkonditionen? Enterprise-Konditionen erhalten Sie auf Anfrage über den Support.') }}

{{-- ============== EINZEL-PM (OHNE ABO) ============== --}}

{{ __('Einzel-Pressemitteilung — ohne Abo') }}

{{ __('Genau eine Veröffentlichung inklusive KI-Prüfung. Eingelöst wird der Kauf erst, wenn die Pressemitteilung live geht — Ablehnungen kosten nichts.') }} @if ($openPurchases->isNotEmpty()) {{ trans_choice('Aktuell :count offener Kauf.|Aktuell :count offene Käufe.', $openPurchases->count(), ['count' => $openPurchases->count()]) }} @endif

{{ $singlePmPrice }}
{{ __('netto zzgl. USt.') }}
{{ __('Jetzt buchen') }}
{{-- ============== AKTIVE BUCHUNGEN / VERLAUF ============== --}}
{{ __('Aktive Buchungen') }} {{ __('läuft aktuell') }}
@if ($subscription || $legacyOptions->isNotEmpty() || $openPurchases->isNotEmpty())
@if ($subscription && $currentPlan)
{{ __('Abo: :plan', ['plan' => $currentPlan->name]) }}
{{ $currentInterval === 'yearly' ? __('jährliche Abrechnung') : __('monatliche Abrechnung') }} · Stripe
{{ __('aktiv') }}
@endif @foreach ($legacyOptions as $option)
{{ data_get($option->legacy_conditions, 'name') ?? $option->paymentOption?->article_number ?? __('Bestehende Vereinbarung') }}
{{ __('Bestandstarif · Abrechnung per Rechnung') }} @if ($option->current_period_end) · {{ __('nächste Rechnung :date', ['date' => $option->current_period_end->format('d.m.Y')]) }} @endif
{{ __('aktiv') }}
@endforeach @foreach ($openPurchases as $purchase)
{{ $purchase->type->label() }}
{{ __('gekauft am :date', ['date' => $purchase->paid_at?->format('d.m.Y')]) }} · {{ $this->formatEuro($purchase->price_cents) }} {{ __('netto') }}
{{ __('einlösbar') }}
@endforeach
@else
{{ __('Noch keine aktiven Buchungen') }}

{{ __('Ihr Abo, Bestandstarife und offene Einzelkäufe erscheinen hier mit Laufzeit und Abrechnungsart.') }}

@endif
{{ __('Verlauf') }} {{ __('eingelöste Käufe') }}
@if ($consumedPurchases->isNotEmpty())
@foreach ($consumedPurchases as $purchase)
{{ $purchase->pressRelease?->title ?? $purchase->type->label() }}
{{ __('eingelöst am :date', ['date' => $purchase->consumed_at?->format('d.m.Y')]) }}
{{ __('eingelöst') }}
@endforeach
@else
{{ __('Noch kein Buchungsverlauf') }}

{{ __('Eingelöste Einzelkäufe erscheinen hier mit der zugehörigen Pressemitteilung.') }}

@endif