/**
  * {@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 testAddRequestProductItem()
 {
     $requestProduct = new RequestProduct();
     $requestProductItem = new RequestProductItem();
     $this->assertNull($requestProductItem->getRequestProduct());
     $requestProduct->addRequestProductItem($requestProductItem);
     $this->assertEquals($requestProduct, $requestProductItem->getRequestProduct());
 }
 /**
  * @param RequestProduct $inputData
  * @param array $expectedData
  *
  * @dataProvider preSetDataProvider
  */
 public function testPreSetData(RequestProduct $inputData = null, array $expectedData = [])
 {
     $productSku = $inputData ? $inputData->getProductSku() : '';
     $placeholder = $expectedData['configs']['placeholder'];
     $this->translator->expects($placeholder ? $this->once() : $this->never())->method('trans')->with($placeholder, ['{title}' => $productSku])->will($this->returnValue($placeholder));
     $form = $this->factory->create($this->formType);
     $this->formType->preSetData(new FormEvent($form, $inputData));
     $this->assertTrue($form->has('product'));
     $config = $form->get('product')->getConfig();
     $this->assertEquals(ProductSelectType::NAME, $config->getType()->getName());
     $options = $form->get('product')->getConfig()->getOptions();
     foreach ($expectedData as $key => $value) {
         $this->assertEquals($value, $options[$key], $key);
     }
 }
 /**
  * "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);
     }
 }
 /**
  * @param QuoteProduct $quoteProduct
  * @param RFPRequestProduct $requestProduct
  */
 protected function processRequestProductItems(QuoteProduct $quoteProduct, RFPRequestProduct $requestProduct)
 {
     foreach ($requestProduct->getRequestProductItems() as $requestProductItem) {
         $quoteProductRequest = new QuoteProductRequest();
         $quoteProductRequest->setPrice($requestProductItem->getPrice())->setQuantity($requestProductItem->getQuantity())->setProductUnit($requestProductItem->getProductUnit());
         $quoteProduct->addQuoteProductRequest($quoteProductRequest);
     }
 }
 /**
  * @param int $productId
  * @param string $comment
  * @param RequestProductItem[] $items
  * @return RequestProduct
  */
 protected function getRequestProduct($productId = null, $comment = null, array $items = [])
 {
     /* @var $product Product */
     $product = null;
     if ($productId) {
         $product = $this->getEntity('OroB2B\\Bundle\\ProductBundle\\Entity\\Product', $productId);
         foreach ($this->getProductUnitPrecisions() as $precision) {
             $product->addUnitPrecision($precision);
         }
     }
     $requestProduct = new RequestProduct();
     $requestProduct->setRequest($this->getEntity('OroB2B\\Bundle\\RFPBundle\\Entity\\Request', $productId))->setProduct($product)->setComment($comment);
     foreach ($items as $item) {
         $requestProduct->addRequestProductItem($item);
     }
     return $requestProduct;
 }