PM-Editor: Ablehnungsbegründung direkt auf der Bearbeiten-Seite anzeigen

Bei abgelehnten Pressemitteilungen stand die Begründung bisher nur auf
der Detailseite. Der Editor zeigt jetzt dasselbe Hinweis-Panel (Begründung
+ Ablehnungsdatum) über der Schreibfläche, damit der Kunde beim
Überarbeiten sieht, was zu ändern ist.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-07 14:09:42 +00:00
parent c040f394e3
commit fcfbbd4918
2 changed files with 70 additions and 0 deletions

View file

@ -370,7 +370,16 @@ new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] cl
$pressRelease = $this->getMyPR()->load('images');
$cover = app(PressReleaseCoverImage::class);
// Bei abgelehnten PMs die Begründung direkt im Editor zeigen
// (QA-Befund 07.07.), analog zur Detailseite.
$latestRejection = null;
if ($pressRelease->status->value === 'rejected') {
$latestRejection = $pressRelease->statusLogs
->firstWhere(fn ($log) => $log->to_status?->value === 'rejected');
}
return [
'latestRejection' => $latestRejection,
'companyOptions' => $companyOptions,
'categories' => $categories,
'selectedCompany' => $selectedCompany,
@ -444,6 +453,33 @@ new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] cl
</div>
</header>
{{-- ============== REJECTION-HINWEIS ============== --}}
@if ($currentStatus === 'rejected' && $latestRejection)
<article class="panel" style="border-color:var(--color-err); border-left-width:3px;">
<div class="panel-head">
<span class="section-eyebrow">{{ __('Diese Pressemitteilung wurde abgelehnt') }}</span>
<span class="badge err dot">{{ __('Handlung erforderlich') }}</span>
</div>
<div class="p-5 flex items-start gap-3">
<div class="w-9 h-9 rounded-[5px] flex items-center justify-center flex-shrink-0
bg-[color:var(--color-err-soft)] border border-[color:var(--color-err)]/30 text-[color:var(--color-loss)]">
<flux:icon.exclamation-triangle class="size-[18px]" />
</div>
<div class="flex-1 text-[13px] text-[color:var(--color-ink-2)]">
@if ($latestRejection->reason)
<strong class="text-[color:var(--color-ink)] font-semibold">{{ __('Begründung') }}:</strong>
<span class="block mt-1 whitespace-pre-line">{{ $latestRejection->reason }}</span>
@else
{{ __('Bitte überarbeiten Sie den Inhalt und reichen Sie die Pressemitteilung erneut ein.') }}
@endif
<span class="mt-2 block text-[11.5px] text-[color:var(--color-ink-3)]">
{{ __('Abgelehnt am') }} {{ $latestRejection->created_at->format('d.m.Y H:i') }}
</span>
</div>
</div>
</article>
@endif
{{-- ============== 2-COLUMN GRID ============== --}}
<div class="grid gap-6 pr-editor-layout">

View file

@ -6,6 +6,7 @@ use App\Models\Category;
use App\Models\Company;
use App\Models\Contact;
use App\Models\PressRelease;
use App\Models\PressReleaseStatusLog;
use App\Models\User;
use Database\Seeders\RolesAndPermissionsSeeder;
use Illuminate\Database\Eloquent\Factories\Sequence;
@ -274,6 +275,39 @@ test('foreign press release returns 403 on mount', function () {
->assertNotFound();
});
test('editor shows the rejection reason for a rejected press release', function () {
/** @var TestCase $this */
['customer' => $customer, 'pr' => $pr] = makeCustomerWithPressRelease([
'status' => 'rejected',
]);
PressReleaseStatusLog::query()->create([
'press_release_id' => $pr->id,
'from_status' => 'review',
'to_status' => 'rejected',
'reason' => 'Werbliche Sprache, bitte überarbeiten.',
'source' => 'admin',
'created_at' => now(),
]);
$this->actingAs($customer);
LivewireVolt::test('customer.press-releases.edit', ['id' => $pr->id])
->assertSee('Diese Pressemitteilung wurde abgelehnt')
->assertSee('Werbliche Sprache, bitte überarbeiten.')
->assertSee('Abgelehnt am');
});
test('editor shows no rejection panel for drafts', function () {
/** @var TestCase $this */
['customer' => $customer, 'pr' => $pr] = makeCustomerWithPressRelease();
$this->actingAs($customer);
LivewireVolt::test('customer.press-releases.edit', ['id' => $pr->id])
->assertDontSee('Diese Pressemitteilung wurde abgelehnt');
});
test('addTag and removeTag work in edit form', function () {
/** @var TestCase $this */
['customer' => $customer, 'pr' => $pr] = makeCustomerWithPressRelease([