custom/plugins/WbfkDigitalInvoice64/src/Core/Checkout/CartOrderRouteDecorator.php line 91

Open in your IDE?
  1. <?php
  2. /**
  3. * WBFK OG
  4. * Copyright (c) 2024 WBFK OG
  5. *
  6. * @copyright Copyright (c) 2024 WBFK OG (https://wbfk.at)
  7. * @author WBFK OG <info@wbfk.at>
  8. */
  9. declare(strict_types=1);
  10. namespace Wbfk\DigitalInvoice\Core\Checkout;
  11. use Shopware\Core\Checkout\Cart\Cart;
  12. use Shopware\Core\Checkout\Cart\Order\CartConvertedEvent;
  13. use Shopware\Core\Checkout\Cart\Order\OrderConvertedEvent;
  14. use Shopware\Core\Checkout\Cart\SalesChannel\AbstractCartOrderRoute;
  15. use Shopware\Core\Checkout\Cart\SalesChannel\CartOrderRouteResponse;
  16. use Shopware\Core\Framework\Struct\ArrayStruct;
  17. use Shopware\Core\Framework\Validation\DataBag\RequestDataBag;
  18. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. use Wbfk\DigitalInvoice\Entity\Customer\WbfkInvoiceDetailsCustomerExtensionEntity;
  21. use Wbfk\DigitalInvoice\Entity\Order\WbfkInvoiceDetailsOrderExtension;
  22. use Wbfk\DigitalInvoice\Entity\Order\WbfkInvoiceDetailsOrderExtensionEntity;
  23. use Wbfk\DigitalInvoice\Service\Utils\Utils;
  24. class CartOrderRouteDecorator extends AbstractCartOrderRoute implements EventSubscriberInterface
  25. {
  26. public function __construct(
  27. private readonly AbstractCartOrderRoute $decorated
  28. ) {
  29. }
  30. public static function getSubscribedEvents(): array
  31. {
  32. return [
  33. CartConvertedEvent::class => 'addDigitalInvoiceDataToOrder',
  34. OrderConvertedEvent::class => 'addDigitalInvoiceDataToCart',
  35. ];
  36. }
  37. public function getDecorated(): AbstractCartOrderRoute
  38. {
  39. return $this->decorated;
  40. }
  41. public function order(Cart $cart, SalesChannelContext $context, RequestDataBag $data): CartOrderRouteResponse
  42. {
  43. $this->addAdditionalDataToCartSendFromConfirmationPage($cart, $data, $context);
  44. return $this->decorated->order($cart, $context, $data);
  45. }
  46. private function addAdditionalDataToCartSendFromConfirmationPage(Cart $cart, RequestDataBag $data, SalesChannelContext $context): void
  47. {
  48. /** @var ?WbfkInvoiceDetailsCustomerExtensionEntity $customerDigInvoiceData */
  49. $customerDigInvoiceData = $context->getCustomer()?->getExtension('wbfkInvoiceDetailsCustomerExtension');
  50. $additionalData = new ArrayStruct([
  51. "invoiceType" => Utils::trimNull($data->get("wbfkDigitalInvoiceType")),
  52. 'bt10' => Utils::trimNull($data->get("wbfkDigitalInvoiceBt10")),
  53. 'bt11' => Utils::trimNull($data->get("wbfkDigitalInvoiceBt11")),
  54. 'bt12' => Utils::trimNull($data->get("wbfkDigitalInvoiceBt12")),
  55. 'bt13' => Utils::trimNull($data->get("wbfkDigitalInvoiceBt13")),
  56. 'invoicePortalUrl' => Utils::trimNull($data->get("wbfkDigitalInvoicePortalUrl")),
  57. 'internalComment' => Utils::trimNull($data->get("internalComment")) ?? $customerDigInvoiceData?->getInternalComment(),
  58. ]);
  59. $cart->addExtension(WbfkInvoiceDetailsOrderExtension::NAME, $additionalData);
  60. }
  61. public function addDigitalInvoiceDataToOrder(CartConvertedEvent $event): void
  62. {
  63. $cart = $event->getCart();
  64. $convertedCart = $event->getConvertedCart();
  65. /** @var ?ArrayStruct $digitalInvoiceData */
  66. $digitalInvoiceData = $cart->getExtension(WbfkInvoiceDetailsOrderExtension::NAME);
  67. if (!$digitalInvoiceData) {
  68. return;
  69. }
  70. $convertedCart['extensions'] = $convertedCart['extensions'] ?? [];
  71. $convertedCart['extensions'][WbfkInvoiceDetailsOrderExtension::NAME] = $digitalInvoiceData->all();
  72. $event->setConvertedCart($convertedCart);
  73. }
  74. public function addDigitalInvoiceDataToCart(OrderConvertedEvent $event): void
  75. {
  76. /** @var WbfkInvoiceDetailsOrderExtensionEntity $digitalInvoiceData */
  77. $digitalInvoiceData = $event->getOrder()->getExtension(WbfkInvoiceDetailsOrderExtension::NAME);
  78. if (!$digitalInvoiceData) {
  79. return;
  80. }
  81. $convertedCart = $event->getConvertedCart();
  82. $convertedCart->addExtension(WbfkInvoiceDetailsOrderExtension::NAME, new ArrayStruct(array_merge(
  83. $digitalInvoiceData->invoiceDataAsArray(),
  84. ["id" => $digitalInvoiceData->getId()]
  85. )));
  86. }
  87. }