Bestellung Kommentar setzen (Event) vor Speichern

Hallo,

wir möchten gern bei jeder Bestellung automatisch noch einen Kommentar dazuspeichern, der sich aus Freitextfeldern in der Confirm-Form bezieht.

Dafür müssen wir uns natürlich an ein Event oder eine Art Hook wie aus SW5 hängen.

Leider habe ich hier nur ein Event gefunden, das in Zusammenhang mit dem Bestellung-Speichern steht. Wie ich das sehe gibt es nur den Einstiegspunkt über CheckoutController::order

CheckoutController

    public function order(RequestDataBag $data, SalesChannelContext $context, Request $request): 
    Response
    {
        [...]

        try {
            $orderId = $this->orderService->createOrder($data, $context);
            $this->addAffiliateTracking($orderId, $request, $context);
            $finishUrl = $this->generateUrl('frontend.checkout.finish.page', [
                'orderId' => $orderId,
            ]);

            $response = $this->paymentService->handlePaymentByOrder($orderId, $data, $context, $finishUrl);

            if ($response !== null) {
                return $response;
            }

            return new RedirectResponse($finishUrl);
        } 

        [...]

        return $this->forwardToRoute('frontend.checkout.confirm.page', ['formViolations' => $formViolations]);
    }

landet dann hier in OrderService.php

    public function createOrder(DataBag $data, SalesChannelContext $context): string
    {
        $this->validateOrderData($data, $context);

        $cart = $this->cartService->getCart($context->getToken(), $context);

        return $this->cartService->order($cart, $context);
    }

und dann wiederum hier:

    public function order(Cart $cart, SalesChannelContext $context): string
    {
        [...]

        $orderEntity->setOrderCustomer(
            $this->fetchCustomer($orderEntity->getId(), $context->getContext())
        );

        $orderPlacedEvent = new CheckoutOrderPlacedEvent(
            $context->getContext(),
            $orderEntity,
            $context->getSalesChannel()->getId()
        );

        $this->eventDispatcher->dispatch($orderPlacedEvent);

        $this->persister->delete($context->getToken(), $context);
        unset($this->cart[$calculatedCart->getToken()]);

        return $orderId;
    }

 

in der letzten Methode wird ein Event dispatched: CheckoutOrderPlacedEvent

aber das ist ja bereits NACH dem Speichern. Natürlich könnte man sich daran hängen und dann den Kommentar in die Datenbank schieben, aber dann steht er nicht in der Bestellbestätigungs-Mail, welche ja auch durch dieses Event getriggert wird…

Außerdem habe ich in diesem Event ja dann keinen Zugriff mehr auf den Inhalt des Confirm-Formulares …

 

hat jemand eine Lösung? Es gibt wohl noch zu wenig Event/Hook-Möglichkeiten…

Moin, lang lang ists her, aber hast du eine Lösung gefunden?

Ich würde gerne ein Lieferdatum in eine bereits angelegte Order-Extension-Tabelle speichern und ähnlich wie bei dir wäre es sehr gut, wenn das vor dem Mailversand passieren würde. Auch sehe ich im Moment Probleme damit die Daten über den checkout zu sichern.