Gutscheine - Prozentual / Fehler

Hallo, ich manipuliere bei Artikel den Preis. Leider wird bei den Gutscheinen (10%) der original Preis verwendet und nicht der errechnete Artikelpreis. Ich kann es mir aber nicht erklären. Ich habe in der sBaset - addVoucher mal eine Dumpausgabe eingebaut. [code] $sql = " SELECT s_order_basket.*, ad.packunit, ad.minpurchase,taxID,ad.instock AS instock, suppliernumber, ad.maxpurchase, ad.purchasesteps, ad.purchaseunit, ad.unitID, laststock, ad.shippingtime, ad.releasedate, ad.releasedate AS sReleaseDate,stockmin, su.description AS itemUnit, s_order_basket_attributes.attribute1 as ob_attr1, s_order_basket_attributes.attribute2 as ob_attr2, s_order_basket_attributes.attribute3 as ob_attr3, s_order_basket_attributes.attribute4 as ob_attr4, s_order_basket_attributes.attribute5 as ob_attr5, s_order_basket_attributes.attribute6 as ob_attr6 FROM s_order_basket LEFT JOIN s_articles_details AS ad ON ad.ordernumber = s_order_basket.ordernumber LEFT JOIN s_articles a ON (a.id = ad.articleID) LEFT JOIN s_core_units su ON su.id = ad.unitID LEFT JOIN s_order_basket_attributes ON s_order_basket.id = s_order_basket_attributes.basketID WHERE sessionID=? ORDER BY id ASC, datum DESC "; $sql = Enlight()->Events()->filter(‚Shopware_Modules_Basket_GetBasket_FilterSQL‘, $sql, array(‚subject‘=>$this)); echo "

"; var\_dump($sql); echo "

"; $getArticles = $this->sSYSTEM->sDB_CONNECTION->GetAll($sql,array($this->sSYSTEM->sSESSION_ID)); echo "


"; echo "

"; var\_dump($getArticles); echo "

"; [/code] Interessant ist, schau ich direkt in die DB s_basket_oder, so ist der korrekte Preis im Gutschein Datensatz hinterlegt. Frage ich die SQL Query direkt in der DB ab, so erhalten ich auch den Datensatz mit dem korrekten Preis. Schaut man sich aber die Ausgabe von $getArticles aus, so habe ich hier nun den falschen Preis im Gutschein. Warum? Wann oder wie wird der Preis geändert. Zu ‚Shopware_Modules_Basket_GetBasket_FilterSQL‘ kann ich keinerlei Infos finden. Ihr könnt dies gerne mal hier Testen. Artikel mit Maß 100 x 100 in den Warenkorb legen. Dann den Warekorb anschauen und einen Gutschein ‚aaa‘ hinzufügen. Dann seht ihr die Ausgabe unten… http://demoshop.vicasy.de/sommerwelten/ … tuch-ibiza Der Artikel kostet 105€. In der DB ist der Gutschein mit -10.50 enthalten. Die Ausgabe im Frontend ist aber 2 € Warum? Danke für eure Tipps.

Moin, da gibt es einen Warenkorbfehler!! Und man kann die Artikelanzahl im WK nicht ändern.

Hi Petra, das mit der Artikelanzahl ändern ist Absicht. Das geht nicht! Fehler sollte es keinen geben, dass sind nur alles DUMP Ausgaben.

Schieb

Guten Morgen, wenn man einen weiteren Artikel in den Warenkorb legt funktioniert der Gutschein wieder korrekt. Der Gutschein bezieht sich anscheinend auf deinen „Basispreis“. Dieser liegt glaube ich bei dem Strandtuch bei 19.99€, oder? Du greifst mit deiner Preismanipulation nicht auf Varianten oder ähnliches zu, oder? An der Stelle wo die Preise im Frontend von dir geändert werden scheint etwas nicht so zu laufen wie Shopware es erwartet. Ich bin leider kein Programmierer, ich kann dir daher nicht mehr sagen. Vielleicht postest du hier einmal deine Preismanipulation. Oder Teile davon. Eventuell kann dir dann weiter geholfen werden. Gruß Patrick

Hi Patrick, danke für deine AW. Der preis wird mi Prinzip manipuliert, wenn der Artikel in den Warekorb gelegt wird. Sprich s_oder_basket (add und update) Hier dann der price und nettoprice. Daher verstehe ich es auch nicht. Wenn ich in der DB s_order_basket schaue, wird der korrekte Preis angezeit. In der Programmierung sind es 2 Befehle. Es kann doch nicht sein, dass das gleiche SQL Query direkt auf dem Server ein korrektes Ergebnis hat und über den SW Code nicht. Da wird ja nichts gechached. Ich verstehe echt die Welt nicht mehr. Wie gesagt, die Manipulation beschränkt sich nur auf die Basket Tabelle. Ich bin für jeden Tipp dankbar.

