public function execute()
 {
     $criteria = new Criteria(['owner' => $this->user], null, null, null);
     $items = $this->basketRepository->findByCriteria($criteria);
     $order = $this->orderRepository->findActive();
     $connection = $this->entityManager->getConnection();
     $connection->beginTransaction();
     try {
         $orderItems = [];
         foreach ($items as $item) {
             /** @var Basket $item */
             $previousOrderItem = $this->orderItemRepository->findOneByCriteria(new Criteria(['owner' => $item->getOwner(), 'product' => $item->getProduct()]));
             if ($previousOrderItem) {
                 /** @var OrderItem $orderItem */
                 $orderItem = $previousOrderItem;
                 $orderItem->increaseQuantityBy($item->getQuantity());
             } else {
                 $orderItem = OrderItem::createFromBasket($item, $order);
             }
             $this->entityManager->persist($orderItem);
             $this->entityManager->remove($item);
             $orderItems[] = $orderItem;
         }
         $this->entityManager->flush();
         $connection->commit();
     } catch (\Exception $e) {
         $connection->rollBack();
         return $e->getMessage();
     }
 }
Example #2
0
 /**
  * @Given /^in order there is item with (\d+) products$/
  */
 public function inOrderThereIsItemWithProducts($quantity)
 {
     $order = $this->getParameterBag()->get('order');
     $product = $this->getParameterBag()->get('product');
     $owner = $this->getParameterBag()->get('user');
     $basket = new Basket();
     $basket->setProduct($product);
     $basket->setOwner($owner);
     $basket->setQuantity($quantity);
     $orderItem = OrderItem::createFromBasket($basket, $order);
     $this->getEntityManager()->persist($orderItem);
     $this->getEntityManager()->flush();
 }