Hallo Zusammen,
soweit ich verstehe, Shopware speichert die Bestellung nachdem die Bezahlung erfolgreich durchgeführt wird. Ich brauche aber, dass die Bestellung sofort nach dem Klicken von „Kostenpflichtig bestellen“ gespeichert werden, also vor der Bezahlung. Wie könnte ich das erledigen?
LG
Im Controller für Payment ich habe das folgende gefunden:
$user = $this->getUser();
$basket = $this->getBasket();
$order = Shopware()->Modules()->Order();
$order->sUserData = $user;
$order->sComment = Shopware()->Session()->sComment;
$order->sBasketData = $basket;
$order->sAmount = $basket['sAmount'];
$order->sAmountWithTax = !empty($basket['AmountWithTaxNumeric']) ? $basket['AmountWithTaxNumeric'] : $basket['AmountNumeric'];
$order->sAmountNet = $basket['AmountNetNumeric'];
$order->sShippingcosts = $basket['sShippingcosts'];
$order->sShippingcostsNumeric = $basket['sShippingcostsWithTax'];
$order->sShippingcostsNumericNet = $basket['sShippingcostsNet'];
// I don't need this at this point: $order->bookingId = $transactionId;
$order->dispatchId = Shopware()->Session()->sDispatch; // DO I NEED THIS?
$order->sNet = empty($user['additional']['charge_vat']);
// I suppose I don't need this at this point: $order->uniqueID = $paymentUniqueId;
$order->deviceType = $this->Request()->getDeviceType();
$orderNumber = $order->sSaveOrder();
Kann ich das so bei Enlight_Controller_Action_PreDispatch_Frontend_Checkout vor paymentAction benutzen? Oder wie soll ich es anpassen?
Eigentlich habe ich eine etwa bessere option bei Shopware_Controllers_Frontend_Checkout::saveOrder() gefunden:
$order = Shopware()->Modules()->Order();
$order->sUserData = $this->View()->sUserData;
$order->sComment = isset($this->session['sComment']) ? $this->session['sComment'] : '';
$order->sBasketData = $this->View()->sBasket;
$order->sAmount = $this->View()->sBasket['sAmount'];
$order->sAmountWithTax = !empty($this->View()->sBasket['AmountWithTaxNumeric']) ? $this->View()->sBasket['AmountWithTaxNumeric'] : $this->View()->sBasket['AmountNumeric'];
$order->sAmountNet = $this->View()->sBasket['AmountNetNumeric'];
$order->sShippingcosts = $this->View()->sBasket['sShippingcosts'];
$order->sShippingcostsNumeric = $this->View()->sBasket['sShippingcostsWithTax'];
$order->sShippingcostsNumericNet = $this->View()->sBasket['sShippingcostsNet'];
$order->dispatchId = $this->session['sDispatch'];
$order->sNet = !$this->View()->sUserData['additional']['charge_vat'];
$order->deviceType = $this->Request()->getDeviceType();
return $order->sSaveOrder();
Wenn ich das an dem genannten Zeitpunkt verwende, zerstört das irgendwie das Checkout-Prozess irgendwo später?
Oder wäre es besser die oben genannte Methode einfach so aufrufen?
$controller = $args->get('subject');
$controller->saveOrder();
Hallo,
nein, falsch. Shopware speichert jede Bestellung immer sofort nach dem Klick auf “kostenpflichtig bestellen”. Die Stati, also Zahlungssatus und Bestellungsstatus ändern sich dann nur noch.
MFG
derwunner
@derwunner schrieb:
Hallo,
nein, falsch. Shopware speichert jede Bestellung immer sofort nach dem Klick auf „kostenpflichtig bestellen“. Die Stati, also Zahlungssatus und Bestellungsstatus ändern sich dann nur noch.
MFG
derwunner
Hier steht, dass OrderNumber wird normalerweise nur nach Bezahlung generiert und gespeichert. Und vor dem Zeitpunkt wird die Bestellung als temporär gespeichert, sodass sie im Backend unsichtbar ist.