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(); } }
/** * @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(); }