/**
  * {@inheritdoc}
  */
 protected function addItem(Product $product, $entity, array $itemData = [])
 {
     if (!$entity instanceof RFPRequest) {
         return;
     }
     $requestProductItem = new RequestProductItem();
     $requestProduct = new RequestProduct();
     $requestProduct->setProduct($product)->addRequestProductItem($requestProductItem);
     if (array_key_exists(ProductDataStorage::PRODUCT_QUANTITY_KEY, $itemData)) {
         $requestProductItem->setQuantity($itemData[ProductDataStorage::PRODUCT_QUANTITY_KEY]);
     }
     $this->fillEntityData($requestProductItem, $itemData);
     if (!$requestProductItem->getProductUnit()) {
         /** @var ProductUnitPrecision $unitPrecision */
         $unitPrecision = $product->getUnitPrecisions()->first();
         if (!$unitPrecision) {
             return;
         }
         /** @var ProductUnit $unit */
         $unit = $unitPrecision->getUnit();
         if (!$unit) {
             return;
         }
         $requestProductItem->setProductUnit($unit);
     }
     if ($requestProductItem->getProductUnit()) {
         $entity->addRequestProduct($requestProduct);
     }
 }
 /**
  * @depends testProperties
  */
 public function testSetProduct()
 {
     $product = (new Product())->setSku('rfp-sku');
     $requestProduct = new RequestProduct();
     $this->assertNull($requestProduct->getProductSku());
     $requestProduct->setProduct($product);
     $this->assertEquals($product->getSku(), $requestProduct->getProductSku());
 }
 /**
  * "Success" form handler
  *
  * @param ShoppingList $entity
  * @return bool
  */
 protected function onSuccess(ShoppingList $entity)
 {
     $rfpRequest = new RFPRequest();
     $rfpRequest->setFirstName($this->user->getFirstName())->setLastName($this->user->getLastName())->setEmail($this->user->getEmail())->setPhone('')->setRole('')->setBody('')->setCompany($this->user->getOrganization() ? $this->user->getOrganization()->getName() : '')->setAccountUser($this->user)->setAccount($this->user->getAccount())->setStatus($this->requestStatus);
     foreach ($entity->getLineItems() as $shoppingListLineItem) {
         $requestProduct = new RequestProduct();
         $requestProduct->setProduct($shoppingListLineItem->getProduct());
         $requestProductItem = new RequestProductItem();
         $requestProductItem->setQuantity($shoppingListLineItem->getQuantity())->setProductUnit($shoppingListLineItem->getUnit());
         $requestProduct->addRequestProductItem($requestProductItem);
         $rfpRequest->addRequestProduct($requestProduct);
     }
     try {
         $this->manager->persist($rfpRequest);
         $this->manager->flush();
         $this->rfpRequest = $rfpRequest;
     } catch (DBALException $e) {
         $this->exception = $e;
         return false;
     }
     return true;
 }
 /**
  * @param Request $request
  * @param ObjectManager $manager
  */
 protected function processRequestProducts(Request $request, ObjectManager $manager)
 {
     $products = $this->getProducts($manager);
     $currencies = $this->getCurrencies();
     for ($i = 0; $i < rand(1, 10); $i++) {
         $product = $products[rand(0, count($products) - 1)];
         $unitPrecisions = $product->getUnitPrecisions();
         if (!count($unitPrecisions)) {
             continue;
         }
         $requestProduct = new RequestProduct();
         $requestProduct->setProduct($product);
         $requestProduct->setComment(sprintf('Notes %s', $i));
         for ($j = 0; $j < rand(1, 10); $j++) {
             $productUnit = $unitPrecisions[rand(0, count($unitPrecisions) - 1)]->getUnit();
             $currency = $currencies[rand(0, count($currencies) - 1)];
             $requestProductItem = new RequestProductItem();
             $requestProductItem->setPrice(Price::create(rand(1, 100), $currency))->setQuantity(rand(1, 100))->setProductUnit($productUnit);
             $requestProduct->addRequestProductItem($requestProductItem);
         }
         $request->addRequestProduct($requestProduct);
     }
 }