Warenwirtschaft: Review-Fix — Altdaten-PDFs zentral regenerieren (ensureFilesOnDisk)
document('combined') lief bei fehlender Alt-PDF ungeprüft in eine
PDFMerger-Exception (500); der Sammel-Druck prüfte nur den Lieferschein,
eine fehlende Rechnungs-PDF ließ den ganzen Batch platzen. Neue zentrale
InvoiceRepository::ensureFilesOnDisk() ersetzt den dreifach kopierten
Altdaten-Check (MailLogistic 2x, batchDocuments); Merge-/Response-Code im
OrderFulfillmentController zu mergedPdf()/pdfResponse() dedupliziert.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
8ad0f65947
commit
f28f4b4b68
5 changed files with 242 additions and 132 deletions
|
|
@ -133,31 +133,20 @@ class OrderFulfillmentController extends Controller
|
|||
return redirect()->route('admin.inventory.orders.index');
|
||||
}
|
||||
|
||||
$merger = new PDFMerger;
|
||||
$merger->init();
|
||||
|
||||
foreach ($printable as $order) {
|
||||
if (! Invoice::isInvoice($order)) {
|
||||
(new InvoiceRepository($order))->create([]);
|
||||
} elseif (! Storage::disk('public')->exists(Invoice::getDownloadPathDelivery($order))) {
|
||||
// Datei fehlt auf der Platte (Altdaten) — mit bestehender Nummer neu erzeugen
|
||||
(new InvoiceRepository($order))->update([]);
|
||||
} else {
|
||||
// Fehlende Dateien (Altdaten) mit bestehender Nummer regenerieren —
|
||||
// prüft Rechnung UND Lieferschein (Review 20.07.2026)
|
||||
(new InvoiceRepository($order))->ensureFilesOnDisk();
|
||||
}
|
||||
|
||||
if ($data['type'] === 'combined') {
|
||||
$merger->addPDF(Invoice::getDownloadPath($order, true));
|
||||
}
|
||||
$merger->addPDF(Invoice::getDownloadPathDelivery($order, true));
|
||||
}
|
||||
|
||||
$filename = ($data['type'] === 'combined' ? 'Rechnungen-Lieferscheine-' : 'Lieferscheine-')
|
||||
.now()->format('d-m-Y_Hi').'.pdf';
|
||||
$merger->setFileName($filename);
|
||||
$merger->merge();
|
||||
|
||||
return Response::make($merger->output(), 200)
|
||||
->header('Content-Type', 'application/pdf')
|
||||
->header('Content-disposition', 'inline; filename="'.$filename.'"');
|
||||
return $this->pdfResponse($this->mergedPdf($printable, $data['type'] === 'combined', $filename), $filename);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -175,25 +164,18 @@ class OrderFulfillmentController extends Controller
|
|||
if ($type === 'label') {
|
||||
abort_unless($order->wp_label_path && Storage::disk('local')->exists($order->wp_label_path), 404);
|
||||
|
||||
return Response::make(Storage::disk('local')->get($order->wp_label_path), 200)
|
||||
->header('Content-Type', 'application/pdf')
|
||||
->header('Content-disposition', 'inline; filename="DHL-Label-Bestellung-'.$order->id.'.pdf"');
|
||||
return $this->pdfResponse(Storage::disk('local')->get($order->wp_label_path), 'DHL-Label-Bestellung-'.$order->id.'.pdf');
|
||||
}
|
||||
|
||||
abort_unless(Invoice::isInvoice($order), 404);
|
||||
// Fehlende Dateien (Altdaten) mit bestehender Nummer regenerieren — vorher
|
||||
// lief der combined-Zweig ungeprüft in eine Exception (Review 20.07.2026)
|
||||
abort_unless((new InvoiceRepository($order))->ensureFilesOnDisk(), 404);
|
||||
|
||||
if ($type === 'combined') {
|
||||
$merger = new PDFMerger;
|
||||
$merger->init();
|
||||
$merger->addPDF(Invoice::getDownloadPath($order, true));
|
||||
$merger->addPDF(Invoice::getDownloadPathDelivery($order, true));
|
||||
$filename = str_replace('Rechnung-', 'Rechnung-Lieferschein-', Invoice::getFilename($order));
|
||||
$merger->setFileName($filename);
|
||||
$merger->merge();
|
||||
|
||||
return Response::make($merger->output(), 200)
|
||||
->header('Content-Type', 'application/pdf')
|
||||
->header('Content-disposition', 'inline; filename="'.$filename.'"');
|
||||
return $this->pdfResponse($this->mergedPdf([$order], true, $filename), $filename);
|
||||
}
|
||||
|
||||
$path = $type === 'invoice' ? Invoice::getDownloadPath($order) : Invoice::getDownloadPathDelivery($order);
|
||||
|
|
@ -201,7 +183,36 @@ class OrderFulfillmentController extends Controller
|
|||
|
||||
abort_unless(Storage::disk('public')->exists($path), 404);
|
||||
|
||||
return Response::make(Storage::disk('public')->get($path), 200)
|
||||
return $this->pdfResponse(Storage::disk('public')->get($path), $filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rechnung (optional) + Lieferschein der Bestellungen zu EINEM PDF mergen —
|
||||
* gemeinsame Implementierung für Einzel-Kombi und Sammel-Druck.
|
||||
*
|
||||
* @param iterable<ShoppingOrder> $orders
|
||||
*/
|
||||
private function mergedPdf(iterable $orders, bool $withInvoice, string $filename): string
|
||||
{
|
||||
$merger = new PDFMerger;
|
||||
$merger->init();
|
||||
|
||||
foreach ($orders as $order) {
|
||||
if ($withInvoice) {
|
||||
$merger->addPDF(Invoice::getDownloadPath($order, true));
|
||||
}
|
||||
$merger->addPDF(Invoice::getDownloadPathDelivery($order, true));
|
||||
}
|
||||
|
||||
$merger->setFileName($filename);
|
||||
$merger->merge();
|
||||
|
||||
return $merger->output();
|
||||
}
|
||||
|
||||
private function pdfResponse(string $content, string $filename)
|
||||
{
|
||||
return Response::make($content, 200)
|
||||
->header('Content-Type', 'application/pdf')
|
||||
->header('Content-disposition', 'inline; filename="'.$filename.'"');
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue