Hallo zusammen, ich habe folgendes vor: Kunden soll es über den Kauf einer Kundenkarte (normaler Artikel) möglich sein die Artikel im Shop rabattiert zu erhalten. Dazu sind im Shop sind für Privatkunden 2 Preisgruppen/Kundengruppen definiert. Liegt im Warenkorb die Kundenkarte, werden die rabattierten Preise angezeigt. Dafür habe ich ein kleines Plugin geschrieben, was auch funktioniert. Dieses Plugin verändert, aber nur die Template-Variablen. Nun soll natürlich beim Bestellabschluss, die Bestellung mit den richtigen Preisen ausgeführt werden. Mein Ansatz dazu war, den Kunden vor Ausführung der Finish-Action in die entsprechende Kundengruppe zu verschieben. Um dies zu realisieren habe ich mich an diesem Plugin orientiert: http://wiki.shopware.com/Warenkorbprozess_detail_1031.html Mit Enlight\_Controller\_Action\_PreDispatch\_Frontend\_Checkout
prüfe ich vor der Ausführung der Finish-Action ob eine Kundenkarte im Warenkorb ist. Die Artikel im Warenkorb hole ich mir folgendermaßen: $sessionId = Shopware()-\>Session()-\>sessionId; $basket = Shopware()-\>Models()-\>getRepository('Shopware\Models\Order\Basket'); $articles = $basket-\>findBy(array('sessionId' =\> "$sessionId"));
Die Artikel werden überprüft und wenn die Karte im Warenkorb ist, ändere ich die Kundengruppe wie folgt: $customerResource = \Shopware\Components\Api\Manager::getResource('Customer'); $customer = $customerResource-\>getOne($customerId); $customer['groupKey'] = $pricegroup; // im Plugin definierte Preisgruppe $customerResource-\>update($customerId, $customer);
Das funktioniert auch alles soweit. Der Kunde ist in der entsprechende rabattierten Kundengruppe nach der Bestellung. Und auch nur wenn die Kundenkarte im Warenkorb liegt. Nur das die Bestellung trotzdem mit den Preisen der nicht rabattierten Preisgruppe durchgeführt wird. Ich habe zum testen, einmal willkürliche Preise während des Checkouts in die Tabelle s_order_basket geschrieben, was leider auch keinen Erfolg hatte. Ich hatte gehofft, das die Änderung der Kundengruppe als PreDispatch reicht, aber leider ist das nicht der Fall. Weiß jemand Rat? Grüße