Stornorechnung: Fix überdeckte Artikelzeile + Regenerate-Command

Der ACHTUNG-Hinweiskasten hat wegen fixer 15mm-Höhe des Titel-Blocks
den Tabellenkopf und die erste Artikelzeile überdeckt (z.B. Artikel
5010400 auf den Stornos zu Bestellung 56965/56966). Titel-Block wächst
jetzt mit dem Inhalt.

Neuer Command sales:regenerate-cancellation-pdf erzeugt die PDFs
bestehender Stornorechnungen neu (gleiche Nummer/Pfade, keine
Punktebuchung, keine Mails) – per Rechnungs-ID oder mit --order per
Bestell-ID.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin 2026-07-14 14:19:28 +00:00
parent 8e09aaefe8
commit 1e7ae92d0c
4 changed files with 271 additions and 2 deletions

View file

@ -16,7 +16,7 @@ use Storage;
class InvoiceRepository extends BaseRepository
{
/** @var \App\Models\ShoppingOrder */
/** @var ShoppingOrder */
protected $model;
private $invoice_date;
@ -356,6 +356,32 @@ class InvoiceRepository extends BaseRepository
});
}
/**
* Erzeugt die PDF-Dateien einer bestehenden Stornorechnung neu (z. B. nach Template-Fixes).
*
* Verwendet Nummer, Datum und Dateipfade der bestehenden Stornorechnung und überschreibt
* die vorhandenen Dateien – es wird keine neue Rechnungsnummer vergeben und es werden
* keine Punkte gebucht.
*/
public function regenerateCancellationPDF(UserInvoice $cancellation_invoice): void
{
$original_invoice = UserInvoice::where('cancellation_id', $cancellation_invoice->id)->first();
if (! $original_invoice) {
throw new \Exception('Keine Originalrechnung zur Stornorechnung #'.$cancellation_invoice->id.' gefunden.');
}
$this->makeCancellationPDF(
$cancellation_invoice->date,
$cancellation_invoice->full_number,
$cancellation_invoice->dir,
$cancellation_invoice->filename,
$cancellation_invoice->delivery_dir,
$cancellation_invoice->delivery_filename,
$original_invoice
);
}
/**
* Erstellt die Storno-PDFs (Rechnung und Lieferschein)
*/