Berechnet die Aufschläge bzw. Rabatte auf den (Gesamt-)Wert des Warenkorbs eines Besuchers.
Hinweis :
In der Ergebnismege ist IMMER eine „Kopf“- und eine „Summen“-Zeile enthalten, die an „PositionNo = 0“ bzw. „PositionNo = 255“ zu erkennen ist. „SurchargeTypeID“ enthält den Wert „-1“, in der „SurchargeTypeDescription“ steht „INPUT DATA“ bzw. „SUM“ und die beiden „Absolute…Surcharge“-Spalten enthalten …
Im Fall „SplitByTaxes = 0“ gibt es ja noch weitere Rückgabespalten, die „0“ für die Kopf und „NULL“ für die Summen-Zeile enthalten.
Anmerkung zur Rückgabespalte „TaxesMultiplier“ im Fall „SplitByTaxes = 1“ :
Der „TaxesMultiplier“ KANN „NULL“ enthalten, falls für eine „Surcharge“-Position nicht explizit ein Steuersatz konfiguriert ist UND der Warenwert über die „…Sum“-Parameter übergeben wurde. Denn anhand des Warenwertes über die „…Sum“-Parameter ließe sich allenfalls nur ein „künstlicher“ Steuersatz errechnen (Verhältnis Brutto zu Netto), der aber noch dazu von Rundungsfehlern behaftet wäre.
Für den „TaxesMultiplier“ in der Kopf- und Summenzeile gilt im Falle der Übergabe des Warenwertes über die „…Sum“-Parameter, daß er GARANTIERT „NULL“ ist.
Wie die „Surcharge“-Berechnung abläuft :
1.) Es werden alle definierten „SurchargeTypeCategories“ (s. om_GetSurchargeTypeCategories) mit einer „PriorityNo > 0“ durchlaufen, und zwar aufsteigend nach der „PriorityNo“.
Diese besagt nämlich, daß die Berechnungs-Grundlage von „Surcharges“ einer Kategorie nicht nur der Warenwert ist, sondern die Summe aus Warenwert und bereits errechneten „Surcharges“ von Kategorien mit (echt) KLEINERER „PriorityNo“.
Anmerkungen :
(i) Besitzen zwei Kategorien dieselbe „PriorityNo“, wird zuerst die mit kleinerer ID abgearbeitet, beide bekommen aber dieselbe „Berechnungs-Grundlage“ (Warenwert + Surcharges aus Kategorien mit echt kleinerer „PriorityNo“) !
(ii) Man kann die Ausführung der Berechnung von „Surcharges“ einer Kategorie also KOMPLETT DEAKTIVIEREN, indem man die „PriorityNo“ auf „0“ setzt (da ja nur Kategorien mit „PriorityNo > 0“ durchlaufen werden) !
2.) Die Abarbeitung einer konkreten „SurchargeTypeCategory“ erfolgt dann nach folgendem Muster :
a) Falls durch entsprechende Konfiguration in „Settings“ zum Schlüssel „Fire_ac_om_GetTrolleyOrOrderSurch_SurCatIDs_before“ die („customize“bare) Prozedur „_ac_om_GetTrolleyOrOrderSurch“ aufgerufen werden soll, erfolgt ein entsprechender Aufruf.
b) Sofern…
UND
UND
… erfolgt die Standard-Berechnung der „Surcharges“ für die aktuelle Kategorie
c) Wenn nun (nach der erfolgten Standard-Berechnung) durch entsprechende Konfiguration in „Settings“ zum Schlüssel „Fire_ac_om_GetTrolleyOrOrderSurch_SurCatIDs_after“ die („customize“bare) Prozedur „_ac_om_GetTrolleyOrOrderSurch“ aufgerufen werden soll, erfolgt ein entsprechender Aufruf.
Hinweis: Ist für die aktuelle „SurchargeTypeCategory“ weder eine Standard-Prozedur bekannt noch der Aufruf von „_ac_om_GetTrolleyOrOrderSurch“ konfiguriert, passiert auch nichts (es gibt also nicht etwa einen Fehler).
3.) Hier eine Übersicht, bei welcher „SurchargeTypeCategory“ (in Klammern dahinter die ID) eine Standard-Behandlung grundsätzlich erfolgen kann, welche zusätzlichen Informationen bekannt sein müssen (damit dies auch geschehen kann) und evtl. Anmerkungen zum besseren Verständnis :
Es müssen keine weiteren Informationen vorliegen. Behandelt werden Rabatte, die entweder durch einen Gutschein zustande kommen (Voraussetzung dafür ist ein vorheriger om_ValidateVoucherCode_Pu-Aufruf) oder (wenn in „Settings“ zum Schlüssel „CampaignSurchargesEnabled“ der Wert „1“ konfiguriert ist) die durch Verkaufs-Aktionen gewährt werden.
s. Anmerkung „Relative Rabatte“
Behandlung kann nur erfolgen, wenn „ShippingTypeID“ bekannt ist.
Behandlung kann nur erfolgen, wenn „PaymentTypeID“ bekannt ist
Eine solche Verrechnung kann nur stattfinden, wenn…
(i) „PersonID“ angegeben wurde
(ii) „UseCashAccount_MaxValue“ entweder „> 0“ oder „= -1“ enthält
HTTP-Method | GET |
HTTP-Auth | Optional |
Tags | |
Engine-Kategorie | order management |
Engine-Typ | Daten-Ermittlung |
Letzte Aktualisierung | 7.0.7 (2015-01-29) |
Name 1) | Standard-Wert | Beschreibung 2) | SQL-Datentyp3) | ab Version |
---|---|---|---|---|
UniqueID | Eindeutige ID eines Besuchers (aus „Visitors“), zu dessen „Warenkorb“ sämtliche Rabatte und Aufschläge („Surcharges“) ermittelt werden sollen | varchar(50) | 6.0.2 | |
GrossSum | NULL | Brutto-Warenwert des Warenkorbes des durch „UniqeID“ angegebenen Besuchers. Falls „NULL“ für diesen Parameter UND „NetSum“ angegeben ist, erwarten wir die Daten in der Input-Schnittstelle (s. „OutputIntoTrolleySurchInterf“ von om_GetTrolley_Pu). | decimal(16,6) | 6.0.2 |
NetSum | NULL | Netto-Warenwert des Warenkorbes des durch „UniqeID“ angegebenen Besuchers. Falls „NULL“ für diesen Parameter UND „GrossSum“ angegeben ist, erwarten wir die Daten in der Input-Schnittstelle (s. „OutputIntoTrolleySurchInterf“ von om_GetTrolley_Pu). | decimal(16,6) | 6.0.2 |
CurrencyID | ID einer Währung („UnitID“ aus der Kategorie „Währung“), in der der Warenwert (Parameter „…Sum“ bzw. Input-Schnittstelle) angegeben ist und in der auch die „Surcharges“ zu berechnen sind | tinyint | 6.0.2 | |
PersonID | NULL | ID einer Person, die voraussichtlich Auftraggeber sein wird (kann „NULL“ sein). Benötigt wird diese Information, um Guthaben verrechnen zu können (s. Parameter „UseCashAccount_MaxValue“). Falls angegeben, muß die Person „UniqueID“ zugeordnet sein ! | integer | 6.0.2 |
DeliveryPersonID | NULL | ID einer Person, die voraussichtlich Lieferanschrift sein wird (kann „NULL“ sein) | integer | 6.0.2 |
ShippingTypeID | NULL | ID einer Versandart, mit der die Ware ausgeliefert werden soll (kann „NULL“ sein). Diese Information wird benötigt, um „Surcharges“ der Kategorie „Versandkosten“ bestimmen zu können. | tinyint | 6.0.2 |
PaymentTypeID | NULL | ID einer Zahlungsart, mit der die Ware bezahlt werden soll (kann „NULL“ sein). Diese Information wird benötigt, um „Surcharges“ der Kategorie „Zahlungskosten“ bestimmen zu können. | tinyint | 6.0.2 |
UseCashAccount_MaxValue | NULL | Maximaler Betrag, der vom Guthaben-Konto von „PersonID“ (muß natürlich angegeben sein) eingelöst werden soll. Muß „NULL“ oder „0“ (für keine Verrechnung) oder aber entweder „> 0“ oder „= -1“ („-1“ bedeutet „soviel Guthaben wie möglich einlösen“) sein. | money | 6.0.2 |
SplitByTaxes | 0 | Soll das Ergebnis nach Steuersätzen aufgeschlüsselt werden ? - „0“ : Nein, nur eine Summe pro „Surcharge“-Position - „1“ : Ja Anmerkung : Sinn macht „1“ nur, wenn der Warenwert nach Steuersätzen aufgeschlüsselt ist. | bit | 6.0.2 |
Spaltenname | Beschreibung | SQL-Datentyp4) | ab Version |
---|---|---|---|
PositionNo | (Eindeutige) Positions-Nummer eines „TrolleySurcharges“. Gibt die Reihenfolge an, in der die „Surcharges“ errechnet wurden. Hinweis : Es gibt einen Datensatz mit „0“ für eine „Kopf“- und „255“ für eine „Summen“-Zeile. | tinyint | 6.0.2 |
SurchargeTypeID | Die ID einer Aufschlags- bzw. Rabattart wie z.B. „Versandkosten“, „Rabatt“, „Nachnahmegebühr“ o.ä. | smallint | 6.0.2 |
SurchargeTypeDescription | Bezeichnung der „SurchargeTypeID“ | varchar(100) | 6.0.2 |
AbsoluteGrossSurcharge | BRUTTO-Abschlag oder -Aufschlag in der durch „CurrencyID“ angegebenen Währung | money | 6.0.2 |
AbsoluteNetSurcharge | NETTO-Abschlag oder -Aufschlag in der durch „CurrencyID“ angegebenen Währung | money | 6.0.2 |
AppliedSurchargeValue | Der zur Berechnung herangezogene Wert (wie dieser zu verstehen ist, also z.B. in welcher Einheit - Währung oder Prozent - ist ja zur „SurchargeTypeID“ hinterlegt und wird nicht nochmal explizit angegeben) | decimal(16,6) | 6.0.2 |
SurchargeAppliedOnGrossSum | Auf welchen Brutto-Wert der „Surcharge“ angewandt wurde. Grund für diese Information ist, daß ein „Surcharge“ auf den Warenwert plus „Surcharges“ mit höherer Priorität (s. z.B. „PriorityNo“ von om_GetSurchargeTypeCategories) angewendet wird. | money | 6.0.2 |
SurchargeAppliedOnNetSum | Auf welchen Netto-Wert der „Surcharge“ angewandt wurde. Grund für diese Information ist, daß ein „Surcharge“ auf den Warenwert plus „Surcharges“ mit höherer Priorität (s. z.B. „PriorityNo“ von om_GetSurchargeTypeCategories) angewendet wird. | money | 6.0.2 |
SurchargeGeneratedByCampIDs | Liste von „CampaignID“s, die den „Surcharge“-Wert mitbestimmt, d.h. die einen Rabatt bewirkt haben (z.B. ein Rabatt auf Versandkosten oder ein Gesamt-Auftrags-Rabatt) | varchar(255) | 7.0.0 |
(parameterunabängige Sortierung)
Spaltenname | Beschreibung | SQL-Datentyp5) | ab Version |
---|---|---|---|
PositionNo | (Eindeutige) Positions-Nummer eines „TrolleySurcharges“. Gibt die Reihenfolge an, in der die „Surcharges“ errechnet wurden. Hinweis : Es gibt einen Datensatz mit „0“ für eine „Kopf“- und „255“ für eine „Summen“-Zeile. | tinyint | 6.0.2 |
SurchargeTypeID | Die ID einer Aufschlags- bzw. Rabattart wie z.B. „Versandkosten“, „Rabatt“, „Nachnahmegebühr“ o.ä. | smallint | 6.0.2 |
SurchargeTypeDescription | Bezeichnung der „SurchargeTypeID“ | varchar(100) | 6.0.2 |
TaxesMultiplier | Mehrwertsteuer als „Multiplikator“, die auf die Netto-Kosten „AbsoluteNetSurcharge“ angewendet wurden, um die Brutto-Kosten „AbsoluteGrossSurcharge“ zu erhalten. D.h. beträgt die Mehrwertsteuer z.B. „19%“, steht hier der Wert „1.19“. | decimal(16,6) | 6.0.2 |
AbsoluteGrossSurcharge | BRUTTO-Abschlag oder -Aufschlag in der durch „CurrencyID“ angegebenen Währung | money | 6.0.2 |
AbsoluteNetSurcharge | NETTO-Abschlag oder -Aufschlag in der durch „CurrencyID“ angegebenen Währung | money | 6.0.2 |
SurchargeGeneratedByCampIDs | Liste von „CampaignID“s, die den „Surcharge“-Wert mitbestimmt, d.h. die einen Rabatt bewirkt haben (z.B. ein Rabatt auf Versandkosten oder ein Gesamt-Auftrags-Rabatt) | varchar(255) | 7.0.0 |
(parameterunabängige Sortierung)
Die Prozedur hat keine Output-Parameter.
Code | Beschreibung | Quelle 6) |
---|---|---|
-1323 | Die Person besitzt kein Konto zum angegebenen Typ | nur indirekt |
-1204 | Fehlender oder falscher Eintrag in CampaignSettings | nur indirekt |
-655 | Die VisitorID steht nicht mit der PersonID in Verbindung | nur direkt |
-621 | Fehlender oder falscher Eintrag in PersonTypeSettings | nur indirekt |
-569 | Der Benutzer hat kein Ausführungsrecht für die Prozedur | nur indirekt |
-567 | Die Prozedur darf z. Zt. nicht ausgeführt werden | nur indirekt |
-566 | Die Prozedur darf mit den übergebenen Parametern nicht ausgeführt werden | nur indirekt |
-550 | Fehlender oder falscher Eintrag in Settings | nur indirekt |
-540 | Falsches Format | nur indirekt |
-535 | Das Datum liegt nicht in der Vergangenheit | nur indirekt |
-530 | Der Wert ist nicht konvertierbar | nur indirekt |
-510 | Der Benutzer ist nicht registriert | nur indirekt |
-507 | Fehlerhafte Implementierung einer Prozedur - Daten in einem Ausgabeparameter sind ungültig | nur indirekt |
-506 | Fehlerhafte Implementierung einer Prozedur - Daten in der Output-Schnittstelle sind ungültig | nur indirekt |
-504 | Es ist ein Problem aufgetreten, das nicht gelöst werden kann, Prozedur wird daher abgebrochen | nur indirekt |
-503 | Fehlerhafte Daten in einer Tabelle - genauere Fehlermeldung auf der Standardausgabe | nur indirekt |
-502 | Die Parameter-Werte der Prozedur können nicht verarbeitet werden (kein passendes Trennzeichen) | nur indirekt |
-500 | Falsche Parameter | direkt und indirekt |
-385 | Die Brutto-Summe aus Warenwert plus Surcharges unterschreitet den vorgegebenen Mindestwert | nur indirekt |
-333 | Ein benötigter Steuersatz ist nicht bekannt oder konnte nicht ermittelt werden | nur indirekt |
-283 | Der Benutzer hat keine Berechtigung, Eigenschaften zu diesem(n) Merkmal(en) zu ermitteln | nur indirekt |
-221 | Es konnte kein rekursives Merkmal mit der Standardwährung als Einheit ermittelt werden | nur indirekt |
Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.
7.0.7 | 2015-01-29 | „Start-/Finish-Procedure“-Logik eingebaut, s. Ticket #3670 |
7.0.0 | 2013-06-04 | 1. Ab jetzt wird eine Liste von „CampaignID“s [in der neuen Tabelle „UsedCampaignsPerTrolley“] gepflegt, die die ermittelten „Surcharges“ bestimmt/beeinflußt haben [s. Ticket #3343] 2. Neue Rückgabespalte „SurchargeGeneratedByCampIDs“ |
6.5.0 | 2012-09-17 | Änderung der Doku, welche Prozeduren bei welcher „SurchargeTypeCategoryID“ aufgerufen werden [wg. der Tatsache, daß nun auch „Surcharges“ durch Verkaufs-Aktionen möglich sind] |
6.0.2 | 2011-06-08 | Erstmalig in dieser Version erstellt |
Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:
Unformatierte Ausgabe:
curl -X GET 'http://<partner>-<project>.dstore.de/default/engine/om_GetTrolleySurcharges_Pu?UniqueID=<value>&CurrencyID=<value>'
Mit xmllint 7) formatierte Ausgabe:
curl -X GET 'http://<partner>-<project>.dstore.de/default/engine/om_GetTrolleySurcharges_Pu?UniqueID=<value>&CurrencyID=<value>' | xmllint --format -
use dStore_php\WebService; $service = new WebService\Service( WebService\Scheme::HTTP,'<partner>-<project>.dstore.de', 80); $request = new WebService\Requests\Engine\Procedure\Request( new WebService\Requests\AccessData('default'), 'om_GetTrolleySurcharges_Pu', array( 'UniqueID' => '<value>', 'CurrencyID' => <value>, // 'GrossSum' => NULL, // 'NetSum' => NULL, // 'PersonID' => NULL, // 'DeliveryPersonID' => NULL, // 'ShippingTypeID' => NULL, // 'PaymentTypeID' => NULL, // 'UseCashAccount_MaxValue' => NULL, // 'SplitByTaxes' => 0 ) ); $service->execute($request); $xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument(); $ResultSet = $xml_result->getRowsAsArray();
XML zur Ausführung mit der Methode engine/execute, z.B. per
curl --header 'Content-Type: application/xml' -X POST 'http://<partner>-<kunde>.dstore.de/default/engine/execute' -d '<xml-daten>'
<?xml version="1.0" encoding="UTF-8"?> <ListOfBatches> <Batch No="0"> <Procedure Name="om_GetTrolleySurcharges_Pu"> <Parameters> <Parameter Name="UniqueID"><!-- varchar value --></Parameter> <Parameter Name="CurrencyID"><!-- tinyint value --></Parameter> <!-- <Parameter Name="GrossSum">NULL</Parameter> --> <!-- <Parameter Name="NetSum">NULL</Parameter> --> <!-- <Parameter Name="PersonID">NULL</Parameter> --> <!-- <Parameter Name="DeliveryPersonID">NULL</Parameter> --> <!-- <Parameter Name="ShippingTypeID">NULL</Parameter> --> <!-- <Parameter Name="PaymentTypeID">NULL</Parameter> --> <!-- <Parameter Name="UseCashAccount_MaxValue">NULL</Parameter> --> <!-- <Parameter Name="SplitByTaxes">0</Parameter> --> </Parameters> </Procedure> </Batch> </ListOfBatches>