Pricing API
Die Pricing API wird verwendet, um die Preise von Produkten in Echtzeit aus Abacus abzurufen und im Shopware-Frontend anzuzeigen.
Backup-Preis:
Beim Anlegen eines Produkts in Shopware – sei es über die vollständige Produktsynchronisation, eine PIM-Integration oder manuell – ist ein Produktpreis erforderlich.
Wir empfehlen, in Shopware einen Standardpreis zu hinterlegen, der dann beim Anzeigen des Produkts im Storefront von der Pricing API überschrieben wird.
Für den unwahrscheinlichen Fall, dass die Pricing API nicht verfügbar ist, wird der Standardpreis verwendet.
So wird sichergestellt, dass das Produkt auch dann korrekt im Storefront angezeigt werden kann, wenn die Pricing API nicht verfügbar ist.
Konfiguration der Pricing API
Um die Pricing API zu konfigurieren, öffnen Sie in der Shopware-Administration die Plugin-Konfiguration der Abacus-Integration.
Es stehen zwei Optionen zur Verfügung:
- Aktivieren für nicht eingeloggte Benutzer: Aktiviert die Pricing API für alle Benutzer, die nicht eingeloggt sind.
- Aktivieren für eingeloggte Benutzer: Aktiviert die Pricing API für eingeloggte Benutzer.
Für eingeloggte Benutzer verwenden wir die Abacus-Debitorennummer, um den Benutzer zu identifizieren. Diese wird in den benutzerdefinierten Feldern der Kunden-Entität gespeichert.
Pricing API Abacus Konfiguration
Damit Gäste Preise aus Abacus abrufen können, muss dies in den Abacus-Anwendungseinstellungen (621) konfiguriert werden.
Wenn Gäste Preise von einem bestimmten Kunden erhalten sollen, kann im Feld „Kundennummer“ die Debitorennummer eingetragen werden.
Funktionsweise im Frontend
Wenn ein Produkt im Storefront angezeigt wird, ruft die Pricing API den Preis des Produkts ab. Wir greifen sowohl in Kategorien als auch auf Produktdetailseiten ein, um die Preise im Storefront sowie im Warenkorb anzuzeigen – da die Preisberechnung in Abacus auch auf Warenkorbebene erfolgen kann.
💡 Caching:
Wir empfehlen, für Shopware allgemein eine dedizierte Redis-Instanz zum Cachen zu verwenden. Auch die Ergebnisse der Pricing API werden in Redis zwischengespeichert, um die Performance zu verbessern. Preise werden für 60 Minuten sowohl für eingeloggte als auch für nicht eingeloggte Benutzer gecacht.
Rundung und Dezimalgenauigkeit
Um Inkonsistenzen zwischen den Preisberechnungen von Shopware und Abacus zu vermeiden, empfehlen wir folgende Einstellungen:
Shopware-Einstellungen:
- Dezimalgenauigkeit auf 8 Nachkommastellen setzen
- Rundung auf Positionsebene deaktivieren
- Nur den Gesamtbetrag (Grand Total) auf 2 Nachkommastellen und auf 0.05-Intervalle runden

Frontend-Anzeige: Auch wenn Sie im Frontend aus Lesbarkeitsgründen nur 2 Nachkommastellen anzeigen möchten, ist es wichtig, im Hintergrund mit 8 Nachkommastellen zu arbeiten. So bleiben Preisberechnungen zwischen Shopware und Abacus konsistent, insbesondere bei Rabatten, Steuern und mehreren Positionen.
💡 Warum 8 Nachkommastellen? Höhere Präzision verhindert Rundungsfehler, die sich über mehrere Berechnungen und Positionen aufaddieren können und sonst zu Abweichungen zwischen den beiden Systemen führen.
Preis-Cache-Warmup für Gastkundschaft
Um die Performance für nicht eingeloggte Kundschaft sicherzustellen, wärmen wir den Cache für Produktpreise stündlich automatisch vor. Dies geschieht über einen geplanten Hintergrundjob: 
Staffelpreise (Mengenpreise)
Staffelpreise (Mengenpreise) können in der Plugin-Konfiguration aktiviert werden:
Im Storefront von Shopware werden diese Preise entsprechend angezeigt:
Staffelpreise (Mengenpreise) in Abacus:
Diese Funktion unterstützt auch kundenspezifische Mengenpreise.
In solchen Fällen werden die für den jeweiligen Kunden definierten Preise angezeigt.
Zusätzliche Daten in Custom Fields
Während der Preis-API-Anfrage stellt das Plugin dem Storefront zusätzliche Daten zur Verfügung, darunter:
Abacus-Preistyp
- Information darüber, von welchem Preistyp der Preis stammt
Rabattdetails (wenn für ein bestimmtes Produkt ein Rabatt definiert ist)
- Detaillierte Informationen über den Rabatt. Es gibt folgende Felder:
- type: Prozentsatz oder Betrag
- value: Wert des Rabatts
- discountType: von welchem Preistyp der Rabatt stammt
- Detaillierte Informationen über den Rabatt. Es gibt folgende Felder:
Preis für nicht eingeloggte Kunden (wenn ein Kunde eingeloggt ist)
- Gleitkommapreis. Netto oder Brutto hängt von der Kundengruppe ab, in der sich der Kunde befindet.
Dadurch kann das Storefront zusätzliche Informationen über Preise und Rabatte anzeigen.
Abacus-Preistyp
Im Abacus gibt es 4 Preistypen:
- Standard (Liste)
- Staffel
- Spezial
- Aktion

Standard-(Listen-)Preistyp
Im Abacus: 
Im Shopware-Storefront: 
Shopware API Response: 
Staffelpreistyp
Im Abacus: 
Im Shopware-Storefront: 
Shopware API Response: 
Spezial- und Aktionspreistyp
Diese beiden Preislistentypen funktionieren gleich und sehen in der Abacus-Konfiguration so aus: 
Im Shopware-Storefront: 
Shopware API Response: 
Rabattdetails
Bitte beachten Sie, dass zu allen Preistypen auch ein Rabatt hinzugefügt werden kann und Preistypen mit Rabatten kombiniert werden können (z. B. Standardpreis + Staffelrabatt usw.).
Standardpreis + Rabatt
Im Abacus: 
Im Shopware-Storefront: 
Shopware API Response: 
Staffelpreis + Prozent
Im Abacus: 
Im Shopware-Storefront: 
Shopware API Response: 
Spezial- und Aktionspreistyp + Rabatt
Im Abacus: 
Im Shopware-Storefront: 
Shopware API Response: 
Standardpreis + Staffelrabatt
Im Abacus: 

Im Shopware-Storefront: 
Shopware API Response: Bitte beachten Sie, dass in diesem Fall der abacus_price_type den Wert List hat, da die Basispreise aus dem Tab „Standard“ im Abacus stammen und der Rabatt aus dem Tab „Staffel“ hinzugefügt wird.
Preis für nicht eingeloggte Kunden
Wenn für einen eingeloggten Kunden ein Spezialpreis festgelegt ist, wird der Preis für nicht eingeloggte Kunden im Custom Field abacus_default_guest_price gespeichert.

Fallback-Preise
In jedem Fall, wenn das Abrufen der Produktpreise nicht möglich ist und kein Preis im Cache vorhanden ist, setzt das Plugin die Preise aus den Standardfeldern von Shopware.
