Tutorial · Laravel · 02.09.2024

Tutorial: E-Rechnung in Laravel integrieren

Laravel ist das bevorzugte PHP-Framework vieler Entwickler aufgrund seiner eleganten Syntax, der umfassenden Funktionalität und der schnellen Entwicklungsmöglic...

1. Voraussetzungen und Vorbereitung

Bevor wir loslegen, stellen wir sicher, dass alle Voraussetzungen erfüllt sind: Laravel-Projekt: Stellen Sie sicher, dass Ihr Projekt auf einer der neueren Laravel-Versionen läuft (mindestens Laravel 8). PHP Version: PHP 7.4 oder höher. Composer: Paketmanager für PHP. Grundlegende Kenntnisse in Laravel: Sie sollten wissen, wie man Modelle, Migrationen, Controller und Services in Laravel erstellt.

Tipp

Tipp: Composer und PHP aktualisieren
Stellen Sie sicher, dass Sie die neuesten Versionen von Composer und PHP installiert haben. Eine aktuelle Umgebung spart oft viel Ärger.

2. E-Rechnungs-Bibliothek installieren

Um E-Rechnungen im vorgeschriebenen Format wie XRechnung oder ZUGFeRD zu erstellen, benötigen wir eine geeignete Bibliothek. Eine der besten Optionen ist php-xrechnung, die die Generierung von XRechnung-konformen XML-Dateien ermöglicht. Fügen Sie die Bibliothek Ihrem Laravel-Projekt hinzu:
shell
composer require e-venement/php-xrechnung

Tipp

Versionskompatibilität überprüfen
Manchmal sind Bibliotheken nicht mit der neuesten PHP- oder Laravel-Version kompatibel. Überprüfen Sie die GitHub-Seite der Bibliothek auf bekannte Probleme oder Einschränkungen.

3. E-Commerce-Plugin integrieren (Optional)

Falls Sie ein E-Commerce-System betreiben, benötigen Sie möglicherweise ein E-Commerce-Plugin, das einfach in Laravel integriert werden kann. Bagisto ist eine großartige Wahl, da es ein umfangreiches Feature-Set und eine einfache Integration bietet:
shell
composer require bagisto/bagisto
php artisan bagisto:install

Tipp

Anpassung des E-Commerce-Plugins
Passen Sie das E-Commerce-Plugin an Ihre Bedürfnisse an. Nutzen Sie Middleware, Events und Observer von Laravel, um Ihre E-Commerce-Workflows zu optimieren.

4. Erstellen von Modellen und Migrations für Rechnungen

Jetzt erstellen wir ein Modell und eine Migration für unsere Rechnungen. Damit legen wir die Struktur der Rechnungstabellen in unserer Datenbank fest:

Bearbeiten Sie die generierte Migration, um die benötigten Felder hinzuzufügen:

shell
php artisan make:model Invoice -m

Führen Sie die Migration durch:

php
Schema::create('invoices', function (Blueprint $table) {
    $table->id();
    $table->string('invoice_number')->unique();
    $table->date('invoice_date');
    $table->decimal('total_amount', 10, 2);
    $table->string('currency')->default('EUR');
    $table->json('items'); // Speichert Artikel und Dienstleistungen als JSON
    $table->timestamps();
});
shell
php artisan migrate

Tipp

JSON-Felder sind ideal, um flexible Datenstrukturen zu speichern. Sie können Artikel, Preise und Steuersätze einfach in einem JSON-Format speichern und verarbeiten.

5. Service zur Generierung von E-Rechnungen erstellen

Nun erstellen wir eine Service-Klasse, die die E-Rechnungen generiert. Diese Klasse verwendet die php-xrechnung-Bibliothek, um Rechnungsdaten in das XRechnung-Format zu konvertieren:

In der neuen Klasse InvoiceService.php fügen wir folgende Logik hinzu:

shell
php artisan make:service InvoiceService
php
namespace App\Services;

use ERechnung\XRechnung;
use App\Models\Invoice;

