<?php declare(strict_types=1);
namespace FTBPlugin\Subscriber;
use Shopware\Core\Checkout\Cart\Order\CartConvertedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class OrderSubscriber implements EventSubscriberInterface
{
private RequestStack $requestStack;
private $customerRepo;
public function __construct(RequestStack $requestStack, $customerRepo)
{
$this->requestStack = $requestStack;
$this->customerRepo = $customerRepo;
}
public static function getSubscribedEvents(): array
{
return [
CartConvertedEvent::class => 'loadConfirm',
];
}
/** Wenn der Kunde die Bestellung abschließt, wird der Ansprechpartner als Custom-Field an den Kunden gehängt.
* Es werden im Twig-Template (custom/plugins/FTBPlugin/src/Resources/views/storefront/page/checkout/confirm/index.html.twig)
* die Custom-Fields ausgegeben.
* gefüllt werden
* @param CartConvertedEvent $event
* @return void
*/
public function loadConfirm(CartConvertedEvent $event): void
{
// hole die abgeschickten Werte
$ls_AnsprechpartnerVorname = $this->requestStack->getCurrentRequest()->request->get('AnsprechpartnerVorname');
$ls_AnsprechpartnerNachname = $this->requestStack->getCurrentRequest()->request->get('AnsprechpartnerNachname');
$ls_AnsprechpartnerTelefonnummer = $this->requestStack->getCurrentRequest()->request->get('AnsprechpartnerTelefonnummer');
// hole den Kunden
$lo_customer = $event->getSalesChannelContext()->getCustomer();
// wenn das Feld des Ansprechpartners nicht NULL ist, update die Datenbank mit dem entsprechenden Wert (es wird
// upsert gewählt, sodass die Daten auf jeden Fall überschrieben werden
if ($ls_AnsprechpartnerVorname !== null) {
$this->customerRepo->upsert([['id' => $lo_customer->getId(), 'customFields' => ['AnsprechpartnerVorname' => strip_tags($ls_AnsprechpartnerVorname)]]], $event->getContext());
}
if ($ls_AnsprechpartnerNachname !== null) {
$this->customerRepo->upsert([['id' => $lo_customer->getId(), 'customFields' => ['AnsprechpartnerNachname' => strip_tags($ls_AnsprechpartnerNachname)]]], $event->getContext());
}
if ($ls_AnsprechpartnerTelefonnummer !== null) {
$this->customerRepo->upsert([['id' => $lo_customer->getId(), 'customFields' => ['AnsprechpartnerTelefonnummer' => strip_tags($ls_AnsprechpartnerTelefonnummer)]]], $event->getContext());
}
}
}