1. Voraussetzungen und Vorbereitung
2. E-Rechnungs-Bibliothek installieren
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)
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
Bearbeiten Sie die generierte Migration, um die benötigten Felder hinzuzufügen:
php artisan make:model Invoice -m
Führen Sie die Migration durch:
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();
});
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
In der neuen Klasse InvoiceService.php fügen wir folgende Logik hinzu:
php artisan make:service InvoiceService
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;
}
}
6. API-Endpunkt zur Erstellung und Bereitstellung von Rechnungen
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);
}
}
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
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.
Kommentare 0
Noch keine Kommentare. Seien Sie der Erste!