Markus Michalski FAQ

PDF-Rechnungen: Erweiterung

Erweiterungspunkte des PDF-Rechnungen Moduls für OXID eShop 7.x: Chain-Extensions für Order und Email, Order-Methoden für Templates und Module, Services und Ausnahmen.

English Version

Zurück zur Übersicht

PDF-Rechnungen: Erweiterung

Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version.

Diese Seite richtet sich an Entwickler, die in eigenen Modulen oder Templates auf die Rechnungsdaten zugreifen möchten. Das Modul löst keine eigenen Events aus und bietet keine Konfiguration für Erweiterungen. Die folgenden Punkte stehen zur Verfügung.

Chain-Extensions

Das Modul erweitert zwei OXID-Klassen über die Modulkette:

OXID-Klasse Erweiterung Zweck
OxidEsales\Eshop\Core\Email Mmd\PdfInvoice\Model\ExtendedEmail Rechnung an Bestellmails anhängen
OxidEsales\Eshop\Application\Model\Order Mmd\PdfInvoice\Model\ExtendedOrder Zugriff auf Rechnung und Snapshot

ExtendedEmail

Überschrieben werden sendOrderEmailToUser(), sendOrderEmailToOwner() und send(). Die beiden Bestellmail-Methoden merken sich nur Bestell-ID und Empfängerart, der Anhang wird erst in send() hinzugefügt, weil OXID die Anhänge davor zurücksetzt. Eigene Module, die dieselben Methoden erweitern, bleiben davon unberührt, solange sie parent:: aufrufen.

ExtendedOrder

Die Bestellung erhält vier zusätzliche Methoden:

Methode Rückgabe Beschreibung
getInvoice() Invoice oder null Rechnung zur Bestellung, null wenn keine existiert oder die Abfrage fehlschlägt
hasInvoice() bool Gibt an, ob eine Rechnung existiert
getInvoiceNumber() string oder null Rechnungsnummer, wenn eine Rechnung existiert
createInvoiceSnapshot() array Erzeugt den Snapshot aus den aktuellen Bestelldaten (siehe Technik)

createInvoiceSnapshot() legt nichts ab, es liefert nur das Array. Gespeichert wird der Snapshot erst beim Erstellen der Rechnung.

Services

Die Services sind im Dependency-Injection-Container von OXID registriert. Öffentlich abrufbar sind:

Service Aufgabe
Mmd\PdfInvoice\Service\InvoiceServiceInterface Rechnung erstellen, laden, speichern, PDF neu erzeugen
Mmd\PdfInvoice\Service\InvoiceConfigurationInterface Lesezugriff auf die Moduleinstellungen
Mmd\PdfInvoice\Service\DebugLogger Logger, der Debug-Meldungen nur bei aktivem Debug-Logging schreibt
Mmd\PdfInvoice\Repository\InvoiceRepository Datenbankzugriff auf mmd_pdfinvoice

Weitere Schnittstellen sind InvoiceNumberGeneratorInterface, InvoiceStorageInterface und PdfGeneratorInterface. Sie werden vom InvoiceService verwendet.

InvoiceServiceInterface

Methode Beschreibung
createForOrder(Order $order): Invoice Erstellt Nummer, Snapshot, PDF und Datenbankeintrag. Wirft InvoiceAlreadyExistsException, wenn es schon eine Rechnung gibt
getByOrder(string $orderId): ?Invoice Rechnung zu einer Bestell-ID
getByNumber(string $invoiceNumber, int $shopId): ?Invoice Rechnung zu einer Rechnungsnummer
getPdfContent(Invoice $invoice): string PDF-Inhalt aus der Ablage, mit Prüfung des Hashwerts
save(Invoice $invoice): void Speichert Änderungen (Dateipfad, Hash, Versandstatus)
regeneratePdf(Invoice $invoice): void Erzeugt das PDF aus dem Snapshot neu und ersetzt die Datei

Beispiel in einem eigenen Modul:

use Mmd\PdfInvoice\Service\InvoiceServiceInterface;
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;

$service = ContainerFactory::getInstance()
    ->getContainer()
    ->get(InvoiceServiceInterface::class);

$invoice = $service->getByOrder($orderId);

Ausnahmen

Klasse Wann
InvoiceAlreadyExistsException Zur Bestellung existiert bereits eine Rechnung (getExistingInvoice() liefert sie)
InvoiceGenerationException Rechnung oder PDF konnte nicht erstellt werden, oder die Hash-Prüfung ist fehlgeschlagen
PdfGenerationException Dompdf oder das Rendering des Templates ist fehlgeschlagen
StorageException Die PDF-Datei konnte nicht geschrieben, gelesen oder gelöscht werden
InvoiceNumberException Die Rechnungsnummer konnte nicht vergeben werden

Alle Klassen liegen im Namespace Mmd\PdfInvoice\Exception.