Hallo Zusammen,
ich verwende das Event “onPreDispatchCheckout”, um eine Anfrage an einen Lieferanten-Server zu schicken und dadurch sicherzustellen, dass die Bestellung vom Kunden erfüllbar ist. Abhängig von der Antwort setzte ich das Checkout-Prozess fort oder leite den Kunden wieder zum Confirm-Action um:
/**
* @param \Enlight_Event_EventArgs $args
*/
public function onPreDispatchCheckout(\Enlight_Event_EventArgs $args)
{
/** @var \Shopware_Controllers_Frontend_Checkout $controller */
$controller = $args->get('subject');
// as we only want to change the finishAction, check for it here
if ($controller->Request()->getActionName() !== 'finish') {
return;
}
$orderVariables = $this->container->get('session')->get('sOrderVariables')->getArrayCopy();
// check if order is Fullfillable
$orderFulfillable = $this->orderFulfillable($orderVariables);
if ($orderVariables && !$orderFulfillable) {
// if not valid, set orderUnfulfillable to true to display an error and return to confirm page
$orderVariables['orderFulfillable'] = false;
$this->View()->assign($orderVariables);
return $controller->forward('confirm');
}
// everything is ok, Shopware does its order stuff
}
Dabei muss ich an den Lieferanten einen eindeutigen Ordernummer für diese Bestellung schicken. Problematisch ist dabei, dass Shopware-Ordernummer wird erst viel später generiert und gespeichert. Ich kann also an dieser Stelle die Shopware-Ordernummer nich zugreifen. Von daher habe ich entschieden an diesem Zeitpunkt eine eigene Ordernummer zu erstellen. Dabei ist es problematisch diese eigene Ordernummer irgendwie so zu speichern, dass sie später automatisch im Datenbank gespeichert wird. Ich würde die In Attributen (“s_order_attributes” oder Shopware\Models\Attribute\OrderDetail) gerne speichern, aber an diesem Zeitpunkt ist das aus oben genannten Gründen kaum möglich.
Soweit sieht meine Funktion für Erzeugung von der eigenen Ordenummer so aus (sie wird von $this->orderFulfullable() aufgerufen):
private function getEETOrderNumber(){
$ordernumber = uniqid("eet_");
// HERE SOLL ICH SICHERSTELLEN, DASS $ordernummer SPÄTER FÜR DIESE BESTELLUNG GESPEICHERT WIRD
return $ordernumber;
}
Wie könnte ich das gedachte implementieren?