Informationen aus zwei Datastores verbinden und berechnen (Fall: Shopware; Belegrabatt)

Hallo,

wir kommen bei der Umsetzung einer Berechnung in Synesty nicht weiter. Wir möchten den prozentualen Rabatt pro Bestellung aus unserem Shop (Shopware) berechnen. Dafür bekommen wir die Daten aus Shopware und verwenden dafür "ShopwareSearchOrders", wodurch wir den Auftragskopf und die Auftragsposition in zwei verschiedenen Datastores abspeichern, in denen sich die beiden benötigten Werte zur Berechnung befinden. Ich veranschauliche gerne mal ein Beispiel:

Datastore Auftragskopf:

  • Order XY --> InvoiceAmount = 1000 Euro
  • Order YX --> InvoiceAmount= 1500 Euro


Datastore Auftragsposition:

  • Order XY --> Position 1 = 5 Euro
  • Order XY --> Position 2 = 2 Euro
  • Order XY --> Position 3 = -2 Euro
  • Order YX --> Position 1 = 3 Euro


An dem Negativwert in der Auftragsposition erkennen wir, dass bei Order XY ein Gutschein verwendet wurde. Dieser bezieht sich auf die gesamte Order. Um also den Belegrabatt zu berechnen, müssten wir je Ordernummer:
((NegativPosition * 100) / InvoiceAmountDerBestellung) berechnen. In unserem Fall wäre das bei Order XY ein Rabatt von 2 Euro auf 1000 Euro InvoiceAmount, also 0,2% Belegrabatt als Ergebnis.

Wie kann ich das jetzt rechnerisch in Synesty umsetzen? Für mich wären dies zwei Schritte:

1. Suche in jeder Ordernummer in dem Datastore Auftragsposition nach einem negativen Wert

2. Sofern ein negativer Wert gefunden wird, berechne den prozentualen Rabatt pro Bestellung mit der oben beschriebenen Formel (hierfür wird dann "InvoiceAmount" aus dem Datastore Auftragskopf benötigt)

Als Hinweis: Schlussendlich geben wir die Information über den TextHTMLWriter als XML aus. Über jegliche Tipps oder Anregungen, wie wir dieses Vorgehen in Synesty umsetzen können, wäre ich sehr sehr dankbar! :-)

Hallo,


hier eine mögliche Lösung für die beiden Punkte:


1. Suche in jeder Ordernummer in dem Datastore Auftragsposition nach einem negativen Wert


Um die Positionen mit neg. Wert zu erhalten können sie den Filter Step mit folgender Bedingung verwenden:


isNumber(OrderItemPrice!) && OrderItemPrice!?number < 0



2. Sofern ein negativer Wert gefunden wird, berechne den prozentualen Rabatt pro Bestellung mit der oben beschriebenen Formel (hierfür wird dann "InvoiceAmount" aus dem Datastore Auftragskopf benötigt)



Anschließend können sie in einem Mapper Step den Belegrabatt berechnen. Dazu ist es notwendig, dass sie sich über die "Querverweis" Funktion den "InvoiceAmount" der Bestellung holen (siehe Screenshot).




Der gesamte Flow könnte in etwa wie folgt aussehen:



In der 1. Gruppen werden Bestellungen von Shopware aufgeteilt in zwei Datastores gespeichert (Bestellkopf und Positionen). In der zweiten Gruppe wird dann der Rabatt berechnet und dieser Wert im Datastore am Auftragskopf abgespeichert. Bei der Erstellung der XML Datei können sie dann auf den berechneten Wert aus dem Bestellkopf zugreifen.


Viele Grüße

Torsten Felsch