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.
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.