Skip to content
Snippets Groups Projects

Issue #3354174: Add ability to apply custom logic for order item cloning and availability checking.

Open Issue #3354174: Add ability to apply custom logic for order item cloning and availability checking.
4 files
+ 139
5
Compare changes
  • Side-by-side
  • Inline
Files
4
@@ -2,6 +2,9 @@
namespace Drupal\commerce_repeat_order\Controller;
use Drupal\commerce_repeat_order\Event\OrderItemAvailabilityEvent;
use Drupal\commerce_repeat_order\Event\OrderItemCloneEvent;
use Drupal\commerce_repeat_order\Event\CommerceOrderRepeatEvents;
use Drupal\Core\Controller\ControllerBase;
use Drupal\commerce_cart\CartManager;
use Drupal\commerce_cart\CartProvider;
@@ -75,10 +78,10 @@ class CommerceRepeatOrder extends ControllerBase {
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('commerce_cart.cart_manager'),
$container->get('commerce_cart.cart_provider'),
$container->get('messenger'),
$container->get('event_dispatcher')
$container->get('commerce_cart.cart_manager'),
$container->get('commerce_cart.cart_provider'),
$container->get('messenger'),
$container->get('event_dispatcher')
);
}
@@ -112,12 +115,16 @@ class CommerceRepeatOrder extends ControllerBase {
/** @var \Drupal\commerce_product\Entity\ProductVariationInterface $variation */
$variation = $order_item->getPurchasedEntity();
$product = $variation ? $variation->getProduct() : NULL;
if ($product && $product->isPublished()) {
$availability_event = new OrderItemAvailabilityEvent($order_item);
$this->dispatcher->dispatch($availability_event, CommerceOrderRepeatEvents::ORDER_ITEM_AVAILABILITY_EVENT);
if ($product && $product->isPublished() && $availability_event->isAvailable()) {
/** @var \Drupal\commerce_order\Entity\OrderItemInterface $order_item_new */
$order_item_new = $order_item->createDuplicate();
$order_item_new->enforceIsNew();
$order_item_new->id = NULL;
$order_item_new->order_item_id = NULL;
$this->dispatcher->dispatch(new OrderItemCloneEvent($order_item, $order_item_new), CommerceOrderRepeatEvents::ORDER_ITEM_CLONE_EVENT);
$order_item_new->save();
// Adding order item in cart.
Loading