Kannst du den Code von deiner Preismanipulation mal einstellen? Also die Event-Listener dazu?

Ja klar, Hier eine verkürzte version: $event = $this-\>createHook('sBasket', 'sUpdateArticle', 'onBasket\_UpdateArticle\_After', Enlight\_Hook\_HookHandler::TypeAfter, 0 ); $this-\>subscribeHook($event); /\*\* \* onBasket\_UpdateArticle\_After \* Update table s\_order\_basket with calculated values \* @static \* @return unknown \*/ static function onBasket\_UpdateArticle\_After (Enlight\_Hook\_HookArgs $args) { $sql = "UPDATE s\_order\_basket SET ordernumber=? WHERE ordernumber=?"; Shopware()-\>Db()-\>query($sql, array(self::$articleOrderNumber . ' ' . self::$variantId, self::$articleOrderNumber)); $id = $args-\>getId(); $quantity = $args-\>getQuantity(); $session = $args-\>getSubject()-\>sSYSTEM-\>sSESSION\_ID; //Preis ermittlung $nettoprice = $price / 1.19; // Preis und Menge in Datenbank anpassen $sql = "UPDATE s\_order\_basket SET quantity=?, price=?, netprice=? WHERE id=? AND sessionID=? AND modus=0"; Shopware()-\>Db()-\>query($sql,array( $quantity, $price, $nettoprice, $id, $session )); $basketID= Shopware()-\>Db()-\>fetchOne('Select id from s\_order\_basket WHERE id='.$id.' and sessionID="'.$session.'"'); $sql = "UPDATE s\_order\_basket\_attributes SET attribute5=?, attribute6=? WHERE basketID=?"; Shopware()-\>Db()-\>query($sql,array( $matName, $convertingName, $basketID )); }

Der Gutschein wird wohl berechnet bevor ich den Preis manipuliere…

Hi, genau dasselbe Problem habe ich mit mein Plugin gerade auch. Ich habe auch ein eigenständigen Artikel der ein Preis von 1,00 € im Backend hat. Binde ich nun mein Artikel in den Warenkorb ein und manipuliere den Preis wird dennoch für den Gutschein der Grundpreis des Artikels genommen und nicht den der eigentlich errechnet(manipuliert) wurde. Ich suche jetzt schon seit ca. 3 Std. verzweifelt in dem Shopware Code wo nun genau die Definition des Gutscheins ist. Mein aktueller Stand ist der das in der Datei /engine/core/class/sBasket.php Zeile 592 vermutlich der Fehler steckt. Die funktion $amount = $this->sGetAmountArticles(); ruft den Preis ab. Wenn ich dies mir mit ein Standard Artikel ausgeben lasse erhalte ich immer einen einheitlichen Wert vom Artikel. Wenn ich dies aber mit mein Selbst generierten Artikel ausgeben lasse erhalte ich unterschiedliche Werte. Einmal den Korrekten und einmal mit dem falschen Wert(Artikel-Preis=1,00). Leider wird dann der falsche wert genutzt warum auch immer. Wenn ich diesen Wert manuell fest definiere ist alles fine. Hat dazu jemand neh Idee?

Ich habe die Lösung, da ich dies bei meinem Flächenplugin auch habe. Kann euch leider erst nächset Woche die Lösung anbieten, da ich unterwegs zur Messe bin. Falls man sich dort sieht, erkläre ich es gerne :slight_smile:

Ein Denkansatz wäre schön, wir haben damit gegenwärtig große Probleme.

install $event = $this-\>createHook('sBasket', 'sAddVoucher', 'onBasket\_sAddVoucher\_Before', Enlight\_Hook\_HookHandler::TypeBefore, 0 ); $this-\>subscribeHook($event); $event = $this-\>createHook('sBasket', 'sUpdateVoucher', 'onBasket\_sUpdateVoucher\_Before', Enlight\_Hook\_HookHandler::TypeBefore, 0 ); $this-\>subscribeHook($event); in den beiden Funktionen müsst ihr dann die Manipulation des Preises machen, welche normalerweise erst im Nachinein gemacht werden.

1 „Gefällt mir“

Leider bringt mich dies nicht so recht weiter. Bei den genannten funktionen wird ja nichts weiter übergeben. Wie kann ich da dann den Preis manipulieren?

[quote=„fulltime“]Leider bringt mich dies nicht so recht weiter. Bei den genannten funktionen wird ja nichts weiter übergeben. Wie kann ich da dann den Preis manipulieren?[/quote] Hi Patrick, lass und nächste Woche mal telefonieren, dann zeig ich es dir wie ich es bei mir mache. Bin jetzt unterwegs nach Ahaus.