vendor/store.shopware.com/dreiscset/src/Subscriber/Events/CartConvertedEventSubscriber.php line 39

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace DreiscSet\Subscriber\Events;
  3. use DreiscSet\Core\Cart\LineItemFactoryHandler\DreiscSetItemLineItemFactory;
  4. use DreiscSet\Core\Cart\LineItemFactoryHandler\DreiscSetLineItemFactory;
  5. use DreiscSet\Core\SetOrder\SetOrderConfiguration\Struct\SetOrderConfigurationItemStruct;
  6. use Shopware\Core\Checkout\Cart\LineItem\LineItem;
  7. use Shopware\Core\Checkout\Cart\Order\CartConvertedEvent;
  8. use Shopware\Core\Checkout\Cart\Order\OrderConvertedEvent;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class CartConvertedEventSubscriber implements EventSubscriberInterface
  11. {
  12.     public static function getSubscribedEvents()
  13.     {
  14.         return [
  15.             CartConvertedEvent::class => 'onCartConvertedEvent',
  16.             OrderConvertedEvent::class => 'onOrderConvertedEvent',
  17.         ];
  18.     }
  19.     /**
  20.      * Is called, when the cart will convert to an order
  21.      *
  22.      * @param CartConvertedEvent $event
  23.      * @return void
  24.      */
  25.     public function onCartConvertedEvent(CartConvertedEvent $event)
  26.     {
  27.     }
  28.     /**
  29.      * Is called, when the order will convert back to a cart (recalculation)
  30.      *
  31.      * @param OrderConvertedEvent $event
  32.      * @return void
  33.      */
  34.     public function onOrderConvertedEvent(OrderConvertedEvent $event)
  35.     {
  36.     }
  37. //
  38. //    /**
  39. //     * Is called, when the cart will convert to an order
  40. //     *
  41. //     * @param CartConvertedEvent $event
  42. //     * @return void
  43. //     */
  44. //    public function onCartConvertedEvent(CartConvertedEvent $event)
  45. //    {
  46. //        return;
  47. //
  48. //        /** @var array{lineItems:string} $convertedCart */
  49. //        $convertedCart = $event->getConvertedCart();
  50. //
  51. //        /** Fetch all line item ids of sets */
  52. //        $dreiscSetLineItemIds = $this->fetchDreiscSetLineItemIds($convertedCart['lineItems']);
  53. //
  54. //        /** Abort, if there is no set in the cart */
  55. //        if(empty($dreiscSetLineItemIds)) {
  56. //            return;
  57. //        }
  58. //
  59. //        /** Iterate all sets and clean up the cart info */
  60. //        foreach($dreiscSetLineItemIds as $dreiscSetLineItemId) {
  61. //            $convertedCart['lineItems'] = $this->cleanUpSetChildren($dreiscSetLineItemId, $convertedCart['lineItems']);
  62. //        }
  63. //
  64. //        /** Update the converted cart */
  65. //        $event->setConvertedCart($convertedCart);
  66. //    }
  67. //
  68. //    /**
  69. //     * Is called, when the order will convert back to a cart (recalculation)
  70. //     *
  71. //     * @param OrderConvertedEvent $event
  72. //     * @return void
  73. //     */
  74. //    public function onOrderConvertedEvent(OrderConvertedEvent $event)
  75. //    {
  76. //        return;
  77. //        $convertedCart = $event->getConvertedCart();
  78. //
  79. //        /** Iterate all items to find the set items */
  80. //        /** @var LineItem $lineItem */
  81. //        foreach($convertedCart->getLineItems() as $lineItem) {
  82. //            /** Abort, if it´s not a set */
  83. //            if ($lineItem->getType() !== DreiscSetLineItemFactory::LINE_ITEM_TYPE) {
  84. //                continue;
  85. //            }
  86. //
  87. //            $lineItemPayload = $lineItem->getPayload();
  88. //            $lineItemPayload['originType'] = $lineItem->getType();
  89. //            $lineItem->setPayload($lineItemPayload);
  90. //
  91. //            $lineItem->setType(LineItem::PRODUCT_LINE_ITEM_TYPE);
  92. //        }
  93. //
  94. //        /** Update the converted cart */
  95. //        $event->setConvertedCart($convertedCart);
  96. //    }
  97. //
  98. //    /**
  99. //     * @param array $lineItems
  100. //     * @return array
  101. //     */
  102. //    private function fetchDreiscSetLineItemIds(array $lineItems): array
  103. //    {
  104. //        $dreiscSetLineItemIds = [];
  105. //
  106. //        /** @var array{id: string, type: string} $lineItem */
  107. //        foreach($lineItems as $lineItem) {
  108. //            if (DreiscSetLineItemFactory::LINE_ITEM_TYPE !== $lineItem['type']) {
  109. //                continue;
  110. //            }
  111. //
  112. //            $dreiscSetLineItemIds[] = $lineItem['id'];
  113. //        }
  114. //
  115. //        return $dreiscSetLineItemIds;
  116. //    }
  117. //
  118. //    /**
  119. //     * @param $dreiscSetLineItemId
  120. //     * @param $lineItems
  121. //     * @return array
  122. //     */
  123. //    private function cleanUpSetChildren($dreiscSetLineItemId, $lineItems): array
  124. //    {
  125. //        $filteredLineItems = [];
  126. //        $baseProduct = [];
  127. //
  128. //        /** Iterate the items to find the children of the set */
  129. //        /** @var array{type: string, parentId: string, identifier: string, referencedId: string, productId: string, payload: array} $lineItem */
  130. //        foreach($lineItems as $lineItem)
  131. //        {
  132. //            if (empty($lineItem['parentId']) || $lineItem['parentId'] !== $dreiscSetLineItemId) {
  133. //                /** No parent id is set or parent id does not match  */
  134. //                /** So it is not part of the set */
  135. //                $filteredLineItems[] = $lineItem;
  136. //
  137. //                continue;
  138. //            }
  139. //
  140. //            if (LineItem::PRODUCT_LINE_ITEM_TYPE === $lineItem['type']) {
  141. //                /** Backup the base product */
  142. //                $baseProduct = $lineItem;
  143. //
  144. //                /** We found the base product of the set, which we will remove */
  145. //                /** So we abort at this point */
  146. //                continue;
  147. //            }
  148. //
  149. //            if (in_array($lineItem['type'], [SetOrderConfigurationItemStruct::ITEM_TYPE__MAIN_PRODUCT, DreiscSetItemLineItemFactory::LINE_ITEM_TYPE], true))
  150. //            {
  151. //                /** We found the set main product or a child of the set, which we will convert to a product line item */
  152. //                /** Abort, if no product is set in the payload [@see DreiscSetLineItemService::addDreiscSetItems()] */
  153. //
  154. //                if (!empty($lineItem['payload']['productId'])) {
  155. //                    /** Backup the origin data */
  156. //                    $lineItem['payload']['originType'] = $lineItem['type'];
  157. //                    $lineItem['payload']['originIdentifier'] = $lineItem['identifier'];
  158. //                    $lineItem['payload']['originReferencedId'] = $lineItem['referencedId'];
  159. //
  160. //                    /** Set the type from "mainProduct" or "dreisc-set-item" to "product" */
  161. //                    $lineItem['type'] = LineItem::PRODUCT_LINE_ITEM_TYPE;
  162. //
  163. //                    /** Set the product id as in the shopware default */
  164. //                    $lineItem['identifier'] = $lineItem['payload']['productId'];
  165. //                    $lineItem['referencedId'] = $lineItem['payload']['productId'];
  166. //                    $lineItem['productId'] = $lineItem['payload']['productId'];
  167. //                }
  168. //            }
  169. //
  170. //            $filteredLineItems[] = $lineItem;
  171. //        }
  172. //
  173. //        /** Put the deleted base product and the converted flag to the set line item */
  174. //        foreach($filteredLineItems as &$filteredLineItem) {
  175. //            if ($dreiscSetLineItemId === $filteredLineItem['id']) {
  176. //                $filteredLineItem['payload']['converted'] = true;
  177. //                $filteredLineItem['payload']['baseProduct'] = $baseProduct;
  178. //            }
  179. //        }
  180. //
  181. //        return $filteredLineItems;
  182. //    }
  183. }