class InvoiceService
{
    public function generateEInvoice(Invoice $invoice)
    {
        // Erstellen Sie eine neue XRechnung-Instanz
        $xRechnung = new XRechnung();

        // Setzen der notwendigen Daten für die XRechnung
        $xRechnung->setInvoiceNumber($invoice->invoice_number);
        $xRechnung->setInvoiceDate($invoice->invoice_date);
        $xRechnung->setTotalAmount($invoice->total_amount);
        $xRechnung->setCurrency($invoice->currency);
        $xRechnung->setItems($invoice->items); // Erwartet ein JSON-Array

        // Speichern der XML-Datei
        $filePath = storage_path('app/invoices/' . $invoice->invoice_number . '.xml');
        $xRechnung->saveToFile($filePath);

        return $filePath;
    }
}

Tipp

Verwenden Sie den Storage Helper
Laravel's storage_path() ist ideal, um Dateien in Ihrem Storage-Verzeichnis zu speichern. Vergessen Sie nicht, entsprechende Verzeichnisse zu erstellen und Berechtigungen zu setzen!

6. API-Endpunkt zur Erstellung und Bereitstellung von Rechnungen

Nun erstellen wir einen API-Endpunkt, um die E-Rechnungs-Funktionalität bereitzustellen. Dieser Endpunkt kann beispielsweise im InvoiceController hinzugefügt werden:

Registrieren Sie die Route in Ihrer web.php oder api.php:

php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Invoice;
use App\Services\InvoiceService;

class InvoiceController extends Controller
{
    protected $invoiceService;

    public function __construct(InvoiceService $invoiceService)
    {
        $this->invoiceService = $invoiceService;
    }

    public function downloadEInvoice($id)
    {
        $invoice = Invoice::findOrFail($id);

        // E-Rechnung generieren
        $filePath = $this->invoiceService->generateEInvoice($invoice);

        // Datei herunterladen
        return response()->download($filePath);
    }
}
php
Route::get('/invoices/{id}/download', [InvoiceController::class, 'downloadEInvoice']);

Tipp

Routen- und Middleware-Schutz
Stellen Sie sicher, dass Ihre Routen durch Authentifizierung und entsprechende Middleware geschützt sind, um sicherzustellen, dass nur berechtigte Nutzer Zugriff auf die Rechnungen haben.

7. Validierung und Testen der E-Rechnungen

Der wichtigste Schritt in jedem Entwicklungsprozess ist das Testen. Testen Sie die generierten E-Rechnungen mit offiziellen Tools wie dem Zentralen Rechnungseingang der Bundesregierung oder anderen Prüfprogrammen. So stellen Sie sicher, dass die XML-Dateien den gesetzlichen Anforderungen entsprechen.

Tipp

Automatisierte Tests
Erstellen Sie Unit-Tests für Ihre InvoiceService-Klasse und Integrationstests für Ihre Endpunkte. Laravel bietet mächtige Testwerkzeuge, die Ihnen helfen, die Qualität Ihrer Anwendung sicherzustellen.

8. Optimierung und Bereitstellung

Sobald Sie alle Funktionalitäten implementiert und getestet haben, ist es Zeit für den letzten Feinschliff: Caching und Optimierung: Nutzen Sie Laravels Caching-Mechanismen (z. B. config:cache, route:cache), um die Leistung Ihrer Anwendung zu verbessern. Deployment: Stellen Sie sicher, dass Ihre Anwendung auf einem sicheren Server läuft. Verwenden Sie Laravel Forge oder Envoyer für einfache und sichere Bereitstellung. Dokumentation und Schulung: Dokumentieren Sie alle Änderungen und erstellen Sie eine kurze Schulung für Ihre Mitarbeiter, damit sie wissen, wie sie mit dem neuen E-Rechnungs-System arbeiten können.
Mit dieser Anleitung haben Sie die Grundlagen geschaffen, um E-Rechnungen in Ihrem Laravel-Projekt zu integrieren. Die Einhaltung der neuen E-Rechnungs-Pflicht ist nicht nur eine gesetzliche Notwendigkeit, sondern kann auch die Effizienz Ihrer Prozesse erheblich verbessern. Nutzen Sie die Tipps und Tricks, um Ihre Implementierung weiter zu optimieren und sicherzustellen, dass alles reibungslos läuft. Viel Spaß beim Entwickeln – und denken Sie daran: Manchmal ist die Lösung viel einfacher, als man denkt, wenn man es einfach Schritt für Schritt angeht!
Quelle: https://birdapi.de/blog/tutorials-laravel/tutorial-e-rechnung-in-laravel-integrieren