From c4ccc751e9cea159ba6a8fffba545c51f2b0d9af Mon Sep 17 00:00:00 2001 From: Kevin Adametz Date: Tue, 7 Jul 2026 13:53:05 +0000 Subject: [PATCH] =?UTF-8?q?Rechnungs-Seite:=20Archiv-Filter=20entfernt,=20?= =?UTF-8?q?Altsystem-Archiv=20nur=20f=C3=BCr=20Bestandskunden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QA-Befund 07.07.: Die Filter-/Suchzeile unter den aktuellen Rechnungen entfällt; das Rechnungsarchiv (Altsystem) erscheint nur noch, wenn der User dort tatsächlich importierte Rechnungen hat — Neukunden sehen es nicht mehr. Seitenbeschreibung passt sich entsprechend an. Co-Authored-By: Claude Fable 5 --- .../livewire/customer/invoices.blade.php | 76 +++---------------- tests/Feature/CustomerPortalTest.php | 27 +++++++ 2 files changed, 38 insertions(+), 65 deletions(-) diff --git a/resources/views/livewire/customer/invoices.blade.php b/resources/views/livewire/customer/invoices.blade.php index 5f839111..54955976 100644 --- a/resources/views/livewire/customer/invoices.blade.php +++ b/resources/views/livewire/customer/invoices.blade.php @@ -12,22 +12,8 @@ new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Compo { use WithPagination; - public string $search = ''; - - public string $statusFilter = 'all'; - public ?string $notification = null; - public function updatedSearch(): void - { - $this->resetPage(); - } - - public function updatedStatusFilter(): void - { - $this->resetPage(); - } - public function with(): array { $baseQuery = LegacyInvoice::query() @@ -36,11 +22,9 @@ new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Compo // Neue Rechnungen (STR = Stripe-Spiegelung, MAN = Bestandskreis). $currentQuery = Invoice::query()->where('user_id', auth()->id()); + // Das Altsystem-Archiv erscheint nur, wenn der User dort überhaupt + // Rechnungen hat (QA-Befund 07.07.) — Neukunden sehen es nie. $invoices = (clone $baseQuery) - ->when(filled($this->search), function ($query): void { - $query->where('number', 'like', '%'.$this->search.'%'); - }) - ->when($this->statusFilter !== 'all', fn ($query) => $query->where('status', $this->statusFilter)) ->latest('invoice_date') ->paginate(100); @@ -51,13 +35,6 @@ new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Compo ->limit(100) ->get(), 'invoices' => $invoices, - 'statusOptions' => (clone $baseQuery) - ->whereNotNull('status') - ->distinct() - ->orderBy('status') - ->pluck('status') - ->filter() - ->values(), 'stats' => [ 'count' => (clone $baseQuery)->count() + (clone $currentQuery)->count(), 'total_cents' => (int) (clone $baseQuery)->sum('total_cents') + (int) (clone $currentQuery)->sum('total_cents'), @@ -82,7 +59,9 @@ new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Compo {{ __('Rechnungen') }}

- {{ __('Aktuelle Rechnungen Ihrer Buchungen sowie das Archiv aus dem Altsystem.') }} + {{ $invoices->total() > 0 + ? __('Aktuelle Rechnungen Ihrer Buchungen sowie das Archiv aus dem Altsystem.') + : __('Aktuelle Rechnungen Ihrer Buchungen.') }}

@@ -208,23 +187,9 @@ new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Compo - {{-- ============== FILTER-PANEL ============== --}} -
-
- {{ __('Filter & Suche (Archiv)') }} -
-
- - - - @foreach ($statusOptions as $status) - - @endforeach - -
-
- - {{-- ============== TABELLE ============== --}} + {{-- ============== RECHNUNGSARCHIV (ALTSYSTEM) ============== + Nur für Bestandskunden mit importierten Alt-Rechnungen. --}} + @if ($invoices->total() > 0)
{{ __('Rechnungsarchiv (Altsystem)') }} @@ -243,7 +208,7 @@ new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Compo {{ __('PDF') }} - @forelse ($invoices as $invoice) + @foreach ($invoices as $invoice) @@ -287,28 +252,9 @@ new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Compo - @empty - - -
-
- -
-
- {{ __('Keine Rechnungen gefunden') }} -
-

- {{ __('Sobald Rechnungen aus dem Archiv oder aus neuen Buchungen vorhanden sind, erscheinen sie hier.') }} -

- - {{ __('Rechnungsadresse prüfen') }} - -
-
-
- @endforelse + @endforeach
+ @endif diff --git a/tests/Feature/CustomerPortalTest.php b/tests/Feature/CustomerPortalTest.php index 11387fe1..02be155a 100644 --- a/tests/Feature/CustomerPortalTest.php +++ b/tests/Feature/CustomerPortalTest.php @@ -98,6 +98,33 @@ test('customer sees only own legacy invoices', function () { ->assertSee('99,00 €'); }); +test('the legacy invoice archive is hidden for customers without archived invoices', function () { + /** @var TestCase $this */ + $customer = User::factory()->create(['is_active' => true]); + + // Archiv eines anderen Users darf die Anzeige nicht auslösen. + LegacyInvoice::query()->create([ + 'legacy_portal' => 'presseecho', + 'legacy_id' => 1003, + 'user_id' => User::factory()->create(['is_active' => true])->id, + 'legacy_user_id' => 503, + 'number' => 'RE-FREMD-001', + 'amount_cents' => 9900, + 'total_cents' => 9900, + 'status' => 'paid', + 'invoice_date' => now()->subMonth(), + 'paid_at' => now()->subMonth(), + 'imported_at' => now(), + ]); + + $this->actingAs($customer); + + LivewireVolt::test('customer.invoices') + ->assertSee('Aktuelle Rechnungen') + ->assertDontSee('Rechnungsarchiv (Altsystem)') + ->assertDontSee('Filter & Suche'); +}); + test('current STR and MAN invoices are listed with a stripe link where available', function () { /** @var TestCase $this */ $customer = User::factory()->create(['is_active' => true]);