diff --git a/app/Models/Contact.php b/app/Models/Contact.php index a4294034..1493fa87 100644 --- a/app/Models/Contact.php +++ b/app/Models/Contact.php @@ -63,6 +63,17 @@ class Contact extends Model return $this->belongsTo(Company::class); } + /** + * Anzeigename eines Kontakts (Vor- + Nachname), mit Fallback, wenn beides + * leer ist. Single Source of Truth für die Listen-/Detail-Ansichten. + */ + public function displayName(): string + { + $name = trim(($this->first_name ?? '').' '.($this->last_name ?? '')); + + return $name !== '' ? $name : __('Kontakt ohne Name'); + } + public function pressReleases(): BelongsToMany { return $this->belongsToMany(PressRelease::class, 'press_release_contact'); diff --git a/resources/views/livewire/admin/companies/show.blade.php b/resources/views/livewire/admin/companies/show.blade.php index 9c5c1c7b..ef4ed68f 100644 --- a/resources/views/livewire/admin/companies/show.blade.php +++ b/resources/views/livewire/admin/companies/show.blade.php @@ -434,7 +434,7 @@ new #[Layout('components.layouts.app'), Title('Firma anzeigen')] class extends C
- {{ trim(($contact->first_name ?? '').' '.($contact->last_name ?? '')) ?: __('Kontakt ohne Name') }} + {{ $contact->displayName() }} {{ $contact->portal?->label() ?? __('Unbekannt') }}
diff --git a/resources/views/livewire/admin/press-releases/show.blade.php b/resources/views/livewire/admin/press-releases/show.blade.php index ca26e667..46b19083 100644 --- a/resources/views/livewire/admin/press-releases/show.blade.php +++ b/resources/views/livewire/admin/press-releases/show.blade.php @@ -339,7 +339,7 @@ new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends @forelse ($contacts as $contact)
- {{ trim(($contact->first_name ?? '').' '.($contact->last_name ?? '')) ?: __('Kontakt ohne Name') }} + {{ $contact->displayName() }}
{{ $contact->responsibility ?: __('Keine Rolle hinterlegt') }} diff --git a/resources/views/livewire/admin/users.blade.php b/resources/views/livewire/admin/users.blade.php index 11c1f222..12ba72ef 100644 --- a/resources/views/livewire/admin/users.blade.php +++ b/resources/views/livewire/admin/users.blade.php @@ -865,7 +865,7 @@ new #[Layout('components.layouts.app'), Title('Benutzer')] class extends Compone
- {{ trim(($contact->first_name ?? '').' '.($contact->last_name ?? '')) ?: __('Kontakt ohne Name') }} + {{ $contact->displayName() }} {{ $contact->responsibility ?? __('Keine Rolle hinterlegt') }} diff --git a/resources/views/livewire/admin/users/show.blade.php b/resources/views/livewire/admin/users/show.blade.php index 8bfead6c..3c5a4731 100644 --- a/resources/views/livewire/admin/users/show.blade.php +++ b/resources/views/livewire/admin/users/show.blade.php @@ -203,7 +203,7 @@ new #[Layout('components.layouts.app'), Title('Benutzer anzeigen')] class extend
- {{ trim(($contact->first_name ?? '').' '.($contact->last_name ?? '')) ?: __('Kontakt ohne Name') }} + {{ $contact->displayName() }}
{{ $contact->responsibility ?? __('Keine Rolle hinterlegt') }} diff --git a/resources/views/livewire/customer/press-kits/show.blade.php b/resources/views/livewire/customer/press-kits/show.blade.php index d6f24bec..bea80360 100644 --- a/resources/views/livewire/customer/press-kits/show.blade.php +++ b/resources/views/livewire/customer/press-kits/show.blade.php @@ -584,7 +584,7 @@ new #[Layout('components.layouts.app'), Title('Firma')] class extends Component
- {{ trim(($contact->first_name ?? '').' '.($contact->last_name ?? '')) ?: __('Kontakt ohne Name') }} + {{ $contact->displayName() }}
{{ $contact->responsibility ?: __('Keine Rolle hinterlegt') }} diff --git a/resources/views/livewire/customer/press-releases/show.blade.php b/resources/views/livewire/customer/press-releases/show.blade.php index 1cbd5da6..7a356508 100644 --- a/resources/views/livewire/customer/press-releases/show.blade.php +++ b/resources/views/livewire/customer/press-releases/show.blade.php @@ -611,7 +611,7 @@ new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends @forelse ($contacts as $contact)
- {{ trim(($contact->first_name ?? '').' '.($contact->last_name ?? '')) ?: __('Kontakt ohne Name') }} + {{ $contact->displayName() }}
{{ $contact->responsibility ?: __('Keine Rolle hinterlegt') }} diff --git a/tests/Feature/ContactDisplayNameTest.php b/tests/Feature/ContactDisplayNameTest.php new file mode 100644 index 00000000..44d226de --- /dev/null +++ b/tests/Feature/ContactDisplayNameTest.php @@ -0,0 +1,21 @@ +make(['first_name' => 'Erika', 'last_name' => 'Mustermann']); + + expect($contact->displayName())->toBe('Erika Mustermann'); +}); + +test('displayName trims a missing part', function () { + $contact = Contact::factory()->make(['first_name' => null, 'last_name' => 'Mustermann']); + + expect($contact->displayName())->toBe('Mustermann'); +}); + +test('displayName falls back when both names are empty', function () { + $contact = Contact::factory()->make(['first_name' => null, 'last_name' => null]); + + expect($contact->displayName())->toBe(__('Kontakt ohne Name')); +});