From 58806757fa52c79f1518db481a0568d6943e6953 Mon Sep 17 00:00:00 2001 From: fds2610-bot Date: Tue, 5 May 2026 15:48:43 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20Rechnungs-PDF=20beim=20Finalisieren=20un?= =?UTF-8?q?ver=C3=A4nderlich=20speichern=20(GoBD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Controllers/InvoiceController.php | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/Controllers/InvoiceController.php b/src/Controllers/InvoiceController.php index c6ad0b2..37dcd64 100644 --- a/src/Controllers/InvoiceController.php +++ b/src/Controllers/InvoiceController.php @@ -434,16 +434,31 @@ class InvoiceController private function createBeleg(array $invoice): string { - $id = (int)$invoice['id']; + $id = (int)$invoice['id']; + $lines = Invoice::lines($id); + $settings = Setting::get(); + + // PDF zum Zeitpunkt der Finalisierung unveränderlich generieren und speichern (GoBD) + $svc = new PdfInvoiceService(); + $pdf = $svc->renderToString($invoice, $lines, $settings); $belegNr = Beleg::generateBelegNr(); + $year = date('Y', strtotime($invoice['rechnungs_datum'])); + $relDir = "static/uploads/{$year}/{$belegNr}"; + $absDir = dirname(__DIR__, 2) . "/public/{$relDir}"; + if (!is_dir($absDir)) mkdir($absDir, 0755, true); + + $filename = $invoice['rechnungs_nr'] . '.pdf'; + $storagePath = "{$relDir}/original.pdf"; + file_put_contents(dirname(__DIR__, 2) . "/public/{$storagePath}", $pdf); + $belegId = Beleg::create([ 'invoice_id' => $id, 'beleg_nr' => $belegNr, - 'filename' => $invoice['rechnungs_nr'] . '.pdf', - 'storage_path' => '', + 'filename' => $filename, + 'storage_path' => $storagePath, 'mime_type' => 'application/pdf', - 'file_hash' => hash('sha256', $invoice['rechnungs_nr']), + 'file_hash' => hash('sha256', $pdf), 'beleg_datum' => $invoice['rechnungs_datum'], 'rechnungs_nr' => $invoice['rechnungs_nr'], 'betrag_brutto' => $invoice['betrag_brutto'],