presseportale/app/Services/Billing/InvoiceDelivery.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

44 lines
1.4 KiB
PHP

<?php
namespace App\Services\Billing;
use App\Models\User;
/**
* Wer eine Rechnungsmail bekommt und ob das PDF anhängt (Kundenwunsch
* 06.10.2026, Einstellung an der Rechnungsadresse im Profil).
*
* - Die Konto-Adresse bekommt die Rechnungsmail immer; das PDF hängt an,
* solange der Kunde es nicht abgewählt hat (Standard: an).
* - Eine optionale Rechnungs-E-Mail bekommt eine eigene Mail mit PDF,
* wenn der Versand dorthin aktiviert ist (Standard: an, sobald eine
* Adresse eingetragen ist).
* - Ist die Rechnungs-E-Mail dieselbe wie die Konto-Adresse, geht keine
* zweite Mail raus; die Konto-Mail trägt dann das PDF.
*/
final class InvoiceDelivery
{
public function __construct(
public readonly bool $attachPdfForAccount,
public readonly ?string $invoiceEmail,
) {}
public static function for(User $user): self
{
$billingAddress = $user->billingAddress;
$attachPdfForAccount = $billingAddress->invoice_pdf_to_account ?? true;
$invoiceEmail = trim((string) $billingAddress?->invoice_email);
if ($invoiceEmail === '' || ! $billingAddress?->invoice_pdf_to_invoice_email) {
return new self($attachPdfForAccount, null);
}
if (strcasecmp($invoiceEmail, trim((string) $user->email)) === 0) {
return new self(true, null);
}
return new self($attachPdfForAccount, $invoiceEmail);
}
}