- {{ __('Aktuell sehen Sie hier die aus dem Legacy-System übernommenen Rechnungen. Neue Abrechnungen werden später in dieselbe Finanznavigation integriert.') }} -
-diff --git a/app/Http/Controllers/StripeInvoiceRedirectController.php b/app/Http/Controllers/StripeInvoiceRedirectController.php new file mode 100644 index 00000000..597389f4 --- /dev/null +++ b/app/Http/Controllers/StripeInvoiceRedirectController.php @@ -0,0 +1,44 @@ +user_id === $request->user()->id, 404); + abort_unless(filled($invoice->stripe_invoice_id), 404); + + try { + $stripeInvoice = Cashier::stripe()->invoices->retrieve($invoice->stripe_invoice_id); + $hostedUrl = $stripeInvoice->hosted_invoice_url; + } catch (\Throwable $exception) { + Log::warning('Stripe-Rechnungsansicht nicht erreichbar.', [ + 'invoice_id' => $invoice->id, + 'stripe_invoice_id' => $invoice->stripe_invoice_id, + 'error' => $exception->getMessage(), + ]); + + $hostedUrl = null; + } + + if (! $hostedUrl) { + return redirect() + ->route('me.invoices.index') + ->with('invoice-error', __('Die Stripe-Rechnungsansicht ist gerade nicht erreichbar. Bitte versuchen Sie es später erneut.')); + } + + return redirect()->away($hostedUrl); + } +} diff --git a/resources/views/livewire/customer/invoices.blade.php b/resources/views/livewire/customer/invoices.blade.php index d2c62605..5f839111 100644 --- a/resources/views/livewire/customer/invoices.blade.php +++ b/resources/views/livewire/customer/invoices.blade.php @@ -1,5 +1,7 @@ where('user_id', auth()->id()); + // Neue Rechnungen (STR = Stripe-Spiegelung, MAN = Bestandskreis). + $currentQuery = Invoice::query()->where('user_id', auth()->id()); + $invoices = (clone $baseQuery) ->when(filled($this->search), function ($query): void { $query->where('number', 'like', '%'.$this->search.'%'); @@ -40,6 +45,11 @@ new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Compo ->paginate(100); return [ + 'currentInvoices' => (clone $currentQuery) + ->latest('invoice_date') + ->latest('id') + ->limit(100) + ->get(), 'invoices' => $invoices, 'statusOptions' => (clone $baseQuery) ->whereNotNull('status') @@ -49,10 +59,12 @@ new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Compo ->filter() ->values(), 'stats' => [ - 'count' => (clone $baseQuery)->count(), - 'total_cents' => (int) (clone $baseQuery)->sum('total_cents'), - 'paid_count' => (clone $baseQuery)->whereNotNull('paid_at')->count(), - 'downloadable_count' => (clone $baseQuery)->count(), + 'count' => (clone $baseQuery)->count() + (clone $currentQuery)->count(), + 'total_cents' => (int) (clone $baseQuery)->sum('total_cents') + (int) (clone $currentQuery)->sum('total_cents'), + 'paid_count' => (clone $baseQuery)->whereNotNull('paid_at')->count() + + (clone $currentQuery)->where('status', InvoiceStatus::Paid->value)->count(), + 'downloadable_count' => (clone $baseQuery)->count() + + (clone $currentQuery)->whereNotNull('stripe_invoice_id')->count(), ], ]; } @@ -65,13 +77,12 @@ new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Compo
- {{ __('Ihr Rechnungsarchiv im User Backend. PDFs werden bei Bedarf aus den Archivdaten erzeugt.') }} + {{ __('Aktuelle Rechnungen Ihrer Buchungen sowie das Archiv aus dem Altsystem.') }}
@@ -90,42 +101,117 @@ new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Compo @endif - {{-- ============== HINWEIS-PANEL ============== --}} -- {{ __('Aktuell sehen Sie hier die aus dem Legacy-System übernommenen Rechnungen. Neue Abrechnungen werden später in dieselbe Finanznavigation integriert.') }} -
-