presseportale/resources/views/emails/billing/manual-invoice-issued.blade.php
Kevin Adametz a5bf33109e
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run
billing: Rechnungsversand — PDF im Anhang der Zahlungsmail, optionale Rechnungs-E-Mail, Stripe-Rechnungs-PDF direkt aus dem Kundenbereich
Kundenwunsch 06.10.2026: Ein Kunde kam über die Stripe-Rechnungsseite nicht
an seine Rechnung und fragte nach Belegen und einer Rechnungs-E-Mail.

- Profil ▸ Rechnungsadresse ▸ Rechnungsversand: Schalter „Rechnungs-PDF an
  die Konto-E-Mail" (Standard an), optionale „E-Mail für Rechnungen" mit
  Schalter „Rechnungen als PDF an diese Adresse senden" (Standard an).
  Neue Spalten an billing_addresses (klein, ohne FULLTEXT).
- InvoiceDelivery entscheidet Empfänger und Anhang; gleiche Adresse wie das
  Konto ergibt eine Mail mit PDF.
- Zahlungsbestätigung (STR) und Bestandskunden-Rechnung/-Erinnerung (MAN)
  folgen der Einstellung; die Fassung an die Rechnungs-E-Mail nennt das
  Konto, ohne Blindkopie und ohne Login-Button.
- StripeInvoicePdf holt das Stripe-PDF einmal und legt es lokal ab
  (storage/app/private/invoices/stripe); Mailversand wiederholt bei
  Stripe-Ausfall (5 Versuche).
- Rechnungsseite: „PDF öffnen" aus pressekonto, „Beleg bei Stripe" für den
  Zahlungsbeleg auf der Stripe-Seite.

Suite 2.340 grün, einer übersprungen; Larastan und Pint ohne Meldung.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 14:47:49 +00:00

112 lines
4.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@php
$formatCents = fn (int $cents): string => number_format($cents / 100, 2, ',', '.')
.' '.($invoice->currency === 'EUR' ? '€' : $invoice->currency);
$dueDate = $invoice->due_date?->format('d.m.Y');
$title = $isReminder ? 'Zahlungserinnerung zu Ihrer Rechnung' : 'Ihre Rechnung für den Bestandsschutz';
$preheader = $isReminder
? 'Für die Rechnung '.$invoice->number.' liegt uns noch kein Zahlungseingang vor.'
: 'Rechnung '.$invoice->number.($attachPdf ? ' im Anhang' : ' im Konto').' — bitte bis zum '.$dueDate.' überweisen.';
@endphp
<x-emails.layout :title="$title" :preheader="$preheader">
@if ($forInvoiceRecipient)
<p>Guten Tag,</p>
<p>
diese Rechnung betrifft das Konto von {{ $user->name }} ({{ $user->email }}) auf
pressekonto. Diese Adresse ist dort als Empfänger für Rechnungen hinterlegt.
</p>
@else
<p>Guten Tag {{ $user->name }},</p>
@endif
@if ($isReminder)
<p>
zu der unten aufgeführten Rechnung konnten wir bisher keinen Zahlungseingang
feststellen. Vielleicht ist sie in der Ablage untergegangen —
@if ($attachPdf)
die Rechnung liegt dieser E-Mail noch einmal als PDF bei.
@else
die Rechnung finden Sie in Ihrem Konto unter Rechnungen.
@endif
</p>
@else
<p>
als Bestandskunde nutzen Sie Ihre bisherige Vereinbarung auf pressekonto weiter
zu den gewohnten Konditionen (Bestandsschutz). Für den neuen Leistungszeitraum
@if ($attachPdf)
erhalten Sie anbei Ihre Rechnung als PDF.
@else
finden Sie Ihre Rechnung in Ihrem Konto unter Rechnungen.
@endif
</p>
@if ($invoice->replaces_legacy_invoice_number)
<p>
Diese Rechnung ersetzt die Rechnung Nr. {{ $invoice->replaces_legacy_invoice_number }}
aus unserem bisherigen System. Bitte begleichen Sie nur noch die hier
aufgeführte Rechnung.
</p>
@endif
@endif
<dl class="meta">
<dt>Rechnungsnummer</dt>
<dd>{{ $invoice->number }}</dd>
<dt>Rechnungsdatum</dt>
<dd>{{ $invoice->invoice_date?->format('d.m.Y') }}</dd>
<dt>Leistung</dt>
<dd>{{ $serviceName }}</dd>
@if ($servicePeriod)
<dt>Leistungszeitraum</dt>
<dd>{{ $servicePeriod[0] }} – {{ $servicePeriod[1] }}</dd>
@endif
<dt>Betrag (netto)</dt>
<dd>{{ $formatCents($invoice->amount_cents) }}</dd>
@if ($invoice->tax_cents > 0)
<dt>Umsatzsteuer</dt>
<dd>{{ $formatCents($invoice->tax_cents) }}</dd>
@endif
<dt>Rechnungsbetrag</dt>
<dd><strong>{{ $formatCents($invoice->total_cents) }}</strong></dd>
<dt>Zahlbar bis</dt>
<dd><strong>{{ $dueDate }}</strong></dd>
</dl>
<p>Bitte überweisen Sie den Rechnungsbetrag auf folgendes Konto:</p>
<dl class="meta">
<dt>Kontoinhaber</dt>
<dd>{{ $issuer['account_holder'] }}</dd>
<dt>IBAN</dt>
<dd>{{ $issuer['iban'] }}</dd>
<dt>BIC</dt>
<dd>{{ $issuer['bic'] }}</dd>
<dt>Bank</dt>
<dd>{{ $issuer['bank_name'] }}</dd>
<dt>Verwendungszweck</dt>
<dd>Rechnungsnummer {{ $invoice->number }}</dd>
</dl>
<div class="meta-danger">
<p style="margin: 0;">
<strong>Wichtiger Hinweis zum Bestandsschutz:</strong>
Geht die Zahlung nicht bis zum <strong>{{ $dueDate }}</strong> bei uns ein, endet
Ihr Bestandsschutz zu diesem Datum und die Rechnung wird storniert. Ihre bereits
veröffentlichten Pressemitteilungen bleiben online; neue Veröffentlichungen sind
danach nur noch über die aktuellen Tarife auf pressekonto möglich.
</p>
</div>
@unless ($forInvoiceRecipient)
<x-emails.button :url="$invoicesUrl">Rechnung im Konto ansehen</x-emails.button>
@endunless
<div class="note">
<p>
Sie möchten die Vereinbarung nicht fortführen? Dann müssen Sie nichts weiter tun —
der Bestandsschutz endet mit Ablauf des Zahlungsziels automatisch. Die aktuellen
Tarife finden Sie unter <a href="{{ $bookingUrl }}">Buchungen &amp; Add-ons</a>.
</p>
<p>Falls Sie den Betrag bereits überwiesen haben, betrachten Sie diese E-Mail bitte als gegenstandslos.</p>
<p>Bei Fragen erreichen Sie uns über den <a href="{{ config('domains.domain_portal_url') }}/de/hilfe">Hilfe-Bereich auf pressekonto</a> oder per E-Mail an {{ $issuer['email'] }}.</p>
</div>
</x-emails.layout>